forgejo/modules
Andrew Thornton 42d2b83950
Prepend refs/heads/ to issue template refs
Fix #20456

At some point during the 1.17 cycle abbreviated refs to issue branches
started breaking. This is likely due serious inconsistencies in our
management of refs throughout Gitea - which is a bug needing to be
addressed in a different PR. (Likely more than one)

We should try to use non-abbreviated refs as much as possible. That is
where a user has inputted a abbreviated ref we should add refs/heads/ if
it is branch etc. I know people keep writing and merging PRs that remove
prefixes from stored content but it is just wrong and it keeps causing
problems like this. We should only remove the prefix at the time of
presentation as the prefix is the only way of knowing umambiguously and
permanently if the ref is referring to a branch, tag or commit. We need
to make it so that every ref has the appropriate prefix, and probably
also need to come up with some definitely unambiguous way of storing
SHAs if they're used in a ref field. We must not store potentially
ambiguous refs. (Especially tagnames - there is no reason why users cannot
create a branch with the same short name as a tag and vice versa and any
attempt to prevent this will fail. You can even create a branch and a
tag that matches a SHA1 pattern.)

To that end in order to fix this bug, when parsing issue templates check
the provided Ref, if it does not start with refs/ add the BranchPrefix
to it. This allows people to make their templates refer to a tag.

Next we need to handle the issue links that are already written. The
links here are created with `git.RefURL`

Here we see there is a bug introduced in #17551 whereby the provided Ref
can be double-escaped so we remove the incorrect external escape.
(The escape added in #17551 is in the right place - unfortunately it
missed that the calling function was doing the wrong thing.)

Then within RefURL we check if the unprefixed ref could actually be a
SHA before defaulting that an unprefixed ref is actually a commit - if not
it is assumed to be a branch. This will handle most of the problem cases
excepting the very unusual cases where someone has deliberately written
a branch to look like a SHA1.

But please if something is called a `ref` or interpreted as a `ref` make
it a full-ref before storing or using it. By all means if something is a
`branch` assume the prefix is removed but always add it back in if you
are using it as a `ref`. Stop storing abbreviated branch names and tag
names as refs. It will keep on causing problems like this.

Fix #20456

Signed-off-by: Andrew Thornton <art27@cantab.net>
2022-07-23 11:39:36 +01:00
..
activitypub Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
analyze Simplify IsVendor (#19626) 2022-05-06 10:12:30 +01:00
appstate Use a struct as test options (#19393) 2022-04-14 21:58:21 +08:00
auth Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
avatar Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
base Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
cache Update go-chi/cache to utilize Ping() (#19719) 2022-05-15 20:43:27 +02:00
charset Fix various typos (#20338) 2022-07-12 23:32:37 +02:00
container Move reaction to models/issues/ (#19264) 2022-03-31 17:20:39 +08:00
context Prepend refs/heads/ to issue template refs 2022-07-23 11:39:36 +01:00
convert Include login_name in adminCreateUser response (#20283) 2022-07-15 16:52:11 +08:00
csv Allow render HTML with css/js external links (#19017) 2022-06-16 11:33:23 +08:00
doctor Fix various typos (#20338) 2022-07-12 23:32:37 +02:00
emoji format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
eventsource Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
generate Use base32 for 2FA scratch token (#18384) 2022-01-26 12:10:10 +08:00
git Prepend refs/heads/ to issue template refs 2022-07-23 11:39:36 +01:00
gitgraph Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
graceful Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
hcaptcha hCaptcha Support (#12594) 2020-10-02 23:37:53 -04:00
highlight Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
hostmatcher Add tests for the host checking logic, clarify the behaviors (#20328) 2022-07-13 09:07:16 +08:00
httpcache Add Cache-Control header to html and api responses, add no-transform (#20432) 2022-07-23 14:38:03 +08:00
httplib refactor httplib (#18338) 2022-01-19 19:31:39 -05:00
indexer Fix dump-repo git init, fix wrong error type for NullDownloader (#20182) 2022-07-01 07:48:25 +08:00
json Refactor legacy unknwon/com package, improve golangci lint (#19284) 2022-04-01 16:47:50 +08:00
lfs Move some code into models/git (#19879) 2022-06-12 23:51:54 +08:00
log Empty log queue on flush and close (#19994) 2022-06-18 10:33:13 +08:00
markup Use body text color in repository files table links (#20386) 2022-07-22 18:49:24 +08:00
metrics format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
migration Fix dump-repo git init, fix wrong error type for NullDownloader (#20182) 2022-07-01 07:48:25 +08:00
mirror Implement sync push mirror on commit (#19411) 2022-07-08 20:45:12 +01:00
nosql Fix various typos (#20338) 2022-07-12 23:32:37 +02:00
notification Implement sync push mirror on commit (#19411) 2022-07-08 20:45:12 +01:00
options Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
packages Allow non-semver packages in the Conan package registry (#20412) 2022-07-22 22:54:02 +01:00
paginator Remove legacy unmaintained packages, refactor to support change default locale (#19308) 2022-04-03 17:46:48 +08:00
password Fixed assert statements. (#16089) 2021-06-07 07:27:09 +02:00
pprof refactor: move from io/ioutil to io and os package (#17109) 2021-09-22 13:38:34 +08:00
private Allow manager logging to set SQL (#20064) 2022-06-24 12:49:47 +02:00
process Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
proxy Return nil proxy function if proxy not enabled (#16742) 2021-08-19 16:41:20 -04:00
public Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
queue Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
recaptcha refactor: move from io/ioutil to io and os package (#17109) 2021-09-22 13:38:34 +08:00
references Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
regexplru Custom regexp external issues (#17624) 2022-06-10 13:39:53 +08:00
repository Adjust transaction handling via db.Context (#20031) 2022-06-20 14:38:58 +02:00
secret Use CryptoRandomBytes instead of CryptoRandomString (#18439) 2022-02-04 18:03:15 +01:00
session format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
setting Use default values when provided values are empty (#20318) 2022-07-13 13:33:31 +08:00
sitemap Add sitemap support (#18407) 2022-06-25 19:06:01 +02:00
ssh Refactor SSH init code, fix directory creation for TrustedUserCAKeys file (#20299) 2022-07-10 14:50:26 +08:00
storage Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
structs Dismiss prior pull reviews if done via web in review dismiss (#20197) 2022-07-19 15:20:28 +02:00
svg Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
sync Use queue instead of memory queue in webhook send service (#19390) 2022-04-25 20:03:01 +02:00
templates Vertical align avatar at middle (#20302) 2022-07-10 19:49:13 +01:00
test Move access and repo permission to models/perm/access (#19350) 2022-05-11 12:09:36 +02:00
timeutil Make better use of i18n (#20096) 2022-06-26 22:19:22 +08:00
translation Allow dev i18n to be more concurrent (#20159) 2022-07-04 12:17:09 +02:00
typesniffer Fix raw endpoint PDF file headers (#19825) 2022-05-28 18:10:14 +03:00
updatechecker format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
upload Simplify parameter types (#18006) 2021-12-20 04:41:31 +00:00
uri Prevent NPE if gitea uploader fails to open url (#18080) 2021-12-23 16:27:33 +00:00
user Add gitea-vet (#10948) 2020-04-05 07:20:50 +01:00
util Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
validation use IsLoopback (#19477) 2022-04-25 13:55:12 +08:00
web Fix various typos (#20338) 2022-07-12 23:32:37 +02:00