← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~lool/git-build-recipe:fallback-on-pristine-tar-checkout-failures into git-build-recipe:master

 

Loïc Minier has proposed merging ~lool/git-build-recipe:fallback-on-pristine-tar-checkout-failures into git-build-recipe:master.

Commit message:
Trying to build https://code.launchpad.net/~lool/+recipe/linux-nvidia-tegra-sidecar-daily I first run into issues with missing refs for pristine-tar to work, but fixing these (https://code.launchpad.net/~lool/git-build-recipe/+git/git-build-recipe/+merge/443942) I run into a pristine-tar issue:
tar: /tmp/pristine-tar.CAMo9gloTn/recreatetarball: Wrote only 8192 of 10240 bytes
tar: Error is not recoverable: exiting now
pristine-tar: command failed: tar cf /tmp/pristine-tar.CAMo9gloTn/recreatetarball --owner 0 --group 0 --numeric-owner -C /tmp/pristine-tar.CAMo9gloTn/workdir --no-recursion --mode 0644 --verbatim-files-from --files-from /tmp/pristine-tar.CAMo9gloTn/manifest
pristine-tar: failed to generate tarball

The code doesn't fallback to generating an archive from git tags or from the source package if pristine-tar checkout fails, this is my somewhat clumsy attempt at doing this

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~lool/git-build-recipe/+git/git-build-recipe/+merge/443943
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~lool/git-build-recipe:fallback-on-pristine-tar-checkout-failures into git-build-recipe:master.
diff --git a/gitbuildrecipe/deb_util.py b/gitbuildrecipe/deb_util.py
index d0a6666..4724de6 100644
--- a/gitbuildrecipe/deb_util.py
+++ b/gitbuildrecipe/deb_util.py
@@ -48,13 +48,14 @@ def debian_source_package_name(control_path):
         return control["Source"]
 
 
-def extract_upstream_tarball(path, package, version, dest_dir):
+def extract_upstream_tarball(path, package, version, dest_dir, fallback=True):
     """Extract the upstream tarball from a Git repository.
 
     :param path: Path to the Git repository
     :param package: Package name
     :param version: Package version
     :param dest_dir: Destination directory
+    :param fallback: Extract from tag if pristine-tar fails
     """
     prefix = "%s_%s.orig.tar." % (package, version)
     dest_filename = None
@@ -68,11 +69,20 @@ def extract_upstream_tarball(path, package, version, dest_dir):
     finally:
         pristine_tar_list.wait()
     if dest_filename is not None:
-        subprocess.check_call(
-            ["pristine-tar", "checkout",
-             os.path.abspath(os.path.join(dest_dir, dest_filename))],
-            cwd=path)
-    else:
+        try:
+            subprocess.check_call(
+                ["pristine-tar", "checkout",
+                 os.path.abspath(os.path.join(dest_dir, dest_filename))],
+                cwd=path)
+        # ideally we'd triage between pristine-tar issues
+        except subprocess.CalledProcessError as e:
+            print("pristine-tar exception")
+            if not fallback:
+                raise e
+            if os.path.exists(dest_filename):
+                os.remove(dest_filename)
+    # no pristine-tar data or pristine-tar failed
+    if not os.path.exists(dest_filename):
         tag_names = ["upstream/%s" % version, "upstream-%s" % version]
         git_tag_list = subprocess.Popen(
             ["git", "tag"], stdout=subprocess.PIPE, cwd=path)

Follow ups