зеркало из https://github.com/microsoft/git.git
archimport: remove files from the index before adding/updating
This fixes a bug when importing where a directory gets removed/renamed but is immediately replaced by a file of the same name in the same changeset. This fix only applies to the accurate (default) strategy the moment. This patch should also fix the fast strategy if/when it is updated to handle the cases that would've triggered this bug. This bug was originally found in git-svn, but I remembered I did the same thing with archimport as well. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
772d8a3b63
Коммит
3ff903bfb9
|
@ -346,12 +346,10 @@ sub process_patchset_accurate {
|
||||||
}
|
}
|
||||||
|
|
||||||
# update the index with all the changes we got
|
# update the index with all the changes we got
|
||||||
|
system('git-diff-files --name-only -z | '.
|
||||||
|
'git-update-index --remove -z --stdin') == 0 or die "$! $?\n";
|
||||||
system('git-ls-files --others -z | '.
|
system('git-ls-files --others -z | '.
|
||||||
'git-update-index --add -z --stdin') == 0 or die "$! $?\n";
|
'git-update-index --add -z --stdin') == 0 or die "$! $?\n";
|
||||||
system('git-ls-files --deleted -z | '.
|
|
||||||
'git-update-index --remove -z --stdin') == 0 or die "$! $?\n";
|
|
||||||
system('git-ls-files -z | '.
|
|
||||||
'git-update-index -z --stdin') == 0 or die "$! $?\n";
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,22 +414,14 @@ sub process_patchset_fast {
|
||||||
# imports don't give us good info
|
# imports don't give us good info
|
||||||
# on added files. Shame on them
|
# on added files. Shame on them
|
||||||
if ($ps->{type} eq 'i' || $ps->{type} eq 't') {
|
if ($ps->{type} eq 'i' || $ps->{type} eq 't') {
|
||||||
system('git-ls-files --others -z | '.
|
|
||||||
'git-update-index --add -z --stdin') == 0 or die "$! $?\n";
|
|
||||||
system('git-ls-files --deleted -z | '.
|
system('git-ls-files --deleted -z | '.
|
||||||
'git-update-index --remove -z --stdin') == 0 or die "$! $?\n";
|
'git-update-index --remove -z --stdin') == 0 or die "$! $?\n";
|
||||||
|
system('git-ls-files --others -z | '.
|
||||||
|
'git-update-index --add -z --stdin') == 0 or die "$! $?\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO: handle removed_directories and renamed_directories:
|
# TODO: handle removed_directories and renamed_directories:
|
||||||
|
|
||||||
if (my $add = $ps->{new_files}) {
|
|
||||||
while (@$add) {
|
|
||||||
my @slice = splice(@$add, 0, 100);
|
|
||||||
system('git-update-index','--add','--',@slice) == 0 or
|
|
||||||
die "Error in git-update-index --add: $! $?\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (my $del = $ps->{removed_files}) {
|
if (my $del = $ps->{removed_files}) {
|
||||||
unlink @$del;
|
unlink @$del;
|
||||||
while (@$del) {
|
while (@$del) {
|
||||||
|
@ -462,6 +452,14 @@ sub process_patchset_fast {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (my $add = $ps->{new_files}) {
|
||||||
|
while (@$add) {
|
||||||
|
my @slice = splice(@$add, 0, 100);
|
||||||
|
system('git-update-index','--add','--',@slice) == 0 or
|
||||||
|
die "Error in git-update-index --add: $! $?\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (my $mod = $ps->{modified_files}) {
|
if (my $mod = $ps->{modified_files}) {
|
||||||
while (@$mod) {
|
while (@$mod) {
|
||||||
my @slice = splice(@$mod, 0, 100);
|
my @slice = splice(@$mod, 0, 100);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче