summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
Diffstat (limited to 'morphlib')
-rw-r--r--morphlib/git.py22
-rw-r--r--morphlib/plugins/branch_and_merge_plugin.py12
2 files changed, 28 insertions, 6 deletions
diff --git a/morphlib/git.py b/morphlib/git.py
index b3dd2c45..973e4af7 100644
--- a/morphlib/git.py
+++ b/morphlib/git.py
@@ -135,6 +135,28 @@ class Submodules(object):
def __len__(self):
return len(self.submodules)
+
+def update_submodules(app, repo_dir): # pragma: no cover
+ '''Set up repo submodules, rewriting the URLs to expand prefixes
+
+ We do this automatically rather than leaving it to the user so that they
+ don't have to worry about the prefixed URLs manually.
+ '''
+
+ if os.path.exists(os.path.join(repo_dir, '.gitmodules')):
+ resolver = morphlib.repoaliasresolver.RepoAliasResolver(
+ app.settings['repo-alias'])
+ app.runcmd(['git', 'submodule', 'init'], cwd=repo_dir)
+ urls = app.runcmd(
+ ['git', 'config', '--get-regexp', r'submodule.\w+.url'],
+ cwd=repo_dir)
+ for line in urls.splitlines():
+ setting, url = line.split(' ')
+ app.runcmd(['git', 'config', setting, resolver.pull_url(url)],
+ cwd=repo_dir)
+ app.runcmd(['git', 'submodule', 'update'], cwd=repo_dir)
+
+
def get_user_name(runcmd):
'''Get user.name configuration setting. Complain if none was found.'''
if 'GIT_AUTHOR_NAME' in os.environ:
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)