From: Junio C Hamano Date: Wed, 11 May 2011 21:57:45 +0000 (-0700) Subject: Merge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline' X-Git-Tag: v1.7.6-rc0~48^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=1b6d0ae58822ca35ce325dab978c35f0265f7227;p=git.git Merge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline' Update the fix for 1.7.4 maintenance track. * jc/maint-1.6.6-pathspec-stdin-and-cmdline: setup_revisions(): take pathspec from command line and --stdin correctly --- 1b6d0ae58822ca35ce325dab978c35f0265f7227 diff --cc revision.c index 7b9eaefae,047e01700..0390f9574 --- a/revision.c +++ b/revision.c @@@ -1435,44 -1256,16 +1434,16 @@@ void parse_revision_opt(struct rev_inf ctx->argc -= n; } -static int for_each_bad_bisect_ref(each_ref_fn fn, void *cb_data) +static int for_each_bad_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data) { - return for_each_ref_in("refs/bisect/bad", fn, cb_data); + return for_each_ref_in_submodule(submodule, "refs/bisect/bad", fn, cb_data); } -static int for_each_good_bisect_ref(each_ref_fn fn, void *cb_data) +static int for_each_good_bisect_ref(const char *submodule, each_ref_fn fn, void *cb_data) { - return for_each_ref_in("refs/bisect/good", fn, cb_data); + return for_each_ref_in_submodule(submodule, "refs/bisect/good", fn, cb_data); } - static void append_prune_data(const char ***prune_data, const char **av) - { - const char **prune = *prune_data; - int prune_nr; - int prune_alloc; - - if (!prune) { - *prune_data = av; - return; - } - - /* count existing ones */ - for (prune_nr = 0; prune[prune_nr]; prune_nr++) - ; - prune_alloc = prune_nr; /* not really, but we do not know */ - - while (*av) { - ALLOC_GROW(prune, prune_nr+1, prune_alloc); - prune[prune_nr++] = *av; - av++; - } - if (prune) { - ALLOC_GROW(prune, prune_nr+1, prune_alloc); - prune[prune_nr] = NULL; - } - *prune_data = prune; - } - /* * Parse revision information, filling in the "rev_info" structure, * and removing the used arguments from the argument list. @@@ -1480,16 -1273,12 +1451,17 @@@ * Returns the number of arguments left that weren't recognized * (which are also moved to the head of the argument list) */ -int setup_revisions(int argc, const char **argv, struct rev_info *revs, const char *def) +int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct setup_revision_opt *opt) { - int i, flags, left, seen_dashdash, read_from_stdin; + int i, flags, left, seen_dashdash, read_from_stdin, got_rev_arg = 0; - const char **prune_data = NULL; + struct cmdline_pathspec prune_data; + const char *submodule = NULL; + const char *optarg; + int argcount; + memset(&prune_data, 0, sizeof(prune_data)); + if (opt) + submodule = opt->submodule; /* First, search for "--" */ seen_dashdash = 0; @@@ -1615,20 -1379,19 +1587,23 @@@ append_prune_data(&prune_data, argv + i); break; } + else + got_rev_arg = 1; } - if (prune_data) - revs->prune_data = get_pathspec(revs->prefix, prune_data); + if (prune_data.nr) { + ALLOC_GROW(prune_data.path, prune_data.nr+1, prune_data.alloc); + prune_data.path[prune_data.nr++] = NULL; + revs->prune_data = get_pathspec(revs->prefix, prune_data.path); + } if (revs->def == NULL) - revs->def = def; + revs->def = opt ? opt->def : NULL; + if (opt && opt->tweak) + opt->tweak(revs, opt); if (revs->show_merge) prepare_show_merge(revs); - if (revs->def && !revs->pending.nr) { + if (revs->def && !revs->pending.nr && !got_rev_arg) { unsigned char sha1[20]; struct object *object; unsigned mode;