forked from go-gitea/gitea
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'giteaofficial/main'
* giteaofficial/main: Reduce unnecessary database queries on actions table (go-gitea#30509) [skip ci] Updated translations via Crowdin Tweak and fix toggle checkboxes (go-gitea#30527) Tweak repo buttons on mobile and labeled button border-radius (go-gitea#30503) Fix long branch name overflows (go-gitea#30345) Update API to return 'source_id' for users (go-gitea#29718) Allow `preferred_username` as username source for OIDC (go-gitea#30454) Fix empty field `login_name` in API response JSON when creating user (go-gitea#30511) feat(api): implement branch/commit comparison API (go-gitea#30349)
- Loading branch information
Showing
32 changed files
with
403 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
// Copyright 2024 The Gitea Authors. All rights reserved. | ||
// SPDX-License-Identifier: MIT | ||
|
||
package structs | ||
|
||
// Compare represents a comparison between two commits. | ||
type Compare struct { | ||
TotalCommits int `json:"total_commits"` // Total number of commits in the comparison. | ||
Commits []*Commit `json:"commits"` // List of commits in the comparison. | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
// Copyright 2024 The Gitea Authors. All rights reserved. | ||
// SPDX-License-Identifier: MIT | ||
|
||
package repo | ||
|
||
import ( | ||
"net/http" | ||
"strings" | ||
|
||
user_model "code.gitea.io/gitea/models/user" | ||
"code.gitea.io/gitea/modules/gitrepo" | ||
api "code.gitea.io/gitea/modules/structs" | ||
"code.gitea.io/gitea/services/context" | ||
"code.gitea.io/gitea/services/convert" | ||
) | ||
|
||
// CompareDiff compare two branches or commits | ||
func CompareDiff(ctx *context.APIContext) { | ||
// swagger:operation GET /repos/{owner}/{repo}/compare/{basehead} Get commit comparison information | ||
// --- | ||
// summary: Get commit comparison information | ||
// produces: | ||
// - application/json | ||
// parameters: | ||
// - name: owner | ||
// in: path | ||
// description: owner of the repo | ||
// type: string | ||
// required: true | ||
// - name: repo | ||
// in: path | ||
// description: name of the repo | ||
// type: string | ||
// required: true | ||
// - name: basehead | ||
// in: path | ||
// description: compare two branches or commits | ||
// type: string | ||
// required: true | ||
// responses: | ||
// "200": | ||
// "$ref": "#/responses/Compare" | ||
// "404": | ||
// "$ref": "#/responses/notFound" | ||
|
||
if ctx.Repo.GitRepo == nil { | ||
gitRepo, err := gitrepo.OpenRepository(ctx, ctx.Repo.Repository) | ||
if err != nil { | ||
ctx.Error(http.StatusInternalServerError, "OpenRepository", err) | ||
return | ||
} | ||
ctx.Repo.GitRepo = gitRepo | ||
defer gitRepo.Close() | ||
} | ||
|
||
infoPath := ctx.Params("*") | ||
infos := []string{ctx.Repo.Repository.DefaultBranch, ctx.Repo.Repository.DefaultBranch} | ||
if infoPath != "" { | ||
infos = strings.SplitN(infoPath, "...", 2) | ||
if len(infos) != 2 { | ||
if infos = strings.SplitN(infoPath, "..", 2); len(infos) != 2 { | ||
infos = []string{ctx.Repo.Repository.DefaultBranch, infoPath} | ||
} | ||
} | ||
} | ||
|
||
_, _, headGitRepo, ci, _, _ := parseCompareInfo(ctx, api.CreatePullRequestOption{ | ||
Base: infos[0], | ||
Head: infos[1], | ||
}) | ||
if ctx.Written() { | ||
return | ||
} | ||
defer headGitRepo.Close() | ||
|
||
verification := ctx.FormString("verification") == "" || ctx.FormBool("verification") | ||
files := ctx.FormString("files") == "" || ctx.FormBool("files") | ||
|
||
apiCommits := make([]*api.Commit, 0, len(ci.Commits)) | ||
userCache := make(map[string]*user_model.User) | ||
for i := 0; i < len(ci.Commits); i++ { | ||
apiCommit, err := convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, ci.Commits[i], userCache, | ||
convert.ToCommitOptions{ | ||
Stat: true, | ||
Verification: verification, | ||
Files: files, | ||
}) | ||
if err != nil { | ||
ctx.ServerError("toCommit", err) | ||
return | ||
} | ||
apiCommits = append(apiCommits, apiCommit) | ||
} | ||
|
||
ctx.JSON(http.StatusOK, &api.Compare{ | ||
TotalCommits: len(ci.Commits), | ||
Commits: apiCommits, | ||
}) | ||
} |
Oops, something went wrong.