git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/3] rev-parse: allow --flags to output rev-parse-like flags
@ 2010-09-25 11:22 Jon Seymour
  2010-09-25 11:22 ` [PATCH v3 1/3] rev-parse: stop interpreting flags as options to rev-parse once --flags is specified Jon Seymour
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Jon Seymour @ 2010-09-25 11:22 UTC (permalink / raw)
  To: git, robbat2, casey, avarab; +Cc: Jon Seymour

This series allows git rev-parse --flags to output remaining flag-like arguments
even if such arguments are valid options to git rev-parse itself.

Previously:
  $ git rev-parse --flags -q -X --no-flags -- Y -Z
  -X
  $

Now:
  $ git rev-parse --flags -q -X --no-flags -- Y -Z
  -q -X --no-flags
  $

Note existing behaviour was:
  $ git rev-parse --flags HEAD
  HEAD
  $

This behaviour is unchanged by this series, but the documentation has
been updated to state that --flags:
  Do not output non-flag parameters which are not also revisions.

Reviewers are invited to comment on whether current behaviour
is reasonable or whether the implementation should be changed
to match the current documentation. That is, to make the behaviour:

  $ git rev-parse --flags HEAD
  $ 

This series differs from v2 in that 2/4 of the previous series
was actually unnecesssary since --no-flags --flags -X already
produced no output. The documentation has been reworded to
relect current behaviour more accurately.

Aevar's feedback has been incorporated.

Jon Seymour (3):
  rev-parse: stop interpreting flags as options to rev-parse once
    --flags is specified
  rev-parse: add tests for git rev-parse --flags.
  rev-parse: update documentation of --flags and --no-flags options

 Documentation/git-rev-parse.txt |   14 ++++-
 builtin/rev-parse.c             |    8 +++
 t/t1510-rev-parse-flags.sh      |  109 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 129 insertions(+), 2 deletions(-)
 create mode 100755 t/t1510-rev-parse-flags.sh

-- 
1.7.3.3.g262a8

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v3 1/3] rev-parse: stop interpreting flags as options to rev-parse once --flags is specified
  2010-09-25 11:22 [PATCH v3 0/3] rev-parse: allow --flags to output rev-parse-like flags Jon Seymour
@ 2010-09-25 11:22 ` Jon Seymour
  2010-09-25 11:22 ` [PATCH v3 2/3] rev-parse: add tests for git rev-parse --flags Jon Seymour
  2010-09-25 11:22 ` [PATCH v3 3/3] rev-parse: update documentation of --flags and --no-flags options Jon Seymour
  2 siblings, 0 replies; 4+ messages in thread
From: Jon Seymour @ 2010-09-25 11:22 UTC (permalink / raw)
  To: git, robbat2, casey, avarab; +Cc: Jon Seymour

Current git rev-parse behaviour makes --flags hard to use if the remaining
arguments to git rev-parse contain an option that would otherwise be interpreted
as an option by git rev-parse itself.

So, for example:

  $> git rev-parse --flags -q -X
  -X

Normally one might expect to use -- to prevent -q being interpreted:

  $> git rev-parse --flags -- -q -X
  -q -X

But we can't really use -- in this way, because commands that use
git rev-parse might reasonably expect:

  $> git rev-parse --flags -Y -- -q -X
  -Y

That is, -Y to be regarded as a flag but everything after -- to be uninterpreted.

This proposed change modifies git rev-parse so that git rev-parse stops
interpreting flag arguments as options to git rev-parse once --flags is
interpreted. We also exit early once -- is found.

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
---
 builtin/rev-parse.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index a5a1c86..2ad269a 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -497,8 +497,16 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
 				/* Pass on the "--" if we show anything but files.. */
 				if (filter & (DO_FLAGS | DO_REVS))
 					show_file(arg);
+				if (!(filter & DO_NONFLAGS)) {
+					return 0;
+				}
 				continue;
 			}
