Merge branch 'jc/maint-1.6.6-pathspec-stdin-and-cmdline'
authorJunio C Hamano <gitster@pobox.com>
Wed, 11 May 2011 21:57:45 +0000 (14:57 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 May 2011 23:07:14 +0000 (16:07 -0700)
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

1  2 
revision.c

diff --cc revision.c
index 7b9eaefae4ed03e994c2122453144b3c09591b9c,047e0170056e236e4d096f45de4a56cc461308c6..0390f95742a2c68c96bef6d1b1d1be56b04f1d65
@@@ -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.
   * 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;
                        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;