summaryrefslogtreecommitdiff
path: root/zuul
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-05-12 22:40:19 +0000
committerGerrit Code Review <review@openstack.org>2020-05-12 22:40:20 +0000
commit262a8fe586878df25d665e7a1b262e04bfbdc87e (patch)
tree21c52f5085c179e6d26b4756b6d5e7b60c1102f0 /zuul
parent438871db678864f2ee29767be34192120aa65d58 (diff)
parentfebf3e9b7df5ea505b709c65707782f74c9e0d6c (diff)
downloadzuul-262a8fe586878df25d665e7a1b262e04bfbdc87e.tar.gz
Merge "Detach head before reset"
Diffstat (limited to 'zuul')
-rw-r--r--zuul/merger/merger.py26
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}