Compare commits

...

31 Commits

Author SHA1 Message Date
Unknwon
b1100b5e34 locale: sync from Crowdin 2017-08-15 18:20:28 -04:00
Sb
ab2c6cb008 models: fix #4692 and typo in comments (#4695) 2017-08-13 02:11:48 -04:00
Unknwon
f2c3f4a944 locale: sync from Crowdin 2017-07-30 02:45:13 -04:00
Unknwon
6bc11c4450 hook: fix email not sent after push (#4430)
Turns out mail service was not initialized at all, also mail must
be sent in sync in hook mode before program exits.
2017-07-27 16:53:02 -04:00
Unknwon
643c85e9c8 routes/home: minor code improve 2017-07-18 22:09:57 -04:00
Unknwon
ee9950ec2f explore: fix total repository number and page number do not match (#4441)
Because in the final repository list we use Distinct to remove
duplicates, but didn't do so when count total number of repositories.
2017-07-18 22:07:40 -04:00
Unknwon
dc10594d7b repo: fix cannot fork repository (#4572)
Should not load attributes if repository not found in HasForkedRepo.
2017-07-18 12:56:23 -04:00
Unknwon
e02fac4968 repo: fix panic on pull request submit (#4572) 2017-07-14 18:51:23 -04:00
Julian Xhokaxhiu
5a88546a80 docker: enable Automated builds for rpi (#4431)
* Enable Automated builds for rpi

* Rename the file to fit only for Docker Hub

* Update the binary to v2.9.0+resin1

* Restore default status

* Commit as new file

In order to avoid breaking native builds
2017-07-14 18:04:19 -04:00
Unknwon
f67d6bbca3 repo/diff: fix line number in split view template (#4584) 2017-07-14 17:02:45 -04:00
Unknwon
c970c4ee41 css: not include line numbers in diff selection (#4584)
Changed template file in order to make CSS work properly.
2017-07-14 16:50:49 -04:00
Unknwon
3a6623104f Makefile: correct errors 2017-07-14 16:48:55 -04:00
Unknwon
b18a2bdcd3 locale: sync from Crowdin 2017-07-14 16:48:41 -04:00
Unknwon
d09eaef542 locale: sync from Crowdin 2017-07-09 21:38:11 -04:00
Unknwon
13cca8a66a models/comment: remove unused SQL parameter (#4586) 2017-06-27 20:39:59 -04:00
Unknwon
8ed2330d6e issue_comment: fix pg syntax ambiguous (#4586)
Also handle error related to time parsing.
2017-06-27 20:21:36 -04:00
Andy Hochhaus
261237745f api: fix ListIssueComments API (#4587) 2017-06-27 19:59:41 -04:00
Unknwon
c9d76a381b css: update less (#4584) 2017-06-27 15:21:14 -04:00
Einar
2961afe8fb css: not include line numbers in diff selection (#4584) 2017-06-27 15:08:19 -04:00
Unknwon
ea03bee1b9 locale: sync from Crowdin 2017-06-27 14:45:10 -04:00
Unknwon
d1a96c2543 cmd/restore: skip non existent directories in backup archive (#4413) 2017-06-25 01:16:32 -04:00
Unknwon
11b1498a6e api/repo: load attributes when listing user repositories (#4565) 2017-06-21 17:41:18 -04:00
Unknwon
f59500a90b locale: sync from Crowdin 2017-06-20 00:10:10 -04:00
Credomane Evonguard
3df25fadfa scripts: fix LSB init scripts so gogs starts when using mysql/postgresql for database (#4561) 2017-06-14 20:37:32 -04:00
Unknwon
0e6a6bf880 Refactoring: remove sessionRelease()
XORM supports automatic roll back in session Close() already.
2017-06-11 03:06:36 -04:00
Unknwon
e1f01305d8 vendor: update github.com/go-macaron/binding (#4428) 2017-06-11 02:59:49 -04:00
Unknwon
23b83cb736 pkg/process: fix potential race condition
Following conditions were not protected:
1. Use and increase next pid
2. Append and remove process from the list
2017-06-11 02:28:08 -04:00
Unknwon
e16196124e setting: disable SSH minimum key size check when not eligible (#4507) 2017-06-11 02:06:26 -04:00
Unknwon
ab2197bc75 random: some code simplify 2017-06-11 00:56:31 -04:00
Unknwon
a887e475e3 repo: change action visibility when repository visibility changed (#4414) 2017-06-11 00:43:56 -04:00
Unknwon
4400d2fdd9 Refactoring: rename package routers -> routes 2017-06-11 00:34:14 -04:00
120 changed files with 900 additions and 575 deletions

View File

@@ -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
View 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/"]

View File

@@ -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)'

View File

@@ -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)

View File

@@ -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)
}
}

View File

@@ -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 (

View File

@@ -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") {

View File

@@ -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 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 shod.
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")

View File

@@ -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

View File

@@ -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

View File

@@ -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 ladministrateur 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 dauthentification
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 nest 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 dauthentification pour numériser limage :
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 daccè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 ny a aucun changement à afficher.
editor.fail_to_update_file=Échec lors de la mise à jour/création du fichier '%s' avec lerreur : %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 lerreur : %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 laccè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 leffacement.
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

View File

@@ -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ókbó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érk, 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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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!

View File

@@ -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
View File

@@ -0,0 +1,3 @@
#!/bin/bash
go build -ldflags "-w -s" resin-xbuild.go

BIN
docker/armhf/qemu-arm-static Executable file

Binary file not shown.

BIN
docker/armhf/resin-xbuild Executable file

Binary file not shown.

View 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)
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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{}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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

View File

@@ -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"))
}

View File

@@ -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
}()
}

View File

@@ -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
}
}

View File

@@ -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()
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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,

View File

@@ -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,

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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) {

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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())

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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"

View File

@@ -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 (

View File

@@ -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