Skip to content

Commit ba99d59

Browse files
authored
Merge branch 'main' into patch-data-race
2 parents cc3ef83 + 23422f9 commit ba99d59

35 files changed

+159
-76
lines changed

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,7 @@ fomantic:
704704
cp -f $(FOMANTIC_WORK_DIR)/theme.config.less $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui/src/theme.config
705705
cp -rf $(FOMANTIC_WORK_DIR)/_site $(FOMANTIC_WORK_DIR)/node_modules/fomantic-ui/src/
706706
cd $(FOMANTIC_WORK_DIR) && npx gulp -f node_modules/fomantic-ui/gulpfile.js build
707+
$(SED_INPLACE) -e 's/\r//g' $(FOMANTIC_WORK_DIR)/build/semantic.css $(FOMANTIC_WORK_DIR)/build/semantic.js
707708
rm -f $(FOMANTIC_WORK_DIR)/build/*.min.*
708709

709710
.PHONY: webpack

modules/highlight/highlight.go

+2
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ func File(numLines int, fileName, language string, code []byte) []string {
203203
content = "\n"
204204
} else if content == `</span><span class="w">` {
205205
content += "\n</span>"
206+
} else if content == `</span></span><span class="line"><span class="cl">` {
207+
content += "\n"
206208
}
207209
content = strings.TrimSuffix(content, `<span class="w">`)
208210
content = strings.TrimPrefix(content, `</span>`)

modules/highlight/highlight_test.go

+63-61
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
package highlight
66

77
import (
8-
"reflect"
8+
"strings"
99
"testing"
1010

1111
"code.gitea.io/gitea/modules/setting"
12+
"code.gitea.io/gitea/modules/util"
1213

14+
"github.com/stretchr/testify/assert"
1315
"gopkg.in/ini.v1"
1416
)
1517

@@ -20,83 +22,83 @@ func TestFile(t *testing.T) {
2022
numLines int
2123
fileName string
2224
code string
23-
want []string
25+
want string
2426
}{
2527
{
2628
name: ".drone.yml",
2729
numLines: 12,
2830
fileName: ".drone.yml",
29-
code: `kind: pipeline
30-
name: default
31+
code: util.Dedent(`
32+
kind: pipeline
33+
name: default
3134
32-
steps:
33-
- name: test
34-
image: golang:1.13
35-
environment:
36-
GOPROXY: https://goproxy.cn
37-
commands:
38-
- go get -u
39-
- go build -v
40-
- go test -v -race -coverprofile=coverage.txt -covermode=atomic
41-
`,
42-
want: []string{
43-
`<span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">pipeline</span>`,
44-
`</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default</span>`,
45-
`</span></span><span class="line"><span class="cl">`,
46-
`</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">steps</span><span class="p">:</span>`,
47-
`</span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test</span>`,
48-
`</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">golang:1.13</span>`,
49-
`</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span>`,
50-
`</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span><span class="nt">GOPROXY</span><span class="p">:</span><span class="w"> </span><span class="l">https://goproxy.cn</span>`,
51-
`</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">commands</span><span class="p">:</span>`,
52-
`</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span>- <span class="l">go get -u</span>`,
53-
`</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go build -v</span>`,
54-
`</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go test -v -race -coverprofile=coverage.txt -covermode=atomic</span><span class="w">
55-
</span></span></span>`,
56-
`<span class="w">
57-
</span>`,
58-
},
35+
steps:
36+
- name: test
37+
image: golang:1.13
38+
environment:
39+
GOPROXY: https://goproxy.cn
40+
commands:
41+
- go get -u
42+
- go build -v
43+
- go test -v -race -coverprofile=coverage.txt -covermode=atomic
44+
`),
45+
want: util.Dedent(`
46+
<span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">pipeline</span>
47+
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default</span>
48+
</span></span><span class="line"><span class="cl">
49+
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">steps</span><span class="p">:</span>
50+
</span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test</span>
51+
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">golang:1.13</span>
52+
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span>
53+
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span><span class="nt">GOPROXY</span><span class="p">:</span><span class="w"> </span><span class="l">https://goproxy.cn</span>
54+
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">commands</span><span class="p">:</span>
55+
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span>- <span class="l">go get -u</span>
56+
</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go build -v</span>
57+
</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go test -v -race -coverprofile=coverage.txt -covermode=atomic</span></span></span>
58+
`),
5959
},
6060
{
6161
name: ".drone.yml - trailing space",
6262
numLines: 13,
6363
fileName: ".drone.yml",
64-
code: `kind: pipeline
65-
name: default ` + `
64+
code: strings.Replace(util.Dedent(`
65+
kind: pipeline
66+
name: default
6667
67-
steps:
68-
- name: test
69-
image: golang:1.13
70-
environment:
71-
GOPROXY: https://goproxy.cn
72-
commands:
73-
- go get -u
74-
- go build -v
75-
- go test -v -race -coverprofile=coverage.txt -covermode=atomic
76-
`,
77-
want: []string{
78-
`<span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">pipeline</span>`,
79-
`</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default </span>`,
80-
`</span></span><span class="line"><span class="cl">`,
81-
`</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">steps</span><span class="p">:</span>`,
82-
`</span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test</span>`,
83-
`</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">golang:1.13</span>`,
84-
`</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span>`,
85-
`</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span><span class="nt">GOPROXY</span><span class="p">:</span><span class="w"> </span><span class="l">https://goproxy.cn</span>`,
86-
`</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">commands</span><span class="p">:</span>`,
87-
`</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span>- <span class="l">go get -u</span>`,
88-
`</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go build -v</span>`,
89-
`</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go test -v -race -coverprofile=coverage.txt -covermode=atomic</span>`,
90-
`</span></span><span class="line"><span class="cl"><span class="w"> </span></span></span>`,
91-
},
68+
steps:
69+
- name: test
70+
image: golang:1.13
71+
environment:
72+
GOPROXY: https://goproxy.cn
73+
commands:
74+
- go get -u
75+
- go build -v
76+
- go test -v -race -coverprofile=coverage.txt -covermode=atomic
77+
`)+"\n", "name: default", "name: default ", 1),
78+
want: util.Dedent(`
79+
<span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">pipeline</span>
80+
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default </span>
81+
</span></span><span class="line"><span class="cl">
82+
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">steps</span><span class="p">:</span>
83+
</span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test</span>
84+
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">golang:1.13</span>
85+
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span>
86+
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span><span class="nt">GOPROXY</span><span class="p">:</span><span class="w"> </span><span class="l">https://goproxy.cn</span>
87+
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">commands</span><span class="p">:</span>
88+
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span>- <span class="l">go get -u</span>
89+
</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go build -v</span>
90+
</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go test -v -race -coverprofile=coverage.txt -covermode=atomic</span>
91+
</span></span>
92+
<span class="w">
93+
</span>
94+
`),
9295
},
9396
}
9497

9598
for _, tt := range tests {
9699
t.Run(tt.name, func(t *testing.T) {
97-
if got := File(tt.numLines, tt.fileName, "", []byte(tt.code)); !reflect.DeepEqual(got, tt.want) {
98-
t.Errorf("File() = %v, want %v", got, tt.want)
99-
}
100+
got := strings.Join(File(tt.numLines, tt.fileName, "", []byte(tt.code)), "\n")
101+
assert.Equal(t, tt.want, got)
100102
})
101103
}
102104
}

modules/util/util.go

+33
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"crypto/rand"
1010
"errors"
1111
"math/big"
12+
"regexp"
1213
"strconv"
1314
"strings"
1415

@@ -191,3 +192,35 @@ var titleCaser = cases.Title(language.English)
191192
func ToTitleCase(s string) string {
192193
return titleCaser.String(s)
193194
}
195+
196+
var (
197+
whitespaceOnly = regexp.MustCompile("(?m)^[ \t]+$")
198+
leadingWhitespace = regexp.MustCompile("(?m)(^[ \t]*)(?:[^ \t\n])")
199+
)
200+
201+
// Dedent removes common indentation of a multi-line string along with whitespace around it
202+
// Based on https://github.com/lithammer/dedent
203+
func Dedent(s string) string {
204+
var margin string
205+
206+
s = whitespaceOnly.ReplaceAllString(s, "")
207+
indents := leadingWhitespace.FindAllStringSubmatch(s, -1)
208+
209+
for i, indent := range indents {
210+
if i == 0 {
211+
margin = indent[1]
212+
} else if strings.HasPrefix(indent[1], margin) {
213+
continue
214+
} else if strings.HasPrefix(margin, indent[1]) {
215+
margin = indent[1]
216+
} else {
217+
margin = ""
218+
break
219+
}
220+
}
221+
222+
if margin != "" {
223+
s = regexp.MustCompile("(?m)^"+margin).ReplaceAllString(s, "")
224+
}
225+
return strings.TrimSpace(s)
226+
}

modules/util/util_test.go

+7
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,10 @@ func TestToTitleCase(t *testing.T) {
225225
assert.Equal(t, ToTitleCase(`foo bar baz`), `Foo Bar Baz`)
226226
assert.Equal(t, ToTitleCase(`FOO BAR BAZ`), `Foo Bar Baz`)
227227
}
228+
229+
func TestDedent(t *testing.T) {
230+
assert.Equal(t, Dedent(`
231+
foo
232+
bar
233+
`), "foo\n\tbar")
234+
}

options/locale/locale_bg-BG.ini

+1
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,7 @@ branch.included=Включено
955955
topic.done=Готово
956956

957957

958+
958959
[org]
959960
org_name_holder=Име на организацията
960961
org_full_name_holder=Пълно име на организацията

options/locale/locale_cs-CZ.ini

+1
Original file line numberDiff line numberDiff line change
@@ -2183,6 +2183,7 @@ topic.done=Hotovo
21832183
topic.count_prompt=Nelze vybrat více než 25 témat
21842184
topic.format_prompt=Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
21852185

2186+
21862187
error.csv.too_large=Tento soubor nelze vykreslit, protože je příliš velký.
21872188
error.csv.unexpected=Tento soubor nelze vykreslit, protože obsahuje neočekávaný znak na řádku %d ve sloupci %d.
21882189
error.csv.invalid_field_count=Soubor nelze vykreslit, protože má nesprávný počet polí na řádku %d.

options/locale/locale_de-DE.ini

+1
Original file line numberDiff line numberDiff line change
@@ -2218,6 +2218,7 @@ topic.done=Fertig
22182218
topic.count_prompt=Du kannst nicht mehr als 25 Themen auswählen
22192219
topic.format_prompt=Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
22202220

2221+
22212222
error.csv.too_large=Diese Datei kann nicht gerendert werden, da sie zu groß ist.
22222223
error.csv.unexpected=Diese Datei kann nicht gerendert werden, da sie ein unerwartetes Zeichen in Zeile %d und Spalte %d enthält.
22232224
error.csv.invalid_field_count=Diese Datei kann nicht gerendert werden, da sie eine falsche Anzahl an Feldern in Zeile %d hat.

options/locale/locale_el-GR.ini

+9-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ home=Αρχική
22
dashboard=Κεντρικός Πίνακας
33
explore=Εξερεύνηση
44
help=Βοήθεια
5+
logo=Λογότυπο
56
sign_in=Είσοδος
67
sign_in_with=Είσοδος με
78
sign_out=Έξοδος
@@ -716,6 +717,9 @@ generate_token_success=Το νέο διακριτικό σας έχει δημι
716717
generate_token_name_duplicate=Το <strong>%s</strong> έχει ήδη χρησιμοποιηθεί ως όνομα εφαρμογής. Παρακαλούμε χρησιμοποιήστε ένα νέο.
717718
delete_token=Διαγραφή
718719
access_token_deletion=Διαγραφή Διακριτικού Πρόσβασης
720+
access_token_deletion_cancel_action=Άκυρο
721+
access_token_deletion_confirm_action=Διαγραφή
722+
access_token_deletion_desc=Η διαγραφή ενός διακριτικού θα ανακαλέσει οριστικά την πρόσβαση στο λογαριασμό σας για εφαρμογές που το χρησιμοποιούν. Συνέχεια;
719723
delete_token_success=Το διακριτικό έχει διαγραφεί. Οι εφαρμογές που το χρησιμοποιούν δεν έχουν πλέον πρόσβαση στο λογαριασμό σας.
720724

721725
manage_oauth2_applications=Διαχείριση Εφαρμογών Oauth2
@@ -858,6 +862,7 @@ default_branch=Προεπιλεγμένος Κλάδος
858862
default_branch_helper=Ο προεπιλεγμένος κλάδος είναι ο βασικός κλάδος για pull requests και υποβολές κώδικα.
859863
mirror_prune=Καθαρισμός
860864
mirror_prune_desc=Αφαίρεση παρωχημένων αναφορών απομακρυσμένης-παρακολούθησης
865+
mirror_interval=Διάστημα ανανέωσης ειδώλου (έγκυρες μονάδες ώρας είναι 'h', 'm', 's'). 0 για απενεργοποίηση του αυτόματου συγχρονισμού. (Ελάχιστο διάστημα: %s)
861866
mirror_interval_invalid=Το χρονικό διάστημα του ειδώλου δεν είναι έγκυρο.
862867
mirror_address=Κλωνοποίηση Από Το URL
863868
mirror_address_desc=Τοποθετήστε όλα τα απαιτούμενα διαπιστευτήρια στην ενότητα Εξουσιοδότηση.
@@ -1688,7 +1693,7 @@ activity.period.filter_label=Περίοδος:
16881693
activity.period.daily=1 ημέρα
16891694
activity.period.halfweekly=3 ημέρες
16901695
activity.period.weekly=1 εβδομάδα
1691-
activity.period.monthly=1 μήνας
1696+
activity.period.monthly=1 μήνα
16921697
activity.period.quarterly=3 μήνες
16931698
activity.period.semiyearly=6 μήνες
16941699
activity.period.yearly=1 έτος
@@ -2281,6 +2286,9 @@ topic.done=Ολοκληρώθηκε
22812286
topic.count_prompt=Δεν μπορείτε να επιλέξετε περισσότερα από 25 θέματα
22822287
topic.format_prompt=Τα θέματα πρέπει να ξεκινούν με γράμμα ή αριθμό, μπορούν να περιλαμβάνουν παύλες ('-') και μπορεί να είναι έως 35 χαρακτήρες.
22832288
2289+
find_file.go_to_file=Μετάβαση στο αρχείο
2290+
find_file.no_matching=Δεν ταιριάζει κανένα αρχείο
2291+
22842292
error.csv.too_large=Δεν είναι δυνατή η απόδοση αυτού του αρχείου επειδή είναι πολύ μεγάλο.
22852293
error.csv.unexpected=Δεν είναι δυνατή η απόδοση αυτού του αρχείου, επειδή περιέχει έναν μη αναμενόμενο χαρακτήρα στη γραμμή %d και στη στήλη %d.
22862294
error.csv.invalid_field_count=Δεν είναι δυνατή η απόδοση αυτού του αρχείου, επειδή έχει λάθος αριθμό πεδίων στη γραμμή %d.

options/locale/locale_es-ES.ini

+1
Original file line numberDiff line numberDiff line change
@@ -2198,6 +2198,7 @@ topic.done=Hecho
21982198
topic.count_prompt=No puede seleccionar más de 25 temas
21992199
topic.format_prompt=Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
22002200

2201+
22012202
error.csv.too_large=No se puede renderizar este archivo porque es demasiado grande.
22022203
error.csv.unexpected=No se puede procesar este archivo porque contiene un carácter inesperado en la línea %d y la columna %d.
22032204
error.csv.invalid_field_count=No se puede procesar este archivo porque tiene un número incorrecto de campos en la línea %d.

options/locale/locale_fa-IR.ini

+1
Original file line numberDiff line numberDiff line change
@@ -2110,6 +2110,7 @@ topic.done=انجام شد
21102110
topic.count_prompt=شما نمی توانید بیش از 25 موضوع انتخاب کنید
21112111
topic.format_prompt=موضوع می‌بایستی با حروف یا شماره ها شروع شود. و می‌تواند شامل دَش ('-') باشد و طول آن تا 35 کارکتر نیز امکانپذیر است.
21122112

2113+
21132114
error.csv.too_large=نمی توان این فایل را رندر کرد زیرا بسیار بزرگ است.
21142115
error.csv.unexpected=نمی توان این فایل را رندر کرد زیرا حاوی یک کاراکتر غیرمنتظره در خط %d و ستون %d است.
21152116
error.csv.invalid_field_count=نمی توان این فایل را رندر کرد زیرا تعداد فیلدهای آن در خط %d اشتباه است.

options/locale/locale_fi-FI.ini

+1
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,7 @@ topic.manage_topics=Hallitse aiheita
971971
topic.done=Valmis
972972

973973

974+
974975
[org]
975976
org_name_holder=Organisaatio
976977
org_full_name_holder=Organisaation täydellinen nimi

options/locale/locale_fr-FR.ini

+1
Original file line numberDiff line numberDiff line change
@@ -1973,6 +1973,7 @@ topic.count_prompt=Vous ne pouvez pas sélectionner plus de 25 sujets
19731973
topic.format_prompt=Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
19741974
19751975
1976+
19761977
[org]
19771978
org_name_holder=Nom de l'organisation
19781979
org_full_name_holder=Nom complet de l'organisation

options/locale/locale_hu-HU.ini

+1
Original file line numberDiff line numberDiff line change
@@ -1305,6 +1305,7 @@ topic.manage_topics=Témák kezelése
13051305
topic.done=Kész
13061306

13071307

1308+
13081309
[org]
13091310
org_name_holder=Szervezet neve
13101311
org_full_name_holder=Szervezet teljes neve

options/locale/locale_id-ID.ini

+1
Original file line numberDiff line numberDiff line change
@@ -1019,6 +1019,7 @@ branch.deleted_by=Dihapus oleh %s
10191019

10201020

10211021

1022+
10221023
[org]
10231024
org_name_holder=Nama Organisasi
10241025
org_full_name_holder=Organisasi Nama Lengkap

options/locale/locale_is-IS.ini

+1
Original file line numberDiff line numberDiff line change
@@ -1131,6 +1131,7 @@ tag.confirm_create_tag=Skapa merki
11311131
topic.done=Í lagi
11321132

11331133

1134+
11341135
[org]
11351136
repo_updated=Uppfært
11361137
people=Fólk

options/locale/locale_it-IT.ini

+1
Original file line numberDiff line numberDiff line change
@@ -1781,6 +1781,7 @@ topic.count_prompt=Non puoi selezionare più di 25 argomenti
17811781
topic.format_prompt=Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
17821782
17831783
1784+
17841785
[org]
17851786
org_name_holder=Nome dell'Organizzazione
17861787
org_full_name_holder=Nome completo dell'organizzazione

0 commit comments

Comments
 (0)