From: Adam Spiers <git@adamspiers.org>
To: git list <git@vger.kernel.org>
Subject: [PATCH 1/5] check-ignore: move setup into cmd_check_ignore()
Date: Thu, 11 Apr 2013 02:59:31 +0100 [thread overview]
Message-ID: <1365645575-11428-1-git-send-email-git@adamspiers.org> (raw)
In-Reply-To: <20130408181311.GA14903@pacific.linksys.moosehall>
Initialisation of the dir_struct and path_exclude_check structs was
previously done within check_ignore(). This was acceptable since
check_ignore() was only called once per check-ignore invocation;
however the next commit will convert it into an inner loop which is
called once per line of STDIN when --stdin is given. Therefore moving
the initialisation code out into cmd_check_ignore() ensures that
initialisation is still only performed once per check-ignore
invocation, and consequently that the output is identical whether
pathspecs are provided as CLI arguments or via STDIN.
Signed-off-by: Adam Spiers <git@adamspiers.org>
---
builtin/check-ignore.c | 39 ++++++++++++++++++++-------------------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c
index 0240f99..0a4eef1 100644
--- a/builtin/check-ignore.c
+++ b/builtin/check-ignore.c
@@ -53,30 +53,20 @@ static void output_exclude(const char *path, struct exclude *exclude)
}
}
-static int check_ignore(const char *prefix, const char **pathspec)
+static int check_ignore(struct path_exclude_check check,
+ const char *prefix, const char **pathspec)
{
- struct dir_struct dir;
const char *path, *full_path;
char *seen;
int num_ignored = 0, dtype = DT_UNKNOWN, i;
- struct path_exclude_check check;
struct exclude *exclude;
- /* read_cache() is only necessary so we can watch out for submodules. */
- if (read_cache() < 0)
- die(_("index file corrupt"));
-
- memset(&dir, 0, sizeof(dir));
- dir.flags |= DIR_COLLECT_IGNORED;
- setup_standard_excludes(&dir);
-
if (!pathspec || !*pathspec) {
if (!quiet)
fprintf(stderr, "no pathspec given.\n");
return 0;
}
- path_exclude_check_init(&check, &dir);
/*
* look for pathspecs matching entries in the index, since these
* should not be ignored, in order to be consistent with
@@ -100,13 +90,11 @@ static int check_ignore(const char *prefix, const char **pathspec)
}
}
free(seen);
- clear_directory(&dir);
- path_exclude_check_clear(&check);
return num_ignored;
}
-static int check_ignore_stdin_paths(const char *prefix)
+static int check_ignore_stdin_paths(struct path_exclude_check check, const char *prefix)
{
struct strbuf buf, nbuf;
char **pathspec = NULL;
@@ -129,17 +117,18 @@ static int check_ignore_stdin_paths(const char *prefix)
}
ALLOC_GROW(pathspec, nr + 1, alloc);
pathspec[nr] = NULL;
- num_ignored = check_ignore(prefix, (const char **)pathspec);
+ num_ignored = check_ignore(check, prefix, (const char **)pathspec);
maybe_flush_or_die(stdout, "attribute to stdout");
strbuf_release(&buf);
strbuf_release(&nbuf);
- free(pathspec);
return num_ignored;
}
int cmd_check_ignore(int argc, const char **argv, const char *prefix)
{
int num_ignored;
+ struct dir_struct dir;
+ struct path_exclude_check check;
git_config(git_default_config, NULL);
@@ -162,12 +151,24 @@ int cmd_check_ignore(int argc, const char **argv, const char *prefix)
die(_("cannot have both --quiet and --verbose"));
}
+ /* read_cache() is only necessary so we can watch out for submodules. */
+ if (read_cache() < 0)
+ die(_("index file corrupt"));
+
+ memset(&dir, 0, sizeof(dir));
+ dir.flags |= DIR_COLLECT_IGNORED;
+ setup_standard_excludes(&dir);
+
+ path_exclude_check_init(&check, &dir);
if (stdin_paths) {
- num_ignored = check_ignore_stdin_paths(prefix);
+ num_ignored = check_ignore_stdin_paths(check, prefix);
} else {
- num_ignored = check_ignore(prefix, argv);
+ num_ignored = check_ignore(check, prefix, argv);
maybe_flush_or_die(stdout, "ignore to stdout");
}
+ clear_directory(&dir);
+ path_exclude_check_clear(&check);
+
return !num_ignored;
}
--
1.8.2.1.347.g37e0606
next prev parent reply other threads:[~2013-04-11 1:59 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-08 18:13 RFC: two minor tweaks to check-ignore to help git-annex assistant Adam Spiers
2013-04-08 21:56 ` Junio C Hamano
2013-04-08 22:20 ` Jeff King
2013-04-11 1:59 ` Adam Spiers [this message]
2013-04-11 1:59 ` [PATCH 2/5] check-ignore: allow incremental streaming of queries via --stdin Adam Spiers
2013-04-11 5:31 ` Jeff King
2013-04-11 10:55 ` Adam Spiers
2013-04-11 11:20 ` Adam Spiers
2013-04-11 18:33 ` Jeff King
2013-04-11 1:59 ` [PATCH 3/5] Documentation: add caveats about I/O buffering for check-{attr,ignore} Adam Spiers
2013-04-11 5:31 ` Jeff King
2013-04-11 1:59 ` [PATCH 4/5] t0008: remove duplicated test fixture data Adam Spiers
2013-04-11 1:59 ` [PATCH 5/5] check-ignore: add -n / --non-matching option Adam Spiers
2013-04-11 5:25 ` [PATCH 1/5] check-ignore: move setup into cmd_check_ignore() Jeff King
2013-04-11 11:05 ` Adam Spiers
2013-04-11 12:05 ` [PATCH v2 1/5] t0008: remove duplicated test fixture data Adam Spiers
2013-04-11 12:05 ` [PATCH v2 2/5] check-ignore: add -n / --non-matching option Adam Spiers
2013-04-11 12:05 ` [PATCH v2 3/5] check-ignore: move setup into cmd_check_ignore() Adam Spiers
2013-04-11 12:05 ` [PATCH v2 4/5] check-ignore: allow incremental streaming of queries via --stdin Adam Spiers
2013-04-11 19:11 ` Jeff King
2013-04-11 20:31 ` Adam Spiers
2013-04-11 20:40 ` Jeff King
2013-04-22 18:03 ` Junio C Hamano
2013-04-24 8:02 ` Adam Spiers
2013-04-29 22:55 ` [PATCH] t0008: use named pipe (FIFO) to test check-ignore streaming Adam Spiers
2013-04-11 21:04 ` [PATCH v2 4/5] check-ignore: allow incremental streaming of queries via --stdin Aaron Schrab
2013-04-11 22:55 ` Adam Spiers
2013-04-11 12:05 ` [PATCH v2 5/5] Documentation: add caveats about I/O buffering for check-{attr,ignore} Adam Spiers
2013-04-11 18:09 ` Junio C Hamano
2013-04-11 20:12 ` [PATCH v3 " Adam Spiers
2013-04-12 2:12 ` Junio C Hamano
2013-04-12 11:00 ` Adam Spiers
2013-04-11 18:35 ` [PATCH 1/5] check-ignore: move setup into cmd_check_ignore() Jeff King
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1365645575-11428-1-git-send-email-git@adamspiers.org \
--to=git@adamspiers.org \
--cc=git@vger.kernel.org \
/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.
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 NNTP newsgroup(s).