[PATCH] git-cvsimport: fix initial checkout

Subsystems: the rest

STALE3714d

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

[PATCH] git-cvsimport: fix initial checkout

From: Marc-Andre Lureau <hidden>
Date: 2016-06-15 22:44:22

git-symbolic-ref HEAD returns master reference, even if the file does
not exists. That prevents the initial checkout and fails in
git-rev-parse. The patch checks the existence of the reference file
before assuming an original branch exists. There might be better
solutions than checking file existence.
---
 git-cvsimport.perl |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index 95c5eec..1512fe4 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -570,12 +570,16 @@ unless (-d $git_dir) {
 	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) {
+	if (-f "$git_dir/$last_branch") {
+	    $last_branch = basename($last_branch);
+	    unless ($last_branch) {
 		warn "Cannot read the last branch name: $! -- assuming 'master'\n";
 		$last_branch = "master";
+	    }
+	} else {
+	    $last_branch = "";
 	}
+	close(F);
 	$orig_branch = $last_branch;
 	$tip_at_start = `git-rev-parse --verify HEAD`;
 
@@ -953,6 +957,7 @@ while (<CVS>) {
 		print "* UNKNOWN LINE * $_\n";
 	}
 }
+
 commit() if $branch and $state != 11;
 
 unless ($opt_P) {
-- 
1.5.4.4.534.gfb90c.dirty

Re: [PATCH] git-cvsimport: fix initial checkout

From: Martin Langhoff <hidden>
Date: 2016-06-15 22:44:23

Marc-Andre Lureau wrote:
git-symbolic-ref HEAD returns master reference, even if the file does
not exists. That prevents the initial checkout and fails in
git-rev-parse.
But you are patching the block that gets triggered on subsequent
imports, this code does not deal with "initial checkout" unless
something else is wrong. The line right above the open() is an else that
has the block that matters.
The patch checks the existence of the reference file
before assuming an original branch exists. There might be better
solutions than checking file existence.
There are indeed. If we need this patch -- then you can call git
ref-parse right to see if you get a sha1.
-	unless ($last_branch) {
+	if (-f "$git_dir/$last_branch") {
Note that the file won't exist there in any modern git. It will be in
$git_dir/refs/heads/$last_branch. Did you test this patch?

What's your workflow with cvsimport? Perhaps you are doing something
strange with it... :-)

cheers,


martin
-- 
-----------------------------------------------------------------------
Martin @ Catalyst .Net .NZ  Ltd, PO Box 11-053, Manners St,  Wellington
WEB: http://catalyst.net.nz/           PHYS: Level 2, 150-154 Willis St
NZ: +64(4)916-7224    MOB: +64(21)364-017    UK: 0845 868 5733 ext 7224
      Make things as simple as possible, but no simpler - Einstein
-----------------------------------------------------------------------

Re: [PATCH] git-cvsimport: fix initial checkout

From: Marc-André Lureau <hidden>
Date: 2016-06-15 22:44:23

Hi

On Fri, Mar 14, 2008 at 12:18 AM, Martin Langhoff
[off-list ref] wrote:
Marc-Andre Lureau wrote:
 > git-symbolic-ref HEAD returns master reference, even if the file does
 > not exists. That prevents the initial checkout and fails in
 > git-rev-parse.

 But you are patching the block that gets triggered on subsequent
 imports, this code does not deal with "initial checkout" unless
 something else is wrong. The line right above the open() is an else that
 has the block that matters.
Yeah, it failed in the middle of a ~4h import, I did not restart it.

git-cvsimport -r cvs -p b,HEAD -k -m -a -v -d
:pserver:anoncvs@anoncvs.freedesktop.org:/cvs/gstreamer -C
gst-plugins-good gst-plugins-good

This is a quite problematic CVS, btw. (missing patches/files in the
end, branch merge fail ... see my previous patch)
 > The patch checks the existence of the reference file
 > before assuming an original branch exists. There might be better
 > solutions than checking file existence.

 There are indeed. If we need this patch -- then you can call git
 ref-parse right to see if you get a sha1.
Ok, which one is prefered? ref-parse I guess? I am mostly ignorant of
all the plumbing stuff.
 > -     unless ($last_branch) {
 > +     if (-f "$git_dir/$last_branch") {

 Note that the file won't exist there in any modern git. It will be in
 $git_dir/refs/heads/$last_branch. Did you test this patch?
Crap. The patch indeed worked, because the file did not exist. The
second time it also worked:

skip patchset 5825: 1205277122 before 1205418644
skip patchset 5826: 1205418644 before 1205418644
DONE.
Already up-to-date.
*** Building gst-plugins-good *** [1/145]
make -j2


Result is here: http://git.infradead.org/users/elmarco/gst-plugins-good.git

Thanks for the review!!

-- 
Marc-André Lureau

Re: [PATCH] git-cvsimport: fix initial checkout

From: Marc-André Lureau <hidden>
Date: 2016-06-15 22:44:23

Hi again,

Btw, the missing checkout file is,

sys / osxvideo / Makefile.am

I have a clue why (strange version number), but no idea how to fix it.
-- 
Marc-André Lureau

Re: [PATCH] git-cvsimport: fix initial checkout

From: Marc-André Lureau <hidden>
Date: 2016-06-15 22:44:23

Hi

On Fri, Mar 14, 2008 at 12:18 AM, Martin Langhoff
[off-list ref] wrote:
 > -     unless ($last_branch) {
 > +     if (-f "$git_dir/$last_branch") {

 Note that the file won't exist there in any modern git. It will be in
 $git_dir/refs/heads/$last_branch. Did you test this patch?
git-symbolic-ref HEAD do return "refs/heads/master" on my initial
in-the-middle checkout (I still have a copy),

So it seems correct for now, but i'll change it to use rev-parse
instead as it seems more correct.

Regards

-- 
Marc-André Lureau

Re: [PATCH] git-cvsimport: fix initial checkout

From: Martin Langhoff <hidden>
Date: 2016-06-15 22:44:23

Marc-André Lureau wrote:
Yeah, it failed in the middle of a ~4h import, I did not restart it.
there are no guarantees then of correctness (there seldom are, but a
failed import can leave your repo in a number of odd states...).

I'd suggest parsecvs for the initial import of a messy repo. You can
continue to do incrementas with cvsimport after the initial import.

cheers,



m

-- 
-----------------------------------------------------------------------
Martin @ Catalyst .Net .NZ  Ltd, PO Box 11-053, Manners St,  Wellington
WEB: http://catalyst.net.nz/           PHYS: Level 2, 150-154 Willis St
NZ: +64(4)916-7224    MOB: +64(21)364-017    UK: 0845 868 5733 ext 7224
      Make things as simple as possible, but no simpler - Einstein
-----------------------------------------------------------------------
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help