diff options
Diffstat (limited to 'git-cvsimport-script')
-rwxr-xr-x | git-cvsimport-script | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/git-cvsimport-script b/git-cvsimport-script index 3e6d22e742..cdf9891614 100755 --- a/git-cvsimport-script +++ b/git-cvsimport-script @@ -372,6 +372,7 @@ chdir($git_tree); my $last_branch = ""; my $orig_branch = ""; +my $forward_master = 0; my %branch_date; my $git_dir = $ENV{"GIT_DIR"} || ".git"; @@ -403,6 +404,21 @@ unless(-d $git_dir) { $last_branch = "master"; } $orig_branch = $last_branch; + if (-f "$git_dir/CVS2GIT_HEAD") { + die <<EOM; +CVS2GIT_HEAD exists. +Make sure your working directory corresponds to HEAD and remove CVS2GIT_HEAD. +You may need to run + + git-read-tree -m -u CVS2GIT_HEAD HEAD +EOM + } + system('cp', "$git_dir/HEAD", "$git_dir/CVS2GIT_HEAD"); + + $forward_master = + $opt_o ne 'master' && -f "$git_dir/refs/heads/master" && + system('cmp', '-s', "$git_dir/refs/heads/master", + "$git_dir/refs/heads/$opt_o") == 0; # populate index system('git-read-tree', $last_branch); @@ -695,9 +711,19 @@ while(<CVS>) { unlink($git_index); +if (defined $orig_git_index) { + $ENV{GIT_INDEX_FILE} = $orig_git_index; +} else { + delete $ENV{GIT_INDEX_FILE}; +} + # Now switch back to the branch we were in before all of this happened if($orig_branch) { print "DONE\n" if $opt_v; + system("cp","$git_dir/refs/heads/$opt_o","$git_dir/refs/heads/master") + if $forward_master; + system('git-read-tree', '-m', '-u', 'CVS2GIT_HEAD', 'HEAD'); + die "read-tree failed: $?\n" if $?; } else { $orig_branch = "master"; print "DONE; creating $orig_branch branch\n" if $opt_v; @@ -705,11 +731,7 @@ if($orig_branch) { unless -f "$git_dir/refs/heads/master"; unlink("$git_dir/HEAD"); symlink("refs/heads/$orig_branch","$git_dir/HEAD"); - if (defined $orig_git_index) { - $ENV{GIT_INDEX_FILE} = $orig_git_index; - } else { - delete $ENV{GIT_INDEX_FILE}; - } system('git checkout'); die "checkout failed: $?\n" if $?; } +unlink("$git_dir/CVS2GIT_HEAD"); |