summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2013-12-13 10:10:32 -0500
committerEdward Thomson <ethomson@microsoft.com>2013-12-13 10:10:32 -0500
commitbf4a577c6989f67fc7821eebd61a117726afc9d5 (patch)
tree3bc5eeaa251d61fc6966d95e286dfacb1dd5b652 /src
parent81a2012d991212fbbbf98bf7eefca3dc5d0fd7bb (diff)
downloadlibgit2-bf4a577c6989f67fc7821eebd61a117726afc9d5.tar.gz
Overwrite ignored directories on checkout
Diffstat (limited to 'src')
-rw-r--r--src/checkout.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/checkout.c b/src/checkout.c
index 50da83a4a..e642c975e 100644
--- a/src/checkout.c
+++ b/src/checkout.c
@@ -435,6 +435,7 @@ static int checkout_action_with_wd_dir(
int *action,
checkout_data *data,
const git_diff_delta *delta,
+ git_iterator *workdir,
const git_index_entry *wd)
{
*action = CHECKOUT_ACTION__NONE;
@@ -451,7 +452,9 @@ static int checkout_action_with_wd_dir(
if (delta->old_file.mode == GIT_FILEMODE_COMMIT)
/* expected submodule (and maybe found one) */;
else if (delta->new_file.mode != GIT_FILEMODE_TREE)
- *action = CHECKOUT_ACTION_IF(FORCE, REMOVE_AND_UPDATE, CONFLICT);
+ *action = git_iterator_current_is_ignored(workdir) ?
+ CHECKOUT_ACTION_IF(DONT_OVERWRITE_IGNORED, CONFLICT, REMOVE_AND_UPDATE) :
+ CHECKOUT_ACTION_IF(FORCE, REMOVE_AND_UPDATE, CONFLICT);
break;
case GIT_DELTA_DELETED: /* case 11 (and 27 for dir) */
if (delta->old_file.mode != GIT_FILEMODE_TREE)
@@ -573,7 +576,7 @@ static int checkout_action(
}
}
- return checkout_action_with_wd_dir(action, data, delta, wd);
+ return checkout_action_with_wd_dir(action, data, delta, workdir, wd);
}
/* case 6 - wd is after delta */