diff options
author | Anurag Gupta <anugupta@microsoft.com> | 2014-03-10 12:00:33 -0700 |
---|---|---|
committer | Anurag Gupta <anugupta@microsoft.com> | 2014-03-24 11:20:03 -0700 |
commit | 892aa808e2e879562c45f3d0886668f86265f1cf (patch) | |
tree | 2eebeac0968d35a3a6a012c6a8cbc2d76e8992e4 /src | |
parent | f57cc63811db2717e9ba42e720a75f71557f9451 (diff) | |
download | libgit2-892aa808e2e879562c45f3d0886668f86265f1cf.tar.gz |
Callback to hide commits in revision walker.
Diffstat (limited to 'src')
-rw-r--r-- | src/revwalk.c | 28 | ||||
-rw-r--r-- | src/revwalk.h | 4 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/revwalk.c b/src/revwalk.c index f037ee692..4e2e0330a 100644 --- a/src/revwalk.c +++ b/src/revwalk.c @@ -81,6 +81,11 @@ static int process_commit(git_revwalk *walk, git_commit_list_node *commit, int h { int error; + if (!hide && walk->hide_cb) + { + hide = walk->hide_cb(&commit->oid, walk->hide_cb_payload); + } + if (hide && mark_uninteresting(commit) < 0) return -1; @@ -575,3 +580,26 @@ void git_revwalk_reset(git_revwalk *walk) git_vector_clear(&walk->twos); } +int git_revwalk_add_hide_cb( + git_revwalk *walk, + git_revwalk_hide_cb hide_cb, + void *payload) +{ + assert(walk); + + if (walk->walking) + git_revwalk_reset(walk); + + if (walk->hide_cb) + { + /* There is already a callback added */ + giterr_set(GITERR_INVALID, "There is already a callback added to hide commits in revision walker."); + return -1; + } + + walk->hide_cb = hide_cb; + walk->hide_cb_payload = payload; + + return 0; +} + diff --git a/src/revwalk.h b/src/revwalk.h index a0ce1ae86..a0654f3e5 100644 --- a/src/revwalk.h +++ b/src/revwalk.h @@ -39,6 +39,10 @@ struct git_revwalk { /* merge base calculation */ git_commit_list_node *one; git_vector twos; + + /* hide callback */ + git_revwalk_hide_cb hide_cb; + void *hide_cb_payload; }; git_commit_list_node *git_revwalk__commit_lookup(git_revwalk *walk, const git_oid *oid); |