aboutsummaryrefslogtreecommitdiff
path: root/git-svnimport.perl
diff options
context:
space:
mode:
authorMatthias Urlichs <smurf@smurf.noris.de>2005-10-10 12:41:15 +0200
committerMatthias Urlichs <smurf@smurf.noris.de>2005-10-10 12:41:15 +0200
commitf0daa628a297819ed039e6b61d337fde02d8a6dd (patch)
treee2226a50707ea40be337be156148171c1d6a3f66 /git-svnimport.perl
parentc015bf2bcbdc2021410753b4a024dd35dfef6a33 (diff)
downloadgit-f0daa628a297819ed039e6b61d337fde02d8a6dd.tar.gz
git-f0daa628a297819ed039e6b61d337fde02d8a6dd.tar.xz
svn import: copy path information
Due to a bug in the SVN library, path information is freed as soon as the callback returns, even if it still refers to the data. Workaround: Copy it. (Also fix a wrong-method-name bug while we're at it.) Signed-Off-By: Matthias Urlichs <smurf@smurf.noris.de>
Diffstat (limited to 'git-svnimport.perl')
-rwxr-xr-xgit-svnimport.perl26
1 files changed, 16 insertions, 10 deletions
diff --git a/git-svnimport.perl b/git-svnimport.perl
index 27d964cab..3844cc50d 100755
--- a/git-svnimport.perl
+++ b/git-svnimport.perl
@@ -346,9 +346,9 @@ sub commit {
$dest = $parent;
my $prev = $changed_paths->{"/"};
- if($prev and $prev->action eq "A") {
+ if($prev and $prev->[0] eq "A") {
delete $changed_paths->{"/"};
- my $oldpath = $prev->copyfrom_path;
+ my $oldpath = $prev->[1];
my $rev;
if(defined $oldpath) {
my $p;
@@ -385,7 +385,7 @@ sub commit {
$rev = undef;
}
-# if($prev and $prev->action eq "A") {
+# if($prev and $prev->[0] eq "A") {
# if(not $tag) {
# unless(open(H,"> $git_dir/refs/heads/$branch")) {
# print STDERR "$revision: Could not create branch $branch: $!\n";
@@ -408,21 +408,21 @@ sub commit {
}
while(my($path,$action) = each %$changed_paths) {
- if ($action->action eq "A") {
+ if ($action->[0] eq "A") {
my $f = get_file($revision,$branch,$path);
push(@new,$f) if $f;
- } elsif ($action->action eq "D") {
+ } elsif ($action->[0] eq "D") {
push(@old,$path);
- } elsif ($action->action eq "M") {
+ } elsif ($action->[0] eq "M") {
my $f = get_file($revision,$branch,$path);
push(@new,$f) if $f;
- } elsif ($action->action eq "R") {
+ } elsif ($action->[0] eq "R") {
# refer to a file/tree in an earlier commit
push(@old,$path); # remove any old stuff
# ... and add any new stuff
- my($b,$p) = split_path($revision,$action->oldpath);
- open my $F,"-|","git-ls-tree","-r","-z", $branches{$b}{$action->oldrev}, $p;
+ my($b,$p) = split_path($revision,$action->[1]);
+ open my $F,"-|","git-ls-tree","-r","-z", $branches{$b}{$action->[2]}, $p;
local $/ = '\0';
while(<$F>) {
chomp;
@@ -432,7 +432,7 @@ sub commit {
push(@new,[$mode,$sha1,$p]);
}
} else {
- die "$revision: unknown action '".$action->action."' for $path\n";
+ die "$revision: unknown action '".$action->[0]."' for $path\n";
}
}
@@ -596,7 +596,13 @@ sub commit {
my ($changed_paths, $revision, $author, $date, $message, $pool) = @_;
sub _commit_all {
($changed_paths, $revision, $author, $date, $message, $pool) = @_;
+ my %p;
+ while(my($path,$action) = each %$changed_paths) {
+ $p{$path} = [ $action->action,$action->copyfrom_path, $action->copyfrom_rev ];
+ }
+ $changed_paths = \%p;
}
+
sub commit_all {
my %done;
my @col;