On 08/13, Johannes Schindelin wrote:
> Hi Thomas,
> 
> On Sun, 12 Aug 2018, Thomas Gummerer wrote:
> 
> > On 08/10, Johannes Schindelin via GitGitGadget wrote:
> > > From: Johannes Schindelin <johannes.schinde...@gmx.de>
> >
> > [...]
> > 
> > I don't think this handles "--" quite as would be expected.  Trying to
> > use "git range-diff -- js/range-diff-v4...HEAD" I get:
> > 
> >     $ ./git range-diff -- js/range-diff-v4...HEAD
> >     error: need two commit ranges
> >     usage: git range-diff [<options>] <old-base>..<old-tip> 
> > <new-base>..<new-tip>
> >        or: git range-diff [<options>] <old-tip>...<new-tip>
> >        or: git range-diff [<options>] <base> <old-tip> <new-tip>
> > 
> >         --creation-factor <n>
> >                               Percentage by which creation is weighted
> >         --no-dual-color       color both diff and diff-between-diffs
> > 
> > while what I would have expected is to actually get a range diff.
> > This happens because after we break out of the loop we don't add the
> > actual ranges to argv, but just skip them instead.
> 
> Ouch, good point.
> 
> > I think something like the following should be squashed in to this
> > patch.
> > 
> > --->8---
> > diff --git a/builtin/range-diff.c b/builtin/range-diff.c
> > index ef3ba22e29..132574c57a 100644
> > --- a/builtin/range-diff.c
> > +++ b/builtin/range-diff.c
> > @@ -53,6 +53,11 @@ int cmd_range_diff(int argc, const char **argv, const 
> > char *prefix)
> >                 else
> >                         i += c;
> >         }
> > +       if (i < argc && !strcmp("--", argv[i])) {
> > +               i++; j++;
> > +               while (i < argc)
> > +                       argv[j++] = argv[i++];
> > +       }
> >         argc = j;
> >         diff_setup_done(&diffopt);
> 
> I do not think that is correct. The original idea was for the first
> `parse_options()` call to keep the dashdash, for the second one to keep
> the dashdash, too, and for the final one to swallow it.
> 
> Also, if `i < argc` at this point, we already know that `argv[i]` refers
> to the dashdash, otherwise the previous loop would not have exited early.
> 
> I went with this simple version instead:
> 
>       while (i < argc)
>               argv[j++] = argv[i++];

Right, that's much better, thanks!

> Thanks!
> Dscho

Reply via email to