Skip to content

Commit

Permalink
Merge branch 'master' into variants
Browse files Browse the repository at this point in the history
  • Loading branch information
ktf authored Oct 9, 2023
2 parents 145852e + bf63682 commit c00432a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
15 changes: 13 additions & 2 deletions alibuild_helpers/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ def hash_local_changes(directory):
If there are untracked files, this function returns a unique hash to force a
rebuild, and logs a warning, as we cannot detect changes to those files.
"""
untrackedFilesDirectories = []
class UntrackedChangesError(Exception):
"""Signal that we cannot detect code changes due to untracked files."""
h = Hasher()
Expand All @@ -291,6 +292,7 @@ def hash_output(msg, args):
debug("Command %s returned %d", cmd, err)
dieOnError(err, "Unable to detect source code changes.")
except UntrackedChangesError:
untrackedFilesDirectories = [directory]
warning("You have untracked changes in %s, so aliBuild cannot detect "
"whether it needs to rebuild the package. Therefore, the package "
"is being rebuilt unconditionally. Please use 'git add' and/or "
Expand All @@ -299,7 +301,7 @@ def hash_output(msg, args):
# and let CMake figure out what needs to be rebuilt. Force a rebuild by
# changing the hash to something basically random.
h(str(time.time()))
return h.hexdigest()
return (h.hexdigest(), untrackedFilesDirectories)


def better_tarball(spec, old, new):
Expand Down Expand Up @@ -480,6 +482,10 @@ def doBuild(args, parser):

# Clone/update repos
update_git_repos(args, specs, buildOrder, develPkgs)
# This is the list of packages which have untracked files in their
# source directory, and which are rebuilt every time. We will warn
# about them at the end of the build.
untrackedFilesDirectories = []

# Resolve the tag to the actual commit ref
for p in buildOrder:
Expand Down Expand Up @@ -516,7 +522,9 @@ def doBuild(args, parser):
# Devel package: we get the commit hash from the checked source, not from remote.
out = git(("rev-parse", "HEAD"), directory=spec["source"])
spec["commit_hash"] = out.strip()
spec["devel_hash"] = spec["commit_hash"] + hash_local_changes(spec["source"])
local_hash, untracked = hash_local_changes(spec["source"])
untrackedFilesDirectories.extend(untracked)
spec["devel_hash"] = spec["commit_hash"] + local_hash
if spec.get("variants", ()):
# spec["variants"] is a set, so its order is undefined. Sort it.
spec["devel_hash"] += "/" + ",".join(sorted(spec["variants"]))
Expand Down Expand Up @@ -1165,5 +1173,8 @@ def doBuild(args, parser):
for x in develPkgs:
banner("Build directory for devel package %s:\n%s/BUILD/%s-latest%s/%s",
x, abspath(args.workDir), x, "-"+args.develPrefix if "develPrefix" in args else "", x)
for x in untrackedFilesDirectories:
banner("Untracked files in the following directories resulted in a rebuild of "
"the associated package and its dependencies:\n%s\n\nPlease commit or remove them to avoid useless rebuilds.", "\n".join(untrackedFilesDirectories))
debug("Everything done")
return 0
5 changes: 5 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ allowlist_externals =
sh
git
test
touch
deps =
py27: mock
coverage
Expand Down Expand Up @@ -101,6 +102,10 @@ commands =
# Test for devel packages
coverage run --source={toxinidir} -a {toxinidir}/aliBuild init zlib
coverage run --source={toxinidir} -a {toxinidir}/aliBuild --aggressive-cleanup --docker -a slc7_x86-64 --always-prefer-system -d build zlib
# Test that we complain if we have a devel package with an untracked file
coverage run --source={toxinidir} -a {toxinidir}/aliBuild init zlib
touch zlib/foo
coverage run --source={toxinidir} -a {toxinidir}/aliBuild -a slc7_x86-64 --no-system --disable GCC-Toolchain build zlib

[coverage:run]
branch = True
Expand Down

0 comments on commit c00432a

Please sign in to comment.