From: Jon Seymour Date: Sat, 25 Sep 2010 16:21:11 GMT Subject: Re: [PATCH v5 4/4] rev-parse: make --flags imply --no-revs for remaining arguments. Message-ID: In-Reply-To: <1285431515-21321-5-git-send-email-jon.seymour@gmail.com> Apologies - it appears I missed on : > case. Will fix in next iteration... jon. On Sun, Sep 26, 2010 at 2:18 AM, Jon Seymour wrote: > This change ensures that git rev-parse --flags complies with its documentation, > namely: > >   "Do not output non-flag parameters". > > Previously: >   $ git rev-parse --flags HEAD >   >   $ > > Now: >   $ git rev-parse --flags HEAD >   $ > > Signed-off-by: Jon Seymour > --- >  Documentation/git-rev-parse.txt |   24 +++++++++++++----------- >  builtin/rev-parse.c             |    6 +++++- >  t/t1510-rev-parse-flags.sh      |   24 +++++++++++++++++++++--- >  3 files changed, 39 insertions(+), 15 deletions(-) > > diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt > index f5e6637..f26fc7b 100644 > --- a/Documentation/git-rev-parse.txt > +++ b/Documentation/git-rev-parse.txt > @@ -49,20 +49,22 @@ OPTIONS >        'git rev-list' command. > >  --flags:: > -       Do not output non-flag parameters which are not also revisions. > -       + > -       If specified, this option causes 'git rev-parse' to stop > -       interpreting remaining arguments as options for its own > -       consumption. As such, this option should be specified > -       after all other options that 'git rev-parse' is expected > -       to interpret. > +       Do not output non-flag parameters. > ++ > +If specified, this option causes 'git rev-parse' to stop > +interpreting remaining arguments as options for its own > +consumption. As such, this option should be specified > +after all other options that 'git rev-parse' is expected > +to interpret. > ++ > +If `--flags` is specified, `--no-revs` is implied. > >  --no-flags:: >        Do not output flag parameters. > -       + > -       If both `--flags` and `--no-flags` are specified, the first > -       option specified wins and the other option is treated like > -       a non-option argument. > ++ > +If both `--flags` and `--no-flags` are specified, the first > +option specified wins and the other option is treated like > +a non-option argument. > >  --default :: >        If there is no parameter given by the user, use `` > diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c > index 2ad269a..0655424 100644 > --- a/builtin/rev-parse.c > +++ b/builtin/rev-parse.c > @@ -521,7 +521,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) >                                continue; >                        } >                        if (!strcmp(arg, "--flags")) { > -                               filter &= ~DO_NONFLAGS; > +                               if (!(filter & DO_FLAGS)) { > +                                       /* prevent --flags being interpreted if --no-flags has been seen */ > +                                       continue; > +                               } > +                               filter &= ~(DO_NONFLAGS|DO_REVS); >                                continue; >                        } >                        if (!strcmp(arg, "--no-flags")) { > diff --git a/t/t1510-rev-parse-flags.sh b/t/t1510-rev-parse-flags.sh > index ef0b4ad..7df2081 100755 > --- a/t/t1510-rev-parse-flags.sh > +++ b/t/t1510-rev-parse-flags.sh > @@ -29,10 +29,10 @@ test_expect_success 'git rev-parse --no-revs --flags HEAD -> ""' \ >        test_cmp expected actual >  ' > > -test_expect_success 'git rev-parse --symbolic --flags HEAD -> "HEAD"' \ > +test_expect_success 'git rev-parse --flags HEAD -> ""' \ >  ' > -       echo HEAD > expected && > -       git rev-parse --symbolic --flags HEAD >actual && > +       : > expected && > +       git rev-parse --flags HEAD >actual && >        test_cmp expected actual >  ' > > @@ -106,4 +106,22 @@ test_expect_success 'git rev-parse --symbolic --no-flags --flags HEAD -> "HEAD"' >        test_cmp expected actual >  ' > > +test_expect_success 'git rev-parse --no-revs file -> "file"' \ > +' > +       echo foo >file && > +       echo file >expected && > +       git rev-parse --no-revs file >actual && > +       test_cmp expected actual > +' > + > +test_expect_success 'git rev-parse --no-revs -- not-a-file -> "-- not-a-file"' \ > +' > +       cat >expected <<-EOF && > +-- > +not-a-file > +       EOF > +       git rev-parse --no-revs -- not-a-file >actual && > +       test_cmp expected actual > +' > + >  test_done > -- > 1.7.3.4.g73371.dirty > >