Skip to content

Commit

Permalink
Merge remote-tracking branch 'giteaofficial/main'
Browse files Browse the repository at this point in the history
* giteaofficial/main: (23 commits)
  Display the version of runner in the runner list (go-gitea#23490)
  Add `.patch` to `attachment.ALLOWED_TYPES` (go-gitea#23580)
  Sort Python package descriptors by version to mimic PyPI format (go-gitea#23550)
  Use `project.IconName` instead of repeated unreadable `if-else` chains (go-gitea#23538)
  Match api migration behavior to web behavior (go-gitea#23552)
  Fix dropdown icon misalignment when using fomantic icon (go-gitea#23558)
  Enable color for consistency checks diffs (go-gitea#23563)
  [skip ci] Updated translations via Crowdin
  Fix sticky header in diff view (go-gitea#23554)
  Fix some broken css (go-gitea#23560)
  Fix JS error on compare page (go-gitea#23551)
  Upgrade to npm lockfile v3 and explicitely set it (go-gitea#23561)
  Fix long name ui issues and label ui issue  (go-gitea#23541)
  Remove worker-loader (go-gitea#23548)
  [skip ci] Updated translations via Crowdin
  Return `repository` in npm package metadata endpoint (go-gitea#23539)
  Fix diff detail buttons wrapping, use tippy for review box (go-gitea#23271)
  Do not store user projects as organization projects (go-gitea#23353)
  Imrove scroll behavior to hash issuecomment(scroll position, auto expand if file is folded, and on refreshing) (go-gitea#23513)
  Increase horizontal page padding (go-gitea#23507)
  ...
  • Loading branch information
zjjhot committed Mar 20, 2023
2 parents 7e6f996 + 371520d commit 34dcc5c
Show file tree
Hide file tree
Showing 94 changed files with 1,129 additions and 8,224 deletions.
2 changes: 1 addition & 1 deletion .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -726,7 +726,7 @@ steps:

# TODO: We should probably build all dependencies into a test image
- name: test-e2e
image: mcr.microsoft.com/playwright:v1.29.2-focal
image: mcr.microsoft.com/playwright:v1.31.2-focal
commands:
- curl -sLO https://go.dev/dl/go1.20.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz
- groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea
Expand Down
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ fund=false
update-notifier=false
package-lock=true
save-exact=true
lockfile-version=3
10 changes: 5 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ fmt:

.PHONY: fmt-check
fmt-check: fmt
@diff=$$(git diff $(GO_SOURCES) templates $(WEB_DIRS)); \
@diff=$$(git diff --color=always $(GO_SOURCES) templates $(WEB_DIRS)); \
if [ -n "$$diff" ]; then \
echo "Please run 'make fmt' and commit the result:"; \
echo "$${diff}"; \
Expand Down Expand Up @@ -309,7 +309,7 @@ $(SWAGGER_SPEC): $(GO_SOURCES_NO_BINDATA)

.PHONY: swagger-check
swagger-check: generate-swagger
@diff=$$(git diff '$(SWAGGER_SPEC)'); \
@diff=$$(git diff --color=always '$(SWAGGER_SPEC)'); \
if [ -n "$$diff" ]; then \
echo "Please run 'make generate-swagger' and commit the result:"; \
echo "$${diff}"; \
Expand Down Expand Up @@ -414,7 +414,7 @@ vendor: go.mod go.sum

.PHONY: tidy-check
tidy-check: tidy
@diff=$$(git diff go.mod go.sum $(GO_LICENSE_FILE)); \
@diff=$$(git diff --color=always go.mod go.sum $(GO_LICENSE_FILE)); \
if [ -n "$$diff" ]; then \
echo "Please run 'make tidy' and commit the result:"; \
echo "$${diff}"; \
Expand Down Expand Up @@ -885,7 +885,7 @@ svg: node-check | node_modules
.PHONY: svg-check
svg-check: svg
@git add $(SVG_DEST_DIR)
@diff=$$(git diff --cached $(SVG_DEST_DIR)); \
@diff=$$(git diff --color=always --cached $(SVG_DEST_DIR)); \
if [ -n "$$diff" ]; then \
echo "Please run 'make svg' and 'git add $(SVG_DEST_DIR)' and commit the result:"; \
echo "$${diff}"; \
Expand All @@ -895,7 +895,7 @@ svg-check: svg
.PHONY: lockfile-check
lockfile-check:
npm install --package-lock-only
@diff=$$(git diff package-lock.json); \
@diff=$$(git diff --color=always package-lock.json); \
if [ -n "$$diff" ]; then \
echo "package-lock.json is inconsistent with package.json"; \
echo "Please run 'npm install --package-lock-only' and commit the result:"; \
Expand Down
2 changes: 1 addition & 1 deletion custom/conf/app.example.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1848,7 +1848,7 @@ ROUTER = console
;ENABLED = true
;;
;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types.
;ALLOWED_TYPES = .csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip
;ALLOWED_TYPES = .csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.patch,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip
;;
;; Max size of each file. Defaults to 4MB
;MAX_SIZE = 4
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/advanced/config-cheat-sheet.en-us.md
Original file line number Diff line number Diff line change
Expand Up @@ -841,7 +841,7 @@ Default templates for project boards:
## Issue and pull request attachments (`attachment`)

- `ENABLED`: **true**: Whether issue and pull request attachments are enabled.
- `ALLOWED_TYPES`: **.csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip**: Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types.
- `ALLOWED_TYPES`: **.csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.patch,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip**: Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types.
- `MAX_SIZE`: **4**: Maximum size (MB).
- `MAX_FILES`: **5**: Maximum number of attachments that can be uploaded at once.
- `STORAGE_TYPE`: **local**: Storage type for attachments, `local` for local disk or `minio` for s3 compatible object storage service, default is `local` or other name defined with `[storage.xxx]`
Expand Down
1 change: 1 addition & 0 deletions models/actions/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ type ActionRunner struct {
ID int64
UUID string `xorm:"CHAR(36) UNIQUE"`
Name string `xorm:"VARCHAR(255)"`
Version string `xorm:"VARCHAR(64)"`
OwnerID int64 `xorm:"index"` // org level runner, 0 means system
Owner *user_model.User `xorm:"-"`
RepoID int64 `xorm:"index"` // repo level runner, if orgid also is zero, then it's a global
Expand Down
4 changes: 4 additions & 0 deletions models/migrations/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,10 @@ var migrations = []Migration{
NewMigration("Rename Webhook org_id to owner_id", v1_20.RenameWebhookOrgToOwner),
// v246 -> v247
NewMigration("Add missed column owner_id for project table", v1_20.AddNewColumnForProject),
// v247 -> v248
NewMigration("Fix incorrect project type", v1_20.FixIncorrectProjectType),
// v248 -> v249
NewMigration("Add version column to action_runner table", v1_20.AddVersionToActionRunner),
}

// GetCurrentDBVersion returns the current db version
Expand Down
50 changes: 50 additions & 0 deletions models/migrations/v1_20/v247.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package v1_20 //nolint

import (
"code.gitea.io/gitea/modules/log"

"xorm.io/xorm"
)

// FixIncorrectProjectType: set individual project's type from 3(TypeOrganization) to 1(TypeIndividual)
func FixIncorrectProjectType(x *xorm.Engine) error {
type User struct {
ID int64 `xorm:"pk autoincr"`
Type int
}

const (
UserTypeIndividual int = 0

TypeIndividual uint8 = 1
TypeOrganization uint8 = 3
)

type Project struct {
OwnerID int64 `xorm:"INDEX"`
Type uint8
Owner *User `xorm:"extends"`
}

sess := x.NewSession()
defer sess.Close()

if err := sess.Begin(); err != nil {
return err
}

count, err := sess.Table("project").
Where("type = ? AND owner_id IN (SELECT id FROM `user` WHERE type = ?)", TypeOrganization, UserTypeIndividual).
Update(&Project{
Type: TypeIndividual,
})
if err != nil {
return err
}
log.Debug("Updated %d projects to belong to a user instead of an organization", count)

return sess.Commit()
}
14 changes: 14 additions & 0 deletions models/migrations/v1_20/v248.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package v1_20 //nolint

import "xorm.io/xorm"

func AddVersionToActionRunner(x *xorm.Engine) error {
type ActionRunner struct {
Version string `xorm:"VARCHAR(64)"` // the version of act_runner
}

return x.Sync(new(ActionRunner))
}
13 changes: 12 additions & 1 deletion models/project/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,10 +144,21 @@ func (p *Project) Link() string {
return ""
}

func (p *Project) IconName() string {
if p.IsRepositoryProject() {
return "octicon-project"
}
return "octicon-project-symlink"
}

func (p *Project) IsOrganizationProject() bool {
return p.Type == TypeOrganization
}

func (p *Project) IsRepositoryProject() bool {
return p.Type == TypeRepository
}

func init() {
db.RegisterModel(new(Project))
}
Expand All @@ -172,7 +183,7 @@ func GetCardConfig() []CardConfig {
// IsTypeValid checks if a project type is valid
func IsTypeValid(p Type) bool {
switch p {
case TypeRepository, TypeOrganization:
case TypeIndividual, TypeRepository, TypeOrganization:
return true
default:
return false
Expand Down
2 changes: 1 addition & 1 deletion models/project/project_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func TestIsProjectTypeValid(t *testing.T) {
typ Type
valid bool
}{
{TypeIndividual, false},
{TypeIndividual, true},
{TypeRepository, true},
{TypeOrganization, true},
{UnknownType, false},
Expand Down
1 change: 1 addition & 0 deletions modules/packages/npm/creator.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ func ParsePackage(r io.Reader) (*Package, error) {
OptionalDependencies: meta.OptionalDependencies,
Bin: meta.Bin,
Readme: meta.Readme,
Repository: meta.Repository,
},
}

Expand Down
7 changes: 7 additions & 0 deletions modules/packages/npm/creator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ func TestParsePackage(t *testing.T) {
packageDescription := "Test Description"
data := "H4sIAAAAAAAA/ytITM5OTE/VL4DQelnF+XkMVAYGBgZmJiYK2MRBwNDcSIHB2NTMwNDQzMwAqA7IMDUxA9LUdgg2UFpcklgEdAql5kD8ogCnhwio5lJQUMpLzE1VslJQcihOzi9I1S9JLS7RhSYIJR2QgrLUouLM/DyQGkM9Az1D3YIiqExKanFyUWZBCVQ2BKhVwQVJDKwosbQkI78IJO/tZ+LsbRykxFXLNdA+HwWjYBSMgpENACgAbtAACAAA"
integrity := "sha512-yA4FJsVhetynGfOC1jFf79BuS+jrHbm0fhh+aHzCQkOaOBXKf9oBnC4a6DnLLnEsHQDRLYd00cwj8sCXpC+wIg=="
repository := Repository{
Type: "gitea",
URL: "http://localhost:3000/gitea/test.git",
}

t.Run("InvalidUpload", func(t *testing.T) {
p, err := ParsePackage(bytes.NewReader([]byte{0}))
Expand Down Expand Up @@ -242,6 +246,7 @@ func TestParsePackage(t *testing.T) {
Dist: PackageDistribution{
Integrity: integrity,
},
Repository: repository,
},
},
},
Expand Down Expand Up @@ -272,5 +277,7 @@ func TestParsePackage(t *testing.T) {
assert.Equal(t, "https://gitea.io/", p.Metadata.ProjectURL)
assert.Contains(t, p.Metadata.Dependencies, "package")
assert.Equal(t, "1.2.0", p.Metadata.Dependencies["package"])
assert.Equal(t, repository.Type, p.Metadata.Repository.Type)
assert.Equal(t, repository.URL, p.Metadata.Repository.URL)
})
}
1 change: 1 addition & 0 deletions modules/packages/npm/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ type Metadata struct {
OptionalDependencies map[string]string `json:"optional_dependencies,omitempty"`
Bin map[string]string `json:"bin,omitempty"`
Readme string `json:"readme,omitempty"`
Repository Repository `json:"repository,omitempty"`
}
2 changes: 1 addition & 1 deletion modules/setting/attachment.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func loadAttachmentFrom(rootCfg ConfigProvider) {

Attachment.Storage = getStorage(rootCfg, "attachments", storageType, sec)

Attachment.AllowedTypes = sec.Key("ALLOWED_TYPES").MustString(".csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip")
Attachment.AllowedTypes = sec.Key("ALLOWED_TYPES").MustString(".csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.patch,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip")
Attachment.MaxSize = sec.Key("MAX_SIZE").MustInt64(4)
Attachment.MaxFiles = sec.Key("MAX_FILES").MustInt(5)
Attachment.Enabled = sec.Key("ENABLED").MustBool(true)
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_cs-CZ.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1423,7 +1423,6 @@ issues.context.reference_issue=Odkázat v novém úkolu
issues.context.edit=Upravit
issues.context.delete=Smazat
issues.no_content=Není zde žádný obsah.
issues.close_issue=Zavřít
issues.pull_merged_at=`sloučil/a commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> do <b>%[3]s</b> %[4]s`
issues.manually_pull_merged_at=`sloučil/a commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> do <b>%[3]s</b> ručně %[4]s`
issues.close_comment_issue=Okomentovat a zavřít
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_de-DE.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1310,7 +1310,6 @@ issues.context.reference_issue=In neuem Issue referenzieren
issues.context.edit=Bearbeiten
issues.context.delete=Löschen
issues.no_content=Hier gibt es bis jetzt noch keinen Inhalt.
issues.close_issue=Schließen
issues.pull_merged_at=`mergte den Commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> %[4]s in <b>%[3]s</b>`
issues.manually_pull_merged_at=`mergte den Commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> %[4]s manuell in <b>%[3]s</b>`
issues.close_comment_issue=Kommentieren und schließen
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_el-GR.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1331,7 +1331,6 @@ issues.context.reference_issue=Αναφορά σε νέο ζήτημα
issues.context.edit=Επεξεργασία
issues.context.delete=Διαγραφή
issues.no_content=Δεν υπάρχει ακόμα περιεχόμενο.
issues.close_issue=Κλείσιμο
issues.pull_merged_at=`συγχώνευσε την υποβολή <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> σε <b>%[3]s</b> %[4]s`
issues.manually_pull_merged_at=`συγχώνευσε την υποβολή <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> σε <b>%[3]s</b> %[4]s`
issues.close_comment_issue=Σχόλιο και κλείσιμο
Expand Down
1 change: 1 addition & 0 deletions options/locale/locale_en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3355,6 +3355,7 @@ runners.status.unspecified = Unknown
runners.status.idle = Idle
runners.status.active = Active
runners.status.offline = Offline
runners.version = Version
runs.all_workflows = All Workflows
runs.open_tab = %d Open
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_es-ES.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1330,7 +1330,6 @@ issues.context.reference_issue=Referencia en una nueva incidencia
issues.context.edit=Editar
issues.context.delete=Eliminar
issues.no_content=Aún no existe contenido.
issues.close_issue=Cerrar
issues.pull_merged_at=`fusionado commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> en <b>%[3]s</b> %[4]s`
issues.manually_pull_merged_at=`fusionado manualmente commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> en <b>%[3]s</b> %[4]s`
issues.close_comment_issue=Comentar y cerrar
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_fa-IR.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1213,7 +1213,6 @@ issues.context.reference_issue=مرجع در شماره جدید
issues.context.edit=ویرایش
issues.context.delete=حذف
issues.no_content=هنوز محتوایی ایجاد نشده.
issues.close_issue=ببند
issues.pull_merged_at=`ادغام شده commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> در <b>%[3]s</b> %[4]s`
issues.manually_pull_merged_at=`ادغام شده commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> در <b>%[3]s</b> بصورت دستی %[4]s`
issues.close_comment_issue=ثبت دیدگاه و بستن
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_fi-FI.ini
Original file line number Diff line number Diff line change
Expand Up @@ -936,7 +936,6 @@ issues.context.reference_issue=Viittaa uudesa ongelmassa
issues.context.edit=Muokkaa
issues.context.delete=Poista
issues.no_content=Sisältöä ei vielä ole.
issues.close_issue=Sulje
issues.close_comment_issue=Kommentoi ja sulje
issues.reopen_issue=Avaa uudelleen
issues.reopen_comment_issue=Kommentoi ja avaa uudelleen
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_fr-FR.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1195,7 +1195,6 @@ issues.context.reference_issue=Référencer dans un nouveau ticket
issues.context.edit=Éditer
issues.context.delete=Supprimer
issues.no_content=Il n'existe pas encore de contenu.
issues.close_issue=Fermer
issues.pull_merged_at=`révision fusionnée <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> dans <b>%[3]s</b> %[4]s`
issues.manually_pull_merged_at=`révision fusionnée <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> dans <b>%[3]s</b> manuellement %[4]s`
issues.close_comment_issue=Commenter et Fermer
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_hu-HU.ini
Original file line number Diff line number Diff line change
Expand Up @@ -881,7 +881,6 @@ issues.context.quote_reply=Válasz idézettel
issues.context.edit=Szerkesztés
issues.context.delete=Törlés
issues.no_content=Még nincs tartalom.
issues.close_issue=Lezárás
issues.close_comment_issue=Hozzászólás és lezárás
issues.reopen_issue=Újranyitás
issues.reopen_comment_issue=Hozzászólás és újranyitás
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_id-ID.ini
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,6 @@ issues.context.quote_reply=Kutip Balasan
issues.context.edit=Sunting
issues.context.delete=Hapus
issues.no_content=Belum ada konten.
issues.close_issue=Tutup
issues.close_comment_issue=Komentar dan Tutup
issues.reopen_issue=Buka kembali
issues.reopen_comment_issue=Komentar dan Buka Kembali
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_is-IS.ini
Original file line number Diff line number Diff line change
Expand Up @@ -823,7 +823,6 @@ issues.num_comments=%d ummæli
issues.commented_at=`gerði ummæli <a href="#%s">%s</a>`
issues.context.edit=Breyta
issues.context.delete=Eyða
issues.close_issue=Loka
issues.manually_pull_merged_at=`sameinaði framlag <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> inni í <b>%[3]s</b> handvirkt %[4]s`
issues.close_comment_issue=Senda ummæli og Loka
issues.reopen_issue=Enduropna
Expand Down
1 change: 0 additions & 1 deletion options/locale/locale_it-IT.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1315,7 +1315,6 @@ issues.context.reference_issue=Fai riferimento in un nuovo problema
issues.context.edit=Modifica
issues.context.delete=Elimina
issues.no_content=Non ci sono ancora contenuti.
issues.close_issue=Chiudi
issues.pull_merged_at=`merged commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> in <b>%[3]s</b> %[4]s`
issues.manually_pull_merged_at=`merged commit <a class="ui sha" href="%[1]s"><code>%[2]s</code></a> in <b>%[3]s</b> manualmente %[4]s`
issues.close_comment_issue=Commenta e Chiudi
Expand Down
Loading

0 comments on commit 34dcc5c

Please sign in to comment.