chiark / gitweb /
Cope when cloning suite which doesn't receive uploads, like testing.
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 30 Oct 2016 21:04:22 +0000 (21:04 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 30 Oct 2016 22:46:35 +0000 (22:46 +0000)
If $lastpush_hash is '', it means that the dgit git server does not
have the suite branch.  That can even happen if the current version in
the suite was a .dsc with a Dgit field, if an in-archive copy moved
the .dsc from whereever it was uploaded.

Do not crash in this situation.  Instead, give the user the Dgit hash
(and maybe pseudomerge it with the user's history - sigh).

There is still a possible problem: maybe the referenced commit is on
another branch.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
debian/changelog
dgit

index cc4d4c0da23bc2547e4863943b2f4b1b4e521666..19a1a9f7bdbc48a06397b5c785b8f614a2ad9477 100644 (file)
@@ -22,6 +22,8 @@ dgit (2.9~) unstable; urgency=low
   * Reject `dgit pull' in split view quilt modes, to avoid
     creating unfortunate wreckage on non-dgit-view branches.
     Closes:#842608.
+  * Cope when cloning suite which doesn't receive uploads,
+    like testing.  Closes:#842621.
 
  --
 
diff --git a/dgit b/dgit
index e4eba536122933c2d6528d8803d2c1d6b46a1cc6..2a2eeddb2705cfcc2593cd68c7dc6c5942ba9c64 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -2571,11 +2571,8 @@ sub fetch_from_archive () {
     };
 
     if (defined $dsc_hash) {
-       fail "missing remote git history even though dsc has hash -".
-           " could not find ref ".rref()." at ".access_giturl()
-           unless $lastpush_hash;
        ensure_we_have_orig();
-       if ($dsc_hash eq $lastpush_hash) {
+       if (!$lastpush_hash || $dsc_hash eq $lastpush_hash) {
            @mergeinputs = $dsc_mergeinput
        } elsif (is_fast_fwd($dsc_hash,$lastpush_hash)) {
            print STDERR <<END or die $!;
@@ -2742,7 +2739,8 @@ END
        die "$lasth $hash $what ?" unless is_fast_fwd($lasth, $hash);
     };
 
-    $chkff->($lastpush_hash, 'dgit repo server tip (last push)');
+    $chkff->($lastpush_hash, 'dgit repo server tip (last push)')
+       if $lastpush_hash;
     $chkff->($lastfetch_hash, 'local tracking tip (last fetch)');
 
     runcmd @git, qw(update-ref -m), "dgit fetch $csuite",