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.
This commit is contained in:
Linus Torvalds 2005-06-13 10:06:50 -07:00
Родитель 84fb9a4dca
Коммит 178cb24338
2 изменённых файлов: 72 добавлений и 1 удалений

Просмотреть файл

@ -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

70
rev-parse.c Normal file
Просмотреть файл

@ -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;
}