summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--morphlib/plugins/branch_and_merge_plugin.py27
-rwxr-xr-xtests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.script6
-rw-r--r--tests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.stdout30
-rwxr-xr-xtests.as-root/building-a-system-branch-picks-up-uncommitted-changes.script14
-rw-r--r--tests.as-root/building-a-system-branch-picks-up-uncommitted-changes.stdout9
-rwxr-xr-xtests.as-root/building-a-system-branch-works-anywhere.script7
-rw-r--r--tests.as-root/building-a-system-branch-works-anywhere.stdout10
7 files changed, 28 insertions, 75 deletions
diff --git a/morphlib/plugins/branch_and_merge_plugin.py b/morphlib/plugins/branch_and_merge_plugin.py
index 97f49eb4..1e2f381d 100644
--- a/morphlib/plugins/branch_and_merge_plugin.py
+++ b/morphlib/plugins/branch_and_merge_plugin.py
@@ -1116,6 +1116,7 @@ class BranchAndMergePlugin(cliapp.Plugin):
'parameter: the system to build')
system_name = args[0]
+ push = False
# Deduce workspace and system branch and branch root repository.
workspace = self.deduce_workspace()
@@ -1143,21 +1144,25 @@ class BranchAndMergePlugin(cliapp.Plugin):
# Create the build refs for all these repositories and commit
# all uncommitted changes to them, updating all references
# to system branch refs to point to the build refs instead.
- self.update_build_refs(build_repos, branch, build_uuid)
+ self.update_build_refs(build_repos, branch, build_uuid, push)
- # Push the temporary build refs.
- self.push_build_refs(build_repos)
+ if push:
+ self.push_build_refs(build_repos)
+ build_branch_root = branch_root
+ else:
+ dirname = build_repos[branch_root]['dirname']
+ build_branch_root = urlparse.urljoin('file://', dirname)
# Run the build.
build_command = morphlib.buildcommand.BuildCommand(self.app)
build_command = self.app.hookmgr.call('new-build-command',
build_command)
- build_command.build([branch_root,
+ build_command.build([build_branch_root,
build_repos[branch_root]['build-ref'],
system_name])
- # Delete the temporary refs on the server.
- self.delete_remote_build_refs(build_repos)
+ if push:
+ self.delete_remote_build_refs(build_repos)
self.app.status(msg='Finished build %(uuid)s', uuid=build_uuid)
@@ -1212,7 +1217,7 @@ class BranchAndMergePlugin(cliapp.Plugin):
return build_repos
- def inject_build_refs(self, morphology, build_repos):
+ def inject_build_refs(self, morphology, build_repos, will_push):
# Starting from a system or stratum morphology, update all ref
# pointers of strata or chunks involved in a system build (represented
# by build_repos) to point to temporary build refs of the repos
@@ -1222,6 +1227,9 @@ class BranchAndMergePlugin(cliapp.Plugin):
info['morph'] in build_repos[info['repo']]['strata'] or
info['morph'] in build_repos[info['repo']]['chunks']):
info['ref'] = build_repos[info['repo']]['build-ref']
+ if not will_push:
+ dirname = build_repos[info['repo']]['dirname']
+ info['repo'] = urlparse.urljoin('file://', dirname)
if morphology['kind'] == 'system':
for info in morphology['strata']:
inject_build_ref(info)
@@ -1237,7 +1245,8 @@ class BranchAndMergePlugin(cliapp.Plugin):
branch_uuid, repo_uuid)
info['build-ref'] = build_ref
- def update_build_refs(self, build_repos, system_branch, build_uuid):
+ def update_build_refs(self, build_repos, system_branch, build_uuid,
+ will_push):
'''Update build branches for each repository with any local changes '''
# Define the committer.
@@ -1291,7 +1300,7 @@ class BranchAndMergePlugin(cliapp.Plugin):
for filename in filenames:
# Inject temporary refs in the right places in each morphology.
morphology = self.load_morphology(repo_dir, filename)
- self.inject_build_refs(morphology, build_repos)
+ self.inject_build_refs(morphology, build_repos, will_push)
handle, tmpfile = tempfile.mkstemp(suffix='.morph')
self.save_morphology(repo_dir, tmpfile, morphology)
diff --git a/tests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.script b/tests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.script
index ab84c431..9ccc3dee 100755
--- a/tests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.script
+++ b/tests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.script
@@ -32,14 +32,14 @@ source "$SRCDIR/tests.as-root/setup-build"
# Build once.
cd "$DATADIR/workspace"
"$SRCDIR/scripts/test-morph" build linux-system
-"$SRCDIR/scripts/list-tree" "$DATADIR/cache/artifacts"
+ARTIFACT_COUNT="$(ls "$DATADIR/cache/artifacts" | wc -l)"
# Build twice.
cd "$DATADIR/workspace/branch1"
"$SRCDIR/scripts/test-morph" build linux-system
-"$SRCDIR/scripts/list-tree" "$DATADIR/cache/artifacts"
+[ "$ARTIFACT_COUNT" -eq $(ls "$DATADIR/cache/artifacts" | wc -l) ]
# Build thrice, and that should be enough.
cd "$DATADIR/workspace/branch1/test:morphs"
"$SRCDIR/scripts/test-morph" build linux-system
-"$SRCDIR/scripts/list-tree" "$DATADIR/cache/artifacts"
+[ "$ARTIFACT_COUNT" -eq $(ls "$DATADIR/cache/artifacts" | wc -l) ]
diff --git a/tests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.stdout b/tests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.stdout
deleted file mode 100644
index a02b977c..00000000
--- a/tests.as-root/building-a-system-branch-multiple-times-doesnt-generate-new-artifacts.stdout
+++ /dev/null
@@ -1,30 +0,0 @@
-d .
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.meta
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.stratum.linux-stratum
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.stratum.linux-stratum.meta
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.build-log
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.chunk.linux
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.meta
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.meta
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.system.linux-system-kernel
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.system.linux-system-rootfs
-d .
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.meta
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.stratum.linux-stratum
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.stratum.linux-stratum.meta
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.build-log
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.chunk.linux
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.meta
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.meta
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.system.linux-system-kernel
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.system.linux-system-rootfs
-d .
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.meta
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.stratum.linux-stratum
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.stratum.linux-stratum.meta
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.build-log
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.chunk.linux
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.meta
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.meta
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.system.linux-system-kernel
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.system.linux-system-rootfs
diff --git a/tests.as-root/building-a-system-branch-picks-up-uncommitted-changes.script b/tests.as-root/building-a-system-branch-picks-up-uncommitted-changes.script
index f959bb43..642093dc 100755
--- a/tests.as-root/building-a-system-branch-picks-up-uncommitted-changes.script
+++ b/tests.as-root/building-a-system-branch-picks-up-uncommitted-changes.script
@@ -34,14 +34,10 @@ cd "$DATADIR/workspace"
"$SRCDIR/scripts/test-morph" build linux-system
# Print tree SHA1s of the build ref of morphs and kernel.
-echo "Tree of morphs repo build branch after first build:"
cd "$DATADIR/workspace/branch1/test:morphs"
-git log -1 --format=%T baserock/builds/123456789/987654321
-echo "Tree of kernel repo build branch after first build:"
+MORPHS_SHA1="$(git rev-parse baserock/builds/123456789/987654321)"
cd "$DATADIR/workspace/branch1/test:kernel-repo"
-git log -1 --format=%T baserock/builds/123456789/AABBCCDDE
-
-echo
+KERNEL_SHA1="$(git rev-parse baserock/builds/123456789/AABBCCDDE)"
# Make an uncommitted change to the linux morphology.
cd "$DATADIR/workspace/branch1/test:kernel-repo"
@@ -55,9 +51,7 @@ cd "$DATADIR/workspace"
# This time the tree SHA1 of morphs should be the same
# but that of the kernel repo should be different because we
# made a change.
-echo "Tree of morphs repo build branch after second build:"
cd "$DATADIR/workspace/branch1/test:morphs"
-git log -1 --format=%T baserock/builds/123456789/987654321
-echo "Tree of kernel repo build branch after second build:"
+[ "$(git rev-parse baserock/builds/123456789/987654321)" != "$MORPHS_SHA1" ]
cd "$DATADIR/workspace/branch1/test:kernel-repo"
-git log -1 --format=%T baserock/builds/123456789/AABBCCDDE
+[ "$(git rev-parse baserock/builds/123456789/AABBCCDDE)" != "$KERNEL_SHA1" ]
diff --git a/tests.as-root/building-a-system-branch-picks-up-uncommitted-changes.stdout b/tests.as-root/building-a-system-branch-picks-up-uncommitted-changes.stdout
deleted file mode 100644
index d5758d78..00000000
--- a/tests.as-root/building-a-system-branch-picks-up-uncommitted-changes.stdout
+++ /dev/null
@@ -1,9 +0,0 @@
-Tree of morphs repo build branch after first build:
-73b00844bfe028b01d2464727d703f1fcc1f8ef9
-Tree of kernel repo build branch after first build:
-83d99190fa36d14f1bd24d88ba0fbe2ce674dd7c
-
-Tree of morphs repo build branch after second build:
-73b00844bfe028b01d2464727d703f1fcc1f8ef9
-Tree of kernel repo build branch after second build:
-5b015689415c96cdd290834ba105a64be28a3cfb
diff --git a/tests.as-root/building-a-system-branch-works-anywhere.script b/tests.as-root/building-a-system-branch-works-anywhere.script
index 1ce59b0f..2bba83dc 100755
--- a/tests.as-root/building-a-system-branch-works-anywhere.script
+++ b/tests.as-root/building-a-system-branch-works-anywhere.script
@@ -52,11 +52,10 @@ cd "$DATADIR/workspace/branch1/test:kernel-repo"
"$SRCDIR/scripts/list-tree" "$DATADIR/cache/artifacts" > "$DATADIR/output4"
rm -rf "$DATADIR/cache/artifacts"/*
-# Verify that we're always building the same and that we're building
-# the right things after all.
-cat "$DATADIR/output1"
+# Verify that we build the right number of artifacts
+[ $(wc < "$DATADIR/output1" -l) -eq 10 ]
-# Print diffs of the build results, all of which should be empty.
+# List of files in the artifact cache should be identical after each build
diff "$DATADIR/output1" "$DATADIR/output2"
diff "$DATADIR/output2" "$DATADIR/output3"
diff "$DATADIR/output3" "$DATADIR/output4"
diff --git a/tests.as-root/building-a-system-branch-works-anywhere.stdout b/tests.as-root/building-a-system-branch-works-anywhere.stdout
deleted file mode 100644
index 3bbb820f..00000000
--- a/tests.as-root/building-a-system-branch-works-anywhere.stdout
+++ /dev/null
@@ -1,10 +0,0 @@
-d .
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.meta
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.stratum.linux-stratum
-f ./2311765afd12c233a772a33d7f7e31e2450c191379a430790ea03b07938b9e14.stratum.linux-stratum.meta
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.build-log
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.chunk.linux
-f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.meta
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.meta
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.system.linux-system-kernel
-f ./f59cea90b0ea8c780c00adee730f6de993be0b744c7c92fb06b037b7879fc668.system.linux-system-rootfs