Compare commits

...

7 Commits

Author SHA1 Message Date
GiteaBot
faf28b2823 [skip ci] Updated translations via Crowdin 2023-07-15 00:29:55 +00:00
KN4CK3R
bd82d8974e
Add support for different Maven POM encoding (#25873)
Fixes #25853

- Maven POM files aren't always UTF-8 encoded.
- Reject the upload of unparsable POM files
2023-07-14 09:39:15 +00:00
yp05327
dc679fc9fa
Fix incorrect release count (#25879)
Release count is not correct:
https://try.gitea.io/yp05327/testrepo/tags

![image](https://github.com/go-gitea/gitea/assets/18380374/07f97c62-d450-4ccb-b3f2-3e0af9d9fc52)

https://try.gitea.io/yp05327/testrepo/releases

![image](https://github.com/go-gitea/gitea/assets/18380374/6f1d55a4-bb68-445d-84b9-90552a40f403)

https://try.gitea.io/yp05327/testrepo/releases/tag/testtag

![image](https://github.com/go-gitea/gitea/assets/18380374/09ab5d51-52b6-4621-a571-3100198eb260)

We already have correct release count, no need to calculate it again.

c5e187c389/modules/context/repo.go (L547)

Co-authored-by: Giteabot <teabot@gitea.io>
2023-07-14 08:47:17 +00:00
yp05327
1c8073b483
Add Github related extensions in devcontainer (#25800) 2023-07-14 15:58:02 +08:00
yp05327
52f46919dc
Add error info if no user can fork the repo (#25820)
Before: (Owner list is empty)

![image](https://github.com/go-gitea/gitea/assets/18380374/dbe87bfe-14ed-4997-8cb2-5c1308232a70)

After: (Disable the button and show the error info)

![image](https://github.com/go-gitea/gitea/assets/18380374/a7e4c315-67ab-408b-88f2-c554076ce87a)
2023-07-14 15:56:20 +08:00
yp05327
61c9268c56
Fix wrong usage of PathEscapeSegments in branch list page (#25864)
Before:

![image](https://github.com/go-gitea/gitea/assets/18380374/21ce7bfa-36f7-4125-9a66-d644400916a8)

emmm, don't know how to write a good title to describe this issue.
If you have a good idea, I can change the title.

The fix code is copied from L122. Not sure it is right or not.

@lunny 
Maybe `DefaultBranchBranch` is also typo?
Two `Branch` in variable name .
2023-07-14 06:08:38 +00:00
hiifong
4628aa5251
fix incorrect repo url when changed the case of ownername (#25733)
When only the case of the username changes and the new username is
consistent with the lowercase username of the old user name, update the
owner name of the repo, and keep the original logic consistent with
other conditions.

example: your username is `gitea`, lowercase username is `gitea`,repo
url is `.../gitea/{repo}`, you changed username to `Gitea` or `GiTea` or
other, but the lowercase username is still `gitea`, the repo url is
still `.../gitea/{repo}`.

this pr fixed it,keep username and repo url consistent.

Before:

![image](https://github.com/go-gitea/gitea/assets/89133723/84177296-f0ff-4176-84f1-1f9ec3f5b86f)

![image](https://github.com/go-gitea/gitea/assets/89133723/8f8f4a12-ecdd-4dec-af89-85c009b0ccfe)


After: 

![image](https://github.com/go-gitea/gitea/assets/89133723/0564edb6-9467-405a-8cd4-d6f70e6f614b)

![image](https://github.com/go-gitea/gitea/assets/89133723/554ecd6e-e5a1-43bc-a46d-99e988c2ff58)
2023-07-14 13:42:10 +08:00
13 changed files with 160 additions and 15 deletions

View File

@ -23,7 +23,8 @@
"Vue.volar", "Vue.volar",
"ms-azuretools.vscode-docker", "ms-azuretools.vscode-docker",
"zixuanchen.vitest-explorer", "zixuanchen.vitest-explorer",
"qwtel.sqlite-viewer" "qwtel.sqlite-viewer",
"GitHub.vscode-pull-request-github"
] ]
} }
}, },

View File

@ -35,6 +35,7 @@ vscode:
- ms-azuretools.vscode-docker - ms-azuretools.vscode-docker
- zixuanchen.vitest-explorer - zixuanchen.vitest-explorer
- qwtel.sqlite-viewer - qwtel.sqlite-viewer
- GitHub.vscode-pull-request-github
ports: ports:
- name: Gitea - name: Gitea

View File

@ -8,6 +8,8 @@ import (
"io" "io"
"code.gitea.io/gitea/modules/validation" "code.gitea.io/gitea/modules/validation"
"golang.org/x/net/html/charset"
) )
// Metadata represents the metadata of a Maven package // Metadata represents the metadata of a Maven package
@ -52,7 +54,10 @@ type pomStruct struct {
// ParsePackageMetaData parses the metadata of a pom file // ParsePackageMetaData parses the metadata of a pom file
func ParsePackageMetaData(r io.Reader) (*Metadata, error) { func ParsePackageMetaData(r io.Reader) (*Metadata, error) {
var pom pomStruct var pom pomStruct
if err := xml.NewDecoder(r).Decode(&pom); err != nil {
dec := xml.NewDecoder(r)
dec.CharsetReader = charset.NewReaderLabel
if err := dec.Decode(&pom); err != nil {
return nil, err return nil, err
} }

View File

@ -8,6 +8,7 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"golang.org/x/text/encoding/charmap"
) )
const ( const (
@ -69,4 +70,20 @@ func TestParsePackageMetaData(t *testing.T) {
assert.Equal(t, dependencyArtifactID, m.Dependencies[0].ArtifactID) assert.Equal(t, dependencyArtifactID, m.Dependencies[0].ArtifactID)
assert.Equal(t, dependencyVersion, m.Dependencies[0].Version) assert.Equal(t, dependencyVersion, m.Dependencies[0].Version)
}) })
t.Run("Encoding", func(t *testing.T) {
// UTF-8 is default but the metadata could be encoded differently
pomContent8859_1, err := charmap.ISO8859_1.NewEncoder().String(
strings.ReplaceAll(
pomContent,
`<?xml version="1.0"?>`,
`<?xml version="1.0" encoding="ISO-8859-1"?>`,
),
)
assert.NoError(t, err)
m, err := ParsePackageMetaData(strings.NewReader(pomContent8859_1))
assert.NoError(t, err)
assert.NotNil(t, m)
})
} }

View File

@ -2205,8 +2205,8 @@ settings.protect_enable_push=Push aktivieren
settings.protect_enable_push_desc=Jeder, der Schreibzugriff hat, darf in diesen Branch Pushen (aber kein Force-Push). settings.protect_enable_push_desc=Jeder, der Schreibzugriff hat, darf in diesen Branch Pushen (aber kein Force-Push).
settings.protect_enable_merge=Merge aktivieren settings.protect_enable_merge=Merge aktivieren
settings.protect_enable_merge_desc=Jeder mit Schreibzugriff darf die Pull-Requests in diesen Branch mergen. settings.protect_enable_merge_desc=Jeder mit Schreibzugriff darf die Pull-Requests in diesen Branch mergen.
settings.protect_whitelist_committers=Schütze gewhitlistede Commiter settings.protect_whitelist_committers=Schütze gewhitelistete Commiter
settings.protect_whitelist_committers_desc=Jeder, der auf der Whiteliste steht, darf in diesen Branch pushen (aber kein Force-Push). settings.protect_whitelist_committers_desc=Jeder, der auf der Whitelist steht, darf in diesen Branch pushen (aber kein Force-Push).
settings.protect_whitelist_deploy_keys=Deploy-Schlüssel mit Schreibzugriff zum Pushen whitelisten. settings.protect_whitelist_deploy_keys=Deploy-Schlüssel mit Schreibzugriff zum Pushen whitelisten.
settings.protect_whitelist_users=Nutzer, die pushen dürfen: settings.protect_whitelist_users=Nutzer, die pushen dürfen:
settings.protect_whitelist_search_users=Benutzer suchen… settings.protect_whitelist_search_users=Benutzer suchen…
@ -2925,6 +2925,7 @@ auths.deletion_success=Die Authentifizierungsquelle „%s“ wurde gelöscht.
auths.login_source_exist=Die Authentifizierungsquelle "%s" existiert bereits. auths.login_source_exist=Die Authentifizierungsquelle "%s" existiert bereits.
auths.login_source_of_type_exist=Eine Authentifizierungart dieses Typs existiert bereits. auths.login_source_of_type_exist=Eine Authentifizierungart dieses Typs existiert bereits.
auths.unable_to_initialize_openid=OpenID Connect Provider konnte nicht initialisiert werden: %s auths.unable_to_initialize_openid=OpenID Connect Provider konnte nicht initialisiert werden: %s
auths.invalid_openIdConnectAutoDiscoveryURL=Ungültige Auto-Discovery-URL (dies muss eine gültige URL sein, die mit http:// oder https:// beginnt)
config.server_config=Serverkonfiguration config.server_config=Serverkonfiguration
config.app_name=Seitentitel config.app_name=Seitentitel
@ -3095,6 +3096,7 @@ monitor.queue.numberinqueue=Nummer in der Warteschlange
monitor.queue.review=Konfiguration überprüfen monitor.queue.review=Konfiguration überprüfen
monitor.queue.review_add=Worker hinzufügen/prüfen monitor.queue.review_add=Worker hinzufügen/prüfen
monitor.queue.settings.title=Pool-Einstellungen monitor.queue.settings.title=Pool-Einstellungen
monitor.queue.settings.desc=Pools wachsen dynamisch basierend auf der Blockierung der Arbeitswarteschlange.
monitor.queue.settings.maxnumberworkers=Maximale Anzahl an Workern monitor.queue.settings.maxnumberworkers=Maximale Anzahl an Workern
monitor.queue.settings.maxnumberworkers.placeholder=Derzeit %[1]d monitor.queue.settings.maxnumberworkers.placeholder=Derzeit %[1]d
monitor.queue.settings.maxnumberworkers.error=Die Anzahl der Worker muss eine Zahl sein monitor.queue.settings.maxnumberworkers.error=Die Anzahl der Worker muss eine Zahl sein
@ -3188,6 +3190,7 @@ mark_as_read=Als gelesen markieren
mark_as_unread=Als ungelesen markieren mark_as_unread=Als ungelesen markieren
mark_all_as_read=Alle als gelesen markieren mark_all_as_read=Alle als gelesen markieren
subscriptions=Abonnements subscriptions=Abonnements
watching=Gefolgt
no_subscriptions=Keine Abonnements no_subscriptions=Keine Abonnements
[gpg] [gpg]
@ -3210,6 +3213,7 @@ error.unit_not_allowed=Du hast keine Berechtigung, um auf diesen Repository-Bere
title=Pakete title=Pakete
desc=Repository-Pakete verwalten. desc=Repository-Pakete verwalten.
empty=Noch keine Pakete vorhanden. empty=Noch keine Pakete vorhanden.
empty.documentation=Weitere Informationen zur Paket-Registry finden Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a>.
empty.repo=Hast du ein Paket hochgeladen, das hier nicht angezeigt wird? Gehe zu den <a href="%[1]s">Paketeinstellungen</a> und verlinke es mit diesem Repo. empty.repo=Hast du ein Paket hochgeladen, das hier nicht angezeigt wird? Gehe zu den <a href="%[1]s">Paketeinstellungen</a> und verlinke es mit diesem Repo.
filter.type=Typ filter.type=Typ
filter.type.all=Alle filter.type.all=Alle
@ -3226,16 +3230,31 @@ keywords=Schlüsselwörter
details=Details details=Details
details.author=Autor details.author=Autor
details.project_site=Projektseite details.project_site=Projektseite
details.repository_site=Repository-Seite
details.documentation_site=Dokumentationsseite
details.license=Lizenz details.license=Lizenz
assets=Dateien assets=Dateien
versions=Versionen versions=Versionen
versions.view_all=Alle anzeigen versions.view_all=Alle anzeigen
dependency.id=ID dependency.id=ID
dependency.version=Version dependency.version=Version
alpine.registry=Richten Sie diese Registry ein, indem Sie die URL in die <code>/etc/apk/repositories</code>-Datei hinzufügen:
alpine.registry.key=Laden Sie den öffentlichen RSA-Schlüssel der Registry in den <code>/etc/apk/keys/</code>-Ordner um die Signatur zu überprüfen:
alpine.registry.info=Wählen Sie $branch und $repository aus der Liste unten.
alpine.install=Nutze folgenden Befehl, um das Paket zu installieren: alpine.install=Nutze folgenden Befehl, um das Paket zu installieren:
alpine.documentation=Für weitere Informationen zur Alpine-Registry, schauen Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a> nach.
alpine.repository=Repository-Informationen
alpine.repository.branches=Branches alpine.repository.branches=Branches
alpine.repository.repositories=Repositories alpine.repository.repositories=Repositories
alpine.repository.architectures=Architekturen
cargo.registry=Richten Sie diese Registry in der Cargo-Konfigurationsdatei ein (z.B. <code>~/.cargo/config.toml</code>):
cargo.install=Um das Paket mit Cargo zu installieren, führen Sie den folgenden Befehl aus:
cargo.documentation=Weitere Informationen zur Cargo-Paketverwaltung finden Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a>.
cargo.details.repository_site=Repository-Seite
cargo.details.documentation_site=Dokumentationsseite
chef.registry=Richten Sie diese Registry in Ihrer <code>~/.chef/config.rb</code> Datei ein:
chef.install=Nutze folgenden Befehl, um das Paket zu installieren: chef.install=Nutze folgenden Befehl, um das Paket zu installieren:
chef.documentation=Weitere Informationen zur Chef-Paketverwaltung finden Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a>.
composer.registry=Setze diese Paketverwaltung in deiner <code>~/.composer/config.json</code> Datei auf: composer.registry=Setze diese Paketverwaltung in deiner <code>~/.composer/config.json</code> Datei auf:
composer.install=Nutze folgenden Befehl, um das Paket mit Composer zu installieren: composer.install=Nutze folgenden Befehl, um das Paket mit Composer zu installieren:
composer.documentation=Weitere Informationen zur Composer-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/composer/">Dokumentation</a>. composer.documentation=Weitere Informationen zur Composer-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/composer/">Dokumentation</a>.
@ -3245,6 +3264,11 @@ conan.details.repository=Repository
conan.registry=Diese Registry über die Kommandozeile einrichten: conan.registry=Diese Registry über die Kommandozeile einrichten:
conan.install=Um das Paket mit Conan zu installieren, führe den folgenden Befehl aus: conan.install=Um das Paket mit Conan zu installieren, führe den folgenden Befehl aus:
conan.documentation=Weitere Informationen zur Conan-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/conan/">Dokumentation</a>. conan.documentation=Weitere Informationen zur Conan-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/conan/">Dokumentation</a>.
conda.registry=Richten Sie diese Registry als Conda-Repository in Ihrer <code>.condarc</code> Datei ein:
conda.install=Um das Paket mit Conda zu installieren, führen Sie den folgenden Befehl aus:
conda.documentation=Weitere Informationen zur Conda-Paketverwaltung finden Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a>.
conda.details.repository_site=Repository-Seite
conda.details.documentation_site=Dokumentationsseite
container.details.type=Container-Image Typ container.details.type=Container-Image Typ
container.details.platform=Plattform container.details.platform=Plattform
container.pull=Downloade das Container-Image aus der Kommandozeile: container.pull=Downloade das Container-Image aus der Kommandozeile:
@ -3255,11 +3279,21 @@ container.layers=Container-Image Ebenen
container.labels=Labels container.labels=Labels
container.labels.key=Schlüssel container.labels.key=Schlüssel
container.labels.value=Wert container.labels.value=Wert
cran.registry=Richten Sie diese Registry in Ihrer <code>Rprofile.site</code> Datei ein:
cran.install=Nutze folgenden Befehl, um das Paket zu installieren: cran.install=Nutze folgenden Befehl, um das Paket zu installieren:
cran.documentation=Für weitere Informationen zur CRAN-Registry, schauen Sie in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/cran/">Dokumentation</a> nach.
debian.registry=Diese Registry über die Kommandozeile einrichten: debian.registry=Diese Registry über die Kommandozeile einrichten:
debian.registry.info=Wählen Sie $distribution und $component aus der Liste unten.
debian.install=Nutze folgenden Befehl, um das Paket zu installieren: debian.install=Nutze folgenden Befehl, um das Paket zu installieren:
debian.documentation=Für weitere Informationen zur Debian-Registry, schauen Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a> nach.
debian.repository=Repository-Informationen
debian.repository.distributions=Distributionen
debian.repository.components=Komponenten
debian.repository.architectures=Architekturen
generic.download=Downloade das Paket aus der Kommandozeile: generic.download=Downloade das Paket aus der Kommandozeile:
generic.documentation=Weitere Informationen zur generischen Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/generic">Dokumentation</a>. generic.documentation=Weitere Informationen zur generischen Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/generic">Dokumentation</a>.
go.install=Installieren Sie das Paket über die Kommandozeile:
go.documentation=Für weitere Informationen zur Go-Registry, schauen Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a> nach.
helm.registry=Diese Paketverwaltung über die Kommandozeile einrichten: helm.registry=Diese Paketverwaltung über die Kommandozeile einrichten:
helm.install=Nutze folgenden Befehl, um das Paket zu installieren: helm.install=Nutze folgenden Befehl, um das Paket zu installieren:
helm.documentation=Weitere Informationen zur Helm-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/helm/">Dokumentation</a>. helm.documentation=Weitere Informationen zur Helm-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/helm/">Dokumentation</a>.
@ -3288,6 +3322,7 @@ pypi.install=Nutze folgenden Befehl, um das Paket mit pip zu installieren:
pypi.documentation=Weitere Informationen zur PyPI-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/pypi/">Dokumentation</a>. pypi.documentation=Weitere Informationen zur PyPI-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/pypi/">Dokumentation</a>.
rpm.registry=Diese Registry über die Kommandozeile einrichten: rpm.registry=Diese Registry über die Kommandozeile einrichten:
rpm.install=Nutze folgenden Befehl, um das Paket zu installieren: rpm.install=Nutze folgenden Befehl, um das Paket zu installieren:
rpm.documentation=Für weitere Informationen zur RPM-Registry, schauen Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a> nach.
rubygems.install=Um das Paket mit gem zu installieren, führe den folgenden Befehl aus: rubygems.install=Um das Paket mit gem zu installieren, führe den folgenden Befehl aus:
rubygems.install2=oder füg es zum Gemfile hinzu: rubygems.install2=oder füg es zum Gemfile hinzu:
rubygems.dependencies.runtime=Laufzeitabhängigkeiten rubygems.dependencies.runtime=Laufzeitabhängigkeiten
@ -3296,6 +3331,9 @@ rubygems.required.ruby=Benötigt Ruby Version
rubygems.required.rubygems=Benötigt RubyGem Version rubygems.required.rubygems=Benötigt RubyGem Version
rubygems.documentation=Weitere Informationen zur RubyGems-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/rubygems/">Dokumentation</a>. rubygems.documentation=Weitere Informationen zur RubyGems-Paketverwaltung findest du in der <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/rubygems/">Dokumentation</a>.
swift.registry=Diese Registry über die Kommandozeile einrichten: swift.registry=Diese Registry über die Kommandozeile einrichten:
swift.install=Fügen Sie das Paket Ihrer <code>Package.swift</code> Datei hinzu:
swift.install2=und führen Sie den folgenden Befehl aus:
swift.documentation=Weitere Informationen zur Swift-Paketverwaltung finden Sie in der <a target="_blank" rel="noopener noreferrer" href="%s">Dokumentation</a>.
vagrant.install=Um eine Vagrant-Box hinzuzufügen, führen Sie folgenden Befehl aus: vagrant.install=Um eine Vagrant-Box hinzuzufügen, führen Sie folgenden Befehl aus:
vagrant.documentation=Für weitere Informationen zur Vagrant-Registry, siehe <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/vagrant/">Dokumentation</a>. vagrant.documentation=Für weitere Informationen zur Vagrant-Registry, siehe <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/packages/vagrant/">Dokumentation</a>.
settings.link=Dieses Paket einem Repository zuweisen settings.link=Dieses Paket einem Repository zuweisen
@ -3309,41 +3347,118 @@ settings.delete.description=Das Löschen eines Pakets ist dauerhaft und kann nic
settings.delete.notice=Du bist dabei, %s (%s) zu löschen. Dieser Vorgang ist unwiderruflich. Bist du sicher? settings.delete.notice=Du bist dabei, %s (%s) zu löschen. Dieser Vorgang ist unwiderruflich. Bist du sicher?
settings.delete.success=Das Paket wurde gelöscht. settings.delete.success=Das Paket wurde gelöscht.
settings.delete.error=Löschen des Pakets fehlgeschlagen. settings.delete.error=Löschen des Pakets fehlgeschlagen.
owner.settings.cargo.title=Cargo-Registry-Index
owner.settings.cargo.initialize=Index initialisieren owner.settings.cargo.initialize=Index initialisieren
owner.settings.cargo.initialize.description=Um die Cargo-Registry nutzen zu können, wird ein spezielles Git-Repository als Index benötigt. Hier können Sie es mit der erforderlichen Konfiguration (neu) erstellen.
owner.settings.cargo.initialize.error=Cargo-Index konnte nicht initialisiert werden: %v
owner.settings.cargo.initialize.success=Der Cargo-Index wurde erfolgreich erstellt.
owner.settings.cargo.rebuild=Index neu erstellen
owner.settings.cargo.rebuild.description=Wenn der Index nicht mit den gespeicherten Cargo-Paketen übereinstimmt, können Sie ihn hier neu erstellen.
owner.settings.cargo.rebuild.error=Cargo-Index konnte nicht neu erstellt werden: %v
owner.settings.cargo.rebuild.success=Der Cargo-Index wurde erfolgreich neu erstellt.
owner.settings.cleanuprules.title=Bereinigungsregeln verwalten
owner.settings.cleanuprules.add=Bereinigungsregel hinzufügen
owner.settings.cleanuprules.edit=Bereinigungsregel bearbeiten
owner.settings.cleanuprules.none=Keine Bereinigungsregeln verfügbar. Lesen Sie die Dokumentation um mehr zu erfahren.
owner.settings.cleanuprules.preview=Vorschau der Bereinigungsregel
owner.settings.cleanuprules.preview.overview=%d Pakete sollen entfernt werden.
owner.settings.cleanuprules.preview.none=Bereinigungsregel stimmt mit keinem Paket überein.
owner.settings.cleanuprules.enabled=Aktiviert owner.settings.cleanuprules.enabled=Aktiviert
owner.settings.cleanuprules.pattern_full_match=Muster auf den vollständigen Paketnamen anwenden
owner.settings.cleanuprules.keep.title=Versionen, die diesen Regeln entsprechen, werden beibehalten, auch wenn sie mit einer Entfernungsregel unten übereinstimmen.
owner.settings.cleanuprules.keep.count=Behalte die aktuellsten
owner.settings.cleanuprules.keep.count.1=1 Version pro Paket
owner.settings.cleanuprules.keep.count.n=%d Versionen pro Paket
owner.settings.cleanuprules.keep.pattern=Behalte übereinstimmende Versionen
owner.settings.cleanuprules.keep.pattern.container=Die Version <code>latest</code> bei Container-Paketen wird immer behalten.
owner.settings.cleanuprules.remove.title=Versionen, die diesen Regeln entsprechen, werden entfernt, es sei denn, eine obige Regel besagt, sie zu behalten.
owner.settings.cleanuprules.remove.days=Entferne Versionen älter als
owner.settings.cleanuprules.remove.pattern=Entferne übereinstimmende Versionen
owner.settings.cleanuprules.success.update=Bereinigungsregel wurde aktualisiert.
owner.settings.cleanuprules.success.delete=Bereinigungsregel wurde gelöscht.
owner.settings.chef.title=Chef-Registry
owner.settings.chef.keypair=Schlüsselpaar generieren
owner.settings.chef.keypair.description=Schlüsselpaar zur Authentifizierung gegen die Chef-Registry generieren. Der bisherige Schlüssel kann danach nicht mehr verwendet werden.
[secrets] [secrets]
secrets=Secrets
description=Secrets werden an bestimmte Aktionen weitergegeben und können nicht anderweitig ausgelesen werden.
none=Noch keine Secrets vorhanden.
value=Wert value=Wert
name=Name name=Name
creation=Secret hinzufügen
creation.name_placeholder=Groß-/Kleinschreibung wird ignoriert, nur alphanumerische Zeichen oder Unterstriche, darf nicht mit GITEA_ oder GITHUB_ beginnen
creation.value_placeholder=Beliebigen Inhalt eingeben. Leerzeichen am Anfang und Ende werden weggelassen. creation.value_placeholder=Beliebigen Inhalt eingeben. Leerzeichen am Anfang und Ende werden weggelassen.
creation.success=Das Secret "%s" wurde hinzugefügt.
creation.failed=Secret konnte nicht hinzugefügt werden.
deletion=Secret entfernen
deletion.description=Das Entfernen eines Secrets kann nicht rückgängig gemacht werden. Fortfahren?
deletion.success=Das Secret wurde entfernt.
deletion.failed=Secret konnte nicht entfernt werden.
management=Secret-Verwaltung
[actions] [actions]
actions=Actions actions=Actions
unit.desc=Actions verwalten
status.unknown=Unbekannt status.unknown=Unbekannt
status.waiting=Wartend
status.running=Laufend
status.success=Erfolg
status.failure=Fehler
status.cancelled=Abgebrochen
status.skipped=Übersprungen
status.blocked=Blockiert
runners=Runner
runners.runner_manage_panel=Runner-Verwaltung
runners.new=Neuen Runner erstellen
runners.new_notice=Wie man einen Runner startet
runners.status=Status
runners.id=ID runners.id=ID
runners.name=Name runners.name=Name
runners.owner_type=Typ runners.owner_type=Typ
runners.description=Beschreibung runners.description=Beschreibung
runners.labels=Labels runners.labels=Labels
runners.last_online=Letzte Online-Zeit
runners.agent_labels=Agent-Labels
runners.custom_labels=Benutzerdefinierte Labels runners.custom_labels=Benutzerdefinierte Labels
runners.custom_labels_helper=Benutzerdefinierte Labels sind Labels, die von einem Administrator manuell hinzugefügt werden. Labels werden durch Komma getrennt, Leerzeichen am Anfang und am Ende jedes Labels werden ignoriert. runners.custom_labels_helper=Benutzerdefinierte Labels sind Labels, die von einem Administrator manuell hinzugefügt werden. Labels werden durch Komma getrennt, Leerzeichen am Anfang und am Ende jedes Labels werden ignoriert.
runners.runner_title=Runner
runners.task_list=Letzte Aufgaben dieses Runners
runners.task_list.run=Ausführen runners.task_list.run=Ausführen
runners.task_list.status=Status
runners.task_list.repository=Repository runners.task_list.repository=Repository
runners.task_list.commit=Commit runners.task_list.commit=Commit
runners.task_list.done_at=Fertig um
runners.edit_runner=Runner bearbeiten
runners.update_runner=Änderungen anwenden
runners.update_runner_success=Runner erfolgreich aktualisiert
runners.update_runner_failed=Der Runner konnte nicht aktualisiert werden
runners.delete_runner=Diesen Runner löschen
runners.delete_runner_success=Runner erfolgreich gelöscht
runners.delete_runner_failed=Der Runner konnte nicht gelöscht werden
runners.delete_runner_header=Bestätigen, um diesen Runner zu löschen
runners.delete_runner_notice=Wenn eine Aufgabe auf diesem Runner ausgeführt wird, wird sie beendet und als fehlgeschlagen markiert. Dies könnte Workflows zerstören.
runners.none=Keine Runner verfügbar
runners.status.unspecified=Unbekannt runners.status.unspecified=Unbekannt
runners.status.idle=Inaktiv runners.status.idle=Inaktiv
runners.status.active=Aktiv runners.status.active=Aktiv
runners.status.offline=Offline runners.status.offline=Offline
runners.version=Version runners.version=Version
runners.reset_registration_token_success=Runner-Registrierungstoken erfolgreich zurückgesetzt
runs.all_workflows=Alle Workflows runs.all_workflows=Alle Workflows
runs.commit=Commit runs.commit=Commit
runs.pushed_by=Gepushed von runs.pushed_by=Gepushed von
runs.invalid_workflow_helper=Die Workflow-Konfigurationsdatei ist ungültig. Bitte überprüfen Sie Ihre Konfigurationsdatei: %s
runs.no_matching_runner_helper=Kein passender Runner: %s runs.no_matching_runner_helper=Kein passender Runner: %s
need_approval_desc=Um Workflows für den Pull-Request eines Forks auszuführen, ist eine Genehmigung erforderlich.
[projects] [projects]
type-1.display_name=Individuelles Projekt
type-2.display_name=Repository-Projekt
type-3.display_name=Organisationsprojekt

View File

@ -935,6 +935,7 @@ fork_from = Fork From
already_forked = You've already forked %s already_forked = You've already forked %s
fork_to_different_account = Fork to a different account fork_to_different_account = Fork to a different account
fork_visibility_helper = The visibility of a forked repository cannot be changed. fork_visibility_helper = The visibility of a forked repository cannot be changed.
fork_no_valid_owners = This repository can not be forked because there are no valid owners.
use_template = Use this template use_template = Use this template
clone_in_vsc = Clone in VS Code clone_in_vsc = Clone in VS Code
download_zip = Download ZIP download_zip = Download ZIP

View File

@ -49,6 +49,11 @@ var (
func apiError(ctx *context.Context, status int, obj any) { func apiError(ctx *context.Context, status int, obj any) {
helper.LogAndProcessError(ctx, status, obj, func(message string) { helper.LogAndProcessError(ctx, status, obj, func(message string) {
// The maven client does not present the error message to the user. Log it for users with access to server logs.
if status == http.StatusBadRequest || status == http.StatusInternalServerError {
log.Error(message)
}
ctx.PlainText(status, message) ctx.PlainText(status, message)
}) })
} }
@ -320,7 +325,8 @@ func UploadPackageFile(ctx *context.Context) {
var err error var err error
pvci.Metadata, err = maven_module.ParsePackageMetaData(buf) pvci.Metadata, err = maven_module.ParsePackageMetaData(buf)
if err != nil { if err != nil {
log.Error("Error parsing package metadata: %v", err) apiError(ctx, http.StatusBadRequest, err)
return
} }
if pvci.Metadata != nil { if pvci.Metadata != nil {

View File

@ -89,7 +89,6 @@ func SettingsPost(ctx *context.Context) {
// reset ctx.org.OrgLink with new name // reset ctx.org.OrgLink with new name
ctx.Org.OrgLink = setting.AppSubURL + "/org/" + url.PathEscape(form.Name) ctx.Org.OrgLink = setting.AppSubURL + "/org/" + url.PathEscape(form.Name)
log.Trace("Organization name changed: %s -> %s", org.Name, form.Name) log.Trace("Organization name changed: %s -> %s", org.Name, form.Name)
nameChanged = false
} }
// In case it's just a case change. // In case it's just a case change.
@ -130,11 +129,6 @@ func SettingsPost(ctx *context.Context) {
return return
} }
} }
} else if nameChanged {
if err := repo_model.UpdateRepositoryOwnerNames(org.ID, org.Name); err != nil {
ctx.ServerError("UpdateRepository", err)
return
}
} }
log.Trace("Organization setting updated: %s", org.Name) log.Trace("Organization setting updated: %s", org.Name)

View File

@ -174,6 +174,12 @@ func getForkRepository(ctx *context.Context) *repo_model.Repository {
ctx.Data["ContextUser"] = ctx.Doer ctx.Data["ContextUser"] = ctx.Doer
} else if len(orgs) > 0 { } else if len(orgs) > 0 {
ctx.Data["ContextUser"] = orgs[0] ctx.Data["ContextUser"] = orgs[0]
} else {
msg := ctx.Tr("repo.fork_no_valid_owners")
ctx.Data["Flash"] = ctx.Flash
ctx.Flash.Error(msg)
ctx.Data["CanForkRepo"] = false
return nil
} }
return forkRepo return forkRepo

View File

@ -196,7 +196,6 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
} }
ctx.Data["Releases"] = releases ctx.Data["Releases"] = releases
ctx.Data["ReleasesNum"] = len(releases)
pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5) pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
pager.SetDefaultParams(ctx) pager.SetDefaultParams(ctx)

View File

@ -58,7 +58,7 @@ func RenameUser(ctx context.Context, u *user_model.User, newUserName string) err
u.Name = oldUserName u.Name = oldUserName
return err return err
} }
return nil return repo_model.UpdateRepositoryOwnerNames(u.ID, newUserName)
} }
ctx, committer, err := db.TxContext(ctx) ctx, committer, err := db.TxContext(ctx)

