Skip to content

Commit cbd5eec

Browse files
committed
Merge remote-tracking branch 'origin/main' into really-escape
2 parents e96565b + 7e1ae38 commit cbd5eec

File tree

330 files changed

+3764
-2767
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

330 files changed

+3764
-2767
lines changed

cmd/docs.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ func runDocs(ctx *cli.Context) error {
4343
// Clean up markdown. The following bug was fixed in v2, but is present in v1.
4444
// It affects markdown output (even though the issue is referring to man pages)
4545
// https://github.com/urfave/cli/issues/1040
46-
docs = docs[strings.Index(docs, "#"):]
46+
firstHashtagIndex := strings.Index(docs, "#")
47+
48+
if firstHashtagIndex > 0 {
49+
docs = docs[firstHashtagIndex:]
50+
}
4751
}
4852

4953
out := os.Stdout

cmd/dump_repo.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import (
1111

1212
"code.gitea.io/gitea/modules/convert"
1313
"code.gitea.io/gitea/modules/log"
14-
"code.gitea.io/gitea/modules/migrations"
15-
"code.gitea.io/gitea/modules/migrations/base"
14+
base "code.gitea.io/gitea/modules/migration"
1615
"code.gitea.io/gitea/modules/setting"
1716
"code.gitea.io/gitea/modules/structs"
17+
"code.gitea.io/gitea/services/migrations"
1818

1919
"github.com/urfave/cli"
2020
)

contrib/fixtures/fixture_generation.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"path/filepath"
1111

1212
"code.gitea.io/gitea/models"
13-
"code.gitea.io/gitea/models/db"
13+
"code.gitea.io/gitea/models/unittest"
1414
)
1515

