summaryrefslogtreecommitdiff
path: root/morphlib/plugins/branch_and_merge_plugin.py
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2012-10-03 17:54:25 +0100
committerSam Thursfield <sam.thursfield@codethink.co.uk>2012-10-03 17:54:25 +0100
commitaf2896a3796812f8094f9acb8ed2d1f10914f878 (patch)
treeed698fd287ab6e31657ec8b27e96e7a3d0a201e4 /morphlib/plugins/branch_and_merge_plugin.py
parenta4a66fce7c6086f25b4071d5c33f07d5badf8181 (diff)
downloadmorph-af2896a3796812f8094f9acb8ed2d1f10914f878.tar.gz
Handle submodules in 'morph edit'
We often have .gitmodules edited to contain a URI such as upstream:gnulib, so that we can transparently mirror these in different locations. It would be nice to set up git url.insteadOf rules to expand these for the submodules, but 'git submodule update' uses 'git clone' to fetch them, which will not take into account the configuration of the parent repository. Instead, we set up the submodules automatically and rewrite the URLs directly in the configuration. The user will need to recreate their system branch checkouts if their URL configuration changes, or update the URLs manually, but that should not happen often.
Diffstat (limited to 'morphlib/plugins/branch_and_merge_plugin.py')
-rw-r--r--morphlib/plugins/branch_and_merge_plugin.py12
1 files changed, 6 insertions, 6 deletions
diff --git a/morphlib/plugins/branch_and_merge_plugin.py b/morphlib/plugins/branch_and_merge_plugin.py
index a3faa0c2..1deede4a 100644
--- a/morphlib/plugins/branch_and_merge_plugin.py
+++ b/morphlib/plugins/branch_and_merge_plugin.py
@@ -219,7 +219,8 @@ class BranchAndMergePlugin(cliapp.Plugin):
os.makedirs(parent_dir)
# Clone it from cache to target directory.
- repo.clone_checkout(ref, os.path.abspath(dirname))
+ target_path = os.path.abspath(dirname)
+ repo.clone_checkout(ref, target_path)
# Remember the repo name we cloned from in order to be able
# to identify the repo again later using the same name, even
@@ -230,13 +231,12 @@ class BranchAndMergePlugin(cliapp.Plugin):
# temporary refs, e.g. for building.
self.set_repo_config(dirname, 'morph.uuid', uuid.uuid4().hex)
- # Set the origin to point at the original repository.
+ # URL configuration
morphlib.git.set_remote(self.app.runcmd, dirname, 'origin', repo.url)
-
- # Add push url rewrite rule to .git/config.
self.set_repo_config(
- dirname, 'url.%s.pushInsteadOf' % resolver.push_url(reponame),
- resolver.pull_url(reponame))
+ dirname, 'url.%s.pushInsteadOf' % resolver.push_url(reponame),
+ resolver.pull_url(reponame))
+ morphlib.git.update_submodules(self.app, target_path)
self.app.runcmd(['git', 'remote', 'update'], cwd=dirname)