Commit 6f80bf4a by Edward Thomson

Merge pull request #3037 from libgit2/cmn/hide-then-push

Handle hide-then-push in the revwalk
parents fa7281db 05d92026
...@@ -90,15 +90,17 @@ GIT_EXTERN(int) git_revwalk_new(git_revwalk **out, git_repository *repo); ...@@ -90,15 +90,17 @@ GIT_EXTERN(int) git_revwalk_new(git_revwalk **out, git_repository *repo);
GIT_EXTERN(void) git_revwalk_reset(git_revwalk *walker); GIT_EXTERN(void) git_revwalk_reset(git_revwalk *walker);
/** /**
* Mark a commit to start traversal from. * Add a new root for the traversal
* *
* The given OID must belong to a committish on the walked * The pushed commit will be marked as one of the roots from which to
* repository. * start the walk. This commit may not be walked if it or a child is
* hidden.
*
* At least one commit must be pushed onto the walker before a walk
* can be started.
* *
* The given commit will be used as one of the roots * The given id must belong to a committish on the walked
* when starting the revision walk. At least one commit * repository.
* must be pushed onto the walker before a walk can
* be started.
* *
* @param walk the walker being used for the traversal. * @param walk the walker being used for the traversal.
* @param id the oid of the commit to start from. * @param id the oid of the commit to start from.
...@@ -135,7 +137,7 @@ GIT_EXTERN(int) git_revwalk_push_head(git_revwalk *walk); ...@@ -135,7 +137,7 @@ GIT_EXTERN(int) git_revwalk_push_head(git_revwalk *walk);
/** /**
* Mark a commit (and its ancestors) uninteresting for the output. * Mark a commit (and its ancestors) uninteresting for the output.
* *
* The given OID must belong to a committish on the walked * The given id must belong to a committish on the walked
* repository. * repository.
* *
* The resolved commit and all its parents will be hidden from the * The resolved commit and all its parents will be hidden from the
......
...@@ -144,6 +144,10 @@ static int push_commit(git_revwalk *walk, const git_oid *oid, int uninteresting, ...@@ -144,6 +144,10 @@ static int push_commit(git_revwalk *walk, const git_oid *oid, int uninteresting,
if (commit == NULL) if (commit == NULL)
return -1; /* error already reported by failed lookup */ return -1; /* error already reported by failed lookup */
/* A previous hide already told us we don't want this commit */
if (commit->uninteresting)
return 0;
if (uninteresting) if (uninteresting)
walk->did_hide = 1; walk->did_hide = 1;
else else
......
...@@ -314,6 +314,23 @@ void test_revwalk_basic__disallow_non_commit(void) ...@@ -314,6 +314,23 @@ void test_revwalk_basic__disallow_non_commit(void)
cl_git_fail(git_revwalk_push(_walk, &oid)); cl_git_fail(git_revwalk_push(_walk, &oid));
} }
void test_revwalk_basic__hide_then_push(void)
{
git_oid oid;
int i = 0;
revwalk_basic_setup_walk(NULL);
cl_git_pass(git_oid_fromstr(&oid, "5b5b025afb0b4c913b4c338a42934a3863bf3644"));
cl_git_pass(git_revwalk_hide(_walk, &oid));
cl_git_pass(git_revwalk_push(_walk, &oid));
while (git_revwalk_next(&oid, _walk) == 0)
i++;
cl_assert_equal_i(i, 0);
}
void test_revwalk_basic__push_range(void) void test_revwalk_basic__push_range(void)
{ {
revwalk_basic_setup_walk(NULL); revwalk_basic_setup_walk(NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment