summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-07-06 19:46:41 +0200
committerVicent Marti <tanoku@gmail.com>2011-07-06 19:46:41 +0200
commitc68dee2a74fc6c5a2adab12857e9840254647a4b (patch)
treebb239a1b885778bf739df266469cfff1219c5129 /src
parent858dba58bf6eaaf1293ec0da03a02f95f8f2e0b9 (diff)
downloadlibgit2-c68dee2a74fc6c5a2adab12857e9840254647a4b.tar.gz
revwalk: Properly mark uninteresting commits
Diffstat (limited to 'src')
-rw-r--r--src/revwalk.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/revwalk.c b/src/revwalk.c
index cdad83f91..e0b6cbe1d 100644
--- a/src/revwalk.c
+++ b/src/revwalk.c
@@ -269,10 +269,13 @@ static void mark_uninteresting(commit_object *commit)
mark_uninteresting(commit->parents[i]);
}
-static int process_commit(git_revwalk *walk, commit_object *commit)
+static int process_commit(git_revwalk *walk, commit_object *commit, int hide)
{
int error;
+ if (hide)
+ mark_uninteresting(commit);
+
if (commit->seen)
return GIT_SUCCESS;
@@ -281,9 +284,6 @@ static int process_commit(git_revwalk *walk, commit_object *commit)
if ((error = commit_parse(walk, commit)) < GIT_SUCCESS)
return git__rethrow(error, "Failed to process commit");
- if (commit->uninteresting)
- mark_uninteresting(commit);
-
return walk->enqueue(walk, commit);
}
@@ -293,7 +293,7 @@ static int process_commit_parents(git_revwalk *walk, commit_object *commit)
int error = GIT_SUCCESS;
for (i = 0; i < commit->out_degree && error == GIT_SUCCESS; ++i) {
- error = process_commit(walk, commit->parents[i]);
+ error = process_commit(walk, commit->parents[i], commit->uninteresting);
}
return error == GIT_SUCCESS ? GIT_SUCCESS : git__rethrow(error, "Failed to process commit parents");
@@ -307,9 +307,7 @@ static int push_commit(git_revwalk *walk, const git_oid *oid, int uninteresting)
if (commit == NULL)
return git__throw(GIT_ENOTFOUND, "Failed to push commit. Object not found");
- commit->uninteresting = uninteresting;
-
- return process_commit(walk, commit);
+ return process_commit(walk, commit, uninteresting);
}
int git_revwalk_push(git_revwalk *walk, const git_oid *oid)