diff options
-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) |