diff options
author | Zuul <zuul@review.opendev.org> | 2020-05-12 22:40:19 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2020-05-12 22:40:20 +0000 |
commit | 262a8fe586878df25d665e7a1b262e04bfbdc87e (patch) | |
tree | 21c52f5085c179e6d26b4756b6d5e7b60c1102f0 /zuul | |
parent | 438871db678864f2ee29767be34192120aa65d58 (diff) | |
parent | febf3e9b7df5ea505b709c65707782f74c9e0d6c (diff) | |
download | zuul-262a8fe586878df25d665e7a1b262e04bfbdc87e.tar.gz |
Merge "Detach head before reset"
Diffstat (limited to 'zuul')
-rw-r--r-- | zuul/merger/merger.py | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/zuul/merger/merger.py b/zuul/merger/merger.py index 7e1188730..55d9b8ec3 100644 --- a/zuul/merger/merger.py +++ b/zuul/merger/merger.py @@ -287,20 +287,20 @@ class Repo(object): repo = Repo._createRepoObject(local_path, env) origin = repo.remotes.origin - # Reset the working directory to the default remote branch. + # Detach HEAD so we can work with references without interfering + # with any active branch. Any remote ref will do as long as it can + # be dereferenced to an existing commit. for ref in origin.refs: - if ref.remote_head != "HEAD": - continue - # Use the ref the remote HEAD is pointing to - head_ref = ref.ref - head = head_ref.remote_head - repo.create_head(head, head_ref, force=True) - if log: - log.debug("Reset to %s", head) - else: - messages.append("Reset to %s" % head) - repo.head.reference = head - break + try: + repo.head.reference = ref.commit + break + except Exception: + if log: + log.debug("Unable to detach HEAD to %s", ref) + else: + messages.append("Unable to detach HEAD to %s" % ref) + else: + raise Exception("Couldn't detach HEAD to any existing commit") # Delete local heads that no longer exist on the remote end remote_heads = {r.remote_head for r in origin.refs} |