From: Junio C Hamano <gitster@pobox.com>
To: Adam Spiers <git@adamspiers.org>
Cc: "git list" <git@vger.kernel.org>, "Jeff King" <peff@peff.net>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: Re: [PATCH v2 10/14] For each exclude pattern, store information about where it came from
Date: Thu, 20 Sep 2012 14:31:57 -0700 [thread overview]
Message-ID: <7vzk4k8joy.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <1348170383-15751-11-git-send-email-git@adamspiers.org> (Adam Spiers's message of "Thu, 20 Sep 2012 20:46:19 +0100")
Adam Spiers <git@adamspiers.org> writes:
> void add_exclude(const char *string, const char *base,
> - int baselen, struct exclude_list *el)
> + int baselen, struct exclude_list *el, const char *src, int srcpos)
> {
> struct exclude *x;
> size_t len;
> @@ -341,6 +341,8 @@ void add_exclude(const char *string, const char *base,
> x->base = base;
> x->baselen = baselen;
> x->flags = flags;
> + x->src = src;
> + x->srcpos = srcpos;
Hrm, don't all elements "x" in "el" share the same "src", even if
their srcpos may be different?
> if (!strchr(string, '/'))
> x->flags |= EXC_FLAG_NODIR;
> x->nowildcardlen = simple_length(string);
> @@ -393,7 +395,7 @@ int add_excludes_from_file_to_list(const char *fname,
> int check_index)
> {
> struct stat st;
> - int fd, i;
> + int fd, i, lineno = 1;
> size_t size = 0;
> char *buf, *entry;
>
> @@ -438,8 +440,9 @@ int add_excludes_from_file_to_list(const char *fname,
> if (buf[i] == '\n') {
> if (entry != buf + i && entry[0] != '#') {
> buf[i - (i && buf[i-1] == '\r')] = 0;
> - add_exclude(entry, base, baselen, el);
> + add_exclude(entry, base, baselen, el, fname, lineno);
> }
> + lineno++;
> entry = buf + i + 1;
> }
> }
> @@ -474,8 +477,10 @@ static void prep_exclude(struct dir_struct *dir, const char *base, int baselen)
> !strncmp(dir->basebuf, base, stk->baselen))
> break;
> dir->exclude_stack = stk->prev;
> - while (stk->exclude_ix < el->nr)
> - free(el->excludes[--el->nr]);
> + while (stk->exclude_ix < el->nr) {
> + struct exclude *exclude = el->excludes[--el->nr];
> + free(exclude);
> + }
> free(stk->filebuf);
> free(stk);
> }
> @@ -502,7 +507,15 @@ static void prep_exclude(struct dir_struct *dir, const char *base, int baselen)
> memcpy(dir->basebuf + current, base + current,
> stk->baselen - current);
> strcpy(dir->basebuf + stk->baselen, dir->exclude_per_dir);
> - add_excludes_from_file_to_list(dir->basebuf,
> +
> + /* dir->basebuf gets reused by the traversal, but we
> + * need fname to remain unchanged to ensure the src
> + * member of each struct exclude correctly back-references
> + * its source file.
> + */
> + char *fname = strdup(dir->basebuf);
/*
* We try to format our multi-line comments
* like this.
*
* By the way, who owns x->src and who is responsible for
* freeing it when the exclude-stack is popped to make them
* no longer necessary?
*
* Oh, by the way, that is a decl-after-statement.
*/
> +
> + add_excludes_from_file_to_list(fname,
> dir->basebuf, stk->baselen,
> &stk->filebuf, el, 1);
> dir->exclude_stack = stk;
> diff --git a/dir.h b/dir.h
> index 19beddb..ebb0367 100644
> --- a/dir.h
> +++ b/dir.h
> @@ -31,6 +31,9 @@ struct exclude_list {
> int baselen;
> int to_exclude;
> int flags;
> + const char *src;
> + int srcpos; /* counting starts from 1 for line numbers in ignore files,
> + and from -1 decrementing for patterns from CLI (--exclude) */
> } **excludes;
> };
>
> @@ -123,7 +126,7 @@ extern int add_excludes_from_file_to_list(const char *fname, const char *base, i
> char **buf_p, struct exclude_list *el, int check_index);
> extern void add_excludes_from_file(struct dir_struct *, const char *fname);
> extern void add_exclude(const char *string, const char *base,
> - int baselen, struct exclude_list *el);
> + int baselen, struct exclude_list *el, const char *src, int srcpos);
> extern void free_excludes(struct exclude_list *el);
> extern int file_exists(const char *);
next prev parent reply other threads:[~2012-09-20 21:32 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-02 0:12 [PATCH 0/9] new git check-ignore sub-command Adam Spiers
2012-09-02 0:12 ` [PATCH 1/9] Update directory listing API doc to match code Adam Spiers
2012-09-02 0:12 ` [PATCH 2/9] Improve documentation and comments regarding directory traversal API Adam Spiers
2012-09-02 0:12 ` [PATCH 3/9] Rename cryptic 'which' variable to more consistent name Adam Spiers
2012-09-02 19:56 ` Junio C Hamano
2012-09-02 0:12 ` [PATCH 4/9] Refactor excluded_from_list Adam Spiers
2012-09-04 12:32 ` Nguyen Thai Ngoc Duy
2012-09-02 0:12 ` [PATCH 5/9] Refactor excluded and path_excluded Adam Spiers
2012-09-04 12:40 ` Nguyen Thai Ngoc Duy
2012-09-04 17:23 ` Junio C Hamano
2012-09-05 10:28 ` Nguyen Thai Ngoc Duy
2012-09-06 3:21 ` Junio C Hamano
2012-09-06 12:13 ` Nguyen Thai Ngoc Duy
2012-09-06 14:59 ` Thiago Farina
2012-09-06 15:05 ` Nguyen Thai Ngoc Duy
2012-09-06 17:42 ` Adam Spiers
2012-09-06 21:07 ` Junio C Hamano
2012-09-02 0:12 ` [PATCH 6/9] For each exclude pattern, store information about where it came from Adam Spiers
2012-09-02 17:00 ` Philip Oakley
2012-09-02 19:02 ` Junio C Hamano
2012-09-02 22:36 ` Philip Oakley
2012-09-06 17:56 ` Adam Spiers
2012-09-02 0:12 ` [PATCH 7/9] Extract some useful pathspec handling code from builtin/add.c into a library Adam Spiers
2012-09-02 0:12 ` [PATCH 8/9] Provide free_directory() for reclaiming dir_struct memory Adam Spiers
2012-09-02 0:12 ` [PATCH 9/9] Add git-check-ignores Adam Spiers
2012-09-02 10:41 ` Nguyen Thai Ngoc Duy
2012-09-02 14:50 ` Adam Spiers
2012-09-02 20:38 ` Junio C Hamano
2012-09-03 4:14 ` Nguyen Thai Ngoc Duy
2012-09-02 20:41 ` Junio C Hamano
2012-09-03 1:47 ` Junio C Hamano
2012-09-20 19:46 ` [PATCH v2 00/14] new git check-ignore sub-command Adam Spiers
2012-09-20 19:46 ` [PATCH v2 01/14] Update directory listing API doc to match code Adam Spiers
2012-09-20 19:46 ` [PATCH v2 02/14] Improve documentation and comments regarding directory traversal API Adam Spiers
2012-09-20 19:46 ` [PATCH v2 03/14] Rename cryptic 'which' variable to more consistent name Adam Spiers
2012-09-20 19:46 ` [PATCH v2 04/14] Rename path_excluded() to is_path_excluded() Adam Spiers
2012-09-20 19:46 ` [PATCH v2 05/14] Rename excluded_from_list() to is_excluded_from_list() Adam Spiers
2012-09-20 19:46 ` [PATCH v2 06/14] Rename excluded() to is_excluded() Adam Spiers
2012-09-20 19:46 ` [PATCH v2 07/14] Refactor is_excluded_from_list() Adam Spiers
2012-09-20 19:46 ` [PATCH v2 08/14] Refactor is_excluded() Adam Spiers
2012-09-20 19:46 ` [PATCH v2 09/14] Refactor is_path_excluded() Adam Spiers
2012-09-20 19:46 ` [PATCH v2 10/14] For each exclude pattern, store information about where it came from Adam Spiers
2012-09-20 21:31 ` Junio C Hamano [this message]
2012-12-26 15:46 ` Adam Spiers
2012-09-20 19:46 ` [PATCH v2 11/14] Refactor treat_gitlinks() Adam Spiers
2012-09-20 19:46 ` [PATCH v2 12/14] Extract some useful pathspec handling code from builtin/add.c into a library Adam Spiers
2012-09-21 7:54 ` Michael Haggerty
2012-09-20 19:46 ` [PATCH v2 13/14] Provide free_directory() for reclaiming dir_struct memory Adam Spiers
2012-09-21 8:03 ` Michael Haggerty
2012-09-21 16:11 ` Junio C Hamano
2012-09-20 19:46 ` [PATCH v2 14/14] Add git-check-ignore sub-command Adam Spiers
2012-09-21 5:44 ` Johannes Sixt
2012-09-25 23:25 ` Junio C Hamano
2012-09-26 5:49 ` Johannes Sixt
2012-09-26 14:03 ` Junio C Hamano
2012-09-21 7:23 ` Michael Haggerty
2012-09-21 16:27 ` Junio C Hamano
2012-09-21 19:42 ` Junio C Hamano
2012-09-20 21:26 ` [PATCH v2 00/14] new git check-ignore sub-command Junio C Hamano
2012-09-20 21:43 ` Junio C Hamano
2012-09-20 23:45 ` Adam Spiers
2012-09-21 4:34 ` Junio C Hamano
2012-12-16 19:35 ` [PATCH 0/3] Help newbie git developers avoid obvious pitfalls Adam Spiers
2012-12-16 19:35 ` [PATCH 1/3] SubmittingPatches: add convention of prefixing commit messages Adam Spiers
2012-12-16 23:15 ` Junio C Hamano
2012-12-16 19:36 ` [PATCH 2/3] Documentation: move support for old compilers to CodingGuidelines Adam Spiers
2012-12-16 19:36 ` [PATCH 3/3] Makefile: use -Wdeclaration-after-statement if supported Adam Spiers
2012-12-17 1:52 ` Junio C Hamano
2012-12-17 2:15 ` Adam Spiers
2012-12-17 4:18 ` Junio C Hamano
2012-12-22 12:25 ` Adam Spiers
2012-12-22 18:39 ` Junio C Hamano
2012-12-26 15:44 ` [PATCH v2 00/14] new git check-ignore sub-command Adam Spiers
2012-09-21 19:00 ` Junio C Hamano
2012-12-16 23:04 ` compiler checks Adam Spiers
2012-09-24 22:31 ` [PATCH v2 00/14] new git check-ignore sub-command Junio C Hamano
2012-09-04 13:06 ` [PATCH 9/9] Add git-check-ignores Nguyen Thai Ngoc Duy
2012-09-04 17:26 ` Junio C Hamano
2012-09-05 10:25 ` Nguyen Thai Ngoc Duy
2012-09-10 11:15 ` Adam Spiers
2012-09-10 11:09 ` Adam Spiers
2012-09-10 12:25 ` Nguyen Thai Ngoc Duy
2012-09-10 16:30 ` Junio C Hamano
2012-09-02 20:35 ` [PATCH 0/9] new git check-ignore sub-command Junio C Hamano
2012-09-06 17:44 ` Adam Spiers
2012-09-07 10:03 ` Adam Spiers
2012-09-07 16:45 ` Junio C Hamano
2012-09-19 19:00 ` [PATCH] Document conventions on static initialization and else cuddling Adam Spiers
2012-09-19 20:43 ` Junio C Hamano
2012-09-19 21:14 ` Adam Spiers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vzk4k8joy.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@adamspiers.org \
--cc=git@vger.kernel.org \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).