From 706a7ad41e5593c6b7361185795f663759e6bc05 Mon Sep 17 00:00:00 2001 From: forgejo-backport-action Date: Sat, 6 Apr 2024 13:24:55 +0000 Subject: [PATCH] [v7.0/forgejo] Fix "view file" button in diff compare view (#3077) **Backport:** https://codeberg.org/forgejo/forgejo/pulls/3046 This PR fixes an issue in the diff compare view, where when working on a fork that has not the same name as the upstream repo, the "View file" button links to a wrong, often missing, location. Demonstration of this issue: - Visit https://next.forgejo.org/mai-lapyst-test-org/upstream/compare/main...Mai-Lapyst/downstream:mai-lapyst-patch-1. - Click the "View file" button of the patch. - Get taken to `https://next.forgejo.org/Mai-Lapyst/upstream/src/commit/4fe947d52224cf7e92f6e4a99bb532175c8390e1/README.md` (which does not exist and returns a 404) instead of `https://next.forgejo.org/Mai-Lapyst/downstream/src/commit/4fe947d52224cf7e92f6e4a99bb532175c8390e1/README.md`. Note the different repository name (`upstream` vs `downstream`). Co-authored-by: Mai-Lapyst Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/3077 Reviewed-by: Gusted Co-authored-by: forgejo-backport-action Co-committed-by: forgejo-backport-action --- routers/web/repo/compare.go | 2 +- tests/integration/compare_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go index cfb0e859bd..93c224b7be 100644 --- a/routers/web/repo/compare.go +++ b/routers/web/repo/compare.go @@ -684,7 +684,7 @@ func PrepareCompareDiff( ctx.Data["Username"] = ci.HeadUser.Name ctx.Data["Reponame"] = ci.HeadRepo.Name - setCompareContext(ctx, beforeCommit, headCommit, ci.HeadUser.Name, repo.Name) + setCompareContext(ctx, beforeCommit, headCommit, ci.HeadUser.Name, ci.HeadRepo.Name) return false } diff --git a/tests/integration/compare_test.go b/tests/integration/compare_test.go index 5d5529c36e..0929e8938e 100644 --- a/tests/integration/compare_test.go +++ b/tests/integration/compare_test.go @@ -14,6 +14,8 @@ import ( "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" unit_model "code.gitea.io/gitea/models/unit" + "code.gitea.io/gitea/models/unittest" + "code.gitea.io/gitea/modules/gitrepo" repo_service "code.gitea.io/gitea/services/repository" "code.gitea.io/gitea/tests" @@ -182,3 +184,32 @@ func TestCompareWithPRsDisabled(t *testing.T) { }) }) } + +func TestCompareCrossRepo(t *testing.T) { + onGiteaRun(t, func(t *testing.T, u *url.URL) { + session := loginUser(t, "user1") + testRepoFork(t, session, "user2", "repo1", "user1", "repo1-copy") + testCreateBranch(t, session, "user1", "repo1-copy", "branch/master", "recent-push", http.StatusSeeOther) + testEditFile(t, session, "user1", "repo1-copy", "recent-push", "README.md", "Hello recently!\n") + + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user1", Name: "repo1-copy"}) + + gitRepo, err := gitrepo.OpenRepository(db.DefaultContext, repo) + assert.NoError(t, err) + defer gitRepo.Close() + + lastCommit, err := gitRepo.GetBranchCommitID("recent-push") + assert.NoError(t, err) + assert.NotEmpty(t, lastCommit) + + t.Run("view file button links to correct file in fork", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + + req := NewRequest(t, "GET", "/user2/repo1/compare/master...user1/repo1-copy:recent-push") + resp := session.MakeRequest(t, req, http.StatusOK) + htmlDoc := NewHTMLParser(t, resp.Body) + htmlDoc.AssertElement(t, "a[href='/user1/repo1-copy/src/commit/"+lastCommit+"/README.md']", true) + htmlDoc.AssertElement(t, "a[href='/user1/repo1/src/commit/"+lastCommit+"/README.md']", false) + }) + }) +}