runbot/runbot_merge/models
Xavier Morel 60188063f8 [FIX] *: ensure I don't get bollocked up again by tags
Today (or really a month ago) I learned: when giving git a symbolic
ref (e.g. a ref name), if it's ambiguous then

1. If `$GIT_DIR/$name` exists, that is what you mean (this is usually
   useful only for `HEAD`, `FETCH_HEAD`, `ORIG_HEAD`, `MERGE_HEAD`,
   `REBASE_HEAD`, `REVERT_HEAD`, `CHERRY_PICK_HEAD`, `BISECT_HEAD` and
   `AUTO_MERGE`)
2. otherwise, `refs/$name` if it exists
3. otherwise, `refs/tags/$name` if it exists
4. otherwise, `refs/heads/$name` if it exists
5. otherwise, `refs/remotes/$name` if it exists
6. otherwise, `refs/remotes/$name/HEAD` if it exists

This means if a tag and a branch have the same name and only the name
is provided (not the full ref), git will select the tag, which gets
very confusing for the mergebot as it now tries to rebase onto the tag
(which because that's not fun otherwise was not even on the branch of
the same name).

Fix by providing full refs to `rev-parse` when trying to retrieve the
head of the target branches. And as a defense in depth opportunity,
also exclude tags when fetching refs by spec: apparently fetching a
specific commit does not trigger the retrieval of tags, but any sort
of spec will see the tags come along for the ride even if the tags are
not in any way under the fetched ref e.g. `refs/heads/*` will very
much retrieve the tags despite them being located at `refs/tags/*`.

Fixes #922
2024-09-06 15:09:08 +02:00
..
crons [IMP] runbot_merge: prune repo during maintenance 2024-08-05 09:03:39 +02:00
project_freeze [FIX] *: ensure I don't get bollocked up again by tags 2024-09-06 15:09:08 +02:00
staging_cancel [ADD] runbot_merge: stagings canceling wizard 2022-12-08 10:46:22 +01:00
__init__.py [ADD] *: per-repository webhook secret 2024-06-06 11:07:57 +02:00
batch.py [IMP] *: trigger-ify staging cron 2024-08-02 15:14:50 +02:00
commands.py [FIX] runbot_merge: missing feedback on fw r+ 2024-09-05 13:25:19 +02:00
events_sources.py [ADD] *: per-repository webhook secret 2024-06-06 11:07:57 +02:00
ir_actions.py [IMP] runbot_merge: add json & requests to server actions context 2023-02-20 10:13:05 +01:00
project.py [ADD] *: per-repository webhook secret 2024-06-06 11:07:57 +02:00
pull_requests.py [FIX] runbot_merge: set staging_end on all terminations 2024-09-06 13:16:37 +02:00
res_partner.py [ADD] runbot_merge: ad-hoc ACL tracking to res.partner 2024-05-16 09:32:03 +02:00
stagings_create.py [FIX] *: ensure I don't get bollocked up again by tags 2024-09-06 15:09:08 +02:00
utils.py [ADD] runbot_merge: rendering of PR descriptions 2024-07-15 10:28:28 +02:00