Skip to content

Commit

Permalink
cmd-build: Fix buildfetch image.yaml overwriting configs
Browse files Browse the repository at this point in the history
Add option to cmdlib.import_ostree_commit to conditionally exclude the image.json extraction that overwrites.
Add option to import_ostree_commit wrapper.
Use import_ostree_commit exclusion of image.json option when importing after creating image.json.
  • Loading branch information
mtalexan committed Sep 14, 2023
1 parent 45e72e0 commit 059425f
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 7 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}" false
else
# ok, just fallback to importing the commit object only
mkdir -p "$(dirname "${commitpath}")"
Expand Down
10 changes: 7 additions & 3 deletions src/cmdlib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1048,9 +1048,13 @@ 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 $2 isn't set false.
import_ostree_commit_for_build() {
local buildid=$1; shift
local buildid=$1
local extractjson=${2^:-true}
shift 2
# pythonize the bash true/false into True/False
local extractjson_pythonized=${extractjson^}
(python3 -c "
import sys
sys.path.insert(0, '${DIR}')
Expand All @@ -1060,7 +1064,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, extract_json=${extractjson_pythonized})
")
}

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=True):
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:
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:
extract_image_json(workdir, commit)


def get_basearch():
Expand Down

0 comments on commit 059425f

Please sign in to comment.