attr: add flag --source
to work with tree-ish
The contents of the .gitattributes files may evolve over time, but "git check-attr" always checks attributes against them in the working tree and/or in the index. It may be beneficial to optionally allow the users to check attributes taken from a commit other than HEAD against paths. Add a new flag `--source` which will allow users to check the attributes against a commit (actually any tree-ish would do). When the user uses this flag, we go through the stack of .gitattributes files but instead of checking the current working tree and/or in the index, we check the blobs from the provided tree-ish object. This allows the command to also be used in bare repositories. Since we use a tree-ish object, the user can pass "--source HEAD:subdirectory" and all the attributes will be looked up as if subdirectory was the root directory of the repository. We cannot simply use the `<rev>:<path>` syntax without the `--source` flag, similar to how it is used in `git show` because any non-flag parameter before `--` is treated as an attribute and any parameter after `--` is treated as a pathname. The change involves creating a new function `read_attr_from_blob`, which given the path reads the blob for the path against the provided source and parses the attributes line by line. This function is plugged into `read_attr()` function wherein we go through the stack of attributes files. Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Toon Claes <toon@iotcl.com> Co-authored-by: toon@iotcl.com Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
c847e8c228
commit
47cfc9bd7d
@ -391,7 +391,7 @@ enum ll_merge_result ll_merge(mmbuffer_t *result_buf,
|
||||
normalize_file(theirs, path, istate);
|
||||
}
|
||||
|
||||
git_check_attr(istate, path, check);
|
||||
git_check_attr(istate, NULL, path, check);
|
||||
ll_driver_name = check->items[0].value;
|
||||
if (check->items[1].value) {
|
||||
marker_size = atoi(check->items[1].value);
|
||||
@ -419,7 +419,7 @@ int ll_merge_marker_size(struct index_state *istate, const char *path)
|
||||
|
||||
if (!check)
|
||||
check = attr_check_initl("conflict-marker-size", NULL);
|
||||
git_check_attr(istate, path, check);
|
||||
git_check_attr(istate, NULL, path, check);
|
||||
if (check->items[0].value) {
|
||||
marker_size = atoi(check->items[0].value);
|
||||
if (marker_size <= 0)
|
||||
|
Reference in New Issue
Block a user