47cfc9bd7d
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>
126 lines
3.3 KiB
Plaintext
126 lines
3.3 KiB
Plaintext
git-check-attr(1)
|
|
=================
|
|
|
|
NAME
|
|
----
|
|
git-check-attr - Display gitattributes information
|
|
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
'git check-attr' [--source <tree-ish>] [-a | --all | <attr>...] [--] <pathname>...
|
|
'git check-attr' --stdin [-z] [--source <tree-ish>] [-a | --all | <attr>...]
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
For every pathname, this command will list if each attribute is 'unspecified',
|
|
'set', or 'unset' as a gitattribute on that pathname.
|
|
|
|
OPTIONS
|
|
-------
|
|
-a, --all::
|
|
List all attributes that are associated with the specified
|
|
paths. If this option is used, then 'unspecified' attributes
|
|
will not be included in the output.
|
|
|
|
--cached::
|
|
Consider `.gitattributes` in the index only, ignoring the working tree.
|
|
|
|
--stdin::
|
|
Read pathnames from the standard input, one per line,
|
|
instead of from the command-line.
|
|
|
|
-z::
|
|
The output format is modified to be machine-parsable.
|
|
If `--stdin` is also given, input paths are separated
|
|
with a NUL character instead of a linefeed character.
|
|
|
|
--source=<tree-ish>::
|
|
Check attributes against the specified tree-ish. It is common to
|
|
specify the source tree by naming a commit, branch or tag associated
|
|
with it.
|
|
|
|
\--::
|
|
Interpret all preceding arguments as attributes and all following
|
|
arguments as path names.
|
|
|
|
If none of `--stdin`, `--all`, or `--` is used, the first argument
|
|
will be treated as an attribute and the rest of the arguments as
|
|
pathnames.
|
|
|
|
OUTPUT
|
|
------
|
|
|
|
The output is of the form:
|
|
<path> COLON SP <attribute> COLON SP <info> LF
|
|
|
|
unless `-z` is in effect, in which case NUL is used as delimiter:
|
|
<path> NUL <attribute> NUL <info> NUL
|
|
|
|
|
|
<path> is the path of a file being queried, <attribute> is an attribute
|
|
being queried and <info> can be either:
|
|
|
|
'unspecified';; when the attribute is not defined for the path.
|
|
'unset';; when the attribute is defined as false.
|
|
'set';; when the attribute is defined as true.
|
|
<value>;; when a value has been assigned to the attribute.
|
|
|
|
Buffering happens as documented under the `GIT_FLUSH` option in
|
|
linkgit:git[1]. The caller is responsible for avoiding deadlocks
|
|
caused by overfilling an input buffer or reading from an empty output
|
|
buffer.
|
|
|
|
EXAMPLES
|
|
--------
|
|
|
|
In the examples, the following '.gitattributes' file is used:
|
|
---------------
|
|
*.java diff=java -crlf myAttr
|
|
NoMyAttr.java !myAttr
|
|
README caveat=unspecified
|
|
---------------
|
|
|
|
* Listing a single attribute:
|
|
---------------
|
|
$ git check-attr diff org/example/MyClass.java
|
|
org/example/MyClass.java: diff: java
|
|
---------------
|
|
|
|
* Listing multiple attributes for a file:
|
|
---------------
|
|
$ git check-attr crlf diff myAttr -- org/example/MyClass.java
|
|
org/example/MyClass.java: crlf: unset
|
|
org/example/MyClass.java: diff: java
|
|
org/example/MyClass.java: myAttr: set
|
|
---------------
|
|
|
|
* Listing all attributes for a file:
|
|
---------------
|
|
$ git check-attr --all -- org/example/MyClass.java
|
|
org/example/MyClass.java: diff: java
|
|
org/example/MyClass.java: myAttr: set
|
|
---------------
|
|
|
|
* Listing an attribute for multiple files:
|
|
---------------
|
|
$ git check-attr myAttr -- org/example/MyClass.java org/example/NoMyAttr.java
|
|
org/example/MyClass.java: myAttr: set
|
|
org/example/NoMyAttr.java: myAttr: unspecified
|
|
---------------
|
|
|
|
* Not all values are equally unambiguous:
|
|
---------------
|
|
$ git check-attr caveat README
|
|
README: caveat: unspecified
|
|
---------------
|
|
|
|
SEE ALSO
|
|
--------
|
|
linkgit:gitattributes[5].
|
|
|
|
GIT
|
|
---
|
|
Part of the linkgit:git[1] suite
|