aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Hasselström <kha@treskal.com>2006-04-07 08:06:09 +0200
committerJunio C Hamano <junkio@cox.net>2006-04-07 02:11:33 -0700
commite67c66251a41653e3698580410121c9afc46cd1a (patch)
tree9eded12442ab83354eecf3ded2dcfb99bf86e179
parent9760662f1a7a06516ca249a73e5c1a6fb6c0e26e (diff)
downloadgit-e67c66251a41653e3698580410121c9afc46cd1a.tar.gz
git-e67c66251a41653e3698580410121c9afc46cd1a.tar.xz
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>
-rwxr-xr-xgit-svnimport.perl15
1 files changed, 10 insertions, 5 deletions
diff --git a/git-svnimport.perl b/git-svnimport.perl
index 114784ff3..4d5371ca9 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);