diff --git a/integrations/compare_test.go b/integrations/compare_test.go index e8efe7cd094..0fb2ae6c91f 100644 --- a/integrations/compare_test.go +++ b/integrations/compare_test.go @@ -27,3 +27,15 @@ func TestCompareTag(t *testing.T) { resp = session.MakeRequest(t, req, http.StatusNotFound) assert.False(t, strings.Contains(resp.Body.String(), "/assets/img/500.png"), "expect 404 page not 500") } + +// Compare with inferred default branch (master) +func TestCompareDefault(t *testing.T) { + defer prepareTestEnv(t)() + + session := loginUser(t, "user2") + req := NewRequest(t, "GET", "/user2/repo1/compare/v1.1") + resp := session.MakeRequest(t, req, http.StatusOK) + htmlDoc := NewHTMLParser(t, resp.Body) + selection := htmlDoc.doc.Find(".choose.branch .filter.dropdown") + assert.Lenf(t, selection.Nodes, 2, "The template has changed") +} diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go index 865a734caf2..54d7e77f2d4 100644 --- a/routers/web/repo/compare.go +++ b/routers/web/repo/compare.go @@ -186,6 +186,9 @@ func ParseCompareInfo(ctx *context.Context) *CompareInfo { // 1. /{:baseOwner}/{:baseRepoName}/compare/{:baseBranch}...{:headBranch} // 2. /{:baseOwner}/{:baseRepoName}/compare/{:baseBranch}...{:headOwner}:{:headBranch} // 3. /{:baseOwner}/{:baseRepoName}/compare/{:baseBranch}...{:headOwner}/{:headRepoName}:{:headBranch} + // 4. /{:baseOwner}/{:baseRepoName}/compare/{:headBranch} + // 5. /{:baseOwner}/{:baseRepoName}/compare/{:headOwner}:{:headBranch} + // 6. /{:baseOwner}/{:baseRepoName}/compare/{:headOwner}/{:headRepoName}:{:headBranch} // // Here we obtain the infoPath "{:baseBranch}...[{:headOwner}/{:headRepoName}:]{:headBranch}" as ctx.Params("*") // with the :baseRepo in ctx.Repo. @@ -213,9 +216,12 @@ func ParseCompareInfo(ctx *context.Context) *CompareInfo { infos := strings.SplitN(infoPath, "...", 2) if len(infos) != 2 { - infos = strings.SplitN(infoPath, "..", 2) - ci.DirectComparison = true - ctx.Data["PageIsComparePull"] = false + infos = []string{baseRepo.DefaultBranch, infoPath} + if strings.Contains(infoPath, "..") { + infos = strings.SplitN(infoPath, "..", 2) + ci.DirectComparison = true + ctx.Data["PageIsComparePull"] = false + } } if len(infos) != 2 {