diff options
author | Edward Thomson <ethomson@microsoft.com> | 2013-12-13 10:10:32 -0500 |
---|---|---|
committer | Edward Thomson <ethomson@microsoft.com> | 2013-12-13 10:10:32 -0500 |
commit | bf4a577c6989f67fc7821eebd61a117726afc9d5 (patch) | |
tree | 3bc5eeaa251d61fc6966d95e286dfacb1dd5b652 /src | |
parent | 81a2012d991212fbbbf98bf7eefca3dc5d0fd7bb (diff) | |
download | libgit2-bf4a577c6989f67fc7821eebd61a117726afc9d5.tar.gz |
Overwrite ignored directories on checkout
Diffstat (limited to 'src')
-rw-r--r-- | src/checkout.c | 7 |
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 */ |