summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-03-23 14:17:27 +0000
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-03-23 14:17:27 +0000
commiteb655d7f9fcd3a744959893e4ee19a1a5cc35a18 (patch)
treeb64fc8bf3eeeab7641e42ee1833ca8cfc2f66076
parent5aa1716e971a424dc1dbe6e4c69a36eb7c95e714 (diff)
downloadmorph-eb655d7f9fcd3a744959893e4ee19a1a5cc35a18.tar.gz
Add "morph checkout" command
-rwxr-xr-xmorph17
-rwxr-xr-xtests.branching/checkout-existing-branch.script33
-rw-r--r--tests.branching/checkout-existing-branch.stdout12
3 files changed, 62 insertions, 0 deletions
diff --git a/morph b/morph
index 5f278cb4..355ab3fc 100755
--- a/morph
+++ b/morph
@@ -433,6 +433,23 @@ class Morph(cliapp.Application):
self.runcmd(['git', 'checkout', '-b', new_branch, commit],
cwd=new_repo)
+ def cmd_checkout(self, args):
+ '''Check out an existing system branch.'''
+
+ if len(args) != 1:
+ raise cliapp.AppException('morph checkout needs name of '
+ 'branch as parameter')
+
+ system_branch = args[0]
+ repo = 'morphs'
+
+ # Create the system branch directory.
+ os.makedirs(system_branch)
+
+ # Clone into system branch directory.
+ new_repo = os.path.join(system_branch, os.path.basename(repo))
+ self._clone_to_directory(new_repo, repo, system_branch)
+
def _deduce_system_branch(self):
out = self.runcmd(['git', 'branch'])
for line in out.splitlines():
diff --git a/tests.branching/checkout-existing-branch.script b/tests.branching/checkout-existing-branch.script
new file mode 100755
index 00000000..74941e18
--- /dev/null
+++ b/tests.branching/checkout-existing-branch.script
@@ -0,0 +1,33 @@
+#!/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.
+
+
+# Verify that "morph checkout master" works.
+
+
+set -eu
+
+
+cd "$DATADIR/mine"
+"$SRCDIR/scripts/test-morph" init
+"$SRCDIR/scripts/test-morph" checkout master
+
+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" master/morphs branch
diff --git a/tests.branching/checkout-existing-branch.stdout b/tests.branching/checkout-existing-branch.stdout
new file mode 100644
index 00000000..4b29db80
--- /dev/null
+++ b/tests.branching/checkout-existing-branch.stdout
@@ -0,0 +1,12 @@
+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 ./master
+d ./master/morphs
+d ./master/morphs/.git
+Current branches:
+* master