diff options
author | Karl Hasselström <kha@treskal.com> | 2006-04-07 08:06:09 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-04-07 02:11:33 -0700 |
commit | e67c66251a41653e3698580410121c9afc46cd1a (patch) | |
tree | 9eded12442ab83354eecf3ded2dcfb99bf86e179 /git-svnimport.perl | |
parent | 9760662f1a7a06516ca249a73e5c1a6fb6c0e26e (diff) | |
download | git-e67c66251a41653e3698580410121c9afc46cd1a.tar.gz |
git-svnimport: Don't assume that copied files haven't changed
Don't assume that a file that SVN claims was copied from somewhere
else is bit-for-bit identical with its parent, since SVN allows
changes to copied files before they are committed.
Without this fix, such copy-modify-commit operations causes the
imported file to lack the "modify" part -- that is, we get subtle data
corruption.
Signed-off-by: Karl Hasselström <kha@treskal.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-svnimport.perl')
-rwxr-xr-x | git-svnimport.perl | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/git-svnimport.perl b/git-svnimport.perl index 114784ff3e..4d5371ca90 100755 --- a/git-svnimport.perl +++ b/git-svnimport.perl @@ -616,9 +616,7 @@ sub commit { } if(($action->[0] eq "A") || ($action->[0] eq "R")) { my $node_kind = node_kind($branch,$path,$revision); - if($action->[1]) { - copy_path($revision,$branch,$path,$action->[1],$action->[2],$node_kind,\@new,\@parents); - } elsif ($node_kind eq $SVN::Node::file) { + if ($node_kind eq $SVN::Node::file) { my $f = get_file($revision,$branch,$path); if ($f) { push(@new,$f) if $f; @@ -627,8 +625,15 @@ sub commit { print STDERR "$revision: $branch: could not fetch '$opath'\n"; } } elsif ($node_kind eq $SVN::Node::dir) { - get_ignore(\@new, \@old, $revision, - $branch,$path); + if($action->[1]) { + copy_path($revision, $branch, + $path, $action->[1], + $action->[2], $node_kind, + \@new, \@parents); + } else { + get_ignore(\@new, \@old, $revision, + $branch, $path); + } } } elsif ($action->[0] eq "D") { push(@old,$path); |