View File

@ -125,7 +125,7 @@
{{end}} {{end}}
{{else if and .LatestPullRequest.HasMerged .MergeMovedOn}} {{else if and .LatestPullRequest.HasMerged .MergeMovedOn}}
{{if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} {{if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
<a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{$.Owner.Name}}:{{end}}{{.Name | PathEscapeSegments}}"> <a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}">
<button id="new-pull-request" class="ui compact basic button gt-mr-0">{{if $.CanPull}}{{$.locale.Tr "repo.pulls.compare_changes"}}{{else}}{{$.locale.Tr "action.compare_branch"}}{{end}}</button> <button id="new-pull-request" class="ui compact basic button gt-mr-0">{{if $.CanPull}}{{$.locale.Tr "repo.pulls.compare_changes"}}{{else}}{{$.locale.Tr "action.compare_branch"}}{{end}}</button>
</a> </a>
{{end}} {{end}}

View File

@ -5,7 +5,7 @@
<div class="gt-df"> <div class="gt-df">
<div class="gt-f1 gt-df gt-ac"> <div class="gt-f1 gt-df gt-ac">
<h2 class="ui compact small menu header small-menu-items"> <h2 class="ui compact small menu header small-menu-items">
<a class="{{if .PageIsReleaseList}}active {{end}}item" href="{{.RepoLink}}/releases">{{.locale.PrettyNumber .ReleasesNum}} {{.locale.TrN .ReleasesNum "repo.release" "repo.releases"}}</a> <a class="{{if .PageIsReleaseList}}active {{end}}item" href="{{.RepoLink}}/releases">{{.locale.PrettyNumber .NumReleases}} {{.locale.TrN .NumReleases "repo.release" "repo.releases"}}</a>
{{if $canReadCode}} {{if $canReadCode}}
<a class="{{if .PageIsTagList}}active {{end}}item" href="{{.RepoLink}}/tags">{{.locale.PrettyNumber .NumTags}} {{.locale.TrN .NumTags "repo.tag" "repo.tags"}}</a> <a class="{{if .PageIsTagList}}active {{end}}item" href="{{.RepoLink}}/tags">{{.locale.PrettyNumber .NumTags}} {{.locale.TrN .NumTags "repo.tag" "repo.tags"}}</a>
{{end}} {{end}}