diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-13 21:06:50 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-13 21:06:50 +0400 |
commit | 178cb243387a24b1dec7613c4c5e97158163ac60 (patch) | |
tree | 4ee26dbeb5e1fc42caddbc977e8f282a3f976639 | |
parent | 84fb9a4dca7efe1427c917e2f46a045e48180826 (diff) |
Add 'git-rev-parse' helper script
It's an incredibly cheesy helper that changes human-readable revision
arguments into the git-rev-list argument format.
You can use it to do something like this:
git-rev-list --pretty $(git-rev-parse --default HEAD "$@")
which is what git-log-script will become. Here git-rev-parse will
then allow you to use arguments like "v2.6.12-rc5.." or similar
human-readable ranges.
It's really quite stupid: "a..b" will be converted into "a" and "^b" if
"a" and "b" are valid object pointers. And the "--default" case will be
used if nothing but flags have been seen, so that you can default to a
certain argument if there are no other ranges.
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | rev-parse.c | 70 |
2 files changed, 72 insertions, 1 deletions
@@ -33,7 +33,7 @@ PROG= git-update-cache git-diff-files git-init-db git-write-tree \ git-http-pull git-ssh-push git-ssh-pull git-rev-list git-mktag \ git-diff-helper git-tar-tree git-local-pull git-write-blob \ git-get-tar-commit-id git-mkdelta git-apply git-stripspace \ - git-cvs2git git-diff-stages + git-cvs2git git-diff-stages git-rev-parse all: $(PROG) @@ -118,6 +118,7 @@ git-mkdelta: mkdelta.c git-stripspace: stripspace.c git-cvs2git: cvs2git.c git-diff-stages: diff-stages.c +git-rev-parse: rev-parse.c git-http-pull: LIBS += -lcurl git-rev-list: LIBS += -lssl diff --git a/rev-parse.c b/rev-parse.c new file mode 100644 index 0000000000..69749f5b78 --- /dev/null +++ b/rev-parse.c @@ -0,0 +1,70 @@ +/* + * rev-parse.c + * + * Copyright (C) Linus Torvalds, 2005 + */ +#include "cache.h" + +int main(int argc, char **argv) +{ + int i, as_is = 0; + char *def = NULL; + unsigned char sha1[20]; + + for (i = 1; i < argc; i++) { + char *arg = argv[i]; + char *dotdot; + + if (as_is) { + printf("%s\n", arg); + continue; + } + if (*arg == '-') { + if (!strcmp(arg, "--")) { + if (def) { + printf("%s\n", def); + def = NULL; + } + as_is = 1; + } + if (!strcmp(arg, "--default")) { + if (def) + printf("%s\n", def); + def = argv[i+1]; + i++; + continue; + } + printf("%s\n", arg); + continue; + } + def = NULL; + if (!get_sha1(arg, sha1)) { + printf("%s\n", sha1_to_hex(sha1)); + continue; + } + if (*arg == '^' && !get_sha1(arg+1, sha1)) { + printf("^%s\n", sha1_to_hex(sha1)); + continue; + } + dotdot = strstr(arg, ".."); + if (dotdot) { + unsigned char end[20]; + char *n = dotdot+2; + *dotdot = 0; + if (!get_sha1(arg, sha1)) { + if (!*n) + n = "HEAD"; + if (!get_sha1(n, end)) { + printf("%s\n", sha1_to_hex(end)); + printf("^%s\n", sha1_to_hex(sha1)); + continue; + } + } + *dotdot = '.'; + } + printf("%s\n", arg); + } + if (def) + printf("%s\n", def); + return 0; +} |