Mergeback patch - (was: Switching heads and head vs branch after CVS import)
- From
Martin Langhoff <martin.langhoff@gmail.com>
- Date
- Aug 15, 2005, 20:50 UTC
- Message-ID
- <46a038f90508151350675527e7@mail.gmail.com>
- In-Reply-To
- <20050815204511.B6D793300AD@ng.eduforge.org>
Just a work-in-progress sample. I've done a pretty successful import of a small tree with this patch. It is showing the merges /almost/ in the right place. The almost is due to bad cvs practices, and not this code.
Definitely doable, though it'll never be "nice" -- CVS doesn't have the right data for this. I want to make the regexes configurable, and have a more decent way of extracting the parent sha. B
diff --git a/git-cvsimport-script b/git-cvsimport-script --- a/git-cvsimport-script +++ b/git-cvsimport-script @@ -542,6 +542,24 @@ my $commit = sub { my @par = (); @par = ("-p",$parent) if $parent; + + # detect additional branches + my @rx = ( qr/Merged from (\w+)/i , qr/merge of (\w+)/i ); + foreach my $rx (@rx) { + if ($logmsg =~ $rx) { + my $parent = $1; + if ($parent eq 'HEAD') { $parent = 'origin'}; + if ( -e "$git_dir/refs/heads/$parent") { + warn "grabbing $parent"; + $parent = `cat $git_dir/refs/heads/$parent`; + chomp $parent; + warn "grabbed $parent"; + push @par, '-p', $parent; + } + } + } + # %seen_branches + exec("env", "GIT_AUTHOR_NAME=$author", "GIT_AUTHOR_EMAIL=$author",