Re: cvsimport woes

3 messages, 3 authors, 2016-06-15 · open the first message on its own page

Re: cvsimport woes

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:21

I've run your reproduction recipe and also looked at #git log
from yesterday.

Here is what I see immediately after the initial cvs import:

$ git show-branch
* [master] Initial revision
 ! [origin] Initial revision
  ! [start] Imported sources
---
  + [start] Imported sources
*++ [master] Initial revision

And here is what I get immediately after the second one:

$ git show-branch
* [master] v2.0
 ! [origin] v2.0
  ! [start] Imported sources
---
*+  [master] v2.0
  + [start] Imported sources
*++ [master^] Initial revision
$ git diff --cached --abbrev -r
:100644 100644 b8b933b... e251870... M  file.txt
:100644 100644 b8b933b... e251870... M  file1.txt

I think what is happening is that cvsimport updates origin and
master branch HEAD without updating the working tree.  I am not
sure what the cvsimport command line you used is intended to do:

	git cvsimport -v -k -u -m -d $CVSROOT -C git/ src

Specifically, what branch, if any, is used as the "tracking
branch" (i.e. stores the unmodified copy from CVS)?  I presume
it is "origin", in which case, I would have expected to see
something like this instead.

$ git show-branch
* [master] Initial revision
 ! [origin] v2.0
  ! [start] Imported sources
---
 +  [origin] v2.0
  + [start] Imported sources
*++ [master^] Initial revision
$ git diff --cached --abbrev -r
(empty)

Then I would understand what cvsimport author means by "it does
not do fast forward, you have to do it yourself".  What it means
is that the import only updates the tracking branch but does not
update your working tree; merging the updates to the tracking
branch made from the foreign SCM into your working branch is
left for you to perform whenever it is convenient for you to do
(meaning, you may have some intermediate change in your master
branch in which case you would first commit them first and then
merge from CVS).  And if that is they way cvsimport is intended
to be used, then you would at this point do:

$ git pull . origin

to do the fast forward.

I do not understand what cvsimport is trying to do here; I
_suspect_ the part that updates the "master" branch head might
be a bug.

Smurf, mind clarifying what is happening here for me please?

[PATCH] cvsimport: Remove master-updating code

From: <hidden>
Date: 2016-06-15 22:42:21

The code which tried to update the master branch was somewhat broken.
=> People should do that manually, with "git merge".

Signed-off-by: Matthias Urlichs <redacted>
---

Junio C Hamano:
I do not understand what cvsimport is trying to do here; I
_suspect_ the part that updates the "master" branch head might
be a bug.
This should fix it.

---

 Documentation/git-cvsimport.txt |    6 ++++++
 git-cvsimport.perl              |   27 ++-------------------------
 2 files changed, 8 insertions(+), 25 deletions(-)

4c28ef8000d68a0736084022a047019dca96c823
diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt
index dfe86ce..57027b4 100644
--- a/Documentation/git-cvsimport.txt
+++ b/Documentation/git-cvsimport.txt
@@ -22,6 +22,12 @@ repository, or incrementally import into
 Splitting the CVS log into patch sets is done by 'cvsps'.
 At least version 2.1 is required.
 
+You should *never* do any work of your own on the branches that are
+created by git-cvsimport. The initial import will create and populate a
+"master" branch from the CVS repository's main branch which you're free
+to work with; after that, you need to 'git merge' incremental imports, or
+any CVS branches, yourself.
+
 OPTIONS
 -------
 -d <CVSROOT>::
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index b46469a..02d1928 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -452,7 +452,6 @@ chdir($git_tree);
 
 my $last_branch = "";
 my $orig_branch = "";
-my $forward_master = 0;
 my %branch_date;
 
 my $git_dir = $ENV{"GIT_DIR"} || ".git";
@@ -488,21 +487,6 @@ 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);
@@ -889,17 +873,11 @@ if (defined $orig_git_index) {
 
 # 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;
-	unless ($opt_i) {
-		system('git-read-tree', '-m', '-u', 'CVS2GIT_HEAD', 'HEAD');
-		die "read-tree failed: $?\n" if $?;
-	}
+	print "DONE; you may need to merge manually.\n" if $opt_v;
 } else {
 	$orig_branch = "master";
 	print "DONE; creating $orig_branch branch\n" if $opt_v;
-	system("cp","$git_dir/refs/heads/$opt_o","$git_dir/refs/heads/master")
+	system("git-update-ref", "refs/heads/master", "refs/heads/$opt_o")
 		unless -f "$git_dir/refs/heads/master";
 	system('git-update-ref', 'HEAD', "$orig_branch");
 	unless ($opt_i) {
@@ -907,4 +885,3 @@ if($orig_branch) {
 		die "checkout failed: $?\n" if $?;
 	}
 }
-unlink("$git_dir/CVS2GIT_HEAD");
-- 
1.2.GIT


-- 
Matthias Urlichs   |   {M:U} IT Design @ m-u-it.de   |  smurf@smurf.noris.de
Disclaimer: The quote was selected randomly. Really. | http://smurf.noris.de
 - -
You will be run over by a bus.

Re: [PATCH] cvsimport: Remove master-updating code

From: Rajkumar S <hidden>
Date: 2016-06-15 22:42:21

smurf@smurf.noris.de wrote:
Junio C Hamano:
quoted
I do not understand what cvsimport is trying to do here; I
_suspect_ the part that updates the "master" branch head might
be a bug.
This should fix it.
It's working fine for me. Thanks!

raj
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help