+			if (!(filter & DO_NONFLAGS)) {
+				/* once we see --flags, we stop interpreting other flags */
+				 show_flag(arg);
+				 continue;
+			}
 			if (!strcmp(arg, "--default")) {
 				def = argv[i+1];
 				i++;
-- 
1.7.3.2.g216ca.dirty

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 2/3] rev-parse: add tests for git rev-parse --flags.
  2010-09-25 11:22 [PATCH v3 0/3] rev-parse: allow --flags to output rev-parse-like flags Jon Seymour
  2010-09-25 11:22 ` [PATCH v3 1/3] rev-parse: stop interpreting flags as options to rev-parse once --flags is specified Jon Seymour
@ 2010-09-25 11:22 ` Jon Seymour
  2010-09-25 11:22 ` [PATCH v3 3/3] rev-parse: update documentation of --flags and --no-flags options Jon Seymour
  2 siblings, 0 replies; 4+ messages in thread
From: Jon Seymour @ 2010-09-25 11:22 UTC (permalink / raw)
  To: git, robbat2, casey, avarab; +Cc: Jon Seymour

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
---
 t/t1510-rev-parse-flags.sh |  109 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 109 insertions(+), 0 deletions(-)
 create mode 100755 t/t1510-rev-parse-flags.sh

diff --git a/t/t1510-rev-parse-flags.sh b/t/t1510-rev-parse-flags.sh
new file mode 100755
index 0000000..53002df
--- /dev/null
+++ b/t/t1510-rev-parse-flags.sh
@@ -0,0 +1,109 @@
+#!/bin/sh
+#
+# Copyright (c) 2010 Jon Seymour
+#
+
+test_description='test git rev-parse --flags'
+. ./test-lib.sh
+
+test_commit "A"
+
+test_expect_success 'git rev-parse --flags -> ""' \
+'
+	: >expected &&
+	git rev-parse --flags >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags X -> ""' \
+'
+	: >expected &&
+	git rev-parse --flags X >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --no-revs --flags HEAD -> ""' \
+'
+	: >expected &&
+	git rev-parse --no-revs --flags HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --symbolic --flags HEAD -> "HEAD"' \
+'
+	echo HEAD > expected &&
+	git rev-parse --symbolic --flags HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags -- -> ""' \
+'
+	: >expected &&
+	git rev-parse --flags -- >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags -- X -> ""' \
+'
+	: >expected &&
+	git rev-parse --flags -- X >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags -- -X -> ""' \
+'
+	: >expected &&
+	git rev-parse --flags -- -X >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags -- -q --> ""' \
+'
+	: >expected &&
+	git rev-parse --flags -- -q >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags -X -> "-X"' \
+'
+	echo -X > expected &&
+	git rev-parse --flags -X >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags -q -> "-q"' \
+'
+	echo -q > expected &&
+	git rev-parse --flags -q >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags -X -- Y -Z -> "-X"' \
+'
+	echo -X > expected &&
+	git rev-parse --flags -X -- Y -Z >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --flags --no-flags -> "--no-flags"' \
+'
+	echo --no-flags > expected &&
+	git rev-parse --flags --no-flags >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --no-flags --flags -X -> ""' \
+'
+	: >expected &&
+	git rev-parse --no-flags --flags -X >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git rev-parse --symbolic --no-flags --flags HEAD -> "HEAD"' \
+'
+	echo HEAD >expected &&
+	git rev-parse --symbolic --no-flags --flags HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_done
-- 
1.7.3.2.g216ca.dirty

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 3/3] rev-parse: update documentation of --flags and --no-flags options
  2010-09-25 11:22 [PATCH v3 0/3] rev-parse: allow --flags to output rev-parse-like flags Jon Seymour
  2010-09-25 11:22 ` [PATCH v3 1/3] rev-parse: stop interpreting flags as options to rev-parse once --flags is specified Jon Seymour
  2010-09-25 11:22 ` [PATCH v3 2/3] rev-parse: add tests for git rev-parse --flags Jon Seymour
@ 2010-09-25 11:22 ` Jon Seymour
  2 siblings, 0 replies; 4+ messages in thread
From: Jon Seymour @ 2010-09-25 11:22 UTC (permalink / raw)
  To: git, robbat2, casey, avarab; +Cc: Jon Seymour

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
---
 Documentation/git-rev-parse.txt |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt
index 341ca90..f5e6637 100644
--- a/Documentation/git-rev-parse.txt
+++ b/Documentation/git-rev-parse.txt
@@ -49,10 +49,20 @@ OPTIONS
 	'git rev-list' command.
 
 --flags::
-	Do not output non-flag parameters.
+	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.
 
 --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.
 
 --default <arg>::
 	If there is no parameter given by the user, use `<arg>`
-- 
1.7.3.2.g216ca.dirty

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-09-25 11:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-25 11:22 [PATCH v3 0/3] rev-parse: allow --flags to output rev-parse-like flags Jon Seymour
2010-09-25 11:22 ` [PATCH v3 1/3] rev-parse: stop interpreting flags as options to rev-parse once --flags is specified Jon Seymour
2010-09-25 11:22 ` [PATCH v3 2/3] rev-parse: add tests for git rev-parse --flags Jon Seymour
2010-09-25 11:22 ` [PATCH v3 3/3] rev-parse: update documentation of --flags and --no-flags options Jon Seymour

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).