- my $parent = "";
- if(open(C,"$git_dir/refs/heads/$last_branch")) {
- chomp($parent = <C>);
- close(C);
- length($parent) == 40
- or die "Cannot get parent id ($parent): $!\n";
- print "Parent ID $parent\n" if $opt_v;
- }
-
- my $pr = IO::Pipe->new() or die "Cannot open pipe: $!\n";
- my $pw = IO::Pipe->new() or die "Cannot open pipe: $!\n";
- $pid = fork();
- die "Fork: $!\n" unless defined $pid;
- unless($pid) {
- $pr->writer();
- $pw->reader();
- open(OUT,">&STDOUT");
- dup2($pw->fileno(),0);
- dup2($pr->fileno(),1);
- $pr->close();
- $pw->close();
-
- my @par = ();
- @par = ("-p",$parent) if $parent;
-
- # loose detection of merges
- # based on the commit msg
- foreach my $rx (@mergerx) {
- if ($logmsg =~ $rx) {
- my $mparent = $1;
- if ($mparent eq 'HEAD') { $mparent = $opt_o };
- if ( -e "$git_dir/refs/heads/$mparent") {
- $mparent = get_headref($mparent, $git_dir);
- push @par, '-p', $mparent;
- print OUT "Merge parent branch: $mparent\n" if $opt_v;
- }
- }
+my($patchset,$date,$author_name,$author_email,$branch,$ancestor,$tag,$logmsg);
+my(@old,@new,@skipped,%ignorebranch);
+
+# commits that cvsps cannot place anywhere...
+$ignorebranch{'#CVSPS_NO_BRANCH'} = 1;
+
+sub commit {
+ update_index(@old, @new);
+ @old = @new = ();
+ my $tree = write_tree();
+ my $parent = get_headref($last_branch, $git_dir);
+ print "Parent ID " . ($parent ? $parent : "(empty)") . "\n" if $opt_v;
+
+ my @commit_args;
+ push @commit_args, ("-p", $parent) if $parent;
+
+ # loose detection of merges
+ # based on the commit msg
+ foreach my $rx (@mergerx) {
+ next unless $logmsg =~ $rx && $1;
+ my $mparent = $1 eq 'HEAD' ? $opt_o : $1;
+ if(my $sha1 = get_headref($mparent, $git_dir)) {
+ push @commit_args, '-p', $mparent;
+ print "Merge parent branch: $mparent\n" if $opt_v;