diff options
| author | Ben Straub <bstraub@github.com> | 2012-05-10 15:05:19 -0700 |
|---|---|---|
| committer | Ben Straub <bstraub@github.com> | 2012-05-11 11:35:50 -0700 |
| commit | 7e79d389a400952a24a5619a8bee88b7b40bee72 (patch) | |
| tree | 7ee3f735cd11a39da1fbdb703a1d9969bd90d41e /src/revparse.c | |
| parent | b41384b473e9ea4cfaea6f42b106e805bae8ab93 (diff) | |
| download | libgit2-7e79d389a400952a24a5619a8bee88b7b40bee72.tar.gz | |
Rev-parse: regex check for "git describe" output.
Diffstat (limited to 'src/revparse.c')
| -rw-r--r-- | src/revparse.c | 17 |
1 files changed, 17 insertions, 0 deletions
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; } |
