Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prepend refs/heads/ to issue template refs (#20461) #22427

Merged
merged 4 commits into from
Jan 13, 2023

Commits on Jan 13, 2023

  1. Prepend refs/heads/ to issue template refs (go-gitea#20461)

    Backport go-gitea#20461
    
    Fix go-gitea#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 go-gitea#17551 whereby the provided
    `ref` argument can be double-escaped so we remove the incorrect external
    escape. (The escape added in go-gitea#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 go-gitea#20456
    
    Signed-off-by: Andrew Thornton <[email protected]>
    Co-authored-by: Lauris BH <[email protected]>
    Co-authored-by: wxiaoguang <[email protected]>
    Co-authored-by: Lunny Xiao <[email protected]>
    4 people committed Jan 13, 2023
    Configuration menu
    Copy the full SHA
    94eed36 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    d1282c3 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    46a1cd0 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    6db782a View commit details
    Browse the repository at this point in the history