Compare commits

...

6 Commits

Author SHA1 Message Date
Brett T. Warden 239d8cd618 Limit diff to ~10 lines
Also include content of added files.
2024-04-15 17:13:34 -07:00
Brett T. Warden 16ee88cb20 Don't write source archive comparison tarball to upstreams file
We only use this for source tree comparison, not part of the build, so
don't add it to the upstreams file.
2024-04-15 16:59:57 -07:00
Brett T. Warden 617c67c388 Make flake8 happy 2024-04-15 16:00:38 -07:00
Brett T. Warden 2cf51ddfb9 Move autogenerated source tree to a versionless directory 2024-04-15 15:54:30 -07:00
Brett T. Warden 6174188098 Fix failure on packages that don't have an autogenerated source tarball 2024-04-15 15:25:16 -07:00
Brett T. Warden 61e16733c8 Capture diffs of dist tarballs vs auto-generated source archives from GitHub 2024-04-15 15:12:17 -07:00
3 changed files with 29 additions and 3 deletions
+1
View File
@@ -113,6 +113,7 @@ def commit_to_git(config, name, success):
call("git add whatrequires", check=False, stderr=subprocess.DEVNULL, cwd=path)
call("git add description", check=False, stderr=subprocess.DEVNULL, cwd=path)
call("git add attrs", check=False, stderr=subprocess.DEVNULL, cwd=path)
call("git add archive.diff", check=False, stderr=subprocess.DEVNULL, cwd=path)
# remove deprecated config files
call("git rm make_install_append", check=False, stderr=subprocess.DEVNULL, cwd=path)
+25 -1
View File
@@ -26,7 +26,7 @@ import tarfile
import zipfile
import download
from util import do_regex, get_sha1sum, print_fatal, write_out
from util import call, do_regex, get_sha1sum, print_fatal, write_out
class Source():
@@ -184,6 +184,7 @@ class Content():
self.prefixes = dict()
self.config = config
self.base_path = base_path
self.autogenerated_tarball = None
def write_upstream(self, sha, tarfile, mode="w"):
"""Write the upstream hash to the upstream file."""
@@ -213,6 +214,14 @@ class Content():
main_src = Source(url, '', src_path, self.config.default_pattern)
return main_src
def process_autogenerated_source(self, url):
"""Download any autogenerated source tarball for comparison."""
autogenerated_src = None
if url:
src_path = self.check_or_get_file(url, os.path.basename(url), mode="")
autogenerated_src = Source(url, '../autogenerated-tmp', src_path, self.config.default_pattern)
return autogenerated_src
def print_header(self):
"""Print header for autospec run."""
print("\n")
@@ -295,6 +304,9 @@ class Content():
name = re.sub(r"release-", '', name)
name = re.sub(r"\d*$", '', name)
self.rawname = name
# Identify the auto-generated tarball URL for comparison
if "/releases/download/" in self.url:
self.autogenerated_tarball = "https://github.com/" + match.group(1).strip() + "/" + self.repo + "/archive/refs/tags/" + match.group(3).strip() + ".tar.gz"
version = match.group(3).replace(name, '')
if "/archive/" not in self.url:
version = re.sub(r"^[-_.a-zA-Z]+", "", version)
@@ -427,3 +439,15 @@ class Content():
archives_src = self.process_archives()
# Extract all sources
self.extract_sources(main_src, archives_src)
# Download and process any auto-generated source-tree archive for comparison
autogenerated_src = self.process_autogenerated_source(self.autogenerated_tarball)
# Extract autogenerated source for comparison
if autogenerated_src:
autogenerated_src.extract(os.path.join(self.base_path, 'autogenerated-tmp'))
# Move the autogenerated source to a non-version-named directory for consistent diffs
call(f"mv autogenerated-tmp/{autogenerated_src.prefix} autogenerated", check=True, cwd=self.base_path)
call("diff -u -r --unidirectional-new-file ../autogenerated ./",
logfile="archive.diff.in", check=False, cwd=os.path.join(self.base_path, main_src.prefix))
call("grep -A14 -E '^(diff|Only in)' archive.diff.in",
logfile="archive.diff", check=False, cwd=os.getcwd())
call("rm archive.diff.in", check=False, cwd=os.getcwd())
+3 -2
View File
@@ -150,8 +150,9 @@ def binary_in_path(binary):
def write_out(filename, content, mode="w"):
"""File.write convenience wrapper."""
with open_auto(filename, mode) as require_f:
require_f.write(content)
if mode:
with open_auto(filename, mode) as require_f:
require_f.write(content)
def open_auto(*args, **kwargs):