Unknwon 9 anos atrás
pai
commit
830d000667

+ 23 - 15
cmd/serve.go

@@ -87,7 +87,7 @@ func fail(userMessage, logMessage string, args ...interface{}) {
 	os.Exit(1)
 }
 
-func handleUpdateTask(uuid string, user *models.User, repoUserName, repoName string) {
+func handleUpdateTask(uuid string, user *models.User, username, reponame string, isWiki bool) {
 	task, err := models.GetUpdateTaskByUUID(uuid)
 	if err != nil {
 		if models.IsErrUpdateTaskNotExist(err) {
@@ -95,19 +95,21 @@ func handleUpdateTask(uuid string, user *models.User, repoUserName, repoName str
 			return
 		}
 		log.GitLogger.Fatal(2, "GetUpdateTaskByUUID: %v", err)
+	} else if err = models.DeleteUpdateTaskByUUID(uuid); err != nil {
+		log.GitLogger.Fatal(2, "DeleteUpdateTaskByUUID: %v", err)
 	}
 
-	if err = models.Update(task.RefName, task.OldCommitID, task.NewCommitID,
-		user.Name, repoUserName, repoName, user.Id); err != nil {
-		log.GitLogger.Error(2, "Update: %v", err)
+	if isWiki {
+		return
 	}
 
-	if err = models.DeleteUpdateTaskByUUID(uuid); err != nil {
-		log.GitLogger.Fatal(2, "DeleteUpdateTaskByUUID: %v", err)
+	if err = models.Update(task.RefName, task.OldCommitID, task.NewCommitID,
+		user.Name, username, reponame, user.Id); err != nil {
+		log.GitLogger.Error(2, "Update: %v", err)
 	}
 
 	// Ask for running deliver hook and test pull request tasks.
-	reqURL := setting.AppUrl + repoUserName + "/" + repoName + "/tasks/trigger?branch=" +
+	reqURL := setting.AppUrl + username + "/" + reponame + "/tasks/trigger?branch=" +
 		strings.TrimPrefix(task.RefName, "refs/heads/")
 	log.GitLogger.Trace("Trigger task: %s", reqURL)
 
@@ -147,21 +149,27 @@ func runServ(c *cli.Context) {
 	if len(rr) != 2 {
 		fail("Invalid repository path", "Invalid repository path: %v", args)
 	}
-	repoUserName := strings.ToLower(rr[0])
-	repoName := strings.ToLower(strings.TrimSuffix(rr[1], ".git"))
+	username := strings.ToLower(rr[0])
+	reponame := strings.ToLower(strings.TrimSuffix(rr[1], ".git"))
+
+	isWiki := false
+	if strings.HasSuffix(reponame, ".wiki") {
+		isWiki = true
+		reponame = reponame[:len(reponame)-5]
+	}
 
-	repoUser, err := models.GetUserByName(repoUserName)
+	repoUser, err := models.GetUserByName(username)
 	if err != nil {
 		if models.IsErrUserNotExist(err) {
-			fail("Repository owner does not exist", "Unregistered owner: %s", repoUserName)
+			fail("Repository owner does not exist", "Unregistered owner: %s", username)
 		}
-		fail("Internal error", "Failed to get repository owner(%s): %v", repoUserName, err)
+		fail("Internal error", "Failed to get repository owner(%s): %v", username, err)
 	}
 
-	repo, err := models.GetRepositoryByName(repoUser.Id, repoName)
+	repo, err := models.GetRepositoryByName(repoUser.Id, reponame)
 	if err != nil {
 		if models.IsErrRepoNotExist(err) {
-			fail(_ACCESS_DENIED_MESSAGE, "Repository does not exist: %s/%s", repoUser.Name, repoName)
+			fail(_ACCESS_DENIED_MESSAGE, "Repository does not exist: %s/%s", repoUser.Name, reponame)
 		}
 		fail("Internal error", "Failed to get repository: %v", err)
 	}
@@ -258,7 +266,7 @@ func runServ(c *cli.Context) {
 	}
 
 	if requestedMode == models.ACCESS_MODE_WRITE {
-		handleUpdateTask(uuid, user, repoUserName, repoName)
+		handleUpdateTask(uuid, user, username, reponame, isWiki)
 	}
 
 	// Update user key activity.

+ 17 - 0
conf/locale/locale_bg-BG.ini

@@ -535,6 +535,22 @@ milestones.deletion=Изтрий етап
 milestones.deletion_desc=При изтриване на етап ще се премахне информацията за него от всички свързани проблеми. Желаете ли да продължите?
 milestones.deletion_success=Етапът е изтрит успешно!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Настройки
 settings.options=Опции
 settings.collaboration=Сътрудничество
@@ -612,6 +628,7 @@ settings.slack_domain=Домейн
 settings.slack_channel=Канал
 settings.deploy_keys=Ключове за внедряване
 settings.add_deploy_key=Добави ключ за внедряване
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=Все още няма настроен никакъв ключ за внедряване.
 settings.title=Заглавие
 settings.deploy_key_content=Съдържание

+ 17 - 0
conf/locale/locale_de-DE.ini

@@ -535,6 +535,22 @@ milestones.deletion=Meilenstein löschen
 milestones.deletion_desc=Das Löschen dieses Meilensteins wird alle zugehörigen Informationen in allen Issues entfernen. Wirklich fortfahren?
 milestones.deletion_success=Meilenstein erfolgreich gelöscht!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Einstellungen
 settings.options=Optionen
 settings.collaboration=Zusammenarbeit
@@ -612,6 +628,7 @@ settings.slack_domain=Domain
 settings.slack_channel=Kanal
 settings.deploy_keys=Deploy-Keys
 settings.add_deploy_key=Deploy-Key hinzufügen
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=Du hast noch keine Deploy-Schlüssel hinzugefügt.
 settings.title=Titel
 settings.deploy_key_content=Inhalt

+ 23 - 6
conf/locale/locale_es-ES.ini

@@ -535,6 +535,22 @@ milestones.deletion=Borrar milestone
 milestones.deletion_desc=El borrado de este milestone eliminará su información y las incidencias asociadas. ¿Desea continuar?
 milestones.deletion_success=¡El milestone ha sido eliminado con éxito!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Configuración
 settings.options=Opciones
 settings.collaboration=Colaboración
@@ -612,6 +628,7 @@ settings.slack_domain=Dominio
 settings.slack_channel=Canal
 settings.deploy_keys=Claves de Despliegue
 settings.add_deploy_key=Añadir Clave de Despliegue
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=No has añadido ninguna clave de despliegue.
 settings.title=Título
 settings.deploy_key_content=Contenido
@@ -993,12 +1010,12 @@ now=ahora
 1w=%s 1 semana
 1mon=%s 1 mes
 1y=%s 1 año
-seconds=%[2]d %[1]s segundos
-minutes=%s %d minutos
-hours=%s %d horas
-days=%s %d días
-weeks=%s %d semanas
-months=%s %d meses
+seconds=%[2]s %[1]d segundos
+minutes=%[2]s %[1]d minutos
+hours=%[2]s %[1]d horas
+days=%[2]s %[1]d días
+weeks=%[2]s %[1]d semanas
+months=%[2]s %[1]d meses
 years=%s %d años
 raw_seconds=segundos
 raw_minutes=minutos

+ 27 - 10
conf/locale/locale_fr-FR.ini

@@ -336,11 +336,11 @@ repo_name_helper=Idéalement, le nom d'un dépot devrait être court, mémorable
 visibility=Visibilité
 visiblity_helper=Ce dépôt est <span class="ui red text"> privé</span>
 visiblity_helper_forced=L'administrateur du site a forcé tous les nouveaux dépôts à être <span class="ui red text">privés</span>
-visiblity_fork_helper=(Les changement de cette valeur affectera tous les forks)
+visiblity_fork_helper=(Les changement de cette valeur affecteront tous les embranchements)
 clone_helper=Besoin d'aide pour dupliquer ? Visitez <a target="_blank" href="%s">l'aide</a> !
 fork_repo=Scinder le dépôt
-fork_from=Embranchement de
-fork_visiblity_helper=La visibilité d'un référentiel d'embranchement ne peut pas être modifiée.
+fork_from=Scission de
+fork_visiblity_helper=Un dépôt scindé ne peut pas changer sa visiblité
 repo_desc=Description
 repo_lang=Langue
 repo_lang_helper=Sélectionnez les fichiers .gitignore
@@ -353,8 +353,8 @@ create_repo=Créer un dépôt
 default_branch=Branche par défaut
 mirror_interval=Intervalle du miroir (heure)
 watchers=Observateurs
-stargazers=Stargazers
-forks=Forks
+stargazers=Astronome
+forks=Embranchements
 
 form.name_reserved=Le nom de dépôt '%s' est réservé.
 form.name_pattern_not_allowed=Motif '%s' interdit pour les noms de dépôt.
@@ -369,7 +369,7 @@ migrate.permission_denied=Vous n'êtes pas autorisé à importer des dépôts lo
 migrate.invalid_local_path=Chemin local non valide, non existant ou n'étant pas un dossier.
 migrate.failed=Migration failed: %v
 
-forked_from=embranché à partir de
+forked_from=scindé depuis
 fork_from_self=Vous nous ne pouvez pas scinder un dépôt que vous possédez déja !
 copy_link=Copier
 copy_link_success=Copié!
@@ -503,7 +503,7 @@ pulls.tab_files=Fichiers modifiés
 pulls.reopen_to_merge=Veuillez rouvrir cette demande de Pull Request pour effectuer l'opération de fusion.
 pulls.merged=Fusionné
 pulls.has_merged=Cette Pull Request a été fusionnée avec succès !
-pulls.data_broken=Les données de cette Pull Request a été rompues en raison de la suppression d'informations du Fork.
+pulls.data_broken=Les données de cette demande de rattachement ont été compromise en raison de la suppression d'informations sur l'embranchement.
 pulls.is_checking=La recherche de conflits est toujours en cours, veuillez rafraichir la page dans quelques instants.
 pulls.can_auto_merge_desc=Vous pouvez effectuer d'opération de fusion automatique sur cette demande de Pull Request.
 pulls.cannot_auto_merge_desc=Vous ne pouvez effectuer des opération de fusion automatique car il y a des conflits entre les Commits.
@@ -535,6 +535,22 @@ milestones.deletion=Supprimer le Jalon
 milestones.deletion_desc=Supprimer ce Jalon effacera ses informations dans tous les problèmes relatifs. Voulez-vous continuer ?
 milestones.deletion_success=Le Jalon a été supprimé avec succès !
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Paramètres
 settings.options=Options
 settings.collaboration=Collaboration
@@ -555,9 +571,9 @@ settings.transfer_notices_2=-Vous préserverez l'accès si le nouveau propriéta
 settings.transfer_form_title=Veuillez recopier le texte suivant afin de confirmer votre opération :
 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, problèmes, commentaires et accès des collaborateurs.
-settings.delete_notices_fork_1=-Si ce dépôt est public, tous les Forks vont devenir indépendants après la suppression.
-settings.delete_notices_fork_2=-Si ce dépôt est privé, tous les Forks seront supprimés en même temps.
-settings.delete_notices_fork_3=-Si vous souhaitez conserver tous les forks après suppression, veuillez tout d'abord modifier la visibilité de ce dépôt en public.
+settings.delete_notices_fork_1=-Si ce dépôt est public, tous les embranchements vont devenir indépendants après la suppression.
+settings.delete_notices_fork_2=-Si ce dépôt est privé, tous les embranchements seront supprimés en même temps.
+settings.delete_notices_fork_3=-Si vous souhaitez conserver tous les embranchements après suppression, veuillez tout d'abord modifier la visibilité de ce dépôt en public.
 settings.update_settings_success=Options mises à jour avec succès.
 settings.transfer_owner=Nouveau propriétaire
 settings.make_transfer=Transférer
@@ -612,6 +628,7 @@ settings.slack_domain=Domaine
 settings.slack_channel=Canal
 settings.deploy_keys=Clés de déploiement
 settings.add_deploy_key=Ajouter une Clé de Déploiement
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=Vous n'avez ajouté aucune clé de déploiement.
 settings.title=Titre
 settings.deploy_key_content=Contenu

+ 36 - 19
conf/locale/locale_it-IT.ini

@@ -15,7 +15,7 @@ template=Template
 language=Lingua
 create_new=Crea...
 user_profile_and_more=Profilo utente e altro
-signed_in_as=Signed in as
+signed_in_as=Accesso effettuato come
 
 username=Nome utente
 email=E-mail
@@ -64,9 +64,9 @@ db_name=Nome del database
 db_helper=Utilizza il motore INNODB con codifica utf8_general_ci per MySQL.
 ssl_mode=Modalità SSL
 path=Percorso
-sqlite_helper=The file path of SQLite3 or TiDB database.
-err_empty_db_path=SQLite3 or TiDB database path cannot be empty.
-err_invalid_tidb_name=TiDB database name does not allow characters "." and "-".
+sqlite_helper=Il percorso file del database SQLite3 o TiDB.
+err_empty_db_path=Il percorso file del database SQLite3 o TiDB non può essere vuoto.
+err_invalid_tidb_name=Il nome del database TiDB non ammette caratteri "." e "-".
 no_admin_and_disable_registration=Non puoi disabilitare la registrazione senza aver creato un amministratore.
 err_empty_admin_password=La password dell'amministratore non puo' essere vuota.
 
@@ -80,7 +80,7 @@ run_user_helper=L'utente deve avere accesso al percorso root del repository e av
 domain=Dominio
 domain_helper=Questo modifica lo SSH clone URLs.
 ssh_port=Porta SSH
-ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
+ssh_port_helper=Numero di porta utilizzato dal server SSH, lasciare vuoto per disabilitare l'integrazione SSH.
 http_port=Porta HTTP
 http_port_helper=Porta di ascolto dell'applicazione.
 app_url=URL Applicazione
@@ -98,12 +98,12 @@ mail_notify=Abilita Notifiche via Email
 server_service_title=Impostazioni del Server e Altri Servizi
 offline_mode=Abilita Modalità Offline
 offline_mode_popup=Disabilita il CDN anche in modalità produttiva, tutte le risorse saranno servite localmente.
-disable_gravatar=Disable Gravatar Service
-disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
+disable_gravatar=Disattiva il servizio Gravatar
+disable_gravatar_popup=Disabilita Gravatar e sorgenti customizzate, tutti gli avatar vengono caricati dagli utenti o come predefinito.
 disable_registration=Disabilita Registrazione Manuale
 disable_registration_popup=Disabilita la registrazione manuale degli utenti, solo gli amministratori possono creare account.
 enable_captcha=Abilita Captcha
-enable_captcha_popup=Require validate captcha for user self-registration.
+enable_captcha_popup=Richiedi convalida captcha per i nuovi utenti.
 require_sign_in_view=Abilita Richiesta di Accesso per Vedere le Pagine
 require_sign_in_view_popup=Solo gli utenti loggati possono vedere le pagine, i visitatori potranno vedere solo le pagine di accesso e registrazione.
 admin_setting_desc=Non devi per forza creare un account admin proprio adesso, ma comunque l'utente ID=1 otterrà l'accesso da amministratore automaticamente.
@@ -111,7 +111,7 @@ admin_title=Impostazioni Account Amministratore
 admin_name=Nome utente
 admin_password=Password
 confirm_password=Conferma Password
-admin_email=Admin E-mail
+admin_email=E-mail dell'Admin
 install_gogs=Installare Gogs
 test_git_failed=Fallito il test del comando git: %v
 sqlite3_not_available=Questa versione non supporta SQLite3, si prega di scaricare la versione binaria ufficiale da %s, NON la versione gobuild.
@@ -164,7 +164,7 @@ activate_account=Per favore attiva il tuo account
 activate_email=Verifica il tuo indirizzo e-mail
 reset_password=Reimposta la tua password
 register_success=Registrazione completata con successo, Benvenuto
-register_notify=Welcome on board
+register_notify=Benvenuti a bordo
 
 [modal]
 yes=Sì
@@ -253,7 +253,7 @@ location=Posizione
 update_profile=Aggiorna Profilo
 update_profile_success=Il tuo profilo è stato aggiornato con successo.
 change_username=Username Cambiato
-change_username_prompt=This change will affect the way how links relate to your account.
+change_username_prompt=Questa modifica influenzerà il modo in cui i link si riferiscono al tuo account.
 continue=Continua
 cancel=Annulla
 
@@ -278,9 +278,9 @@ email_desc=Il tuo indirizzo e-mail primario sarà usato per le notifiche e altre
 primary=Primario
 primary_email=Imposta come primario
 delete_email=Elimina
-email_deletion=E-mail Deletion
-email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
-email_deletion_success=E-mail has been deleted successfully!
+email_deletion=Eliminazione e-mail
+email_deletion_desc=La procedura di rimozione indirizzo email eliminerà tutte le informazioni correlate dal tuo account. Si desidera continuare?
+email_deletion_success=Indirizzo e-mail eliminato con successo!
 add_new_email=Aggiungi un nuovo indirizzo E-mail
 add_email=Aggiungi E-mail
 add_email_confirmation_sent=Una nuova email di conferma è stata inviata a '%s', per favore controlla la tua posta in arrivo nelle prossime %d ore per completare il processo di registrazione.
@@ -291,13 +291,13 @@ add_key=Aggiungi Chiave
 ssh_desc=Questa è una lista di chiavi SSH associate al tuo account. Poiché queste chiavi consentono a chiunque di ottenere accesso alle tue repository, è molto importante che tu le riconosca.
 ssh_helper=<strong>Non sai come?</strong> Controlla la guida di GitHub sul <a href="%s">creare le tue chiavi SSH</a> o sul risolvere <a href="%s">problemi frequenti</a> che potresti incontrare usando SSH.
 add_new_key=Aggiungi Chiave SSH
-ssh_key_been_used=Public key content has been used.
-ssh_key_name_used=Public key with same name has already existed.
+ssh_key_been_used=È stato utilizzato il contenuto della chiave pubblica.
+ssh_key_name_used=Chiave pubblica con lo stesso nome esiste già.
 key_name=Nome della Chiave
 key_content=Contenuto
-add_key_success=New SSH key '%s' has been added successfully!
+add_key_success=La nuova chiave SSH '%s' è stata aggiunta con successo!
 delete_key=Elimina
-ssh_key_deletion=SSH Key Deletion
+ssh_key_deletion=Eliminazione chiave SSH
 ssh_key_deletion_desc=Delete this SSH key will remove all related accesses for your account. Do you want to continue?
 ssh_key_deletion_success=La chiave SSH e' stata cancellata con successo!
 add_on=Aggiunto il
@@ -319,7 +319,7 @@ token_name=Nome Token
 generate_token=Genera Token
 generate_token_succees=Nuovo token di accesso generato con successo! Assicurarsi di copiare il nuovo token di accesso personale ora: non sarà possibile visualizzarlo nuovamente!
 delete_token=Elimina
-access_token_deletion=Personal Access Token Deletion
+access_token_deletion=Eliminazione Token di accesso personale
 access_token_deletion_desc=Delete this personal access token will remove all related accesses of application. Do you want to continue?
 delete_token_success=Personal access token has been removed successfully! Don't forget to update your application as well.
 
@@ -535,6 +535,22 @@ milestones.deletion=Milestone Deletion
 milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
 milestones.deletion_success=Milestone has been deleted successfully!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Impostazioni
 settings.options=Opzioni
 settings.collaboration=Collaborazione
@@ -612,6 +628,7 @@ settings.slack_domain=Dominio
 settings.slack_channel=Canale
 settings.deploy_keys=Dispiega Chiavi
 settings.add_deploy_key=Add Deploy Key
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=You haven't added any deploy key.
 settings.title=Title
 settings.deploy_key_content=Content

+ 32 - 15
conf/locale/locale_ja-JP.ini

@@ -352,9 +352,9 @@ auto_init=選択されたファイルおよびテンプレートでリポジト
 create_repo=リポジトリを作成
 default_branch=デフォルトのブランチ
 mirror_interval=ミラー 間隔(時)
-watchers=Watchers
+watchers=ウォッチャー
 stargazers=Stargazers
-forks=Forks
+forks=フォーク
 
 form.name_reserved=リポジトリ名 '%s' は予約されています。
 form.name_pattern_not_allowed=リポジトリ名のパターン '%s' は許可されていません。
@@ -365,7 +365,7 @@ migrate_type_helper=このリポジトリは、<span class="text blue"> ミラ
 migrate_repo=リポジトリを移行
 migrate.clone_address=クローンアドレス
 migrate.clone_address_desc=これは、HTTP/HTTPS/GIT URL またはローカル サーバー パスを設定できます。
-migrate.permission_denied=You are not allowed to import local repositories.
+migrate.permission_denied=ローカル リポジトリをインポートすることはできません。
 migrate.invalid_local_path=ローカルパスが無効です。存在しないかディレクトリではありません。
 migrate.failed=Migration failed: %v
 
@@ -390,7 +390,7 @@ repo_is_empty=このリポジトリは空です、後で戻って来て下さい
 
 branch=ブランチ
 tree=ツリー
-filter_branch_and_tag=Filter branch or tag
+filter_branch_and_tag=ブランチまたはタグをフィルタリング
 branches=ブランチ
 tags=タグ
 issues=課題
@@ -485,7 +485,7 @@ issues.label_deletion=ラベルの削除
 issues.label_deletion_desc=ラベルを削除すると、関連するすべての問題の情報が削除されます。続行しますか。
 issues.label_deletion_success=ラベルは正常に削除されました。
 
-pulls.new=New Pull Request
+pulls.new=新しいプルリクエスト
 pulls.compare_changes=変更を比較
 pulls.compare_changes_desc=2つのブランチを比較し、プルリクエストを作成します。
 pulls.compare_base=ベース
@@ -535,6 +535,22 @@ milestones.deletion=マイルス トーンの削除
 milestones.deletion_desc=このマイルス トーンを削除すると、関連課題に該当情報が削除されます。続行しますか。
 milestones.deletion_success=マイルス トーンは正常に削除されました。
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=設定
 settings.options=オプション
 settings.collaboration=コラボレーション
@@ -566,7 +582,7 @@ settings.confirm_delete=削除の確認
 settings.add_collaborator=新しい共同編集者を追加
 settings.add_collaborator_success=新しい共同編集者が追加されました。
 settings.remove_collaborator_success=共同編集者が削除されました。
-settings.search_user_placeholder=Search user...
+settings.search_user_placeholder=Search users
 settings.user_is_org_member=ユーザーは組織の一員なので、共同編集者として追加することはできません。
 settings.add_webhook=Webhook を追加
 settings.hooks_desc=Webhooksは、Gogsで特定のイベントの発生時に指定された外部サービスに通知を許可します。イベントが発生すると、それぞれ指定されたUrlに、POSTリクエストが送られます。詳細はこちらのの <a target="_blank"href="%s"> Webhooks ガイド</a>をご覧ください。
@@ -612,6 +628,7 @@ settings.slack_domain=ドメイン
 settings.slack_channel=チャンネル
 settings.deploy_keys=デプロイキー
 settings.add_deploy_key=デプロイキーを追加
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=でプロキーは1つも追加されていません。
 settings.title=タイトル
 settings.deploy_key_content=コンテント
@@ -644,21 +661,21 @@ release.edit_subheader=Detailed change log can help users understand what has be
 release.tag_name=タグ名
 release.target=ターゲット
 release.tag_helper=既存のタグを選択するか、新しいタグを作成し発行します。
-release.title=Title
-release.content=Content
+release.title=タイトル
+release.content=コンテント
 release.write=書込み
 release.preview=プレビュー
 release.loading=読み込み中…
 release.prerelease_desc=これはリリース前のものです
 release.prerelease_helper=このリリースは非プロダクション利用として識別します。
-release.cancel=Cancel
+release.cancel=キャンセル
 release.publish=リリースを発行
 release.save_draft=下書きを保存
 release.edit_release=リリースを編集
-release.delete_release=Delete This Release
-release.deletion=Release Deletion
+release.delete_release=このリリースを削除
+release.deletion=リリースの削除
 release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
-release.deletion_success=Release has been deleted successfully!
+release.deletion_success=リリースが正常に削除されました。
 release.tag_name_already_exist=このタグ名には既にリリースが存在します。
 release.downloads=Downloads
 
@@ -706,12 +723,12 @@ members.public=パブリック
 members.public_helper=プライベートにする
 members.private=プライベート
 members.private_helper=公開する
-members.member_role=Member Role:
+members.member_role=メンバーの役割:
 members.owner=オーナー
 members.member=メンバー
 members.remove=削除
 members.leave=退出
-members.invite_desc=Add a new member to %s:
+members.invite_desc=%s に新しいメンバーを追加
 members.invite_now=今すぐ招待
 
 teams.join=参加
@@ -736,7 +753,7 @@ teams.read_permission_desc=このチームは<strong>読み取り</strong>権限
 teams.write_permission_desc=このチームは<strong>書き込み</strong>権限を持ち: メンバーはリポジトリの表示及リポジトリへのプッシュができます。
 teams.admin_permission_desc=このチームは<strong>管理者</strong>の権限を持ち: メンバーはチームのリポジトリに対して、読み取り、プッシュや共同編集者の追加ができます。
 teams.repositories=チームのリポジトリ
-teams.search_repo_placeholder=Search repository...
+teams.search_repo_placeholder=リポジトリを検索
 teams.add_team_repository=チームのリポジトリを追加
 teams.remove_repo=削除(Remove)
 teams.add_nonexistent_repo=追加しようとしているリポジトリは存在しません。まずはじめに作成してください。

+ 41 - 24
conf/locale/locale_lv-LV.ini

@@ -164,7 +164,7 @@ activate_account=Lūdzu, aktivizējiet savu kontu
 activate_email=Apstipriniet savu e-pasta adresi
 reset_password=Atiestatīt savu paroli
 register_success=Reģistrācija notikusi veiksmīgi
-register_notify=Welcome on board
+register_notify=Laipni lūgti uz klāja
 
 [modal]
 yes=Jā
@@ -352,9 +352,9 @@ auto_init=Inicializēt šo repozitoriju ar izvēlētajiem failiem un sagatavi
 create_repo=Izveidot repozitoriju
 default_branch=Noklusējuma atzars
 mirror_interval=Spoguļošanas intervāls (stundās)
-watchers=Watchers
-stargazers=Stargazers
-forks=Forks
+watchers=Novērotāji
+stargazers=Zvaigžņdevēji
+forks=Atdalītie repozitoriji
 
 form.name_reserved=Repozitorija nosaukums '%s' ir rezervēts.
 form.name_pattern_not_allowed=Repozitorija nosaukums '%s' nav atļauts.
@@ -367,7 +367,7 @@ migrate.clone_address=Klonēšanas adrese
 migrate.clone_address_desc=Tas var būt HTTP/HTTPS/GIT URL vai ceļš uz lokālā servera.
 migrate.permission_denied=Jums nav tiesību importēt lokālu repozitoriju.
 migrate.invalid_local_path=Nekorents lokālais ceļš, tas neeksistē vai nav direktorijs.
-migrate.failed=Migration failed: %v
+migrate.failed=Migrācija neizdevās: %v
 
 forked_from=atdalīts no
 fork_from_self=Nav iespējams atdalīt repozitoriju, kuram esat īpašnieks!
@@ -390,7 +390,7 @@ repo_is_empty=Šis repozitorijs ir tukšs, apskatiet atkal vēlāk!
 
 branch=Atzars
 tree=Koks
-filter_branch_and_tag=Filter branch or tag
+filter_branch_and_tag=Filtrēt atzarus vai tagus
 branches=Atzari
 tags=Tagi
 issues=Problēmas
@@ -485,7 +485,7 @@ issues.label_deletion=Etiķetes dzēšana
 issues.label_deletion_desc=Dzēšot šo etiķeti, tā tiks noņemta no visām saistītajām problēmām. Vai vēlaties turpināt?
 issues.label_deletion_success=Etiķete tika veiksmīgi izdzēsta!
 
-pulls.new=New Pull Request
+pulls.new=Jauns izmaiņu pieprasījums
 pulls.compare_changes=Salīdzināt izmaiņas
 pulls.compare_changes_desc=Salīdzināt divus atzarus un izveidot izmaiņu pieprasījumu.
 pulls.compare_base=pamata
@@ -535,6 +535,22 @@ milestones.deletion=Atskaites punkta dzēšana
 milestones.deletion_desc=Dzēšot šo atskaites punktu tiks noņemta arī saistītā informācija no problēmu ziņojumiem. Vai vēlaties turpināt?
 milestones.deletion_success=Atskaites punkts tika veiksmīgi izdzēsts!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Iestatījumi
 settings.options=Opcijas
 settings.collaboration=Sadarbība
@@ -566,7 +582,7 @@ settings.confirm_delete=Apstiprināt dzēšanu
 settings.add_collaborator=Pievienot jaunu līdzstrādnieku
 settings.add_collaborator_success=Jauns līdzstrādnieks ir pievienots.
 settings.remove_collaborator_success=Līdzstrādnieks tika noņemts.
-settings.search_user_placeholder=Search user...
+settings.search_user_placeholder=Meklēt lietotāju...
 settings.user_is_org_member=Lietotājs ir organizācijas biedrs, kas nevar tikt pievienots kā līdzstrādnieks.
 settings.add_webhook=Pievienot tīmekļa āķi
 settings.hooks_desc=Tīmekļa āķi ļauj paziņot ārējiem servisiem par noteiktiem notikomiem, kas notiek Git servisā. Kad iestāsies kāds notikums, katram ārējā servisa URL tiks nosūtīts POST pieprasījums. Lai uzzinātu sīkāk skatieties <a target="_blank" href="%s">Tīmekļa āķu rokasgrāmatā</a>.
@@ -612,6 +628,7 @@ settings.slack_domain=Domēns
 settings.slack_channel=Kanāls
 settings.deploy_keys=Izvietot atslēgas
 settings.add_deploy_key=Pievienot izvietošanas atslēgu
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=Nav pievienota neviena izvietošanas atslēga.
 settings.title=Virsraksts
 settings.deploy_key_content=Saturs
@@ -639,28 +656,28 @@ release.stable=Stabila
 release.edit=labot
 release.ahead=<strong>%d</strong> revīzijas atzarā %s kopš šī laidiena
 release.source_code=Izejas kods
-release.new_subheader=Publish releases to iterate product.
-release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.new_subheader=Publicējiet laidienus, lai veiktu produkta iterācijas.
+release.edit_subheader=Detalizēts žurnāls var palīdzēt lietotājiem saprast, kas tika uzlabots.
 release.tag_name=Taga nosaukums
 release.target=Mērķis
 release.tag_helper=Publicējot, izvēlieties esošu vai izveidojiet jaunu tagu.
-release.title=Title
-release.content=Content
+release.title=Virsraksts
+release.content=Saturs
 release.write=Rakstīt
 release.preview=Priekšskatītījums
 release.loading=Notiek ielāde...
 release.prerelease_desc=Šī ir pirmslaidiena versija
 release.prerelease_helper=Tiks norādīts, ka šis laidiens nav gatavs lietošanai produkcijas režīmā.
-release.cancel=Cancel
+release.cancel=Atcelt
 release.publish=Publicēt laidienu
 release.save_draft=Saglabāt melnrakstu
 release.edit_release=Labot laidienu
-release.delete_release=Delete This Release
-release.deletion=Release Deletion
-release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
-release.deletion_success=Release has been deleted successfully!
+release.delete_release=Dzēst šo laidienu
+release.deletion=Laidiena dzēšana
+release.deletion_desc=Dzēšot šo laidienu tiks dzēsts arī atbilstošs Git tags. Vai vēlaties turpināt?
+release.deletion_success=Laidiens tika veiksmīgi dzēsts!
 release.tag_name_already_exist=Laidiens ar šādu taga nosaukumu jau eksistē.
-release.downloads=Downloads
+release.downloads=Lejupielādes
 
 [org]
 org_name_holder=Organizācijas nosaukums
@@ -701,17 +718,17 @@ settings.delete_org_title=Organizācijas dzēšana
 settings.delete_org_desc=Šī organizācija tiks pilnībā izdzēsta, vai vēlaties turpināt?
 settings.hooks_desc=Pievienot tīmekļa āķus, kas nostrādās <strong>visiem repozitorijiem</strong> šajā organizācijā.
 
-members.membership_visibility=Membership Visibility:
+members.membership_visibility=Dalībnieka redzamība:
 members.public=Publisks
 members.public_helper=padarīt privātu
 members.private=Privāts
 members.private_helper=padarīt publisku
-members.member_role=Member Role:
+members.member_role=Dalībnieka loma:
 members.owner=Īpašnieks
 members.member=Biedri
 members.remove=Noņemt
 members.leave=Atstāt
-members.invite_desc=Add a new member to %s:
+members.invite_desc=Pievienot jaunu dalībnieku pie %s:
 members.invite_now=Uzaicināt tagad
 
 teams.join=Pievienoties
@@ -736,7 +753,7 @@ teams.read_permission_desc=Šai komandai ir <strong>lasīšanas</strong> tiesīb
 teams.write_permission_desc=Šai komandai ir <strong>rakstīšanas</strong> tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem.
 teams.admin_permission_desc=Šai komandai ir <strong>administratora</strong> tiesības: dalībnieki var lasīt, rakstīt un pievienot citus dalībniekus komandas repozitorijiem.
 teams.repositories=Komandas repozitoriji
-teams.search_repo_placeholder=Search repository...
+teams.search_repo_placeholder=Meklēt repozitorijā...
 teams.add_team_repository=Pievienot komandas repozitoriju
 teams.remove_repo=Noņemt
 teams.add_nonexistent_repo=Repozitorijs, kuram Jūs mēģinat pievienot neeksistē, sākumā izveidojiet to.
@@ -767,8 +784,8 @@ dashboard.delete_inactivate_accounts=Dzēst visus neaktīvos kontus
 dashboard.delete_inactivate_accounts_success=Visi neaktīvie kotni tika veiksmīgi izdzēsti.
 dashboard.delete_repo_archives=Dzēst visu repozitoriju arhīvus
 dashboard.delete_repo_archives_success=Visu repozitoriju arhīvi tika veiksmīgi izdzēsti.
-dashboard.delete_missing_repos=Delete all repository records that lost Git files
-dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.delete_missing_repos=Dzēst visus repozitorija ierakstus, kas zaudēja Git failus
+dashboard.delete_missing_repos_success=Visi repozitorija ieraksti, kas zaudēja Git failus tika veiksmīgi dzēsti.
 dashboard.git_gc_repos=Veikt repozitoriju datu sakārtošānu (git gc)
 dashboard.git_gc_repos_success=Datu sakārtošana visiem repozitorijiem veiksmīgi pabeigta.
 dashboard.resync_all_sshkeys=Pārrakstīt '.ssh/authorized_keys' failu (brīdinājums: ne-Git atslēgas tiks pazaudētas)

+ 17 - 0
conf/locale/locale_nl-NL.ini

@@ -535,6 +535,22 @@ milestones.deletion=Mijlpaal verwijderen
 milestones.deletion_desc=Het verwijderen van dit label zal alle informatie in de gerelateerde problemen verwijderen. Wilt u doorgaan?
 milestones.deletion_success=Mijlpaal is met succes verwijderd!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Instellingen
 settings.options=Opties
 settings.collaboration=Samenwerking
@@ -612,6 +628,7 @@ settings.slack_domain=Slack domein
 settings.slack_channel=Slack kanaal
 settings.deploy_keys=Installeer sleutels
 settings.add_deploy_key=Toevoegen deploy sleutel
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=U hebt nog geen deploy sleutels toegevoegd.
 settings.title=Titel
 settings.deploy_key_content=Inhoud

+ 17 - 0
conf/locale/locale_pl-PL.ini

@@ -535,6 +535,22 @@ milestones.deletion=Milestone Deletion
 milestones.deletion_desc=Delete this milestone will remove its information in all related issues. Do you want to continue?
 milestones.deletion_success=Kamień milowy został usunięty pomyślnie!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Ustawienia
 settings.options=Opcje
 settings.collaboration=Współpraca
@@ -612,6 +628,7 @@ settings.slack_domain=Domena
 settings.slack_channel=Kanał
 settings.deploy_keys=Klucze wdrożeniowe
 settings.add_deploy_key=Add Deploy Key
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=You haven't added any deploy key.
 settings.title=Tytuł
 settings.deploy_key_content=Treść

+ 40 - 23
conf/locale/locale_pt-BR.ini

@@ -1,7 +1,7 @@
 app_desc=Um serviço de Git auto-hospedado e amigável escrito em Go
 
 home=Página Inicial
-dashboard=Painel de controle
+dashboard=Página Inicial
 explore=Explorar
 help=Ajuda
 sign_in=Entrar
@@ -164,7 +164,7 @@ activate_account=Por favor, ative sua conta
 activate_email=Verifique seu endereço de e-mail
 reset_password=Resetar sua senha
 register_success=Registrado com sucesso. Bem vindo
-register_notify=Welcome on board
+register_notify=Bem-vindo a bordo
 
 [modal]
 yes=Sim
@@ -352,8 +352,8 @@ auto_init=Inicializar este repositório com os arquivos selecionados e modelo
 create_repo=Criar Repositório
 default_branch=Branch padrão
 mirror_interval=Intervalo de Espelho (hora)
-watchers=Watchers
-stargazers=Stargazers
+watchers=Observadores
+stargazers=Usuários que estrelaram
 forks=Forks
 
 form.name_reserved=O nome de repositório '%s' não pode ser usado.
@@ -367,7 +367,7 @@ migrate.clone_address=Endereço de Clone
 migrate.clone_address_desc=Isto pode ser uma URL de HTTP/HTTPS/GIT ou um caminho de diretório local.
 migrate.permission_denied=Você não pode importar repositórios locais.
 migrate.invalid_local_path=Caminho local inválido, não existe ou não é um diretório.
-migrate.failed=Migration failed: %v
+migrate.failed=Migração falhou: %v
 
 forked_from=forkado de
 fork_from_self=Você não pode criar fork de um repositório que já é seu!
@@ -390,7 +390,7 @@ repo_is_empty=Este repositório está vazio, por favor volte mais tarde!
 
 branch=Branch
 tree=Árvore
-filter_branch_and_tag=Filter branch or tag
+filter_branch_and_tag=Filtrar branch ou tag
 branches=Branches
 tags=Tags
 issues=Problemas
@@ -485,7 +485,7 @@ issues.label_deletion=Exclusão de etiqueta
 issues.label_deletion_desc=Excluir uma etiqueta a retirará de todos os problemas que ela estiver marcando. Quer mesmo continuar?
 issues.label_deletion_success=A etiqueta foi excluída com sucesso!
 
-pulls.new=New Pull Request
+pulls.new=Novo Pull Request
 pulls.compare_changes=Comparar mudanças
 pulls.compare_changes_desc=Comparar os dois branches e criar pull request com as mudanças.
 pulls.compare_base=base
@@ -535,6 +535,22 @@ milestones.deletion=Exclusão de marco
 milestones.deletion_desc=Excluir este marco removerá a informação dele em todos os problemas aos quais estiver associado. Você quer mesmo continuar?
 milestones.deletion_success=Marco excluído com sucesso!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Configurações
 settings.options=Opções
 settings.collaboration=Colaboração
@@ -566,7 +582,7 @@ settings.confirm_delete=Confirmar Deleção
 settings.add_collaborator=Adicionar um Novo Colaborador
 settings.add_collaborator_success=O novo colaborador foi adicionado.
 settings.remove_collaborator_success=O colaborador foi removido.
-settings.search_user_placeholder=Search user...
+settings.search_user_placeholder=Pesquisar usuário...
 settings.user_is_org_member=O usuário é um membro da organização que não pode ser adicionado como um colaborador.
 settings.add_webhook=Adicionar Webhook
 settings.hooks_desc=Hooks da web ou Webhooks permitem serviços externos serem notificados quando certos eventos acontecem no Gogs. Quando acontecem os eventos especificados, enviaremos uma solicitação POST para cada uma das URLs que você fornecer. Saiba mais no nosso <a target="_blank" href="%s"> Guia de Webhooks</a>.
@@ -612,6 +628,7 @@ settings.slack_domain=Domínio
 settings.slack_channel=Canal
 settings.deploy_keys=Chaves de Deploy
 settings.add_deploy_key=Nova chave
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=Você ainda não adicionou chaves para implantação de software.
 settings.title=Título
 settings.deploy_key_content=Conteúdo da chave
@@ -639,26 +656,26 @@ release.stable=Estável
 release.edit=editar
 release.ahead=<strong>%d</strong> commits para %s depois desta versão
 release.source_code=Código fonte
-release.new_subheader=Publish releases to iterate product.
-release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.new_subheader=Publicar versões para iterar o produto.
+release.edit_subheader=Um changelog detalhado ajuda os usuários a entenderem o que foi melhorado.
 release.tag_name=Nome da tag
 release.target=Destino
 release.tag_helper=Escolha uma tag existente, ou crie uma nova tag em publicar.
-release.title=Title
-release.content=Content
+release.title=Título
+release.content=Conteúdo
 release.write=Escrever
 release.preview=Visualizar
 release.loading=Carregando...
 release.prerelease_desc=Esta é uma versão prévia
 release.prerelease_helper=Vou salientar que esta versão é identificada como não pronta para produção.
-release.cancel=Cancel
+release.cancel=Cancelar
 release.publish=Publicar Versão
 release.save_draft=Salvar Rascunho
 release.edit_release=Editar Versão
-release.delete_release=Delete This Release
-release.deletion=Release Deletion
-release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
-release.deletion_success=Release has been deleted successfully!
+release.delete_release=Deletar esta versão
+release.deletion=Deleção de versão
+release.deletion_desc=Deletar esta versão vai deletar a tag do git correspondente. Você deseja continuar?
+release.deletion_success=A versão foi deletada com sucesso!
 release.tag_name_already_exist=Já existiu versão com esse nome de tag.
 release.downloads=Downloads
 
@@ -701,17 +718,17 @@ settings.delete_org_title=Deleção da Organização
 settings.delete_org_desc=Esta organização será deletada permanentemente, você quer continuar?
 settings.hooks_desc=Adicionar Webhooks que serão acionados para <strong>todos os repositórios</strong> dessa organização.
 
-members.membership_visibility=Membership Visibility:
+members.membership_visibility=Visibilidade da associação:
 members.public=Público
 members.public_helper=tornar privado
 members.private=Privado
 members.private_helper=torar público
-members.member_role=Member Role:
+members.member_role=Categoria de membro:
 members.owner=Dono
 members.member=Membro
 members.remove=Remover
 members.leave=Sair
-members.invite_desc=Add a new member to %s:
+members.invite_desc=Adicionar novo membro em %s:
 members.invite_now=Convidar Agora
 
 teams.join=Juntar-se
@@ -736,7 +753,7 @@ teams.read_permission_desc=Essa equipe concede acesso para <strong>Leitura</stro
 teams.write_permission_desc=Esta equipe concede acesso para <strong>escrita</strong>: Membros podem ler e fazer push para os repositórios da equipe.
 teams.admin_permission_desc=Esta equipe concede acesso de <strong>Administrador</strong>: Membros podem ler, fazer push e adicionar outros colaboradores para os repositórios da equipe.
 teams.repositories=Repositórios da Equipe
-teams.search_repo_placeholder=Search repository...
+teams.search_repo_placeholder=Pesquisar repositório...
 teams.add_team_repository=Adicionar Repositório da Equipe
 teams.remove_repo=Remover
 teams.add_nonexistent_repo=O repositório que você está tentando adicionar não existe, por favor, crie-o primeiro.
@@ -767,8 +784,8 @@ dashboard.delete_inactivate_accounts=Excluir todas as contas inativas
 dashboard.delete_inactivate_accounts_success=Todas as contas inativas foram excluídas com sucesso.
 dashboard.delete_repo_archives=Excluir todos os arquivos dos repositórios
 dashboard.delete_repo_archives_success=Todos os arquivos dos repositórios foram excluídos com sucesso.
-dashboard.delete_missing_repos=Delete all repository records that lost Git files
-dashboard.delete_missing_repos_success=All repository records that lost Git files have been deleted successfully.
+dashboard.delete_missing_repos=Deletar todos os repositórios que perderam arquivos do git
+dashboard.delete_missing_repos_success=Todos os registros de repositórios que perderam arquivos do git foram deletados com sucesso.
 dashboard.git_gc_repos=Fazer coleta de lixo nos repositórios
 dashboard.git_gc_repos_success=Em todos repositórios, a coleta de lixo foi realizada com sucesso.
 dashboard.resync_all_sshkeys=Reescrever o arquivo '.ssh/authorized_keys' (atenção: chaves que não sejam do Gogs serão perdidas)

+ 28 - 11
conf/locale/locale_ru-RU.ini

@@ -353,7 +353,7 @@ create_repo=Создать репозиторий
 default_branch=Ветка по умолчанию
 mirror_interval=Интервал зеркалирования (час)
 watchers=Наблюдатели
-stargazers=Stargazers
+stargazers=Звездочеты
 forks=Форки
 
 form.name_reserved=Имя репозитория  '%s'  зарезервировано.
@@ -367,7 +367,7 @@ migrate.clone_address=Скопировать адрес
 migrate.clone_address_desc=Это может быть HTTP/HTTPS/GIT адрес или локальный путь на сервере.
 migrate.permission_denied=У вас нет прав на импорт локальных репозиториев.
 migrate.invalid_local_path=Недопустимый локальный путь. Возможно он не существует или является не папкой.
-migrate.failed=Migration failed: %v
+migrate.failed=Миграция не удалась: %v
 
 forked_from=форк от
 fork_from_self=Вы не можете форкнуть репозитарий, так как Вы уже его владелец!
@@ -390,7 +390,7 @@ repo_is_empty=Этот репозиторий пуст, пожалуйста, в
 
 branch=Ветка
 tree=Дерево
-filter_branch_and_tag=Filter branch or tag
+filter_branch_and_tag=Фильтр по ветке или тегу
 branches=Ветки
 tags=Метки
 issues=Обсуждения
@@ -535,6 +535,22 @@ milestones.deletion=Удаление контрольной точки
 milestones.deletion_desc=Удаление этой контрольной точки приведет с удалению всей информации, во всех вопросах (Issues). Вы действительно хотите продолжить?
 milestones.deletion_success=Контрольная точка успешно удалена!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=Настройки
 settings.options=Опции
 settings.collaboration=Сотрудничество
@@ -612,6 +628,7 @@ settings.slack_domain=Домен
 settings.slack_channel=Канал
 settings.deploy_keys=Ключи развертывания
 settings.add_deploy_key=Добавить ключ развертывания
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=Вы не добавляли ключи развертывания.
 settings.title=Заголовок
 settings.deploy_key_content=Содержимое
@@ -639,13 +656,13 @@ release.stable=Стабильный
 release.edit=Редактировать
 release.ahead=<strong>%d</strong> коммитов %s начиная с этого релиза
 release.source_code=Исходный код
-release.new_subheader=Publish releases to iterate product.
-release.edit_subheader=Detailed change log can help users understand what has been improved.
+release.new_subheader=Публикуйте релизы для итерации продукта.
+release.edit_subheader=Подробный журнал изменений может помочь пользователям понять, что было улучшено.
 release.tag_name=Имя тега
 release.target=Цель
 release.tag_helper=Выберите существующий тег, или создайте новый.
-release.title=Title
-release.content=Content
+release.title=Заголовок
+release.content=Содержимое
 release.write=Запись
 release.preview=Предварительный просмотр
 release.loading=Загрузка...
@@ -655,10 +672,10 @@ release.cancel=Отменить
 release.publish=Опубликовать релиз
 release.save_draft=Сохранить черновик
 release.edit_release=Редактировать релиз
-release.delete_release=Delete This Release
-release.deletion=Release Deletion
-release.deletion_desc=Delete this release will delete corresponding Git tag. Do you want to continue?
-release.deletion_success=Release has been deleted successfully!
+release.delete_release=Удалить этот релиз
+release.deletion=Удаление релиза
+release.deletion_desc=Удаление данного релиза так же удалит все относящиеся к нему Git теги. Продолжить?
+release.deletion_success=Релиз был успешно удален!
 release.tag_name_already_exist=Релиз с этим именем тега уже существует.
 release.downloads=Загрузки
 

+ 17 - 0
conf/locale/locale_zh-CN.ini

@@ -535,6 +535,22 @@ milestones.deletion=删除里程碑操作
 milestones.deletion_desc=删除该里程碑将会移除所有工单中相关的信息。是否继续?
 milestones.deletion_success=里程碑删除成功!
 
+wiki=Wiki
+wiki.welcome=欢迎使用 Wiki!
+wiki.welcome_desc=Wiki 是用于共同协作文档的地方,清晰的文档可以帮助其他人深入了解您的项目。
+wiki.create_first_page=创建第一个页面
+wiki.page=页面
+wiki.filter_page=过滤页面
+wiki.new_page=创建新的页面
+wiki.default_commit_message=关于此次修改的说明(可选)。
+wiki.save_page=保存页面
+wiki.last_commit_info=%s 于 %s 修改了此页面
+wiki.edit_page_button=修改
+wiki.new_page_button=新的页面
+wiki.page_already_exists=相同名称的 Wiki 页面已经存在。
+wiki.pages=所有页面
+wiki.last_updated=最后更新于 %s
+
 settings=仓库设置
 settings.options=基本设置
 settings.collaboration=管理协作者
@@ -612,6 +628,7 @@ settings.slack_domain=域名
 settings.slack_channel=频道
 settings.deploy_keys=管理部署密钥
 settings.add_deploy_key=添加部署密钥
+settings.deploy_key_desc=部署密钥仅具有只读权限,它在功能上和个人用户的公开密钥有本质区别。
 settings.no_deploy_keys=您还没有添加任何部署密钥。
 settings.title=标题
 settings.deploy_key_content=密钥文本

+ 17 - 0
conf/locale/locale_zh-HK.ini

@@ -535,6 +535,22 @@ milestones.deletion=刪除里程碑
 milestones.deletion_desc=刪除該里程碑將會移除所有問題中相關信息。是否繼續?
 milestones.deletion_success=里程碑刪除成功!
 
+wiki=Wiki
+wiki.welcome=Welcome to Wiki!
+wiki.welcome_desc=Wiki is the place where you would like to document your project together and make it better.
+wiki.create_first_page=Create the first page
+wiki.page=Page
+wiki.filter_page=Filter page
+wiki.new_page=Create New Page
+wiki.default_commit_message=Write a note about this update (optional).
+wiki.save_page=Save Page
+wiki.last_commit_info=%s edited this page %s
+wiki.edit_page_button=Edit
+wiki.new_page_button=New Page
+wiki.page_already_exists=Wiki page with same name already exists.
+wiki.pages=Pages
+wiki.last_updated=Last updated %s
+
 settings=倉庫設置
 settings.options=基本設置
 settings.collaboration=管理協作者
@@ -612,6 +628,7 @@ settings.slack_domain=域名
 settings.slack_channel=頻道
 settings.deploy_keys=管理部署密鑰
 settings.add_deploy_key=添加部署密鑰
+settings.deploy_key_desc=Deploy key only has read-only access. It is not same as personal account SSH keys.
 settings.no_deploy_keys=您還沒有添加任何部署密鑰。
 settings.title=標題
 settings.deploy_key_content=密鑰文本

+ 46 - 35
models/repo.go

@@ -378,19 +378,26 @@ type CloneLink struct {
 	Git   string
 }
 
-// CloneLink returns clone URLs of repository.
-func (repo *Repository) CloneLink() (cl CloneLink, err error) {
-	if err = repo.GetOwner(); err != nil {
-		return cl, err
+func (repo *Repository) cloneLink(isWiki bool) *CloneLink {
+	repoName := repo.Name
+	if isWiki {
+		repoName += ".wiki"
 	}
 
+	repo.Owner = repo.MustOwner()
+	cl := new(CloneLink)
 	if setting.SSHPort != 22 {
-		cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", setting.RunUser, setting.SSHDomain, setting.SSHPort, repo.Owner.Name, repo.Name)
+		cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", setting.RunUser, setting.SSHDomain, setting.SSHPort, repo.Owner.Name, repoName)
 	} else {
-		cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.SSHDomain, repo.Owner.Name, repo.Name)
+		cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.SSHDomain, repo.Owner.Name, repoName)
 	}
-	cl.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, repo.Owner.Name, repo.Name)
-	return cl, nil
+	cl.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, repo.Owner.Name, repoName)
+	return cl
+}
+
+// CloneLink returns clone URLs of repository.
+func (repo *Repository) CloneLink() (cl *CloneLink) {
+	return repo.cloneLink(false)
 }
 
 var (
@@ -647,10 +654,7 @@ func prepareRepoCommit(repo *Repository, tmpDir, repoPath string, opts CreateRep
 		return fmt.Errorf("getRepoInitFile[%s]: %v", opts.Readme, err)
 	}
 
-	cloneLink, err := repo.CloneLink()
-	if err != nil {
-		return fmt.Errorf("CloneLink: %v", err)
-	}
+	cloneLink := repo.CloneLink()
 	match := map[string]string{
 		"Name":           repo.Name,
 		"Description":    repo.Description,
@@ -980,7 +984,9 @@ func TransferOwnership(u *User, newOwnerName string, repo *Repository) error {
 
 	// Change repository directory name.
 	if err = os.Rename(RepoPath(owner.Name, repo.Name), RepoPath(newOwner.Name, repo.Name)); err != nil {
-		return fmt.Errorf("rename directory: %v", err)
+		return fmt.Errorf("rename repository directory: %v", err)
+	} else if err = os.Rename(WikiPath(owner.Name, repo.Name), WikiPath(newOwner.Name, repo.Name)); err != nil {
+		return fmt.Errorf("rename repository wiki: %v", err)
 	}
 
 	return sess.Commit()
@@ -1002,7 +1008,10 @@ func ChangeRepositoryName(u *User, oldRepoName, newRepoName string) (err error)
 	}
 
 	// Change repository directory name.
-	return os.Rename(RepoPath(u.LowerName, oldRepoName), RepoPath(u.LowerName, newRepoName))
+	if err = os.Rename(RepoPath(u.Name, oldRepoName), RepoPath(u.Name, newRepoName)); err != nil {
+		return fmt.Errorf("rename repository directory: %v", err)
+	}
+	return os.Rename(WikiPath(u.Name, oldRepoName), WikiPath(u.Name, newRepoName))
 }
 
 func getRepositoriesByForkID(e Engine, forkID int64) ([]*Repository, error) {
@@ -1106,26 +1115,19 @@ func DeleteRepository(uid, repoID int64) error {
 		}
 	}
 
-	if _, err = sess.Delete(&Repository{ID: repoID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&Access{RepoID: repo.ID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&Action{RepoID: repo.ID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&Watch{RepoID: repoID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&Mirror{RepoID: repoID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&IssueUser{RepoID: repoID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&Milestone{RepoID: repoID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&Release{RepoID: repoID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&Collaboration{RepoID: repoID}); err != nil {
-		return err
-	} else if _, err = sess.Delete(&PullRequest{BaseRepoID: repoID}); err != nil {
-		return err
+	if err = deleteBeans(sess,
+		&Repository{ID: repoID},
+		&Access{RepoID: repo.ID},
+		&Action{RepoID: repo.ID},
+		&Watch{RepoID: repoID},
+		&Mirror{RepoID: repoID},
+		&IssueUser{RepoID: repoID},
+		&Milestone{RepoID: repoID},
+		&Release{RepoID: repoID},
+		&Collaboration{RepoID: repoID},
+		&PullRequest{BaseRepoID: repoID},
+	); err != nil {
+		return fmt.Errorf("deleteBeans: %v", err)
 	}
 
 	// Delete comments and attachments.
@@ -1169,7 +1171,16 @@ func DeleteRepository(uid, repoID int64) error {
 	// Remove repository files.
 	repoPath := repo.repoPath(sess)
 	if err = os.RemoveAll(repoPath); err != nil {
-		desc := fmt.Sprintf("delete repository files[%s]: %v", repoPath, err)
+		desc := fmt.Sprintf("delete repository files [%s]: %v", repoPath, err)
+		log.Warn(desc)
+		if err = CreateRepositoryNotice(desc); err != nil {
+			log.Error(4, "CreateRepositoryNotice: %v", err)
+		}
+	}
+
+	wikiPath := repo.WikiPath()
+	if err = os.RemoveAll(wikiPath); err != nil {
+		desc := fmt.Sprintf("delete repository wiki [%s]: %v", wikiPath, err)
 		log.Warn(desc)
 		if err = CreateRepositoryNotice(desc); err != nil {
 			log.Error(4, "CreateRepositoryNotice: %v", err)

+ 1 - 1
models/user.go

@@ -666,7 +666,7 @@ func deleteUser(e *xorm.Session, u *User) error {
 		&IssueUser{UID: u.Id},
 		&EmailAddress{UID: u.Id},
 	); err != nil {
-		return fmt.Errorf("deleteUser: %v", err)
+		return fmt.Errorf("deleteBeans: %v", err)
 	}
 
 	// ***** START: PublicKey *****

+ 5 - 0
models/wiki.go

@@ -73,6 +73,11 @@ func ToWikiPageName(name string) string {
 	return strings.Replace(name, "-", " ", -1)
 }
 
+// WikiCloneLink returns clone URLs of repository wiki.
+func (repo *Repository) WikiCloneLink() (cl *CloneLink) {
+	return repo.cloneLink(true)
+}
+
 // WikiPath returns wiki data path by given user and repository name.
 func WikiPath(userName, repoName string) string {
 	return filepath.Join(UserPath(userName), strings.ToLower(repoName)+".wiki.git")

Diferenças do arquivo suprimidas por serem muito extensas
+ 112 - 112
modules/bindata/bindata.go


+ 2 - 6
modules/middleware/repo.go

@@ -339,12 +339,8 @@ func RepoAssignment(args ...bool) macaron.Handler {
 		ctx.Data["IsRepositoryPusher"] = ctx.Repo.IsPusher()
 
 		ctx.Data["DisableSSH"] = setting.DisableSSH
-		ctx.Repo.CloneLink, err = repo.CloneLink()
-		if err != nil {
-			ctx.Handle(500, "CloneLink", err)
-			return
-		}
-		ctx.Data["CloneLink"] = ctx.Repo.CloneLink
+		ctx.Data["CloneLink"] = repo.CloneLink()
+		ctx.Data["WikiCloneLink"] = repo.WikiCloneLink()
 
 		if ctx.IsSigned {
 			ctx.Data["IsWatchingRepo"] = models.IsWatching(ctx.User.Id, repo.ID)

+ 13 - 1
public/config.codekit

@@ -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": "19076",
+"creatorBuild": "19102",
 "files": {
 	"\/css\/dropzone-4.2.0.css": {
 		"fileType": 16,
@@ -616,10 +616,18 @@
 			"active": 0,
 			"flagValue": -1
 			},
+		"no_nested_string_interpolation": {
+			"active": 1,
+			"flagValue": -1
+			},
 		"no_plusplus": {
 			"active": 0,
 			"flagValue": -1
 			},
+		"no_private_function_fat_arrows": {
+			"active": 1,
+			"flagValue": -1
+			},
 		"no_stand_alone_at": {
 			"active": 1,
 			"flagValue": -1
@@ -628,6 +636,10 @@
 			"active": 1,
 			"flagValue": -1
 			},
+		"no_this": {
+			"active": 0,
+			"flagValue": -1
+			},
 		"no_throwing_strings": {
 			"active": 1,
 			"flagValue": -1

+ 25 - 22
public/css/gogs.css

@@ -1806,6 +1806,28 @@ footer .container .links > *:first-child {
   margin: 1px;
   padding-right: 0;
 }
+.repository #clone-panel {
+  margin-top: -8px;
+  width: 100%;
+}
+.repository #clone-panel input {
+  border-radius: 0;
+  padding: 5px 10px;
+}
+.repository #clone-panel .clone.button {
+  font-size: 13px;
+  padding: 0 5px;
+}
+.repository #clone-panel .clone.button:first-child {
+  border-radius: .28571429rem 0 0 .28571429rem;
+}
+.repository #clone-panel .icon.button {
+  padding: 0 10px;
+}
+.repository #clone-panel .dropdown .menu {
+  right: 0!important;
+  left: auto!important;
+}
 .repository.file.list #repo-desc {
   font-size: 1.2em;
 }
@@ -1826,28 +1848,6 @@ footer .container .links > *:first-child {
 .repository.file.list .head.meta li .ui.breadcrumb a {
   font-size: 16px;
 }
-.repository.file.list .clone.input {
-  margin-top: -8px;
-  width: 100%;
-}
-.repository.file.list .clone.input input {
-  border-radius: 0;
-  padding: 5px 10px;
-}
-.repository.file.list .clone.input .clone.button {
-  font-size: 13px;
-  padding: 0 5px;
-}
-.repository.file.list .clone.input .clone.button:first-child {
-  border-radius: .28571429rem 0 0 .28571429rem;
-}
-.repository.file.list .clone.input .icon.button {
-  padding: 0 10px;
-}
-.repository.file.list .clone.input .dropdown .menu {
-  right: 0!important;
-  left: auto!important;
-}
 .repository.file.list #repo-files-table .table.list {
   width: 80% !important;
 }
@@ -2531,6 +2531,9 @@ footer .container .links > *:first-child {
 .repository.wiki.new .editor-preview {
   background-color: white;
 }
+.repository.wiki.view .choose.page {
+  margin-top: -5px;
+}
 .repository.wiki.view .ui.sub.header {
   text-transform: none;
 }

+ 28 - 27
public/less/_repository.less

@@ -91,6 +91,31 @@
 	 	}
 	}
 
+	#clone-panel {
+		margin-top: -8px;
+		width: 100%;
+
+		input {
+	    border-radius: 0;
+	    padding: 5px 10px;
+		}
+
+		.clone.button {
+			font-size: 13px;
+			padding: 0 5px;
+			&:first-child {
+		    border-radius: .28571429rem 0 0 .28571429rem;
+			}
+		}
+		.icon.button {
+			padding: 0 10px;
+		}
+		.dropdown .menu {
+			right: 0!important;
+			left: auto!important;
+		}
+	}
+
 	&.file.list {
 		#repo-desc {
 			font-size: 1.2em;
@@ -117,31 +142,6 @@
 			}
 		}
 
-		.clone.input {
-			margin-top: -8px;
-			width: 100%;
-
-			input {
-		    border-radius: 0;
-		    padding: 5px 10px;
-			}
-
-			.clone.button {
-				font-size: 13px;
-				padding: 0 5px;
-				&:first-child {
-			    border-radius: .28571429rem 0 0 .28571429rem;
-				}
-			}
-			.icon.button {
-				padding: 0 10px;
-			}
-			.dropdown .menu {
-				right: 0!important;
-				left: auto!important;
-			}
-		}
-
 		#repo-files-table {
 			.table.list {
 				width: 80% !important;
@@ -972,9 +972,10 @@
 		}
 
 		&.view {
-			.header:not(.sub) {
-				// padding-left: 30px;
+			.choose.page {
+				margin-top: -5px;
 			}
+
 			.ui.sub.header {
 				text-transform: none;
 			}

+ 1 - 4
routers/api/v1/repo.go

@@ -20,10 +20,7 @@ import (
 
 // ToApiRepository converts repository to API format.
 func ToApiRepository(owner *models.User, repo *models.Repository, permission api.Permission) *api.Repository {
-	cl, err := repo.CloneLink()
-	if err != nil {
-		log.Error(4, "CloneLink: %v", err)
-	}
+	cl := repo.CloneLink()
 	return &api.Repository{
 		Id:          repo.ID,
 		Owner:       *ToApiUser(owner),

+ 66 - 67
routers/repo/http.go

@@ -36,10 +36,7 @@ func authRequired(ctx *middleware.Context) {
 
 func HTTP(ctx *middleware.Context) {
 	username := ctx.Params(":username")
-	reponame := ctx.Params(":reponame")
-	if strings.HasSuffix(reponame, ".git") {
-		reponame = reponame[:len(reponame)-4]
-	}
+	reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git")
 
 	var isPull bool
 	service := ctx.Query("service")
@@ -53,6 +50,12 @@ func HTTP(ctx *middleware.Context) {
 		isPull = (ctx.Req.Method == "GET")
 	}
 
+	isWiki := false
+	if strings.HasSuffix(reponame, ".wiki") {
+		isWiki = true
+		reponame = reponame[:len(reponame)-5]
+	}
+
 	repoUser, err := models.GetUserByName(username)
 	if err != nil {
 		if models.IsErrUserNotExist(err) {
@@ -165,45 +168,46 @@ func HTTP(ctx *middleware.Context) {
 	}
 
 	callback := func(rpc string, input []byte) {
-		if rpc == "receive-pack" {
-			var lastLine int64 = 0
-
-			for {
-				head := input[lastLine : lastLine+2]
-				if head[0] == '0' && head[1] == '0' {
-					size, err := strconv.ParseInt(string(input[lastLine+2:lastLine+4]), 16, 32)
-					if err != nil {
-						log.Error(4, "%v", err)
-						return
-					}
+		if rpc != "receive-pack" || isWiki {
+			return
+		}
 
-					if size == 0 {
-						//fmt.Println(string(input[lastLine:]))
-						break
-					}
+		var lastLine int64 = 0
+		for {
+			head := input[lastLine : lastLine+2]
+			if head[0] == '0' && head[1] == '0' {
+				size, err := strconv.ParseInt(string(input[lastLine+2:lastLine+4]), 16, 32)
+				if err != nil {
+					log.Error(4, "%v", err)
+					return
+				}
 
-					line := input[lastLine : lastLine+size]
-					idx := bytes.IndexRune(line, '\000')
-					if idx > -1 {
-						line = line[:idx]
-					}
-					fields := strings.Fields(string(line))
-					if len(fields) >= 3 {
-						oldCommitId := fields[0][4:]
-						newCommitId := fields[1]
-						refName := fields[2]
-
-						// FIXME: handle error.
-						if err = models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id); err == nil {
-							go models.HookQueue.Add(repo.ID)
-							go models.AddTestPullRequestTask(repo.ID, strings.TrimPrefix(refName, "refs/heads/"))
-						}
+				if size == 0 {
+					//fmt.Println(string(input[lastLine:]))
+					break
+				}
 
+				line := input[lastLine : lastLine+size]
+				idx := bytes.IndexRune(line, '\000')
+				if idx > -1 {
+					line = line[:idx]
+				}
+				fields := strings.Fields(string(line))
+				if len(fields) >= 3 {
+					oldCommitId := fields[0][4:]
+					newCommitId := fields[1]
+					refName := fields[2]
+
+					// FIXME: handle error.
+					if err = models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id); err == nil {
+						go models.HookQueue.Add(repo.ID)
+						go models.AddTestPullRequestTask(repo.ID, strings.TrimPrefix(refName, "refs/heads/"))
 					}
-					lastLine = lastLine + size
-				} else {
-					break
+
 				}
+				lastLine = lastLine + size
+			} else {
+				break
 			}
 		}
 	}
@@ -255,6 +259,29 @@ var routes = []route{
 	{regexp.MustCompile("(.*?)/objects/pack/pack-[0-9a-f]{40}\\.idx$"), "GET", getIdxFile},
 }
 
+func getGitDir(config *Config, fPath string) (string, error) {
+	root := config.RepoRootPath
+	if len(root) == 0 {
+		cwd, err := os.Getwd()
+		if err != nil {
+			log.GitLogger.Error(4, err.Error())
+			return "", err
+		}
+		root = cwd
+	}
+
+	if !strings.HasSuffix(fPath, ".git") {
+		fPath = fPath + ".git"
+	}
+
+	f := filepath.Join(root, fPath)
+	if _, err := os.Stat(f); os.IsNotExist(err) {
+		return "", err
+	}
+
+	return f, nil
+}
+
 // Request handling function
 func HTTPBackend(config *Config) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
@@ -268,15 +295,13 @@ func HTTPBackend(config *Config) http.HandlerFunc {
 
 				file := strings.Replace(r.URL.Path, m[1]+"/", "", 1)
 				dir, err := getGitDir(config, m[1])
-
 				if err != nil {
 					log.GitLogger.Error(4, err.Error())
 					renderNotFound(w)
 					return
 				}
 
-				hr := handler{config, w, r, dir, file}
-				route.handler(hr)
+				route.handler(handler{config, w, r, dir, file})
 				return
 			}
 		}
@@ -419,32 +444,6 @@ func sendFile(contentType string, hr handler) {
 	http.ServeFile(w, r, reqFile)
 }
 
-func getGitDir(config *Config, fPath string) (string, error) {
-	root := config.RepoRootPath
-
-	if root == "" {
-		cwd, err := os.Getwd()
-
-		if err != nil {
-			log.GitLogger.Error(4, err.Error())
-			return "", err
-		}
-
-		root = cwd
-	}
-
-	if !strings.HasSuffix(fPath, ".git") {
-		fPath = fPath + ".git"
-	}
-
-	f := filepath.Join(root, fPath)
-	if _, err := os.Stat(f); os.IsNotExist(err) {
-		return "", err
-	}
-
-	return f, nil
-}
-
 func getServiceType(r *http.Request) string {
 	serviceType := r.FormValue("service")
 

+ 1 - 2
scripts/less.sh

@@ -1,5 +1,4 @@
 #!/bin/sh
 echo "compiling LESS Files"
-lessc ../public/ng/less/gogs.less ../public/ng/css/gogs.css
-lessc ../public/ng/less/ui.less ../public/ng/css/ui.css
+lessc ../public/less/gogs.less ../public/css/gogs.css
 echo "done"

+ 1 - 1
templates/repo/home.tmpl

@@ -11,7 +11,7 @@
         </p>
       </div>
       <div class="ui six wide column">
-        <div class="ui action small clone input">
+        <div class="ui action small input" id="clone-panel">
           {{if not $.DisableSSH}}
           <button class="ui blue basic clone button" id="repo-clone-ssh" data-link="{{.CloneLink.SSH}}">
             SSH

+ 44 - 17
templates/repo/wiki/view.tmpl

@@ -3,24 +3,51 @@
 	{{template "repo/header" .}}
   <div class="ui container">
     {{template "repo/sidebar" .}}
-    <div class="choose page">
-      <div class="ui floating filter dropdown" data-no-results="{{.i18n.Tr "repo.pulls.no_results"}}">
-        <div class="ui basic small button">
-          <span class="text">
-            {{.i18n.Tr "repo.wiki.page"}}:
-            <strong>{{.title}}</strong>
-          </span>
-          <i class="dropdown icon"></i>
-        </div>
-        <div class="menu">
-          <div class="ui icon search input">
-            <i class="filter icon"></i>
-            <input name="search" placeholder="{{.i18n.Tr "repo.wiki.filter_page"}}...">
+    <div class="ui grid">
+      <div class="ui ten wide column">
+        <div class="choose page">
+          <div class="ui floating filter dropdown" data-no-results="{{.i18n.Tr "repo.pulls.no_results"}}">
+            <div class="ui basic small button">
+              <span class="text">
+                {{.i18n.Tr "repo.wiki.page"}}:
+                <strong>{{.title}}</strong>
+              </span>
+              <i class="dropdown icon"></i>
+            </div>
+            <div class="menu">
+              <div class="ui icon search input">
+                <i class="filter icon"></i>
+                <input name="search" placeholder="{{.i18n.Tr "repo.wiki.filter_page"}}...">
+              </div>
+              <div class="scrolling menu" {{if .IsTag}}style="display: none"{{end}}>
+                {{range .Pages}}
+                <div class="item {{if eq $.Title .Name}}selected{{end}}" data-url="{{$.RepoLink}}/wiki/{{.URL}}">{{.Name}}</div>
+                {{end}}
+              </div>
+            </div>
           </div>
-          <div class="scrolling menu" {{if .IsTag}}style="display: none"{{end}}>
-            {{range .Pages}}
-            <div class="item {{if eq $.Title .Name}}selected{{end}}" data-url="{{$.RepoLink}}/wiki/{{.URL}}">{{.Name}}</div>
-            {{end}}
+        </div>
+      </div>
+      <div class="ui six wide column">
+        <div class="ui action small input" id="clone-panel">
+          {{if not $.DisableSSH}}
+          <button class="ui blue basic clone button" id="repo-clone-ssh" data-link="{{.WikiCloneLink.SSH}}">
+            SSH
+          </button>
+          {{end}}
+          <button class="ui {{if $.DisableSSH}}blue{{end}} basic clone button" id="repo-clone-https" data-link="{{.WikiCloneLink.HTTPS}}">
+            {{if UseHTTPS}}HTTPS{{else}}HTTP{{end}}
+          </button>
+          <input id="repo-clone-url" value="{{if $.DisableSSH}}{{$.WikiCloneLink.HTTPS}}{{else}}{{$.WikiCloneLink.SSH}}{{end}}" readonly>
+          <button class="ui basic icon button poping up clipboard" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
+            <i class="octicon octicon-clippy"></i>
+          </button>
+          <div class="ui basic jump dropdown icon button">
+            <i class="download icon"></i>
+            <div class="menu">
+              <a class="item" href="{{$.RepoLink}}/archive/{{EscapePound $.BranchName}}.zip"><i class="icon octicon octicon-file-zip"></i> ZIP</a>
+              <a class="item" href="{{$.RepoLink}}/archive/{{EscapePound $.BranchName}}.tar.gz"><i class="icon octicon octicon-file-zip"></i> TAR.GZ</a>
+            </div>
           </div>
         </div>
       </div>

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff