Skip to content

Commit

Permalink
cvsimport: honor -i and non -i upon subsequent imports
Browse files Browse the repository at this point in the history
Documentation says -i is "import only", so without it,
subsequent import should update the current branch and working
tree files in a sensible way.

"A sensible way" defined by this commit is "act as if it is a
git pull from foreign repository which happens to be CVS not
git".  So:

 - If importing into the current branch (note that cvsimport
   requires the tracking branch is pristine -- you checked out
   the tracking branch but it is your responsibility not to make
   your own commits there), fast forward the branch head and
   match the index and working tree using two-way merge, just
   like "git pull" does.

 - If importing into a separate tracking branch, update that
   branch head, and merge it into your current branch, again,
   just like "git pull" does.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Mar 17, 2006
1 parent 53dc463 commit 8a5f2ea
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion git-cvsimport.perl
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@ ($$)
my $last_branch = "";
my $orig_branch = "";
my %branch_date;
my $tip_at_start = undef;

my $git_dir = $ENV{"GIT_DIR"} || ".git";
$git_dir = getwd()."/".$git_dir unless $git_dir =~ m#^/#;
Expand Down Expand Up @@ -487,6 +488,7 @@ ($$)
$last_branch = "master";
}
$orig_branch = $last_branch;
$tip_at_start = `git-rev-parse --verify HEAD`;

# populate index
system('git-read-tree', $last_branch);
Expand Down Expand Up @@ -873,7 +875,21 @@ ($$)
# Now switch back to the branch we were in before all of this happened
if($orig_branch) {
print "DONE; you may need to merge manually.\n" if $opt_v;
print "DONE.\n" if $opt_v;
if ($opt_i) {
exit 0;
}
my $tip_at_end = `git-rev-parse --verify HEAD`;
if ($tip_at_start ne $tip_at_end) {
print "Fetched into the current branch.\n" if $opt_v;
system(qw(git-read-tree -u -m),
$tip_at_start, $tip_at_end);
die "Fast-forward update failed: $?\n" if $?;
}
else {
system(qw(git-merge cvsimport HEAD), "refs/heads/$opt_o");
die "Could not merge $opt_o into the current branch.\n" if $?;
}
} else {
$orig_branch = "master";
print "DONE; creating $orig_branch branch\n" if $opt_v;
Expand Down

0 comments on commit 8a5f2ea

Please sign in to comment.