threads / discuss / 1619

git-rev-parse question.

Subject: git-rev-parse question.

## tl;dr

3 messages between Aug 23, 2005 and Aug 23, 2005.

replies: 2people: 2as markdown or json

Junio C Hamano· Aug 23, 2005, 08:02 UTC · lore

I have been looking at what git-rev-parse does and could not figure out a way to convince it to give me only arguments with a '-' prefix. Specifically, I wanted to remove the hardcoded -p and -M flags from git-diff-script. Running

    $ sh -x git-diff-script -C HEAD^ HEAD

reveals that none of the following would pick up "-C" from the command line:

    rev=($(git-rev-parse --revs-only "$@")) || exit
    flags=($(git-rev-parse --no-revs --flags "$@"))
    files=($(git-rev-parse --no-revs --no-flags "$@"))

I am not even sure if the current implementation of rev-parse matches what you originally wanted it to do; I suspect it does not. I would like to know what was the intended behaviour first, so that I can enhance it to be usable for my purpose without breaking things.

What I want the rev-parse flags to mean is as follows. By "rev argument", I mean what get_sha1() can understand. I have to admit that some flags are what I introduced while I was butchering it without really knowing the original intention:

  output format:
  --sq		output in a format usable for shell "eval".
  --symbolic	output rev argument in symbolic form, not SHA1.
  output selection:
  --flags	show only arguments with '-' prefix.
  --no-flags	do not show arguments with '-' prefix.
  --revs-only	show only arguments meant for rev-list.
  --no-revs	show arguments not meant for rev-list.
  input munging:
  --default R	if no revision, pretend R is given.
  --not		pretend all rev arguments without prefix ^ have
                prefix ^, and the ones with prefix ^ do not.
  --all		pretend all refs under $GIT_DIR/refs are given
  		on the command line.
  special:
  --verify	make sure only one rev argument is given, nothing else.

I think flags/no-flags and revs-only/no-revs *should* be orthogonal. That is, "rev-parse --flags --no-revs" should give parameters that start with '-' and not meant for rev-list (e.g. '-C' in earlier example); "rev-parse --revs-only --merge-order HEAD Documentation/" should yield "--merge-order HEAD".

Also there is an undocumented --show-prefix.  What is it?
-jc
PS. BTW, any response about unsuspecting companies?
Linus Torvalds· Aug 23, 2005, 17:07 UTC · re: Junio C Hamano · lore

Re: git-rev-parse question.

On Tue, 23 Aug 2005, Junio C Hamano wrote:
>
> I have been looking at what git-rev-parse does and could not
> figure out a way to convince it to give me only arguments with
> a '-' prefix.
Gaah. Understandable. It got broken during some cleanup.
Try this trivial patch, it should work better.

NOTE! The behaviour of "--" for git-rev-parse is somewhat unclear. Right now it prints it out with "--flags", which is probably wrong.

		Linus
---
Subject: Fix git-rev-parse --default and --flags handling

This makes the argument to --default and any --flags arguments should up correctly.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---
diff --git a/rev-parse.c b/rev-parse.c
--- a/rev-parse.c
+++ b/rev-parse.c
@@ -107,7 +107,7 @@ static void show_arg(char *arg)
 	if (do_rev_argument && is_rev_argument(arg))
 		show_rev_arg(arg);
 	else
-		show_norev(arg);
+		show(arg);
 }
 
 static void show_default(void)
@@ -122,7 +122,7 @@ static void show_default(void)
 			show_rev(NORMAL, sha1, s);
 			return;
 		}
-		show_arg(s);
+		show(s);
 	}
 }
 
Linus Torvalds· Aug 23, 2005, 17:47 UTC · re: Linus Torvalds · lore

Re: git-rev-parse question.

On Tue, 23 Aug 2005, Linus Torvalds wrote:
> 
> Try this trivial patch, it should work better.

Actually, don't do the "show_default()" part of this. We should _not_ show the default string if we haev "--no-revs" and the string doesn't match a rev.

Also, this fixes "--" handlign with "--flags". Thinking about it for a few seconds made it obvious that we shouldn't show it.

		Linus
---
Subject: Fix git-rev-parse --default and --flags handling

This makes the argument to --default and any --flags arguments should up correctly, and makes "--" together with --flags act sanely.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---
diff --git a/rev-parse.c b/rev-parse.c
--- a/rev-parse.c
+++ b/rev-parse.c
@@ -107,7 +107,7 @@ static void show_arg(char *arg)
 	if (do_rev_argument && is_rev_argument(arg))
 		show_rev_arg(arg);
 	else
-		show_norev(arg);
+		show(arg);
 }
 
 static void show_default(void)
@@ -122,7 +122,7 @@ static void show_default(void)
 			show_rev(NORMAL, sha1, s);
 			return;
 		}
-		show_arg(s);
+		show_norev(s);
 	}
 }
 
@@ -149,7 +149,7 @@ int main(int argc, char **argv)
 		if (*arg == '-') {
 			if (!strcmp(arg, "--")) {
 				show_default();
-				if (revs_only)
+				if (revs_only || flags_only)
 					break;
 				as_is = 1;
 			}

← back to recent threads