mirror of
https://github.com/go-gitea/gitea.git
synced 2024-09-01 14:56:30 +00:00
Merge branch 'main' into pacman-packages
This commit is contained in:
commit
c221fd3cfd
@ -224,7 +224,6 @@ rules:
|
||||
"@typescript-eslint/await-thenable": [2]
|
||||
"@typescript-eslint/ban-ts-comment": [2, {'ts-expect-error': false, 'ts-ignore': true, 'ts-nocheck': false, 'ts-check': false}]
|
||||
"@typescript-eslint/ban-tslint-comment": [0]
|
||||
"@typescript-eslint/ban-types": [2, {extendDefaults: true, types: {Function: false}}]
|
||||
"@typescript-eslint/class-literal-property-style": [0]
|
||||
"@typescript-eslint/class-methods-use-this": [0]
|
||||
"@typescript-eslint/consistent-generic-constructors": [0]
|
||||
@ -255,6 +254,7 @@ rules:
|
||||
"@typescript-eslint/no-dynamic-delete": [0]
|
||||
"@typescript-eslint/no-empty-function": [0]
|
||||
"@typescript-eslint/no-empty-interface": [0]
|
||||
"@typescript-eslint/no-empty-object-type": [2]
|
||||
"@typescript-eslint/no-explicit-any": [0]
|
||||
"@typescript-eslint/no-extra-non-null-assertion": [2]
|
||||
"@typescript-eslint/no-extraneous-class": [0]
|
||||
@ -266,7 +266,7 @@ rules:
|
||||
"@typescript-eslint/no-invalid-this": [0]
|
||||
"@typescript-eslint/no-invalid-void-type": [0]
|
||||
"@typescript-eslint/no-loop-func": [0]
|
||||
"@typescript-eslint/no-loss-of-precision": [2]
|
||||
"@typescript-eslint/no-loss-of-precision": [0]
|
||||
"@typescript-eslint/no-magic-numbers": [0]
|
||||
"@typescript-eslint/no-meaningless-void-operator": [0]
|
||||
"@typescript-eslint/no-misused-new": [2]
|
||||
@ -278,8 +278,9 @@ rules:
|
||||
"@typescript-eslint/no-non-null-assertion": [0]
|
||||
"@typescript-eslint/no-redeclare": [0]
|
||||
"@typescript-eslint/no-redundant-type-constituents": [2]
|
||||
"@typescript-eslint/no-require-imports": [0]
|
||||
"@typescript-eslint/no-require-imports": [2]
|
||||
"@typescript-eslint/no-restricted-imports": [0]
|
||||
"@typescript-eslint/no-restricted-types": [0]
|
||||
"@typescript-eslint/no-shadow": [0]
|
||||
"@typescript-eslint/no-this-alias": [0] # handled by unicorn/no-this-assignment
|
||||
"@typescript-eslint/no-unnecessary-boolean-literal-compare": [0]
|
||||
@ -294,6 +295,7 @@ rules:
|
||||
"@typescript-eslint/no-unsafe-call": [0]
|
||||
"@typescript-eslint/no-unsafe-declaration-merging": [2]
|
||||
"@typescript-eslint/no-unsafe-enum-comparison": [2]
|
||||
"@typescript-eslint/no-unsafe-function-type": [2]
|
||||
"@typescript-eslint/no-unsafe-member-access": [0]
|
||||
"@typescript-eslint/no-unsafe-return": [0]
|
||||
"@typescript-eslint/no-unsafe-unary-minus": [2]
|
||||
@ -302,7 +304,7 @@ rules:
|
||||
"@typescript-eslint/no-use-before-define": [0]
|
||||
"@typescript-eslint/no-useless-constructor": [0]
|
||||
"@typescript-eslint/no-useless-empty-export": [0]
|
||||
"@typescript-eslint/no-var-requires": [2]
|
||||
"@typescript-eslint/no-wrapper-object-types": [2]
|
||||
"@typescript-eslint/non-nullable-type-assertion-style": [0]
|
||||
"@typescript-eslint/only-throw-error": [2]
|
||||
"@typescript-eslint/parameter-properties": [0]
|
||||
@ -334,7 +336,7 @@ rules:
|
||||
"@typescript-eslint/switch-exhaustiveness-check": [0]
|
||||
"@typescript-eslint/triple-slash-reference": [2]
|
||||
"@typescript-eslint/typedef": [0]
|
||||
"@typescript-eslint/unbound-method": [2]
|
||||
"@typescript-eslint/unbound-method": [0] # too many false-positives
|
||||
"@typescript-eslint/unified-signatures": [2]
|
||||
accessor-pairs: [2]
|
||||
array-callback-return: [2, {checkForEach: true}]
|
||||
@ -599,7 +601,7 @@ rules:
|
||||
no-lone-blocks: [2]
|
||||
no-lonely-if: [0]
|
||||
no-loop-func: [0]
|
||||
no-loss-of-precision: [0] # handled by @typescript-eslint/no-loss-of-precision
|
||||
no-loss-of-precision: [2]
|
||||
no-magic-numbers: [0]
|
||||
no-misleading-character-class: [2]
|
||||
no-multi-assign: [0]
|
||||
@ -843,6 +845,7 @@ rules:
|
||||
unicorn/no-invalid-fetch-options: [2]
|
||||
unicorn/no-invalid-remove-event-listener: [2]
|
||||
unicorn/no-keyword-prefix: [0]
|
||||
unicorn/no-length-as-slice-end: [2]
|
||||
unicorn/no-lonely-if: [2]
|
||||
unicorn/no-magic-array-flat-depth: [0]
|
||||
unicorn/no-negated-condition: [0]
|
||||
|
@ -2555,7 +2555,8 @@ LEVEL = Info
|
||||
;LIMIT_SIZE_SWIFT = -1
|
||||
;; Maximum size of a Vagrant upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`)
|
||||
;LIMIT_SIZE_VAGRANT = -1
|
||||
|
||||
;; Enable RPM re-signing by default. (It will overwrite the old signature ,using v4 format, not compatible with CentOS 6 or older)
|
||||
;DEFAULT_RPM_SIGN_ENABLED = false
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; default storage for attachments, lfs and avatars
|
||||
|
10
go.mod
10
go.mod
@ -22,7 +22,7 @@ require (
|
||||
github.com/PuerkitoBio/goquery v1.9.2
|
||||
github.com/alecthomas/chroma/v2 v2.14.0
|
||||
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb
|
||||
github.com/blevesearch/bleve/v2 v2.4.0
|
||||
github.com/blevesearch/bleve/v2 v2.4.2
|
||||
github.com/buildkite/terminal-to-html/v3 v3.12.1
|
||||
github.com/caddyserver/certmagic v0.21.3
|
||||
github.com/chi-middleware/proxy v1.1.1
|
||||
@ -147,13 +147,13 @@ require (
|
||||
github.com/aymerick/douceur v0.2.0 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/bits-and-blooms/bitset v1.13.0 // indirect
|
||||
github.com/blevesearch/bleve_index_api v1.1.9 // indirect
|
||||
github.com/blevesearch/bleve_index_api v1.1.10 // indirect
|
||||
github.com/blevesearch/geo v0.1.20 // indirect
|
||||
github.com/blevesearch/go-faiss v1.0.19 // indirect
|
||||
github.com/blevesearch/go-faiss v1.0.20 // indirect
|
||||
github.com/blevesearch/go-porterstemmer v1.0.3 // indirect
|
||||
github.com/blevesearch/gtreap v0.1.1 // indirect
|
||||
github.com/blevesearch/mmap-go v1.0.4 // indirect
|
||||
github.com/blevesearch/scorch_segment_api/v2 v2.2.14 // indirect
|
||||
github.com/blevesearch/scorch_segment_api/v2 v2.2.15 // indirect
|
||||
github.com/blevesearch/segment v0.9.1 // indirect
|
||||
github.com/blevesearch/snowballstem v0.9.0 // indirect
|
||||
github.com/blevesearch/upsidedown_store_api v1.0.2 // indirect
|
||||
@ -163,7 +163,7 @@ require (
|
||||
github.com/blevesearch/zapx/v13 v13.3.10 // indirect
|
||||
github.com/blevesearch/zapx/v14 v14.3.10 // indirect
|
||||
github.com/blevesearch/zapx/v15 v15.3.13 // indirect
|
||||
github.com/blevesearch/zapx/v16 v16.1.4 // indirect
|
||||
github.com/blevesearch/zapx/v16 v16.1.5 // indirect
|
||||
github.com/boombuler/barcode v1.0.1 // indirect
|
||||
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect
|
||||
github.com/caddyserver/zerossl v0.1.3 // indirect
|
||||
|
20
go.sum
20
go.sum
@ -117,15 +117,15 @@ github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6
|
||||
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4=
|
||||
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI=
|
||||
github.com/blevesearch/bleve/v2 v2.0.5/go.mod h1:ZjWibgnbRX33c+vBRgla9QhPb4QOjD6fdVJ+R1Bk8LM=
|
||||
github.com/blevesearch/bleve/v2 v2.4.0 h1:2xyg+Wv60CFHYccXc+moGxbL+8QKT/dZK09AewHgKsg=
|
||||
github.com/blevesearch/bleve/v2 v2.4.0/go.mod h1:IhQHoFAbHgWKYavb9rQgQEJJVMuY99cKdQ0wPpst2aY=
|
||||
github.com/blevesearch/bleve/v2 v2.4.2 h1:NooYP1mb3c0StkiY9/xviiq2LGSaE8BQBCc/pirMx0U=
|
||||
github.com/blevesearch/bleve/v2 v2.4.2/go.mod h1:ATNKj7Yl2oJv/lGuF4kx39bST2dveX6w0th2FFYLkc8=
|
||||
github.com/blevesearch/bleve_index_api v1.0.0/go.mod h1:fiwKS0xLEm+gBRgv5mumf0dhgFr2mDgZah1pqv1c1M4=
|
||||
github.com/blevesearch/bleve_index_api v1.1.9 h1:Cpq0Lp3As0Gfk3+PmcoNDRKeI50C5yuFNpj0YlN/bOE=
|
||||
github.com/blevesearch/bleve_index_api v1.1.9/go.mod h1:PbcwjIcRmjhGbkS/lJCpfgVSMROV6TRubGGAODaK1W8=
|
||||
github.com/blevesearch/bleve_index_api v1.1.10 h1:PDLFhVjrjQWr6jCuU7TwlmByQVCSEURADHdCqVS9+g0=
|
||||
github.com/blevesearch/bleve_index_api v1.1.10/go.mod h1:PbcwjIcRmjhGbkS/lJCpfgVSMROV6TRubGGAODaK1W8=
|
||||
github.com/blevesearch/geo v0.1.20 h1:paaSpu2Ewh/tn5DKn/FB5SzvH0EWupxHEIwbCk/QPqM=
|
||||
github.com/blevesearch/geo v0.1.20/go.mod h1:DVG2QjwHNMFmjo+ZgzrIq2sfCh6rIHzy9d9d0B59I6w=
|
||||
github.com/blevesearch/go-faiss v1.0.19 h1:UKoP8hS7DVsVSRRloNJb4qPfe2UQ99pP4D3oXd23g2A=
|
||||
github.com/blevesearch/go-faiss v1.0.19/go.mod h1:jrxHrbl42X/RnDPI+wBoZU8joxxuRwedrxqswQ3xfU8=
|
||||
github.com/blevesearch/go-faiss v1.0.20 h1:AIkdTQFWuZ5LQmKQSebgMR4RynGNw8ZseJXaan5kvtI=
|
||||
github.com/blevesearch/go-faiss v1.0.20/go.mod h1:jrxHrbl42X/RnDPI+wBoZU8joxxuRwedrxqswQ3xfU8=
|
||||
github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo=
|
||||
github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M=
|
||||
github.com/blevesearch/gtreap v0.1.1 h1:2JWigFrzDMR+42WGIN/V2p0cUvn4UP3C4Q5nmaZGW8Y=
|
||||
@ -134,8 +134,8 @@ github.com/blevesearch/mmap-go v1.0.2/go.mod h1:ol2qBqYaOUsGdm7aRMRrYGgPvnwLe6Y+
|
||||
github.com/blevesearch/mmap-go v1.0.4 h1:OVhDhT5B/M1HNPpYPBKIEJaD0F3Si+CrEKULGCDPWmc=
|
||||
github.com/blevesearch/mmap-go v1.0.4/go.mod h1:EWmEAOmdAS9z/pi/+Toxu99DnsbhG1TIxUoRmJw/pSs=
|
||||
github.com/blevesearch/scorch_segment_api/v2 v2.0.1/go.mod h1:lq7yK2jQy1yQjtjTfU931aVqz7pYxEudHaDwOt1tXfU=
|
||||
github.com/blevesearch/scorch_segment_api/v2 v2.2.14 h1:fgMLMpGWR7u2TdRm7XSZVWhPvMAcdYHh25Lq1fQ6Fjo=
|
||||
github.com/blevesearch/scorch_segment_api/v2 v2.2.14/go.mod h1:B7+a7vfpY4NsjuTkpv/eY7RZ91Xr90VaJzT2t7upZN8=
|
||||
github.com/blevesearch/scorch_segment_api/v2 v2.2.15 h1:prV17iU/o+A8FiZi9MXmqbagd8I0bCqM7OKUYPbnb5Y=
|
||||
github.com/blevesearch/scorch_segment_api/v2 v2.2.15/go.mod h1:db0cmP03bPNadXrCDuVkKLV6ywFSiRgPFT1YVrestBc=
|
||||
github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ=
|
||||
github.com/blevesearch/segment v0.9.1 h1:+dThDy+Lvgj5JMxhmOVlgFfkUtZV2kw49xax4+jTfSU=
|
||||
github.com/blevesearch/segment v0.9.1/go.mod h1:zN21iLm7+GnBHWTao9I+Au/7MBiL8pPFtJBJTsk6kQw=
|
||||
@ -163,8 +163,8 @@ github.com/blevesearch/zapx/v14 v14.3.10/go.mod h1:qqyuR0u230jN1yMmE4FIAuCxmahRQ
|
||||
github.com/blevesearch/zapx/v15 v15.2.0/go.mod h1:MmQceLpWfME4n1WrBFIwplhWmaQbQqLQARpaKUEOs/A=
|
||||
github.com/blevesearch/zapx/v15 v15.3.13 h1:6EkfaZiPlAxqXz0neniq35my6S48QI94W/wyhnpDHHQ=
|
||||
github.com/blevesearch/zapx/v15 v15.3.13/go.mod h1:Turk/TNRKj9es7ZpKK95PS7f6D44Y7fAFy8F4LXQtGg=
|
||||
github.com/blevesearch/zapx/v16 v16.1.4 h1:TBQfG77g2UUXwfjOVcEtB9pXkg6JBmGXkeZKI67+TiA=
|
||||
github.com/blevesearch/zapx/v16 v16.1.4/go.mod h1:+Q+Z89Iv7ewhdX2jyE6Qs/RUnN4tZuokaQ0xvTaFmx8=
|
||||
github.com/blevesearch/zapx/v16 v16.1.5 h1:b0sMcarqNFxuXvjoXsF8WtwVahnxyhEvBSRJi/AUHjU=
|
||||
github.com/blevesearch/zapx/v16 v16.1.5/go.mod h1:J4mSF39w1QELc11EWRSBFkPeZuO7r/NPKkHzDCoiaI8=
|
||||
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
||||
github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs=
|
||||
github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
||||
|
@ -392,6 +392,13 @@ func RenameBranch(ctx context.Context, repo *repo_model.Repository, from, to str
|
||||
return err
|
||||
}
|
||||
|
||||
// 4.1 Update all not merged pull request head branch name
|
||||
if _, err = sess.Table("pull_request").Where("head_repo_id=? AND head_branch=? AND has_merged=?",
|
||||
repo.ID, from, false).
|
||||
Update(map[string]any{"head_branch": to}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 5. insert renamed branch record
|
||||
renamedBranch := &RenamedBranch{
|
||||
RepoID: repo.ID,
|
||||
|
@ -165,6 +165,7 @@ type PullRequest struct {
|
||||
Issue *Issue `xorm:"-"`
|
||||
Index int64
|
||||
RequestedReviewers []*user_model.User `xorm:"-"`
|
||||
RequestedReviewersTeams []*org_model.Team `xorm:"-"`
|
||||
isRequestedReviewersLoaded bool `xorm:"-"`
|
||||
|
||||
HeadRepoID int64 `xorm:"INDEX"`
|
||||
@ -305,7 +306,28 @@ func (pr *PullRequest) LoadRequestedReviewers(ctx context.Context) error {
|
||||
}
|
||||
pr.isRequestedReviewersLoaded = true
|
||||
for _, review := range reviews {
|
||||
pr.RequestedReviewers = append(pr.RequestedReviewers, review.Reviewer)
|
||||
if review.ReviewerID != 0 {
|
||||
pr.RequestedReviewers = append(pr.RequestedReviewers, review.Reviewer)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadRequestedReviewersTeams loads the requested reviewers teams.
|
||||
func (pr *PullRequest) LoadRequestedReviewersTeams(ctx context.Context) error {
|
||||
reviews, err := GetReviewsByIssueID(ctx, pr.Issue.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err = reviews.LoadReviewersTeams(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, review := range reviews {
|
||||
if review.ReviewerTeamID != 0 {
|
||||
pr.RequestedReviewersTeams = append(pr.RequestedReviewersTeams, review.ReviewerTeam)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"context"
|
||||
|
||||
"code.gitea.io/gitea/models/db"
|
||||
organization_model "code.gitea.io/gitea/models/organization"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/container"
|
||||
"code.gitea.io/gitea/modules/optional"
|
||||
@ -37,6 +38,34 @@ func (reviews ReviewList) LoadReviewers(ctx context.Context) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoadReviewersTeams loads reviewers teams
|
||||
func (reviews ReviewList) LoadReviewersTeams(ctx context.Context) error {
|
||||
reviewersTeamsIDs := make([]int64, 0)
|
||||
for _, review := range reviews {
|
||||
if review.ReviewerTeamID != 0 {
|
||||
reviewersTeamsIDs = append(reviewersTeamsIDs, review.ReviewerTeamID)
|
||||
}
|
||||
}
|
||||
|
||||
teamsMap := make(map[int64]*organization_model.Team, 0)
|
||||
for _, teamID := range reviewersTeamsIDs {
|
||||
team, err := organization_model.GetTeamByID(ctx, teamID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
teamsMap[teamID] = team
|
||||
}
|
||||
|
||||
for _, review := range reviews {
|
||||
if review.ReviewerTeamID != 0 {
|
||||
review.ReviewerTeam = teamsMap[review.ReviewerTeamID]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (reviews ReviewList) LoadIssues(ctx context.Context) error {
|
||||
issueIDs := container.FilterSlice(reviews, func(review *Review) (int64, bool) {
|
||||
return review.IssueID, true
|
||||
|
@ -398,32 +398,6 @@ func GetReleaseAttachments(ctx context.Context, rels ...*Release) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
type releaseSorter struct {
|
||||
rels []*Release
|
||||
}
|
||||
|
||||
func (rs *releaseSorter) Len() int {
|
||||
return len(rs.rels)
|
||||
}
|
||||
|
||||
func (rs *releaseSorter) Less(i, j int) bool {
|
||||
diffNum := rs.rels[i].NumCommits - rs.rels[j].NumCommits
|
||||
if diffNum != 0 {
|
||||
return diffNum > 0
|
||||
}
|
||||
return rs.rels[i].CreatedUnix > rs.rels[j].CreatedUnix
|
||||
}
|
||||
|
||||
func (rs *releaseSorter) Swap(i, j int) {
|
||||
rs.rels[i], rs.rels[j] = rs.rels[j], rs.rels[i]
|
||||
}
|
||||
|
||||
// SortReleases sorts releases by number of commits and created time.
|
||||
func SortReleases(rels []*Release) {
|
||||
sorter := &releaseSorter{rels: rels}
|
||||
sort.Sort(sorter)
|
||||
}
|
||||
|
||||
// UpdateReleasesMigrationsByType updates all migrated repositories' releases from gitServiceType to replace originalAuthorID to posterID
|
||||
func UpdateReleasesMigrationsByType(ctx context.Context, gitServiceType structs.GitServiceType, originalAuthorID string, posterID int64) error {
|
||||
_, err := db.GetEngine(ctx).Table("release").
|
||||
|
@ -4,6 +4,8 @@
|
||||
package git
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
@ -345,3 +347,18 @@ func TestGetCommitFileStatusMerges(t *testing.T) {
|
||||
assert.Equal(t, commitFileStatus.Removed, expected.Removed)
|
||||
assert.Equal(t, commitFileStatus.Modified, expected.Modified)
|
||||
}
|
||||
|
||||
func Test_GetCommitBranchStart(t *testing.T) {
|
||||
bareRepo1Path := filepath.Join(testReposDir, "repo1_bare")
|
||||
repo, err := OpenRepository(context.Background(), bareRepo1Path)
|
||||
assert.NoError(t, err)
|
||||
defer repo.Close()
|
||||
commit, err := repo.GetBranchCommit("branch1")
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, "2839944139e0de9737a044f78b0e4b40d989a9e3", commit.ID.String())
|
||||
|
||||
startCommitID, err := repo.GetCommitBranchStart(os.Environ(), "branch1", commit.ID.String())
|
||||
assert.NoError(t, err)
|
||||
assert.NotEmpty(t, startCommitID)
|
||||
assert.EqualValues(t, "9c9aef8dd84e02bc7ec12641deb4c930a7c30185", startCommitID)
|
||||
}
|
||||
|
@ -271,7 +271,17 @@ func CutDiffAroundLine(originalDiff io.Reader, line int64, old bool, numbersOfLi
|
||||
}
|
||||
|
||||
// GetAffectedFiles returns the affected files between two commits
|
||||
func GetAffectedFiles(repo *Repository, oldCommitID, newCommitID string, env []string) ([]string, error) {
|
||||
func GetAffectedFiles(repo *Repository, branchName, oldCommitID, newCommitID string, env []string) ([]string, error) {
|
||||
if oldCommitID == emptySha1ObjectID.String() || oldCommitID == emptySha256ObjectID.String() {
|
||||
startCommitID, err := repo.GetCommitBranchStart(env, branchName, newCommitID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if startCommitID == "" {
|
||||
return nil, fmt.Errorf("cannot find the start commit of %s", newCommitID)
|
||||
}
|
||||
oldCommitID = startCommitID
|
||||
}
|
||||
stdoutReader, stdoutWriter, err := os.Pipe()
|
||||
if err != nil {
|
||||
log.Error("Unable to create os.Pipe for %s", repo.Path)
|
||||
|
@ -7,6 +7,7 @@ package git
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@ -414,7 +415,7 @@ func (repo *Repository) commitsBefore(id ObjectID, limit int) ([]*Commit, error)
|
||||
|
||||
commits := make([]*Commit, 0, len(formattedLog))
|
||||
for _, commit := range formattedLog {
|
||||
branches, err := repo.getBranches(commit, 2)
|
||||
branches, err := repo.getBranches(os.Environ(), commit.ID.String(), 2)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -437,12 +438,15 @@ func (repo *Repository) getCommitsBeforeLimit(id ObjectID, num int) ([]*Commit,
|
||||
return repo.commitsBefore(id, num)
|
||||
}
|
||||
|
||||
func (repo *Repository) getBranches(commit *Commit, limit int) ([]string, error) {
|
||||
func (repo *Repository) getBranches(env []string, commitID string, limit int) ([]string, error) {
|
||||
if DefaultFeatures().CheckVersionAtLeast("2.7.0") {
|
||||
stdout, _, err := NewCommand(repo.Ctx, "for-each-ref", "--format=%(refname:strip=2)").
|
||||
AddOptionFormat("--count=%d", limit).
|
||||
AddOptionValues("--contains", commit.ID.String(), BranchPrefix).
|
||||
RunStdString(&RunOpts{Dir: repo.Path})
|
||||
AddOptionValues("--contains", commitID, BranchPrefix).
|
||||
RunStdString(&RunOpts{
|
||||
Dir: repo.Path,
|
||||
Env: env,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -451,7 +455,10 @@ func (repo *Repository) getBranches(commit *Commit, limit int) ([]string, error)
|
||||
return branches, nil
|
||||
}
|
||||
|
||||
stdout, _, err := NewCommand(repo.Ctx, "branch").AddOptionValues("--contains", commit.ID.String()).RunStdString(&RunOpts{Dir: repo.Path})
|
||||
stdout, _, err := NewCommand(repo.Ctx, "branch").AddOptionValues("--contains", commitID).RunStdString(&RunOpts{
|
||||
Dir: repo.Path,
|
||||
Env: env,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -513,3 +520,35 @@ func (repo *Repository) AddLastCommitCache(cacheKey, fullName, sha string) error
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (repo *Repository) GetCommitBranchStart(env []string, branch, endCommitID string) (string, error) {
|
||||
cmd := NewCommand(repo.Ctx, "log", prettyLogFormat)
|
||||
cmd.AddDynamicArguments(endCommitID)
|
||||
|
||||
stdout, _, runErr := cmd.RunStdBytes(&RunOpts{
|
||||
Dir: repo.Path,
|
||||
Env: env,
|
||||
})
|
||||
if runErr != nil {
|
||||
return "", runErr
|
||||
}
|
||||
|
||||
parts := bytes.Split(bytes.TrimSpace(stdout), []byte{'\n'})
|
||||
|
||||
var startCommitID string
|
||||
for _, commitID := range parts {
|
||||
branches, err := repo.getBranches(env, string(commitID), 2)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
for _, b := range branches {
|
||||
if b != branch {
|
||||
return startCommitID, nil
|
||||
}
|
||||
}
|
||||
|
||||
startCommitID = string(commitID)
|
||||
}
|
||||
|
||||
return "", nil
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
package git
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
@ -31,7 +32,7 @@ func TestRepository_GetCommitBranches(t *testing.T) {
|
||||
for _, testCase := range testCases {
|
||||
commit, err := bareRepo1.GetCommit(testCase.CommitID)
|
||||
assert.NoError(t, err)
|
||||
branches, err := bareRepo1.getBranches(commit, 2)
|
||||
branches, err := bareRepo1.getBranches(os.Environ(), commit.ID.String(), 2)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, testCase.ExpectedBranches, branches)
|
||||
}
|
||||
|
@ -43,6 +43,8 @@ var (
|
||||
LimitSizeRubyGems int64
|
||||
LimitSizeSwift int64
|
||||
LimitSizeVagrant int64
|
||||
|
||||
DefaultRPMSignEnabled bool
|
||||
}{
|
||||
Enabled: true,
|
||||
LimitTotalOwnerCount: -1,
|
||||
@ -99,6 +101,7 @@ func loadPackagesFrom(rootCfg ConfigProvider) (err error) {
|
||||
Packages.LimitSizeRubyGems = mustBytes(sec, "LIMIT_SIZE_RUBYGEMS")
|
||||
Packages.LimitSizeSwift = mustBytes(sec, "LIMIT_SIZE_SWIFT")
|
||||
Packages.LimitSizeVagrant = mustBytes(sec, "LIMIT_SIZE_VAGRANT")
|
||||
Packages.DefaultRPMSignEnabled = sec.Key("DEFAULT_RPM_SIGN_ENABLED").MustBool(false)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -9,21 +9,22 @@ import (
|
||||
|
||||
// PullRequest represents a pull request
|
||||
type PullRequest struct {
|
||||
ID int64 `json:"id"`
|
||||
URL string `json:"url"`
|
||||
Index int64 `json:"number"`
|
||||
Poster *User `json:"user"`
|
||||
Title string `json:"title"`
|
||||
Body string `json:"body"`
|
||||
Labels []*Label `json:"labels"`
|
||||
Milestone *Milestone `json:"milestone"`
|
||||
Assignee *User `json:"assignee"`
|
||||
Assignees []*User `json:"assignees"`
|
||||
RequestedReviewers []*User `json:"requested_reviewers"`
|
||||
State StateType `json:"state"`
|
||||
Draft bool `json:"draft"`
|
||||
IsLocked bool `json:"is_locked"`
|
||||
Comments int `json:"comments"`
|
||||
ID int64 `json:"id"`
|
||||
URL string `json:"url"`
|
||||
Index int64 `json:"number"`
|
||||
Poster *User `json:"user"`
|
||||
Title string `json:"title"`
|
||||
Body string `json:"body"`
|
||||
Labels []*Label `json:"labels"`
|
||||
Milestone *Milestone `json:"milestone"`
|
||||
Assignee *User `json:"assignee"`
|
||||
Assignees []*User `json:"assignees"`
|
||||
RequestedReviewers []*User `json:"requested_reviewers"`
|
||||
RequestedReviewersTeams []*Team `json:"requested_reviewers_teams"`
|
||||
State StateType `json:"state"`
|
||||
Draft bool `json:"draft"`
|
||||
IsLocked bool `json:"is_locked"`
|
||||
Comments int `json:"comments"`
|
||||
// number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)
|
||||
ReviewComments int `json:"review_comments"`
|
||||
Additions int `json:"additions"`
|
||||
|
10
options/license/HPND-Netrek
Normal file
10
options/license/HPND-Netrek
Normal file
@ -0,0 +1,10 @@
|
||||
Copyright (C) 1995 S. M. Patel (smpatel@wam.umd.edu)
|
||||
|
||||
Permission to use, copy, modify, and distribute this
|
||||
software and its documentation for any purpose and without
|
||||
fee is hereby granted, provided that the above copyright
|
||||
notice appear in all copies and that both that copyright
|
||||
notice and this permission notice appear in supporting
|
||||
documentation. No representations are made about the
|
||||
suitability of this software for any purpose. It is
|
||||
provided "as is" without express or implied warranty.
|
@ -2869,6 +2869,7 @@ dashboard.reinit_missing_repos=Reinicializar todos os repositórios Git em falta
|
||||
dashboard.sync_external_users=Sincronizar dados externos do utilizador
|
||||
dashboard.cleanup_hook_task_table=Limpar tabela hook_task
|
||||
dashboard.cleanup_packages=Limpar pacotes expirados
|
||||
dashboard.cleanup_actions=Limpar recursos das operações expirados
|
||||
dashboard.server_uptime=Tempo em funcionamento contínuo do servidor
|
||||
dashboard.current_goroutine=Goroutines em execução
|
||||
dashboard.current_memory_usage=Utilização de memória corrente
|
||||
@ -2898,9 +2899,15 @@ dashboard.total_gc_time=Pausa total da recolha de lixo
|
||||
dashboard.total_gc_pause=Pausa total da recolha de lixo
|
||||
dashboard.last_gc_pause=Última pausa da recolha de lixo
|
||||
dashboard.gc_times=N.º de recolhas de lixo
|
||||
dashboard.delete_old_actions=Eliminar todo o trabalho antigo da base de dados
|
||||
dashboard.delete_old_actions.started=Foi iniciado o processo de eliminação de todo o trabalho antigo da base de dados.
|
||||
dashboard.update_checker=Verificador de novas versões
|
||||
dashboard.delete_old_system_notices=Eliminar todas as notificações do sistema antigas da base de dados
|
||||
dashboard.gc_lfs=Recolher lixo dos meta-elementos LFS
|
||||
dashboard.stop_zombie_tasks=Parar tarefas zombie das operações
|
||||
dashboard.stop_endless_tasks=Parar tarefas intermináveis das operações
|
||||
dashboard.cancel_abandoned_jobs=Cancelar trabalhos abandonados das operações
|
||||
dashboard.start_schedule_tasks=Iniciar tarefas de agendamento das operações
|
||||
dashboard.sync_branch.started=Sincronização de ramos iniciada
|
||||
dashboard.sync_tag.started=Sincronização de etiquetas iniciada
|
||||
dashboard.rebuild_issue_indexer=Reconstruir indexador de questões
|
||||
@ -3671,6 +3678,7 @@ runs.no_workflows.quick_start=Não sabe como começar com o Gitea Actions? Veja
|
||||
runs.no_workflows.documentation=Para mais informação sobre o Gitea Actions veja <a target="_blank" rel="noopener noreferrer" href="%s">a documentação</a>.
|
||||
runs.no_runs=A sequência de trabalho ainda não foi executada.
|
||||
runs.empty_commit_message=(mensagem de cometimento vazia)
|
||||
runs.expire_log_message=Os registros foram removidos porque eram muito antigos.
|
||||
|
||||
workflow.disable=Desabilitar sequência de trabalho
|
||||
workflow.disable_success=A sequência de trabalho '%s' foi desabilitada com sucesso.
|
||||
|
@ -93,6 +93,7 @@ remove_all=Tümünü Kaldır
|
||||
remove_label_str=`"%s" öğesini kaldır`
|
||||
edit=Düzenle
|
||||
view=Görüntüle
|
||||
test=Sınama
|
||||
|
||||
enabled=Aktifleştirilmiş
|
||||
disabled=Devre Dışı
|
||||
@ -386,6 +387,8 @@ relevant_repositories=Sadece ilişkili depolar gösteriliyor, <a href="%s">süz
|
||||
|
||||
[auth]
|
||||
create_new_account=Hesap Oluştur
|
||||
already_have_account=Zaten bir hesabınız var mı?
|
||||
sign_in_now=Şimdi oturum açın!
|
||||
disable_register_prompt=Kayıt işlemi devre dışıdır. Lütfen site yöneticinizle iletişim kurun.
|
||||
disable_register_mail=Kayıt için e-posta doğrulama devre dışıdır.
|
||||
manual_activation_only=Etkinleştirmeyi tamamlamak için site yöneticinizle bağlantıya geçin.
|
||||
@ -393,6 +396,8 @@ remember_me=Bu Aygıtı hatırla
|
||||
remember_me.compromised=Oturum açma tokeni artık geçerli değil, bu ele geçirilmiş bir hesaba işaret ediyor olabilir. Lütfen hesabınızda olağandışı faaliyet olup olmadığını denetleyin.
|
||||
forgot_password_title=Şifremi unuttum
|
||||
forgot_password=Şifrenizi mi unuttunuz?
|
||||
need_account=Bir hesaba mı ihtiyacın var?
|
||||
sign_up_now=Hemen kaydolun.
|
||||
sign_up_successful=Hesap başarılı bir şekilde oluşturuldu. Hoşgeldiniz!
|
||||
confirmation_mail_sent_prompt_ex=Yeni bir doğrulama e-postası <b>%s</b> adresine gönderildi. Lütfen kayıt sürecini tamamlamak için %s içinde gelen kutunuzu denetleyin. Eğer kayıt e-posta adresiniz hatalı ise, tekrar oturum açıp değiştirebilirsiniz.
|
||||
must_change_password=Parolanızı güncelleyin
|
||||
@ -433,6 +438,7 @@ oauth_signin_submit=Hesabı Bağla
|
||||
oauth.signin.error=Yetkilendirme isteğini işlerken bir hata oluştu. Eğer hata devam ederse lütfen site yöneticisiyle bağlantıya geçin.
|
||||
oauth.signin.error.access_denied=Yetkilendirme isteği reddedildi.
|
||||
oauth.signin.error.temporarily_unavailable=Yetkilendirme sunucusu geçici olarak erişilemez olduğu için yetkilendirme başarısız oldu. Lütfen daha sonra tekrar deneyin.
|
||||
oauth_callback_unable_auto_reg=Otomatik kayıt etkin ancak OAuth2 Sağlayıcı %[1] eksik sahalar döndürdü: %[2]s, otomatik olarak hesap oluşturulamıyor, lütfen bir hesap oluşturun veya bağlantı verin, veya site yöneticisiyle iletişim kurun.
|
||||
openid_connect_submit=Bağlan
|
||||
openid_connect_title=Mevcut olan bir hesaba bağlan
|
||||
openid_connect_desc=Seçilen OpenID URI'si bilinmiyor. Burada yeni bir hesapla ilişkilendir.
|
||||
@ -453,6 +459,8 @@ sspi_auth_failed=SSPI kimlik doğrulaması başarısız oldu
|
||||
password_pwned=Seçtiğiniz parola, daha önce herkese açık veri ihlallerinde açığa çıkan bir <a target="_blank" rel="noopener noreferrer" href="https://haveibeenpwned.com/Passwords">çalınan parola listesindedir</a>. Lütfen farklı bir parola ile tekrar deneyin ve başka yerlerde de bu parolayı değiştirmeyi düşünün.
|
||||
password_pwned_err=HaveIBeenPwned'e yapılan istek tamamlanamadı
|
||||
last_admin=Son yöneticiyi silemezsiniz. En azından bir yönetici olmalıdır.
|
||||
signin_passkey=Bir parola anahtarı ile oturum aç
|
||||
back_to_sign_in=Oturum Açmaya geri dön
|
||||
|
||||
[mail]
|
||||
view_it_on=%s üzerinde görüntüle
|
||||
@ -469,6 +477,7 @@ activate_email=E-posta adresinizi doğrulayın
|
||||
activate_email.title=%s, lütfen e-posta adresinizi doğrulayın
|
||||
activate_email.text=E posta adresinizi doğrulamak için lütfen <b>%s</b> içinde linke tıklayın:
|
||||
|
||||
register_notify=%s'ya Hoş Geldiniz
|
||||
register_notify.title=%[1]s, %[2]s e hoşgeldiniz
|
||||
register_notify.text_1=bu %s için kayıt onay e postanızdır!
|
||||
register_notify.text_2=Artık %s kullanıcı adı ile oturum açabilirsiniz.
|
||||
@ -760,6 +769,7 @@ manage_openid=OpenID Adreslerini Yönet
|
||||
email_desc=Ana e-posta adresiniz bildirimler, parola kurtarma ve gizlenmemişse eğer web tabanlı Git işlemleri için kullanılacaktır.
|
||||
theme_desc=Bu, sitedeki varsayılan temanız olacak.
|
||||
theme_colorblindness_help=Renk Körlüğü için Tema Desteği
|
||||
theme_colorblindness_prompt=Gitea temel renk körlüğü desteği olan, yalnızca az sayıda rengin tanımlı olduğu, sadece birkaç temaya sahip. Çalışmalar sürüyor. Tema CSS dosyalarında daha çok renk tanımlanmasıyla daha fazla iyileştirme yapılabilir.
|
||||
primary=Birincil
|
||||
activated=Aktifleştirildi
|
||||
requires_activation=Etkinleştirme gerekiyor
|
||||
@ -904,6 +914,7 @@ create_oauth2_application_success=Yeni bir OAuth2 uygulamasını başarıyla olu
|
||||
update_oauth2_application_success=OAuth2 uygulamasını başarıyla güncellediniz.
|
||||
oauth2_application_name=Uygulama Adı
|
||||
oauth2_confidential_client=Güvenli İstemci. Web uygulamaları gibi sırları güvende tutan uygulamalar için bunu seçin. Masaüstü ve mobil uygulamaları da içeren doğal uygulamalar için seçmeyin.
|
||||
oauth2_skip_secondary_authorization=Herkese açık istemcilerin yetkilendirilmesini bir kere erişim izni verdikten sonra atla. <strong>Bu bir güvenlik riski oluşturabilir.</strong>
|
||||
oauth2_redirect_uris=Yönlendirme URI'leri. Lütfen her bir URI'yi yeni bir satıra yazın.
|
||||
save_application=Kaydet
|
||||
oauth2_client_id=İstemci Kimliği
|
||||
@ -1232,6 +1243,7 @@ file_view_rendered=Oluşturulanları Görüntüle
|
||||
file_view_raw=Ham Görünüm
|
||||
file_permalink=Kalıcı Bağlantı
|
||||
file_too_large=Bu dosya görüntülemek için çok büyük.
|
||||
file_is_empty=Dosya boş.
|
||||
code_preview_line_from_to=%[3]s içinde %[1]d ve %[2]d arasındaki satırlar
|
||||
code_preview_line_in=%[2]s içinde %[1]d satırı
|
||||
invisible_runes_header=`Bu dosya görünmez Evrensel Kodlu karakter içeriyor`
|
||||
@ -1372,6 +1384,7 @@ commitstatus.success=Başarılı
|
||||
ext_issues=Harici Konulara Erişim
|
||||
ext_issues.desc=Dışsal konu takip sistemine bağla.
|
||||
|
||||
projects.desc=Proje panolarındaki konuları ve değişiklikleri yönetin.
|
||||
projects.description=Açıklama (isteğe bağlı)
|
||||
projects.description_placeholder=Açıklama
|
||||
projects.create=Proje Oluştur
|
||||
@ -1433,7 +1446,7 @@ issues.new.closed_milestone=Kapanmış Kilometre Taşları
|
||||
issues.new.assignees=Atananlar
|
||||
issues.new.clear_assignees=Atamaları Temizle
|
||||
issues.new.no_assignees=Atanan Kişi Yok
|
||||
issues.new.no_reviewers=Değerlendirici yok
|
||||
issues.new.no_reviewers=Gözden geçiren yok
|
||||
issues.new.blocked_user=Konu oluşturulamıyor, depo sahibi tarafından engellenmişsiniz.
|
||||
issues.edit.already_changed=Konuya yapılan değişiklikler kaydedilemiyor. İçerik başka kullanıcı tarafından değiştirilmiş gözüküyor. Diğerlerinin değişikliklerinin üzerine yazmamak için lütfen sayfayı yenileyin ve tekrar düzenlemeye çalışın
|
||||
issues.edit.blocked_user=İçerik düzenlenemiyor, gönderen veya depo sahibi tarafından engellenmişsiniz.
|
||||
@ -1547,7 +1560,9 @@ issues.no_content=Herhangi bir açıklama sağlanmadı.
|
||||
issues.close=Konuyu Kapat
|
||||
issues.comment_pull_merged_at=%[1]s işlemesi, %[2]s dalına birleştirildi %[3]s
|
||||
issues.comment_manually_pull_merged_at=%[1]s işlemesi, %[2]s dalına elle birleştirildi %[3]s
|
||||
issues.close_comment_issue=Yorum Yap ve Kapat
|
||||
issues.reopen_issue=Yeniden aç
|
||||
issues.reopen_comment_issue=Yorum Yap ve Yeniden Aç
|
||||
issues.create_comment=Yorum yap
|
||||
issues.comment.blocked_user=Yorum oluşturulamıyor veya düzenlenemiyor, gönderen veya depo sahibi tarafından engellenmişsiniz.
|
||||
issues.closed_at=`<a id="%[1]s" href="#%[1]s">%[2]s</a> konusunu kapattı`
|
||||
@ -1749,6 +1764,7 @@ compare.compare_head=karşılaştır
|
||||
pulls.desc=Değişiklik isteklerini ve kod incelemelerini etkinleştir.
|
||||
pulls.new=Yeni Değişiklik İsteği
|
||||
pulls.new.blocked_user=Değişiklik isteği oluşturulamıyor, depo sahibi tarafından engellenmişsiniz.
|
||||
pulls.new.must_collaborator=Değişiklik isteği oluşturmak için bir katkıcı olmalısınız.
|
||||
pulls.edit.already_changed=Değişiklik isteğine yapılan değişiklikler kaydedilemiyor. İçerik başka kullanıcı tarafından değiştirilmiş gözüküyor. Diğerlerinin değişikliklerinin üzerine yazmamak için lütfen sayfayı yenileyin ve tekrar düzenlemeye çalışın
|
||||
pulls.view=Değişiklik İsteği Görüntüle
|
||||
pulls.compare_changes=Yeni Değişiklik İsteği
|
||||
@ -1806,7 +1822,7 @@ pulls.required_status_check_failed=Bazı gerekli denetimler başarılı olmadı.
|
||||
pulls.required_status_check_missing=Gerekli bazı kontroller eksik.
|
||||
pulls.required_status_check_administrator=Yönetici olarak, bu değişiklik isteğini yine de birleştirebilirsiniz.
|
||||
pulls.blocked_by_approvals=Bu değişiklik isteğinin henüz yeterli onayı yok. %d onay var, %d onay gerekiyor.
|
||||
pulls.blocked_by_rejection=Bu değişiklik isteğinde resmi bir inceleyici tarafından istenen değişiklikler var.
|
||||
pulls.blocked_by_rejection=Bu değişiklik isteğinde resmi bir gözden geçiren tarafından istenen değişiklikler var.
|
||||
pulls.blocked_by_official_review_requests=Bu değişiklik isteğinde resmi inceleme istekleri var.
|
||||
pulls.blocked_by_outdated_branch=Bu değişiklik isteği eskidiği için engellendi.
|
||||
pulls.blocked_by_changed_protected_files_1=Bu değişiklik isteği, korumalı bir dosyayı değiştirdiği için engellendi:
|
||||
@ -1920,7 +1936,7 @@ milestones.edit_success=`"%s" dönüm noktası güncellendi.`
|
||||
milestones.deletion=Kilometre Taşını Sil
|
||||
milestones.deletion_desc=Bir kilometre taşını silmek, onu ilgili tüm sorunlardan kaldırır. Devam edilsin mi?
|
||||
milestones.deletion_success=Kilometre taşı silindi.
|
||||
milestones.filter_sort.name=İsim
|
||||
milestones.filter_sort.name=Ad
|
||||
milestones.filter_sort.earliest_due_data=En erken bitiş tarihi
|
||||
milestones.filter_sort.latest_due_date=En uzak bitiş tarihi
|
||||
milestones.filter_sort.least_complete=En az tamamlama
|
||||
@ -2266,6 +2282,7 @@ settings.event_wiki_desc=Viki sayfası oluşturuldu, adı değiştirildi, düzen
|
||||
settings.event_release=Sürüm
|
||||
settings.event_release_desc=Sürüm yayınlandığında, güncellendiğinde veya silindiğinde.
|
||||
settings.event_push=Çek
|
||||
settings.event_force_push=Zorla İtme
|
||||
settings.event_push_desc=Depo ittirildiğinde.
|
||||
settings.event_repository=Depo
|
||||
settings.event_repository_desc=Depo oluşturuldu veya silindi.
|
||||
@ -2359,10 +2376,28 @@ settings.protect_this_branch=Dal Korumayı Etkinleştir
|
||||
settings.protect_this_branch_desc=Silmeyi önler ve dala Git gönderimini ve birleştirmesini kısıtlar.
|
||||
settings.protect_disable_push=İtmeyi Devre Dışı Bırak
|
||||
settings.protect_disable_push_desc=Bu dala itme yapılmasına izin verilmeyecek.
|
||||
settings.protect_disable_force_push=Zorla İtmeyi Devre Dışı Bırak
|
||||
settings.protect_disable_force_push_desc=Bu dala zorla itme yapılmasına izin verilmeyecek.
|
||||
settings.protect_enable_push=İtmeyi Etkinleştir
|
||||
settings.protect_enable_push_desc=Yazma erişimi olan herkesin bu dala itmesine izin verilir (ancak zorla itmeyin).
|
||||
settings.protect_enable_force_push_all=Zorla İtmeyi Etkinleştir
|
||||
settings.protect_enable_force_push_all_desc=İtme erişimi olan herhangi bir kimse, bu dala zorla itme yapabilecektir.
|
||||
settings.protect_enable_force_push_allowlist=Kısıtlanmış Zorla İtme İzin Listesi
|
||||
settings.protect_enable_force_push_allowlist_desc=Sadece beyaz listedeki itme erişimi olan kişi veya takımlar, bu dala zorla itme yapabilecektir.
|
||||
settings.protect_enable_merge=Birleştirmeyi Etkinleştir
|
||||
settings.protect_enable_merge_desc=Yazma erişimi olan herhangi bir kimse, değişiklik isteklerini bu dala birleştirebilecektir.
|
||||
settings.protect_whitelist_committers=Beyaz Liste Kısıtlı Gönderme
|
||||
settings.protect_whitelist_committers_desc=Sadece izin listesine alınmış kullanıcıların veya takımların bu dala göndermesine izin verilir (ancak zorla itme yok).
|
||||
settings.protect_whitelist_deploy_keys=İzin listesi göndermek için yazma erişimi olan anahtarları dağıtır.
|
||||
settings.protect_whitelist_users=İtme için izin listesindeki kullanıcılar:
|
||||
settings.protect_whitelist_teams=İtme için izin listesindeki takımlar:
|
||||
settings.protect_force_push_allowlist_users=Zorla itme izin listesine eklenmiş kullanıcılar:
|
||||
settings.protect_force_push_allowlist_teams=Zorla itme izin listesine eklenmiş ekipler:
|
||||
settings.protect_force_push_allowlist_deploy_keys=Zorla itme için itme izni olan dağıtım anahtarları izin listesi.
|
||||
settings.protect_merge_whitelist_committers=Birleştirme İzin Listesini Etkinleştir
|
||||
settings.protect_merge_whitelist_committers_desc=Yalnızca izin listesindeki kullanıcıların veya takımların bu daldaki değişiklik isteklerini birleştirmesine izin verin.
|
||||
settings.protect_merge_whitelist_users=Birleştirme için izin listesindeki kullanıcılar:
|
||||
settings.protect_merge_whitelist_teams=Birleştirme için izin listesindeki takımlar:
|
||||
settings.protect_check_status_contexts=Durum Denetimini Etkinleştir
|
||||
settings.protect_status_check_patterns=Durum denetleme desenleri:
|
||||
settings.protect_status_check_patterns_desc=Bu kurala uyan dala diğer dallar birleştirilmeden önce başarılı olması gereken durum denetlemelerini belirten desenleri girin. Her bir satır bir desen tanımlıyor. Desenler boş olamaz.
|
||||
@ -2373,6 +2408,10 @@ settings.protect_invalid_status_check_pattern=Hatalı durum denetleme deseni: "%
|
||||
settings.protect_no_valid_status_check_patterns=Geçerli durum denetleme deseni yok.
|
||||
settings.protect_required_approvals=Gerekli onaylar:
|
||||
settings.protect_required_approvals_desc=Değişiklik isteğini yalnızca yeterince olumlu yorumla birleştirmeye izin ver.
|
||||
settings.protect_approvals_whitelist_enabled=Onayları izin listesine giren kullanıcılar veya takımlar için kısıtla
|
||||
settings.protect_approvals_whitelist_enabled_desc=Yalnızca izin listesindeki kullanıcıların veya takımların gözden geçirmeleri gerekli onaylar için dikkate alınır. Onaylı izin listesi olmadan, yazma erişimi olan herkesin gözden geçirmeleri gerekli onaylar için dikkate alınır.
|
||||
settings.protect_approvals_whitelist_users=İzin listesindeki gözden geçirenler:
|
||||
settings.protect_approvals_whitelist_teams=Gözden geçirme için izin listesindeki takımlar:
|
||||
settings.dismiss_stale_approvals=Eski onayları reddet
|
||||
settings.dismiss_stale_approvals_desc=Değişiklik isteğinin içeriğini değiştiren yeni işlemeler dala itildiğinde, eski onaylar reddedilir.
|
||||
settings.ignore_stale_approvals=Eskimiş onayları yoksay
|
||||
@ -2394,7 +2433,7 @@ settings.remove_protected_branch_failed=Dal koruma kuralı "%s" kaldırılamadı
|
||||
settings.protected_branch_deletion=Dal Korumasını Devre Dışı Bırak
|
||||
settings.protected_branch_deletion_desc=Dal korumasını devre dışı bırakmak, kullanıcıların dalı itmek için yazma izni olmasını sağlar. Devam edilsin mi?
|
||||
settings.block_rejected_reviews=Reddedilen incelemelerde birleştirmeyi engelle
|
||||
settings.block_rejected_reviews_desc=Yeterli onay olsa bile resmi inceleyiciler tarafından değişiklik istendiğinde birleşme mümkün olmayacaktır.
|
||||
settings.block_rejected_reviews_desc=Yeterli onay olsa bile resmi gözden geçirenler tarafından değişiklik istendiğinde birleşme mümkün olmayacaktır.
|
||||
settings.block_on_official_review_requests=Resmi inceleme isteklerinde birleştirmeyi engelle
|
||||
settings.block_on_official_review_requests_desc=Yeterli onay olsa bile, resmi inceleme istekleri olduğunda birleştirme mümkün olmayacaktır.
|
||||
settings.block_outdated_branch=Değişiklik isteği güncel değilse birleştirmeyi engelle
|
||||
@ -2830,6 +2869,7 @@ dashboard.reinit_missing_repos=Kayıtları bulunanlar için tüm eksik Git depol
|
||||
dashboard.sync_external_users=Harici kullanıcı verisini senkronize et
|
||||
dashboard.cleanup_hook_task_table=Hook_task tablosunu temizleme
|
||||
dashboard.cleanup_packages=Süresi dolmuş paketleri temizleme
|
||||
dashboard.cleanup_actions=Eylemlerin süresi geçmiş günlük ve yapılarını temizle
|
||||
dashboard.server_uptime=Sunucunun Ayakta Kalma Süresi
|
||||
dashboard.current_goroutine=Güncel Goroutine'ler
|
||||
dashboard.current_memory_usage=Güncel Bellek Kullanımı
|
||||
@ -2859,9 +2899,15 @@ dashboard.total_gc_time=Toplam GC Durması
|
||||
dashboard.total_gc_pause=Toplam GC Durması
|
||||
dashboard.last_gc_pause=Son GC Durması
|
||||
dashboard.gc_times=GC Zamanları
|
||||
dashboard.delete_old_actions=Veritabanından tüm eski faaliyetleri sil
|
||||
dashboard.delete_old_actions.started=Veritabanından başlatılan tüm eski faaliyetleri silin.
|
||||
dashboard.update_checker=Denetleyiciyi güncelle
|
||||
dashboard.delete_old_system_notices=Veritabanından tüm eski sistem bildirimlerini sil
|
||||
dashboard.gc_lfs=LFS üst nesnelerin atıklarını temizle
|
||||
dashboard.stop_zombie_tasks=Zombi görevlerin durdurma eylemleri
|
||||
dashboard.stop_endless_tasks=Daimi görevlerin durdurma eylemleri
|
||||
dashboard.cancel_abandoned_jobs=Terkedilmiş görevlerin iptal eylemleri
|
||||
dashboard.start_schedule_tasks=Zamanlanmış görevlerin başlatma eylemleri
|
||||
dashboard.sync_branch.started=Dal Eşzamanlaması başladı
|
||||
dashboard.sync_tag.started=Etiket eşitlemesi başladı
|
||||
dashboard.rebuild_issue_indexer=Konu indeksini yeniden oluştur
|
||||
@ -2936,6 +2982,10 @@ emails.not_updated=İstenen e-posta adresi güncellenemedi: %v
|
||||
emails.duplicate_active=Bu e-posta adresi farklı bir kullanıcı için zaten aktif.
|
||||
emails.change_email_header=E-posta Özelliklerini Güncelle
|
||||
emails.change_email_text=Bu e-posta adresini güncellemek istediğinizden emin misiniz?
|
||||
emails.delete=E-postayı Sil
|
||||
emails.delete_desc=Bu e-posta adresini silmek istediğinizden emin misiniz?
|
||||
emails.deletion_success=E-posta adresi silindi.
|
||||
emails.delete_primary_email_error=Ana e-posta adresini silemezsiniz.
|
||||
|
||||
orgs.org_manage_panel=Organizasyon Yönetimi
|
||||
orgs.name=İsim
|
||||
@ -3195,6 +3245,10 @@ config.cache_adapter=Önbellek Uyarlayıcısı
|
||||
config.cache_interval=Önbellek Aralığı
|
||||
config.cache_conn=Önbellek Bağlantısı
|
||||
config.cache_item_ttl=TTL Önbellek Öğesi
|
||||
config.cache_test=Önbelleği Sına
|
||||
config.cache_test_failed=Önbelleğin incelenmesi başarısız oldu: %v.
|
||||
config.cache_test_slow=Önbellek sınaması başarılı, ancak yanıt yavaş: %s.
|
||||
config.cache_test_succeeded=Önbellek sınaması başarılı, %s sürede bir yanıt alındı.
|
||||
|
||||
config.session_config=Oturum Yapılandırması
|
||||
config.session_provider=Oturum Sağlayıcı
|
||||
@ -3295,6 +3349,7 @@ self_check.database_collation_case_insensitive=Veritabanı %s harmanlamasını k
|
||||
self_check.database_inconsistent_collation_columns=Veritabanı %s harmanlamasını kullanıyor, ancak bu sütunlar uyumsuz harmanlamalar kullanıyor. Bu beklenmedik sorunlar oluşturabilir.
|
||||
self_check.database_fix_mysql=MySQL/MariaDB kullanıcıları "gitea doctor convert" komutunu harmanlama sorunlarını çözmek için kullanabilir veya "ALTER ... COLLATE ..." SQL'lerini şahsen çalıştırarak sorunu çözebilirler.
|
||||
self_check.database_fix_mssql=MSSQL kullanıcıları sorunu şu an sadece "ALTER ... COLLATE ..." SQL'lerini şahsen çalıştırarak çözebilirler.
|
||||
self_check.location_origin_mismatch=Mevcut URL (%[1]s) Gitea tarafından görülen URL (%[2]s) ile eşleşmiyor. Eğer bir vekil sunucu kullanıyorsanız, lütfen "Host" ve "X-Forwarded-Proto" başlıklarının doğru ayarlandığından emin olunuz.
|
||||
|
||||
[action]
|
||||
create_repo=depo <a href="%s">%s</a> oluşturuldu
|
||||
@ -3322,6 +3377,7 @@ mirror_sync_create=<a href="%[2]s">%[3]s</a> yeni referansını, <a href="%[1]s"
|
||||
mirror_sync_delete=<a href="%[1]s">%[3]s</a> adresindeki <code>%[2]s</code> referansını eşitledi ve sildi
|
||||
approve_pull_request=`<a href="%[1]s">%[3]s#%[2]s</a> değişiklik isteğini onayladı`
|
||||
reject_pull_request=`<a href="%[1]s">%[3]s#%[2]s</a> için değişiklikler önerdi`
|
||||
publish_release=`<a href="%[1]s">%[3]s</a> deposu için <a href="%[2]s"> "%[4]s" </a> sürümü yayınlandı`
|
||||
review_dismissed=`<a href="%[1]s">%[3]s#%[2]s</a> için <b>%[4]s</b> yorumunu reddetti`
|
||||
review_dismissed_reason=Sebep:
|
||||
create_branch=<a href="%[1]s">%[4]s</a> deposunda <a href="%[2]s">%[3]s</a> dalını oluşturdu
|
||||
@ -3388,6 +3444,7 @@ error.unit_not_allowed=Bu depo bölümüne erişme izniniz yok.
|
||||
title=Paketler
|
||||
desc=Depo paketlerini yönet.
|
||||
empty=Henüz hiçbir paket yok.
|
||||
no_metadata=Üstveri yok.
|
||||
empty.documentation=Paket kütüğü hakkında daha fazla bilgi için, <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/usage/packages/overview/">belgeye</a> bakabilirsiniz.
|
||||
empty.repo=Bir paket yüklediniz ama burada gösterilmiyor mu? <a href="%[1]s">Paket ayarları</a>na gidin ve bu depoya bağlantı verin.
|
||||
registry.documentation=%s kütüğü hakkında daha fazla bilgi için, <a target="_blank" rel="noopener noreferrer" href="%s">belgeye</a> bakabilirsiniz.
|
||||
@ -3469,6 +3526,7 @@ npm.install=Paketi npm ile kurmak için, şu komutu çalıştırın:
|
||||
npm.install2=veya paketi package.json dosyasına ekleyin:
|
||||
npm.dependencies=Bağımlılıklar
|
||||
npm.dependencies.development=Geliştirme Bağımlılıkları
|
||||
npm.dependencies.bundle=Paketlenmiş Bağımlılıklar
|
||||
npm.dependencies.peer=Eş Bağımlılıkları
|
||||
npm.dependencies.optional=İsteğe Bağlı Bağımlılıklar
|
||||
npm.details.tag=Etiket
|
||||
@ -3609,6 +3667,7 @@ runs.pushed_by=iten
|
||||
runs.invalid_workflow_helper=İş akışı yapılandırma dosyası geçersiz. Lütfen yapılandırma dosyanızı denetleyin: %s
|
||||
runs.no_matching_online_runner_helper=Şu etiket ile eşleşen çevrimiçi çalıştırıcı bulunamadı: %s
|
||||
runs.no_job_without_needs=İş akışı en azından bağımlılığı olmayan bir görev içermelidir.
|
||||
runs.no_job=İş akışı en azından bir görev içermelidir
|
||||
runs.actor=Aktör
|
||||
runs.status=Durum
|
||||
runs.actors_no_select=Tüm aktörler
|
||||
@ -3619,6 +3678,7 @@ runs.no_workflows.quick_start=Gitea İşlemlerini nasıl başlatacağınızı bi
|
||||
runs.no_workflows.documentation=Gitea İşlemleri hakkında daha fazla bilgi için, <a target="_blank" rel="noopener noreferrer" href="%s">belgelere</a> bakabilirsiniz.
|
||||
runs.no_runs=İş akışı henüz hiç çalıştırılmadı.
|
||||
runs.empty_commit_message=(boş işleme iletisi)
|
||||
runs.expire_log_message=Günlükler, çok eski oldukları için temizlendiler.
|
||||
|
||||
workflow.disable=İş Akışını Devre Dışı Bırak
|
||||
workflow.disable_success='%s' iş akışı başarıyla devre dışı bırakıldı.
|
||||
@ -3645,6 +3705,7 @@ variables.update.failed=Değişken düzenlenemedi.
|
||||
variables.update.success=Değişken düzenlendi.
|
||||
|
||||
[projects]
|
||||
deleted.display_name=Silinmiş Proje
|
||||
type-1.display_name=Kişisel Proje
|
||||
type-2.display_name=Depo Projesi
|
||||
type-3.display_name=Organizasyon Projesi
|
||||
|
1504
package-lock.json
generated
1504
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
38
package.json
38
package.json
@ -22,10 +22,10 @@
|
||||
"chartjs-plugin-zoom": "2.0.1",
|
||||
"clippie": "4.1.3",
|
||||
"css-loader": "7.1.2",
|
||||
"dayjs": "1.11.11",
|
||||
"dayjs": "1.11.12",
|
||||
"dropzone": "6.0.0-beta.2",
|
||||
"easymde": "2.18.0",
|
||||
"esbuild-loader": "4.2.0",
|
||||
"esbuild-loader": "4.2.2",
|
||||
"escape-goat": "4.0.0",
|
||||
"fast-glob": "3.3.2",
|
||||
"htmx.org": "2.0.0",
|
||||
@ -39,35 +39,35 @@
|
||||
"monaco-editor": "0.50.0",
|
||||
"monaco-editor-webpack-plugin": "7.1.0",
|
||||
"pdfobject": "2.3.0",
|
||||
"postcss": "8.4.39",
|
||||
"postcss": "8.4.40",
|
||||
"postcss-loader": "8.1.1",
|
||||
"postcss-nesting": "12.1.5",
|
||||
"sortablejs": "1.15.2",
|
||||
"swagger-ui-dist": "5.17.14",
|
||||
"tailwindcss": "3.4.4",
|
||||
"tailwindcss": "3.4.7",
|
||||
"temporal-polyfill": "0.2.5",
|
||||
"throttle-debounce": "5.0.2",
|
||||
"tinycolor2": "1.6.0",
|
||||
"tippy.js": "6.3.7",
|
||||
"toastify-js": "1.12.0",
|
||||
"tributejs": "5.1.3",
|
||||
"typescript": "5.5.3",
|
||||
"typescript": "5.5.4",
|
||||
"uint8-to-base64": "0.2.0",
|
||||
"vanilla-colorful": "0.7.2",
|
||||
"vue": "3.4.31",
|
||||
"vue": "3.4.35",
|
||||
"vue-bar-graph": "2.1.0",
|
||||
"vue-chartjs": "5.3.1",
|
||||
"vue-loader": "17.4.2",
|
||||
"webpack": "5.92.1",
|
||||
"webpack": "5.93.0",
|
||||
"webpack-cli": "5.1.4",
|
||||
"wrap-ansi": "9.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint-community/eslint-plugin-eslint-comments": "4.3.0",
|
||||
"@playwright/test": "1.45.1",
|
||||
"@playwright/test": "1.45.3",
|
||||
"@stoplight/spectral-cli": "6.11.1",
|
||||
"@stylistic/eslint-plugin-js": "2.3.0",
|
||||
"@stylistic/stylelint-plugin": "2.1.2",
|
||||
"@stylistic/eslint-plugin-js": "2.6.1",
|
||||
"@stylistic/stylelint-plugin": "3.0.0",
|
||||
"@types/dropzone": "5.7.8",
|
||||
"@types/jquery": "3.5.30",
|
||||
"@types/katex": "0.16.7",
|
||||
@ -78,9 +78,9 @@
|
||||
"@types/throttle-debounce": "5.0.2",
|
||||
"@types/tinycolor2": "1.4.6",
|
||||
"@types/toastify-js": "1.12.3",
|
||||
"@typescript-eslint/eslint-plugin": "7.16.0",
|
||||
"@typescript-eslint/parser": "7.16.0",
|
||||
"@vitejs/plugin-vue": "5.0.5",
|
||||
"@typescript-eslint/eslint-plugin": "8.0.0",
|
||||
"@typescript-eslint/parser": "8.0.0",
|
||||
"@vitejs/plugin-vue": "5.1.2",
|
||||
"eslint": "8.57.0",
|
||||
"eslint-import-resolver-typescript": "3.6.1",
|
||||
"eslint-plugin-array-func": "4.0.0",
|
||||
@ -91,8 +91,8 @@
|
||||
"eslint-plugin-no-use-extend-native": "0.5.0",
|
||||
"eslint-plugin-playwright": "1.6.2",
|
||||
"eslint-plugin-regexp": "2.6.0",
|
||||
"eslint-plugin-sonarjs": "1.0.3",
|
||||
"eslint-plugin-unicorn": "54.0.0",
|
||||
"eslint-plugin-sonarjs": "1.0.4",
|
||||
"eslint-plugin-unicorn": "55.0.0",
|
||||
"eslint-plugin-vitest": "0.4.1",
|
||||
"eslint-plugin-vitest-globals": "1.5.0",
|
||||
"eslint-plugin-vue": "9.27.0",
|
||||
@ -102,14 +102,14 @@
|
||||
"markdownlint-cli": "0.41.0",
|
||||
"nolyfill": "1.0.39",
|
||||
"postcss-html": "1.7.0",
|
||||
"stylelint": "16.6.1",
|
||||
"stylelint": "16.8.1",
|
||||
"stylelint-declaration-block-no-ignored-properties": "2.8.0",
|
||||
"stylelint-declaration-strict-value": "1.10.4",
|
||||
"stylelint-declaration-strict-value": "1.10.6",
|
||||
"stylelint-value-no-unknown-custom-properties": "6.0.1",
|
||||
"svgo": "3.3.2",
|
||||
"updates": "16.2.1",
|
||||
"updates": "16.3.7",
|
||||
"vite-string-plugin": "1.3.4",
|
||||
"vitest": "2.0.2"
|
||||
"vitest": "2.0.5"
|
||||
},
|
||||
"browserslist": [
|
||||
"defaults"
|
||||
|
@ -133,6 +133,21 @@ func UploadPackageFile(ctx *context.Context) {
|
||||
}
|
||||
defer buf.Close()
|
||||
|
||||
// if rpm sign enabled
|
||||
if setting.Packages.DefaultRPMSignEnabled || ctx.FormBool("sign") {
|
||||
pri, _, err := rpm_service.GetOrCreateKeyPair(ctx, ctx.Package.Owner.ID)
|
||||
if err != nil {
|
||||
apiError(ctx, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
buf, err = rpm_service.SignPackage(buf, pri)
|
||||
if err != nil {
|
||||
// Not in rpm format, parsing failed.
|
||||
apiError(ctx, http.StatusBadRequest, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
pck, err := rpm_module.ParsePackage(buf)
|
||||
if err != nil {
|
||||
if errors.Is(err, util.ErrInvalidArgument) {
|
||||
@ -142,7 +157,6 @@ func UploadPackageFile(ctx *context.Context) {
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := buf.Seek(0, io.SeekStart); err != nil {
|
||||
apiError(ctx, http.StatusInternalServerError, err)
|
||||
return
|
||||
|
@ -235,7 +235,7 @@ func preReceiveBranch(ctx *preReceiveContext, oldCommitID, newCommitID string, r
|
||||
|
||||
globs := protectBranch.GetProtectedFilePatterns()
|
||||
if len(globs) > 0 {
|
||||
_, err := pull_service.CheckFileProtection(gitRepo, oldCommitID, newCommitID, globs, 1, ctx.env)
|
||||
_, err := pull_service.CheckFileProtection(gitRepo, branchName, oldCommitID, newCommitID, globs, 1, ctx.env)
|
||||
if err != nil {
|
||||
if !models.IsErrFilePathProtected(err) {
|
||||
log.Error("Unable to check file protection for commits from %s to %s in %-v: %v", oldCommitID, newCommitID, repo, err)
|
||||
@ -293,7 +293,7 @@ func preReceiveBranch(ctx *preReceiveContext, oldCommitID, newCommitID string, r
|
||||
// Allow commits that only touch unprotected files
|
||||
globs := protectBranch.GetUnprotectedFilePatterns()
|
||||
if len(globs) > 0 {
|
||||
unprotectedFilesOnly, err := pull_service.CheckUnprotectedFiles(gitRepo, oldCommitID, newCommitID, globs, ctx.env)
|
||||
unprotectedFilesOnly, err := pull_service.CheckUnprotectedFiles(gitRepo, branchName, oldCommitID, newCommitID, globs, ctx.env)
|
||||
if err != nil {
|
||||
log.Error("Unable to check file protection for commits from %s to %s in %-v: %v", oldCommitID, newCommitID, repo, err)
|
||||
ctx.JSON(http.StatusInternalServerError, private.Response{
|
||||
|
@ -410,6 +410,7 @@ func renderRevisionPage(ctx *context.Context) (*git.Repository, *git.TreeEntry)
|
||||
|
||||
pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5)
|
||||
pager.SetDefaultParams(ctx)
|
||||
pager.AddParamString("action", "_revision")
|
||||
ctx.Data["Page"] = pager
|
||||
|
||||
return wikiRepo, entry
|
||||
|
@ -106,10 +106,25 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
|
||||
log.Error("LoadRequestedReviewers[%d]: %v", pr.ID, err)
|
||||
return nil
|
||||
}
|
||||
if err = pr.LoadRequestedReviewersTeams(ctx); err != nil {
|
||||
log.Error("LoadRequestedReviewersTeams[%d]: %v", pr.ID, err)
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, reviewer := range pr.RequestedReviewers {
|
||||
apiPullRequest.RequestedReviewers = append(apiPullRequest.RequestedReviewers, ToUser(ctx, reviewer, nil))
|
||||
}
|
||||
|
||||
for _, reviewerTeam := range pr.RequestedReviewersTeams {
|
||||
convertedTeam, err := ToTeam(ctx, reviewerTeam, true)
|
||||
if err != nil {
|
||||
log.Error("LoadRequestedReviewersTeams[%d]: %v", pr.ID, err)
|
||||
return nil
|
||||
}
|
||||
|
||||
apiPullRequest.RequestedReviewersTeams = append(apiPullRequest.RequestedReviewersTeams, convertedTeam)
|
||||
}
|
||||
|
||||
if pr.Issue.ClosedUnix != 0 {
|
||||
apiPullRequest.Closed = pr.Issue.ClosedUnix.AsTimePtr()
|
||||
}
|
||||
|
@ -21,14 +21,16 @@ import (
|
||||
rpm_model "code.gitea.io/gitea/models/packages/rpm"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/json"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
packages_module "code.gitea.io/gitea/modules/packages"
|
||||
rpm_module "code.gitea.io/gitea/modules/packages/rpm"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
packages_service "code.gitea.io/gitea/services/packages"
|
||||
|
||||
"github.com/keybase/go-crypto/openpgp"
|
||||
"github.com/keybase/go-crypto/openpgp/armor"
|
||||
"github.com/keybase/go-crypto/openpgp/packet"
|
||||
"github.com/ProtonMail/go-crypto/openpgp"
|
||||
"github.com/ProtonMail/go-crypto/openpgp/armor"
|
||||
"github.com/ProtonMail/go-crypto/openpgp/packet"
|
||||
"github.com/sassoftware/go-rpmutils"
|
||||
)
|
||||
|
||||
// GetOrCreateRepositoryVersion gets or creates the internal repository package
|
||||
@ -641,3 +643,33 @@ func addDataAsFileToRepo(ctx context.Context, pv *packages_model.PackageVersion,
|
||||
OpenSize: wc.Written(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func SignPackage(rpm *packages_module.HashedBuffer, privateKey string) (*packages_module.HashedBuffer, error) {
|
||||
keyring, err := openpgp.ReadArmoredKeyRing(bytes.NewReader([]byte(privateKey)))
|
||||
if err != nil {
|
||||
// failed to parse key
|
||||
return nil, err
|
||||
}
|
||||
entity := keyring[0]
|
||||
h, err := rpmutils.SignRpmStream(rpm, entity.PrivateKey, nil)
|
||||
if err != nil {
|
||||
// error signing rpm
|
||||
return nil, err
|
||||
}
|
||||
signBlob, err := h.DumpSignatureHeader(false)
|
||||
if err != nil {
|
||||
// error writing sig header
|
||||
return nil, err
|
||||
}
|
||||
if len(signBlob)%8 != 0 {
|
||||
log.Info("incorrect padding: got %d bytes, expected a multiple of 8", len(signBlob))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// move fp to sign end
|
||||
if _, err := rpm.Seek(int64(h.OriginalSignatureHeaderSize()), io.SeekStart); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// create signed rpm buf
|
||||
return packages_module.CreateHashedBufferFromReader(io.MultiReader(bytes.NewReader(signBlob), rpm))
|
||||
}
|
||||
|
@ -503,11 +503,11 @@ func checkConflicts(ctx context.Context, pr *issues_model.PullRequest, gitRepo *
|
||||
}
|
||||
|
||||
// CheckFileProtection check file Protection
|
||||
func CheckFileProtection(repo *git.Repository, oldCommitID, newCommitID string, patterns []glob.Glob, limit int, env []string) ([]string, error) {
|
||||
func CheckFileProtection(repo *git.Repository, branchName, oldCommitID, newCommitID string, patterns []glob.Glob, limit int, env []string) ([]string, error) {
|
||||
if len(patterns) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
affectedFiles, err := git.GetAffectedFiles(repo, oldCommitID, newCommitID, env)
|
||||
affectedFiles, err := git.GetAffectedFiles(repo, branchName, oldCommitID, newCommitID, env)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -533,11 +533,11 @@ func CheckFileProtection(repo *git.Repository, oldCommitID, newCommitID string,
|
||||
}
|
||||
|
||||
// CheckUnprotectedFiles check if the commit only touches unprotected files
|
||||
func CheckUnprotectedFiles(repo *git.Repository, oldCommitID, newCommitID string, patterns []glob.Glob, env []string) (bool, error) {
|
||||
func CheckUnprotectedFiles(repo *git.Repository, branchName, oldCommitID, newCommitID string, patterns []glob.Glob, env []string) (bool, error) {
|
||||
if len(patterns) == 0 {
|
||||
return false, nil
|
||||
}
|
||||
affectedFiles, err := git.GetAffectedFiles(repo, oldCommitID, newCommitID, env)
|
||||
affectedFiles, err := git.GetAffectedFiles(repo, branchName, oldCommitID, newCommitID, env)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@ -574,7 +574,7 @@ func checkPullFilesProtection(ctx context.Context, pr *issues_model.PullRequest,
|
||||
return nil
|
||||
}
|
||||
|
||||
pr.ChangedProtectedFiles, err = CheckFileProtection(gitRepo, pr.MergeBase, "tracking", pb.GetProtectedFilePatterns(), 10, os.Environ())
|
||||
pr.ChangedProtectedFiles, err = CheckFileProtection(gitRepo, pr.HeadBranch, pr.MergeBase, "tracking", pb.GetProtectedFilePatterns(), 10, os.Environ())
|
||||
if err != nil && !models.IsErrFilePathProtected(err) {
|
||||
return err
|
||||
}
|
||||
|
7
templates/swagger/v1_json.tmpl
generated
7
templates/swagger/v1_json.tmpl
generated
@ -23517,6 +23517,13 @@
|
||||
},
|
||||
"x-go-name": "RequestedReviewers"
|
||||
},
|
||||
"requested_reviewers_teams": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/Team"
|
||||
},
|
||||
"x-go-name": "RequestedReviewersTeams"
|
||||
},
|
||||
"review_comments": {
|
||||
"description": "number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)",
|
||||
"type": "integer",
|
||||
|
@ -24,7 +24,10 @@ import (
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
"code.gitea.io/gitea/tests"
|
||||
|
||||
"github.com/ProtonMail/go-crypto/openpgp"
|
||||
"github.com/sassoftware/go-rpmutils"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPackageRpm(t *testing.T) {
|
||||
@ -431,6 +434,30 @@ gpgkey=%sapi/packages/%s/rpm/repository.key`,
|
||||
AddBasicAuth(user.Name)
|
||||
MakeRequest(t, req, http.StatusNotFound)
|
||||
})
|
||||
|
||||
t.Run("UploadSign", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
url := groupURL + "/upload?sign=true"
|
||||
req := NewRequestWithBody(t, "PUT", url, bytes.NewReader(content)).
|
||||
AddBasicAuth(user.Name)
|
||||
MakeRequest(t, req, http.StatusCreated)
|
||||
|
||||
gpgReq := NewRequest(t, "GET", rootURL+"/repository.key")
|
||||
gpgResp := MakeRequest(t, gpgReq, http.StatusOK)
|
||||
pub, err := openpgp.ReadArmoredKeyRing(gpgResp.Body)
|
||||
require.NoError(t, err)
|
||||
|
||||
req = NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture))
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
|
||||
_, sigs, err := rpmutils.Verify(resp.Body, pub)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, sigs)
|
||||
|
||||
req = NewRequest(t, "DELETE", fmt.Sprintf("%s/package/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture)).
|
||||
AddBasicAuth(user.Name)
|
||||
MakeRequest(t, req, http.StatusNoContent)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user