mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-26 09:09:36 -05:00
Backport #27384 by @rbhz Add support for HEAD in paths: ``` /src/branch/HEAD/README.md /src/commit/HEAD/README.md ``` Closes #26920 Co-authored-by: Kirill Sorokin <48334247+rbhz@users.noreply.github.com>
This commit is contained in:
parent
4f02b4a7b9
commit
8c6464e39b
2 changed files with 24 additions and 0 deletions
|
@ -773,6 +773,8 @@ const (
|
||||||
RepoRefBlob
|
RepoRefBlob
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const headRefName = "HEAD"
|
||||||
|
|
||||||
// RepoRef handles repository reference names when the ref name is not
|
// RepoRef handles repository reference names when the ref name is not
|
||||||
// explicitly given
|
// explicitly given
|
||||||
func RepoRef() func(*Context) context.CancelFunc {
|
func RepoRef() func(*Context) context.CancelFunc {
|
||||||
|
@ -833,6 +835,14 @@ func getRefName(ctx *Base, repo *Repository, pathType RepoRefType) string {
|
||||||
case RepoRefBranch:
|
case RepoRefBranch:
|
||||||
ref := getRefNameFromPath(ctx, repo, path, repo.GitRepo.IsBranchExist)
|
ref := getRefNameFromPath(ctx, repo, path, repo.GitRepo.IsBranchExist)
|
||||||
if len(ref) == 0 {
|
if len(ref) == 0 {
|
||||||
|
|
||||||
|
// check if ref is HEAD
|
||||||
|
parts := strings.Split(path, "/")
|
||||||
|
if parts[0] == headRefName {
|
||||||
|
repo.TreePath = strings.Join(parts[1:], "/")
|
||||||
|
return repo.Repository.DefaultBranch
|
||||||
|
}
|
||||||
|
|
||||||
// maybe it's a renamed branch
|
// maybe it's a renamed branch
|
||||||
return getRefNameFromPath(ctx, repo, path, func(s string) bool {
|
return getRefNameFromPath(ctx, repo, path, func(s string) bool {
|
||||||
b, exist, err := git_model.FindRenamedBranch(ctx, repo.Repository.ID, s)
|
b, exist, err := git_model.FindRenamedBranch(ctx, repo.Repository.ID, s)
|
||||||
|
@ -861,6 +871,16 @@ func getRefName(ctx *Base, repo *Repository, pathType RepoRefType) string {
|
||||||
repo.TreePath = strings.Join(parts[1:], "/")
|
repo.TreePath = strings.Join(parts[1:], "/")
|
||||||
return parts[0]
|
return parts[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(parts) > 0 && parts[0] == headRefName {
|
||||||
|
// HEAD ref points to last default branch commit
|
||||||
|
commit, err := repo.GitRepo.GetBranchCommit(repo.Repository.DefaultBranch)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
repo.TreePath = strings.Join(parts[1:], "/")
|
||||||
|
return commit.ID.String()
|
||||||
|
}
|
||||||
case RepoRefBlob:
|
case RepoRefBlob:
|
||||||
_, err := repo.GitRepo.GetBlob(path)
|
_, err := repo.GitRepo.GetBlob(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -302,6 +302,10 @@ func TestViewRepoDirectoryReadme(t *testing.T) {
|
||||||
check("plain", "/user2/readme-test/src/branch/plain/", "README", "plain-text", "Birken my stocks gee howdy")
|
check("plain", "/user2/readme-test/src/branch/plain/", "README", "plain-text", "Birken my stocks gee howdy")
|
||||||
check("i18n", "/user2/readme-test/src/branch/i18n/", "README.zh.md", "markdown", "蛋糕是一个谎言")
|
check("i18n", "/user2/readme-test/src/branch/i18n/", "README.zh.md", "markdown", "蛋糕是一个谎言")
|
||||||
|
|
||||||
|
// using HEAD ref
|
||||||
|
check("branch-HEAD", "/user2/readme-test/src/branch/HEAD/", "README.md", "markdown", "The cake is a lie.")
|
||||||
|
check("commit-HEAD", "/user2/readme-test/src/commit/HEAD/", "README.md", "markdown", "The cake is a lie.")
|
||||||
|
|
||||||
// viewing different subdirectories
|
// viewing different subdirectories
|
||||||
check("subdir", "/user2/readme-test/src/branch/subdir/libcake", "README.md", "markdown", "Four pints of sugar.")
|
check("subdir", "/user2/readme-test/src/branch/subdir/libcake", "README.md", "markdown", "Four pints of sugar.")
|
||||||
check("docs-direct", "/user2/readme-test/src/branch/special-subdir-docs/docs/", "README.md", "markdown", "This is in docs/")
|
check("docs-direct", "/user2/readme-test/src/branch/special-subdir-docs/docs/", "README.md", "markdown", "This is in docs/")
|
||||||
|
|
Loading…
Reference in a new issue