Re: git describe fails without tags
- From
Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de>
- Date
- Jan 26, 2006, 08:41 UTC
- Message-ID
- <20060126084151.GB2941@informatik.uni-freiburg.de>
- In-Reply-To
- <7vek2wws61.fsf@assigned-by-dhcp.cox.net>
Hello Junio,
Junio C Hamano wrote:
Show 39 quoted lines
> diff --git a/rev-parse.c b/rev-parse.c
> index 0c951af..c1646e4 100644
> --- a/rev-parse.c
> +++ b/rev-parse.c
> @@ -20,6 +20,7 @@ static char *def = NULL;
> #define REVERSED 1
> static int show_type = NORMAL;
> static int symbolic = 0;
> +static int abbrev = 0;
> static int output_sq = 0;
>
> static int revs_count = 0;
> @@ -95,6 +96,8 @@ static void show_rev(int type, const uns
> putchar('^');
> if (symbolic && name)
> show(name);
> + else if (abbrev)
> + show(find_unique_abbrev(sha1, abbrev));
> else
> show(sha1_to_hex(sha1));
> }
> @@ -195,6 +198,17 @@ int main(int argc, char **argv)
> verify = 1;
> continue;
> }
> + if (!strcmp(arg, "--abbrev") ||
> + !strncmp(arg, "--abbrev=", 9)) {
> + filter &= ~(DO_FLAGS|DO_NOREV);
> + verify = 1;
> + abbrev = DEFAULT_ABBREV;
> + if (arg[8] == '=')
> + abbrev = strtoul(arg + 9, NULL, 10);
> + if (abbrev < 0 || 40 <= abbrev)
> + abbrev = DEFAULT_ABBREV;
> + continue;
> + }
> if (!strcmp(arg, "--sq")) {
> output_sq = 1;
> continue;I see two things to fix in that patch:
1) define DEFAULT_ABBREV (e.g. by moving it to cache.h, where
find_unique_abbrev is defined.) 2) describe.c allows only abbrev >= 4. (Allowing values less than 2
failes, because find_short_object_filename (and maybe others) assume
len to be at least 2.) I think 4 is sensible.This results in the following patch:
--8<-- [PATCH] rev-parse: --abbrev option.
The new option behaves just like --verify, but outputs an abbreviated object name that is unique within the repository.
This patch is a modification of a suggestion by Junio C Hamano.
Signed-off-by: Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de>
---
cache.h | 2 ++ describe.c | 1 - rev-parse.c | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 1 deletions(-)
0d43ec7461b38d6a1d1563fd7dc2ebf399eabe9e
diff --git a/cache.h b/cache.h index b493b65..139c670 100644 --- a/cache.h +++ b/cache.h @@ -177,6 +177,8 @@ extern int check_repository_format(void) #define DATA_CHANGED 0x0020 #define TYPE_CHANGED 0x0040 +#define DEFAULT_ABBREV 8 /* maybe too many */ + /* Return a statically allocated filename matching the sha1 signature */ extern char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2))); extern char *git_path(const char *fmt, ...) __attribute__((format (printf, 1, 2))); diff --git a/describe.c b/describe.c index 4866510..6518f06 100644 --- a/describe.c +++ b/describe.c @@ -11,7 +11,6 @@ static const char describe_usage[] = static int all = 0; /* Default to annotated tags only */ static int tags = 0; /* But allow any tags if --tags is specified */ -#define DEFAULT_ABBREV 8 /* maybe too many */ static int abbrev = DEFAULT_ABBREV; static int names = 0, allocs = 0; diff --git a/rev-parse.c b/rev-parse.c index 0c951af..58cff6f 100644 --- a/rev-parse.c +++ b/rev-parse.c @@ -20,6 +20,7 @@ static char *def = NULL; #define REVERSED 1 static int show_type = NORMAL; static int symbolic = 0; +static int abbrev = 0; static int output_sq = 0; static int revs_count = 0; @@ -95,6 +96,8 @@ static void show_rev(int type, const uns putchar('^'); if (symbolic && name) show(name); + else if (abbrev) + show(find_unique_abbrev(sha1, abbrev)); else show(sha1_to_hex(sha1)); } @@ -195,6 +198,17 @@ int main(int argc, char **argv) verify = 1; continue; } + if (!strcmp(arg, "--abbrev") || + !strncmp(arg, "--abbrev=", 9)) { + filter &= ~(DO_FLAGS|DO_NOREV); + verify = 1; + abbrev = DEFAULT_ABBREV; + if (arg[8] == '=') + abbrev = strtoul(arg + 9, NULL, 10); + if (abbrev < 4 || 40 <= abbrev) + abbrev = DEFAULT_ABBREV; + continue; + } if (!strcmp(arg, "--sq")) { output_sq = 1; continue;
-- 1.1.4.g3e6c Best regards Uwe -- Uwe Zeisberger http://www.google.com/search?q=72+PS+point+in+inch