Skip to content

Commit e1ba0f4

Browse files
authored
Merge branch 'main' into simplify-split-view-generation
2 parents 509e35e + d24eb6e commit e1ba0f4

File tree

22 files changed

+154
-36
lines changed

22 files changed

+154
-36
lines changed

.drone.yml

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -218,17 +218,6 @@ steps:
218218
GITHUB_READ_TOKEN:
219219
from_secret: github_read_token
220220

221-
- name: unit-test-race
222-
image: golang:1.17
223-
commands:
224-
- make test-backend
225-
environment:
226-
GOPROXY: off
227-
TAGS: sqlite sqlite_unlock_notify
228-
RACE_ENABLED: true
229-
GITHUB_READ_TOKEN:
230-
from_secret: github_read_token
231-
232221
- name: unit-test-gogit
233222
pull: always
234223
image: golang:1.17

docs/content/doc/developers/hacking-on-gitea.en-us.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,19 @@ Visual Studio Code. Look at
309309
[`contrib/ide/README.md`](https://github.com/go-gitea/gitea/blob/main/contrib/ide/README.md)
310310
for more information.
311311

312+
## GoLand
313+
314+
Clicking the `Run Application` arrow on the function `func main()` in `/main.go`
315+
can quickly start a debuggable gitea instance.
316+
317+
The `Output Directory` in `Run/Debug Configuration` MUST be set to the
318+
gitea project directory (which contains `main.go` and `go.mod`),
319+
otherwise, the started instance's working directory is a GoLand's temporary directory
320+
and prevents gitea from loading dynamic resources (eg: templates) in a development environment.
321+
322+
To run unit tests with SQLite in GoLand, set `-tags sqlite,sqlite_unlock_notify`
323+
in `Go tool arguments` of `Run/Debug Configuration`.
324+
312325
## Submitting PRs
313326

314327
Once you're happy with your changes, push them up and open a pull request. It

integrations/pull_update_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,11 @@ func createOutdatedPR(t *testing.T, actor, forkOrg *models.User) *models.PullReq
6060
assert.NoError(t, err)
6161
assert.NotEmpty(t, baseRepo)
6262

63-
headRepo, err := repo_module.ForkRepository(actor, forkOrg, baseRepo, "repo-pr-update", "desc")
63+
headRepo, err := repo_module.ForkRepository(actor, forkOrg, models.ForkRepoOptions{
64+
BaseRepo: baseRepo,
65+
Name: "repo-pr-update",
66+
Description: "desc",
67+
})
6468
assert.NoError(t, err)
6569
assert.NotEmpty(t, headRepo)
6670

models/models_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55
package models
66

77
import (
8+
"encoding/json"
89
"io/ioutil"
910
"os"
1011
"path/filepath"
12+
"strings"
1113
"testing"
1214

1315
"code.gitea.io/gitea/modules/setting"
16+
"xorm.io/xorm/schemas"
1417

1518
"github.com/stretchr/testify/assert"
1619
)
@@ -32,3 +35,46 @@ func TestDumpDatabase(t *testing.T) {
3235
assert.NoError(t, DumpDatabase(filepath.Join(dir, dbType+".sql"), dbType))
3336
}
3437
}
38+
39+
type TestSource struct {
40+
Provider string
41+
ClientID string
42+
ClientSecret string
43+
OpenIDConnectAutoDiscoveryURL string
44+
IconURL string
45+
}
46+
47+
// FromDB fills up a LDAPConfig from serialized format.
48+
func (source *TestSource) FromDB(bs []byte) error {
49+
return json.Unmarshal(bs, &source)
50+
}
51+
52+
// ToDB exports a LDAPConfig to a serialized format.
53+
func (source *TestSource) ToDB() ([]byte, error) {
54+
return json.Marshal(source)
55+
}
56+
57+
func TestDumpLoginSource(t *testing.T) {
58+
assert.NoError(t, PrepareTestDatabase())
59+
60+
loginSourceSchema, err := x.TableInfo(new(LoginSource))
61+
assert.NoError(t, err)
62+
63+
RegisterLoginTypeConfig(LoginOAuth2, new(TestSource))
64+
65+
CreateLoginSource(&LoginSource{
66+
Type: LoginOAuth2,
67+
Name: "TestSource",
68+
IsActive: false,
69+
Cfg: &TestSource{
70+
Provider: "ConvertibleSourceName",
71+
ClientID: "42",
72+
},
73+
})
74+
75+
sb := new(strings.Builder)
76+
77+
x.DumpTables([]*schemas.Table{loginSourceSchema}, sb)
78+
79+
assert.Contains(t, sb.String(), `"Provider":"ConvertibleSourceName"`)
80+
}

