Skip to content

Commit

Permalink
cmd-build: Always use fresh image.json
Browse files Browse the repository at this point in the history
When importing the previous commit during `cosa build`, we would clobber
`image.json` file we just derived with the one from the imported commit.
Fix this by telling `import_ostree_commit()` to skip JSON extraction on
this execution path, but leave it as-is for other execution paths.
  • Loading branch information
mtalexan committed Oct 18, 2023
1 parent 45e72e0 commit d51baf0
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 6 deletions.
3 changes: 2 additions & 1 deletion src/cmd-build
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,8 @@ if [ -n "${previous_commit}" ]; then
commitpartial=${tmprepo}/state/${previous_commit}.commitpartial
if [ ! -f "${commitpath}" ] || [ -f "${commitpartial}" ]; then
if [ -f "${previous_builddir}/${previous_ostree_tarfile_path}" ]; then
import_ostree_commit_for_build "${previous_build}"
# don't extract the image.json though, keep the one we generated during prepare_build above
import_ostree_commit_for_build "${previous_build}" 0
else
# ok, just fallback to importing the commit object only
mkdir -p "$(dirname "${commitpath}")"
Expand Down
5 changes: 3 additions & 2 deletions src/cmdlib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1048,9 +1048,10 @@ cmdlib.write_image_json('${srcfile}', '${outfile}')")

# API to prepare image builds.
# Ensures that the tmp/repo ostree repo is initialized,
# and also writes tmp/image.json.
# and also writes tmp/image.json if arg2 is unset or set to 1
import_ostree_commit_for_build() {
local buildid=$1; shift
local extractjson=${1:-1}; shift
(python3 -c "
import sys
sys.path.insert(0, '${DIR}')
Expand All @@ -1060,7 +1061,7 @@ workdir = '${workdir:-$(pwd)}'
builds = Builds(workdir)
builddir = builds.get_build_dir('${buildid}')
buildmeta = builds.get_build_meta('${buildid}')
cmdlib.import_ostree_commit(workdir, builddir, buildmeta)
cmdlib.import_ostree_commit(workdir, builddir, buildmeta, ${extractjson})
")
}

Expand Down
8 changes: 5 additions & 3 deletions src/cosalib/cmdlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ def extract_image_json(workdir, commit):
# a metal image, we may not have preserved that cache.
#
# Call this function to ensure that the ostree commit for a given build is in tmp/repo.
def import_ostree_commit(workdir, buildpath, buildmeta):
def import_ostree_commit(workdir, buildpath, buildmeta, extract_json=1):
tmpdir = os.path.join(workdir, 'tmp')
with Lock(os.path.join(workdir, 'tmp/repo.import.lock'),
lifetime=LOCK_DEFAULT_LIFETIME):
Expand All @@ -294,7 +294,8 @@ def import_ostree_commit(workdir, buildpath, buildmeta):
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL) == 0
and not os.path.isfile(commitpartial)):
extract_image_json(workdir, commit)
if extract_json == 1:
extract_image_json(workdir, commit)
return

print(f"Extracting {commit}")
Expand All @@ -320,7 +321,8 @@ def import_ostree_commit(workdir, buildpath, buildmeta):
subprocess.check_call(['ostree', f'--repo={repo}', 'pull-local', tmpd, buildmeta['buildid']])

# Also extract image.json since it's commonly needed by image builds
extract_image_json(workdir, commit)
if extract_json == 1:
extract_image_json(workdir, commit)


def get_basearch():
Expand Down

0 comments on commit d51baf0

Please sign in to comment.