mirror of
https://github.com/git/git.git
synced 2025-04-02 02:30:54 +00:00
Allow querying all attributes on a file
Add a function, git_all_attrs(), that reports on all attributes that are set on a path. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7373eab48e
commit
ee548df300
@ -22,19 +22,6 @@ Data Structure
|
|||||||
to `git_checkattr()` function, and receives the results.
|
to `git_checkattr()` function, and receives the results.
|
||||||
|
|
||||||
|
|
||||||
Calling Sequence
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* Prepare an array of `struct git_attr_check` to define the list of
|
|
||||||
attributes you would want to check. To populate this array, you would
|
|
||||||
need to define necessary attributes by calling `git_attr()` function.
|
|
||||||
|
|
||||||
* Call git_checkattr() to check the attributes for the path.
|
|
||||||
|
|
||||||
* Inspect `git_attr_check` structure to see how each of the attribute in
|
|
||||||
the array is defined for the path.
|
|
||||||
|
|
||||||
|
|
||||||
Attribute Values
|
Attribute Values
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
@ -58,6 +45,19 @@ If none of the above returns true, `.value` member points at a string
|
|||||||
value of the attribute for the path.
|
value of the attribute for the path.
|
||||||
|
|
||||||
|
|
||||||
|
Querying Specific Attributes
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Prepare an array of `struct git_attr_check` to define the list of
|
||||||
|
attributes you would want to check. To populate this array, you would
|
||||||
|
need to define necessary attributes by calling `git_attr()` function.
|
||||||
|
|
||||||
|
* Call `git_checkattr()` to check the attributes for the path.
|
||||||
|
|
||||||
|
* Inspect `git_attr_check` structure to see how each of the attribute in
|
||||||
|
the array is defined for the path.
|
||||||
|
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
|
|
||||||
@ -109,4 +109,20 @@ static void setup_check(void)
|
|||||||
}
|
}
|
||||||
------------
|
------------
|
||||||
|
|
||||||
(JC)
|
|
||||||
|
Querying All Attributes
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
To get the values of all attributes associated with a file:
|
||||||
|
|
||||||
|
* Call `git_all_attrs()`, which returns an array of `git_attr_check`
|
||||||
|
structures.
|
||||||
|
|
||||||
|
* Iterate over the `git_attr_check` array to examine the attribute
|
||||||
|
names and values. The name of the attribute described by a
|
||||||
|
`git_attr_check` object can be retrieved via
|
||||||
|
`git_attr_name(check[i].attr)`. (Please note that no items will be
|
||||||
|
returned for unset attributes, so `ATTR_UNSET()` will return false
|
||||||
|
for all returned `git_array_check` objects.)
|
||||||
|
|
||||||
|
* Free the `git_array_check` array.
|
||||||
|
28
attr.c
28
attr.c
@ -747,6 +747,34 @@ int git_checkattr(const char *path, int num, struct git_attr_check *check)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int git_all_attrs(const char *path, int *num, struct git_attr_check **check)
|
||||||
|
{
|
||||||
|
int i, count, j;
|
||||||
|
|
||||||
|
collect_all_attrs(path);
|
||||||
|
|
||||||
|
/* Count the number of attributes that are set. */
|
||||||
|
count = 0;
|
||||||
|
for (i = 0; i < attr_nr; i++) {
|
||||||
|
const char *value = check_all_attr[i].value;
|
||||||
|
if (value != ATTR__UNSET && value != ATTR__UNKNOWN)
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
*num = count;
|
||||||
|
*check = xmalloc(sizeof(**check) * count);
|
||||||
|
j = 0;
|
||||||
|
for (i = 0; i < attr_nr; i++) {
|
||||||
|
const char *value = check_all_attr[i].value;
|
||||||
|
if (value != ATTR__UNSET && value != ATTR__UNKNOWN) {
|
||||||
|
(*check)[j].attr = check_all_attr[i].attr;
|
||||||
|
(*check)[j].value = value;
|
||||||
|
++j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void git_attr_set_direction(enum git_attr_direction new, struct index_state *istate)
|
void git_attr_set_direction(enum git_attr_direction new, struct index_state *istate)
|
||||||
{
|
{
|
||||||
enum git_attr_direction old = direction;
|
enum git_attr_direction old = direction;
|
||||||
|
9
attr.h
9
attr.h
@ -38,6 +38,15 @@ char *git_attr_name(struct git_attr *);
|
|||||||
|
|
||||||
int git_checkattr(const char *path, int, struct git_attr_check *);
|
int git_checkattr(const char *path, int, struct git_attr_check *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Retrieve all attributes that apply to the specified path. *num
|
||||||
|
* will be set the the number of attributes on the path; **check will
|
||||||
|
* be set to point at a newly-allocated array of git_attr_check
|
||||||
|
* objects describing the attributes and their values. *check must be
|
||||||
|
* free()ed by the caller.
|
||||||
|
*/
|
||||||
|
int git_all_attrs(const char *path, int *num, struct git_attr_check **check);
|
||||||
|
|
||||||
enum git_attr_direction {
|
enum git_attr_direction {
|
||||||
GIT_ATTR_CHECKIN,
|
GIT_ATTR_CHECKIN,
|
||||||
GIT_ATTR_CHECKOUT,
|
GIT_ATTR_CHECKOUT,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user