summaryrefslogtreecommitdiff
path: root/src/revparse.c
diff options
context:
space:
mode:
authorGreg Price <price@mit.edu>2013-03-20 10:01:58 -0700
committerGreg Price <price@mit.edu>2013-04-06 20:51:16 -0700
commitb208d9002289dcd8170750cb94c84678afdd6e0c (patch)
tree58ef967f39273c9439e381f15c4e309108fde098 /src/revparse.c
parent2932c8826a1d948565124aa6c9a32df68a15895b (diff)
downloadlibgit2-b208d9002289dcd8170750cb94c84678afdd6e0c.tar.gz
revparse: Parse range-like syntax
Signed-off-by: Greg Price <price@mit.edu>
Diffstat (limited to 'src/revparse.c')
-rw-r--r--src/revparse.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/revparse.c b/src/revparse.c
index 884879975..7f1497130 100644
--- a/src/revparse.c
+++ b/src/revparse.c
@@ -866,3 +866,28 @@ cleanup:
git_buf_free(&buf);
return error;
}
+
+int git_revparse_rangelike(git_object **left, git_object **right, int *threedots, git_repository *repo, const char *rangelike)
+{
+ int error = 0;
+ const char *p, *q;
+ char *revspec;
+
+ p = strstr(rangelike, "..");
+ if (!p) {
+ giterr_set(GITERR_INVALID, "Malformed range (or rangelike syntax): %s", rangelike);
+ return GIT_EINVALIDSPEC;
+ } else if (p[2] == '.') {
+ *threedots = 1;
+ q = p + 3;
+ } else {
+ *threedots = 0;
+ q = p + 2;
+ }
+
+ revspec = git__substrdup(rangelike, p - rangelike);
+ error = (git_revparse_single(left, repo, revspec)
+ || git_revparse_single(right, repo, q));
+ git__free(revspec);
+ return error;
+}