1616
// To generate derivative fixtures, execute the following from Gitea's repository base dir:
@@ -31,13 +31,13 @@ var (
3131
func main() {
3232
pathToGiteaRoot := "."
3333
fixturesDir = filepath.Join(pathToGiteaRoot, "models", "fixtures")
34-
if err := db.CreateTestEngine(db.FixturesOptions{
34+
if err := unittest.CreateTestEngine(unittest.FixturesOptions{
3535
Dir: fixturesDir,
3636
}); err != nil {
3737
fmt.Printf("CreateTestEngine: %+v", err)
3838
os.Exit(1)
3939
}
40-
if err := db.PrepareTestDatabase(); err != nil {
40+
if err := unittest.PrepareTestDatabase(); err != nil {
4141
fmt.Printf("PrepareTestDatabase: %+v\n", err)
4242
os.Exit(1)
4343
}

contrib/pr/checkout.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
"code.gitea.io/gitea/models"
2828
"code.gitea.io/gitea/models/db"
29+
"code.gitea.io/gitea/models/unittest"
2930
gitea_git "code.gitea.io/gitea/modules/git"
3031
"code.gitea.io/gitea/modules/markup"
3132
"code.gitea.io/gitea/modules/markup/external"
@@ -99,16 +100,16 @@ func runPR() {
99100
})
100101
db.HasEngine = true
101102
//x.ShowSQL(true)
102-
err = db.InitFixtures(
103-
db.FixturesOptions{
103+
err = unittest.InitFixtures(
104+
unittest.FixturesOptions{
104105
Dir: path.Join(curDir, "models/fixtures/"),
105106
},
106107
)
107108
if err != nil {
108109
fmt.Printf("Error initializing test database: %v\n", err)
109110
os.Exit(1)
110111
}
111-
db.LoadFixtures()
112+
unittest.LoadFixtures()
112113
util.RemoveAll(setting.RepoRootPath)
113114
util.RemoveAll(models.LocalCopyPath())
114115
util.CopyDir(path.Join(curDir, "integrations/gitea-repositories-meta"), setting.RepoRootPath)

docs/content/doc/developers/guidelines-frontend.md

+59
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,65 @@ We recommend [Google HTML/CSS Style Guide](https://google.github.io/styleguide/h
3939
6. The backend can pass complex data to the frontend by using `ctx.PageData["myModuleData"] = map[]{}`
4040
7. Simple pages and SEO-related pages use Go HTML Template render to generate static Fomantic-UI HTML output. Complex pages can use Vue2 (or Vue3 in future).
4141

42+
43+
### `async` Functions
44+
45+
Only mark a function as `async` if and only if there are `await` calls
46+
or `Promise` returns inside the function.
47+
48+
It's not recommended to use `async` event listeners, which may lead to problems.
49+
The reason is that the code after await is executed outside the event dispatch.
50+
Reference: https://github.com/github/eslint-plugin-github/blob/main/docs/rules/async-preventdefault.md
51+
52+
If we want to call an `async` function in a non-async context,
53+
it's recommended to use `const _promise = asyncFoo()` to tell readers
54+
that this is done by purpose, we want to call the async function and ignore the Promise.
55+
Some lint rules and IDEs also have warnings if the returned Promise is not handled.
56+
57+
#### DOM Event Listener
58+
59+
```js
60+
el.addEventListener('click', (e) => {
61+
(async () => {
62+
await asyncFoo(); // recommended
63+
// then we shound't do e.preventDefault() after await, no effect
64+
})();
65+
66+
const _promise = asyncFoo(); // recommended
67+
68+
e.preventDefault(); // correct
69+
});
70+
71+
el.addEventListener('async', async (e) => { // not recommended but acceptable
72+
e.preventDefault(); // acceptable
73+
await asyncFoo(); // skip out event dispath
74+
e.preventDefault(); // WRONG
75+
});
76+
```
77+
78+
#### jQuery Event Listener
79+
80+
```js
81+
$('#el').on('click', (e) => {
82+
(async () => {
83+
await asyncFoo(); // recommended
84+
// then we shound't do e.preventDefault() after await, no effect
85+
})();
86+
87+
const _promise = asyncFoo(); // recommended
88+
89+
e.preventDefault(); // correct
90+
return false; // correct
91+
});
92+
93+
$('#el').on('click', async (e) => { // not recommended but acceptable
94+
e.preventDefault(); // acceptable
95+
return false; // WRONG, jQuery expects the returned value is a boolean, not a Promise
96+
await asyncFoo(); // skip out event dispath
97+
return false; // WRONG
98+
});
99+
```
100+
42101
### Vue2/Vue3 and JSX
43102

44103
Gitea is using Vue2 now, we plan to upgrade to Vue3. We decided not to introduce JSX to keep the HTML and the JavaScript code separated.

docs/content/doc/installation/with-docker-rootless.en-us.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,9 @@ named volumes; Docker will deal with that automatically.
168168
version: "2"
169169

170170
+volumes:
171-
+ gitea:
171+
+ gitea-data:
172+
+ driver: local
173+
+ gitea-config:
172174
+ driver: local
173175
+
174176
services:

integrations/admin_user_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"testing"
1111

1212
"code.gitea.io/gitea/models"
13-
"code.gitea.io/gitea/models/db"
13+
"code.gitea.io/gitea/models/unittest"
1414

1515
"github.com/stretchr/testify/assert"
1616
)
@@ -61,7 +61,7 @@ func makeRequest(t *testing.T, formData models.User, headerCode int) {
6161
})
6262

6363
session.MakeRequest(t, req, headerCode)
64-
user := db.AssertExistsAndLoadBean(t, &models.User{ID: formData.ID}).(*models.User)
64+
user := unittest.AssertExistsAndLoadBean(t, &models.User{ID: formData.ID}).(*models.User)
6565
assert.Equal(t, formData.Name, user.Name)
6666
assert.Equal(t, formData.LoginName, user.LoginName)
6767
assert.Equal(t, formData.Email, user.Email)
@@ -79,5 +79,5 @@ func TestAdminDeleteUser(t *testing.T) {
7979
session.MakeRequest(t, req, http.StatusOK)
8080

8181
assertUserDeleted(t, 8)
82-
models.CheckConsistencyFor(t, &models.User{})
82+
unittest.CheckConsistencyFor(t, &models.User{})
8383
}

integrations/api_admin_org_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"testing"
1212

1313
"code.gitea.io/gitea/models"
14-
"code.gitea.io/gitea/models/db"
14+
"code.gitea.io/gitea/models/unittest"
1515
api "code.gitea.io/gitea/modules/structs"
1616

1717
"github.com/stretchr/testify/assert"
@@ -43,7 +43,7 @@ func TestAPIAdminOrgCreate(t *testing.T) {
4343
assert.Equal(t, org.Location, apiOrg.Location)
4444
assert.Equal(t, org.Visibility, apiOrg.Visibility)
4545

46-
db.AssertExistsAndLoadBean(t, &models.User{
46+
unittest.AssertExistsAndLoadBean(t, &models.User{
4747
Name: org.UserName,
4848
LowerName: strings.ToLower(org.UserName),
4949
FullName: org.FullName,

integrations/api_admin_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"testing"
1111

1212
"code.gitea.io/gitea/models"
13-
"code.gitea.io/gitea/models/db"
13+
"code.gitea.io/gitea/models/unittest"
1414
"code.gitea.io/gitea/modules/json"
1515
api "code.gitea.io/gitea/modules/structs"
1616

@@ -21,7 +21,7 @@ func TestAPIAdminCreateAndDeleteSSHKey(t *testing.T) {
2121
defer prepareTestEnv(t)()
2222
// user1 is an admin user
2323
session := loginUser(t, "user1")
24-
keyOwner := db.AssertExistsAndLoadBean(t, &models.User{Name: "user2"}).(*models.User)
24+
keyOwner := unittest.AssertExistsAndLoadBean(t, &models.User{Name: "user2"}).(*models.User)
2525

2626
token := getTokenForLoggedInUser(t, session)
2727
urlStr := fmt.Sprintf("/api/v1/admin/users/%s/keys?token=%s", keyOwner.Name, token)
@@ -33,7 +33,7 @@ func TestAPIAdminCreateAndDeleteSSHKey(t *testing.T) {
3333

3434
var newPublicKey api.PublicKey
3535
DecodeJSON(t, resp, &newPublicKey)
36-
db.AssertExistsAndLoadBean(t, &models.PublicKey{
36+
unittest.AssertExistsAndLoadBean(t, &models.PublicKey{
3737
ID: newPublicKey.ID,
3838
Name: newPublicKey.Title,
3939
Content: newPublicKey.Key,
@@ -44,7 +44,7 @@ func TestAPIAdminCreateAndDeleteSSHKey(t *testing.T) {
4444
req = NewRequestf(t, "DELETE", "/api/v1/admin/users/%s/keys/%d?token=%s",
4545
keyOwner.Name, newPublicKey.ID, token)
4646
session.MakeRequest(t, req, http.StatusNoContent)
47-
db.AssertNotExistsBean(t, &models.PublicKey{ID: newPublicKey.ID})
47+
unittest.AssertNotExistsBean(t, &models.PublicKey{ID: newPublicKey.ID})
4848
}
4949

5050
func TestAPIAdminDeleteMissingSSHKey(t *testing.T) {
@@ -53,7 +53,7 @@ func TestAPIAdminDeleteMissingSSHKey(t *testing.T) {
5353
session := loginUser(t, "user1")
5454

5555
token := getTokenForLoggedInUser(t, session)
56-
req := NewRequestf(t, "DELETE", "/api/v1/admin/users/user1/keys/%d?token=%s", db.NonexistentID, token)
56+
req := NewRequestf(t, "DELETE", "/api/v1/admin/users/user1/keys/%d?token=%s", unittest.NonexistentID, token)
5757
session.MakeRequest(t, req, http.StatusNotFound)
5858
}
5959

@@ -128,7 +128,7 @@ func TestAPIListUsers(t *testing.T) {
128128
}
129129
}
130130
assert.True(t, found)
131-
numberOfUsers := db.GetCount(t, &models.User{}, "type = 0")
131+
numberOfUsers := unittest.GetCount(t, &models.User{}, "type = 0")
132132
assert.Equal(t, numberOfUsers, len(users))
133133
}
134134

@@ -194,7 +194,7 @@ func TestAPIEditUser(t *testing.T) {
194194
json.Unmarshal(resp.Body.Bytes(), &errMap)
195195
assert.EqualValues(t, "email is not allowed to be empty string", errMap["message"].(string))
196196

197-
user2 := db.AssertExistsAndLoadBean(t, &models.User{LoginName: "user2"}).(*models.User)
197+
user2 := unittest.AssertExistsAndLoadBean(t, &models.User{LoginName: "user2"}).(*models.User)
198198
assert.False(t, user2.IsRestricted)
199199
bTrue := true
200200
req = NewRequestWithJSON(t, "PATCH", urlStr, api.EditUserOption{
@@ -205,6 +205,6 @@ func TestAPIEditUser(t *testing.T) {
205205
Restricted: &bTrue,
206206
})
207207
session.MakeRequest(t, req, http.StatusOK)
208-
user2 = db.AssertExistsAndLoadBean(t, &models.User{LoginName: "user2"}).(*models.User)
208+
user2 = unittest.AssertExistsAndLoadBean(t, &models.User{LoginName: "user2"}).(*models.User)
209209
assert.True(t, user2.IsRestricted)
210210
}

0 commit comments

Comments
 (0)