forgejo-federation/modules/git
zeripath e77b76425e
Prepend refs/heads/ to issue template refs (#20461)
Fix #20456

At some point during the 1.17 cycle abbreviated refishs 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 `fullref`s as much as possible.
That is where a user has inputted a abbreviated `refish` 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` /
`SHA`. 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 `SHA`s if they're used in a `ref` or `refish` field. We must
not store a potentially
ambiguous `refish` as a `ref`. (Especially when referring a `tag` -
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 the `SHA` pattern.)

To that end in order to fix this bug, when parsing issue templates check
the provided `Ref` (here a `refish` because almost all users do not know
or understand the subtly), if it does not start with `refs/` add the
`BranchPrefix` to it. This allows people to make their templates refer
to a `tag` but not to a `SHA` directly. (I don't think that is
particularly unreasonable but if people disagree I can make the `refish`
be checked to see if it matches the `SHA` pattern.)

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` argument can be double-escaped so we remove the incorrect external
escape. (The escape added in #17551 is in the right place -
unfortunately I missed that the calling function was doing the wrong
thing.)

Then within `RefURL()` we check if an unprefixed `ref` (therefore
potentially a `refish`) matches the `SHA` pattern before assuming that
is actually a `commit` - otherwise 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 - which are `refish` as a `ref`. It will keep on causing
problems like this.

Fix #20456

Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: Lauris BH <lauris@nix.lv>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
2022-11-22 20:58:49 +08:00
..
foreachref Go 1.19 format (#20758) 2022-08-30 21:15:45 -05:00
pipeline Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
tests/repos Auto merge pull requests when all checks succeeded via API (#9307) 2022-05-08 01:05:52 +08:00
url Fix some mirror bugs (#18649) 2022-06-11 21:50:14 +08:00
batch_reader.go Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
blame.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
blame_test.go refactor: move from io/ioutil to io and os package (#17109) 2021-09-22 13:38:34 +08:00
blob.go Read expected buffer size (#17409) 2021-10-24 22:12:43 +01:00
blob_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
blob_nogogit.go Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
blob_test.go Make git.OpenRepository accept Context (#19260) 2022-03-30 03:13:41 +08:00
command.go Prevent panic in doctor command when running default checks (#21791) 2022-11-13 20:45:20 +00:00
command_race_test.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
command_test.go Follow improve code quality (#21465) 2022-10-15 14:18:31 +02:00
commit.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
commit_convert_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
commit_info.go Use native git variants by default with go-git variants as build tag (#13673) 2020-12-17 22:00:47 +08:00
commit_info_gogit.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
commit_info_nogogit.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
commit_info_test.go test: use T.TempDir to create temporary test directory (#21043) 2022-09-04 16:14:53 +01:00
commit_reader.go Tagger can be empty, as can Commit and Author - tolerate this (#15835) 2021-05-12 01:11:42 -04:00
commit_test.go Use for a repo action one database transaction (#19576) 2022-05-03 21:46:28 +02:00
diff.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
diff_test.go Prevent off-by-one error on comments on newly appended lines (#18029) 2021-12-20 02:15:49 +00:00
error.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
git.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
git_test.go Refactor legacy git init (#20376) 2022-08-09 11:22:24 +08:00
hook.go format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
last_commit_cache.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
last_commit_cache_gogit.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
last_commit_cache_nogogit.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
log_name_status.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
notes.go Use native git variants by default with go-git variants as build tag (#13673) 2020-12-17 22:00:47 +08:00
notes_gogit.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
notes_nogogit.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
notes_test.go Make git.OpenRepository accept Context (#19260) 2022-03-30 03:13:41 +08:00
parse_gogit.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
parse_gogit_test.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
parse_nogogit.go Refactor parseTreeEntries, speed up tree list (#21368) 2022-10-08 01:20:53 +08:00
parse_nogogit_test.go Refactor parseTreeEntries, speed up tree list (#21368) 2022-10-08 01:20:53 +08:00
README.md move code.gitea.io/git to code.gitea.io/gitea/modules/git (#6364) 2019-03-27 17:33:00 +08:00
ref.go Add more checks in migration code (#21011) 2022-09-04 13:47:56 +03:00
remote.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
repo_archive.go Adjust gitea doctor --run storages to check all storage types (#21785) 2022-11-15 16:08:59 +08:00
repo_attribute.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
repo_attribute_test.go format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
repo_base.go Make git.OpenRepository accept Context (#19260) 2022-03-30 03:13:41 +08:00
repo_base_gogit.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
repo_base_nogogit.go Slightly simplify LastCommitCache (#20444) 2022-07-25 16:39:42 +01:00
repo_blame.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_blob.go Use native git variants by default with go-git variants as build tag (#13673) 2020-12-17 22:00:47 +08:00
repo_blob_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
repo_blob_nogogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
repo_blob_test.go Make git.OpenRepository accept Context (#19260) 2022-03-30 03:13:41 +08:00
repo_branch.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_branch_gogit.go Auto merge pull requests when all checks succeeded via API (#9307) 2022-05-08 01:05:52 +08:00
repo_branch_nogogit.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_branch_test.go Sort branches and tags by date descending (#21136) 2022-09-14 14:11:24 +02:00
repo_commit.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_commit_gogit.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_commit_nogogit.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_commit_test.go Make git.OpenRepository accept Context (#19260) 2022-03-30 03:13:41 +08:00
repo_commitgraph.go Remove git.Command.Run and git.Command.RunInDir* (#19280) 2022-04-01 10:55:30 +08:00
repo_commitgraph_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
repo_compare.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
repo_compare_test.go test: use T.TempDir to create temporary test directory (#21043) 2022-09-04 16:14:53 +01:00
repo_gpg.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
repo_hook.go move code.gitea.io/git to code.gitea.io/gitea/modules/git (#6364) 2019-03-27 17:33:00 +08:00
repo_index.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_language_stats.go format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
repo_language_stats_gogit.go Keep languages defined in .gitattributes (#21403) 2022-10-29 15:04:21 +08:00
repo_language_stats_nogogit.go Keep languages defined in .gitattributes (#21403) 2022-10-29 15:04:21 +08:00
repo_language_stats_test.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
repo_object.go Remove git.Command.Run and git.Command.RunInDir* (#19280) 2022-04-01 10:55:30 +08:00
repo_ref.go Use native git variants by default with go-git variants as build tag (#13673) 2020-12-17 22:00:47 +08:00
repo_ref_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
repo_ref_nogogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
repo_ref_test.go Make git.OpenRepository accept Context (#19260) 2022-03-30 03:13:41 +08:00
repo_stats.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_stats_test.go Make git.OpenRepository accept Context (#19260) 2022-03-30 03:13:41 +08:00
repo_tag.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2022-10-24 20:29:17 +01:00
repo_tag_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
repo_tag_nogogit.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_tag_test.go test: use T.TempDir to create temporary test directory (#21043) 2022-09-04 16:14:53 +01:00
repo_test.go Make git.OpenRepository accept Context (#19260) 2022-03-30 03:13:41 +08:00
repo_tree.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_tree_gogit.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
repo_tree_nogogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
sha1.go Add more checks in migration code (#21011) 2022-09-04 13:47:56 +03:00
sha1_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
sha1_nogogit.go Add more linters to improve code readability (#19989) 2022-06-20 12:02:49 +02:00
sha1_test.go probe if sha before exec git (#21467) 2022-10-17 16:40:37 +02:00
signature.go Use native git variants by default with go-git variants as build tag (#13673) 2020-12-17 22:00:47 +08:00
signature_gogit.go Go 1.19 format (#20758) 2022-08-30 21:15:45 -05:00
signature_nogogit.go Go 1.19 format (#20758) 2022-08-30 21:15:45 -05:00
submodule.go Fix some lints (#17337) 2021-10-17 20:47:12 +01:00
submodule_test.go format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
tag.go format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
tag_test.go Fix NPE on try to get tag reference via API (#18245) 2022-01-12 20:37:46 +00:00
tree.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
tree_blob.go Use native git variants by default with go-git variants as build tag (#13673) 2020-12-17 22:00:47 +08:00
tree_blob_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
tree_blob_nogogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
tree_entry.go On open repository open common cat file batch and batch-check (#15667) 2021-05-10 03:27:03 +02:00
tree_entry_gogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
tree_entry_mode.go format with gofumpt (#18184) 2022-01-20 18:46:10 +01:00
tree_entry_nogogit.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
tree_entry_test.go Remove legacy +build: constraint (#19582) 2022-05-02 23:22:45 +08:00
tree_gogit.go Refactor parseTreeEntries, speed up tree list (#21368) 2022-10-08 01:20:53 +08:00
tree_nogogit.go Refactor git command arguments and make all arguments to be safe to be used (#21535) 2022-10-23 22:44:45 +08:00
utils.go Prepend refs/heads/ to issue template refs (#20461) 2022-11-22 20:58:49 +08:00
utils_test.go Fix ref links in issue overviews for tags (#8742) 2020-05-14 18:55:43 -04:00

Git Module

This module is merged from https://github.com/go-gitea/git which is a Go module to access Git through shell commands. Now it's a part of gitea's main repository for easier pull request.