aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2020-10-08 10:09:15 -0400
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2020-10-13 11:12:49 +0000
commit3ade5bbd92b506f215f86a7d41048b22b287c673 (patch)
tree2719b23d8221faddfbcad0cf6cc6433dec298d5d /mesonbuild
parent47046c3fb988c656a04521df932900dc47f0f6db (diff)
downloadmeson-3ade5bbd92b506f215f86a7d41048b22b287c673.zip
meson-3ade5bbd92b506f215f86a7d41048b22b287c673.tar.gz
meson-3ade5bbd92b506f215f86a7d41048b22b287c673.tar.bz2
msubprojects: Handle change of URL in wrap-git
Diffstat (limited to 'mesonbuild')
-rwxr-xr-xmesonbuild/msubprojects.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/mesonbuild/msubprojects.py b/mesonbuild/msubprojects.py
index 422dad2..195410f 100755
--- a/mesonbuild/msubprojects.py
+++ b/mesonbuild/msubprojects.py
@@ -120,12 +120,34 @@ def update_git(wrap, repo_dir, options):
if not os.path.isdir(repo_dir):
mlog.log(' -> Not used.')
return True
- revision = wrap.get('revision')
- if not revision:
+ revision = wrap.values.get('revision')
+ url = wrap.values.get('url')
+ push_url = wrap.values.get('push-url')
+ if not revision or not url:
# It could be a detached git submodule for example.
- mlog.log(' -> No revision specified.')
+ mlog.log(' -> No revision or URL specified.')
return True
try:
+ origin_url = git_output(['remote', 'get-url', 'origin'], repo_dir).strip()
+ except GitException as e:
+ mlog.log(' -> Failed to determine current origin URL in', mlog.bold(repo_dir))
+ mlog.log(mlog.red(e.output))
+ mlog.log(mlog.red(str(e)))
+ return False
+ if options.reset:
+ try:
+ git_output(['remote', 'set-url', 'origin', url], repo_dir)
+ if push_url:
+ git_output(['remote', 'set-url', '--push', 'origin', push_url], repo_dir)
+ except GitException as e:
+ mlog.log(' -> Failed to reset origin URL in', mlog.bold(repo_dir))
+ mlog.log(mlog.red(e.output))
+ mlog.log(mlog.red(str(e)))
+ return False
+ elif url != origin_url:
+ mlog.log(' -> URL changed from {!r} to {!r}'.format(origin_url, url))
+ return False
+ try:
# Same as `git branch --show-current` but compatible with older git version
branch = git_output(['rev-parse', '--abbrev-ref', 'HEAD'], repo_dir).strip()
branch = branch if branch != 'HEAD' else ''