mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 00:43:41 +00:00
allow empty dirs to exist when doing checkout
This commit is contained in:
parent
e1807113c4
commit
0cc7d8df19
@ -467,6 +467,7 @@ static int checkout_action(
|
||||
int cmp = -1, act;
|
||||
int (*strcomp)(const char *, const char *) = data->diff->strcomp;
|
||||
int (*pfxcomp)(const char *str, const char *pfx) = data->diff->pfxcomp;
|
||||
int error;
|
||||
|
||||
/* move workdir iterator to follow along with deltas */
|
||||
|
||||
@ -490,8 +491,11 @@ static int checkout_action(
|
||||
if (cmp == 0) {
|
||||
if (wd->mode == GIT_FILEMODE_TREE) {
|
||||
/* case 2 - entry prefixed by workdir tree */
|
||||
if (git_iterator_advance_into(&wd, workdir) < 0)
|
||||
goto fail;
|
||||
if ((error = git_iterator_advance_into(&wd, workdir)) < 0) {
|
||||
if (error != GIT_ENOTFOUND ||
|
||||
git_iterator_advance(&wd, workdir) < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
*wditem_ptr = wd;
|
||||
continue;
|
||||
|
@ -501,3 +501,28 @@ void test_checkout_tree__issue_1397(void)
|
||||
|
||||
git_object_free(tree);
|
||||
}
|
||||
|
||||
void test_checkout_tree__can_write_to_empty_dirs(void)
|
||||
{
|
||||
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
|
||||
git_oid oid;
|
||||
git_object *obj = NULL;
|
||||
|
||||
assert_on_branch(g_repo, "master");
|
||||
|
||||
cl_git_pass(p_mkdir("testrepo/a", 0777));
|
||||
|
||||
/* do first checkout with FORCE because we don't know if testrepo
|
||||
* base data is clean for a checkout or not
|
||||
*/
|
||||
opts.checkout_strategy = GIT_CHECKOUT_FORCE;
|
||||
|
||||
cl_git_pass(git_reference_name_to_id(&oid, g_repo, "refs/heads/dir"));
|
||||
cl_git_pass(git_object_lookup(&obj, g_repo, &oid, GIT_OBJ_ANY));
|
||||
|
||||
cl_git_pass(git_checkout_tree(g_repo, obj, &opts));
|
||||
|
||||
cl_assert(git_path_isfile("testrepo/a/b.txt"));
|
||||
|
||||
git_object_free(obj);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user