summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--morphlib/plugins/branch_and_merge_plugin.py11
-rwxr-xr-xtests.branching/show-branch-root-in-branched-branch.script30
-rw-r--r--tests.branching/show-branch-root-in-branched-branch.stdout1
-rwxr-xr-xtests.branching/show-branch-root-in-checked-out-branch.script30
-rw-r--r--tests.branching/show-branch-root-in-checked-out-branch.stdout1
-rwxr-xr-xtests.branching/show-branch-root-with-repo-url.script30
-rw-r--r--tests.branching/show-branch-root-with-repo-url.stdout1
7 files changed, 104 insertions, 0 deletions
diff --git a/morphlib/plugins/branch_and_merge_plugin.py b/morphlib/plugins/branch_and_merge_plugin.py
index 5accf076..6c458031 100644
--- a/morphlib/plugins/branch_and_merge_plugin.py
+++ b/morphlib/plugins/branch_and_merge_plugin.py
@@ -39,6 +39,8 @@ class BranchAndMergePlugin(cliapp.Plugin):
arg_synopsis='BRANCH')
self.app.add_subcommand('show-system-branch', self.show_system_branch,
arg_synopsis='')
+ self.app.add_subcommand('show-branch-root', self.show_branch_root,
+ arg_synopsis='')
self.app.add_subcommand('merge', self.merge,
arg_synopsis='BRANCH REPO...')
self.app.add_subcommand('edit', self.edit,
@@ -331,6 +333,15 @@ class BranchAndMergePlugin(cliapp.Plugin):
self.app.output.write('%s\n' % self.deduce_system_branch())
+ def show_branch_root(self, args):
+ '''Print name of the repository that was branched off from.'''
+
+ workspace = self.deduce_workspace()
+ system_branch = self.deduce_system_branch()
+ branch_dir = os.path.join(workspace, system_branch)
+ branch_root = self.read_branch_root(branch_dir)
+ self.app.output.write('%s\n' % branch_root)
+
def merge(self, args):
'''Merge specified repositories from another system branch.'''
diff --git a/tests.branching/show-branch-root-in-branched-branch.script b/tests.branching/show-branch-root-in-branched-branch.script
new file mode 100755
index 00000000..aeb06bfc
--- /dev/null
+++ b/tests.branching/show-branch-root-in-branched-branch.script
@@ -0,0 +1,30 @@
+#!/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 show-branch-root' works when being run in a
+# local system branch created using 'morph branch ...'.
+
+
+set -eu
+
+# Create a workspace and branch.
+cd "$DATADIR/workspace"
+"$SRCDIR/scripts/test-morph" init
+"$SRCDIR/scripts/test-morph" branch baserock:morphs testbranch
+
+# Try to print the branch root repository.
+"$SRCDIR/scripts/test-morph" show-branch-root
diff --git a/tests.branching/show-branch-root-in-branched-branch.stdout b/tests.branching/show-branch-root-in-branched-branch.stdout
new file mode 100644
index 00000000..53a8bc43
--- /dev/null
+++ b/tests.branching/show-branch-root-in-branched-branch.stdout
@@ -0,0 +1 @@
+baserock:morphs
diff --git a/tests.branching/show-branch-root-in-checked-out-branch.script b/tests.branching/show-branch-root-in-checked-out-branch.script
new file mode 100755
index 00000000..ce76cc7b
--- /dev/null
+++ b/tests.branching/show-branch-root-in-checked-out-branch.script
@@ -0,0 +1,30 @@
+#!/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 show-branch-root' works when being run in a
+# local system branch created using 'morph checkout ...'.
+
+
+set -eu
+
+# Create a workspace and branch.
+cd "$DATADIR/workspace"
+"$SRCDIR/scripts/test-morph" init
+"$SRCDIR/scripts/test-morph" checkout baserock:morphs master
+
+# Try to print the branch root repository.
+"$SRCDIR/scripts/test-morph" show-branch-root
diff --git a/tests.branching/show-branch-root-in-checked-out-branch.stdout b/tests.branching/show-branch-root-in-checked-out-branch.stdout
new file mode 100644
index 00000000..53a8bc43
--- /dev/null
+++ b/tests.branching/show-branch-root-in-checked-out-branch.stdout
@@ -0,0 +1 @@
+baserock:morphs
diff --git a/tests.branching/show-branch-root-with-repo-url.script b/tests.branching/show-branch-root-with-repo-url.script
new file mode 100755
index 00000000..1470e0a6
--- /dev/null
+++ b/tests.branching/show-branch-root-with-repo-url.script
@@ -0,0 +1,30 @@
+#!/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 show-branch-root' works when being run in a
+# local system branch created from a full repository URL.
+
+
+set -eu
+
+# Create a workspace and branch.
+cd "$DATADIR/workspace"
+"$SRCDIR/scripts/test-morph" init
+"$SRCDIR/scripts/test-morph" branch "file://${DATADIR}/morphs.git" testbranch
+
+# Try to print the branch root repository.
+"$SRCDIR/scripts/test-morph" show-branch-root
diff --git a/tests.branching/show-branch-root-with-repo-url.stdout b/tests.branching/show-branch-root-with-repo-url.stdout
new file mode 100644
index 00000000..2d47eb40
--- /dev/null
+++ b/tests.branching/show-branch-root-with-repo-url.stdout
@@ -0,0 +1 @@
+file://TMP/morphs.git