models/repo.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,6 +1004,13 @@ type CreateRepoOptions struct {
10041004
MirrorInterval string
10051005
}
10061006

1007+
// ForkRepoOptions contains the fork repository options
1008+
type ForkRepoOptions struct {
1009+
BaseRepo *Repository
1010+
Name string
1011+
Description string
1012+
}
1013+
10071014
// GetRepoInitFile returns repository init files
10081015
func GetRepoInitFile(tp, name string) ([]byte, error) {
10091016
cleanedName := strings.TrimLeft(path.Clean("/"+name), "/")

modules/markup/external/external.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"runtime"
1515
"strings"
1616

17+
"code.gitea.io/gitea/modules/graceful"
1718
"code.gitea.io/gitea/modules/log"
1819
"code.gitea.io/gitea/modules/markup"
1920
"code.gitea.io/gitea/modules/process"
@@ -99,7 +100,12 @@ func (p *Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.
99100
}
100101

101102
if ctx == nil || ctx.Ctx == nil {
102-
return fmt.Errorf("RenderContext did not provide context")
103+
if ctx == nil {
104+
log.Warn("RenderContext not provided defaulting to empty ctx")
105+
ctx = &markup.RenderContext{}
106+
}
107+
log.Warn("RenderContext did not provide context, defaulting to Shutdown context")
108+
ctx.Ctx = graceful.GetManager().ShutdownContext()
103109
}
104110

105111
processCtx, cancel := context.WithCancel(ctx.Ctx)

modules/repository/fork.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ import (
1616
)
1717

1818
// ForkRepository forks a repository
19-
func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name, desc string) (_ *models.Repository, err error) {
20-
forkedRepo, err := oldRepo.GetUserFork(owner.ID)
19+
func ForkRepository(doer, owner *models.User, opts models.ForkRepoOptions) (_ *models.Repository, err error) {
20+
forkedRepo, err := opts.BaseRepo.GetUserFork(owner.ID)
2121
if err != nil {
2222
return nil, err
2323
}
2424
if forkedRepo != nil {
2525
return nil, models.ErrForkAlreadyExist{
2626
Uname: owner.Name,
27-
RepoName: oldRepo.FullName(),
27+
RepoName: opts.BaseRepo.FullName(),
2828
ForkName: forkedRepo.FullName(),
2929
}
3030
}
@@ -33,17 +33,17 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
3333
OwnerID: owner.ID,
3434
Owner: owner,
3535
OwnerName: owner.Name,
36-
Name: name,
37-
LowerName: strings.ToLower(name),
38-
Description: desc,
39-
DefaultBranch: oldRepo.DefaultBranch,
40-
IsPrivate: oldRepo.IsPrivate || oldRepo.Owner.Visibility == structs.VisibleTypePrivate,
41-
IsEmpty: oldRepo.IsEmpty,
36+
Name: opts.Name,
37+
LowerName: strings.ToLower(opts.Name),
38+
Description: opts.Description,
39+
DefaultBranch: opts.BaseRepo.DefaultBranch,
40+
IsPrivate: opts.BaseRepo.IsPrivate || opts.BaseRepo.Owner.Visibility == structs.VisibleTypePrivate,
41+
IsEmpty: opts.BaseRepo.IsEmpty,
4242
IsFork: true,
43-
ForkID: oldRepo.ID,
43+
ForkID: opts.BaseRepo.ID,
4444
}
4545

46-
oldRepoPath := oldRepo.RepoPath()
46+
oldRepoPath := opts.BaseRepo.RepoPath()
4747

4848
err = models.WithTx(func(ctx models.DBContext) error {
4949
if err = models.CreateRepository(ctx, doer, owner, repo, false); err != nil {
@@ -59,23 +59,23 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
5959
}
6060
}
6161

62-
if err = models.IncrementRepoForkNum(ctx, oldRepo.ID); err != nil {
62+
if err = models.IncrementRepoForkNum(ctx, opts.BaseRepo.ID); err != nil {
6363
rollbackRemoveFn()
6464
return err
6565
}
6666

6767
// copy lfs files failure should not be ignored
68-
if err := models.CopyLFS(ctx, repo, oldRepo); err != nil {
68+
if err := models.CopyLFS(ctx, repo, opts.BaseRepo); err != nil {
6969
rollbackRemoveFn()
7070
return err
7171
}
7272

7373
repoPath := models.RepoPath(owner.Name, repo.Name)
7474
if stdout, err := git.NewCommand(
7575
"clone", "--bare", oldRepoPath, repoPath).
76-
SetDescription(fmt.Sprintf("ForkRepository(git clone): %s to %s", oldRepo.FullName(), repo.FullName())).
76+
SetDescription(fmt.Sprintf("ForkRepository(git clone): %s to %s", opts.BaseRepo.FullName(), repo.FullName())).
7777
RunInDirTimeout(10*time.Minute, ""); err != nil {
78-
log.Error("Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v", repo, oldRepo, stdout, err)
78+
log.Error("Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v", repo, opts.BaseRepo, stdout, err)
7979
rollbackRemoveFn()
8080
return fmt.Errorf("git clone: %v", err)
8181
}
@@ -103,7 +103,7 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
103103
if err = repo.UpdateSize(ctx); err != nil {
104104
log.Error("Failed to update size for repository: %v", err)
105105
}
106-
if err := models.CopyLanguageStat(oldRepo, repo); err != nil {
106+
if err := models.CopyLanguageStat(opts.BaseRepo, repo); err != nil {
107107
log.Error("Copy language stat from oldRepo failed")
108108
}
109109

modules/repository/fork_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ func TestForkRepository(t *testing.T) {
1818
user := models.AssertExistsAndLoadBean(t, &models.User{ID: 13}).(*models.User)
1919
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 10}).(*models.Repository)
2020

21-
fork, err := ForkRepository(user, user, repo, "test", "test")
21+
fork, err := ForkRepository(user, user, models.ForkRepoOptions{
22+
BaseRepo: repo,
23+
Name: "test",
24+
Description: "test",
25+
})
2226
assert.Nil(t, fork)
2327
assert.Error(t, err)
2428
assert.True(t, models.IsErrForkAlreadyExist(err))

options/locale/locale_ja-JP.ini

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,7 @@ use_template=このテンプレートを使用
771771
clone_in_vsc=VSCodeでクローン
772772
download_zip=ZIPファイルをダウンロード
773773
download_tar=TAR.GZファイルをダウンロード
774+
download_bundle=バンドルをダウンロード
774775
generate_repo=リポジトリの生成
775776
generate_from=他からの生成
776777
repo_desc=説明
@@ -899,6 +900,12 @@ migrate.migrate=%s からの移行
899900
migrate.migrating=<b>%s</b> から移行しています ...
900901
migrate.migrating_failed=<b>%s</b> からの移行が失敗しました。
901902
migrate.migrating_failed.error=エラー: %s
903+
migrate.github.description=github.com やその他の Github インスタンスからデータを移行します。
904+
migrate.git.description=Git サービスからリポジトリのみを移行します。
905+
migrate.gitlab.description=gitlab.com やその他の GitLab インスタンスからデータを移行します。
906+
migrate.gitea.description=gitea.com やその他の Gitea インスタンスからデータを移行します。
907+
migrate.gogs.description=notabug.org やその他の Gogs インスタンスからデータを移行します。
908+
migrate.onedev.description=code.onedev.io やその他の OneDev インスタンスからデータを移行します。
902909
migrate.migrating_git=Gitデータ移行中
903910
migrate.migrating_topics=トピック移行中
904911
migrate.migrating_milestones=マイルストーン移行中
@@ -1325,6 +1332,8 @@ issues.dependency.remove=削除
13251332
issues.dependency.remove_info=この依存関係を削除
13261333
issues.dependency.added_dependency=`が新しい依存関係を追加 %s`
13271334
issues.dependency.removed_dependency=`が依存関係を削除 %s`
1335+
issues.dependency.pr_closing_blockedby=このプルリクエストのクローズは、これらのイシューによりブロックされています
1336+
issues.dependency.issue_closing_blockedby=このイシューのクローズは、これらのイシューによりブロックされています
13281337
issues.dependency.issue_close_blocks=このイシューは、これらのイシューのクローズをブロックしています
13291338
issues.dependency.pr_close_blocks=このプルリクエストは、これらのイシューのクローズをブロックしています
13301339
issues.dependency.issue_close_blocked=このイシューをクローズするには、ブロックしているイシューをすべてクローズする必要があります。
@@ -2167,12 +2176,15 @@ members.member_role=メンバーの役割:
21672176
members.owner=オーナー
21682177
members.member=メンバー
21692178
members.remove=削除
2179+
members.remove.detail=%[2]s から %[1]s を削除しますか?
21702180
members.leave=脱退
2181+
members.leave.detail=%s から脱退しますか?
21712182
members.invite_desc=%s に新しいメンバーを追加
21722183
members.invite_now=今すぐ招待
21732184

21742185
teams.join=参加
21752186
teams.leave=脱退
2187+
teams.leave.detail=%s から脱退しますか?
21762188
teams.can_create_org_repo=リポジトリを作成
21772189
teams.can_create_org_repo_helper=メンバーは組織のリポジトリを新たに作成できます。作成者には新しいリポジトリの管理者権限が与えられます。
21782190
teams.read_access=読み取りアクセス権

options/locale/locale_pt-BR.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1932,12 +1932,15 @@ members.member_role=Categoria de membro:
19321932
members.owner=Proprietário
19331933
members.member=Membro
19341934
members.remove=Remover
1935+
members.remove.detail=Remover %[1]s de %[2]s?
19351936
members.leave=Sair
1937+
members.leave.detail=Sair de %s?
19361938
members.invite_desc=Adicionar novo membro em %s:
19371939
members.invite_now=Convidar agora
19381940

19391941
teams.join=Juntar-se
19401942
teams.leave=Deixar
1943+
teams.leave.detail=Sair de %s?
19411944
teams.can_create_org_repo=Criar repositórios
19421945
teams.can_create_org_repo_helper=Membros podem criar novos repositórios na organização. O criador terá acesso administrativo ao novo repositório.
19431946
teams.read_access=Acesso de leitura

options/locale/locale_pt-PT.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2176,12 +2176,15 @@ members.member_role=Função do membro:
21762176
members.owner=Proprietário(a)
21772177
members.member=Membro
21782178
members.remove=Remover
2179+
members.remove.detail=Remover %[1]s de %[2]s?
21792180
members.leave=Sair
2181+
members.leave.detail=Sair de %s?
21802182
members.invite_desc=Adicionar um novo membro a %s:
21812183
members.invite_now=Convidar agora
21822184

21832185
teams.join=Aderir
21842186
teams.leave=Sair
2187+
teams.leave.detail=Sair de %s?
21852188
teams.can_create_org_repo=Criar repositórios
21862189
teams.can_create_org_repo_helper=Os membros podem criar novos repositórios na organização. O criador terá acesso de administrador ao novo repositório.
21872190
teams.read_access=Acesso de leitura

options/locale/locale_zh-TW.ini

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,7 @@ use_template=使用此範本
771771
clone_in_vsc=在 VS Code 中 Clone
772772
download_zip=下載 ZIP
773773
download_tar=下載 TAR.GZ
774+
download_bundle=下載 BUNDLE
774775
generate_repo=產生儲存庫
775776
generate_from=產生自
776777
repo_desc=儲存庫描述
@@ -899,6 +900,12 @@ migrate.migrate=從 %s 遷移
899900
migrate.migrating=正在從 <b>%s</b> 遷移...
900901
migrate.migrating_failed=從 <b>%s</b> 遷移失敗
901902
migrate.migrating_failed.error=錯誤:%s
903+
migrate.github.description=從 github.com 或其他 Github 實例遷移資料。
904+
migrate.git.description=從任何 Git 服務遷移儲存庫。
905+
migrate.gitlab.description=從 gitlab.com 或其他 GitLab 實例遷移資料。
906+
migrate.gitea.description=從 gitea.com 或其他 Gitea 實例遷移資料。
907+
migrate.gogs.description=從 notabug.org 或其他 Gogs 實例遷移資料。
908+
migrate.onedev.description=從 code.onedev.io 或其他 OneDev 實例遷移資料。
902909
migrate.migrating_git=正在遷移 Git 資料
903910
migrate.migrating_topics=正在遷移主題
904911
migrate.migrating_milestones=正在遷移里程碑
@@ -2169,12 +2176,15 @@ members.member_role=成員角色:
21692176
members.owner=擁有者
21702177
members.member=普通成員
21712178
members.remove=移除
2179+
members.remove.detail=確定要從 %[2]s 中刪除 %[1]s 嗎?
21722180
members.leave=離開
2181+
members.leave.detail=確定要離開 %s 嗎?
21732182
members.invite_desc=邀請新的用戶加入 %s:
21742183
members.invite_now=立即邀請
21752184

21762185
teams.join=加入
21772186
teams.leave=離開
2187+
teams.leave.detail=確定要離開 %s 嗎?
21782188
teams.can_create_org_repo=建立儲存庫
21792189
teams.can_create_org_repo_helper=成員可以在組織中新增儲存庫。建立者將自動取得新儲存庫的管理員權限。
21802190
teams.read_access=讀取權限

routers/api/v1/repo/fork.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,11 @@ func CreateFork(ctx *context.APIContext) {
123123
forker = org
124124
}
125125

126-
fork, err := repo_service.ForkRepository(ctx.User, forker, repo, repo.Name, repo.Description)
126+
fork, err := repo_service.ForkRepository(ctx.User, forker, models.ForkRepoOptions{
127+
BaseRepo: repo,
128+
Name: repo.Name,
129+
Description: repo.Description,
130+
})
127131
if err != nil {
128132
ctx.Error(http.StatusInternalServerError, "ForkRepository", err)
129133
return

0 commit comments

Comments
 (0)