From 7e79d389a400952a24a5619a8bee88b7b40bee72 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 10 May 2012 15:05:19 -0700 Subject: [PATCH] Rev-parse: regex check for "git describe" output. --- src/revparse.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/revparse.c b/src/revparse.c index 5f527443c..0fea5ce8d 100644 --- a/src/revparse.c +++ b/src/revparse.c @@ -37,6 +37,22 @@ static int revparse_lookup_fully_qualifed_ref(git_object **out, git_repository * return git_object_lookup(out, repo, &resolved, GIT_OBJ_ANY); } +/* Returns non-zero if yes */ +static int spec_looks_like_describe_output(const char *spec) +{ + regex_t regex; + int regex_error, retcode; + + regex_error = regcomp(®ex, ".+-[0-9]+-g[0-9a-fA-F]+", REG_EXTENDED); + if (regex_error != 0) { + giterr_set_regex(®ex, regex_error); + return 1; /* To be safe */ + } + retcode = regexec(®ex, spec, 0, NULL, 0); + regfree(®ex); + return retcode == 0; +} + static int revparse_lookup_object(git_object **out, git_repository *repo, const char *spec) { size_t speclen = strlen(spec); @@ -57,6 +73,7 @@ static int revparse_lookup_object(git_object **out, git_repository *repo, const /* "git describe" output; snip everything before/including "-g" */ substr = strstr(spec, "-g"); if (substr && + spec_looks_like_describe_output(spec) && !revparse_lookup_object(out, repo, substr+2)) { return 0; }