Re: [PATCH v2 09/19] Allow querying all attributes on a file
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 2, 2011, 15:34 UTC
- Message-ID
- <7vwrevg73x.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1311828418-2676-10-git-send-email-mhagger@alum.mit.edu>
Michael Haggerty <mhagger@alum.mit.edu> writes:
Show 17 quoted lines
> Add a function, git_allattrs(), that reports on all attributes that > are set on a path. > > Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> > --- > Documentation/technical/api-gitattributes.txt | 45 +++++++++++++++++------- > attr.c | 43 +++++++++++++++++++++++ > attr.h | 9 +++++ > 3 files changed, 84 insertions(+), 13 deletions(-) > > diff --git a/Documentation/technical/api-gitattributes.txt b/Documentation/technical/api-gitattributes.txt > index ab3a84d..640240e 100644 > --- a/Documentation/technical/api-gitattributes.txt > +++ b/Documentation/technical/api-gitattributes.txt > @@ -22,19 +22,6 @@ Data Structure > ... > (JC)
The last line, I think, can now be dropped. This was a marker saying "we lack documentation for this API; bug this person for necessary information and write one".
Show 28 quoted lines
> diff --git a/attr.c b/attr.c
> index bfa1f43..9c2fca8 100644
> --- a/attr.c
> +++ b/attr.c
> @@ -737,6 +737,49 @@ int git_checkattr(const char *path, int num, struct git_attr_check *check)
> return 0;
> }
>
> +int git_allattrs(const char *path, int *num, struct git_attr_check **check)
> +{
> + struct attr_stack *stk;
> + const char *cp;
> + int dirlen, pathlen, i, rem, count, j;
> +
> + bootstrap_attr_stack();
> + for (i = 0; i < attr_nr; i++)
> + check_all_attr[i].value = ATTR__UNKNOWN;
> +
> + pathlen = strlen(path);
> + cp = strrchr(path, '/');
> + if (!cp)
> + dirlen = 0;
> + else
> + dirlen = cp - path;
> + prepare_attr_stack(path, dirlen);
> + rem = attr_nr;
> + for (stk = attr_stack; 0 < rem && stk; stk = stk->prev)
> + rem = fill(path, pathlen, stk, rem);Shouldn't the above part at least should be refactored instead of copied and pasted from git_checkattr()?