diff --git a/services/context/repo.go b/services/context/repo.go index 2df2b7ea40387..5e03f8356b9f5 100644 --- a/services/context/repo.go +++ b/services/context/repo.go @@ -823,13 +823,16 @@ func getRefName(ctx *Base, repo *Repository, pathType RepoRefType) string { // For legacy and API support only full commit sha parts := strings.Split(path, "/") - if len(parts) > 0 && len(parts[0]) == git.ObjectFormatFromName(repo.Repository.ObjectFormatName).FullLength() { - repo.TreePath = strings.Join(parts[1:], "/") - return parts[0] - } - if refName := getRefName(ctx, repo, RepoRefBlob); len(refName) > 0 { - return refName + if len(parts) > 1 { + if len(parts[0]) == git.ObjectFormatFromName(repo.Repository.ObjectFormatName).FullLength() { + repo.TreePath = strings.Join(parts[1:], "/") + return parts[0] + } + if refName := getRefName(ctx, repo, RepoRefBlob); len(refName) > 0 { + return refName + } } + repo.TreePath = path return repo.Repository.DefaultBranch case RepoRefBranch: diff --git a/tests/gitea-repositories-meta/user13/repo11.git/objects/42/27deb2ed773f536082805c08f5cebd22da9779 b/tests/gitea-repositories-meta/user13/repo11.git/objects/42/27deb2ed773f536082805c08f5cebd22da9779 new file mode 100644 index 0000000000000..0a826eaa65bb0 Binary files /dev/null and b/tests/gitea-repositories-meta/user13/repo11.git/objects/42/27deb2ed773f536082805c08f5cebd22da9779 differ diff --git a/tests/gitea-repositories-meta/user13/repo11.git/objects/83/c831f0b085c70509b1fbb0a0131a9a32e691ac b/tests/gitea-repositories-meta/user13/repo11.git/objects/83/c831f0b085c70509b1fbb0a0131a9a32e691ac new file mode 100644 index 0000000000000..73dacbd4eeabf Binary files /dev/null and b/tests/gitea-repositories-meta/user13/repo11.git/objects/83/c831f0b085c70509b1fbb0a0131a9a32e691ac differ diff --git a/tests/gitea-repositories-meta/user13/repo11.git/objects/9f/c855a7ff0b67fc2f98f878d852b6937810971f b/tests/gitea-repositories-meta/user13/repo11.git/objects/9f/c855a7ff0b67fc2f98f878d852b6937810971f new file mode 100644 index 0000000000000..db867795705c6 Binary files /dev/null and b/tests/gitea-repositories-meta/user13/repo11.git/objects/9f/c855a7ff0b67fc2f98f878d852b6937810971f differ diff --git a/tests/gitea-repositories-meta/user13/repo11.git/objects/c5/66fa45406b2f02c181df08077a03f177cf9ba8 b/tests/gitea-repositories-meta/user13/repo11.git/objects/c5/66fa45406b2f02c181df08077a03f177cf9ba8 new file mode 100644 index 0000000000000..11d410bfb4425 Binary files /dev/null and b/tests/gitea-repositories-meta/user13/repo11.git/objects/c5/66fa45406b2f02c181df08077a03f177cf9ba8 differ diff --git a/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/master b/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/master index f98a263be62ff..be1a71c1071d1 100644 --- a/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/master +++ b/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/master @@ -1 +1 @@ -65f1bf27bc3bf70f64657658635e66094edbcb4d +c566fa45406b2f02c181df08077a03f177cf9ba8 diff --git a/tests/integration/api_repo_get_contents_test.go b/tests/integration/api_repo_get_contents_test.go index 68a8608117208..8c03fb2d5d6dc 100644 --- a/tests/integration/api_repo_get_contents_test.go +++ b/tests/integration/api_repo_get_contents_test.go @@ -191,5 +191,19 @@ func TestAPIGetContentsRefFormats(t *testing.T) { raw, err = io.ReadAll(resp.Body) assert.NoError(t, err) assert.EqualValues(t, content, string(raw)) + + // Test with a filepath with 40 characters + fileWith40c := setting.AppURL + "api/v1/repos/user13/repo11/raw/" + "a_file_path_with_40_characters_for_tests" + resp = MakeRequest(t, NewRequest(t, http.MethodGet, fileWith40c), http.StatusOK) + raw, err = io.ReadAll(resp.Body) + assert.NoError(t, err) + assert.EqualValues(t, "# a_file_path_with_40_characters_for_tests\n", string(raw)) + + // Test with a filepath with 40 characters and name is a commit SHA + fileWith40c = setting.AppURL + "api/v1/repos/user13/repo11/raw/" + "65f1bf27bc3bf70f64657658635e66094edbcb4d" + resp = MakeRequest(t, NewRequest(t, http.MethodGet, fileWith40c), http.StatusOK) + raw, err = io.ReadAll(resp.Body) + assert.NoError(t, err) + assert.EqualValues(t, "# test\n", string(raw)) }) }