summaryrefslogtreecommitdiff
path: root/tests.branching
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-08-30 13:35:45 +0000
committerJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-08-30 14:45:06 +0000
commit332b39f5df8a70f0c0146189a28d465da493e441 (patch)
treef0499b68f227fc3d3c4ae9ad96d49fe5ac1cf8a1 /tests.branching
parent8247661b26f7232038bac95c64780121e9691db5 (diff)
downloadmorph-332b39f5df8a70f0c0146189a28d465da493e441.tar.gz
Fix branch/checkout to always create branches in the workspace directory
Doing this rather than creating the system branches in the current working directory allows "morph branch" and "morph checkout" to be run anywhere in the workspace (e.g. in a different branch). This commit also adds two tests to verify that new branches are always created in the toplevel workspace directory.
Diffstat (limited to 'tests.branching')
-rw-r--r--tests.branching/branch-when-branchdir-exists-locally.stderr2
-rwxr-xr-xtests.branching/branch-works-anywhere.script56
-rw-r--r--tests.branching/branch-works-anywhere.stdout98
-rwxr-xr-xtests.branching/checkout-works-anywhere.script46
-rw-r--r--tests.branching/checkout-works-anywhere.stdout35
5 files changed, 236 insertions, 1 deletions
diff --git a/tests.branching/branch-when-branchdir-exists-locally.stderr b/tests.branching/branch-when-branchdir-exists-locally.stderr
index 6c56c250..e178cf2c 100644
--- a/tests.branching/branch-when-branchdir-exists-locally.stderr
+++ b/tests.branching/branch-when-branchdir-exists-locally.stderr
@@ -1 +1 @@
-ERROR: newbranch: File exists
+ERROR: TMP/workspace/newbranch: File exists
diff --git a/tests.branching/branch-works-anywhere.script b/tests.branching/branch-works-anywhere.script
new file mode 100755
index 00000000..85098f49
--- /dev/null
+++ b/tests.branching/branch-works-anywhere.script
@@ -0,0 +1,56 @@
+#!/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.
+
+# Make sure "morph branch" works anywhere in a workspace or system branch.
+
+set -eu
+
+cd "$DATADIR/workspace"
+"$SRCDIR/scripts/test-morph" init
+
+# First, create a branch.
+"$SRCDIR/scripts/test-morph" branch baserock:morphs branch1
+
+echo "Workspace after creating the first branch:"
+"$SRCDIR/scripts/list-tree" "$DATADIR/workspace" | grep -v '/\.git/' |
+ sed 's,/cache/gits/file_[^/]*_,/cache/gits/file_,'
+
+# Now, create a nother branch from the workspace.
+"$SRCDIR/scripts/test-morph" branch baserock:morphs branch2
+
+echo "Workspace after creating the second branch:"
+"$SRCDIR/scripts/list-tree" "$DATADIR/workspace" | grep -v '/\.git/' |
+ sed 's,/cache/gits/file_[^/]*_,/cache/gits/file_,'
+
+# Now, enter the first branch and create a third branch, which
+# should not be created in the working directory but in the
+# workspace directory.
+cd "$DATADIR/workspace/branch1"
+"$SRCDIR/scripts/test-morph" branch baserock:morphs branch3
+
+echo "Workspace after creating the third branch:"
+"$SRCDIR/scripts/list-tree" "$DATADIR/workspace" | grep -v '/\.git/' |
+ sed 's,/cache/gits/file_[^/]*_,/cache/gits/file_,'
+
+# Now, go into the morphs repository of that third branch and
+# create a fourth system branch from in there. This, too, should
+# end up being created in the toplevel workspace directory.
+cd "$DATADIR/workspace/branch3/baserock:morphs"
+"$SRCDIR/scripts/test-morph" branch baserock:morphs branch4
+
+echo "Workspace after creating the fourth branch:"
+"$SRCDIR/scripts/list-tree" "$DATADIR/workspace" | grep -v '/\.git/' |
+ sed 's,/cache/gits/file_[^/]*_,/cache/gits/file_,'
diff --git a/tests.branching/branch-works-anywhere.stdout b/tests.branching/branch-works-anywhere.stdout
new file mode 100644
index 00000000..cddc2d76
--- /dev/null
+++ b/tests.branching/branch-works-anywhere.stdout
@@ -0,0 +1,98 @@
+Workspace after creating the first branch:
+d .
+d ./.morph
+d ./.morph/cache
+d ./.morph/cache/gits
+d ./.morph/cache/gits/file_morphs
+d ./.morph/cache/gits/file_morphs/.git
+d ./branch1
+d ./branch1/.morph-system-branch
+d ./branch1/baserock:morphs
+d ./branch1/baserock:morphs/.git
+f ./branch1/.morph-system-branch/branch-root
+f ./branch1/baserock:morphs/hello-stratum.morph
+f ./branch1/baserock:morphs/hello-system.morph
+Workspace after creating the second branch:
+d .
+d ./.morph
+d ./.morph/cache
+d ./.morph/cache/gits
+d ./.morph/cache/gits/file_morphs
+d ./.morph/cache/gits/file_morphs/.git
+d ./branch1
+d ./branch1/.morph-system-branch
+d ./branch1/baserock:morphs
+d ./branch1/baserock:morphs/.git
+d ./branch2
+d ./branch2/.morph-system-branch
+d ./branch2/baserock:morphs
+d ./branch2/baserock:morphs/.git
+f ./branch1/.morph-system-branch/branch-root
+f ./branch1/baserock:morphs/hello-stratum.morph
+f ./branch1/baserock:morphs/hello-system.morph
+f ./branch2/.morph-system-branch/branch-root
+f ./branch2/baserock:morphs/hello-stratum.morph
+f ./branch2/baserock:morphs/hello-system.morph
+Workspace after creating the third branch:
+d .
+d ./.morph
+d ./.morph/cache
+d ./.morph/cache/gits
+d ./.morph/cache/gits/file_morphs
+d ./.morph/cache/gits/file_morphs/.git
+d ./branch1
+d ./branch1/.morph-system-branch
+d ./branch1/baserock:morphs
+d ./branch1/baserock:morphs/.git
+d ./branch2
+d ./branch2/.morph-system-branch
+d ./branch2/baserock:morphs
+d ./branch2/baserock:morphs/.git
+d ./branch3
+d ./branch3/.morph-system-branch
+d ./branch3/baserock:morphs
+d ./branch3/baserock:morphs/.git
+f ./branch1/.morph-system-branch/branch-root
+f ./branch1/baserock:morphs/hello-stratum.morph
+f ./branch1/baserock:morphs/hello-system.morph
+f ./branch2/.morph-system-branch/branch-root
+f ./branch2/baserock:morphs/hello-stratum.morph
+f ./branch2/baserock:morphs/hello-system.morph
+f ./branch3/.morph-system-branch/branch-root
+f ./branch3/baserock:morphs/hello-stratum.morph
+f ./branch3/baserock:morphs/hello-system.morph
+Workspace after creating the fourth branch:
+d .
+d ./.morph
+d ./.morph/cache
+d ./.morph/cache/gits
+d ./.morph/cache/gits/file_morphs
+d ./.morph/cache/gits/file_morphs/.git
+d ./branch1
+d ./branch1/.morph-system-branch
+d ./branch1/baserock:morphs
+d ./branch1/baserock:morphs/.git
+d ./branch2
+d ./branch2/.morph-system-branch
+d ./branch2/baserock:morphs
+d ./branch2/baserock:morphs/.git
+d ./branch3
+d ./branch3/.morph-system-branch
+d ./branch3/baserock:morphs
+d ./branch3/baserock:morphs/.git
+d ./branch4
+d ./branch4/.morph-system-branch
+d ./branch4/baserock:morphs
+d ./branch4/baserock:morphs/.git
+f ./branch1/.morph-system-branch/branch-root
+f ./branch1/baserock:morphs/hello-stratum.morph
+f ./branch1/baserock:morphs/hello-system.morph
+f ./branch2/.morph-system-branch/branch-root
+f ./branch2/baserock:morphs/hello-stratum.morph
+f ./branch2/baserock:morphs/hello-system.morph
+f ./branch3/.morph-system-branch/branch-root
+f ./branch3/baserock:morphs/hello-stratum.morph
+f ./branch3/baserock:morphs/hello-system.morph
+f ./branch4/.morph-system-branch/branch-root
+f ./branch4/baserock:morphs/hello-stratum.morph
+f ./branch4/baserock:morphs/hello-system.morph
diff --git a/tests.branching/checkout-works-anywhere.script b/tests.branching/checkout-works-anywhere.script
new file mode 100755
index 00000000..fdc3c955
--- /dev/null
+++ b/tests.branching/checkout-works-anywhere.script
@@ -0,0 +1,46 @@
+#!/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.
+
+# Make sure "morph checkout" works anywhere in a workspace or system branch.
+
+set -eu
+
+cd "$DATADIR/workspace"
+"$SRCDIR/scripts/test-morph" init
+
+# First, check out the master branch from the workspace directory.
+"$SRCDIR/scripts/test-morph" checkout baserock:morphs master
+
+echo "Workspace after checking out master from the workspace directory:"
+"$SRCDIR/scripts/list-tree" "$DATADIR/workspace" | grep -v '/\.git/' |
+ sed 's,/cache/gits/file_[^/]*_,/cache/gits/file_,'
+
+# Reset the workspace.
+cd "$DATADIR"
+rm -rf workspace
+mkdir workspace
+cd workspace
+"$SRCDIR/scripts/test-morph" init
+
+# This time, create a new branch and check out the master branch
+# from within that branch.
+"$SRCDIR/scripts/test-morph" branch baserock:morphs newbranch
+cd newbranch/baserock:morphs
+"$SRCDIR/scripts/test-morph" checkout baserock:morphs master
+
+echo "Workspace after checking out master from within a new branch:"
+"$SRCDIR/scripts/list-tree" "$DATADIR/workspace" | grep -v '/\.git/' |
+ sed 's,/cache/gits/file_[^/]*_,/cache/gits/file_,'
diff --git a/tests.branching/checkout-works-anywhere.stdout b/tests.branching/checkout-works-anywhere.stdout
new file mode 100644
index 00000000..0cd18b85
--- /dev/null
+++ b/tests.branching/checkout-works-anywhere.stdout
@@ -0,0 +1,35 @@
+Workspace after checking out master from the workspace directory:
+d .
+d ./.morph
+d ./.morph/cache
+d ./.morph/cache/gits
+d ./.morph/cache/gits/file_morphs
+d ./.morph/cache/gits/file_morphs/.git
+d ./master
+d ./master/.morph-system-branch
+d ./master/baserock:morphs
+d ./master/baserock:morphs/.git
+f ./master/.morph-system-branch/branch-root
+f ./master/baserock:morphs/hello-stratum.morph
+f ./master/baserock:morphs/hello-system.morph
+Workspace after checking out master from within a new branch:
+d .
+d ./.morph
+d ./.morph/cache
+d ./.morph/cache/gits
+d ./.morph/cache/gits/file_morphs
+d ./.morph/cache/gits/file_morphs/.git
+d ./master
+d ./master/.morph-system-branch
+d ./master/baserock:morphs
+d ./master/baserock:morphs/.git
+d ./newbranch
+d ./newbranch/.morph-system-branch
+d ./newbranch/baserock:morphs
+d ./newbranch/baserock:morphs/.git
+f ./master/.morph-system-branch/branch-root
+f ./master/baserock:morphs/hello-stratum.morph
+f ./master/baserock:morphs/hello-system.morph
+f ./newbranch/.morph-system-branch/branch-root
+f ./newbranch/baserock:morphs/hello-stratum.morph
+f ./newbranch/baserock:morphs/hello-system.morph