git-clone: Support changing the origin branch with -o
[git.git] / git-cvsimport.perl
index f7c3a51..08a890c 100755 (executable)
@@ -29,7 +29,7 @@ use IPC::Open2;
 $SIG{'PIPE'}="IGNORE";
 $ENV{'TZ'}="UTC";
 
-our($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_s,$opt_m,$opt_M);
+our($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P, $opt_s,$opt_m,$opt_M);
 
 sub usage() {
        print STDERR <<END;
@@ -41,7 +41,7 @@ END
        exit(1);
 }
 
-getopts("hivmkuo:d:p:C:z:s:M:") or usage();
+getopts("hivmkuo:d:p:C:z:s:M:P:") or usage();
 usage if $opt_h;
 
 @ARGV <= 1 or usage();
@@ -337,6 +337,10 @@ sub file {
        }
        close ($fh);
 
+       if ($res eq '') {
+           die "Looks like the server has gone away while fetching $fn $rev -- exiting!";
+       }
+
        return ($name, $res);
 }
 
@@ -433,7 +437,11 @@ unless(-d $git_dir) {
                       "Either use the correct '-o branch' option,\n".
                       "or import to a new repository.\n";
 
-       $last_branch = basename(readlink("$git_dir/HEAD"));
+       open(F, "git-symbolic-ref HEAD |") or
+               die "Cannot run git-symbolic-ref: $!\n";
+       chomp ($last_branch = <F>);
+       $last_branch = basename($last_branch);
+       close(F);
        unless($last_branch) {
                warn "Cannot read the last branch name: $! -- assuming 'master'\n";
                $last_branch = "master";
@@ -487,11 +495,16 @@ unless($pid) {
        my @opt;
        @opt = split(/,/,$opt_p) if defined $opt_p;
        unshift @opt, '-z', $opt_z if defined $opt_z;
-       unless ($opt_p =~ m/--no-cvs-direct/) {
+       unshift @opt, '-q'         unless defined $opt_v;
+       unless (defined($opt_p) && $opt_p =~ m/--no-cvs-direct/) {
                push @opt, '--cvs-direct';
        }
-       exec("cvsps",@opt,"-u","-A",'--root',$opt_d,$cvs_tree);
-       die "Could not start cvsps: $!\n";
+       if ($opt_P) {
+           exec("cat", $opt_P);
+       } else {
+           exec("cvsps","--norc",@opt,"-u","-A",'--root',$opt_d,$cvs_tree);
+           die "Could not start cvsps: $!\n";
+       }
 }
 
 
@@ -570,6 +583,7 @@ my $commit = sub {
        unless($pid) {
                $pr->writer();
                $pw->reader();
+               open(OUT,">&STDOUT");
                dup2($pw->fileno(),0);
                dup2($pr->fileno(),1);
                $pr->close();
@@ -587,10 +601,9 @@ my $commit = sub {
                                if ( -e "$git_dir/refs/heads/$mparent") {
                                        $mparent = get_headref($mparent, $git_dir);
                                        push @par, '-p', $mparent;
-                                       # printing here breaks import # 
-                                       # # print "Merge parent branch: $mparent\n" if $opt_v;
+                                       print OUT "Merge parent branch: $mparent\n" if $opt_v;
                                }
-                       } 
+                       }
                }
 
                exec("env",
@@ -820,8 +833,7 @@ if($orig_branch) {
        print "DONE; creating $orig_branch branch\n" if $opt_v;
        system("cp","$git_dir/refs/heads/$opt_o","$git_dir/refs/heads/master")
                unless -f "$git_dir/refs/heads/master";
-       unlink("$git_dir/HEAD");
-       symlink("refs/heads/$orig_branch","$git_dir/HEAD");
+       system('git-update-ref', 'HEAD', "$orig_branch");
        unless ($opt_i) {
                system('git checkout');
                die "checkout failed: $?\n" if $?;