diff options
author | Greg Price <price@mit.edu> | 2013-03-03 20:54:23 -0800 |
---|---|---|
committer | Greg Price <price@mit.edu> | 2013-04-06 20:51:16 -0700 |
commit | af079d8bf69a4bd92d6a4eff3c3d1e4d73190a78 (patch) | |
tree | b4a087d5b3414c2f72836e03e3e5730d9f936e0f /src | |
parent | b208d9002289dcd8170750cb94c84678afdd6e0c (diff) | |
download | libgit2-af079d8bf69a4bd92d6a4eff3c3d1e4d73190a78.tar.gz |
revwalk: Parse revision ranges
All the hard work is already in revparse.
Signed-off-by: Greg Price <price@mit.edu>
Diffstat (limited to 'src')
-rw-r--r-- | src/revwalk.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/revwalk.c b/src/revwalk.c index 02834ab36..c1071843b 100644 --- a/src/revwalk.c +++ b/src/revwalk.c @@ -11,6 +11,7 @@ #include "pool.h" #include "revwalk.h" +#include "git2/revparse.h" #include "merge.h" #include <regex.h> @@ -228,6 +229,30 @@ int git_revwalk_push_ref(git_revwalk *walk, const char *refname) return push_ref(walk, refname, 0); } +int git_revwalk_push_range(git_revwalk *walk, const char *range) +{ + git_object *left, *right; + int threedots; + int error = 0; + + if ((error = git_revparse_rangelike(&left, &right, &threedots, walk->repo, range))) + return error; + if (threedots) { + /* TODO: support "<commit>...<commit>" */ + giterr_set(GITERR_INVALID, "Symmetric differences not implemented in revwalk"); + return GIT_EINVALIDSPEC; + } + + if ((error = push_commit(walk, git_object_id(left), 1))) + goto out; + error = push_commit(walk, git_object_id(right), 0); + + out: + git_object_free(left); + git_object_free(right); + return error; +} + int git_revwalk_hide_ref(git_revwalk *walk, const char *refname) { assert(walk && refname); |