diff options
-rwxr-xr-x | check | 1 | ||||
-rw-r--r-- | scripts/setup-3rd-party-strata (renamed from tests.branching/setup-3rd-party-strata) | 0 | ||||
-rwxr-xr-x | tests.branching/merge.script | 69 | ||||
-rwxr-xr-x | tests.branching/status-in-dirty-branch.script | 2 | ||||
-rwxr-xr-x | tests.branching/workflow-petrify.script | 2 | ||||
-rwxr-xr-x | tests.branching/workflow-separate-stratum-repos.script | 2 | ||||
-rwxr-xr-x | tests.merging/basic.script (renamed from tests.branching/merge-not-to-master.script) | 11 | ||||
-rw-r--r-- | tests.merging/basic.stdout (renamed from tests.branching/merge.stdout) | 2 | ||||
-rwxr-xr-x | tests.merging/conflict-chunks.script (renamed from tests.branching/merge-conflict-chunks.script) | 2 | ||||
-rw-r--r-- | tests.merging/conflict-chunks.stderr (renamed from tests.branching/merge-conflict-chunks.stderr) | 0 | ||||
-rw-r--r-- | tests.merging/conflict-chunks.stdout (renamed from tests.branching/merge-conflict-chunks.stdout) | 0 | ||||
-rw-r--r-- | tests.merging/conflict-morphology-kind.exit (renamed from tests.branching/merge-conflict-stratum.exit) | 0 | ||||
-rwxr-xr-x | tests.merging/conflict-morphology-kind.script (renamed from tests.branching/merge-handles-unmergable-cases.script) | 2 | ||||
-rw-r--r-- | tests.merging/conflict-morphology-kind.stderr (renamed from tests.branching/merge-handles-unmergable-cases.stderr) | 0 | ||||
-rw-r--r-- | tests.merging/conflict-stratum-field-ordering.exit (renamed from tests.branching/merge-handles-unmergable-cases.exit) | 0 | ||||
-rwxr-xr-x | tests.merging/conflict-stratum-field-ordering.script (renamed from tests.branching/merge-conflict-stratum.script) | 8 | ||||
-rw-r--r-- | tests.merging/conflict-stratum-field-ordering.stderr (renamed from tests.branching/merge-conflict-stratum.stderr) | 0 | ||||
-rw-r--r-- | tests.merging/conflict-stratum-field-ordering.stdout (renamed from tests.branching/merge-conflict-stratum.stdout) | 0 | ||||
-rwxr-xr-x | tests.merging/from-branch-not-checked-out.script (renamed from tests.branching/merge-error-cases.script) | 2 | ||||
-rw-r--r-- | tests.merging/from-branch-not-checked-out.stderr (renamed from tests.branching/merge-error-cases.stderr) | 0 | ||||
-rw-r--r-- | tests.merging/move-chunk-repo.exit (renamed from tests.branching/merge-with-chunk-repo-moved.exit) | 0 | ||||
-rwxr-xr-x | tests.merging/move-chunk-repo.script (renamed from tests.branching/merge-with-chunk-repo-moved.script) | 0 | ||||
-rw-r--r-- | tests.merging/move-chunk-repo.stderr (renamed from tests.branching/merge-with-chunk-repo-moved.stderr) | 0 | ||||
-rwxr-xr-x | tests.merging/rename-chunk.script (renamed from tests.branching/merge-with-chunk-renamed.script) | 0 | ||||
-rw-r--r-- | tests.merging/rename-stratum.exit (renamed from tests.branching/merge-with-stratum-renamed.exit) | 0 | ||||
-rwxr-xr-x | tests.merging/rename-stratum.script (renamed from tests.branching/merge-with-stratum-renamed.script) | 0 | ||||
-rw-r--r-- | tests.merging/rename-stratum.stderr (renamed from tests.branching/merge-with-stratum-renamed.stderr) | 0 | ||||
-rwxr-xr-x | tests.merging/setup | 115 | ||||
-rwxr-xr-x | tests.merging/warn-if-merging-petrified-morphologies.script (renamed from tests.branching/merge-warns-if-merging-petrified-morphologies.script) | 0 | ||||
-rw-r--r-- | tests.merging/warn-if-merging-petrified-morphologies.stdout (renamed from tests.branching/merge-warns-if-merging-petrified-morphologies.stdout) | 0 |
30 files changed, 141 insertions, 77 deletions
@@ -22,6 +22,7 @@ set -e python setup.py clean check cmdtest tests cmdtest tests.branching +cmdtest tests.merging if [ $(whoami) = root ] && command -v mkfs.btrfs > /dev/null then cmdtest tests.as-root diff --git a/tests.branching/setup-3rd-party-strata b/scripts/setup-3rd-party-strata index 49eca394..49eca394 100644 --- a/tests.branching/setup-3rd-party-strata +++ b/scripts/setup-3rd-party-strata diff --git a/tests.branching/merge.script b/tests.branching/merge.script deleted file mode 100755 index d73e4835..00000000 --- a/tests.branching/merge.script +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -# Copyright (C) 2012 Codethink Limited -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -# Check that "morph merge" merges a system branch into master - -set -eu - -# Disable test on versions of Python before 2.7. -if ! python --version 2>&1 | grep '^Python 2\.[78]' > /dev/null -then - cat "$SRCDIR/tests.branching/merge.stdout" - exit 0 -fi - -# Create system branch. -cd "$DATADIR/workspace" -"$SRCDIR/scripts/test-morph" init -"$SRCDIR/scripts/test-morph" branch baserock:morphs baserock/newbranch - -# Make a change to a chunk. -cd baserock/newbranch -"$SRCDIR/scripts/test-morph" edit hello-system hello-stratum hello -cd baserock:hello -touch newfile.txt -git add newfile.txt -git commit -m foo --quiet -git push --quiet origin baserock/newbranch - -# Commit in morphs repo -cd ../baserock:morphs -git commit --all --quiet -m "Update morph refs for baserock/newbranch" - -# Merge changes back to master -cd "$DATADIR/workspace" -"$SRCDIR/scripts/test-morph" checkout baserock:morphs master -cd master -"$SRCDIR/scripts/test-morph" merge baserock/newbranch - -# Check results. -cd baserock:hello -git status --short # make sure all changes are committed -[ -e newfile.txt ] # make sure the new file is there - -# Make sure all refs to the merged branch have gone. -cd ../baserock:morphs -! grep "\"ref\": \"baserock/newbranch\"" *.morph - -# The only change here was the branch refs, which have now been -# changed back - so there should not be any new commits. -echo "Commit message for baserock:morphs" -git cat-file commit HEAD | tail -n 1 - -echo -echo "Commit message for baserock:hello" -cd ../baserock:hello -git cat-file commit HEAD | tail -n 1 diff --git a/tests.branching/status-in-dirty-branch.script b/tests.branching/status-in-dirty-branch.script index 36ed781d..beb58ced 100755 --- a/tests.branching/status-in-dirty-branch.script +++ b/tests.branching/status-in-dirty-branch.script @@ -19,7 +19,7 @@ set -eu -. "$SRCDIR/tests.branching/setup-3rd-party-strata" +. "$SRCDIR/scripts/setup-3rd-party-strata" cd "$DATADIR/workspace" "$SRCDIR/scripts/test-morph" branch baserock:morphs test diff --git a/tests.branching/workflow-petrify.script b/tests.branching/workflow-petrify.script index d83eb06b..ac8b233e 100755 --- a/tests.branching/workflow-petrify.script +++ b/tests.branching/workflow-petrify.script @@ -28,7 +28,7 @@ then exit 0 fi -. "$SRCDIR/tests.branching/setup-3rd-party-strata" +. "$SRCDIR/scripts/setup-3rd-party-strata" cd "$DATADIR/workspace" "$SRCDIR/scripts/test-morph" branch baserock:morphs test/petrify diff --git a/tests.branching/workflow-separate-stratum-repos.script b/tests.branching/workflow-separate-stratum-repos.script index d8be404c..6f77672e 100755 --- a/tests.branching/workflow-separate-stratum-repos.script +++ b/tests.branching/workflow-separate-stratum-repos.script @@ -22,7 +22,7 @@ set -eu -. "$SRCDIR/tests.branching/setup-3rd-party-strata" +. "$SRCDIR/scripts/setup-3rd-party-strata" # Make a change to the system # FIXME: we should try and build it, too diff --git a/tests.branching/merge-not-to-master.script b/tests.merging/basic.script index 824e89b6..741e8a3f 100755 --- a/tests.branching/merge-not-to-master.script +++ b/tests.merging/basic.script @@ -73,3 +73,14 @@ git status --short # Make sure all refs to the merged branch have gone. ! grep "\"ref\": \"test/feature\"" *.morph + +# The only change here was the branch refs, which have now been +# changed back - so there should not be any new commits. +echo "Commit message for baserock:morphs" +git cat-file commit HEAD | tail -n 1 + +echo +echo "Commit message for baserock:hello" +cd ../baserock:hello +git cat-file commit HEAD | tail -n 1 + diff --git a/tests.branching/merge.stdout b/tests.merging/basic.stdout index 6806f75a..2bdde644 100644 --- a/tests.branching/merge.stdout +++ b/tests.merging/basic.stdout @@ -2,4 +2,4 @@ Commit message for baserock:morphs initial Commit message for baserock:hello -Merge system branch 'baserock/newbranch' +Merge system branch 'test/feature' diff --git a/tests.branching/merge-conflict-chunks.script b/tests.merging/conflict-chunks.script index 547f6b62..98efcc3e 100755 --- a/tests.branching/merge-conflict-chunks.script +++ b/tests.merging/conflict-chunks.script @@ -27,7 +27,7 @@ then exit 0 fi -. "$SRCDIR/tests.branching/setup-3rd-party-strata" +. "$SRCDIR/scripts/setup-3rd-party-strata" # Create stable branch to merge TO "$SRCDIR/scripts/test-morph" branch baserock:morphs test/stable diff --git a/tests.branching/merge-conflict-chunks.stderr b/tests.merging/conflict-chunks.stderr index 57aafa5a..57aafa5a 100644 --- a/tests.branching/merge-conflict-chunks.stderr +++ b/tests.merging/conflict-chunks.stderr diff --git a/tests.branching/merge-conflict-chunks.stdout b/tests.merging/conflict-chunks.stdout index bf6d3828..bf6d3828 100644 --- a/tests.branching/merge-conflict-chunks.stdout +++ b/tests.merging/conflict-chunks.stdout diff --git a/tests.branching/merge-conflict-stratum.exit b/tests.merging/conflict-morphology-kind.exit index d00491fd..d00491fd 100644 --- a/tests.branching/merge-conflict-stratum.exit +++ b/tests.merging/conflict-morphology-kind.exit diff --git a/tests.branching/merge-handles-unmergable-cases.script b/tests.merging/conflict-morphology-kind.script index e1ba5f9e..d8fcc6ef 100755 --- a/tests.branching/merge-handles-unmergable-cases.script +++ b/tests.merging/conflict-morphology-kind.script @@ -14,7 +14,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# Things that "morph merge" isn't expected to handle (but shouldn't crash) +# If morphology kind differs between branches, it's a merge conflict set -eu diff --git a/tests.branching/merge-handles-unmergable-cases.stderr b/tests.merging/conflict-morphology-kind.stderr index ff6539a7..ff6539a7 100644 --- a/tests.branching/merge-handles-unmergable-cases.stderr +++ b/tests.merging/conflict-morphology-kind.stderr diff --git a/tests.branching/merge-handles-unmergable-cases.exit b/tests.merging/conflict-stratum-field-ordering.exit index d00491fd..d00491fd 100644 --- a/tests.branching/merge-handles-unmergable-cases.exit +++ b/tests.merging/conflict-stratum-field-ordering.exit diff --git a/tests.branching/merge-conflict-stratum.script b/tests.merging/conflict-stratum-field-ordering.script index ff00f364..071d5204 100755 --- a/tests.branching/merge-conflict-stratum.script +++ b/tests.merging/conflict-stratum-field-ordering.script @@ -14,7 +14,13 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# Simple merge conflict handling test. +# Conflict caused by two equivalent strata having different order in two +# different branches + +# Morph should possibly resolve this conflict automatically in the future, +# because the meaning of the morphologies is unambiguious if not the +# contents. It depends on how much weight we give to the sort order of +# the morphology from a developer's point of view. set -eu diff --git a/tests.branching/merge-conflict-stratum.stderr b/tests.merging/conflict-stratum-field-ordering.stderr index 57aafa5a..57aafa5a 100644 --- a/tests.branching/merge-conflict-stratum.stderr +++ b/tests.merging/conflict-stratum-field-ordering.stderr diff --git a/tests.branching/merge-conflict-stratum.stdout b/tests.merging/conflict-stratum-field-ordering.stdout index cce0973c..cce0973c 100644 --- a/tests.branching/merge-conflict-stratum.stdout +++ b/tests.merging/conflict-stratum-field-ordering.stdout diff --git a/tests.branching/merge-error-cases.script b/tests.merging/from-branch-not-checked-out.script index e802f139..2ead7f0f 100755 --- a/tests.branching/merge-error-cases.script +++ b/tests.merging/from-branch-not-checked-out.script @@ -14,7 +14,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# Check "morph merge" gives reasonable error messages +# Handle 'from' branch not being checked out set -eu diff --git a/tests.branching/merge-error-cases.stderr b/tests.merging/from-branch-not-checked-out.stderr index 6a9cc8a9..6a9cc8a9 100644 --- a/tests.branching/merge-error-cases.stderr +++ b/tests.merging/from-branch-not-checked-out.stderr diff --git a/tests.branching/merge-with-chunk-repo-moved.exit b/tests.merging/move-chunk-repo.exit index d00491fd..d00491fd 100644 --- a/tests.branching/merge-with-chunk-repo-moved.exit +++ b/tests.merging/move-chunk-repo.exit diff --git a/tests.branching/merge-with-chunk-repo-moved.script b/tests.merging/move-chunk-repo.script index d14d586f..d14d586f 100755 --- a/tests.branching/merge-with-chunk-repo-moved.script +++ b/tests.merging/move-chunk-repo.script diff --git a/tests.branching/merge-with-chunk-repo-moved.stderr b/tests.merging/move-chunk-repo.stderr index 95fe61e6..95fe61e6 100644 --- a/tests.branching/merge-with-chunk-repo-moved.stderr +++ b/tests.merging/move-chunk-repo.stderr diff --git a/tests.branching/merge-with-chunk-renamed.script b/tests.merging/rename-chunk.script index 06969b70..06969b70 100755 --- a/tests.branching/merge-with-chunk-renamed.script +++ b/tests.merging/rename-chunk.script diff --git a/tests.branching/merge-with-stratum-renamed.exit b/tests.merging/rename-stratum.exit index d00491fd..d00491fd 100644 --- a/tests.branching/merge-with-stratum-renamed.exit +++ b/tests.merging/rename-stratum.exit diff --git a/tests.branching/merge-with-stratum-renamed.script b/tests.merging/rename-stratum.script index 6daac566..6daac566 100755 --- a/tests.branching/merge-with-stratum-renamed.script +++ b/tests.merging/rename-stratum.script diff --git a/tests.branching/merge-with-stratum-renamed.stderr b/tests.merging/rename-stratum.stderr index ff408036..ff408036 100644 --- a/tests.branching/merge-with-stratum-renamed.stderr +++ b/tests.merging/rename-stratum.stderr diff --git a/tests.merging/setup b/tests.merging/setup new file mode 100755 index 00000000..f075e7b1 --- /dev/null +++ b/tests.merging/setup @@ -0,0 +1,115 @@ +#!/bin/bash +# Copyright (C) 2012 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +# Set up $DATADIR. +# +# - a morph.conf configuration file +# - an empty morph workspace directory +# - a git repository called "morphs" for fake system, stratum morphologies +# - a git repository calle "hello" for a dummy chunk + +set -eu + +source "$SRCDIR/scripts/fix-committer-info" + +# Create a morph configuration file +cat <<EOF > "$DATADIR/morph.conf" +[config] +repo-alias = baserock=file://$DATADIR/%s#file://$DATADIR/%s +cachedir = $DATADIR/workspace/.morph/cache +log = $DATADIR/morph.log +keep-path = true +no-distcc = true +quiet = true +EOF + + +# Create an empty directory to be used as a morph workspace +mkdir "$DATADIR/workspace" + + +# Create a fake morphs repository +mkdir "$DATADIR/morphs" + +## Create a link to this repo that has a .git suffix +ln -s "$DATADIR/morphs" "$DATADIR/morphs.git" + +cat <<EOF > "$DATADIR/morphs/hello-system.morph" +{ + "name": "hello-system", + "kind": "system", + "system-kind": "syslinux-disk", + "arch": "$(uname -m)", + "disk-size": "1G", + "strata": [ + { + "morph": "hello-stratum", + "repo": "baserock:morphs", + "ref": "master" + } + ] +} +EOF + +cat <<EOF > "$DATADIR/morphs/hello-stratum.morph" +{ + "name": "hello-stratum", + "kind": "stratum", + "chunks": [ + { + "name": "hello", + "repo": "baserock:hello", + "ref": "master", + "build-depends": [] + } + ] +} +EOF + +scripts/run-git-in "$DATADIR/morphs" init +scripts/run-git-in "$DATADIR/morphs" add . +scripts/run-git-in "$DATADIR/morphs" commit -m initial + + +# Add an extra branch to the morphs repo. +scripts/run-git-in "$DATADIR/morphs" checkout -b alfred +touch "$DATADIR/morphs/this.is.alfred" +scripts/run-git-in "$DATADIR/morphs" add this.is.alfred +scripts/run-git-in "$DATADIR/morphs" commit --quiet -m 'mark as alfred' +scripts/run-git-in "$DATADIR/morphs" checkout master + + +# Create a dummy chunk repository +mkdir "$DATADIR/hello" + +cat <<EOF > "$DATADIR/hello/hello.morph" +{ + "name": "hello", + "kind": "chunk", + "build-system": "dummy" +} +EOF + +scripts/run-git-in "$DATADIR/hello" init +scripts/run-git-in "$DATADIR/hello" add . +scripts/run-git-in "$DATADIR/hello" commit -m initial + + +# Add an extra branch to the hello repo. +scripts/run-git-in "$DATADIR/hello" checkout -b alfred +scripts/run-git-in "$DATADIR/hello" checkout master + diff --git a/tests.branching/merge-warns-if-merging-petrified-morphologies.script b/tests.merging/warn-if-merging-petrified-morphologies.script index 12e726ed..12e726ed 100755 --- a/tests.branching/merge-warns-if-merging-petrified-morphologies.script +++ b/tests.merging/warn-if-merging-petrified-morphologies.script diff --git a/tests.branching/merge-warns-if-merging-petrified-morphologies.stdout b/tests.merging/warn-if-merging-petrified-morphologies.stdout index 65985486..65985486 100644 --- a/tests.branching/merge-warns-if-merging-petrified-morphologies.stdout +++ b/tests.merging/warn-if-merging-petrified-morphologies.stdout |