summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmorph4
-rwxr-xr-xtests.branching/branch-creates-new-system-branch-not-from-master.script35
-rw-r--r--tests.branching/branch-creates-new-system-branch-not-from-master.stdout29
-rw-r--r--tests.branching/branch-creates-new-system-branch.stdout4
-rw-r--r--tests.branching/edit-clones-chunk.stdout4
-rwxr-xr-xtests.branching/setup3
6 files changed, 71 insertions, 8 deletions
diff --git a/morph b/morph
index 8f3ba311..0a77995b 100755
--- a/morph
+++ b/morph
@@ -719,13 +719,13 @@ class Morph(cliapp.Application):
def cmd_branch(self, args):
'''Branch the whole system.'''
- if len(args) != 1:
+ if len(args) not in [1, 2]:
raise cliapp.AppException('morph branch needs name of branch '
'as parameter')
new_branch = args[0]
repo = 'morphs'
- commit = 'master'
+ commit = 'master' if len(args) == 1 else args[1]
# Create the system branch directory.
os.makedirs(new_branch)
diff --git a/tests.branching/branch-creates-new-system-branch-not-from-master.script b/tests.branching/branch-creates-new-system-branch-not-from-master.script
new file mode 100755
index 00000000..9ab44809
--- /dev/null
+++ b/tests.branching/branch-creates-new-system-branch-not-from-master.script
@@ -0,0 +1,35 @@
+#!/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.
+
+# Make sure "morph branch" creates a new system branch.
+
+set -eu
+
+cd "$DATADIR/mine"
+"$SRCDIR/scripts/test-morph" init
+
+"$SRCDIR/scripts/test-morph" branch newbranch origin/alfred
+
+echo "File tree:"
+"$SRCDIR/scripts/list-tree" . | grep -v '/\.git/' |
+ sed 's,/cache/gits/file_[^/]*_,/cache/gits/file_,'
+
+echo "Current branches:"
+"$SRCDIR/scripts/run-git-in" newbranch/morphs branch
+
+echo "Current origin:"
+"$SRCDIR/scripts/run-git-in" newbranch/morphs remote show origin |
+ sed 's,\(TMP/mine/\.morph/cache/gits/file_\).*_,\1,g'
diff --git a/tests.branching/branch-creates-new-system-branch-not-from-master.stdout b/tests.branching/branch-creates-new-system-branch-not-from-master.stdout
new file mode 100644
index 00000000..7c04a8dc
--- /dev/null
+++ b/tests.branching/branch-creates-new-system-branch-not-from-master.stdout
@@ -0,0 +1,29 @@
+File tree:
+d .
+d ./.morph
+d ./.morph/cache
+d ./.morph/cache/gits
+d ./.morph/cache/gits/file_morphs
+d ./.morph/cache/gits/file_morphs/.git
+d ./newbranch
+d ./newbranch/morphs
+d ./newbranch/morphs/.git
+f ./newbranch/morphs/hello-stratum.chunk
+f ./newbranch/morphs/hello-system.chunk
+f ./newbranch/morphs/this.is.alfred
+Current branches:
+ master
+* newbranch
+Current origin:
+* remote origin
+ Fetch URL: file://TMP/morphs
+ Push URL: file://TMP/morphs
+ HEAD branch: master
+ Remote branches:
+ alfred tracked
+ master tracked
+ Local branches configured for 'git pull':
+ master merges with remote master
+ newbranch merges with remote alfred
+ Local ref configured for 'git push':
+ master pushes to master (up to date)
diff --git a/tests.branching/branch-creates-new-system-branch.stdout b/tests.branching/branch-creates-new-system-branch.stdout
index 6a3a9b98..0b0ce872 100644
--- a/tests.branching/branch-creates-new-system-branch.stdout
+++ b/tests.branching/branch-creates-new-system-branch.stdout
@@ -17,9 +17,7 @@ Current origin:
* remote origin
Fetch URL: file://TMP/morphs
Push URL: file://TMP/morphs
- HEAD branch (remote HEAD is ambiguous, may be one of the following):
- alfred
- master
+ HEAD branch: master
Remote branches:
alfred tracked
master tracked
diff --git a/tests.branching/edit-clones-chunk.stdout b/tests.branching/edit-clones-chunk.stdout
index 4bbf909e..c712f0bf 100644
--- a/tests.branching/edit-clones-chunk.stdout
+++ b/tests.branching/edit-clones-chunk.stdout
@@ -5,9 +5,7 @@ Current origin, morphs:
* remote origin
Fetch URL: file://TMP/morphs
Push URL: file://TMP/morphs
- HEAD branch (remote HEAD is ambiguous, may be one of the following):
- alfred
- master
+ HEAD branch: master
Remote branches:
alfred tracked
master tracked
diff --git a/tests.branching/setup b/tests.branching/setup
index 68117fa3..261e7142 100755
--- a/tests.branching/setup
+++ b/tests.branching/setup
@@ -74,6 +74,9 @@ 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