diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2012-10-10 16:03:53 +0100 |
---|---|---|
committer | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2012-10-10 16:52:22 +0100 |
commit | 3abc867e6590b4306a7d8c39c4a0f39b2883f648 (patch) | |
tree | e2f782322b0f236373b2852d2fc5cf7a8050c88c | |
parent | bd31733cd891ac642c73d9c0aa3c48d623d58f10 (diff) | |
download | morph-3abc867e6590b4306a7d8c39c4a0f39b2883f648.tar.gz |
morph foreach: Handle repos addressed by full URLs correctly
This should not normally be used, because we make no attempt to detect
when a full URL and a keyed URL are equivalent, so they cannot be used
interchangably.
However, 'foreach' would previously fail completely if the branch root
happened to be a full URL because it didn't call convert_uri_to_path()
correctly.
-rw-r--r-- | morphlib/plugins/branch_and_merge_plugin.py | 8 | ||||
-rwxr-xr-x | tests.branching/foreach-handles-full-urls.script | 27 | ||||
-rw-r--r-- | tests.branching/foreach-handles-full-urls.stdout | 3 |
3 files changed, 35 insertions, 3 deletions
diff --git a/morphlib/plugins/branch_and_merge_plugin.py b/morphlib/plugins/branch_and_merge_plugin.py index e54fe7ad..b14a9ef7 100644 --- a/morphlib/plugins/branch_and_merge_plugin.py +++ b/morphlib/plugins/branch_and_merge_plugin.py @@ -1169,13 +1169,15 @@ class BranchAndMergePlugin(cliapp.Plugin): workspace = self.deduce_workspace() branch, branch_path = self.deduce_system_branch() - root_repo_dir = self.get_branch_config(branch_path, 'branch.root') + + root_repo = self.get_branch_config(branch_path, 'branch.root') + root_repo_dir = self.convert_uri_to_path(root_repo) + root_repo_path = os.path.join(branch_path, root_repo_dir) dirs = [d for d in self.walk_special_directories( branch_path, special_subdir='.git') - if os.path.basename(d) != root_repo_dir] + if not os.path.samefile(d, root_repo_path)] dirs.sort() - root_repo_path = os.path.join(branch_path, root_repo_dir) for d in [root_repo_path] + dirs: try: repo = self.get_repo_config(d, 'morph.repository') diff --git a/tests.branching/foreach-handles-full-urls.script b/tests.branching/foreach-handles-full-urls.script new file mode 100755 index 00000000..cfe68704 --- /dev/null +++ b/tests.branching/foreach-handles-full-urls.script @@ -0,0 +1,27 @@ +#!/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. + + +# morph foreach: should not break if we used a full URL for a repo + +set -eu + +cd "$DATADIR/workspace" +"$SRCDIR/scripts/test-morph" init +"$SRCDIR/scripts/test-morph" checkout file://$DATADIR/morphs master + +# This will fail if we get the directory name +"$SRCDIR/scripts/test-morph" foreach -- git status diff --git a/tests.branching/foreach-handles-full-urls.stdout b/tests.branching/foreach-handles-full-urls.stdout new file mode 100644 index 00000000..1ef0b5aa --- /dev/null +++ b/tests.branching/foreach-handles-full-urls.stdout @@ -0,0 +1,3 @@ +file://TMP/morphs +# On branch master +nothing to commit (working directory clean) |