mirror of
https://github.com/gogs/gogs.git
synced 2026-03-01 17:50:59 +01:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1100b5e34 | ||
|
|
ab2c6cb008 | ||
|
|
f2c3f4a944 | ||
|
|
6bc11c4450 | ||
|
|
643c85e9c8 | ||
|
|
ee9950ec2f | ||
|
|
dc10594d7b | ||
|
|
e02fac4968 | ||
|
|
5a88546a80 | ||
|
|
f67d6bbca3 | ||
|
|
c970c4ee41 | ||
|
|
3a6623104f | ||
|
|
b18a2bdcd3 | ||
|
|
d09eaef542 | ||
|
|
13cca8a66a | ||
|
|
8ed2330d6e | ||
|
|
261237745f | ||
|
|
c9d76a381b | ||
|
|
2961afe8fb | ||
|
|
ea03bee1b9 | ||
|
|
d1a96c2543 | ||
|
|
11b1498a6e | ||
|
|
f59500a90b | ||
|
|
3df25fadfa | ||
|
|
0e6a6bf880 | ||
|
|
e1f01305d8 | ||
|
|
23b83cb736 | ||
|
|
e16196124e | ||
|
|
ab2197bc75 | ||
|
|
a887e475e3 | ||
|
|
4400d2fdd9 |
@@ -8,11 +8,13 @@ watch_dirs = [
|
||||
"$WORKDIR/cmd",
|
||||
"$WORKDIR/models",
|
||||
"$WORKDIR/pkg",
|
||||
"$WORKDIR/routers"
|
||||
"$WORKDIR/routes"
|
||||
]
|
||||
watch_exts = [".go"]
|
||||
ignore_files = [".+_test.go"]
|
||||
build_delay = 1500
|
||||
interrupt_timout = 1
|
||||
graceful_kill = true
|
||||
cmds = [
|
||||
["make", "build-dev"], # TAGS=sqlite cert pam tidb
|
||||
["./gogs", "web"]
|
||||
|
||||
44
Dockerfile.rpihub
Normal file
44
Dockerfile.rpihub
Normal file
@@ -0,0 +1,44 @@
|
||||
FROM armhf/alpine:3.5
|
||||
|
||||
ENV GOGS_CUSTOM /data/gogs
|
||||
ENV QEMU_EXECVE 1
|
||||
|
||||
# For cross compile on dockerhub
|
||||
################################
|
||||
|
||||
COPY ./docker/armhf/qemu-arm-static /usr/bin/
|
||||
COPY ./docker/armhf/resin-xbuild /usr/bin/
|
||||
|
||||
RUN [ "/usr/bin/qemu-arm-static", "/bin/sh", "-c", "ln -s resin-xbuild /usr/bin/cross-build-start; ln -s resin-xbuild /usr/bin/cross-build-end; ln /bin/sh /bin/sh.real" ]
|
||||
|
||||
RUN [ "cross-build-start" ]
|
||||
|
||||
# Prepare the container
|
||||
#######################
|
||||
|
||||
# Install system utils & Gogs runtime dependencies
|
||||
ADD https://github.com/tianon/gosu/releases/download/1.9/gosu-armhf /usr/sbin/gosu
|
||||
RUN chmod +x /usr/sbin/gosu \
|
||||
&& apk --no-cache --no-progress add ca-certificates bash git linux-pam s6 curl openssh socat tzdata
|
||||
|
||||
COPY . /app/gogs/build
|
||||
WORKDIR /app/gogs/build
|
||||
|
||||
RUN ./docker/build-go.sh \
|
||||
&& ./docker/build.sh \
|
||||
&& ./docker/finalize.sh
|
||||
|
||||
# Configure LibC Name Service
|
||||
COPY docker/nsswitch.conf /etc/nsswitch.conf
|
||||
|
||||
# For cross compile on dockerhub
|
||||
################################
|
||||
|
||||
RUN [ "cross-build-end" ]
|
||||
|
||||
# Configure Docker Container
|
||||
############################
|
||||
VOLUME ["/data"]
|
||||
EXPOSE 22 3000
|
||||
ENTRYPOINT ["/app/gogs/docker/start.sh"]
|
||||
CMD ["/bin/s6-svscan", "/app/gogs/docker/s6/"]
|
||||
2
Makefile
2
Makefile
@@ -30,7 +30,7 @@ web: build
|
||||
|
||||
govet:
|
||||
$(GOVET) gogs.go
|
||||
$(GOVET) models pkg routers
|
||||
$(GOVET) models pkg routes
|
||||
|
||||
build: $(GENERATED)
|
||||
go install $(BUILD_FLAGS) -ldflags '$(LDFLAGS)' -tags '$(TAGS)'
|
||||
|
||||
12
cmd/hook.go
12
cmd/hook.go
@@ -11,6 +11,7 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
@@ -22,8 +23,10 @@ import (
|
||||
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/httplib"
|
||||
"github.com/gogits/gogs/pkg/mailer"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
http "github.com/gogits/gogs/routers/repo"
|
||||
"github.com/gogits/gogs/pkg/template"
|
||||
http "github.com/gogits/gogs/routes/repo"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -184,6 +187,13 @@ func runHookPostReceive(c *cli.Context) error {
|
||||
}
|
||||
setup(c, "hooks/post-receive.log", true)
|
||||
|
||||
// Post-receive hook does more than just gather Git information,
|
||||
// so we need to setup additional services for email notifications.
|
||||
setting.NewPostReceiveHookServices()
|
||||
mailer.NewContext()
|
||||
mailer.InitMailRender(path.Join(setting.StaticRootPath, "templates/mail"),
|
||||
path.Join(setting.CustomPath, "templates/mail"), template.NewFuncMap())
|
||||
|
||||
isWiki := strings.Contains(os.Getenv(http.ENV_REPO_CUSTOM_HOOKS_PATH), ".wiki.git/")
|
||||
|
||||
buf := bytes.NewBuffer(nil)
|
||||
|
||||
@@ -103,13 +103,19 @@ func runRestore(c *cli.Context) error {
|
||||
if !c.Bool("database-only") {
|
||||
os.MkdirAll(setting.AppDataPath, os.ModePerm)
|
||||
for _, dir := range []string{"attachments", "avatars"} {
|
||||
// Skip if backup archive does not have corresponding data
|
||||
srcPath := path.Join(archivePath, "data", dir)
|
||||
if !com.IsDir(srcPath) {
|
||||
continue
|
||||
}
|
||||
|
||||
dirPath := path.Join(setting.AppDataPath, dir)
|
||||
if com.IsExist(dirPath) {
|
||||
if err = os.Rename(dirPath, dirPath+".bak"); err != nil {
|
||||
log.Fatal(0, "Fail to backup current 'data': %v", err)
|
||||
}
|
||||
}
|
||||
if err = os.Rename(path.Join(archivePath, "data", dir), dirPath); err != nil {
|
||||
if err = os.Rename(srcPath, dirPath); err != nil {
|
||||
log.Fatal(0, "Fail to import 'data': %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ import (
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/models/errors"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
http "github.com/gogits/gogs/routers/repo"
|
||||
http "github.com/gogits/gogs/routes/repo"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
30
cmd/web.go
30
cmd/web.go
@@ -36,13 +36,13 @@ import (
|
||||
"github.com/gogits/gogs/pkg/mailer"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/pkg/template"
|
||||
"github.com/gogits/gogs/routers"
|
||||
"github.com/gogits/gogs/routers/admin"
|
||||
apiv1 "github.com/gogits/gogs/routers/api/v1"
|
||||
"github.com/gogits/gogs/routers/dev"
|
||||
"github.com/gogits/gogs/routers/org"
|
||||
"github.com/gogits/gogs/routers/repo"
|
||||
"github.com/gogits/gogs/routers/user"
|
||||
"github.com/gogits/gogs/routes"
|
||||
"github.com/gogits/gogs/routes/admin"
|
||||
apiv1 "github.com/gogits/gogs/routes/api/v1"
|
||||
"github.com/gogits/gogs/routes/dev"
|
||||
"github.com/gogits/gogs/routes/org"
|
||||
"github.com/gogits/gogs/routes/repo"
|
||||
"github.com/gogits/gogs/routes/user"
|
||||
)
|
||||
|
||||
var Web = cli.Command{
|
||||
@@ -160,7 +160,7 @@ func runWeb(c *cli.Context) error {
|
||||
if c.IsSet("config") {
|
||||
setting.CustomConf = c.String("config")
|
||||
}
|
||||
routers.GlobalInit()
|
||||
routes.GlobalInit()
|
||||
checkVersion()
|
||||
|
||||
m := newMacaron()
|
||||
@@ -175,17 +175,17 @@ func runWeb(c *cli.Context) error {
|
||||
// FIXME: not all routes need go through same middlewares.
|
||||
// Especially some AJAX requests, we can reduce middleware number to improve performance.
|
||||
// Routers.
|
||||
m.Get("/", ignSignIn, routers.Home)
|
||||
m.Get("/", ignSignIn, routes.Home)
|
||||
m.Group("/explore", func() {
|
||||
m.Get("", func(c *context.Context) {
|
||||
c.Redirect(setting.AppSubURL + "/explore/repos")
|
||||
})
|
||||
m.Get("/repos", routers.ExploreRepos)
|
||||
m.Get("/users", routers.ExploreUsers)
|
||||
m.Get("/organizations", routers.ExploreOrganizations)
|
||||
m.Get("/repos", routes.ExploreRepos)
|
||||
m.Get("/users", routes.ExploreUsers)
|
||||
m.Get("/organizations", routes.ExploreOrganizations)
|
||||
}, ignSignIn)
|
||||
m.Combo("/install", routers.InstallInit).Get(routers.Install).
|
||||
Post(bindIgnErr(form.Install{}), routers.InstallPost)
|
||||
m.Combo("/install", routes.InstallInit).Get(routes.Install).
|
||||
Post(bindIgnErr(form.Install{}), routes.InstallPost)
|
||||
m.Get("/^:type(issues|pulls)$", reqSignIn, user.Issues)
|
||||
|
||||
// ***** START: User *****
|
||||
@@ -651,7 +651,7 @@ func runWeb(c *cli.Context) error {
|
||||
})
|
||||
|
||||
// Not found handler.
|
||||
m.NotFound(routers.NotFound)
|
||||
m.NotFound(routes.NotFound)
|
||||
|
||||
// Flag for port number in case first time run conflict.
|
||||
if c.IsSet("port") {
|
||||
|
||||
@@ -39,7 +39,7 @@ your_profile=Váš profil
|
||||
your_settings=Vaše nastavení
|
||||
|
||||
activities=Aktivity
|
||||
pull_requests=Požadavky na natažení
|
||||
pull_requests=Pull Requesty
|
||||
issues=Úkoly
|
||||
|
||||
cancel=Zrušit
|
||||
@@ -56,7 +56,7 @@ user=Uživatel
|
||||
password=Heslo
|
||||
db_name=Název databáze
|
||||
db_helper=Prosím, pro MySQL použijte INNODB engine se znakovou sadou utf8_general_ci.
|
||||
ssl_mode=SSL Mód
|
||||
ssl_mode=SSL režim
|
||||
path=Cesta
|
||||
sqlite_helper=Cesta k SQLite3 databázi. <br>Prosím, použijte absolutní cestu, pokud startujete Gogs jako službu.
|
||||
err_empty_db_path=Cesta k SQLite3 databázi nemůže být prázdná.
|
||||
@@ -72,7 +72,7 @@ run_user=Účet pro spouštění
|
||||
run_user_helper=Tento uživatel musí mít přístup do kořenového adresáře repositářů a právo spustit Gogs.
|
||||
domain=Doména
|
||||
domain_helper=Toto ovlivňuje URL klonů skrze SSH.
|
||||
ssh_port=Port SSH
|
||||
ssh_port=SSH port
|
||||
ssh_port_helper=Číslo portu, které používá váš SSH server. Nechte jej prázdné pro vypnutí používání SSH.
|
||||
use_builtin_ssh_server=Použít vestavěný SSH server
|
||||
use_builtin_ssh_server_popup=Pro Git operace spustit vestavěný SSH server, aby byl rozpoznán od systémové SSH služby.
|
||||
@@ -149,22 +149,22 @@ search=Vyhledat
|
||||
create_new_account=Vytvořit nový účet
|
||||
register_hepler_msg=Již máte účet? Přihlašte se!
|
||||
social_register_hepler_msg=Již máte účet? Připojte se!
|
||||
disable_register_prompt=Omlouvám se, ale registrace jsou vypnuty. Prosím, spojte se správcem systému.
|
||||
disable_register_mail=Omlouvám se, e-mailové služby byly vypnuty. Prosím, spojte se správce serveru.
|
||||
disable_register_prompt=Omlouváme se, ale registrace jsou vypnuty. Kontaktujte správce systému.
|
||||
disable_register_mail=Omlouváme se, ale e-mailové služby jsou vypnuté. Kontaktujte správce systému.
|
||||
remember_me=Zapamatovat si mne
|
||||
forgot_password=Zapomenuté heslo
|
||||
forget_password=Zapomněli jste heslo?
|
||||
sign_up_now=Potřebujete účet? Zaregistrujte se.
|
||||
confirmation_mail_sent_prompt=Nový potvrzovací e-mail byl zaslán na <b>%s</b>, prosím, zkontrolujte si vaši doručenou poštu během následující %d hodin pro dokončení registračního procesu.
|
||||
confirmation_mail_sent_prompt=Na adresu <b>%s</b> byl zaslán nový potvrzovací e-mail. Zkontrolujte prosím vaši doručenou poštu během následujících %d hodin pro dokončení registračního procesu.
|
||||
active_your_account=Aktivujte si váš účet
|
||||
prohibit_login=Přihlášení zakázáno
|
||||
prohibit_login_desc=Vašemu účtu je zakázáno se přihlásit, kontaktujte prosím správce serveru.
|
||||
resent_limit_prompt=Omlouvám se, ale před chvílí jste požádal o aktivační e-mail. Prosím, počkejte 3 minuty a pak to zkuste znovu.
|
||||
resent_limit_prompt=Omlouváme se, ale před chvílí jste požádal o zaslání aktivačního e-mailu. Počkejte prosím 3 minuty a pak to zkuste znovu.
|
||||
has_unconfirmed_mail=Zdravím, %s, máte nepotvrzenou e-mailovou adresu (<b>%s</b>). Pokud jste nedostali potvrzovací e-mail nebo potřebujete zaslat nový, klikněte prosím na tlačítko níže.
|
||||
resend_mail=Klikněte zde pro odeslání aktivačního e-mailu
|
||||
send_reset_mail=Klikněte zde pro (znovu)poslání e-mailu pro změnu vašeho hesla
|
||||
resend_mail=Klikněte zde pro opakované odeslání aktivačního e-mailu
|
||||
send_reset_mail=Klikněte zde pro (opakované) odeslání e-mailu pro obnovu vašeho hesla
|
||||
reset_password=Obnova vašeho hesla
|
||||
invalid_code=Omlouvám se, ale kód potvrzení vašeho e-mailu vypršel nebo není správný.
|
||||
invalid_code=Omlouváme se, ale kód z vašeho potvrzovacího e-mailu už vypršel nebo není správný.
|
||||
reset_password_helper=Klikněte zde pro obnovu vašeho hesla
|
||||
password_too_short=Délka hesla musí být minimálně 6 znaků.
|
||||
non_local_account=Externí účty nemohou měnit hesla přes Gogs.
|
||||
@@ -175,7 +175,7 @@ login_two_factor_enter_recovery_code=Zadejte obnovovací kód dvoufaktorového o
|
||||
login_two_factor_recovery=Obnovení dvoufaktorového ověření
|
||||
login_two_factor_recovery_code=Obnovovací kód
|
||||
login_two_factor_enter_passcode=Zadejte přístupový kód dvoufaktorového ověření
|
||||
login_two_factor_invalid_recovery_code=Obnovovací kód byl již použit nebo není platný.
|
||||
login_two_factor_invalid_recovery_code=Obnovovací kód již byl použit nebo není platný.
|
||||
|
||||
[mail]
|
||||
activate_account=Prosím, aktivujte si váš účet
|
||||
@@ -195,7 +195,7 @@ RepoName=Název repositáře
|
||||
Email=E-mailová adresa
|
||||
Password=Heslo
|
||||
Retype=Zadejte znovu heslo
|
||||
SSHTitle=Název klíče SSH
|
||||
SSHTitle=Název SSH klíče
|
||||
HttpsUrl=HTTPS URL
|
||||
PayloadUrl=URL nákladu
|
||||
TeamName=Název týmu
|
||||
@@ -210,18 +210,18 @@ TreeName=Cesta k souboru
|
||||
Content=Obsah
|
||||
|
||||
require_error=` nemůže být prázdný.`
|
||||
alpha_dash_error=` musí být pouze písmena, číslice či znaky - a _ .`
|
||||
alpha_dash_dot_error=` musí být pouze písmena, číslice, tečka, čárka či znaky - a _ .`
|
||||
alpha_dash_dot_slash_error=` musí být validní písmena, čísla nebo pomlčka, podtržítko či tečka, čárka a nebo lomítka.`
|
||||
size_error=` musí být minimálně velikosti %s.`
|
||||
alpha_dash_error=` smí obsahovat pouze písmena, číslice, pomlčku a podtržítko.`
|
||||
alpha_dash_dot_error=` smí obsahovat pouze písmena, číslice, tečku, čárku, pomlčku a podtržítko.`
|
||||
alpha_dash_dot_slash_error=` smí obsahovat pouze písmena, číslice, tečku, čárku, pomlčku, podtržítko a lomítko.`
|
||||
size_error=` musí mít velikost %s.`
|
||||
min_size_error=` musí obsahovat nejméně %s znaků.`
|
||||
max_size_error=` musí obsahovat maximálně %s znaků.`
|
||||
email_error=` není správná e-mailová adresa.`
|
||||
url_error=` není správná URL.`
|
||||
email_error=` není platná e-mailová adresa.`
|
||||
url_error=` není platná URL.`
|
||||
include_error=` musí obsahovat řetězec '%s'.`
|
||||
unknown_error=Neznámá chyba:
|
||||
captcha_incorrect=Zadaná CAPTCHA se neshoduje.
|
||||
password_not_match=Heslo a heslo pro potvrzení nejsou shodné.
|
||||
password_not_match=Heslo a jeho potvrzení se neshodují.
|
||||
|
||||
username_been_taken=Uživatelské jméno je již obsazeno.
|
||||
repo_name_been_taken=Název repositáře je již obsazen.
|
||||
@@ -233,21 +233,21 @@ enterred_invalid_repo_name=Ujistěte se, prosím, že zadaný název repositář
|
||||
enterred_invalid_owner_name=Ujistěte se, prosím, že jméno vlastníka je zadáno správně.
|
||||
enterred_invalid_password=Ujistěte se, prosím, že zadané heslo je správné.
|
||||
user_not_exist=Zadaný uživatel neexistuje.
|
||||
last_org_owner=Odstranění posledního uživatele z týmu vlastníka není dovoleno, neboť vždy musí v každé organizaci existovat jeden vlastník.
|
||||
last_org_owner=Odstranění posledního uživatele z týmu vlastníků není dovoleno, protože každá organizace musí mít alespoň jednoho vlastníka.
|
||||
|
||||
invalid_ssh_key=Omlouvám se, ale není možné ověřit váš klíč SSH: %s
|
||||
unable_verify_ssh_key=Gogs nemohl ověřit váš klíč SSH, ale předpokládáme, že je platný, nicméně zkontrolujte jej prosím.
|
||||
invalid_ssh_key=Omlouváme se, ale váš SSH klíč není možné ověřit: %s
|
||||
unable_verify_ssh_key=Gogs nemohl ověřit váš SSH klíč, ale budeme předpokládat, že je platný. Přesto ho prosím zkontrolujte.
|
||||
auth_failed=Ověření selhalo: %v
|
||||
|
||||
still_own_repo=Váš účet stále vlastní minimálně jeden repositář. Musíte je nejdříve smazat nebo předat.
|
||||
still_has_org=Váš účet je stále členem minimálně jedné organizace. Je nutné ji nejdříve opustit nebo smazat vaše členství.
|
||||
still_own_repo=Váš účet stále vlastní nějaké repositáře. Nejdříve je musíte smazat nebo někomu předat.
|
||||
still_has_org=Váš účet je stále členem nějaké organizace. Je nutné ji nejdříve opustit nebo se vzdát členství.
|
||||
org_still_own_repo=Tato organizace stále vlastní repositáře, musíte je nejdříve smazat nebo předat.
|
||||
|
||||
target_branch_not_exist=Cílová větev neexistuje.
|
||||
|
||||
[user]
|
||||
change_avatar=Změnit vaši uživatelskou ikonu
|
||||
join_on=Připojil se dne
|
||||
join_on=Zaregistroval se dne
|
||||
repositories=Repositáře
|
||||
activity=Veřejná aktivita
|
||||
followers=Sledující
|
||||
@@ -263,7 +263,7 @@ form.name_pattern_not_allowed=Vzor uživatelského jména '%s' není povolen.
|
||||
profile=Profil
|
||||
password=Heslo
|
||||
avatar=Uživatelská ikona
|
||||
ssh_keys=Klíče SSH
|
||||
ssh_keys=SSH klíče
|
||||
security=Bezpečnost
|
||||
repos=Repositáře
|
||||
orgs=Organizace
|
||||
@@ -314,20 +314,20 @@ add_email=Přidat e-mailovou adresu
|
||||
add_email_confirmation_sent=Nový potvrzovací e-mail byl odeslán na adresu '%s', prosím zkontrolujte si vaši doručenou poštu během následujících %d hodin pro dokončení procesu potvrzení.
|
||||
add_email_success=Vaše nová e-mailová adresa byla přidána.
|
||||
|
||||
manage_ssh_keys=Správa klíčů SSH
|
||||
manage_ssh_keys=Správa SSH klíčů
|
||||
add_key=Přidat klíč
|
||||
ssh_desc=Toto je seznam klíčů SSH vašeho účtu. Jelikož tyto samotné klíče umožňují přístup k vašim repositářům, je velmi důležité, abyste je rozpoznal.
|
||||
ssh_helper=<strong>Nevíte jak?</strong> Podívejte se do příručky GitHubu na to <a href="%s">vytvoření vlastních klíčů SSH</a> nebo vyřešte <a href="%s">bežné problémy</a>, se kterými se můžete potkat při použití SSH.
|
||||
add_new_key=Přidat klíč SSH
|
||||
ssh_desc=Toto je seznam SSH klíčů vašeho účtu. Tyto klíče umožňují plný přístup k vašim repositářům, proto je velmi důležité, abyste jste si byli jistí, že jsou skutečně vaše.
|
||||
ssh_helper=<strong>Nevíte jak?</strong> Podívejte se do příručky GitHubu jak si <a href="%s">vytvořit vlastní SSH klíč</a>, nebo na <a href="%s">řešení častých problémů</a>, na které můžete narazit při používání SSH.
|
||||
add_new_key=Přidat SSH klíč
|
||||
ssh_key_been_used=Obsah veřejného klíče byl použit.
|
||||
ssh_key_name_used=Veřejný klíč se stejným jménem již existuje.
|
||||
key_name=Název klíče
|
||||
key_content=Obsah
|
||||
add_key_success=Nový klíč SSH '%s' byl přidán!
|
||||
add_key_success=Byl přidán nový SSH klíč '%s'!
|
||||
delete_key=Smazat
|
||||
ssh_key_deletion=Smazání klíče SSH
|
||||
ssh_key_deletion_desc=Smazání tohoto klíče SSH odstraní všechny související přístupy k vašemu účtu. Chcete pokračovat?
|
||||
ssh_key_deletion_success=Klíč SSH byl smazán!
|
||||
ssh_key_deletion=Smazání SSH klíče
|
||||
ssh_key_deletion_desc=Smazání tohoto SSH klíče odstraní všechny související přístupy k vašemu účtu. Chcete pokračovat?
|
||||
ssh_key_deletion_success=SSH klíč úspěšně odstraněn!
|
||||
add_on=Přidán dne
|
||||
last_used=Naposledy použit dne
|
||||
no_activity=Žádná aktuální aktivita
|
||||
@@ -459,7 +459,7 @@ filter_branch_and_tag=Filtr pro větev nebo značku
|
||||
branches=Větve
|
||||
tags=Značky
|
||||
issues=Úkoly
|
||||
pulls=Požadavky na natažení
|
||||
pulls=Pull Requesty
|
||||
labels=Štítky
|
||||
milestones=Milníky
|
||||
commits=Revize
|
||||
@@ -836,7 +836,7 @@ settings.slack_channel=Kanál
|
||||
settings.deploy_keys=Klíče pro nasazení
|
||||
settings.deploy_keys_helper=<b>Přichycen při činu!</b> Pokud chcete přidat osobní veřejné klíče, zadejte je prosím v <a href="%s%s">nastavení vašeho účtu</a>.
|
||||
settings.add_deploy_key=Přidat klíč pro nasazení
|
||||
settings.deploy_key_desc=Klíče pro nasazení mají pouze přístup ke čtení. Nejsou stejné jako osobní klíče SSH.
|
||||
settings.deploy_key_desc=Klíče pro nasazení mají pouze přístup ke čtení. Nejsou stejné jako osobní SSH klíče.
|
||||
settings.no_deploy_keys=Žádné klíče pro nasazení nebyly ještě přidány.
|
||||
settings.title=Název
|
||||
settings.deploy_key_content=Obsah
|
||||
@@ -1098,16 +1098,16 @@ auths.bind_password=Heslo připojení
|
||||
auths.bind_password_helper=Upozornění: Toto heslo je ukládáno nešifrované. Nepoužívejte pro správcovské účty.
|
||||
auths.user_base=Výchozí místo hledání uživatelů
|
||||
auths.user_dn=DN uživatele
|
||||
auths.attribute_username=Uživatelské jméno
|
||||
auths.attribute_username=Atribut uživatelského jména
|
||||
auths.attribute_username_placeholder=Nechte toto pole prázdné pro použití hodnoty pole uživatelského jména z přihlašovacího formuláře.
|
||||
auths.attribute_name=First Name Attribute
|
||||
auths.attribute_surname=Příjmení
|
||||
auths.attribute_mail=E-mailová adresa
|
||||
auths.verify_group_membership=Verify group membership
|
||||
auths.group_search_base_dn=Group Search Base DN
|
||||
auths.group_filter=Group Filter
|
||||
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
|
||||
auths.user_attribute_listed_in_group=User Attribute Listed in Group
|
||||
auths.attribute_name=Atribut křestního jména
|
||||
auths.attribute_surname=Atribut příjmení
|
||||
auths.attribute_mail=Atribut e-mailové adresy
|
||||
auths.verify_group_membership=Ověřovat členství ve skupině
|
||||
auths.group_search_base_dn=Základní DN pro vyhledávání skupin
|
||||
auths.group_filter=Skupinový filtr
|
||||
auths.group_attribute_contain_user_list=Skupinový atribut, který obsahuje seznam uživatelů
|
||||
auths.user_attribute_listed_in_group=Atribut uživatele (ve skupině)
|
||||
auths.attributes_in_bind=Vyzvednout atributy v kontextu Bind DN
|
||||
auths.filter=Uživatelský filtr
|
||||
auths.admin_filter=Správcovský filtr
|
||||
@@ -1175,7 +1175,7 @@ config.db_type=Typ
|
||||
config.db_host=Server
|
||||
config.db_name=Název
|
||||
config.db_user=Uživatel
|
||||
config.db_ssl_mode=Režim SSL
|
||||
config.db_ssl_mode=SSL režim
|
||||
config.db_ssl_mode_helper=(pouze pro 'postgres')
|
||||
config.db_path=Cesta
|
||||
config.db_path_helper=(pro "sqlite3" a "tidb")
|
||||
|
||||
@@ -641,8 +641,8 @@ milestones.open_tab=%d offen
|
||||
milestones.close_tab=%d geschlossen
|
||||
milestones.closed=Geschlossen %s
|
||||
milestones.no_due_date=Kein Fälligkeitsdatum
|
||||
milestones.open=Offen
|
||||
milestones.close=Geschlossen
|
||||
milestones.open=Öffnen
|
||||
milestones.close=Schließen
|
||||
milestones.new_subheader=Erstellen Sie Meilensteine, um ihre Issues zu organisieren.
|
||||
milestones.create=Meilenstein erstellen
|
||||
milestones.title=Titel
|
||||
@@ -745,12 +745,12 @@ settings.convert_notices_1=- Dieser Vorgang wandelt das Mirror-Repository in ein
|
||||
settings.convert_confirm=Umwandlung bestätigen
|
||||
settings.convert_succeed=Das Repository wurde erfolgreich in ein normales Repository umgewandelt.
|
||||
settings.transfer=Besitz übertragen
|
||||
settings.transfer_desc=Dieses Repository auf einen anderen Benutzer bzw. eine Organisation in der Sie Admin-Rechte haben übertragen.
|
||||
settings.transfer_desc=Dieses Repository auf einen anderen Benutzer oder eine Organisation, in der Sie Admin-Rechte haben, übertragen.
|
||||
settings.transfer_notices_1=- Sie werden keinen Zugriff mehr haben, wenn der neue Besitzer ein individueller Benutzer ist.
|
||||
settings.transfer_notices_2=- Sie werden weiterhin Zugriff haben, wenn der neue Besitzer eine Organisation ist und Sie einer der Besitzer sind.
|
||||
settings.transfer_form_title=Bitte geben Sie die folgenden Informationen ein, um die Operation zu bestätigen:
|
||||
settings.wiki_delete=Wiki-Daten löschen
|
||||
settings.wiki_delete_desc=Das Löschen von Wiki Daten kann nicht rückgängig gemacht werden. Bitte seien Sie vorsichtig.
|
||||
settings.wiki_delete_desc=Das Löschen von Wiki-Daten kann nicht rückgängig gemacht werden. Bitte seien Sie vorsichtig.
|
||||
settings.wiki_delete_notices_1=- Dies löscht und deaktiviert das Wiki für %s
|
||||
settings.wiki_deletion_success=Repository Wiki Daten erfolgreich gelöscht.
|
||||
settings.delete=Dieses Repository löschen
|
||||
|
||||
@@ -1100,7 +1100,7 @@ auths.user_base=Base de búsqueda de usuarios
|
||||
auths.user_dn=DN de Usuario
|
||||
auths.attribute_username=Atributo de nombre de usuario
|
||||
auths.attribute_username_placeholder=Dejar vacío para usar el campo de inicio de sesión como nombre de usuario.
|
||||
auths.attribute_name=First Name Attribute
|
||||
auths.attribute_name=Atributo nombre
|
||||
auths.attribute_surname=Atributo apellido
|
||||
auths.attribute_mail=Atributo correo electrónico
|
||||
auths.verify_group_membership=Verify group membership
|
||||
|
||||
@@ -119,7 +119,7 @@ sqlite3_not_available=Votre version publiée ne prend pas en charge SQLite3. Veu
|
||||
invalid_db_setting=Paramètres de base de données incorrects : %v
|
||||
invalid_repo_path=Chemin vers la racine du dépôt invalide : %v
|
||||
run_user_not_match=L'utilisateur d'exécution saisi n'est pas l'utilisateur d'exécution actuel : %s -> %s
|
||||
smtp_host_missing_port=SMTP Host is missing port in address.
|
||||
smtp_host_missing_port=Le numéro de port est manquant dans l'adresse de l'Hôte SMTP.
|
||||
invalid_smtp_from=Le champ SMTP Provenant de n'est pas valide: %v
|
||||
save_config_failed=La sauvegarde de la configuration a échoué : %v
|
||||
invalid_admin_setting=Paramètres du compte administrateur invalides : %v
|
||||
@@ -158,7 +158,7 @@ sign_up_now=Pas de compte ? Inscrivez-vous maintenant.
|
||||
confirmation_mail_sent_prompt=Un nouveau mail de confirmation à été envoyé à <b>%s</b>. Veuillez vérifier votre boîte de réception dans un délai de %d heures pour compléter votre enregistrement.
|
||||
active_your_account=Activer votre compte
|
||||
prohibit_login=Connexion interdite
|
||||
prohibit_login_desc=Votre compte est interdit de se connecter, contactez l’administrateur du site.
|
||||
prohibit_login_desc=La connexion avec ce compte est interdite ; contactez l'administrateur du site.
|
||||
resent_limit_prompt=Désolé, vos tentatives d'activation sont trop fréquentes. Veuillez réessayer dans 3 minutes.
|
||||
has_unconfirmed_mail=Bonjour %s, votre adresse e-mail (<b>%s</b>) n'a pas été confirmée. Si vous n'avez reçu aucun mail de confirmation ou souhaitez renouveler l'envoi, cliquez sur le bouton ci-dessous.
|
||||
resend_mail=Cliquez ici pour renvoyer un mail de confirmation
|
||||
@@ -170,12 +170,12 @@ password_too_short=Le mot de passe doit contenir 6 caractères minimum.
|
||||
non_local_account=Les comptes non locaux ne peuvent pas changer leur mot de passe via Gogs.
|
||||
|
||||
login_two_factor=Authentification en deux étapes
|
||||
login_two_factor_passcode=Mot de passe d’authentification
|
||||
login_two_factor_passcode=Mot de passe d'authentification
|
||||
login_two_factor_enter_recovery_code=Entrez un code de récupération en deux étapes
|
||||
login_two_factor_recovery=Récupération en deux étapes
|
||||
login_two_factor_recovery_code=Code de récupération
|
||||
login_two_factor_enter_passcode=Entrez un code d'authentification en deux étapes
|
||||
login_two_factor_invalid_recovery_code=Code de récupération a été utilisé ou n’est pas valide.
|
||||
login_two_factor_invalid_recovery_code=Code de récupération a été utilisé ou n'est pas valide.
|
||||
|
||||
[mail]
|
||||
activate_account=Veuillez activer votre compte
|
||||
@@ -343,7 +343,7 @@ two_factor_disable=Désactiver
|
||||
two_factor_view_recovery_codes=Voir et sauvegarder <a href="%s%s">vos codes de récupération</a> dans un endroit sécurisé. Vois pouvez les utiliser comme mot de passe si vous perdez l'accès à l'application d'authentification.
|
||||
two_factor_http=Vous ne pouvez plus utiliser un nom d'utilisateur et mot de passe en clair pour les opérations en HTTP/HTTPS. Merci de créer et d'utiliser un <a href="%[1]s%[2]s">jeton d'accès personnel</a> comme moyen d'identification, par exemple <code>%[3]s</code>.
|
||||
two_factor_enable_title=Activer l'authentification en deux étapes
|
||||
two_factor_scan_qr=Veuillez utiliser votre application d’authentification pour numériser l’image :
|
||||
two_factor_scan_qr=Veuillez utiliser votre application d'authentification pour numériser l'image :
|
||||
two_factor_or_enter_secret=Ou entrez la phrase secrète :
|
||||
two_factor_then_enter_passcode=Puis entrez le mot de passe :
|
||||
two_factor_verify=Vérifier
|
||||
@@ -506,16 +506,16 @@ editor.new_branch_name_desc=Nouveau nom de la branche...
|
||||
editor.cancel=Annuler
|
||||
editor.filename_cannot_be_empty=Nom de fichier ne peut pas être vide.
|
||||
editor.branch_already_exists=La branche '%s' existe déjà dans ce dépôt.
|
||||
editor.directory_is_a_file=L'entrée '%s' dans le chemin d’accès parent est un fichier pas un répertoire dans ce dépôt.
|
||||
editor.directory_is_a_file=L'entrée '%s' dans le chemin d'accès parent est un fichier, pas un répertoire dans ce dépôt.
|
||||
editor.file_is_a_symlink=Le fichier « %s » est un lien symbolique qui ne peut être modifié depuis l'éditeur web.
|
||||
editor.filename_is_a_directory=Le nom de fichier '%s' existe déjà dans ce dépot.
|
||||
editor.file_editing_no_longer_exists=Le fichier '%s' que vous modifiez n'existe plus dans le dépôt.
|
||||
editor.file_changed_while_editing=Le contenu du fichier à changé depuis que vous avez commencé à l'éditer. <a target="_blank" href="%s">Cliquez ici</a> pour voir ce qui à été modifié ou <strong>appuyez sur commit encore une fois</strong> pour remplacer ces changements.
|
||||
editor.file_already_exists=La branche '%s' existe déjà dans ce dépôt.
|
||||
editor.no_changes_to_show=Il n’y a aucun changement à afficher.
|
||||
editor.fail_to_update_file=Échec lors de la mise à jour/création du fichier '%s' avec l’erreur : %v
|
||||
editor.fail_to_update_file=Échec lors de la mise à jour/création du fichier '%s' avec l'erreur : %v
|
||||
editor.add_subdir=Ajouter un sous-répertoire...
|
||||
editor.unable_to_upload_files=Échec lors de l'envoie du fichier '%s' avec l’erreur : %v
|
||||
editor.unable_to_upload_files=Échec lors de l'envoie du fichier '%s' avec l'erreur : %v
|
||||
editor.upload_files_to_dir=Transférer les fichiers vers '%s'
|
||||
|
||||
commits.commit_history=Historique des commits
|
||||
@@ -726,7 +726,7 @@ settings.external_wiki_url=URL Wiki externe
|
||||
settings.external_wiki_url_desc=Les visiteurs seront redirigés vers cette URL lorsqu'ils cliqueront sur l'onglet.
|
||||
settings.issues_desc=Activer le système de tickets
|
||||
settings.use_internal_issue_tracker=Utiliser le système simplifié de tickets interne
|
||||
settings.allow_public_issues_desc=Permettre l’accès du public aux tickets lorsque le dépôt est privé
|
||||
settings.allow_public_issues_desc=Permettre l'accès du public aux tickets lorsque le dépôt est privé
|
||||
settings.use_external_issue_tracker=Utiliser un bug-tracker externe
|
||||
settings.external_tracker_url=Adresse de l'issue tracker externe
|
||||
settings.external_tracker_url_desc=Les visiteurs seront redirigés vers cette URL lorsqu'ils cliqueront sur l'onglet.
|
||||
@@ -757,7 +757,7 @@ settings.delete=Supprimer ce dépôt
|
||||
settings.delete_desc=Attention, cette action est action irréversible. Soyez sûr de vous.
|
||||
settings.delete_notices_1=- Cette opération <strong>ne peut pas </strong> être annulée.
|
||||
settings.delete_notices_2=- Cette opération supprimera définitivement le dépôt, y compris les données Git, les tickets, les commentaires et les accès des collaborateurs.
|
||||
settings.delete_notices_fork_1=-Tous les forks deviendront indépendants après l’effacement.
|
||||
settings.delete_notices_fork_1=-Tous les forks deviendront indépendants après l'effacement.
|
||||
settings.deletion_success=Le dépôt a été supprimé avec succès!
|
||||
settings.update_settings_success=Options mises à jour avec succès.
|
||||
settings.transfer_owner=Nouveau propriétaire
|
||||
@@ -1103,10 +1103,10 @@ auths.attribute_username_placeholder=Laisser vide pour utiliser la valeur du for
|
||||
auths.attribute_name=First Name Attribute
|
||||
auths.attribute_surname=Attribut du nom de famille
|
||||
auths.attribute_mail=Attribut de l'e-mail
|
||||
auths.verify_group_membership=Verify group membership
|
||||
auths.verify_group_membership=Vérifier l'appartenance à un groupe
|
||||
auths.group_search_base_dn=Group Search Base DN
|
||||
auths.group_filter=Group Filter
|
||||
auths.group_attribute_contain_user_list=Group Attribute Containing List of Users
|
||||
auths.group_filter=Filtre par groupe
|
||||
auths.group_attribute_contain_user_list=Attribut de groupe contenant la liste des utilisateurs
|
||||
auths.user_attribute_listed_in_group=User Attribute Listed in Group
|
||||
auths.attributes_in_bind=Aller chercher les attributs dans le contexte de liaison DN
|
||||
auths.filter=Filtre utilisateur
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
app_desc=Fájdalommentes, saját gépre telepíthető Git szolgáltatás
|
||||
|
||||
home=Kezdőlap
|
||||
dashboard=Vezérlőpult
|
||||
dashboard=Áttekintés
|
||||
explore=Felfedezés
|
||||
help=Súgó
|
||||
sign_in=Bejelentkezés
|
||||
@@ -27,7 +27,7 @@ repository=Tároló
|
||||
organization=Szervezet
|
||||
mirror=Tükör
|
||||
new_repo=Új tároló
|
||||
new_migrate=Új költözés
|
||||
new_migrate=Új migráció
|
||||
new_mirror=Új tükör
|
||||
new_fork=Új tároló másolása
|
||||
new_org=Új szervezet
|
||||
@@ -35,8 +35,8 @@ manage_org=Szervezetek kezelése
|
||||
admin_panel=Rendszergazdai felület
|
||||
account_settings=Fiók beállításai
|
||||
settings=Beállítások
|
||||
your_profile=Profilod
|
||||
your_settings=Beállításaid
|
||||
your_profile=Profilom
|
||||
your_settings=Beállításaim
|
||||
|
||||
activities=Tevékenységek
|
||||
pull_requests=Pull request-ek
|
||||
@@ -47,7 +47,7 @@ cancel=Mégse
|
||||
[install]
|
||||
install=Telepítés
|
||||
title=Telepítés első indításkor
|
||||
docker_helper=Ha a Docker alatt futtatod a Gogs-ot, olvasd el az <a target="_blank" href="%s">irányelveket</a> figyelmesen, mielőtt bármit megváltoztatsz ezen az oldalon!
|
||||
docker_helper=Ha Docker alatt fut a Gogs, akkor kérjük, figyelmesen olvassa el az <a target="_blank" href="%s">irányelveket</a>, mielőtt bármit megváltoztat ezen az oldalon!
|
||||
requite_db_desc=A Gogs-hoz szükséges a MySQL, PostgreSQL, SQLite3, MSSQL vagy a TiDB valamelyike.
|
||||
db_title=Adatbázis beállításai
|
||||
db_type=Adatbázis-kezelő
|
||||
@@ -55,25 +55,25 @@ host=Kiszolgáló
|
||||
user=Felhasználónév
|
||||
password=Jelszó
|
||||
db_name=Adatbázis neve
|
||||
db_helper=MySQL szerveren használj INNODB motort utf8_general_ci karakterkészlettel.
|
||||
db_helper=MySQL szerveren kérjük használjon INNODB motort utf8_general_ci karakterkészlettel.
|
||||
ssl_mode=SSL mód
|
||||
path=Elérési út
|
||||
sqlite_helper=SQLite3 vagy a TiDB adatbázis fájljának elérési útvonala. <br>Kérjük használja az abszolút elérési utat, a szolgáltatás indításakor.
|
||||
err_empty_db_path=SQLite3 adatbázis elérési út nem lehet üres.
|
||||
no_admin_and_disable_registration=Nem tilthatod le a regisztrációt, amíg nem hozol létre egy rendszergazdai fiókot.
|
||||
no_admin_and_disable_registration=Nem tilthatja le a regisztrációt, amíg nem hoz létre egy rendszergazdai fiókot.
|
||||
err_empty_admin_password=Rendszergazdai jelszó nem lehet üres.
|
||||
|
||||
general_title=Alkalmazás általános beállításai
|
||||
app_name=Alkalmazás neve
|
||||
app_name_helper=Adj meg valami izgalmas nevet!
|
||||
app_name_helper=Adjon meg valami izgalmas nevet!
|
||||
repo_path=Tárolók alapkönyvtára
|
||||
repo_path_helper=Ebben a könyvtárban lesznek a Git tárolók.
|
||||
run_user=Futtató felhasználó
|
||||
run_user_helper=Ezen felhasználónak jogosultnak kell lennie a tárolók elérésére és a Gogs futtatására.
|
||||
domain=Tartomány
|
||||
domain_helper=Ez az alapja az SSH másolás URL címének.
|
||||
domain_helper=Ez befolyásolja az SSH klón URL-eket.
|
||||
ssh_port=SSH port
|
||||
ssh_port_helper=Az SSH kiszolgáló portszáma, hagyd üresen az SSH letiltásához.
|
||||
ssh_port_helper=Ezt a portot fogja használni az SSH szerver, hagyja üresen az SSH letiltásához.
|
||||
use_builtin_ssh_server=Beépített SSH szerver használata
|
||||
use_builtin_ssh_server_popup=Indítsa el a beépített SSH szervert a Git műveletekhez elkülönítve a rendszer SSH démontól.
|
||||
http_port=HTTP port
|
||||
@@ -107,7 +107,7 @@ enable_captcha=Ellenőrző kód engedélyezése
|
||||
enable_captcha_popup=Ellenőrző kódot kér a felhasználói regisztrációnál.
|
||||
require_sign_in_view=Bejelentkezés megkövetelése az oldalak megtekintéséhez
|
||||
require_sign_in_view_popup=Csak bejelentkezett felhasználók nézhetik meg az oldalakat; a látogatók csak a bejelentkező oldalt láthatják.
|
||||
admin_setting_desc=Nem szükséges beállítanod rendszergazdai fiókot, az első felhasználó (ID=1) automatikusan rendszergazdai jogokat kap.
|
||||
admin_setting_desc=Nem szükséges most beállítania rendszergazdai fiókot, mert az első felhasználó (ID=1) automatikusan rendszergazdai jogokat kap.
|
||||
admin_title=Rendszergazda fiók beállításai
|
||||
admin_name=Felhasználónév
|
||||
admin_password=Jelszó
|
||||
@@ -147,14 +147,14 @@ search=Keresés
|
||||
|
||||
[auth]
|
||||
create_new_account=Új fiók létrehozása
|
||||
register_hepler_msg=Van már felhasználói fiókod? Jelentkezz be!
|
||||
register_hepler_msg=Van már felhasználói fiókja? Jelentkezz be!
|
||||
social_register_hepler_msg=Van már fiókod? Csatold most!
|
||||
disable_register_prompt=Elnézést, a regisztrációt kikapcsolták. Kérlek szólj az oldal adminisztrátorának.
|
||||
disable_register_mail=Elnézést, az email regisztráció megerősítését kikapcsolták.
|
||||
remember_me=Emlékezz rám
|
||||
forgot_password=Elfelejtett jelszó
|
||||
forget_password=Elfelejtetted a jelszavad?
|
||||
sign_up_now=Szeretnél bejelentkezni? Regisztrálj most.
|
||||
forget_password=Elfelejtette a jelszavát?
|
||||
sign_up_now=Szeretne bejelentkezni? Regisztráljon most.
|
||||
confirmation_mail_sent_prompt=Új megerősítő emailt küldtünk <b>%s</b> címre, kérlek keresd a postafiókodban az elkövetkező %d órában, hogy befejezhesd a regisztrációs folyamatot.
|
||||
active_your_account=Aktiváld a fiókod
|
||||
prohibit_login=A bejelentkezés tiltva
|
||||
@@ -165,7 +165,7 @@ resend_mail=Kattints ide hogy újraküldd az aktiváló emailt
|
||||
send_reset_mail=Kattints ide hogy újraküldd a jelszó visszaállító emailt
|
||||
reset_password=Jelszó visszaállítása
|
||||
invalid_code=Elnézést, a megerősítő kód lejárt vagy hibás.
|
||||
reset_password_helper=Kattints ide hogy visszaállítsd a jelszavad
|
||||
reset_password_helper=A jelszó visszaállításához kattintson ide
|
||||
password_too_short=A jelszó nem lehet 6-nál rövidebb.
|
||||
non_local_account=Nem helyi felhasználó nem cserélhet jelszót a Gogsban.
|
||||
|
||||
@@ -181,7 +181,7 @@ login_two_factor_invalid_recovery_code=Helyreállító kód már felhasználásr
|
||||
activate_account=Kérlek aktiváld a fiókod
|
||||
activate_email=Ellenőrizd az email címed
|
||||
reset_password=Állítsd vissza a jelszavad
|
||||
register_success=Sikeres regisztráció, üdvözlünk
|
||||
register_success=Sikeres regisztráció, üdvözöljük
|
||||
register_notify=Üdvözlünk a fedélzeten
|
||||
|
||||
[modal]
|
||||
@@ -229,8 +229,8 @@ org_name_been_taken=A szervezet neve már foglalt.
|
||||
team_name_been_taken=Az a csapatnév már foglalt.
|
||||
email_been_used=Ezt az email címet már felhasználták.
|
||||
username_password_incorrect=Felhasználó név vagy jelszó hibás.
|
||||
enterred_invalid_repo_name=Kérlek ellenőrizd, hogy a tároló neve helyes.
|
||||
enterred_invalid_owner_name=Kérlek ellenőrizd, hogy a tulajdonos neve helyes.
|
||||
enterred_invalid_repo_name=Kérjük, ellenőrizze, hogy a tároló neve helyes.
|
||||
enterred_invalid_owner_name=Kérjük, ellenőrizze, hogy a tulajdonos neve helyes.
|
||||
enterred_invalid_password=Kérlek ellenőrizd, hogy a beírt jelszó helyes.
|
||||
user_not_exist=A megadott felhasználó nem létezik.
|
||||
last_org_owner=Az utolsó felhasználót nem lehet eltávolítani a csapatból, mert egy tulajdonos kell legyen minden szervezetben.
|
||||
@@ -256,7 +256,7 @@ following=Követve
|
||||
follow=Követés
|
||||
unfollow=Követés törlése
|
||||
|
||||
form.name_reserved=Felhasználónév '%s' foglalt.
|
||||
form.name_reserved='%s' felhasználónév már foglalt.
|
||||
form.name_pattern_not_allowed=A felhasználónév ('%s') nem engedélyezett.
|
||||
|
||||
[settings]
|
||||
@@ -302,12 +302,12 @@ password_change_disabled=Csak helyi felhasználók változtathatják meg jelszav
|
||||
|
||||
emails=E-mail címek
|
||||
manage_emails=E-mail címek kezelése
|
||||
email_desc=Elsődleges e-mail címedet használjuk értesítésekre és más műveletekre.
|
||||
email_desc=Elsődleges e-mail címét használjuk értesítésekre és más műveletekre.
|
||||
primary=Elsődleges
|
||||
primary_email=Beállítás elsődlegesként
|
||||
delete_email=Törlés
|
||||
email_deletion=E-mail cím törlése
|
||||
email_deletion_desc=Az e-mail cím törlése kapcsolódó adatokat is eltávolít a fiókodból. Biztosan folytatod?
|
||||
email_deletion_desc=Az e-mail cím törlése kapcsolódó adatokat is eltávolít a fiókjából. Biztosan folytatja?
|
||||
email_deletion_success=Az e-mail címet töröltük!
|
||||
add_new_email=Új email cím felvétele
|
||||
add_email=Email felvétele
|
||||
@@ -401,11 +401,11 @@ fork_visiblity_helper=Nem módosíthatod egy fork-olt repository láthatóságá
|
||||
repo_desc=Leírás
|
||||
repo_lang=Nyelv
|
||||
repo_gitignore_helper=Válasszon .gitignore sablont
|
||||
license=Licensz
|
||||
license_helper=Licenszfájl kiválasztása
|
||||
license=Licenc
|
||||
license_helper=Licencfájl kiválasztása
|
||||
readme=Olvassel
|
||||
readme_helper=Válassz egy readme sablont
|
||||
auto_init=Repository megkezdése a kijelölt fájlokkal és sablonokkal
|
||||
auto_init=Tároló inicializálása a kiválasztott fájlokkal és sablonokkal
|
||||
create_repo=Tároló létrehozása
|
||||
default_branch=Alapértelmezett branch
|
||||
mirror_prune=Prune
|
||||
@@ -418,26 +418,26 @@ watchers=Figyelők
|
||||
stargazers=Csillagvizsgálók
|
||||
forks=Másolások
|
||||
|
||||
form.reach_limit_of_creation=A tulajdonos túllépte a maximum létrehozható repository-k számát (%d).
|
||||
form.reach_limit_of_creation=A tulajdonos túllépte a maximum létrehozható tárolók számát (%d).
|
||||
form.name_reserved=Ez a tároló név ('%s') le van foglalva.
|
||||
form.name_pattern_not_allowed=Ez a tároló név ('%s') nem megengedett.
|
||||
|
||||
need_auth=Engedély szükség
|
||||
migrate_type=Az áttelepítés-típust
|
||||
need_auth=Hitelesítés szükséges
|
||||
migrate_type=Migráció típusa
|
||||
migrate_type_helper=Ez a repository <span class="text blue">tükör</span>ként fog működni
|
||||
migrate_repo=Repository Költöztetése
|
||||
migrate_repo=Tároló migrálása
|
||||
migrate.clone_address=Klón cím
|
||||
migrate.clone_address_desc=Ez lehet egy HTTP/HTTPS/GIT URL.
|
||||
migrate.clone_address_desc_import_local=Migrálhat tárolót a helyi fájlrendszerből is az útvonal megadásával.
|
||||
migrate.permission_denied=Nem engedélyezett számodra a helyi repository-k importálása.
|
||||
migrate.permission_denied=Az Ön számára nem engedélyezett a helyi tároló importálása.
|
||||
migrate.invalid_local_path=Érvénytelen helyi elérési út; nem létezik vagy nem mappára mutat.
|
||||
migrate.failed=Költöztetés sikertelen: %s
|
||||
migrate.failed=Migráció sikertelen: %v
|
||||
|
||||
mirror_from=tükrözi:
|
||||
forked_from=másolva
|
||||
copy_link=Másolás
|
||||
copy_link_success=Másolva!
|
||||
copy_link_error=Nyomd meg a ⌘-C vagy Ctrl-C gombokat a másoláshoz
|
||||
copy_link_error=Nyomja meg a ⌘-C vagy Ctrl-C gombokat a másoláshoz
|
||||
copied=Másolás rendben
|
||||
unwatch=Figyelés törlése
|
||||
watch=Figyelés
|
||||
@@ -459,7 +459,7 @@ filter_branch_and_tag=Branch vagy tag szűrése
|
||||
branches=Branch-ok
|
||||
tags=Tag-ek
|
||||
issues=Problémák
|
||||
pulls=Pull request-ek
|
||||
pulls=Beolvasztási kérések
|
||||
labels=Címkék
|
||||
milestones=Mérföldkövek
|
||||
commits=Commit-ok
|
||||
@@ -501,7 +501,7 @@ editor.update=Frissítés "%s"
|
||||
editor.delete=Törölje a "%s"
|
||||
editor.commit_message_desc=Opcionális hosszabb leírás hozzáadása...
|
||||
editor.commit_directly_to_this_branch=Commit egyenesen a(z) <strong class="branch-name">%s</strong> ágba.
|
||||
editor.create_new_branch=<strong>Új ág</strong> létrehozása ennek a commit-nak és egyesítési kérés indítása.
|
||||
editor.create_new_branch=<strong>Új ág</strong> létrehozása ennek a véglegesítésére és beolvasztási kérés indítása.
|
||||
editor.new_branch_name_desc=Új ág neve...
|
||||
editor.cancel=Mégse
|
||||
editor.filename_cannot_be_empty=A fájlnév nem lehet üres.
|
||||
@@ -608,7 +608,7 @@ issues.num_participants=%d Résztvevő
|
||||
issues.attachment.open_tab=`Megnyitás "%s" új fülön`
|
||||
issues.attachment.download=`Letöltéshez kattints "%s"`
|
||||
|
||||
pulls.new=Új Pull Kérés
|
||||
pulls.new=Új beolvasztási kérés
|
||||
pulls.compare_changes=Összehasonlítás
|
||||
pulls.compare_changes_desc=Hasonlíts össze két branch-ot és készíts pull kérést a változtatásokkal.
|
||||
pulls.compare_base=base
|
||||
@@ -623,15 +623,15 @@ pulls.merged_title_desc=%[1]d commit egyesítve innen: <code>%[2]s</code> ide: <
|
||||
pulls.tab_conversation=Beszélgetés
|
||||
pulls.tab_commits=Commit-ok
|
||||
pulls.tab_files=Módosított fájlok
|
||||
pulls.reopen_to_merge=Kérlek, nyisd ki a pull kérést az egyesítéshez.
|
||||
pulls.reopen_to_merge=Kérjük, nyissa újra a beolvasztási kérést az egyesítés végrehajtásához.
|
||||
pulls.merged=Egyesítve
|
||||
pulls.has_merged=Ez a pull kérés sikeresen egyesítve lett!
|
||||
pulls.has_merged=Ez a beolvasztási kérés sikeresen egyesítve lett!
|
||||
pulls.data_broken=A pull kérés adatai sérültek a fork információ hiányossága miatt.
|
||||
pulls.is_checking=Az ütközés ellenőrzés még folyamatban van, frissítsd az oldalt pár másodperc múlva.
|
||||
pulls.can_auto_merge_desc=Ez a pull kérés automatikusán egyesíthető.
|
||||
pulls.cannot_auto_merge_desc=Ez a pull kérés ütközések miatt nem egyesíthető automatikusán.
|
||||
pulls.can_auto_merge_desc=Ez a beolvasztási kérés automatikusán egyesíthető.
|
||||
pulls.cannot_auto_merge_desc=Ez a beolvasztási kérés ütközések miatt nem egyesíthető automatikusan.
|
||||
pulls.cannot_auto_merge_helper=Kérlek, egyesítsd kézileg a konfliktusok megoldásához.
|
||||
pulls.merge_pull_request=Pull Kérés Egyesítése
|
||||
pulls.merge_pull_request=Beolvasztási kérés egyesítése
|
||||
pulls.open_unmerged_pull_exists=`Nem tudja újranyitni, mert már van egy nyitott egyesítési kérés (#%d) ugyanebben a tárolóban, ugyanezekket az egyesítési információkkal, és végrehajtásra vár.`
|
||||
pulls.delete_branch=Ág törlése
|
||||
pulls.delete_branch_has_new_commits=Ág nem törölhető, mert tartalmaz olyan új változásokat melyek nem lettek még egyesítve.
|
||||
@@ -663,7 +663,7 @@ milestones.deletion_success=A mérföldkő törlése megtörtént!
|
||||
wiki=Wiki
|
||||
wiki.welcome=Üdv a Wiki-ben!
|
||||
wiki.welcome_desc=A Wiki az a hely, ahol közösen dokumentálhatod és teheted jobbá a projekted a többiekkel.
|
||||
wiki.create_first_page=Hozd létre az első oldalt
|
||||
wiki.create_first_page=Első oldal létrehozása
|
||||
wiki.page=Oldal
|
||||
wiki.filter_page=Oldal szűrése
|
||||
wiki.new_page=Új Oldal Létrehozása
|
||||
@@ -671,7 +671,7 @@ wiki.default_commit_message=Röviden foglald össze a módosításokat (nem köt
|
||||
wiki.save_page=Oldal Mentése
|
||||
wiki.last_commit_info=%s módosította ezt az oldalt ekkor: %s
|
||||
wiki.edit_page_button=Szerkeszt
|
||||
wiki.new_page_button=Új Oldal
|
||||
wiki.new_page_button=Új oldal
|
||||
wiki.delete_page_button=Oldal Törlése
|
||||
wiki.delete_page_notice_1=Ez ki fogja törölni a(z) <code>"%s"</code> oldalt. Jól gondold meg.
|
||||
wiki.page_already_exists=Már létezik ilyen nevű oldal a Wiki-n.
|
||||
@@ -699,10 +699,10 @@ settings.branch_protection=Ág védeleme
|
||||
settings.branch_protection_desc=Válassza a védett ág opciót ehhez az ághoz: <b>%s</b>.
|
||||
settings.protect_this_branch=Ezen ág védelme
|
||||
settings.protect_this_branch_desc=Letiltja az ág törlését és a force pusht.
|
||||
settings.protect_require_pull_request=Eggyesítési kérést követel meg a direkt push helyett
|
||||
settings.protect_require_pull_request_desc=Ennek az opciónak a bekapcsolásával letiltható a direkt push az ágra. A commitokat egy másik, nem védett ágra kell küldeni, majd egyesítési kérést kell nyitni.
|
||||
settings.protect_require_pull_request=Beolvasztási kérést követel meg a direkt küldés helyett
|
||||
settings.protect_require_pull_request_desc=Ennek az opciónak a bekapcsolásával letiltható a közvetlen küldés az ágra. A véglegesítéseket egy másik, nem védett ágra kell küldeni, majd beolvasztási kérést kell nyitni.
|
||||
settings.protect_whitelist_committers=Fehérlista, hogy ki push-olhat az ágra
|
||||
settings.protect_whitelist_committers_desc=Felhasználók vagy csoportok hozzáadása az ág közvetlen push fehérlistájára. A fehérlistával ki lehet kerülni a kötelező egyesítési kérést.
|
||||
settings.protect_whitelist_committers_desc=Felhasználók vagy csoportok hozzáadása az ág közvetlen beküldési fehér listájára. A fehér listával ki lehet kerülni a kötelező beolvasztási kéréseket.
|
||||
settings.protect_whitelist_users=Felhasználók, akik push-olhatnak az ágra
|
||||
settings.protect_whitelist_search_users=Felhasználók keresése
|
||||
settings.protect_whitelist_teams=Csoportok, melyeknek tagjai pusholhatnak az ágra
|
||||
@@ -714,10 +714,10 @@ settings.basic_settings=Alapbeállítások
|
||||
settings.mirror_settings=Beállítások tükrözése
|
||||
settings.sync_mirror=Szinkronizálás
|
||||
settings.mirror_sync_in_progress=A tükör szinkronozálása folyamatban van, egy perc múlva frissítse az oldalt.
|
||||
settings.site=Hivatalos Weboldal
|
||||
settings.update_settings=Beállítások Mentése
|
||||
settings.site=Hivatalos weboldal
|
||||
settings.update_settings=Beállítások mentése
|
||||
settings.change_reponame_prompt=Ez meg fogja változtatni a repository-ra mutató linkeket.
|
||||
settings.advanced_settings=Haladó Beállítások
|
||||
settings.advanced_settings=Haladó beállítások
|
||||
settings.wiki_desc=Engedélyezi a wiki rendszert
|
||||
settings.use_internal_wiki=Beépített Wiki használata
|
||||
settings.allow_public_wiki_desc=Publikus hozzáférés engedélyezése a Wikihez ha a tároló privát
|
||||
@@ -735,7 +735,7 @@ settings.tracker_issue_style=Külső hibajegykezelő elnevezési stílus:
|
||||
settings.tracker_issue_style.numeric=Numerikus
|
||||
settings.tracker_issue_style.alphanumeric=Alfanumerikus
|
||||
settings.tracker_url_format_desc=Az alábbiak helyettesítik a felhasználónevet, repository nevet és hibajegy számot: <code>{user} {repo} {index}</code>.
|
||||
settings.pulls_desc=Nyilvános hozzájárulások (pull kérések) engedélyezése
|
||||
settings.pulls_desc=Beolvasztási kérések engedélyezése a nyilvános hozzájárulások végett
|
||||
settings.danger_zone=Veszélyes terület
|
||||
settings.cannot_fork_to_same_owner=Nem másolható a tároló az eredeti tulajdonosához.
|
||||
settings.new_owner_has_same_repo=Az új tulaj már rendelkezik ilyen nevű repository-val. Kérlek, válassz másik nevet.
|
||||
@@ -745,11 +745,11 @@ settings.convert_notices_1=- Ez a művelet átalakítja ezt a tükör repository
|
||||
settings.convert_confirm=Átalakítás Megerősítése
|
||||
settings.convert_succeed=A repository típusa sikeresen egyszerűre lett módosítva.
|
||||
settings.transfer=Tulajdonjog átadása
|
||||
settings.transfer_desc=Tároló átadása másik felhasználónak vagy szervezetnek, ahol rendszergazdai jogod van.
|
||||
settings.transfer_desc=Tároló átadása másik felhasználónak vagy szervezetnek, ahol rendszergazdai jogosultsága van.
|
||||
settings.transfer_notices_1=- Ha az új tulaj egy felhasználó, elvész a hozzáférésed.
|
||||
settings.transfer_notices_2=- A hozzáférésed megmarad ha az új tulaj egy szervezet melynek tulajdonosai közt szerepelsz.
|
||||
settings.transfer_form_title=Kérlek, add meg a követező információt a művelet megerősítéséhez:
|
||||
settings.wiki_delete=Wiki Adatok Törlése
|
||||
settings.wiki_delete=Wiki adatok törlése
|
||||
settings.wiki_delete_desc=Miután kitörölted a wiki adatokat nincs visszaút. Jól gondold meg.
|
||||
settings.wiki_delete_notices_1=- Ez törli és kikapcsolja a wiki-t itt: %s
|
||||
settings.wiki_deletion_success=A repository-hoz tartozó wiki adatok törlése sikeres.
|
||||
@@ -816,8 +816,8 @@ settings.event_issues=Problémák
|
||||
settings.event_issues_desc=A probléma meg left nyitva, le left zárva, újranyitva, szerkesztve, hozzárendelve, visszarendelve, cimkézve, cimketelenítve, mérföldkövezve, vagy mérföldkőtelenítve.
|
||||
settings.event_issue_comment=Probléma hozzászólás
|
||||
settings.event_issue_comment_desc=Probléma megjegyzés létrehozva, szerkesztve vagy törölve.
|
||||
settings.event_pull_request=Pull kérések
|
||||
settings.event_pull_request_desc=Egyesítési kérés megnyitva, lezárva, újranyitva, hozzárendelve, visszarendelve, cimkézve, cimketelenítve, mérföldkövezve, mérföldkőtelenítve vagy szinkronizálva.
|
||||
settings.event_pull_request=Beolvasztási kérés
|
||||
settings.event_pull_request_desc=Beolvasztási kérés megnyitva, lezárva, újranyitva, hozzárendelve, visszarendelve, címkézve, címke eltávolítva, mérföldkövezve, mérföldkő eltávolítva vagy szinkronizálva.
|
||||
settings.event_release=Kiadás
|
||||
settings.event_release_desc=Kiadás publikálva a tárolóban.
|
||||
settings.active=Aktív
|
||||
@@ -837,7 +837,7 @@ settings.deploy_keys=Deploy kulcsok
|
||||
settings.deploy_keys_helper=<b>Hasznos tipp!</b> ha saját személyes publikus kulcsait szeretné hozzáadni, azt a <a href="%s%s">fiók beállítások</a> oldalon teheti meg.
|
||||
settings.add_deploy_key=Deploy Kulcs Hozzáadása
|
||||
settings.deploy_key_desc=A deploy kulcsok csak olvasásra jogosítanak fel, nem azonosak a személyes SSH kulcsokkal.
|
||||
settings.no_deploy_keys=Még nem adtál hozzá deploy kulcsot.
|
||||
settings.no_deploy_keys=Még nem adott hozzá deploy kulcsot.
|
||||
settings.title=Név
|
||||
settings.deploy_key_content=Tartalom
|
||||
settings.key_been_used=Deploy kulcs tartalma már fel lett használva.
|
||||
@@ -900,8 +900,8 @@ repo_updated=Frissítve
|
||||
people=Emberek
|
||||
invite_someone=Meghívás
|
||||
teams=Csapatok
|
||||
lower_members=tagok
|
||||
lower_repositories=repository-k
|
||||
lower_members=tag
|
||||
lower_repositories=tároló
|
||||
create_new_team=Új csapat létrehozása
|
||||
org_desc=Leírás
|
||||
team_name=Csapat neve
|
||||
@@ -956,9 +956,9 @@ teams.no_desc=Ennek a csapatnak nincs leírása
|
||||
teams.settings=Beállítások
|
||||
teams.owners_permission_desc=A tulajdonosoknak teljes hozzáférése van <strong>minden repository-hoz</strong> és <strong>adminisztrátori joguk</strong> van a szervezethez.
|
||||
teams.members=Csapattagok
|
||||
teams.update_settings=Beállítások Mentése
|
||||
teams.update_settings=Beállítások mentése
|
||||
teams.delete_team=Csapat Törlése
|
||||
teams.add_team_member=Csapattag Hozzáadása
|
||||
teams.add_team_member=Csapattag hozzáadása
|
||||
teams.delete_team_title=Csapat Törlése
|
||||
teams.delete_team_desc=Mivel a csapat törlésre kerül, a tagjai elveszíthetik a hozzáférésüket néhány repository-hoz. Folytatod?
|
||||
teams.delete_team_success=A csapat sikeresen törölve.
|
||||
@@ -1274,18 +1274,18 @@ notices.delete_success=A rendszer értesítések sikeresen törölve.
|
||||
create_repo=létrehozott tárolót: <a href="%s"> %s</a>
|
||||
fork_repo=lemásolta a(z) <a href="%s">%s</a> tárolót
|
||||
rename_repo=átnevezte a <code>%[1]s</code> tárolót <a href="%[2]s">%[3]s</a>-ra
|
||||
commit_repo=feltöltött a <a href="%[1]s/src/%[2]s">%[3]s</a>-ba ekkor: <a href="%[1]s">%[4]s</a>
|
||||
commit_repo=feltöltött a <a href="%[1]s/src/%[2]s">%[3]s</a> ágba ide: <a href="%[1]s">%[4]s</a>
|
||||
compare_commits=%d commit összehasonlítása
|
||||
transfer_repo=áthelyezett egy tárolót innen: <code>%s</code> ide: <a href="%s">%s</a>
|
||||
create_issue=`problémát jelentett: <a href="%s/issues/%s">%s#%[2]s</a>`
|
||||
close_issue=`megoldott egy problémát: <a href="%s/issues/%s">%s#%[2]s</a>`
|
||||
reopen_issue=`újranyitott egy problémát: <a href="%s/issues/%s">%s#%[2]s</a>`
|
||||
comment_issue=`hozzászólt egy problémához: <a href="%s/issues/%s">%s#%[2]s</a>`
|
||||
create_pull_request=`létrehozott egy egyesítési kérést: <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||
close_pull_request=`lezárt egy egyesítési kérést: <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||
reopen_pull_request=`újranyitott egy egyesítési kérést: <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||
merge_pull_request=`végrehajtott egy egyesítési kérést: <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||
create_branch=létrehozott egy új ágat <a href="%[1]s/src/%[2]s">%[3]s</a> ekkor: <a href="%[1]s">%[4]s</a>
|
||||
create_pull_request=`létrehozott egy beolvasztási kérést: <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||
close_pull_request=`lezárt egy beolvasztási kérést: <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||
reopen_pull_request=`újranyitott egy beolvasztási kérést: <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||
merge_pull_request=`egyesített egy beolvasztási kérést: <a href="%s/pulls/%s">%s#%[2]s</a>`
|
||||
create_branch=létrehozott egy új <a href="%[1]s/src/%[2]s">%[3]s</a> ágat ebben: <a href="%[1]s">%[4]s</a>
|
||||
delete_branch=törölt egy ágat <code>%[2]s</code> ekkor: <a href="%[1]s">%[3]s</a>
|
||||
push_tag=feltöltött egy cimkét: <a href="%s/src/%s">%[2]s</a> ide: <a href="%[1]s">%[3]s</a>
|
||||
delete_tag=törölt egy cimkét <code>%[2]s</code> ekkor: <a href="%[1]s">%[3]s</a>
|
||||
@@ -1294,20 +1294,20 @@ delete_tag=törölt egy cimkét <code>%[2]s</code> ekkor: <a href="%[1]s">%[3]s<
|
||||
ago=óta
|
||||
from_now=mostantól
|
||||
now=most
|
||||
1s=1 másodperc %s
|
||||
1m=1 perc %s
|
||||
1h=1 óra %s
|
||||
1d=1 nap %s
|
||||
1w=1 hét %s
|
||||
1mon=1 hónap %s
|
||||
1y=1 év %s
|
||||
seconds=%d másodperc %s
|
||||
minutes=%d perc %s
|
||||
hours=%d óra %s
|
||||
1s=1 másodperce
|
||||
1m=1 perce
|
||||
1h=1 órája
|
||||
1d=1 napja
|
||||
1w=1 hete
|
||||
1mon=1 hónapja
|
||||
1y=1 éve
|
||||
seconds=%d másodperce
|
||||
minutes=%d perce
|
||||
hours=%d órája
|
||||
days=%d nap %s
|
||||
weeks=%d hét %s
|
||||
months=%d hónap %s
|
||||
years=%d év %s
|
||||
weeks=%d hete
|
||||
months=%d hónapja
|
||||
years=%d éve
|
||||
raw_seconds=másodperc
|
||||
raw_minutes=perc
|
||||
|
||||
|
||||
@@ -628,7 +628,7 @@ pulls.merged=Unito
|
||||
pulls.has_merged=Questo contributo è stato incluso con successo!
|
||||
pulls.data_broken=I dati di questa pull request si sono rotti causa dell'eliminazione delle informazioni di fork.
|
||||
pulls.is_checking=Il controllo dei conflitti è ancora in corso, per favore aggiorna pagina tra qualche istante.
|
||||
pulls.can_auto_merge_desc=La pull request non può essere mergiata automaticamente.
|
||||
pulls.can_auto_merge_desc=La pull request può essere mergiata automaticamente.
|
||||
pulls.cannot_auto_merge_desc=Questa pull request non può essere mergiata automaticamente perchè ci sono dei conflitti.
|
||||
pulls.cannot_auto_merge_helper=Effettua il merge manualmente per risolvere i conflitti.
|
||||
pulls.merge_pull_request=Unisci Pull Request
|
||||
|
||||
@@ -83,7 +83,7 @@ app_url_helper=この設定は、HTTP / HTTPSのクローンURLおよび、一
|
||||
log_root_path=ログのパス
|
||||
log_root_path_helper=ログファイルを書き込むディレクトリ。
|
||||
enable_console_mode=コンソールモードの有効化
|
||||
enable_console_mode_popup=In addition to file mode, also print logs to console.
|
||||
enable_console_mode_popup=ファイルモードに加えて、コンソールにもログを表示します。
|
||||
|
||||
optional_title=オプション設定
|
||||
email_title=メールサービス設定
|
||||
@@ -346,7 +346,7 @@ two_factor_enable_title=2段階認証を有効にする
|
||||
two_factor_scan_qr=Please use your authentication application to scan the image:
|
||||
two_factor_or_enter_secret=Or enter the secret:
|
||||
two_factor_then_enter_passcode=パスコードを入力してください:
|
||||
two_factor_verify=Verify
|
||||
two_factor_verify=確認
|
||||
two_factor_invalid_passcode=入力されたパスコードは使用できません。もう一度お試しください。
|
||||
two_factor_enable_error=2段階認証の有効化に失敗しました: %v
|
||||
two_factor_enable_success=2段階認証があなたのアカウントで有効化されました!
|
||||
@@ -690,7 +690,7 @@ settings.branches_bare=You cannot manage branches for bare repository. Please pu
|
||||
settings.default_branch=デフォルトブランチ
|
||||
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
|
||||
settings.update=更新
|
||||
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
|
||||
settings.update_default_branch_unsupported=このサーバー上のGitバージョンではデフォルトブランチの変更がサポートされていません。
|
||||
settings.update_default_branch_success=このリポジトリのデフォルトブランチが更新されました!
|
||||
settings.protected_branches=保護されたブランチ
|
||||
settings.protected_branches_desc=force pushや偶発的な削除からの保護、コミッターのホワイトリスト設定をおこないます。
|
||||
@@ -711,24 +711,24 @@ settings.update_protect_branch_success=このブランチの保護設定が更
|
||||
settings.hooks=Webhooks
|
||||
settings.githooks=Git のフック
|
||||
settings.basic_settings=基本設定
|
||||
settings.mirror_settings=Mirror Settings
|
||||
settings.mirror_settings=ミラー設定
|
||||
settings.sync_mirror=今すぐ同期
|
||||
settings.mirror_sync_in_progress=Mirror syncing is in progress, please refresh page in about a minute.
|
||||
settings.mirror_sync_in_progress=ミラー同期中です。1分後にページを更新してください。
|
||||
settings.site=公式サイト
|
||||
settings.update_settings=設定の更新
|
||||
settings.change_reponame_prompt=この変更はリンクがリポジトリに関連付ける方法に影響します。
|
||||
settings.advanced_settings=拡張設定
|
||||
settings.wiki_desc=Enable wiki system
|
||||
settings.wiki_desc=Wiki システムを有効にする
|
||||
settings.use_internal_wiki=Use builtin wiki
|
||||
settings.allow_public_wiki_desc=Allow public access to wiki when repository is private
|
||||
settings.use_external_wiki=外部 wiki を使用します。
|
||||
settings.external_wiki_url=外部 Wiki の URL
|
||||
settings.external_wiki_url_desc=Visitors will be redirected to URL when they click on the tab.
|
||||
settings.issues_desc=Enable issue tracker
|
||||
settings.issues_desc=課題トラッキングツールを有効
|
||||
settings.use_internal_issue_tracker=Use builtin lightweight issue tracker
|
||||
settings.allow_public_issues_desc=Allow public access to issues when repository is private
|
||||
settings.use_external_issue_tracker=外部課題トラッキングシステムを使用
|
||||
settings.external_tracker_url=External Issue Tracker URL
|
||||
settings.external_tracker_url=外部課題トラッキングツール URL
|
||||
settings.external_tracker_url_desc=Visitors will be redirected to URL when they click on the tab.
|
||||
settings.tracker_url_format=外部課題トラッキングツール URLのフォーマット
|
||||
settings.tracker_issue_style=External Issue Tracker Naming Style:
|
||||
@@ -809,7 +809,7 @@ settings.event_create_desc=ブランチ、またはタグを作成
|
||||
settings.event_delete=削除
|
||||
settings.event_delete_desc=Branch or tag deleted
|
||||
settings.event_fork=フォーク
|
||||
settings.event_fork_desc=Repository forked
|
||||
settings.event_fork_desc=リポジトリがフォークされました
|
||||
settings.event_push=プッシュ
|
||||
settings.event_push_desc=Git リポジトリにプッシュ
|
||||
settings.event_issues=課題
|
||||
@@ -998,7 +998,7 @@ dashboard.delete_inactivate_accounts_success=すべての非アクティブア
|
||||
dashboard.delete_repo_archives=リポジトリのすべてのアーカイブを削除
|
||||
dashboard.delete_repo_archives_success=リポジトリのすべてのアーカイブが正常に削除されました。
|
||||
dashboard.delete_missing_repos=Gitファイルが失われたリポジトリのすべてのレコードを削除
|
||||
dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
|
||||
dashboard.delete_missing_repos_success=すべてのGitファイルを失ったレポジトリレコードが正常に削除されました。
|
||||
dashboard.git_gc_repos=リポジトリでのガベージコレクションを実行します。
|
||||
dashboard.git_gc_repos_success=すべてのリポジトリは正常にガベージ コレクションを行いました。
|
||||
dashboard.resync_all_sshkeys='.ssh/ authorized_keys' ファイルを再生成します。(警告:Gogsキー以外は失われます)
|
||||
@@ -1160,7 +1160,7 @@ config.ssh_keygen_path=鍵生成コマンド ('ssh-keygen') のパス
|
||||
config.ssh_minimum_key_size_check=最小キーサイズチェック
|
||||
config.ssh_minimum_key_sizes=最小キーサイズ
|
||||
|
||||
config.repo_config=Repository Configuration
|
||||
config.repo_config=レポジトリの構成
|
||||
config.repo_root_path=リポジトリのルートパス
|
||||
config.script_type=スクリプトの種類
|
||||
config.repo_force_private=Force Private
|
||||
|
||||
@@ -119,7 +119,7 @@ sqlite3_not_available=설치하신 버전은 SQLite3을 지원하지 않으므
|
||||
invalid_db_setting=데이터베이스 설정이 올바르지 않습니다: %v
|
||||
invalid_repo_path=저장소 루트 경로가 올바르지 않습니다: %v
|
||||
run_user_not_match=실행 유저가 현재 유저가 아닙니다: %s -> %s
|
||||
smtp_host_missing_port=SMTP Host is missing port in address.
|
||||
smtp_host_missing_port=SMTP 호스트 포트가 주소에 없습니다.
|
||||
invalid_smtp_from=SMTP 보낸 사람 필드가 유효하지 않습니다: %v
|
||||
save_config_failed=설정을 저장할 수 없습니다: %v
|
||||
invalid_admin_setting=관리자 계정 설정이 잘못되었습니다: %v
|
||||
@@ -807,13 +807,13 @@ settings.event_send_everything=<strong>모든 것</strong>이 필요합니다.
|
||||
settings.event_choose=필요한 것을 선택해주세요.
|
||||
settings.event_create=생성
|
||||
settings.event_create_desc=브랜치 또는 태그를 생성합니다.
|
||||
settings.event_delete=Delete
|
||||
settings.event_delete=삭제
|
||||
settings.event_delete_desc=Branch or tag deleted
|
||||
settings.event_fork=Fork
|
||||
settings.event_fork_desc=Repository forked
|
||||
settings.event_push=푸시
|
||||
settings.event_push_desc=깃 저장소로 푸시
|
||||
settings.event_issues=Issues
|
||||
settings.event_issues=이슈
|
||||
settings.event_issues_desc=Issue opened, closed, reopened, edited, assigned, unassigned, label updated, label cleared, milestoned, or demilestoned.
|
||||
settings.event_issue_comment=Issue Comment
|
||||
settings.event_issue_comment_desc=Issue comment created, edited, or deleted.
|
||||
|
||||
@@ -48,7 +48,7 @@ cancel=Cancelar
|
||||
install=Instalação
|
||||
title=Etapas de instalação para primeira execução
|
||||
docker_helper=Se você está rodando o Gogs dentro do Docker, por favor leia os <a target="_blank" href="%s">Guias</a> cuidadosamente antes de mudar qualquer coisa nesta página!
|
||||
requite_db_desc=Gogs requires MySQL, PostgreSQL, SQLite3, MSSQL or TiDB.
|
||||
requite_db_desc=O Gogs requer MySQL, PostgreSQL, SQLite3, MSSQL ou TiDB.
|
||||
db_title=Configurações de banco de dados
|
||||
db_type=Tipo de banco de dados
|
||||
host=Host
|
||||
@@ -59,7 +59,7 @@ db_helper=Por favor, use o mecanismo INNODB com o conjunto de caracteres utf8_ge
|
||||
ssl_mode=Modo SSL
|
||||
path=Caminho
|
||||
sqlite_helper=The file path of SQLite3 database. <br>Please use absolute path when you start as service.
|
||||
err_empty_db_path=SQLite3 database path cannot be empty.
|
||||
err_empty_db_path=Deve haver um caminho para o banco de dados SQLite3.
|
||||
no_admin_and_disable_registration=Você não pode desabilitar o registro sem criar uma conta de administrador.
|
||||
err_empty_admin_password=A senha de administrador não pode ser vazia.
|
||||
|
||||
@@ -74,7 +74,7 @@ domain=Domínio
|
||||
domain_helper=Isto afeta URLs para o clone via SSH.
|
||||
ssh_port=Porta SSH
|
||||
ssh_port_helper=Número da porta que seu servidor SSH está usando, deixe vazio para desativar o recurso SSH.
|
||||
use_builtin_ssh_server=Use Builtin SSH Server
|
||||
use_builtin_ssh_server=Usar o servidor SSH embutido
|
||||
use_builtin_ssh_server_popup=Start builtin SSH server for Git operations to distinguish from system SSH daemon.
|
||||
http_port=Porta HTTP
|
||||
http_port_helper=Número da porta em que a aplicação irá executar.
|
||||
@@ -82,8 +82,8 @@ app_url=URL do aplicativo
|
||||
app_url_helper=Isto afeta a URL de clone via HTTP/HTTPs e também o e-mail.
|
||||
log_root_path=Caminho do log
|
||||
log_root_path_helper=Pasta dos arquivos de log.
|
||||
enable_console_mode=Enable Console Mode
|
||||
enable_console_mode_popup=In addition to file mode, also print logs to console.
|
||||
enable_console_mode=Ativar o modo de console
|
||||
enable_console_mode_popup=Além do modo de arquivo, exibir registros (log) no console.
|
||||
|
||||
optional_title=Configurações opcionais
|
||||
email_title=Configurações do serviço de e-mail
|
||||
@@ -119,7 +119,7 @@ sqlite3_not_available=Sua versão não suporta SQLite3, por favor faça o downlo
|
||||
invalid_db_setting=Configuração do banco de dados não está correta: %v
|
||||
invalid_repo_path=A raiz do repositório é inválida: %v
|
||||
run_user_not_match=O usuário da execução não é o usuário atual: %s -> %s
|
||||
smtp_host_missing_port=SMTP Host is missing port in address.
|
||||
smtp_host_missing_port=O endereço do host SMTP não possui porta.
|
||||
invalid_smtp_from=O SMTP do campo não é válido: %v
|
||||
save_config_failed=Falha ao salvar a configuração: %v
|
||||
invalid_admin_setting=Configuração da conta de administrador está inválida: %v
|
||||
@@ -169,13 +169,13 @@ reset_password_helper=Clique aqui para redefinir sua senha
|
||||
password_too_short=O comprimento da senha não pode ser menor que 6.
|
||||
non_local_account=Não é possível mudar a senha de contas remotas pelo Gogs.
|
||||
|
||||
login_two_factor=Two-factor Authentication
|
||||
login_two_factor_passcode=Authentication Passcode
|
||||
login_two_factor_enter_recovery_code=Enter a two-factor recovery code
|
||||
login_two_factor_recovery=Two-factor Recovery
|
||||
login_two_factor_recovery_code=Recovery Code
|
||||
login_two_factor_enter_passcode=Enter a two-factor passcode
|
||||
login_two_factor_invalid_recovery_code=Recovery code has been used or does not valid.
|
||||
login_two_factor=Autenticação de dois fatores
|
||||
login_two_factor_passcode=Senha de Autenticação
|
||||
login_two_factor_enter_recovery_code=Insira um código de recuperação
|
||||
login_two_factor_recovery=Recuperação de autenticação
|
||||
login_two_factor_recovery_code=Código de Recuperação
|
||||
login_two_factor_enter_passcode=Insira uma senha p/ autenticação
|
||||
login_two_factor_invalid_recovery_code=O código de recuperação já foi usado ou é inválido.
|
||||
|
||||
[mail]
|
||||
activate_account=Por favor, ative sua conta
|
||||
@@ -212,7 +212,7 @@ Content=Conteúdo
|
||||
require_error=` não pode estar vazio.`
|
||||
alpha_dash_error=` devem ser caracteres alfanuméricos, hífen (-) ou sublinhado (_).`
|
||||
alpha_dash_dot_error=` devem ser caracteres alfanuméricos ou hífen (-) ou sublinhado (_).`
|
||||
alpha_dash_dot_slash_error=` must be valid alpha or numeric or dash(-_) or dot characters or slashes.`
|
||||
alpha_dash_dot_slash_error=` apenas alfanuméricos e pontuações (hifens, pontos e barras).`
|
||||
size_error=`deve ser do tamanho %s.`
|
||||
min_size_error=` deve conter pelo menos %s caracteres.`
|
||||
max_size_error=` deve conter no máximo %s caracteres.`
|
||||
@@ -264,8 +264,8 @@ profile=Perfil
|
||||
password=Senha
|
||||
avatar=Avatar
|
||||
ssh_keys=Chaves SSH
|
||||
security=Security
|
||||
repos=Repositories
|
||||
security=Segurança
|
||||
repos=Repositórios
|
||||
orgs=Organizações
|
||||
applications=Aplicativos
|
||||
delete=Deletar conta
|
||||
@@ -334,30 +334,30 @@ no_activity=Nenhuma atividade recente
|
||||
key_state_desc=Usada a pelo menos 7 dias
|
||||
token_state_desc=Este token é usado em pelo menos 7 dias
|
||||
|
||||
two_factor=Two-factor Authentication
|
||||
two_factor_status=Status:
|
||||
two_factor_on=On
|
||||
two_factor_off=Off
|
||||
two_factor_enable=Enable
|
||||
two_factor_disable=Disable
|
||||
two_factor_view_recovery_codes=View and save <a href="%s%s">your recovery codes</a> in a safe place. You can use them as passcode if you lose access to your authentication application.
|
||||
two_factor_http=For HTTP/HTTPS operations, you are no longer able to use plain username and password. Please create and use <a href="%[1]s%[2]s">Personal Access Token</a> as your credential, e.g. <code>%[3]s</code>.
|
||||
two_factor_enable_title=Enable Two-factor Authentication
|
||||
two_factor_scan_qr=Please use your authentication application to scan the image:
|
||||
two_factor=Autenticação de dois fatores
|
||||
two_factor_status=Estado:
|
||||
two_factor_on=Ativado
|
||||
two_factor_off=Desativado
|
||||
two_factor_enable=Ativar
|
||||
two_factor_disable=Desativar
|
||||
two_factor_view_recovery_codes=Consulte e salve <a href="%s%s">seus códigos de recuperação</a> num local seguro. Você poderá usá-los como senha se perder acesso ao seu aplicativo de autenticação.
|
||||
two_factor_http=Para operações em HTTP/HTTPS, você não poderá mais usar seu nome de usuário e senha. Crie e use um <a href="%[1]s%[2]s">Token de Acesso Pessoal</a> como credencial (p. ex.: <code>%[3]%</code>).
|
||||
two_factor_enable_title=Ativar autenticação de dois fatores
|
||||
two_factor_scan_qr=Use o seu aplicativo de autenticação para escanear a imagem:
|
||||
two_factor_or_enter_secret=Or enter the secret:
|
||||
two_factor_then_enter_passcode=Then enter passcode:
|
||||
two_factor_verify=Verify
|
||||
two_factor_invalid_passcode=The passcode you entered is not valid, please try again!
|
||||
two_factor_enable_error=Enable Two-factor authentication failed: %v
|
||||
two_factor_enable_success=Two-factor authentication has enabled for your account successfully!
|
||||
two_factor_recovery_codes_title=Two-factor Authentication Recovery Codes
|
||||
two_factor_recovery_codes_desc=Recovery codes are used when you temporarily lose access to your authentication application. Each recovery code can only be used once, <b>please keep these codes in a safe place</b>.
|
||||
two_factor_regenerate_recovery_codes=Regenerate Recovery Codes
|
||||
two_factor_regenerate_recovery_codes_error=Regenerate recovery codes failed: %v
|
||||
two_factor_regenerate_recovery_codes_success=New recovery codes has been generated successfully!
|
||||
two_factor_disable_title=Disable Two-factor Authentication
|
||||
two_factor_disable_desc=Your account security level will decrease after disabled two-factor authentication. Do you want to continue?
|
||||
two_factor_disable_success=Two-factor authentication has disabled successfully!
|
||||
two_factor_verify=Verificar
|
||||
two_factor_invalid_passcode=A senha inserida é inválida. Tente novamente!
|
||||
two_factor_enable_error=Falha ao ativar a autenticação de dois fatores: %v
|
||||
two_factor_enable_success=A autenticação de dois fatores foi ativada para a sua conta com sucesso!
|
||||
two_factor_recovery_codes_title=Códigos de recup. p/ autenticação de dois fatores
|
||||
two_factor_recovery_codes_desc=Os códigos de recuperação são usados se você perder acesso ao seu aplicativo de autenticação. Cada código pode ser usado apenas uma vez. <b>Salve-os num lugar seguro.</b>
|
||||
two_factor_regenerate_recovery_codes=Gerar códigos de recuperação
|
||||
two_factor_regenerate_recovery_codes_error=Falha ao gerar códigos de recuperação: %v
|
||||
two_factor_regenerate_recovery_codes_success=Novos códigos de recuperação gerados com sucesso!
|
||||
two_factor_disable_title=Desativar a autenticação de dois fatores
|
||||
two_factor_disable_desc=O nível de segurança da sua conta diminuirá após desativar a autenticação de dois fatores. Deseja mesmo continuar?
|
||||
two_factor_disable_success=A autenticação de dois fatores foi desativada com sucesso!
|
||||
|
||||
manage_access_token=Gerenciar tokens de acesso pessoal
|
||||
generate_new_token=Gerar novo token
|
||||
@@ -375,10 +375,10 @@ orgs.none=Você não é participante de nenhuma organização.
|
||||
orgs.leave_title=Deixar uma organização
|
||||
orgs.leave_desc=Você perderá acesso a todos os repositórios e equipes após deixar a organização. Deseja continuar?
|
||||
|
||||
repos.leave=Leave
|
||||
repos.leave_title=Leave repository
|
||||
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
|
||||
repos.leave_success=You have left repository '%s' successfully!
|
||||
repos.leave=Sair
|
||||
repos.leave_title=Sair do repositório
|
||||
repos.leave_desc=Você irá perder acesso ao repositório após sair. Deseja continuar?
|
||||
repos.leave_success=Você saiu do repositório “%s” com sucesso!
|
||||
|
||||
delete_account=Deletar sua conta
|
||||
delete_prompt=A operação deletará sua conta permanentemente, e <strong>NÃO PODERÁ</strong> ser desfeita!
|
||||
@@ -450,7 +450,7 @@ quick_guide=Guia rápido
|
||||
clone_this_repo=Clonar este repositório
|
||||
create_new_repo_command=Criar um novo repositório na linha de comando
|
||||
push_exist_repo=Push um repositório existente na linha de comando
|
||||
bare_message=This repository does not have any content yet.
|
||||
bare_message=Este repositório ainda não possui conteúdo.
|
||||
|
||||
files=Arquivos
|
||||
branch=Branch
|
||||
@@ -472,12 +472,12 @@ file_permalink=Link permanente
|
||||
file_too_large=Este arquivo é muito grande para ser exibido
|
||||
video_not_supported_in_browser=Seu navegador não suporta a tag de vídeo do HTML5.
|
||||
|
||||
branches.overview=Overview
|
||||
branches.active_branches=Active Branches
|
||||
branches.stale_branches=Stale Branches
|
||||
branches.all=All Branches
|
||||
branches.overview=Visão geral
|
||||
branches.active_branches=Branches ativos
|
||||
branches.stale_branches=Branches obsoletos
|
||||
branches.all=Todos os branches
|
||||
branches.updated_by=Updated %[1]s by %[2]s
|
||||
branches.change_default_branch=Change Default Branch
|
||||
branches.change_default_branch=Modificar branch padrão
|
||||
|
||||
editor.new_file=Novo arquivo
|
||||
editor.upload_file=Enviar arquivo
|
||||
@@ -518,7 +518,7 @@ editor.add_subdir=Adicionar o subdiretório...
|
||||
editor.unable_to_upload_files=Houve erro ao fazer upload de arquivos para '%s': %v
|
||||
editor.upload_files_to_dir=Enviar arquivos para '%s'
|
||||
|
||||
commits.commit_history=Commit History
|
||||
commits.commit_history=Histórico de commits
|
||||
commits.commits=Commits
|
||||
commits.search=Pesquisar commits
|
||||
commits.find=Buscar
|
||||
@@ -686,25 +686,25 @@ settings.collaboration.write=Escrita
|
||||
settings.collaboration.read=Leitura
|
||||
settings.collaboration.undefined=Indefinido
|
||||
settings.branches=Branches
|
||||
settings.branches_bare=You cannot manage branches for bare repository. Please push some content first.
|
||||
settings.default_branch=Default Branch
|
||||
settings.branches_bare=Não é possível gerenciar branches num repositório vazio. Adicione conteúdo primeiro.
|
||||
settings.default_branch=Branch padrão
|
||||
settings.default_branch_desc=The default branch is considered the "base" branch for code commits, pull requests and online editing.
|
||||
settings.update=Update
|
||||
settings.update=Atualizar
|
||||
settings.update_default_branch_unsupported=Change default branch is not supported by the Git version on server.
|
||||
settings.update_default_branch_success=Default branch of this repository has been updated successfully!
|
||||
settings.protected_branches=Protected Branches
|
||||
settings.update_default_branch_success=O branch padrão deste repositório foi atualizado com sucesso!
|
||||
settings.protected_branches=Branches protegidos
|
||||
settings.protected_branches_desc=Protect branches from force pushing, accidental deletion and whitelist code committers.
|
||||
settings.choose_a_branch=Selecione um branch...
|
||||
settings.branch_protection=Proteção de Branch
|
||||
settings.branch_protection_desc=Please choose protect options for branch <b>%s</b>.
|
||||
settings.protect_this_branch=Protect this branch
|
||||
settings.protect_this_branch=Proteger este branch
|
||||
settings.protect_this_branch_desc=Disable force pushes and prevent from deletion.
|
||||
settings.protect_require_pull_request=Require pull request instead direct pushing
|
||||
settings.protect_require_pull_request_desc=Enable this option to disable direct pushing to this branch. Commits have to be pushed to another non-protected branch and merged to this branch through pull request.
|
||||
settings.protect_whitelist_committers=Whitelist who can push to this branch
|
||||
settings.protect_whitelist_committers_desc=Add people or teams to whitelist of direct push to this branch. Users in whitelist will bypass require pull request check.
|
||||
settings.protect_whitelist_users=Users who can push to this branch
|
||||
settings.protect_whitelist_search_users=Search users
|
||||
settings.protect_whitelist_search_users=Pesquisar usuários
|
||||
settings.protect_whitelist_teams=Teams for which members of them can push to this branch
|
||||
settings.protect_whitelist_search_teams=Search teams
|
||||
settings.update_protect_branch_success=Protect options for this branch has been updated successfully!
|
||||
|
||||
@@ -375,9 +375,9 @@ orgs.none=您現在還不是任何組織的成員。
|
||||
orgs.leave_title=離開組織
|
||||
orgs.leave_desc=離開組織後,所有與組織相關的倉庫和團隊權限將被取消。是否繼續?
|
||||
|
||||
repos.leave=Leave
|
||||
repos.leave_title=Leave repository
|
||||
repos.leave_desc=You will lose access to the repository after you left. Do you want to continue?
|
||||
repos.leave=離開
|
||||
repos.leave_title=離開存儲庫
|
||||
repos.leave_desc=在你離開後,您將無法進入到存儲庫。你想要繼續嗎?
|
||||
repos.leave_success=You have left repository '%s' successfully!
|
||||
|
||||
delete_account=刪除當前帳戶
|
||||
@@ -780,7 +780,7 @@ settings.webhook_deletion_success=Web 鉤子刪除成功!
|
||||
settings.webhook.test_delivery=測試推送
|
||||
settings.webhook.test_delivery_desc=生成並推送一個模擬的 Push 事件
|
||||
settings.webhook.test_delivery_success=測試推送已經加入到隊列,請耐心等待數秒再刷新推送記錄。
|
||||
settings.webhook.redelivery=Redelivery
|
||||
settings.webhook.redelivery=重新傳送
|
||||
settings.webhook.redelivery_success=Hook task '%s' has been readded to delivery queue. It may take few seconds to update delivery status in history.
|
||||
settings.webhook.request=請求內容
|
||||
settings.webhook.response=響應內容
|
||||
@@ -1100,7 +1100,7 @@ auths.user_base=用戶搜索基準
|
||||
auths.user_dn=User DN
|
||||
auths.attribute_username=用戶名屬性
|
||||
auths.attribute_username_placeholder=留空表示使用用戶登錄時所使用的用戶名
|
||||
auths.attribute_name=First Name Attribute
|
||||
auths.attribute_name=歸納名字
|
||||
auths.attribute_surname=姓氏屬性
|
||||
auths.attribute_mail=電子郵箱屬性
|
||||
auths.verify_group_membership=Verify group membership
|
||||
|
||||
3
docker/armhf/build.sh
Normal file
3
docker/armhf/build.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
go build -ldflags "-w -s" resin-xbuild.go
|
||||
BIN
docker/armhf/qemu-arm-static
Executable file
BIN
docker/armhf/qemu-arm-static
Executable file
Binary file not shown.
BIN
docker/armhf/resin-xbuild
Executable file
BIN
docker/armhf/resin-xbuild
Executable file
Binary file not shown.
66
docker/armhf/resin-xbuild.go
Normal file
66
docker/armhf/resin-xbuild.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
func crossBuildStart() {
|
||||
err := os.Remove("/bin/sh")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
err = os.Link("/usr/bin/resin-xbuild", "/bin/sh")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func crossBuildEnd() {
|
||||
err := os.Remove("/bin/sh")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
err = os.Link("/bin/sh.real", "/bin/sh")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func runShell() error {
|
||||
cmd := exec.Command("/usr/bin/qemu-arm-static", append([]string{"-0", "/bin/sh", "/bin/sh"}, os.Args[1:]...)...)
|
||||
cmd.Stdin = os.Stdin
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func main() {
|
||||
switch os.Args[0] {
|
||||
case "cross-build-start":
|
||||
crossBuildStart()
|
||||
case "cross-build-end":
|
||||
crossBuildEnd()
|
||||
case "/bin/sh":
|
||||
code := 0
|
||||
crossBuildEnd()
|
||||
|
||||
if err := runShell(); err != nil {
|
||||
code = 1
|
||||
if exiterr, ok := err.(*exec.ExitError); ok {
|
||||
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
|
||||
code = status.ExitStatus()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
crossBuildStart()
|
||||
|
||||
// Hack to bypass apk issues with triggering
|
||||
code = 0
|
||||
|
||||
os.Exit(code)
|
||||
}
|
||||
}
|
||||
2
gogs.go
2
gogs.go
@@ -16,7 +16,7 @@ import (
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
)
|
||||
|
||||
const APP_VER = "0.11.19.0609"
|
||||
const APP_VER = "0.11.29.0727"
|
||||
|
||||
func init() {
|
||||
setting.AppVer = APP_VER
|
||||
|
||||
@@ -112,14 +112,12 @@ func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) {
|
||||
repo, err := GetRepositoryByID(access.RepoID)
|
||||
if err != nil {
|
||||
if errors.IsRepoNotExist(err) {
|
||||
log.Error(4, "GetRepositoryByID: %v", err)
|
||||
log.Error(2, "GetRepositoryByID: %v", err)
|
||||
continue
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
if err = repo.GetOwner(); err != nil {
|
||||
return nil, err
|
||||
} else if repo.OwnerID == u.ID {
|
||||
if repo.OwnerID == u.ID {
|
||||
continue
|
||||
}
|
||||
repos[repo] = access.Mode
|
||||
|
||||
@@ -21,8 +21,8 @@ import (
|
||||
api "github.com/gogits/go-gogs-client"
|
||||
|
||||
"github.com/gogits/gogs/models/errors"
|
||||
"github.com/gogits/gogs/pkg/tool"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/pkg/tool"
|
||||
)
|
||||
|
||||
type ActionType int
|
||||
@@ -73,12 +73,12 @@ func init() {
|
||||
// it implemented interface base.Actioner so that can be used in template render.
|
||||
type Action struct {
|
||||
ID int64
|
||||
UserID int64 // Receiver user id.
|
||||
UserID int64 // Receiver user ID
|
||||
OpType ActionType
|
||||
ActUserID int64 // Action user id.
|
||||
ActUserName string // Action user name.
|
||||
ActUserID int64 // Doer user ID
|
||||
ActUserName string // Doer user name
|
||||
ActAvatar string `xorm:"-"`
|
||||
RepoID int64
|
||||
RepoID int64 `xorm:"INDEX"`
|
||||
RepoUserName string
|
||||
RepoName string
|
||||
RefName string
|
||||
@@ -379,8 +379,7 @@ func UpdateIssuesCommit(doer *User, repo *Repository, commits []*PushCommit) err
|
||||
if ref[0] == '#' {
|
||||
ref = fmt.Sprintf("%s%s", repo.FullName(), ref)
|
||||
} else if !strings.Contains(ref, "/") {
|
||||
// We don't support User#ID syntax yet
|
||||
// return ErrNotImplemented
|
||||
// FIXME: We don't support User#ID syntax yet
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@@ -110,6 +110,12 @@ func (c *Comment) loadAttributes(e Engine) (err error) {
|
||||
if err != nil {
|
||||
return fmt.Errorf("getIssueByID [%d]: %v", c.IssueID, err)
|
||||
}
|
||||
if c.Issue.Repo == nil {
|
||||
c.Issue.Repo, err = getRepositoryByID(e, c.Issue.RepoID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("getRepositoryByID [%d]: %v", c.Issue.RepoID, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if c.Attachments == nil {
|
||||
@@ -182,7 +188,7 @@ func (cmt *Comment) mailParticipants(e Engine, opType ActionType, issue *Issue)
|
||||
issue.Content = fmt.Sprintf("Reopened #%d", issue.Index)
|
||||
}
|
||||
if err = mailIssueCommentToParticipants(issue, cmt.Poster, mentions); err != nil {
|
||||
log.Error(4, "mailIssueCommentToParticipants: %v", err)
|
||||
log.Error(2, "mailIssueCommentToParticipants: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -284,10 +290,10 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err
|
||||
// Notify watchers for whatever action comes in, ignore if no action type.
|
||||
if act.OpType > 0 {
|
||||
if err = notifyWatchers(e, act); err != nil {
|
||||
log.Error(4, "notifyWatchers: %v", err)
|
||||
log.Error(2, "notifyWatchers: %v", err)
|
||||
}
|
||||
if err = comment.mailParticipants(e, act.OpType, opts.Issue); err != nil {
|
||||
log.Error(4, "MailParticipants: %v", err)
|
||||
log.Error(2, "MailParticipants: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -323,7 +329,7 @@ type CreateCommentOptions struct {
|
||||
// CreateComment creates comment of issue or commit.
|
||||
func CreateComment(opts *CreateCommentOptions) (comment *Comment, err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -431,9 +437,9 @@ func getCommentsByIssueIDSince(e Engine, issueID, since int64) ([]*Comment, erro
|
||||
|
||||
func getCommentsByRepoIDSince(e Engine, repoID, since int64) ([]*Comment, error) {
|
||||
comments := make([]*Comment, 0, 10)
|
||||
sess := e.Where("issue.repo_id = ?", repoID).Join("INNER", "issue", "issue.id = comment.issue_id", repoID).Asc("created_unix")
|
||||
sess := e.Where("issue.repo_id = ?", repoID).Join("INNER", "issue", "issue.id = comment.issue_id").Asc("comment.created_unix")
|
||||
if since > 0 {
|
||||
sess.And("updated_unix >= ?", since)
|
||||
sess.And("comment.updated_unix >= ?", since)
|
||||
}
|
||||
if err := sess.Find(&comments); err != nil {
|
||||
return nil, err
|
||||
@@ -497,7 +503,7 @@ func DeleteCommentByID(doer *User, id int64) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -325,7 +325,7 @@ func (issue *Issue) clearLabels(e *xorm.Session) (err error) {
|
||||
|
||||
func (issue *Issue) ClearLabels(doer *User) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -370,7 +370,7 @@ func (issue *Issue) ClearLabels(doer *User) (err error) {
|
||||
// ReplaceLabels removes all current labels and add new labels to the issue.
|
||||
func (issue *Issue) ReplaceLabels(labels []*Label) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -455,7 +455,7 @@ func (i *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository, isCl
|
||||
// ChangeStatus changes issue status to open or closed.
|
||||
func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -744,7 +744,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) {
|
||||
// NewIssue creates new issue with labels and attachments for repository.
|
||||
func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1062,7 +1062,7 @@ func newIssueUsers(e *xorm.Session, repo *Repository, issue *Issue) error {
|
||||
// NewIssueUsers adds new issue-user relations for new issue of repository.
|
||||
func NewIssueUsers(repo *Repository, issue *Issue) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1391,7 +1391,7 @@ func updateIssueUserByAssignee(e *xorm.Session, issue *Issue) (err error) {
|
||||
// UpdateIssueUserByAssignee updates issue-user relation for assignee.
|
||||
func UpdateIssueUserByAssignee(issue *Issue) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -216,7 +216,7 @@ func DeleteLabel(repoID, labelID int64) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -282,7 +282,7 @@ func NewIssueLabel(issue *Issue, label *Label) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -311,7 +311,7 @@ func newIssueLabels(e *xorm.Session, issue *Issue, labels []*Label) (err error)
|
||||
// NewIssueLabels creates a list of issue-label relations.
|
||||
func NewIssueLabels(issue *Issue, labels []*Label) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -361,7 +361,7 @@ func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) {
|
||||
// DeleteIssueLabel deletes issue-label relation.
|
||||
func DeleteIssueLabel(issue *Issue, label *Label) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -155,7 +155,6 @@ func mailIssueCommentToParticipants(issue *Issue, doer *User, mentions []string)
|
||||
tos = append(tos, mentions[i])
|
||||
}
|
||||
mailer.SendIssueMentionMail(NewMailerIssue(issue), NewMailerRepo(issue.Repo), NewMailerUser(doer), GetUserEmailsByNames(tos))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -168,7 +167,7 @@ func (issue *Issue) MailParticipants() (err error) {
|
||||
}
|
||||
|
||||
if err = mailIssueCommentToParticipants(issue, issue.Poster, mentions); err != nil {
|
||||
log.Error(4, "mailIssueCommentToParticipants: %v", err)
|
||||
log.Error(2, "mailIssueCommentToParticipants: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -153,7 +153,7 @@ func generateOrgRandsAndSalt(x *xorm.Engine) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ func ldapUseSSLToSecurityProtocol(x *xorm.Engine) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ func (m *Milestone) CountIssues(isClosed, includePulls bool) int64 {
|
||||
// NewMilestone creates new milestone of repository.
|
||||
func NewMilestone(m *Milestone) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -211,7 +211,7 @@ func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -254,7 +254,7 @@ func changeMilestoneIssueStats(e *xorm.Session, issue *Issue) error {
|
||||
// for the milestone associated with the given issue.
|
||||
func ChangeMilestoneIssueStats(issue *Issue) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -378,7 +378,7 @@ func DeleteMilestoneOfRepoByID(repoID, id int64) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -43,13 +43,6 @@ type Engine interface {
|
||||
Where(interface{}, ...interface{}) *xorm.Session
|
||||
}
|
||||
|
||||
func sessionRelease(sess *xorm.Session) {
|
||||
if !sess.IsCommitedOrRollbacked {
|
||||
sess.Rollback()
|
||||
}
|
||||
sess.Close()
|
||||
}
|
||||
|
||||
var (
|
||||
x *xorm.Engine
|
||||
tables []interface{}
|
||||
|
||||
@@ -124,7 +124,7 @@ func CreateOrganization(org, owner *User) (err error) {
|
||||
org.NumMembers = 1
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -208,7 +208,7 @@ func DeleteOrganization(org *User) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -405,7 +405,7 @@ func RemoveOrgUser(orgID, userID int64) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err := sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ func (t *Team) AddRepository(repo *Repository) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -199,7 +199,7 @@ func (t *Team) RemoveRepository(repoID int64) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -321,7 +321,7 @@ func UpdateTeam(t *Team, authChanged bool) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -368,7 +368,7 @@ func DeleteTeam(t *Team) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -488,7 +488,7 @@ func AddTeamMember(orgID, teamID, userID int64) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -592,7 +592,7 @@ func removeTeamMember(e Engine, orgID, teamID, uid int64) error {
|
||||
// RemoveTeamMember removes member from given team of given organization.
|
||||
func RemoveTeamMember(orgID, teamID, uid int64) error {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err := sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
|
||||
}()
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -382,7 +382,7 @@ func (pr *PullRequest) testPatch() (err error) {
|
||||
// NewPullRequest creates new pull request with labels for repository.
|
||||
func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []string, pr *PullRequest, patch []byte) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ func NewRelease(gitRepo *git.Repository, r *Release, uuids []string) error {
|
||||
r.LowerTagName = strings.ToLower(r.TagName)
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -289,7 +289,7 @@ func UpdateRelease(doer *User, gitRepo *git.Repository, r *Release, isPublish bo
|
||||
r.PublisherID = doer.ID
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -282,6 +282,8 @@ func (repo *Repository) HTMLURL() string {
|
||||
return setting.AppURL + repo.FullName()
|
||||
}
|
||||
|
||||
// This method assumes following fields have been assigned with valid values:
|
||||
// Required - BaseRepo (if fork)
|
||||
// Arguments that are allowed to be nil: permission
|
||||
func (repo *Repository) APIFormat(permission *api.Permission) *api.Repository {
|
||||
cloneLink := repo.CloneLink()
|
||||
@@ -1043,7 +1045,7 @@ func CreateRepository(doer, owner *User, opts CreateRepoOptions) (_ *Repository,
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1172,7 +1174,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return fmt.Errorf("sess.Begin: %v", err)
|
||||
}
|
||||
@@ -1339,14 +1341,14 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
|
||||
return fmt.Errorf("getOwner: %v", err)
|
||||
}
|
||||
if repo.Owner.IsOrganization() {
|
||||
// Organization repository need to recalculate access table when visivility is changed.
|
||||
// Organization repository need to recalculate access table when visivility is changed
|
||||
if err = repo.recalculateTeamAccesses(e, 0); err != nil {
|
||||
return fmt.Errorf("recalculateTeamAccesses: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Create/Remove git-daemon-export-ok for git-daemon...
|
||||
daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`)
|
||||
// Create/Remove git-daemon-export-ok for git-daemon
|
||||
daemonExportFile := path.Join(repo.RepoPath(), "git-daemon-export-ok")
|
||||
if repo.IsPrivate && com.IsExist(daemonExportFile) {
|
||||
if err = os.Remove(daemonExportFile); err != nil {
|
||||
log.Error(4, "Failed to remove %s: %v", daemonExportFile, err)
|
||||
@@ -1369,6 +1371,11 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
|
||||
return fmt.Errorf("updateRepository[%d]: %v", forkRepos[i].ID, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Change visibility of generated actions
|
||||
if _, err = e.Where("repo_id = ?", repo.ID).Cols("is_private").Update(&Action{IsPrivate: repo.IsPrivate}); err != nil {
|
||||
return fmt.Errorf("change action visibility of repository: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -1376,7 +1383,7 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
|
||||
|
||||
func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1410,7 +1417,7 @@ func DeleteRepository(uid, repoID int64) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1627,7 +1634,7 @@ type SearchRepoOptions struct {
|
||||
|
||||
// SearchRepositoryByName takes keyword and part of repository name to search,
|
||||
// it returns results in given range and number of total results.
|
||||
func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, _ int64, _ error) {
|
||||
func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, count int64, err error) {
|
||||
if opts.Page <= 0 {
|
||||
opts.Page = 1
|
||||
}
|
||||
@@ -1652,9 +1659,8 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos []*Repository, _ int
|
||||
sess.And("repo.owner_id = ?", opts.OwnerID)
|
||||
}
|
||||
|
||||
var countSess xorm.Session
|
||||
countSess = *sess
|
||||
count, err := countSess.Count(new(Repository))
|
||||
// We need all fields (repo.*) in final list but only ID (repo.id) is good enough for counting.
|
||||
count, err = sess.Clone().Distinct("repo.id").Count(new(Repository))
|
||||
if err != nil {
|
||||
return nil, 0, fmt.Errorf("Count: %v", err)
|
||||
}
|
||||
@@ -2250,10 +2256,15 @@ func (repo *Repository) GetStargazers(page int) ([]*User, error) {
|
||||
|
||||
// HasForkedRepo checks if given user has already forked a repository.
|
||||
// When user has already forked, it returns true along with the repository.
|
||||
func HasForkedRepo(ownerID, repoID int64) (*Repository, bool) {
|
||||
func HasForkedRepo(ownerID, repoID int64) (*Repository, bool, error) {
|
||||
repo := new(Repository)
|
||||
has, _ := x.Where("owner_id = ? AND fork_id = ?", ownerID, repoID).Get(repo)
|
||||
return repo, has
|
||||
has, err := x.Where("owner_id = ? AND fork_id = ?", ownerID, repoID).Get(repo)
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
} else if !has {
|
||||
return nil, false, nil
|
||||
}
|
||||
return repo, true, repo.LoadAttributes()
|
||||
}
|
||||
|
||||
// ForkRepository creates a fork of target repository under another user domain.
|
||||
@@ -2271,7 +2282,7 @@ func ForkRepository(doer, owner *User, baseRepo *Repository, name, desc string)
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ func IsBranchOfRepoRequirePullRequest(repoID int64, name string) bool {
|
||||
// If ID is 0, it creates a new record. Otherwise, updates existing record.
|
||||
func UpdateProtectBranch(protectBranch *ProtectBranch) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -228,7 +228,7 @@ func UpdateOrgProtectBranch(repo *Repository, protectBranch *ProtectBranch, whit
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ func (repo *Repository) AddCollaborator(u *User) error {
|
||||
collaboration.Mode = ACCESS_MODE_WRITE
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -165,7 +165,7 @@ func (repo *Repository) ChangeCollaborationAccessMode(userID int64, mode AccessM
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -207,7 +207,7 @@ func DeleteCollaboration(repo *Repository, userID int64) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -380,7 +380,7 @@ func DeleteUploads(uploads ...*Upload) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -194,11 +194,6 @@ func writeTmpKeyFile(content string) (string, error) {
|
||||
|
||||
// SSHKeyGenParsePublicKey extracts key type and length using ssh-keygen.
|
||||
func SSHKeyGenParsePublicKey(key string) (string, int, error) {
|
||||
// The ssh-keygen in Windows does not print key type, so no need go further.
|
||||
if setting.IsWindows {
|
||||
return "", 0, nil
|
||||
}
|
||||
|
||||
tmpName, err := writeTmpKeyFile(key)
|
||||
if err != nil {
|
||||
return "", 0, fmt.Errorf("writeTmpKeyFile: %v", err)
|
||||
@@ -294,7 +289,7 @@ func CheckPublicKeyString(content string) (_ string, err error) {
|
||||
return "", errors.New("only a single line with a single key please")
|
||||
}
|
||||
|
||||
// remove any unnecessary whitespace now
|
||||
// Remove any unnecessary whitespace
|
||||
content = strings.TrimSpace(content)
|
||||
|
||||
if !setting.SSH.MinimumKeySizeCheck {
|
||||
@@ -422,7 +417,7 @@ func AddPublicKey(ownerID int64, name, content string) (*PublicKey, error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -504,7 +499,7 @@ func DeletePublicKey(doer *User, id int64) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -668,7 +663,7 @@ func AddDeployKey(repoID int64, name, content string) (*DeployKey, error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -746,7 +741,7 @@ func DeleteDeployKey(doer *User, id int64) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ func (u *User) IsLocal() bool {
|
||||
|
||||
// HasForkedRepo checks if user has already forked a repository with given ID.
|
||||
func (u *User) HasForkedRepo(repoID int64) bool {
|
||||
_, has := HasForkedRepo(u.ID, repoID)
|
||||
_, has, _ := HasForkedRepo(u.ID, repoID)
|
||||
return has
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ func (u *User) UploadAvatar(data []byte) error {
|
||||
m := resize.Resize(avatar.AVATAR_SIZE, avatar.AVATAR_SIZE, img, resize.NearestNeighbor)
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -492,7 +492,7 @@ func GetUserSalt() (string, error) {
|
||||
return tool.RandomString(10)
|
||||
}
|
||||
|
||||
// NewGhostUser creates and returns a fake user for someone has deleted his/her account.
|
||||
// NewGhostUser creates and returns a fake user for someone who has deleted his/her account.
|
||||
func NewGhostUser() *User {
|
||||
return &User{
|
||||
ID: -1,
|
||||
@@ -502,7 +502,7 @@ func NewGhostUser() *User {
|
||||
}
|
||||
|
||||
var (
|
||||
reservedUsernames = []string{"assets", "css", "img", "js", "less", "plugins", "debug", "raw", "install", "api", "avatar", "user", "org", "help", "stars", "issues", "pulls", "commits", "repo", "template", "admin", "new", ".", ".."}
|
||||
reservedUsernames = []string{"explore", "create", "assets", "css", "img", "js", "less", "plugins", "debug", "raw", "install", "api", "avatar", "user", "org", "help", "stars", "issues", "pulls", "commits", "repo", "template", "admin", "new", ".", ".."}
|
||||
reservedUserPatterns = []string{"*.keys"}
|
||||
)
|
||||
|
||||
@@ -569,7 +569,7 @@ func CreateUser(u *User) (err error) {
|
||||
u.MaxRepoCreation = -1
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -839,7 +839,7 @@ func deleteUser(e *xorm.Session, u *User) error {
|
||||
// but issues/comments/pulls will be kept and shown as someone has been deleted.
|
||||
func DeleteUser(u *User) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1104,7 +1104,7 @@ func FollowUser(userID, followID int64) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1130,7 +1130,7 @@ func UnfollowUser(userID, followID int64) (err error) {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ func (email *EmailAddress) Activate() error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -188,7 +188,7 @@ func MakeEmailPrimary(email *EmailAddress) error {
|
||||
}
|
||||
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -294,7 +294,7 @@ func UpdateWebhook(w *Webhook) error {
|
||||
// ID must be specified and do not assign unnecessary fields.
|
||||
func deleteWebhook(bean *Webhook) (err error) {
|
||||
sess := x.NewSession()
|
||||
defer sessionRelease(sess)
|
||||
defer sess.Close()
|
||||
if err = sess.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -94,7 +94,7 @@ func SendUserMail(c *macaron.Context, u User, tpl, code, subject, info string) {
|
||||
msg := NewMessage([]string{u.Email()}, subject, body)
|
||||
msg.Info = fmt.Sprintf("UID: %d, %s", u.ID(), info)
|
||||
|
||||
SendAsync(msg)
|
||||
Send(msg)
|
||||
}
|
||||
|
||||
func SendActivateAccountMail(c *macaron.Context, u User) {
|
||||
@@ -122,7 +122,7 @@ func SendActivateEmailMail(c *macaron.Context, u User, email string) {
|
||||
msg := NewMessage([]string{email}, c.Tr("mail.activate_email"), body)
|
||||
msg.Info = fmt.Sprintf("UID: %d, activate email", u.ID())
|
||||
|
||||
SendAsync(msg)
|
||||
Send(msg)
|
||||
}
|
||||
|
||||
// SendRegisterNotifyMail triggers a notify e-mail by admin created a account.
|
||||
@@ -139,7 +139,7 @@ func SendRegisterNotifyMail(c *macaron.Context, u User) {
|
||||
msg := NewMessage([]string{u.Email()}, c.Tr("mail.register_notify"), body)
|
||||
msg.Info = fmt.Sprintf("UID: %d, registration notify", u.ID())
|
||||
|
||||
SendAsync(msg)
|
||||
Send(msg)
|
||||
}
|
||||
|
||||
// SendCollaboratorMail sends mail notification to new collaborator.
|
||||
@@ -160,7 +160,7 @@ func SendCollaboratorMail(u, doer User, repo Repository) {
|
||||
msg := NewMessage([]string{u.Email()}, subject, body)
|
||||
msg.Info = fmt.Sprintf("UID: %d, add collaborator", u.ID())
|
||||
|
||||
SendAsync(msg)
|
||||
Send(msg)
|
||||
}
|
||||
|
||||
func composeTplData(subject, body, link string) map[string]interface{} {
|
||||
@@ -192,7 +192,7 @@ func SendIssueCommentMail(issue Issue, repo Repository, doer User, tos []string)
|
||||
return
|
||||
}
|
||||
|
||||
SendAsync(composeIssueMessage(issue, repo, doer, MAIL_ISSUE_COMMENT, tos, "issue comment"))
|
||||
Send(composeIssueMessage(issue, repo, doer, MAIL_ISSUE_COMMENT, tos, "issue comment"))
|
||||
}
|
||||
|
||||
// SendIssueMentionMail composes and sends issue mention emails to target receivers.
|
||||
@@ -200,5 +200,5 @@ func SendIssueMentionMail(issue Issue, repo Repository, doer User, tos []string)
|
||||
if len(tos) == 0 {
|
||||
return
|
||||
}
|
||||
SendAsync(composeIssueMessage(issue, repo, doer, MAIL_ISSUE_MENTION, tos, "issue mention"))
|
||||
Send(composeIssueMessage(issue, repo, doer, MAIL_ISSUE_MENTION, tos, "issue mention"))
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
type Message struct {
|
||||
Info string // Message information for log purpose.
|
||||
*gomail.Message
|
||||
confirmChan chan struct{}
|
||||
}
|
||||
|
||||
// NewMessageFrom creates new mail message object with custom From header.
|
||||
@@ -48,9 +49,9 @@ func NewMessageFrom(to []string, from, subject, htmlBody string) *Message {
|
||||
}
|
||||
}
|
||||
msg.SetBody(contentType, body)
|
||||
|
||||
return &Message{
|
||||
Message: msg,
|
||||
Message: msg,
|
||||
confirmChan: make(chan struct{}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,12 +205,14 @@ func processMailQueue() {
|
||||
} else {
|
||||
log.Trace("E-mails sent %s: %s", msg.GetHeader("To"), msg.Info)
|
||||
}
|
||||
msg.confirmChan <- struct{}{}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var mailQueue chan *Message
|
||||
|
||||
// NewContext initializes settings for mailer.
|
||||
func NewContext() {
|
||||
// Need to check if mailQueue is nil because in during reinstall (user had installed
|
||||
// before but swithed install lock off), this function will be called again
|
||||
@@ -222,8 +225,18 @@ func NewContext() {
|
||||
go processMailQueue()
|
||||
}
|
||||
|
||||
func SendAsync(msg *Message) {
|
||||
// Send puts new message object into mail queue.
|
||||
// It returns without confirmation (mail processed asynchronously) in normal cases,
|
||||
// but waits/blocks under hook mode to make sure mail has been sent.
|
||||
func Send(msg *Message) {
|
||||
mailQueue <- msg
|
||||
|
||||
if setting.HookMode {
|
||||
<-msg.confirmChan
|
||||
return
|
||||
}
|
||||
|
||||
go func() {
|
||||
mailQueue <- msg
|
||||
<-msg.confirmChan
|
||||
}()
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
log "gopkg.in/clog.v1"
|
||||
@@ -18,43 +19,65 @@ var (
|
||||
ErrExecTimeout = errors.New("Process execution timeout")
|
||||
)
|
||||
|
||||
// Common timeout.
|
||||
var (
|
||||
// NOTE: could be custom in config file for default.
|
||||
DEFAULT = 60 * time.Second
|
||||
)
|
||||
const DEFAULT_TIMEOUT = 60 * time.Second
|
||||
|
||||
// Process represents a working process inherit from Gogs.
|
||||
// Process represents a running process calls shell command.
|
||||
type Process struct {
|
||||
Pid int64 // Process ID, not system one.
|
||||
PID int64
|
||||
Description string
|
||||
Start time.Time
|
||||
Cmd *exec.Cmd
|
||||
}
|
||||
|
||||
// List of existing processes.
|
||||
var (
|
||||
curPid int64 = 1
|
||||
Processes []*Process
|
||||
)
|
||||
type pidCounter struct {
|
||||
sync.Mutex
|
||||
|
||||
// Add adds a existing process and returns its PID.
|
||||
// The current number of pid, initial is 0, and increase 1 every time it's been used.
|
||||
pid int64
|
||||
}
|
||||
|
||||
func (c *pidCounter) PID() int64 {
|
||||
c.pid++
|
||||
return c.pid
|
||||
}
|
||||
|
||||
var counter = new(pidCounter)
|
||||
var Processes []*Process
|
||||
|
||||
// Add adds a process to global list and returns its PID.
|
||||
func Add(desc string, cmd *exec.Cmd) int64 {
|
||||
pid := curPid
|
||||
counter.Lock()
|
||||
defer counter.Unlock()
|
||||
|
||||
pid := counter.PID()
|
||||
Processes = append(Processes, &Process{
|
||||
Pid: pid,
|
||||
PID: pid,
|
||||
Description: desc,
|
||||
Start: time.Now(),
|
||||
Cmd: cmd,
|
||||
})
|
||||
curPid++
|
||||
return pid
|
||||
}
|
||||
|
||||
// Exec starts executing a command in given path, it records its process and timeout.
|
||||
// Remove removes a process from global list.
|
||||
// It returns true if the process is found and removed by given pid.
|
||||
func Remove(pid int64) bool {
|
||||
counter.Lock()
|
||||
defer counter.Unlock()
|
||||
|
||||
for i := range Processes {
|
||||
if Processes[i].PID == pid {
|
||||
Processes = append(Processes[:i], Processes[i+1:]...)
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Exec starts executing a shell command in given path, it tracks corresponding process and timeout.
|
||||
func ExecDir(timeout time.Duration, dir, desc, cmdName string, args ...string) (string, string, error) {
|
||||
if timeout == -1 {
|
||||
timeout = DEFAULT
|
||||
timeout = DEFAULT_TIMEOUT
|
||||
}
|
||||
|
||||
bufOut := new(bytes.Buffer)
|
||||
@@ -78,7 +101,7 @@ func ExecDir(timeout time.Duration, dir, desc, cmdName string, args ...string) (
|
||||
select {
|
||||
case <-time.After(timeout):
|
||||
if errKill := Kill(pid); errKill != nil {
|
||||
log.Error(4, "Exec(%d:%s): %v", pid, desc, errKill)
|
||||
log.Error(2, "Fail to kill timeout process [pid: %d, desc: %s]: %v", pid, desc, errKill)
|
||||
}
|
||||
<-done
|
||||
return "", ErrExecTimeout.Error(), ErrExecTimeout
|
||||
@@ -89,37 +112,27 @@ func ExecDir(timeout time.Duration, dir, desc, cmdName string, args ...string) (
|
||||
return bufOut.String(), bufErr.String(), err
|
||||
}
|
||||
|
||||
// Exec starts executing a command, it records its process and timeout.
|
||||
// Exec starts executing a shell command, it tracks corresponding process and timeout.
|
||||
func ExecTimeout(timeout time.Duration, desc, cmdName string, args ...string) (string, string, error) {
|
||||
return ExecDir(timeout, "", desc, cmdName, args...)
|
||||
}
|
||||
|
||||
// Exec starts executing a command, it records its process and has default timeout.
|
||||
// Exec starts executing a shell command, it tracks corresponding its process and use default timeout.
|
||||
func Exec(desc, cmdName string, args ...string) (string, string, error) {
|
||||
return ExecDir(-1, "", desc, cmdName, args...)
|
||||
}
|
||||
|
||||
// Remove removes a process from list.
|
||||
func Remove(pid int64) {
|
||||
for i, proc := range Processes {
|
||||
if proc.Pid == pid {
|
||||
Processes = append(Processes[:i], Processes[i+1:]...)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Kill kills and removes a process from list.
|
||||
// Kill kills and removes a process from global list.
|
||||
func Kill(pid int64) error {
|
||||
for i, proc := range Processes {
|
||||
if proc.Pid == pid {
|
||||
for _, proc := range Processes {
|
||||
if proc.PID == pid {
|
||||
if proc.Cmd != nil && proc.Cmd.Process != nil &&
|
||||
proc.Cmd.ProcessState != nil && !proc.Cmd.ProcessState.Exited() {
|
||||
if err := proc.Cmd.Process.Kill(); err != nil {
|
||||
return fmt.Errorf("fail to kill process(%d/%s): %v", proc.Pid, proc.Description, err)
|
||||
return fmt.Errorf("fail to kill process [pid: %d, desc: %s]: %v", proc.PID, proc.Description, err)
|
||||
}
|
||||
}
|
||||
Processes = append(Processes[:i], Processes[i+1:]...)
|
||||
Remove(pid)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,12 +21,14 @@ import (
|
||||
_ "github.com/go-macaron/cache/redis"
|
||||
"github.com/go-macaron/session"
|
||||
_ "github.com/go-macaron/session/redis"
|
||||
"github.com/mcuadros/go-version"
|
||||
log "gopkg.in/clog.v1"
|
||||
"gopkg.in/ini.v1"
|
||||
|
||||
"github.com/gogits/go-libravatar"
|
||||
|
||||
"github.com/gogits/gogs/pkg/bindata"
|
||||
"github.com/gogits/gogs/pkg/process"
|
||||
"github.com/gogits/gogs/pkg/user"
|
||||
)
|
||||
|
||||
@@ -90,7 +92,7 @@ var (
|
||||
ServerCiphers []string `ini:"SSH_SERVER_CIPHERS"`
|
||||
KeyTestPath string `ini:"SSH_KEY_TEST_PATH"`
|
||||
KeygenPath string `ini:"SSH_KEYGEN_PATH"`
|
||||
MinimumKeySizeCheck bool `ini:"-"`
|
||||
MinimumKeySizeCheck bool `ini:"MINIMUM_KEY_SIZE_CHECK"`
|
||||
MinimumKeySizes map[string]int `ini:"-"`
|
||||
}
|
||||
|
||||
@@ -377,6 +379,21 @@ func IsRunUserMatchCurrentUser(runUser string) (string, bool) {
|
||||
return currentUser, runUser == currentUser
|
||||
}
|
||||
|
||||
// getOpenSSHVersion parses and returns string representation of OpenSSH version
|
||||
// returned by command "ssh -V".
|
||||
func getOpenSSHVersion() string {
|
||||
// Note: somehow version is printed to stderr
|
||||
_, stderr, err := process.Exec("getOpenSSHVersion", "ssh", "-V")
|
||||
if err != nil {
|
||||
log.Fatal(2, "Fail to get OpenSSH version: %v - %s", err, stderr)
|
||||
}
|
||||
|
||||
// Trim unused information: https://github.com/gogits/gogs/issues/4507#issuecomment-305150441
|
||||
version := strings.TrimRight(strings.Fields(stderr)[0], ",1234567890")
|
||||
version = strings.TrimSuffix(strings.TrimPrefix(version, "OpenSSH_"), "p")
|
||||
return version
|
||||
}
|
||||
|
||||
// NewContext initializes configuration context.
|
||||
// NOTE: do not print any log except error.
|
||||
func NewContext() {
|
||||
@@ -474,9 +491,9 @@ func NewContext() {
|
||||
if err = Cfg.Section("server").MapTo(&SSH); err != nil {
|
||||
log.Fatal(2, "Fail to map SSH settings: %v", err)
|
||||
}
|
||||
// When disable SSH, start builtin server value is ignored.
|
||||
if SSH.Disabled {
|
||||
SSH.StartBuiltinServer = false
|
||||
SSH.MinimumKeySizeCheck = false
|
||||
}
|
||||
|
||||
if !SSH.Disabled && !SSH.StartBuiltinServer {
|
||||
@@ -487,12 +504,23 @@ func NewContext() {
|
||||
}
|
||||
}
|
||||
|
||||
SSH.MinimumKeySizeCheck = sec.Key("MINIMUM_KEY_SIZE_CHECK").MustBool()
|
||||
SSH.MinimumKeySizes = map[string]int{}
|
||||
minimumKeySizes := Cfg.Section("ssh.minimum_key_sizes").Keys()
|
||||
for _, key := range minimumKeySizes {
|
||||
if key.MustInt() != -1 {
|
||||
SSH.MinimumKeySizes[strings.ToLower(key.Name())] = key.MustInt()
|
||||
// Check if server is eligible for minimum key size check when user choose to enable.
|
||||
// Windows server and OpenSSH version lower than 5.1 (https://github.com/gogits/gogs/issues/4507)
|
||||
// are forced to be disabled because the "ssh-keygen" in Windows does not print key type.
|
||||
if SSH.MinimumKeySizeCheck &&
|
||||
(IsWindows || version.Compare(getOpenSSHVersion(), "5.1", "<")) {
|
||||
SSH.MinimumKeySizeCheck = false
|
||||
log.Warn(`SSH minimum key size check is forced to be disabled because server is not eligible:
|
||||
1. Windows server
|
||||
2. OpenSSH version is lower than 5.1`)
|
||||
}
|
||||
|
||||
if SSH.MinimumKeySizeCheck {
|
||||
SSH.MinimumKeySizes = map[string]int{}
|
||||
for _, key := range Cfg.Section("ssh.minimum_key_sizes").Keys() {
|
||||
if key.MustInt() != -1 {
|
||||
SSH.MinimumKeySizes[strings.ToLower(key.Name())] = key.MustInt()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -804,9 +832,10 @@ var (
|
||||
MailService *Mailer
|
||||
)
|
||||
|
||||
// newMailService initializes mail service options from configuration.
|
||||
// No non-error log will be printed in hook mode.
|
||||
func newMailService() {
|
||||
sec := Cfg.Section("mailer")
|
||||
// Check mailer setting.
|
||||
if !sec.Key("ENABLED").MustBool() {
|
||||
return
|
||||
}
|
||||
@@ -835,6 +864,9 @@ func newMailService() {
|
||||
MailService.FromEmail = parsed.Address
|
||||
}
|
||||
|
||||
if HookMode {
|
||||
return
|
||||
}
|
||||
log.Info("Mail Service Enabled")
|
||||
}
|
||||
|
||||
@@ -849,6 +881,8 @@ func newRegisterMailService() {
|
||||
log.Info("Register Mail Service Enabled")
|
||||
}
|
||||
|
||||
// newNotifyMailService initializes notification email service options from configuration.
|
||||
// No non-error log will be printed in hook mode.
|
||||
func newNotifyMailService() {
|
||||
if !Cfg.Section("service").Key("ENABLE_NOTIFY_MAIL").MustBool() {
|
||||
return
|
||||
@@ -857,6 +891,10 @@ func newNotifyMailService() {
|
||||
return
|
||||
}
|
||||
Service.EnableNotifyMail = true
|
||||
|
||||
if HookMode {
|
||||
return
|
||||
}
|
||||
log.Info("Notify Mail Service Enabled")
|
||||
}
|
||||
|
||||
@@ -873,3 +911,15 @@ func NewServices() {
|
||||
newRegisterMailService()
|
||||
newNotifyMailService()
|
||||
}
|
||||
|
||||
// HookMode indicates whether program starts as Git server-side hook callback.
|
||||
var HookMode bool
|
||||
|
||||
// NewPostReceiveHookServices initializes all services that are needed by
|
||||
// Git server-side post-receive hook callback.
|
||||
func NewPostReceiveHookServices() {
|
||||
HookMode = true
|
||||
newService()
|
||||
newMailService()
|
||||
newNotifyMailService()
|
||||
}
|
||||
|
||||
@@ -22,11 +22,12 @@ import (
|
||||
"gopkg.in/editorconfig/editorconfig-core-go.v1"
|
||||
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/tool"
|
||||
"github.com/gogits/gogs/pkg/markup"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/pkg/tool"
|
||||
)
|
||||
|
||||
// TODO: only initialize map once and save to a local variable to reduce copies.
|
||||
func NewFuncMap() []template.FuncMap {
|
||||
return []template.FuncMap{map[string]interface{}{
|
||||
"GoVer": func() string {
|
||||
@@ -91,13 +92,13 @@ func NewFuncMap() []template.FuncMap {
|
||||
}
|
||||
return str[start:end]
|
||||
},
|
||||
"Join": strings.Join,
|
||||
"EllipsisString": tool.EllipsisString,
|
||||
"DiffTypeToStr": DiffTypeToStr,
|
||||
"DiffLineTypeToStr": DiffLineTypeToStr,
|
||||
"Sha1": Sha1,
|
||||
"ShortSHA1": tool.ShortSHA1,
|
||||
"MD5": tool.MD5,
|
||||
"Join": strings.Join,
|
||||
"EllipsisString": tool.EllipsisString,
|
||||
"DiffTypeToStr": DiffTypeToStr,
|
||||
"DiffLineTypeToStr": DiffLineTypeToStr,
|
||||
"Sha1": Sha1,
|
||||
"ShortSHA1": tool.ShortSHA1,
|
||||
"MD5": tool.MD5,
|
||||
"ActionContent2Commits": ActionContent2Commits,
|
||||
"EscapePound": EscapePound,
|
||||
"RenderCommitMessage": RenderCommitMessage,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
|
||||
"creatorBuild": "19115",
|
||||
"creatorBuild": "19127",
|
||||
"files": {
|
||||
"\/css\/github.min.css": {
|
||||
"fileType": 16,
|
||||
@@ -66,7 +66,7 @@
|
||||
"fileType": 32768,
|
||||
"ignore": 0,
|
||||
"ignoreWasSetByUser": 0,
|
||||
"initialSize": 4048,
|
||||
"initialSize": 514087,
|
||||
"inputAbbreviatedPath": "\/img\/avatar_default.png",
|
||||
"outputAbbreviatedPath": "\/img\/avatar_default.png",
|
||||
"outputPathIsOutsideProject": 0,
|
||||
|
||||
@@ -2138,6 +2138,10 @@ footer .ui.language .menu {
|
||||
.repository .diff-file-box .code-diff .lines-num {
|
||||
border-right: 1px solid #d4d4d5;
|
||||
padding: 0 5px;
|
||||
user-select: none;
|
||||
}
|
||||
.repository .diff-file-box .code-diff .lines-num::before {
|
||||
content: attr(data-line-number);
|
||||
}
|
||||
.repository .diff-file-box .code-diff .lines-num.lines-num-old,
|
||||
.repository .diff-file-box .code-diff .lines-num.lines-num-new {
|
||||
|
||||
@@ -1055,6 +1055,11 @@
|
||||
.lines-num {
|
||||
border-right: 1px solid #d4d4d5;
|
||||
padding: 0 5px;
|
||||
user-select: none;
|
||||
|
||||
&::before {
|
||||
content: attr(data-line-number);
|
||||
}
|
||||
|
||||
&.lines-num-old, &.lines-num-new {
|
||||
cursor: pointer;
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers"
|
||||
"github.com/gogits/gogs/routes"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -20,7 +20,7 @@ func Organizations(c *context.Context) {
|
||||
c.Data["PageIsAdmin"] = true
|
||||
c.Data["PageIsAdminOrganizations"] = true
|
||||
|
||||
routers.RenderUserSearch(c, &routers.UserSearchOptions{
|
||||
routes.RenderUserSearch(c, &routes.UserSearchOptions{
|
||||
Type: models.USER_TYPE_ORGANIZATION,
|
||||
Counter: models.CountOrganizations,
|
||||
Ranger: models.Organizations,
|
||||
@@ -15,7 +15,7 @@ import (
|
||||
"github.com/gogits/gogs/pkg/form"
|
||||
"github.com/gogits/gogs/pkg/mailer"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers"
|
||||
"github.com/gogits/gogs/routes"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -29,7 +29,7 @@ func Users(c *context.Context) {
|
||||
c.Data["PageIsAdmin"] = true
|
||||
c.Data["PageIsAdminUsers"] = true
|
||||
|
||||
routers.RenderUserSearch(c, &routers.UserSearchOptions{
|
||||
routes.RenderUserSearch(c, &routes.UserSearchOptions{
|
||||
Type: models.USER_TYPE_INDIVIDUAL,
|
||||
Counter: models.CountUsers,
|
||||
Ranger: models.Users,
|
||||
@@ -9,8 +9,8 @@ import (
|
||||
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routers/api/v1/user"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/user"
|
||||
)
|
||||
|
||||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Organizations#create-a-new-organization
|
||||
@@ -9,8 +9,8 @@ import (
|
||||
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routers/api/v1/user"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/user"
|
||||
)
|
||||
|
||||
func CreateTeam(c *context.APIContext, form api.CreateTeamOption) {
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
api "github.com/gogits/go-gogs-client"
|
||||
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/routers/api/v1/repo"
|
||||
"github.com/gogits/gogs/routers/api/v1/user"
|
||||
"github.com/gogits/gogs/routes/api/v1/repo"
|
||||
"github.com/gogits/gogs/routes/api/v1/user"
|
||||
)
|
||||
|
||||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Repositories#create-a-new-repository
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/mailer"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers/api/v1/user"
|
||||
"github.com/gogits/gogs/routes/api/v1/user"
|
||||
)
|
||||
|
||||
func parseLoginSource(c *context.APIContext, u *models.User, sourceID int64, loginName string) {
|
||||
@@ -16,11 +16,11 @@ import (
|
||||
"github.com/gogits/gogs/models/errors"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/form"
|
||||
"github.com/gogits/gogs/routers/api/v1/admin"
|
||||
"github.com/gogits/gogs/routers/api/v1/misc"
|
||||
"github.com/gogits/gogs/routers/api/v1/org"
|
||||
"github.com/gogits/gogs/routers/api/v1/repo"
|
||||
"github.com/gogits/gogs/routers/api/v1/user"
|
||||
"github.com/gogits/gogs/routes/api/v1/admin"
|
||||
"github.com/gogits/gogs/routes/api/v1/misc"
|
||||
"github.com/gogits/gogs/routes/api/v1/org"
|
||||
"github.com/gogits/gogs/routes/api/v1/repo"
|
||||
"github.com/gogits/gogs/routes/api/v1/user"
|
||||
)
|
||||
|
||||
func repoAssignment() macaron.Handler {
|
||||
@@ -9,8 +9,8 @@ import (
|
||||
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routers/api/v1/user"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/user"
|
||||
)
|
||||
|
||||
func listUserOrgs(c *context.APIContext, u *models.User, all bool) {
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
api "github.com/gogits/go-gogs-client"
|
||||
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
)
|
||||
|
||||
func ListTeams(c *context.APIContext) {
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
)
|
||||
|
||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#get-branch
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/routers/repo"
|
||||
"github.com/gogits/gogs/routes/repo"
|
||||
)
|
||||
|
||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-raw-content
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/models/errors"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
)
|
||||
|
||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-hooks
|
||||
@@ -15,7 +15,12 @@ import (
|
||||
func ListIssueComments(c *context.APIContext) {
|
||||
var since time.Time
|
||||
if len(c.Query("since")) > 0 {
|
||||
since, _ = time.Parse(time.RFC3339, c.Query("since"))
|
||||
var err error
|
||||
since, err = time.Parse(time.RFC3339, c.Query("since"))
|
||||
if err != nil {
|
||||
c.Error(422, "", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// comments,err:=models.GetCommentsByIssueIDSince(, since)
|
||||
@@ -41,7 +46,12 @@ func ListIssueComments(c *context.APIContext) {
|
||||
func ListRepoIssueComments(c *context.APIContext) {
|
||||
var since time.Time
|
||||
if len(c.Query("since")) > 0 {
|
||||
since, _ = time.Parse(time.RFC3339, c.Query("since"))
|
||||
var err error
|
||||
since, err = time.Parse(time.RFC3339, c.Query("since"))
|
||||
if err != nil {
|
||||
c.Error(422, "", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
comments, err := models.GetCommentsByRepoIDSince(c.Repo.Repository.ID, since.Unix())
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
)
|
||||
|
||||
func composeDeployKeysAPILink(repoPath string) string {
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/form"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
)
|
||||
|
||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#search-repositories
|
||||
@@ -101,6 +101,12 @@ func listUserRepositories(c *context.APIContext, username string) {
|
||||
return
|
||||
}
|
||||
|
||||
if err = models.RepositoryList(ownRepos).LoadAttributes(); err != nil {
|
||||
c.Error(500, "LoadAttributes(ownRepos)", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Early return for querying other user's repositories
|
||||
if c.User.ID != user.ID {
|
||||
repos := make([]*api.Repository, len(ownRepos))
|
||||
for i := range ownRepos {
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
)
|
||||
|
||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Emails#list-email-addresses-for-a-user
|
||||
@@ -11,8 +11,8 @@ import (
|
||||
"github.com/gogits/gogs/models/errors"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers/api/v1/convert"
|
||||
"github.com/gogits/gogs/routers/api/v1/repo"
|
||||
"github.com/gogits/gogs/routes/api/v1/convert"
|
||||
"github.com/gogits/gogs/routes/api/v1/repo"
|
||||
)
|
||||
|
||||
func GetUserByParamsName(c *context.APIContext, name string) *models.User {
|
||||
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package routers
|
||||
package routes
|
||||
|
||||
import (
|
||||
"github.com/Unknwon/paginater"
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
"github.com/gogits/gogs/models"
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers/user"
|
||||
"github.com/gogits/gogs/routes/user"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -24,7 +24,7 @@ func Home(c *context.Context) {
|
||||
if c.IsLogged {
|
||||
if !c.User.IsActive && setting.Service.RegisterEmailConfirm {
|
||||
c.Data["Title"] = c.Tr("auth.active_your_account")
|
||||
c.HTML(200, user.ACTIVATE)
|
||||
c.Success(user.ACTIVATE)
|
||||
} else {
|
||||
user.Dashboard(c)
|
||||
}
|
||||
@@ -39,7 +39,7 @@ func Home(c *context.Context) {
|
||||
}
|
||||
|
||||
c.Data["PageIsHome"] = true
|
||||
c.HTML(200, HOME)
|
||||
c.Success(HOME)
|
||||
}
|
||||
|
||||
func ExploreRepos(c *context.Context) {
|
||||
@@ -61,7 +61,7 @@ func ExploreRepos(c *context.Context) {
|
||||
PageSize: setting.UI.ExplorePagingNum,
|
||||
})
|
||||
if err != nil {
|
||||
c.Handle(500, "SearchRepositoryByName", err)
|
||||
c.ServerError("SearchRepositoryByName", err)
|
||||
return
|
||||
}
|
||||
c.Data["Keyword"] = keyword
|
||||
@@ -69,12 +69,12 @@ func ExploreRepos(c *context.Context) {
|
||||
c.Data["Page"] = paginater.New(int(count), setting.UI.ExplorePagingNum, page, 5)
|
||||
|
||||
if err = models.RepositoryList(repos).LoadAttributes(); err != nil {
|
||||
c.Handle(500, "LoadAttributes", err)
|
||||
c.ServerError("RepositoryList.LoadAttributes", err)
|
||||
return
|
||||
}
|
||||
c.Data["Repos"] = repos
|
||||
|
||||
c.HTML(200, EXPLORE_REPOS)
|
||||
c.Success(EXPLORE_REPOS)
|
||||
}
|
||||
|
||||
type UserSearchOptions struct {
|
||||
@@ -102,7 +102,7 @@ func RenderUserSearch(c *context.Context, opts *UserSearchOptions) {
|
||||
if len(keyword) == 0 {
|
||||
users, err = opts.Ranger(page, opts.PageSize)
|
||||
if err != nil {
|
||||
c.Handle(500, "opts.Ranger", err)
|
||||
c.ServerError("Ranger", err)
|
||||
return
|
||||
}
|
||||
count = opts.Counter()
|
||||
@@ -115,7 +115,7 @@ func RenderUserSearch(c *context.Context, opts *UserSearchOptions) {
|
||||
PageSize: opts.PageSize,
|
||||
})
|
||||
if err != nil {
|
||||
c.Handle(500, "SearchUserByName", err)
|
||||
c.ServerError("SearchUserByName", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -124,7 +124,7 @@ func RenderUserSearch(c *context.Context, opts *UserSearchOptions) {
|
||||
c.Data["Page"] = paginater.New(int(count), opts.PageSize, page, 5)
|
||||
c.Data["Users"] = users
|
||||
|
||||
c.HTML(200, opts.TplName)
|
||||
c.Success(opts.TplName)
|
||||
}
|
||||
|
||||
func ExploreUsers(c *context.Context) {
|
||||
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package routers
|
||||
package routes
|
||||
|
||||
import (
|
||||
"net/mail"
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
"github.com/gogits/gogs/pkg/context"
|
||||
"github.com/gogits/gogs/pkg/form"
|
||||
"github.com/gogits/gogs/pkg/setting"
|
||||
"github.com/gogits/gogs/routers/user"
|
||||
"github.com/gogits/gogs/routes/user"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -101,8 +101,11 @@ func ForkPost(c *context.Context, f form.CreateRepo) {
|
||||
return
|
||||
}
|
||||
|
||||
repo, has := models.HasForkedRepo(ctxUser.ID, baseRepo.ID)
|
||||
if has {
|
||||
repo, has, err := models.HasForkedRepo(ctxUser.ID, baseRepo.ID)
|
||||
if err != nil {
|
||||
c.ServerError("HasForkedRepo", err)
|
||||
return
|
||||
} else if has {
|
||||
c.Redirect(repo.Link())
|
||||
return
|
||||
}
|
||||
@@ -119,7 +122,7 @@ func ForkPost(c *context.Context, f form.CreateRepo) {
|
||||
return
|
||||
}
|
||||
|
||||
repo, err := models.ForkRepository(c.User, ctxUser, baseRepo, f.RepoName, f.Description)
|
||||
repo, err = models.ForkRepository(c.User, ctxUser, baseRepo, f.RepoName, f.Description)
|
||||
if err != nil {
|
||||
c.Data["Err_RepoName"] = true
|
||||
switch {
|
||||
@@ -475,8 +478,11 @@ func ParseCompareInfo(c *context.Context) (*models.User, *models.Repository, *gi
|
||||
// no need to check the fork relation.
|
||||
if !isSameRepo {
|
||||
var has bool
|
||||
headRepo, has = models.HasForkedRepo(headUser.ID, baseRepo.ID)
|
||||
if !has {
|
||||
headRepo, has, err = models.HasForkedRepo(headUser.ID, baseRepo.ID)
|
||||
if err != nil {
|
||||
c.ServerError("HasForkedRepo", err)
|
||||
return nil, nil, nil, nil, "", ""
|
||||
} else if !has {
|
||||
log.Trace("ParseCompareInfo [base_repo_id: %d]: does not have fork or in same repository", baseRepo.ID)
|
||||
c.NotFound()
|
||||
return nil, nil, nil, nil, "", ""
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user