Procházet zdrojové kódy

finish initial version of pull request

Unknwon před 9 roky
rodič
revize
83dc2468f5

+ 4 - 10
cmd/web.go

@@ -198,13 +198,9 @@ func runWeb(ctx *cli.Context) {
 	// Routers.
 	m.Get("/", ignSignIn, routers.Home)
 	m.Get("/explore", ignSignIn, routers.Explore)
-	m.Combo("/install", routers.InstallInit).
-		Get(routers.Install).
+	m.Combo("/install", routers.InstallInit).Get(routers.Install).
 		Post(bindIgnErr(auth.InstallForm{}), routers.InstallPost)
-	m.Group("", func() {
-		m.Get("/pulls", user.Pulls)
-		m.Get("/issues", user.Issues)
-	}, reqSignIn)
+	m.Get("/:type(issues|pulls)", reqSignIn, user.Issues)
 
 	// ***** START: API *****
 	// FIXME: custom form error response.
@@ -387,7 +383,7 @@ func runWeb(ctx *cli.Context) {
 
 		m.Group("/:org", func() {
 			m.Get("/dashboard", user.Dashboard)
-			m.Get("/issues", user.Issues)
+			m.Get("/:type(issues|pulls)", user.Issues)
 			m.Get("/members", org.Members)
 			m.Get("/members/action/:action", org.MembersAction)
 
@@ -520,14 +516,12 @@ func runWeb(ctx *cli.Context) {
 
 	m.Group("/:username/:reponame", func() {
 		m.Get("/releases", middleware.RepoRef(), repo.Releases)
-		m.Get("/issues", repo.RetrieveLabels, repo.Issues)
+		m.Get("/:type(issues|pulls)", repo.RetrieveLabels, repo.Issues)
 		m.Get("/:type(issues|pulls)/:index", repo.ViewIssue)
 		m.Get("/labels/", repo.RetrieveLabels, repo.Labels)
 		m.Get("/milestones", repo.Milestones)
-		m.Get("/pulls", repo.Pulls)
 		m.Get("/branches", repo.Branches)
 		m.Get("/archive/*", repo.Download)
-		m.Get("/pulls2/", repo.PullRequest2)
 
 		m.Group("/pulls/:index", func() {
 			m.Get("/commits", repo.ViewPullCommits)

+ 1 - 1
conf/app.ini

@@ -218,7 +218,7 @@ PATH = data/attachments
 ; One or more allowed types, e.g. image/jpeg|image/png
 ALLOWED_TYPES = image/jpeg|image/png
 ; Max size of each file. Defaults to 32MB
-MAX_SIZE = 32
+MAX_SIZE = 4
 ; Max number of files per upload. Defaults to 10
 MAX_FILES = 5
 

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

@@ -319,6 +319,7 @@ repo_name=Име на хранилище
 repo_name_helper=Добро име на хранилище е име, състоящо от кратки, запомнящи се и уникални ключови думи.
 visibility=Видимост
 visiblity_helper=Това хранилище е <span class="ui red text">Частно</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Fork на хранилището
 fork_from=Fork от
 fork_visiblity_helper=Не можете да промените видимостта на форкнато хранилище.
@@ -369,6 +370,7 @@ branch_and_tags=Бранчове и тагове
 branches=Бранчове
 tags=Тагове
 issues=Issues
+pulls=Pull Requests
 labels=Етикети
 milestones=Етапи
 commits=Комити
@@ -461,8 +463,26 @@ issues.label_deletion_success=Етикетът е премахнат успеш
 
 pulls.compare_changes=Виж промените
 pulls.compare_changes_desc=Сравнява двата клона и създава заявка за изтегляне за разликите помежду им.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=Няма резултати.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=Нов етап
 milestones.open_tab=%d отворени
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Опции за хранилище е актуализиран успешно.
 settings.transfer_owner=Нов собственик
 settings.make_transfer=Направи трансфер
@@ -896,9 +919,12 @@ notices.delete_success=Системното съобщение е изтрито
 
 [action]
 create_repo=създадено е хранилище <a href="%s"> %s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=пушнато към <a href="%s/src/%s">%[2]s</a> в <a href="%[1]s">%[3]s</a>
 create_issue=`отворен въпрос <a href="%s/issues/%s">%s#%[2]s"</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`коментира въпрос <a href="%s/issues/%s">%s#%[2]s"</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=прехвърлено хранилище:  от <code>%s</code> към  <a href="%s"> %s</a>
 push_tag=пушнат етикет <a href="%s/src/%s">%[2]s</a> към <a href="%[1]s">[3]s</a>
 compare_2_commits=Виж сравнението между тези 2 комита

+ 37 - 11
conf/locale/locale_de-DE.ini

@@ -95,8 +95,8 @@ mail_notify=E-Mail-Benachrichtgung aktivieren
 server_service_title=Server- und sonstige Diensteinstellungen
 offline_mode=Offline-Modus aktivieren
 offline_mode_popup=Deaktiviere das CDN auch im Produktionsmodus, alle Dateien werden von diesem Server ausgeliefert.
-disable_gravatar=Disable Gravatar Service
-disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
+disable_gravatar=Gravatar-Dienst deaktivieren
+disable_gravatar_popup=Gravatar und benutzerdefinierte Quellen deaktivieren, alle Avatare werden standardmäßig vom Nutzer hochgeladen oder sind Standardavatare.
 disable_registration=Benutzerregistrierung deaktivieren
 disable_registration_popup=Deaktiviere die Benutzerregistrierung, nur Administratoren können Benutzerkonten anlegen.
 require_sign_in_view=Erfordere Anmeldung, um Inhalte anzusehen
@@ -319,6 +319,7 @@ repo_name=Repository-Name
 repo_name_helper=Gute Repository-Namen sind kurz, einprägsam und <strong>einzigartig</strong>.
 visibility=Sichtbarkeit
 visiblity_helper=<span class="ui red text">Privates</span> Repository
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Repository abspalten
 fork_from=Abspaltung von
 fork_visiblity_helper=Sichtbarkeit von abgespalteten Repositories ist nicht veränderbar
@@ -369,6 +370,7 @@ branch_and_tags=Branches & Tags
 branches=Branches
 tags=Markierungen
 issues=Issues
+pulls=Pull Requests
 labels=Label
 milestones=Meilensteine
 commits=Commits
@@ -439,7 +441,7 @@ issues.reopen_comment_issue=Wiedereröffnen und kommentieren
 issues.create_comment=Kommentieren
 issues.closed_at=`geschlossen in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.reopened_at=`wiedereröffnet in <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
+issues.commit_ref_at=`referenziert dieses Issue aus einem Commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.poster=Ersteller
 issues.admin=Admin
 issues.owner=Besitzer
@@ -461,8 +463,26 @@ issues.label_deletion_success=Label wurde erfolgreich gelöscht!
 
 pulls.compare_changes=Änderungen vergleichen
 pulls.compare_changes_desc=Vergleiche zwei Branches und erstelle einen Pull Request für die Änderungen.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=Keine Ergebnisse verfügbar.
-pulls.create=Create Pull Request
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=Pull Request erstellen
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=Neuer Meilenstein
 milestones.open_tab=%d offen
@@ -497,17 +517,20 @@ settings.basic_settings=Grundeinstellungen
 settings.danger_zone=Gefahrenzone
 settings.site=Offizielle Webseite
 settings.update_settings=Aktualisierungseinstellungen
-settings.change_reponame_prompt=This change will affect how links relate to the repository.
+settings.change_reponame_prompt=Diese Änderung wirkt sich darauf aus, wie sich Links auf das Repository beziehen.
 settings.transfer=Besitz übertragen
 settings.transfer_desc=Übertrage dieses Repository einem anderen Benutzer oder einer Organisation in der du Admin-Rechte hast.
 settings.new_owner_has_same_repo=Neuer Eigentümer hat bereits ein Repository mit dem gleichen Namen.
 settings.delete=Repository löschen
 settings.delete_desc=Wenn dieses Repository gelöscht ist, gibt es keinen Weg zurück. Sei dir sicher!
-settings.transfer_notices_1=- You will lose access if new owner is a individual user.
-settings.transfer_notices_2=- You will conserve access if new owner is an organization and if you're one of the owners.
-settings.transfer_form_title=Please enter following information to confirm your operation:
-settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
-settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.transfer_notices_1=- Du wirst den Zugang verlieren, wenn der neue Besitzer ein individueller Benutzer ist.
+settings.transfer_notices_2=- Du wirst den Zugang behalten, wenn der neue Besitzer eine Organisation ist und du einer der Besitzer bist.
+settings.transfer_form_title=Bitte gib die folgenden Informationen ein, um die Operation zu bestätigen:
+settings.delete_notices_1=- Diese Operation kann <strong>NICHT</strong> rückgängig gemacht werden.
+settings.delete_notices_2=- Die Operation wird alles, was mit diesem Git-Repository verbunden ist, dauerhaft löschen, inklusive der Daten, Issues, Kommentare und Zugriffsrechte von Mitarbeitern.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Repository-Optionen aktualisiert
 settings.transfer_owner=Neuer Besitzer
 settings.make_transfer=übertragen
@@ -801,7 +824,7 @@ auths.smtp_auth=SMTP-Authentifizierungstyp
 auths.smtphost=SMTP-Host
 auths.smtpport=SMTP-Port
 auths.enable_tls=TLS-Verschlüsselung aktivieren
-auths.skip_tls_verify=Skip TLS Verify
+auths.skip_tls_verify=TLS-Prüfung überspringen
 auths.pam_service_name=PAM Dienstname
 auths.enable_auto_register=Automatische Registrierung aktivieren
 auths.tips=Tipps
@@ -896,9 +919,12 @@ notices.delete_success=System-Mitteilung erfolgreich gelöscht.
 
 [action]
 create_repo=hat Repository <a href="%s">%s</a> erstellt
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=hat nach <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]s</a> gepusht
 create_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> eröffnet`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`hat Issue <a href="%s/issues/%s">%s#%[2]s</a> kommentiert`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=hat Repository <code>%s</code> transferiert an <a href="%s">%s</a>
 push_tag=hat nach <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]s</a> gepusht
 compare_2_commits=Zeige Vergleich dieser 2 Commits

+ 4 - 2
conf/locale/locale_en-US.ini

@@ -370,6 +370,7 @@ branch_and_tags = Branches & Tags
 branches = Branches
 tags = Tags
 issues = Issues
+pulls = Pull Requests
 labels = Labels
 milestones = Milestones
 commits = Commits
@@ -477,10 +478,10 @@ pulls.tab_files = Files changed
 pulls.reopen_to_merge = Please reopen this pull request to perform merge operation.
 pulls.merged = Merged
 pulls.has_merged = This pull request has been merged successfully!
-pulls.data_borken = Data of this pull request has been borken due to deletion of fork information.
+pulls.data_broken = Data of this pull request has been broken due to deletion of fork information.
 pulls.can_auto_merge_desc = You can perform auto-merge operation on this pull request.
 pulls.cannot_auto_merge_desc = You can't perform auto-merge operation because there are conflicts between commits.
-pulls.cannot_auto_merge_helper = Please use commond line tool to solve it.
+pulls.cannot_auto_merge_helper = Please use command line tool to solve it.
 pulls.merge_pull_request = Merge Pull Request
 
 milestones.new = New Milestone
@@ -923,6 +924,7 @@ commit_repo = pushed to <a href="%s/src/%s">%[2]s</a> at <a href="%[1]s">%[3]s</
 create_issue = `opened issue <a href="%s/issues/%s">%s#%[2]s</a>`
 create_pull_request = `created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue = `commented on issue <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request = `merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo = transfered repository <code>%s</code> to <a href="%s">%s</a>
 push_tag = pushed tag <a href="%s/src/%s">%[2]s</a> to <a href="%[1]s">%[3]s</a>
 compare_2_commits = View comparison for these 2 commits

+ 26 - 0
conf/locale/locale_es-ES.ini

@@ -319,6 +319,7 @@ repo_name=Nombre del Repositorio
 repo_name_helper=Los grandes nombres de repositorios son cortos, memorables y <strong>únicos</strong>.
 visibility=Visibilidad
 visiblity_helper=Este repositorio es <span class="ui red text">Privado</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Hacer Fork del repositorio
 fork_from=Crear un Fork desde
 fork_visiblity_helper=No es posible cambiar la visibilidad de un Fork
@@ -369,6 +370,7 @@ branch_and_tags=Ramas y Etiquetas
 branches=Ramas
 tags=Etiquetas
 issues=Incidencias
+pulls=Pull Requests
 labels=Etiquetas
 milestones=Milestones
 commits=Commits
@@ -461,8 +463,26 @@ issues.label_deletion_success=Etiqueta borrada con éxito!
 
 pulls.compare_changes=Compare Changes
 pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=No results found.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=New Milestone
 milestones.open_tab=%d Open
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Las opciones del repositorio se han actualizado correctamente.
 settings.transfer_owner=Nuevo Propietario
 settings.make_transfer=Transferir
@@ -896,9 +919,12 @@ notices.delete_success=La notificación del sistema se ha eliminado correctament
 
 [action]
 create_repo=Repositorio creado <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=hizo push a <a href="%s/src/%s">%[2]s</a> en <a href="%[1]s">%[3]s</a>
 create_issue=`incidencia abierta <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`comentó en la incidencia <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=transfirió el repositorio <code>%s</code> a <a href="%s">%s</a>
 push_tag=hizo push del tag <a href="%s/src/%s">%[2]s</a> a <a href="%[1]s">%[3]s</a>
 compare_2_commits=Ver la comparación de estos 2 commits

+ 26 - 0
conf/locale/locale_fr-FR.ini

@@ -319,6 +319,7 @@ repo_name=Nom du Référentiel
 repo_name_helper=Idéalement, le nom d'un dépot devrait être court, mémorable et <strong>unique</strong>.
 visibility=Visibilité
 visiblity_helper=Ce dépôt est <span class="ui red text"> privé</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Référentiel d'Embranchement
 fork_from=Embranchement de
 fork_visiblity_helper=Un dépôt scindé ne peut pas changer sa visiblité
@@ -369,6 +370,7 @@ branch_and_tags=Branches & Tags
 branches=Branches
 tags=Tags
 issues=Problèmes
+pulls=Pull Requests
 labels=Etiquettes
 milestones=Étapes
 commits=Commissions
@@ -461,8 +463,26 @@ issues.label_deletion_success=Label supprimé avec succès !
 
 pulls.compare_changes=Comparer les changements
 pulls.compare_changes_desc=Comparer deux branches et faire une demande de récupération Pull pour les changements.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=Aucun résultat trouvé.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=Nouveau Jalon
 milestones.open_tab=%d Ouvert
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Options mises à jour avec succès.
 settings.transfer_owner=Nouveau propriétaire
 settings.make_transfer=Transférer
@@ -896,9 +919,12 @@ notices.delete_success=Note système supprimée avec succès.
 
 [action]
 create_repo=a crée le Référentiel <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=a soumis à <a href="%s/src/%s">%[2]s</a> chez <a href="%[1]s">%[3]s</a>
 create_issue=`a ouvert un problème <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`a commenté le problème <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=a transféré le Référentiel <code>%s</code> à <a href="%s">%s</a>
 push_tag=a tagé <a href="%s/src/%s">%[2]s</a> à <a href="%[1]s">%[3]s</a>
 compare_2_commits=Comparer ces 2 commissions

+ 26 - 0
conf/locale/locale_it-IT.ini

@@ -319,6 +319,7 @@ repo_name=Nome Repository
 repo_name_helper=I migliori nomi dei repository sono brevi, facili da memorizzare e <strong>univoci</strong>.
 visibility=Visibilità
 visiblity_helper=This repository is <span class="ui red text">Private</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Forka Repository
 fork_from=Forka da
 fork_visiblity_helper=Non puoi cambiare la visibilità di un repository forkato.
@@ -369,6 +370,7 @@ branch_and_tags=Rami (Branch) & Tag
 branches=Rami (Branch)
 tags=Tag
 issues=Problemi
+pulls=Pull Requests
 labels=Etichette
 milestones=Traguardi
 commits=Commit
@@ -461,8 +463,26 @@ issues.label_deletion_success=Etichetta eliminata con successo!
 
 pulls.compare_changes=Compare Changes
 pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=No results found.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=New Milestone
 milestones.open_tab=%d Open
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Le opzioni repository sono state aggiornate con successo.
 settings.transfer_owner=Nuovo Proprietario
 settings.make_transfer=Trasferisci
@@ -896,9 +919,12 @@ notices.delete_success=Avviso di sistema cancellato con successo.
 
 [action]
 create_repo=ha creato il repository <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=ha pushato nel <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]s</a>
 create_issue=`ha aperto il problema <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`ha commentato il problema <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=ha trasferito il repository <code>%s</code> a <a href="%s">%s</a>
 push_tag=ha pushato il tag <a href="%s/src/%s">%[2]s</a> a <a href="%[1]s">%[3]s</a>
 compare_2_commits=Vedi confronto per questi 2 commit

+ 26 - 0
conf/locale/locale_ja-JP.ini

@@ -319,6 +319,7 @@ repo_name=リポジトリ名
 repo_name_helper=偉大なリポジトリ名は短い。思い出に残り、そして<strong>一意</strong>だ。
 visibility=ビジビリティ
 visiblity_helper=このリポジトリは<span class="ui red text">プライベート</span>です。
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=フォークのリポジトリ
 fork_from=フォーク元
 fork_visiblity_helper=フォークされたリポジトリは可視状態を変更できません
@@ -369,6 +370,7 @@ branch_and_tags=ブランチ& タグ
 branches=ブランチ
 tags=タグ
 issues=課題
+pulls=Pull Requests
 labels=ラベル
 milestones=マイルストーン
 commits=コミット
@@ -461,8 +463,26 @@ issues.label_deletion_success=ラベルは正常に削除されました。
 
 pulls.compare_changes=変更を比較
 pulls.compare_changes_desc=2つのブランチを比較し、プルリクエストを作成します。
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=結果が見つかりませんでした。
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=新しいマイルストーン
 milestones.open_tab=%d オープン
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=リポジトリ オプションが更新されました。
 settings.transfer_owner=新しいオーナー
 settings.make_transfer=転送
@@ -896,9 +919,12 @@ notices.delete_success=システム通知が正常に削除されました。
 
 [action]
 create_repo=リポジトリ <a href="%s"> %s</a>を作成しました
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=<a href="%[1]s">%[3]s</a>を<a href="%[1]s/src/%[2]s">%[2]s</a>にプッシュしました
 create_issue=`問題 <a href="%s/issues/%s">%s#%[2]s</a> を開きました`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`問題 <a href="%s/issues/%s">%s#%[2]s</a> のコメント`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=リポジトリ <code>%s</code> を <a href="%s">%s</a> へ転送しました
 push_tag=<a href="%[1]s">%[3]s</a> に タグ <a href="%[1]s/src/%[2]s">%[2]s</a> をプッシュしました
 compare_2_commits=これら 2 のコミットの比較を閲覧する

+ 26 - 0
conf/locale/locale_lv-LV.ini

@@ -319,6 +319,7 @@ repo_name=Repozitorija nosaukums
 repo_name_helper=Labi repzotoriju nosaukumi ir īsi, tādi kurus viegli atcerēties un <strong>unikāli</strong>.
 visibility=Redzamība
 visiblity_helper=This repository is <span class="ui red text">Private</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Atdalīt repozitoriju
 fork_from=Atdalīt no
 fork_visiblity_helper=Atdalītam repozitorijam nav iespējams nomainīt tā redzamību
@@ -369,6 +370,7 @@ branch_and_tags=Atzari un tagi
 branches=Atzari
 tags=Tagi
 issues=Problēmas
+pulls=Pull Requests
 labels=Labels
 milestones=Milestones
 commits=Revīzijas
@@ -461,8 +463,26 @@ issues.label_deletion_success=Label has been deleted successfully!
 
 pulls.compare_changes=Compare Changes
 pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=No results found.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=New Milestone
 milestones.open_tab=%d Open
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Repozitorija opcijas ir veiksmīgi saglabātas.
 settings.transfer_owner=Jaunais īpašnieks
 settings.make_transfer=Mainīt
@@ -896,9 +919,12 @@ notices.delete_success=Sistēmas paziņojums tika veiksmīgi izdzēsts.
 
 [action]
 create_repo=izveidoja repozitoriju <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=veica izmaiņu nosūtīšanu atzaram <a href="%s/src/%s">%[2]s</a> repozitorijā <a href="%[1]s">%[3]s</a>
 create_issue=`reģistrēja problēmu <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`pievienoja komentāru problēmai <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=mainīja repozitorija <code>%s</code> īpašnieku uz <a href="%s">%s</a>
 push_tag=pievienoja tagu <a href="%s/src/%s">%[2]s</a> repozitorijam <a href="%[1]s">%[3]s</a>
 compare_2_commits=Veikt salīdzināšanu starp šīm 2 revīzijām

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

@@ -319,6 +319,7 @@ repo_name=Repositorie naam
 repo_name_helper=Een goede repositorie naam is kort, memorabel en <strong>uniek</strong>.
 visibility=Zichtbaarheid
 visiblity_helper=Deze repositorie is <span class="ui red text">privaat</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Vork Repository
 fork_from=Afsplitsing van
 fork_visiblity_helper=Gevorkte repository wijzigen zijn bereik potentiële kopers niet
@@ -369,6 +370,7 @@ branch_and_tags=Aftakkingen & labels
 branches=Aftakkingen
 tags=Labels
 issues=Kwesties
+pulls=Pull Requests
 labels=Labels
 milestones=Mijlpalen
 commits=Commits
@@ -461,8 +463,26 @@ issues.label_deletion_success=Label werd met succes verwijderd!
 
 pulls.compare_changes=Vergelijk veranderingen
 pulls.compare_changes_desc=Vergelijk twee vertakkingen en maak een pull verzoek voor wijzigingen.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=Geen resultaten gevonden.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=Nieuwe mijlpaal
 milestones.open_tab=%d geopend
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Repositorie instellingen zijn succesvol bijgewerkt.
 settings.transfer_owner=Nieuwe eigenaar
 settings.make_transfer=Maak overdracht
@@ -896,9 +919,12 @@ notices.delete_success=Systeem bericht is met succes verwijderd.
 
 [action]
 create_repo=repositorie aangemaakt in <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=push update naar <a href="%s/src/%s">%[2]s</a> in <a href="%[1]s">%[3]s</a>
 create_issue=`opende issue in <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`reactie op issue <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=repositorie verplaatst naar <code>%s</code> naar <a href="%s">%s</a>
 push_tag=geduwd label <a href="%s/src/%s"> %[2]s</a> naar <a href="%[1]s"> %[3]s</a>
 compare_2_commits=Weergave vergelijking voor deze 2 commits

+ 97 - 71
conf/locale/locale_pl-PL.ini

@@ -14,9 +14,9 @@ version=Wersja
 page=Strona
 template=Szablon
 language=Język
-create_new=Create new...
-user_profile_and_more=User profile and more
-signed_in_as=Signed in as
+create_new=Utwórz nowy...
+user_profile_and_more=Profil użytkownika i więcej
+signed_in_as=Zalogowany jako
 
 username=Nazwa Użytkownika
 email=E-mail
@@ -35,8 +35,8 @@ manage_org=Zarządzaj organizacjami
 admin_panel=Panel admina
 account_settings=Ustawienia konta
 settings=Ustawienia
-your_profile=Your Profile
-your_settings=Your Settings
+your_profile=Twój profil
+your_settings=Twoje ustawienia
 
 news_feed=Kanał aktualności
 pull_requests=Oczekujące zmiany
@@ -76,8 +76,8 @@ run_user=Nazwa użytkownika uruchomieniowego
 run_user_helper=Użytkownik musi mieć dostęp do katalogu repozytoriów i uruchamiania Gogs.
 domain=Domena
 domain_helper=To wpłynie na URLe do klonowania poprzez SSH.
-ssh_port=SSH Port
-ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
+ssh_port=Port SSH
+ssh_port_helper=Numer portu, z którego korzysta z serwer SSH; pozostaw puste, aby wyłączyć funkcję SSH.
 http_port=Port HTTP
 http_port_helper=Numer portu na którym aplikacja jest dostępna.
 app_url=Adres URL aplikacji
@@ -95,7 +95,7 @@ mail_notify=Włącz powiadomienia e-mail
 server_service_title=Ustawienia serwera i innych usług
 offline_mode=Włącz tryb offline
 offline_mode_popup=Wyłącz CDN, nawet w trybie produkcyjnym, wszystkie pliki zasobów będą podawane lokalnie.
-disable_gravatar=Disable Gravatar Service
+disable_gravatar=Wyłącz usługę Gravatar
 disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
 disable_registration=Wyłącz samodzielną rejestrację
 disable_registration_popup=Wyłącz samodzielną rejestrację użytkownika, tylko administrator będzie mógł tworzyć konta.
@@ -127,7 +127,7 @@ my_orgs=Moje organizacje
 my_mirrors=Moje mirrory
 view_home=View %s
 
-issues.in_your_repos=In your repositories
+issues.in_your_repos=W twoich repozytoriach
 
 [explore]
 repos=Repozytoria
@@ -156,9 +156,9 @@ reset_password_helper=Kliknij tutaj, aby zresetować hasło
 password_too_short=Długość hasła nie może być mniejsza niż 6 znaków.
 
 [modal]
-yes=Yes
-no=No
-modify=Modify
+yes=Tak
+no=Nie
+modify=Zmień
 
 [form]
 UserName=Nazwa Użytkownika
@@ -281,8 +281,8 @@ key_name=Nazwa klucza
 key_content=Treść
 add_key_success=New SSH key '%s' has been added successfully!
 delete_key=Usuń
-ssh_key_deletion=SSH Key Deletion
-ssh_key_deletion_desc=Delete this SSH key will remove all related accesses for your account. Do you want to continue?
+ssh_key_deletion=Usunięcie klucza SSH
+ssh_key_deletion_desc=Usunięcie tego klucza SSH będzie skutkować usunięciem wszystkich powiązanych dostępów do twojego konta. Czy chcesz kontynuować?
 ssh_key_deletion_success=SSH key has been deleted successfully!
 add_on=Dodano
 last_used=Ostatnio użyto
@@ -303,9 +303,9 @@ token_name=Nazwa tokena
 generate_token=Wygeneruj token
 generate_token_succees=Nowy token dostępu został wygenerowany pomyślnie! Upewnij się, że teraz go skopiowałeś. Nie będziesz mógł go zobaczyć ponownie!
 delete_token=Usuń
-access_token_deletion=Personal Access Token Deletion
-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.
+access_token_deletion=Usuwanie osobistego tokena dostępu
+access_token_deletion_desc=Usunięcie tego tokena osobistego dostęp spowoduje usunięcie wszystkich powiązanych dostępów do aplikacji. Czy chcesz kontynuować?
+delete_token_success=Osobisty token dostępu został usunięty pomyślnie! Nie zapomnij również zaktualizować swoich aplikacji.
 
 delete_account=Usuń konto
 delete_prompt=Ta operacja trwale usuwa konto, i <strong>NIE MOŻE</strong> zostać cofnięta!
@@ -318,13 +318,14 @@ owner=Właściciel
 repo_name=Nazwa repozytorium
 repo_name_helper=Dobre nazwy repozytorium są krótkie, wpadające w pamięć i <strong>unikalne</strong>.
 visibility=Widoczność
-visiblity_helper=This repository is <span class="ui red text">Private</span>
+visiblity_helper=To repozytorium jest <span class="ui red text">prywatne</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Sforkowane
 fork_from=Forkuj z
 fork_visiblity_helper=Fork nie może zmieniać swojej widoczności
 repo_desc=Opis
 repo_lang=Język
-repo_lang_helper=Select .gitignore files
+repo_lang_helper=Wybierz pliki .gitignore
 license=Licencja
 license_helper=Wybierz plik licencji
 readme=Readme
@@ -345,7 +346,7 @@ migrate.clone_address=Sklonuj adres
 migrate.clone_address_desc=This can be a HTTP/HTTPS/GIT URL or local server path.
 migrate.invalid_local_path=Ścieżka jest niepoprawna. Nie istnieje lub nie jest katalogiem.
 
-forked_from=forked from
+forked_from=sklonowany z
 fork_from_self=You cannot fork repository you already owned!
 copy_link=Kopiuj
 click_to_copy=Kopiuj do schowka
@@ -369,14 +370,15 @@ branch_and_tags=Gałęzie i tagi
 branches=Gałęzie
 tags=Tagi
 issues=Problemy
-labels=Labels
+pulls=Pull Requests
+labels=Etykiety
 milestones=Milestones
 commits=Commity
 releases=Wydania
 file_raw=Czysty
 file_history=Historia
 file_view_raw=Zobacz czysty
-file_permalink=Permalink
+file_permalink=Bezpośredni odnośnik
 
 commits.commits=Commity
 commits.search=Przeszukaj commity
@@ -387,11 +389,11 @@ commits.date=Data
 commits.older=Starsze
 commits.newer=Nowsze
 
-issues.new=New Issue
-issues.new.labels=Labels
-issues.new.no_label=No Label
-issues.new.clear_labels=Clear labels
-issues.new.milestone=Milestone
+issues.new=Nowe zgłoszenie
+issues.new.labels=Etykiety
+issues.new.no_label=Brak etykiety
+issues.new.clear_labels=Wyczyść etykiety
+issues.new.milestone=Kamień milowy
 issues.new.no_milestone=No Milestone
 issues.new.clear_milestone=Clear milestone
 issues.new.open_milestone=Open Milestones
@@ -405,19 +407,19 @@ issues.new_label_placeholder=Label name...
 issues.create_label=Create Label
 issues.open_tab=%d Open
 issues.close_tab=%d Closed
-issues.filter_label=Label
+issues.filter_label=Etykieta
 issues.filter_label_no_select=No selected label
-issues.filter_milestone=Milestone
+issues.filter_milestone=Kamień milowy
 issues.filter_milestone_no_select=No selected milestone
-issues.filter_assignee=Assignee
+issues.filter_assignee=Przypisany
 issues.filter_assginee_no_select=No selected Assignee
-issues.filter_type=Type
+issues.filter_type=Typ
 issues.filter_type.all_issues=All issues
 issues.filter_type.assigned_to_you=Assigned to you
 issues.filter_type.created_by_you=Created by you
 issues.filter_type.mentioning_you=Mentioning you
 issues.filter_sort=Sort
-issues.filter_sort.latest=Newest
+issues.filter_sort.latest=Najnowszy
 issues.filter_sort.oldest=Oldest
 issues.filter_sort.recentupdate=Recently updated
 issues.filter_sort.leastupdate=Least recently updated
@@ -426,57 +428,75 @@ issues.filter_sort.leastcomment=Least commented
 issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
 issues.opened_by_fake=opened %[1]s by %[2]s
 issues.previous=Previous
-issues.next=Next
-issues.open_title=Open
-issues.closed_title=Closed
-issues.num_comments=%d comments
+issues.next=Następny
+issues.open_title=otwarty
+issues.closed_title=zamknięty
+issues.num_comments=%d komentarzy
 issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.no_content=There is no content yet.
 issues.close_issue=Close
 issues.close_comment_issue=Close and comment
 issues.reopen_issue=Reopen
 issues.reopen_comment_issue=Reopen and comment
-issues.create_comment=Comment
+issues.create_comment=Komentuj
 issues.closed_at=`closed <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.reopened_at=`reopened <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
-issues.poster=Poster
+issues.poster=Autor
 issues.admin=Admin
-issues.owner=Owner
-issues.sign_up_for_free=Sign up for free
-issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
-issues.edit=Edit
-issues.cancel=Cancel
-issues.save=Save
-issues.label_title=Label name
-issues.label_color=Label color
-issues.label_count=%d labels
-issues.label_open_issues=%d open issues
-issues.label_edit=Edit
-issues.label_delete=Delete
-issues.label_modify=Label Modification
-issues.label_deletion=Label Deletion
+issues.owner=Właściciel
+issues.sign_up_for_free=Zarejestruj się za darmo
+issues.sign_in_require_desc=do przyłączenia się do tej rozmowy. Masz już konto? <a href="%s"> Zaloguj się by komentować</a>
+issues.edit=Edytuj
+issues.cancel=Anuluj
+issues.save=Zapisz
+issues.label_title=Nazwa etykiety
+issues.label_color=Kolor etykiety
+issues.label_count=%d etykiety
+issues.label_open_issues=%d otwartych zgłoszeń
+issues.label_edit=Edytuj
+issues.label_delete=Usuń
+issues.label_modify=Modyfikacja etykiety
+issues.label_deletion=Usunięcie etykiety
 issues.label_deletion_desc=Delete this label will remove its information in all related issues. Do you want to continue?
 issues.label_deletion_success=Label has been deleted successfully!
 
 pulls.compare_changes=Compare Changes
 pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
-pulls.no_results=No results found.
-pulls.create=Create Pull Request
-
-milestones.new=New Milestone
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
+pulls.no_results=Nie znaleziono wyników.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
+pulls.create=Utwórz Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
+
+milestones.new=Nowy kamień milowy
 milestones.open_tab=%d Open
 milestones.close_tab=%d Closed
 milestones.closed=Closed %s
-milestones.no_due_date=No due date
-milestones.open=Open
-milestones.close=Close
+milestones.no_due_date=Nie ustalono terminu
+milestones.open=Otwórz
+milestones.close=Zamknij
 milestones.new_subheader=Create milestones to organize your issues.
 milestones.create=Create Milestone
 milestones.title=Title
 milestones.desc=Description
 milestones.due_date=Due Date (optional)
-milestones.clear=Clear
+milestones.clear=Wyczyść
 milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
 milestones.create_success=Milestone '%s' has been created successfully!
 milestones.edit=Edit Milestone
@@ -486,7 +506,7 @@ milestones.modify=Modify Milestone
 milestones.edit_success=Changes of milestone '%s' has been saved successfully!
 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!
+milestones.deletion_success=Kamień milowy został usunięty pomyślnie!
 
 settings=Ustawienia
 settings.options=Opcje
@@ -497,7 +517,7 @@ settings.basic_settings=Ustawienia podstawowe
 settings.danger_zone=Strefa niebezpieczeństwa
 settings.site=Oficjalna Strona
 settings.update_settings=Aktualizuj ustawienia
-settings.change_reponame_prompt=This change will affect how links relate to the repository.
+settings.change_reponame_prompt=Zmiana nazwy repozytorium wpłynie na linki do niego.
 settings.transfer=Przeniesienie własności
 settings.transfer_desc=Przenieś to repozytorium do innego użytkownika lub organizacji gdzie masz uprawnienia administratora.
 settings.new_owner_has_same_repo=Nowy właściciel już posiada repozytorium o tej samej nazwie.
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Opcje repozytorium zostały pomyślnie zaktualizowane.
 settings.transfer_owner=Nowy właściciel
 settings.make_transfer=Przenieś
@@ -519,10 +542,10 @@ settings.remove_collaborator_success=Współpracownik został usunięty.
 settings.user_is_org_member=Użytkownik jest członkiem organizacji, który nie może być dodany jako współpracownik.
 settings.add_webhook=Dodaj Webhooka
 settings.hooks_desc=Webhooks are much like basic HTTP POST event triggers. Whenever something occurs in Gogs, we will handle the notification to the target host you specify. Learn more in this <a target="_blank" href="%s">Webhooks Guide</a>.
-settings.webhook_deletion=Delete Webhook
+settings.webhook_deletion=Usuń Webhook
 settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
 settings.webhook_deletion_success=Webhook has been deleted successfully!
-settings.webhook.request=Request
+settings.webhook.request=Żądanie
 settings.webhook.response=Response
 settings.webhook.headers=Headers
 settings.webhook.payload=Payload
@@ -714,7 +737,7 @@ dashboard.resync_all_update_hooks=Rewrite all update hook of repositories (neede
 dashboard.resync_all_update_hooks_success=All repositories' update hook have been rewritten successfully.
 
 dashboard.server_uptime=Uptime serwera
-dashboard.current_goroutine=Current Goroutines
+dashboard.current_goroutine=Bieżące Goroutines
 dashboard.current_memory_usage=Bieżące użycie pamięci
 dashboard.total_memory_allocated=Całkowita przydzielona pamięć
 dashboard.memory_obtained=Memory Obtained
@@ -801,7 +824,7 @@ auths.smtp_auth=Typ autoryzacji SMTP
 auths.smtphost=Serwer SMTP
 auths.smtpport=Port SMTP
 auths.enable_tls=Włącz szyfrowanie TLS
-auths.skip_tls_verify=Skip TLS Verify
+auths.skip_tls_verify=Pomiń weryfikację protokołu TLS
 auths.pam_service_name=Nazwa usługi PAM
 auths.enable_auto_register=Włącz automatyczną rejestrację
 auths.tips=Wskazówki
@@ -846,7 +869,7 @@ config.enable_cache_avatar=Włącz cache awatarów
 config.active_code_lives=Ważność kodów aktywacyjnych
 config.reset_password_code_lives=Czas życia kodu resetowania hasła
 config.webhook_config=Konfiguracja skryptów internetowych
-config.queue_length=Queue Length
+config.queue_length=Długość kolejki
 config.deliver_timeout=Limit czasu zdarzenia
 config.skip_tls_verify=Pomiń weryfikację protokołu TLS
 config.mailer_config=Konfiguracja poczty
@@ -896,9 +919,12 @@ notices.delete_success=Powiadomienia systemowe zostały usunięte pomyślnie.
 
 [action]
 create_repo=utworzono repozytorium <a href="%s"> %s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=wypchnął do <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s"> %[3]s</a>
 create_issue=`zgłosił problem <a href="%s/issues/%s">#%[2]s %[3]s</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`skomentował problem <a href="%s/issues/%s">#%[2]s %[3]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=przeniósł repozytorium <code>%s</code> do <a href="%s">%s</a>
 push_tag=opublikował tag <a href="%s/src/%s">%[2]s</a> w <a href="%[1]s">%[3]s</a>
 compare_2_commits=Zobacz porównanie tych 2 commitów
@@ -925,8 +951,8 @@ raw_seconds=sekund
 raw_minutes=minut
 
 [dropzone]
-default_message=Drop files here or click to upload.
-invalid_input_type=You can't upload files of this type.
-file_too_big=File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
-remove_file=Remove file
+default_message=Upuść pliki tutaj lub kliknij, aby przesłać.
+invalid_input_type=Nie można przesłać plików tego typu.
+file_too_big=Rozmiar pliku ({{filesize}} MB) przekracza rozmiar maksymalny ({{maxFilesize}} MB).
+remove_file=Usuń plik
 

+ 38 - 12
conf/locale/locale_pt-BR.ini

@@ -76,8 +76,8 @@ run_user=Executar Usuário
 run_user_helper=O usuário deve ter acesso ao caminho raiz do repositório e executar o Gogs
 domain=Domínio
 domain_helper=Isto afeta URLs para clonagem via SSH.
-ssh_port=SSH Port
-ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
+ssh_port=Porta SSH
+ssh_port_helper=Número da porta que seu servidor SSH está usando, deixe vazio para desativar o recurso SSH.
 http_port=Porta HTTP
 http_port_helper=Número da porta em que a aplicação irá executar.
 app_url=URL do Aplicativo
@@ -95,7 +95,7 @@ mail_notify=Habilitar Notificação de Correio
 server_service_title=Configurações de Servidor e Outros Serviços
 offline_mode=Ativar Modo Offline
 offline_mode_popup=Desative o CDN mesmo em modo de produção, todos os recursos serão disponibilizados localmente.
-disable_gravatar=Disable Gravatar Service
+disable_gravatar=Desativar Serviço Gravatar
 disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
 disable_registration=Desativar auto-registro
 disable_registration_popup=Desativar o auto-registro de usuário, para que somente o administrador possa criar contas.
@@ -319,12 +319,13 @@ repo_name=Nome do Repositório
 repo_name_helper=Nomes de repositórios bons são pequenos, memorizáveis e <strong>únicos</strong>.
 visibility=Visibilidade
 visiblity_helper=Este é um repositório <span class="ui red text"> privado</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Fork o Repositório
 fork_from=Fork de
 fork_visiblity_helper=Não é possível alterar a visibilidade de um repositório bifurcado
 repo_desc=Descrição
 repo_lang=Idioma
-repo_lang_helper=Select .gitignore files
+repo_lang_helper=Selecione arquivos .gitignore
 license=Licença
 license_helper=Selecione um arquivo de licença
 readme=Readme
@@ -369,6 +370,7 @@ branch_and_tags=Ramos & Tags
 branches=Ramos
 tags=Tags
 issues=Problemas
+pulls=Pull Requests
 labels=Etiquetas
 milestones=Marcos
 commits=Commits
@@ -441,12 +443,12 @@ issues.closed_at=`fechado em <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.reopened_at=`reaberto em <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.commit_ref_at=`referenced this issue from a commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 issues.poster=Imagem
-issues.admin=Admin
-issues.owner=Owner
+issues.admin=Administrador
+issues.owner=Proprietário
 issues.sign_up_for_free=Cadastre-se gratuitamente
 issues.sign_in_require_desc=para participar nesta conversa. Já tem uma conta? <a href="%s">Faça login para comentar</a>
 issues.edit=Editar
-issues.cancel=Cancel
+issues.cancel=Cancelar
 issues.save=Salvar
 issues.label_title=Nome da etiqueta
 issues.label_color=Cor da etiqueta
@@ -461,8 +463,26 @@ issues.label_deletion_success=A etiqueta foi excluída com sucesso!
 
 pulls.compare_changes=Comparar mudanças
 pulls.compare_changes_desc=Comparar dois ramos e criar solicitação de pull com as mudanças.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=Nada encontrado.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversação
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=Novo marco
 milestones.open_tab=%d abertos
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=As opções do repositório foram atualizadas com sucesso.
 settings.transfer_owner=Novo Dono
 settings.make_transfer=Fazer Transferência
@@ -523,10 +546,10 @@ settings.webhook_deletion=Delete Webhook
 settings.webhook_deletion_desc=Delete this webhook will remove its information and all delivery history. Do you want to continue?
 settings.webhook_deletion_success=Webhook has been deleted successfully!
 settings.webhook.request=Request
-settings.webhook.response=Response
-settings.webhook.headers=Headers
+settings.webhook.response=Resposta
+settings.webhook.headers=Cabeçalhos
 settings.webhook.payload=Payload
-settings.webhook.body=Body
+settings.webhook.body=Texto
 settings.githooks_desc=Hooks do Git são ofertados pelo próprio Git, você pode editar arquivos de hooks suportados na lista abaixo para aplicar operações personalizadas.
 settings.githook_edit_desc=Se o hook não estiver ativo, o conteúdo de exemplo será apresentado. Deixar o conteúdo em branco irá desativar esse hook.
 settings.githook_name=Nome do Hook
@@ -538,12 +561,12 @@ settings.content_type=Tipo de Conteúdo
 settings.secret=Secreto
 settings.slack_username=Username
 settings.slack_icon_url=Icon URL
-settings.slack_color=Color
+settings.slack_color=Cor
 settings.event_desc=Quais eventos você gostaria de acionar a esse hook da web?
 settings.event_push_only=Apenas o evento <code>push</code>.
 settings.event_send_everything=I need <strong>everything</strong>.
 settings.event_choose=Let me choose what I need.
-settings.event_create=Create
+settings.event_create=Criar
 settings.event_create_desc=Branch, or tag created
 settings.event_push=Push
 settings.event_push_desc=Git push to a repository
@@ -896,9 +919,12 @@ notices.delete_success=Aviso do sistema foi deletado com sucesso.
 
 [action]
 create_repo=repositório criado <a href="%s"> %s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=pushed para <a href="%s/src/%s">%[2]s</a> em <a href="%[1]s">%[3]s</a>
 create_issue='questão aberta <a href="%s/issues/%s">%s#%[2]s</a>'
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue='comentou sobre a questão <a href="%s/issues/%s">%s#%[2]s</a>'
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=repositório transferido de <code>%s</code> para <a href="%s">%s</a>
 push_tag=Foi feito push na tag <a href="%s/src/%s">%[2]s</a> para <a href="%[1]s">%[3]s</a>
 compare_2_commits=Ver comparação desses 2 commits

+ 45 - 19
conf/locale/locale_ru-RU.ini

@@ -14,9 +14,9 @@ version=Версия
 page=Страница
 template=Шаблон
 language=Язык
-create_new=Create new...
-user_profile_and_more=User profile and more
-signed_in_as=Signed in as
+create_new=Создать новый...
+user_profile_and_more=Профиль и остальное
+signed_in_as=Вы вошли как
 
 username=Имя пользователя
 email=Эл. почта
@@ -35,8 +35,8 @@ manage_org=Управление Организацией
 admin_panel=Панель администратора
 account_settings=Настройки аккаунта
 settings=Настройки
-your_profile=Your Profile
-your_settings=Your Settings
+your_profile=Ваш профиль
+your_settings=Ваши настройки
 
 news_feed=Лента новостей
 pull_requests=Pull Requests
@@ -76,8 +76,8 @@ run_user=Пользователь
 run_user_helper=У пользователя должен быть доступ к пути к корню репозитория и к запуску Gogs.
 domain=Домен
 domain_helper=Влияет на URL-адреса для клонирования по SSH.
-ssh_port=SSH Port
-ssh_port_helper=Port number which your SSH server is using, leave it empty to disable SSH feature.
+ssh_port=SSH порт
+ssh_port_helper=Номер порта, который использует SSH сервер. Оставьте пустым, чтобы отключить SSH.
 http_port=Порт HTTP
 http_port_helper=Номер порта, который приложение будет слушать.
 app_url=URL приложения
@@ -95,7 +95,7 @@ mail_notify=Разрешить почтовые уведомления
 server_service_title=Сервер и другие настройки служб
 offline_mode=Включение офлайн режима
 offline_mode_popup=Отключить CDN даже в производственном режиме, все файлы ресурсов будут раздаваться локально.
-disable_gravatar=Disable Gravatar Service
+disable_gravatar=Отключить службу Gravatar
 disable_gravatar_popup=Disable Gravatar and custom sources, all avatars are uploaded by users or default.
 disable_registration=Отключить самостоятельную регистрацию
 disable_registration_popup=Запретить пользователям самостоятельную регистрацию, только администратор может создавать аккаунты.
@@ -125,9 +125,9 @@ my_repos=Мои репозитории
 collaborative_repos=Совместные репозитории
 my_orgs=Моя Организация
 my_mirrors=Мои зеркала
-view_home=View %s
+view_home=Показать %s
 
-issues.in_your_repos=In your repositories
+issues.in_your_repos=В вашем репозитории
 
 [explore]
 repos=Репозитории
@@ -275,20 +275,20 @@ add_key=Добавить ключ
 ssh_desc=Это список ключей SSH связанных с вашей учетной записью. Удаляйте любые неизвестные вам ключи.
 ssh_helper=<strong>Нужна помощь?</strong> Ознакомьтесь с нашим путеводителем по <a href="%s">созданию SSH-ключей</a> или посмотрите решения <a href="%s">частых проблем, связанных с SSH</a>.
 add_new_key=Добавить 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=Будет использован публичный ключ.
+ssh_key_name_used=Публичный ключ с таким же именем уже существует.
 key_name=Имя ключа
 key_content=Содержимое
-add_key_success=New SSH key '%s' has been added successfully!
+add_key_success=Был успешно добавлен новый ключ SSH «%s»!
 delete_key=Удалить
-ssh_key_deletion=SSH Key Deletion
-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=SSH key has been deleted successfully!
+ssh_key_deletion=Удаление ключа SSH
+ssh_key_deletion_desc=Удалить этот SSH ключ удалит все связанные с ним доступы для вашей учетной записи. Вы хотите продолжить?
+ssh_key_deletion_success=SSH ключ был успешно удален!
 add_on=Добавлено
 last_used=Последний раз использовался
 no_activity=Еще не применялся
-key_state_desc=This key is used in last 7 days
-token_state_desc=This token is used in last 7 days
+key_state_desc=Этот ключ использовался за последние 7 дней
+token_state_desc=Этот токен использовался за последние 7 дней
 
 manage_social=Управление привязанными учетными записями в соцсетях
 social_desc=Это список привязанных учетных записей в соцсетях. Удаляйте любые неизвестные вам привязки.
@@ -297,7 +297,7 @@ unbind_success=Социальная учетная запись отвязана
 
 manage_access_token=Управление Токенами Персонального Доступа
 generate_new_token=Создать новый token
-tokens_desc=Tokens you have generated that can be used to access the Gogs APIs.
+tokens_desc=Созданные вами токены могут использоваться для доступа к Gogs API.
 new_token_desc=Пока что каждый токен будет иметь полный доступ к вашей учетной записи.
 token_name=Имя маркера
 generate_token=Генерировать маркер
@@ -319,6 +319,7 @@ repo_name=Имя репозитория
 repo_name_helper=Лучшие названия репозиториев коротки, запоминаемы и <strong>уникальны</strong>.
 visibility=Видимость
 visiblity_helper=This repository is <span class="ui red text">Private</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=Ответвить репозиторий
 fork_from=Ответвление от
 fork_visiblity_helper=Ответвленному репозиторию нельзя поменять уровень видимости
@@ -369,6 +370,7 @@ branch_and_tags=Ветки и метки
 branches=Ветки
 tags=Метки
 issues=Обсуждения
+pulls=Pull Requests
 labels=Метки
 milestones=Этапы
 commits=Коммиты
@@ -461,8 +463,26 @@ issues.label_deletion_success=Метка была удалена успешно!
 
 pulls.compare_changes=Compare Changes
 pulls.compare_changes_desc=Compare two branches and make a pull request for changes.
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=No results found.
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=New Milestone
 milestones.open_tab=%d Open
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=Настройка репозитория обновлена успешно.
 settings.transfer_owner=Новый владелец
 settings.make_transfer=Выполнить передачу
@@ -896,9 +919,12 @@ notices.delete_success=Системное уведомление успешно
 
 [action]
 create_repo=создан репозиторий <a href="%s"> %s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=pushed to <a href="%s/src/%s">%[2]s</a> at <a href="%[1]s">%[3]s</a>
 create_issue=`opened issue <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`commented on issue <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=transfered repository <code>%s</code> to <a href="%s">%s</a>
 push_tag=pushed tag <a href="%s/src/%s">%[2]s</a> to <a href="%[1]s">%[3]s</a>
 compare_2_commits=Просмотреть сравнение двух коммитов

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

@@ -319,6 +319,7 @@ repo_name=仓库名称
 repo_name_helper=伟大的仓库名称一般都较短、令人深刻并且 <strong>独一无二</strong> 的。
 visibility=可见性
 visiblity_helper=该仓库为 <span class="ui red text">私有的</span>
+visiblity_fork_helper=(修改该值将会影响到所有派生仓库)
 fork_repo=派生仓库
 fork_from=派生自
 fork_visiblity_helper=派生仓库无法修改可见性
@@ -369,6 +370,7 @@ branch_and_tags=分支与标签
 branches=分支列表
 tags=标签列表
 issues=工单管理
+pulls=合并请求
 labels=标签管理
 milestones=里程碑
 commits=提交历史
@@ -461,8 +463,26 @@ issues.label_deletion_success=标签删除成功!
 
 pulls.compare_changes=对比文件变化
 pulls.compare_changes_desc=对比两个分支间的文件变化并发起一个合并请求。
+pulls.compare_base=基准分支
+pulls.compare_compare=对比分支
+pulls.filter_branch=过滤分支
 pulls.no_results=未找到结果
+pulls.nothing_to_compare=基准和对比分支代码已经同步,无需进行对比。
+pulls.has_pull_request=`已经存在目标分支的合并请求:<a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=创建合并请求
+pulls.title_desc=请求将 %[1]d 次代码提交从 <code>%[2]s</code> 合并至 <code>%[3]s</code>
+pulls.merged_title_desc=于 %[4]s 将 %[1]d 次代码提交从 <code>%[2]s</code>合并至 <code>%[3]s</code> 
+pulls.tab_conversation=对话内容
+pulls.tab_commits=代码提交
+pulls.tab_files=文件变动
+pulls.reopen_to_merge=请重新开启合并请求来完成合并操作。
+pulls.merged=已合并
+pulls.has_merged=该合并请求已经成功合并!
+pulls.data_broken=该合并请求的数据由于派生仓库的相关信息被删除而被破坏。
+pulls.can_auto_merge_desc=您可以实现该合并请求的自动合并操作。
+pulls.cannot_auto_merge_desc=因为代码提交存在冲突,您无法对该合并请求执行自动合并操作。
+pulls.cannot_auto_merge_helper=请使用命令行工具来解决冲突。
+pulls.merge_pull_request=合并请求
 
 milestones.new=新的里程碑
 milestones.open_tab=%d 开启中
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- 如果您将仓库转移给您是所有者的组
 settings.transfer_form_title=请输入以下信息以确认您的操作:
 settings.delete_notices_1=- 此操作 <strong>不可以</strong> 被回滚。
 settings.delete_notices_2=- 此操作将永久删除该仓库,包括 Git 数据、 工单、 评论和协作者的操作权限。
+settings.delete_notices_fork_1=- 如果该仓库为公开的,则在删除仓库后所有的派生仓库都将转换成独立的仓库。
+settings.delete_notices_fork_2=- 如果该仓库为私有,则会同时删除所有的派生仓库。
+settings.delete_notices_fork_3=- 如果您想要保留派生仓库,请先将可见性修改为公开的后再进行删除操作。
 settings.update_settings_success=仓库设置更新成功!
 settings.transfer_owner=新拥有者
 settings.make_transfer=确认转移仓库
@@ -896,9 +919,12 @@ notices.delete_success=系统提示删除成功!
 
 [action]
 create_repo=创建了仓库 <a href="%s">%s</a>
+rename_repo=重命名仓库 <code>%[1]s</code> 为 <a href="%[2]s">%[3]s</a>
 commit_repo=推送了 <a href="%s/src/%s">%[2]s</a> 分支的代码到 <a href="%[1]s">%[3]s</a>
 create_issue=`创建了工单 <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`创建了合并请求 <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`评论了工单 <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`合并了合并请求 <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=将仓库 <code>%s</code> 转移至 <a href="%s">%s</a>
 push_tag=推送了标签 <a href="%s/src/%s">%[2]s</a> 到 <a href="%[1]s">%[3]s</a>
 compare_2_commits=查看 2 次提交的内容对比

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

@@ -319,6 +319,7 @@ repo_name=倉庫名稱
 repo_name_helper=偉大的倉庫名稱一般都較短、令人深刻並且 <strong>獨一無二</strong> 的。
 visibility=可見度
 visiblity_helper=該倉庫為 <span class="ui red text">私有的</span>
+visiblity_fork_helper=(Change of this value will affect all forks)
 fork_repo=派生倉庫
 fork_from=派生自
 fork_visiblity_helper=派生倉庫無法修改可見性。
@@ -369,6 +370,7 @@ branch_and_tags=分支與標籤
 branches=分支列表
 tags=標籤列表
 issues=問題管理
+pulls=Pull Requests
 labels=標籤
 milestones=里程碑
 commits=提交歷史
@@ -461,8 +463,26 @@ issues.label_deletion_success=標籤刪除成功!
 
 pulls.compare_changes=對比文件變化
 pulls.compare_changes_desc=對比兩個分支間的文件變化及發起一個合併請求。
+pulls.compare_base=base
+pulls.compare_compare=compare
+pulls.filter_branch=Filter branch
 pulls.no_results=未找到結果
+pulls.nothing_to_compare=There is nothing to compare because base and head branches are even.
+pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
 pulls.create=Create Pull Request
+pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
+pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s
+pulls.tab_conversation=Conversation
+pulls.tab_commits=Commits
+pulls.tab_files=Files changed
+pulls.reopen_to_merge=Please reopen this pull request to perform merge operation.
+pulls.merged=Merged
+pulls.has_merged=This pull request has been merged successfully!
+pulls.data_broken=Data of this pull request has been broken due to deletion of fork information.
+pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request.
+pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits.
+pulls.cannot_auto_merge_helper=Please use command line tool to solve it.
+pulls.merge_pull_request=Merge Pull Request
 
 milestones.new=新的里程碑
 milestones.open_tab=%d 開啟中
@@ -508,6 +528,9 @@ settings.transfer_notices_2=- You will conserve access if new owner is an organi
 settings.transfer_form_title=Please enter following information to confirm your operation:
 settings.delete_notices_1=- This operation <strong>CANNOT</strong> be undone.
 settings.delete_notices_2=- This operation will permanently delete the everything of this repository, including Git data, issues, comments and accesses of collaborators.
+settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion.
+settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time.
+settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first.
 settings.update_settings_success=倉庫設置更新成功!
 settings.transfer_owner=新擁有者
 settings.make_transfer=確認轉移倉庫
@@ -896,9 +919,12 @@ notices.delete_success=系統提示刪除成功!
 
 [action]
 create_repo=創建了倉庫 <a href="%s">%s</a>
+rename_repo=renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 commit_repo=推送了 <a href="%s/src/%s">%[2]s</a> 分支的代碼到 <a href="%[1]s">%[3]s</a>
 create_issue=`創建了問題 <a href="%s/issues/%s">%s#%[2]s</a>`
+create_pull_request=`created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 comment_issue=`評論了問題 <a href="%s/issues/%s">%s#%[2]s</a>`
+merge_pull_request=`merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 transfer_repo=將倉庫 <code>%s</code> 轉移至 <a href="%s">%s</a>
 push_tag=推送了標籤 <a href="%s/src/%s">%[2]s</a> 到 <a href="%[1]s">%[3]s</a>
 compare_2_commits=查看 2 次提交的內容對比

+ 1 - 1
gogs.go

@@ -17,7 +17,7 @@ import (
 	"github.com/gogits/gogs/modules/setting"
 )
 
-const APP_VER = "0.6.7.0902 Beta"
+const APP_VER = "0.6.8.0902 Beta"
 
 func init() {
 	runtime.GOMAXPROCS(runtime.NumCPU())

+ 30 - 10
models/action.go

@@ -27,16 +27,17 @@ import (
 type ActionType int
 
 const (
-	CREATE_REPO   ActionType = iota + 1 // 1
-	RENAME_REPO                         // 2
-	STAR_REPO                           // 3
-	FOLLOW_REPO                         // 4
-	COMMIT_REPO                         // 5
-	CREATE_ISSUE                        // 6
-	PULL_REQUEST                        // 7
-	TRANSFER_REPO                       // 8
-	PUSH_TAG                            // 9
-	COMMENT_ISSUE                       // 10
+	CREATE_REPO         ActionType = iota + 1 // 1
+	RENAME_REPO                               // 2
+	STAR_REPO                                 // 3
+	FOLLOW_REPO                               // 4
+	COMMIT_REPO                               // 5
+	CREATE_ISSUE                              // 6
+	CREATE_PULL_REQUEST                       // 7
+	TRANSFER_REPO                             // 8
+	PUSH_TAG                                  // 9
+	COMMENT_ISSUE                             // 10
+	MERGE_PULL_REQUEST                        // 11
 )
 
 var (
@@ -526,6 +527,25 @@ func TransferRepoAction(actUser, oldOwner, newOwner *User, repo *Repository) err
 	return transferRepoAction(x, actUser, oldOwner, newOwner, repo)
 }
 
+func mergePullRequestAction(e Engine, actUser *User, repo *Repository, pull *Issue) error {
+	return notifyWatchers(e, &Action{
+		ActUserID:    actUser.Id,
+		ActUserName:  actUser.Name,
+		ActEmail:     actUser.Email,
+		OpType:       MERGE_PULL_REQUEST,
+		Content:      fmt.Sprintf("%d|%s", pull.Index, pull.Name),
+		RepoID:       repo.ID,
+		RepoUserName: repo.Owner.Name,
+		RepoName:     repo.Name,
+		IsPrivate:    repo.IsPrivate,
+	})
+}
+
+// MergePullRequestAction adds new action for merging pull request.
+func MergePullRequestAction(actUser *User, repo *Repository, pull *Issue) error {
+	return mergePullRequestAction(x, actUser, repo, pull)
+}
+
 // GetFeeds returns action list of given user in given context.
 func GetFeeds(uid, offset int64, isProfile bool) ([]*Action, error) {
 	actions := make([]*Action, 0, 20)

+ 117 - 47
models/issue.go

@@ -287,10 +287,17 @@ func (i *Issue) ChangeStatus(doer *User, isClosed bool) (err error) {
 }
 
 // It's caller's responsibility to create action.
-func newIssue(e *xorm.Session, repo *Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) {
+func newIssue(e *xorm.Session, repo *Repository, issue *Issue, labelIDs []int64, uuids []string, isPull bool) (err error) {
 	if _, err = e.Insert(issue); err != nil {
 		return err
-	} else if _, err = e.Exec("UPDATE `repository` SET num_issues=num_issues+1 WHERE id=?", issue.RepoID); err != nil {
+	}
+
+	if isPull {
+		_, err = e.Exec("UPDATE `repository` SET num_pulls=num_pulls+1 WHERE id=?", issue.RepoID)
+	} else {
+		_, err = e.Exec("UPDATE `repository` SET num_issues=num_issues+1 WHERE id=?", issue.RepoID)
+	}
+	if err != nil {
 		return err
 	}
 
@@ -352,7 +359,7 @@ func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string)
 		return err
 	}
 
-	if err = newIssue(sess, repo, issue, labelIDs, uuids); err != nil {
+	if err = newIssue(sess, repo, issue, labelIDs, uuids, false); err != nil {
 		return fmt.Errorf("newIssue: %v", err)
 	}
 
@@ -425,33 +432,50 @@ func GetIssueByID(id int64) (*Issue, error) {
 	return issue, nil
 }
 
+type IssuesOptions struct {
+	UserID      int64
+	AssigneeID  int64
+	RepoID      int64
+	PosterID    int64
+	MilestoneID int64
+	RepoIDs     []int64
+	Page        int
+	IsClosed    bool
+	IsMention   bool
+	IsPull      bool
+	Labels      string
+	SortType    string
+}
+
 // Issues returns a list of issues by given conditions.
-func Issues(uid, assigneeID, repoID, posterID, milestoneID int64, repoIDs []int64, page int, isClosed, isMention bool, labels, sortType string) ([]*Issue, error) {
-	sess := x.Limit(setting.IssuePagingNum, (page-1)*setting.IssuePagingNum)
+func Issues(opts *IssuesOptions) ([]*Issue, error) {
+	sess := x.Limit(setting.IssuePagingNum, (opts.Page-1)*setting.IssuePagingNum)
 
-	if repoID > 0 {
-		sess.Where("issue.repo_id=?", repoID).And("issue.is_closed=?", isClosed)
-	} else if repoIDs != nil {
+	if opts.RepoID > 0 {
+		sess.Where("issue.repo_id=?", opts.RepoID).And("issue.is_closed=?", opts.IsClosed)
+	} else if opts.RepoIDs != nil {
 		// In case repository IDs are provided but actually no repository has issue.
-		if len(repoIDs) == 0 {
+		if len(opts.RepoIDs) == 0 {
 			return make([]*Issue, 0), nil
 		}
-		sess.Where("issue.repo_id IN ("+strings.Join(base.Int64sToStrings(repoIDs), ",")+")").And("issue.is_closed=?", isClosed)
+		sess.Where("issue.repo_id IN ("+strings.Join(base.Int64sToStrings(opts.RepoIDs), ",")+")").And("issue.is_closed=?", opts.IsClosed)
 	} else {
-		sess.Where("issue.is_closed=?", isClosed)
+		sess.Where("issue.is_closed=?", opts.IsClosed)
 	}
 
-	if assigneeID > 0 {
-		sess.And("issue.assignee_id=?", assigneeID)
-	} else if posterID > 0 {
-		sess.And("issue.poster_id=?", posterID)
+	if opts.AssigneeID > 0 {
+		sess.And("issue.assignee_id=?", opts.AssigneeID)
+	} else if opts.PosterID > 0 {
+		sess.And("issue.poster_id=?", opts.PosterID)
 	}
 
-	if milestoneID > 0 {
-		sess.And("issue.milestone_id=?", milestoneID)
+	if opts.MilestoneID > 0 {
+		sess.And("issue.milestone_id=?", opts.MilestoneID)
 	}
 
-	switch sortType {
+	sess.And("issue.is_pull=?", opts.IsPull)
+
+	switch opts.SortType {
 	case "oldest":
 		sess.Asc("created")
 	case "recentupdate":
@@ -468,7 +492,7 @@ func Issues(uid, assigneeID, repoID, posterID, milestoneID int64, repoIDs []int6
 		sess.Desc("created")
 	}
 
-	labelIDs := base.StringsToInt64s(strings.Split(labels, ","))
+	labelIDs := base.StringsToInt64s(strings.Split(opts.Labels, ","))
 	if len(labelIDs) > 0 {
 		validJoin := false
 		queryStr := "issue.id=issue_label.issue_id"
@@ -484,10 +508,10 @@ func Issues(uid, assigneeID, repoID, posterID, milestoneID int64, repoIDs []int6
 		}
 	}
 
-	if isMention {
+	if opts.IsMention {
 		queryStr := "issue.id=issue_user.issue_id AND issue_user.is_mentioned=1"
-		if uid > 0 {
-			queryStr += " AND issue_user.uid=" + com.ToStr(uid)
+		if opts.UserID > 0 {
+			queryStr += " AND issue_user.uid=" + com.ToStr(opts.UserID)
 		}
 		sess.Join("INNER", "issue_user", queryStr)
 	}
@@ -668,53 +692,66 @@ func parseCountResult(results []map[string][]byte) int64 {
 	return 0
 }
 
+type IssueStatsOptions struct {
+	RepoID      int64
+	UserID      int64
+	LabelID     int64
+	MilestoneID int64
+	AssigneeID  int64
+	FilterMode  int
+	IsPull      bool
+}
+
 // GetIssueStats returns issue statistic information by given conditions.
-func GetIssueStats(repoID, uid, labelID, milestoneID, assigneeID int64, filterMode int) *IssueStats {
+func GetIssueStats(opts *IssueStatsOptions) *IssueStats {
 	stats := &IssueStats{}
 
 	queryStr := "SELECT COUNT(*) FROM `issue` "
-	if labelID > 0 {
-		queryStr += "INNER JOIN `issue_label` ON `issue`.id=`issue_label`.issue_id AND `issue_label`.label_id=" + com.ToStr(labelID)
+	if opts.LabelID > 0 {
+		queryStr += "INNER JOIN `issue_label` ON `issue`.id=`issue_label`.issue_id AND `issue_label`.label_id=" + com.ToStr(opts.LabelID)
 	}
 
-	baseCond := " WHERE issue.repo_id=? AND issue.is_closed=?"
-	if milestoneID > 0 {
-		baseCond += " AND issue.milestone_id=" + com.ToStr(milestoneID)
+	baseCond := " WHERE issue.repo_id=" + com.ToStr(opts.RepoID) + " AND issue.is_closed=?"
+	if opts.MilestoneID > 0 {
+		baseCond += " AND issue.milestone_id=" + com.ToStr(opts.MilestoneID)
 	}
-	if assigneeID > 0 {
-		baseCond += " AND assignee_id=" + com.ToStr(assigneeID)
+	if opts.AssigneeID > 0 {
+		baseCond += " AND assignee_id=" + com.ToStr(opts.AssigneeID)
 	}
-	switch filterMode {
+	if opts.IsPull {
+		baseCond += " AND issue.is_pull=1"
+	} else {
+		baseCond += " AND issue.is_pull=0"
+	}
+
+	switch opts.FilterMode {
 	case FM_ALL, FM_ASSIGN:
-		results, _ := x.Query(queryStr+baseCond, repoID, false)
+		results, _ := x.Query(queryStr+baseCond, false)
 		stats.OpenCount = parseCountResult(results)
-		results, _ = x.Query(queryStr+baseCond, repoID, true)
+		results, _ = x.Query(queryStr+baseCond, true)
 		stats.ClosedCount = parseCountResult(results)
 
 	case FM_CREATE:
 		baseCond += " AND poster_id=?"
-		results, _ := x.Query(queryStr+baseCond, repoID, false, uid)
+		results, _ := x.Query(queryStr+baseCond, false, opts.UserID)
 		stats.OpenCount = parseCountResult(results)
-		results, _ = x.Query(queryStr+baseCond, repoID, true, uid)
+		results, _ = x.Query(queryStr+baseCond, true, opts.UserID)
 		stats.ClosedCount = parseCountResult(results)
 
 	case FM_MENTION:
 		queryStr += " INNER JOIN `issue_user` ON `issue`.id=`issue_user`.issue_id"
 		baseCond += " AND `issue_user`.uid=? AND `issue_user`.is_mentioned=?"
-		results, _ := x.Query(queryStr+baseCond, repoID, false, uid, true)
+		results, _ := x.Query(queryStr+baseCond, false, opts.UserID, true)
 		stats.OpenCount = parseCountResult(results)
-		results, _ = x.Query(queryStr+baseCond, repoID, true, uid, true)
+		results, _ = x.Query(queryStr+baseCond, true, opts.UserID, true)
 		stats.ClosedCount = parseCountResult(results)
 	}
 	return stats
 }
 
 // GetUserIssueStats returns issue statistic information for dashboard by given conditions.
-func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int) *IssueStats {
+func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int, isPull bool) *IssueStats {
 	stats := &IssueStats{}
-	issue := new(Issue)
-	stats.AssignCount, _ = x.Where("assignee_id=?", uid).And("is_closed=?", false).Count(issue)
-	stats.CreateCount, _ = x.Where("poster_id=?", uid).And("is_closed=?", false).Count(issue)
 
 	queryStr := "SELECT COUNT(*) FROM `issue` "
 	baseCond := " WHERE issue.is_closed=?"
@@ -723,6 +760,18 @@ func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int) *Issu
 	} else {
 		baseCond += " AND issue.repo_id IN (" + strings.Join(base.Int64sToStrings(repoIDs), ",") + ")"
 	}
+
+	if isPull {
+		baseCond += " AND issue.is_pull=1"
+	} else {
+		baseCond += " AND issue.is_pull=0"
+	}
+
+	results, _ := x.Query(queryStr+baseCond+" AND assignee_id=?", false, uid)
+	stats.AssignCount = parseCountResult(results)
+	results, _ = x.Query(queryStr+baseCond+" AND poster_id=?", false, uid)
+	stats.CreateCount = parseCountResult(results)
+
 	switch filterMode {
 	case FM_ASSIGN:
 		baseCond += " AND assignee_id=" + com.ToStr(uid)
@@ -731,7 +780,7 @@ func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int) *Issu
 		baseCond += " AND poster_id=" + com.ToStr(uid)
 	}
 
-	results, _ := x.Query(queryStr+baseCond, false)
+	results, _ = x.Query(queryStr+baseCond, false)
 	stats.OpenCount = parseCountResult(results)
 	results, _ = x.Query(queryStr+baseCond, true)
 	stats.ClosedCount = parseCountResult(results)
@@ -739,9 +788,16 @@ func GetUserIssueStats(repoID, uid int64, repoIDs []int64, filterMode int) *Issu
 }
 
 // GetRepoIssueStats returns number of open and closed repository issues by given filter mode.
-func GetRepoIssueStats(repoID, uid int64, filterMode int) (numOpen int64, numClosed int64) {
+func GetRepoIssueStats(repoID, uid int64, filterMode int, isPull bool) (numOpen int64, numClosed int64) {
 	queryStr := "SELECT COUNT(*) FROM `issue` "
 	baseCond := " WHERE issue.repo_id=? AND issue.is_closed=?"
+
+	if isPull {
+		baseCond += " AND issue.is_pull=1"
+	} else {
+		baseCond += " AND issue.is_pull=0"
+	}
+
 	switch filterMode {
 	case FM_ASSIGN:
 		baseCond += " AND assignee_id=" + com.ToStr(uid)
@@ -924,6 +980,10 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error
 		return fmt.Errorf("GetCommitIdOfBranch: %v", err)
 	}
 
+	if err = mergePullRequestAction(sess, doer, pr.Pull.Repo, pr.Pull); err != nil {
+		return fmt.Errorf("mergePullRequestAction: %v", err)
+	}
+
 	pr.HasMerged = true
 	pr.Merged = time.Now()
 	pr.MergerID = doer.Id
@@ -975,7 +1035,7 @@ func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []str
 		return err
 	}
 
-	if err = newIssue(sess, repo, pull, labelIDs, uuids); err != nil {
+	if err = newIssue(sess, repo, pull, labelIDs, uuids, true); err != nil {
 		return fmt.Errorf("newIssue: %v", err)
 	}
 
@@ -984,7 +1044,7 @@ func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []str
 		ActUserID:    pull.Poster.Id,
 		ActUserName:  pull.Poster.Name,
 		ActEmail:     pull.Poster.Email,
-		OpType:       PULL_REQUEST,
+		OpType:       CREATE_PULL_REQUEST,
 		Content:      fmt.Sprintf("%d|%s", pull.Index, pull.Name),
 		RepoID:       repo.ID,
 		RepoUserName: repo.Owner.Name,
@@ -1729,11 +1789,21 @@ func createComment(e *xorm.Session, u *User, repo *Repository, issue *Issue, com
 		}
 
 	case COMMENT_TYPE_REOPEN:
-		if _, err = e.Exec("UPDATE `repository` SET num_closed_issues=num_closed_issues-1 WHERE id=?", repo.ID); err != nil {
+		if issue.IsPull {
+			_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls-1 WHERE id=?", repo.ID)
+		} else {
+			_, err = e.Exec("UPDATE `repository` SET num_closed_issues=num_closed_issues-1 WHERE id=?", repo.ID)
+		}
+		if err != nil {
 			return nil, err
 		}
 	case COMMENT_TYPE_CLOSE:
-		if _, err = e.Exec("UPDATE `repository` SET num_closed_issues=num_closed_issues+1 WHERE id=?", repo.ID); err != nil {
+		if issue.IsPull {
+			_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls+1 WHERE id=?", repo.ID)
+		} else {
+			_, err = e.Exec("UPDATE `repository` SET num_closed_issues=num_closed_issues+1 WHERE id=?", repo.ID)
+		}
+		if err != nil {
 			return nil, err
 		}
 	}

+ 8 - 2
models/repo.go

@@ -167,6 +167,12 @@ type Repository struct {
 
 func (repo *Repository) AfterSet(colName string, _ xorm.Cell) {
 	switch colName {
+	case "num_closed_issues":
+		repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues
+	case "num_closed_pulls":
+		repo.NumOpenPulls = repo.NumPulls - repo.NumClosedPulls
+	case "num_closed_milestones":
+		repo.NumOpenMilestones = repo.NumMilestones - repo.NumClosedMilestones
 	case "updated":
 		repo.Updated = regulateTimeZone(repo.Updated)
 	}
@@ -221,8 +227,8 @@ func (repo *Repository) GetMilestoneByID(milestoneID int64) (*Milestone, error)
 }
 
 // IssueStats returns number of open and closed repository issues by given filter mode.
-func (repo *Repository) IssueStats(uid int64, filterMode int) (int64, int64) {
-	return GetRepoIssueStats(repo.ID, uid, filterMode)
+func (repo *Repository) IssueStats(uid int64, filterMode int, isPull bool) (int64, int64) {
+	return GetRepoIssueStats(repo.ID, uid, filterMode, isPull)
 }
 
 func (repo *Repository) GetMirror() (err error) {

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
modules/bindata/bindata.go


+ 0 - 2
modules/middleware/repo.go

@@ -300,8 +300,6 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
 			ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval
 		}
 
-		repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues
-		repo.NumOpenMilestones = repo.NumMilestones - repo.NumClosedMilestones
 		ctx.Repo.Repository = repo
 		ctx.Data["IsBareRepo"] = ctx.Repo.Repository.IsBare
 

+ 1 - 1
modules/setting/setting.go

@@ -310,7 +310,7 @@ func NewConfigContext() {
 		AttachmentPath = path.Join(workDir, AttachmentPath)
 	}
 	AttachmentAllowedTypes = strings.Replace(sec.Key("ALLOWED_TYPES").MustString("image/jpeg,image/png"), "|", ",", -1)
-	AttachmentMaxSize = sec.Key("MAX_SIZE").MustInt64(32)
+	AttachmentMaxSize = sec.Key("MAX_SIZE").MustInt64(4)
 	AttachmentMaxFiles = sec.Key("MAX_FILES").MustInt(5)
 	AttachmentEnabled = sec.Key("ENABLE").MustBool(true)
 

+ 32 - 10
routers/repo/issue.go

@@ -55,8 +55,14 @@ func RetrieveLabels(ctx *middleware.Context) {
 }
 
 func Issues(ctx *middleware.Context) {
-	ctx.Data["Title"] = ctx.Tr("repo.issues")
-	ctx.Data["PageIsIssueList"] = true
+	isPullList := ctx.Params(":type") == "pulls"
+	if isPullList {
+		ctx.Data["Title"] = ctx.Tr("repo.pulls")
+		ctx.Data["PageIsPullList"] = true
+	} else {
+		ctx.Data["Title"] = ctx.Tr("repo.issues")
+		ctx.Data["PageIsIssueList"] = true
+	}
 
 	viewType := ctx.Query("type")
 	sortType := ctx.Query("sort")
@@ -97,7 +103,15 @@ func Issues(ctx *middleware.Context) {
 	selectLabels := ctx.Query("labels")
 	milestoneID := ctx.QueryInt64("milestone")
 	isShowClosed := ctx.Query("state") == "closed"
-	issueStats := models.GetIssueStats(repo.ID, uid, com.StrTo(selectLabels).MustInt64(), milestoneID, assigneeID, filterMode)
+	issueStats := models.GetIssueStats(&models.IssueStatsOptions{
+		RepoID:      repo.ID,
+		UserID:      uid,
+		LabelID:     com.StrTo(selectLabels).MustInt64(),
+		MilestoneID: milestoneID,
+		AssigneeID:  assigneeID,
+		FilterMode:  filterMode,
+		IsPull:      isPullList,
+	})
 
 	page := ctx.QueryInt("page")
 	if page <= 1 {
@@ -113,8 +127,19 @@ func Issues(ctx *middleware.Context) {
 	ctx.Data["Page"] = paginater.New(total, setting.IssuePagingNum, page, 5)
 
 	// Get issues.
-	issues, err := models.Issues(uid, assigneeID, repo.ID, posterID, milestoneID,
-		nil, page, isShowClosed, filterMode == models.FM_MENTION, selectLabels, sortType)
+	issues, err := models.Issues(&models.IssuesOptions{
+		UserID:      uid,
+		AssigneeID:  assigneeID,
+		RepoID:      repo.ID,
+		PosterID:    posterID,
+		MilestoneID: milestoneID,
+		Page:        page,
+		IsClosed:    isShowClosed,
+		IsMention:   filterMode == models.FM_MENTION,
+		IsPull:      isPullList,
+		Labels:      selectLabels,
+		SortType:    sortType,
+	})
 	if err != nil {
 		ctx.Handle(500, "Issues: %v", err)
 		return
@@ -188,6 +213,7 @@ func renderAttachmentSettings(ctx *middleware.Context) {
 	ctx.Data["RequireDropzone"] = true
 	ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled
 	ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes
+	ctx.Data["AttachmentMaxSize"] = setting.AttachmentMaxSize
 	ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles
 }
 
@@ -324,7 +350,7 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
 
 	issue := &models.Issue{
 		RepoID:      ctx.Repo.Repository.ID,
-		Index:       int64(repo.NumIssues) + 1,
+		Index:       int64(repo.NumIssues) + int64(repo.NumPulls) + 1,
 		Name:        form.Title,
 		PosterID:    ctx.User.Id,
 		Poster:      ctx.User,
@@ -1096,7 +1122,3 @@ func DeleteMilestone(ctx *middleware.Context) {
 		"redirect": ctx.Repo.RepoLink + "/milestones",
 	})
 }
-
-func PullRequest2(ctx *middleware.Context) {
-	ctx.HTML(200, "repo/pr2/list")
-}

+ 0 - 6
routers/repo/pull.go

@@ -23,7 +23,6 @@ import (
 const (
 	FORK         base.TplName = "repo/pulls/fork"
 	COMPARE_PULL base.TplName = "repo/pulls/compare"
-	PULLS        base.TplName = "repo/pulls"
 	PULL_COMMITS base.TplName = "repo/pulls/commits"
 	PULL_FILES   base.TplName = "repo/pulls/files"
 )
@@ -129,11 +128,6 @@ func ForkPost(ctx *middleware.Context, form auth.CreateRepoForm) {
 	ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + repo.Name)
 }
 
-func Pulls(ctx *middleware.Context) {
-	ctx.Data["IsRepoToolbarPulls"] = true
-	ctx.HTML(200, PULLS)
-}
-
 func checkPullInfo(ctx *middleware.Context) *models.Issue {
 	pull, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
 	if err != nil {

+ 30 - 24
routers/user/home.go

@@ -20,7 +20,6 @@ import (
 
 const (
 	DASHBOARD base.TplName = "user/dashboard/dashboard"
-	PULLS     base.TplName = "user/dashboard/pulls"
 	ISSUES    base.TplName = "user/dashboard/issues"
 	STARS     base.TplName = "user/stars"
 	PROFILE   base.TplName = "user/profile"
@@ -139,23 +138,15 @@ func Dashboard(ctx *middleware.Context) {
 	ctx.HTML(200, DASHBOARD)
 }
 
-func Pulls(ctx *middleware.Context) {
-	ctx.Data["Title"] = ctx.Tr("pull_requests")
-	ctx.Data["PageIsDashboard"] = true
-	ctx.Data["PageIsPulls"] = true
-
-	if err := ctx.User.GetOrganizations(); err != nil {
-		ctx.Handle(500, "GetOrganizations", err)
-		return
-	}
-	ctx.Data["ContextUser"] = ctx.User
-
-	ctx.HTML(200, PULLS)
-}
-
 func Issues(ctx *middleware.Context) {
-	ctx.Data["Title"] = ctx.Tr("issues")
-	ctx.Data["PageIsIssues"] = true
+	isPullList := ctx.Params(":type") == "pulls"
+	if isPullList {
+		ctx.Data["Title"] = ctx.Tr("pull_requests")
+		ctx.Data["PageIsPulls"] = true
+	} else {
+		ctx.Data["Title"] = ctx.Tr("issues")
+		ctx.Data["PageIsIssues"] = true
+	}
 
 	ctxUser := getDashboardContextUser(ctx)
 	if ctx.Written() {
@@ -202,17 +193,24 @@ func Issues(ctx *middleware.Context) {
 	repoIDs := make([]int64, 0, len(repos))
 	showRepos := make([]*models.Repository, 0, len(repos))
 	for _, repo := range repos {
-		if repo.NumIssues == 0 {
+		if (isPullList && repo.NumPulls == 0) ||
+			(!isPullList && repo.NumIssues == 0) {
 			continue
 		}
 
 		repoIDs = append(repoIDs, repo.ID)
-		repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues
-		allCount += repo.NumOpenIssues
+
+		if isPullList {
+			allCount += repo.NumOpenPulls
+			repo.NumOpenIssues = repo.NumOpenPulls
+			repo.NumClosedIssues = repo.NumClosedPulls
+		} else {
+			allCount += repo.NumOpenIssues
+		}
 
 		if filterMode != models.FM_ALL {
 			// Calculate repository issue count with filter mode.
-			numOpen, numClosed := repo.IssueStats(ctxUser.Id, filterMode)
+			numOpen, numClosed := repo.IssueStats(ctxUser.Id, filterMode, isPullList)
 			repo.NumOpenIssues, repo.NumClosedIssues = int(numOpen), int(numClosed)
 		}
 
@@ -224,7 +222,7 @@ func Issues(ctx *middleware.Context) {
 	}
 	ctx.Data["Repos"] = showRepos
 
-	issueStats := models.GetUserIssueStats(repoID, ctxUser.Id, repoIDs, filterMode)
+	issueStats := models.GetUserIssueStats(repoID, ctxUser.Id, repoIDs, filterMode, isPullList)
 	issueStats.AllCount = int64(allCount)
 
 	page := ctx.QueryInt("page")
@@ -241,8 +239,16 @@ func Issues(ctx *middleware.Context) {
 	ctx.Data["Page"] = paginater.New(total, setting.IssuePagingNum, page, 5)
 
 	// Get issues.
-	issues, err := models.Issues(ctxUser.Id, assigneeID, repoID, posterID, 0,
-		repoIDs, page, isShowClosed, false, "", "")
+	issues, err := models.Issues(&models.IssuesOptions{
+		UserID:     ctxUser.Id,
+		AssigneeID: assigneeID,
+		RepoID:     repoID,
+		PosterID:   posterID,
+		RepoIDs:    repoIDs,
+		Page:       page,
+		IsClosed:   isShowClosed,
+		IsPull:     isPullList,
+	})
 	if err != nil {
 		ctx.Handle(500, "Issues: %v", err)
 		return

+ 1 - 1
templates/.VERSION

@@ -1 +1 @@
-0.6.7.0902 Beta
+0.6.8.0902 Beta

+ 1 - 0
templates/base/head.tmpl

@@ -44,6 +44,7 @@
 							{{if .IsSigned}}
 							<a class="item{{if .PageIsDashboard}} active{{end}}" href="{{AppSubUrl}}/">{{.i18n.Tr "dashboard"}}</a>
 							<a class="item{{if .PageIsIssues}} active{{end}}" href="{{AppSubUrl}}/issues">{{.i18n.Tr "issues"}}</a>
+							<a class="item{{if .PageIsPulls}} active{{end}}" href="{{AppSubUrl}}/pulls">{{.i18n.Tr "pull_requests"}}</a>
 							{{else}}
 							<a class="item{{if .PageIsHome}} active{{end}}" href="{{AppSubUrl}}/">{{.i18n.Tr "home"}}</a>
 							{{end}}

+ 1 - 1
templates/repo/issue/comment_tab.tmpl

@@ -12,5 +12,5 @@
 </div>
 {{if .IsAttachmentEnabled}}
 <div class="attachments"></div>
-<div class="ui basic button dropzone" id="dropzone" data-upload-url="{{AppSubUrl}}/issues/attachments" data-accepts="{{.AttachmentAllowedTypes}}" data-max-file="{{.AttachmentMaxFiles}}" data-max-size="2" data-default-message="{{.i18n.Tr "dropzone.default_message"}}" data-invalid-input-type="{{.i18n.Tr "dropzone.invalid_input_type"}}" data-file-too-big="{{.i18n.Tr "dropzone.file_too_big"}}" data-remove-file="{{.i18n.Tr "dropzone.remove_file"}}"></div>
+<div class="ui basic button dropzone" id="dropzone" data-upload-url="{{AppSubUrl}}/issues/attachments" data-accepts="{{.AttachmentAllowedTypes}}" data-max-file="{{.AttachmentMaxFiles}}" data-max-size="{{.AttachmentMaxSize}}" data-default-message="{{.i18n.Tr "dropzone.default_message"}}" data-invalid-input-type="{{.i18n.Tr "dropzone.invalid_input_type"}}" data-file-too-big="{{.i18n.Tr "dropzone.file_too_big"}}" data-remove-file="{{.i18n.Tr "dropzone.remove_file"}}"></div>
 {{end}}

+ 22 - 22
templates/repo/issue/list.tmpl

@@ -5,16 +5,16 @@
 		<div class="navbar">
 			{{template "repo/issue/navbar" .}}
 			<div class="ui right">
-				<a class="ui green button" href="{{$.RepoLink}}/issues/new">{{.i18n.Tr "repo.issues.new"}}</a>
+				<a class="ui green button" href="{{.RepoLink}}/issues/new">{{.i18n.Tr "repo.issues.new"}}</a>
 			</div>
 		</div>
 		<div class="ui divider"></div>
 		<div class="ui tiny buttons">
-		  <a class="ui green basic button {{if not .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/issues?type={{$.ViewType}}&sort={{$.SortType}}&state=open&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&assignee={{.AssigneeID}}">
+		  <a class="ui green basic button {{if not .IsShowClosed}}active{{end}}" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state=open&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&assignee={{.AssigneeID}}">
 		  	<i class="octicon octicon-issue-opened"></i>
 		  	{{.i18n.Tr "repo.issues.open_tab" .IssueStats.OpenCount}}
 		  </a>
-		  <a class="ui red basic button {{if .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/issues?type={{.ViewType}}&sort={{$.SortType}}&state=closed&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&assignee={{.AssigneeID}}">
+		  <a class="ui red basic button {{if .IsShowClosed}}active{{end}}" href="{{$.Link}}?type={{.ViewType}}&sort={{$.SortType}}&state=closed&labels={{.SelectLabels}}&milestone={{.MilestoneID}}&assignee={{.AssigneeID}}">
 		  	<i class="octicon octicon-issue-closed"></i>
 		  	{{.i18n.Tr "repo.issues.close_tab" .IssueStats.ClosedCount}}
 		  </a>
@@ -27,9 +27,9 @@
 					<i class="dropdown icon"></i>
 				</span>
         <div class="menu">
-        	<a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_label_no_select"}}</a>
+        	<a class="item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_label_no_select"}}</a>
         	{{range .Labels}}
-        	<a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}"><span class="octicon {{if eq $.SelectLabels .ID}}octicon-check{{end}}"></span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name}}</a>
+        	<a class="item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}"><span class="octicon {{if eq $.SelectLabels .ID}}octicon-check{{end}}"></span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name}}</a>
           {{end}}
 				</div>
 			</div>
@@ -41,9 +41,9 @@
 					<i class="dropdown icon"></i>
 				</span>
         <div class="menu">
-        	<a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_milestone_no_select"}}</a>
+        	<a class="item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_milestone_no_select"}}</a>
         	{{range .Milestones}}
-        	<a class="{{if eq $.MilestoneID .ID}}active selected{{end}} item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.ID}}&assignee={{$.AssigneeID}}">{{.Name}}</a>
+        	<a class="{{if eq $.MilestoneID .ID}}active selected{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.ID}}&assignee={{$.AssigneeID}}">{{.Name}}</a>
           {{end}}
 				</div>
 			</div>
@@ -55,9 +55,9 @@
 					<i class="dropdown icon"></i>
 				</span>
         <div class="menu">
-        	<a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_assginee_no_select"}}</a>
+        	<a class="item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_assginee_no_select"}}</a>
         	{{range .Assignees}}
-        	<a class="{{if eq $.AssigneeID .Id}}active selected{{end}} item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{.Id}}"><img src="{{.AvatarLink}}"> {{.Name}}</a>
+        	<a class="{{if eq $.AssigneeID .Id}}active selected{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{.Id}}"><img src="{{.AvatarLink}}"> {{.Name}}</a>
           {{end}}
 				</div>
 			</div>
@@ -69,10 +69,10 @@
 					<i class="dropdown icon"></i>
 				</span>
         <div class="menu">
-        	<a class="{{if eq .ViewType "all"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=all&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.all_issues"}}</a>
-        	<a class="{{if eq .ViewType "assigned"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=assigned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_type.assigned_to_you"}}</a>
-        	<a class="{{if eq .ViewType "created_by"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=created_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.created_by_you"}}</a>
-        	<a class="{{if eq .ViewType "mentioned"}}active{{end}} item" href="{{$.RepoLink}}/issues?type=mentioned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.mentioning_you"}}</a>
+        	<a class="{{if eq .ViewType "all"}}active{{end}} item" href="{{$.Link}}?type=all&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.all_issues"}}</a>
+        	<a class="{{if eq .ViewType "assigned"}}active{{end}} item" href="{{$.Link}}?type=assigned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_type.assigned_to_you"}}</a>
+        	<a class="{{if eq .ViewType "created_by"}}active{{end}} item" href="{{$.Link}}?type=created_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.created_by_you"}}</a>
+        	<a class="{{if eq .ViewType "mentioned"}}active{{end}} item" href="{{$.Link}}?type=mentioned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_type.mentioning_you"}}</a>
 				</div>
 			</div>
 
@@ -83,12 +83,12 @@
 					<i class="dropdown icon"></i>
 				</span>
         <div class="menu">
-        	<a class="{{if or (eq .SortType "latest") (not .SortType)}}active{{end}} item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort=latest&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.latest"}}</a>
-        	<a class="{{if eq .SortType "oldest"}}active{{end}} item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort=oldest&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.oldest"}}</a>
-        	<a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort=recentupdate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a>
-        	<a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort=leastupdate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a>
-        	<a class="{{if eq .SortType "mostcomment"}}active{{end}} item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort=mostcomment&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.mostcomment"}}</a>
-        	<a class="{{if eq .SortType "leastcomment"}}active{{end}} item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&sort=leastcomment&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.leastcomment"}}</a>
+        	<a class="{{if or (eq .SortType "latest") (not .SortType)}}active{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort=latest&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.latest"}}</a>
+        	<a class="{{if eq .SortType "oldest"}}active{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort=oldest&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.oldest"}}</a>
+        	<a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort=recentupdate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a>
+        	<a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort=leastupdate&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a>
+        	<a class="{{if eq .SortType "mostcomment"}}active{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort=mostcomment&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.mostcomment"}}</a>
+        	<a class="{{if eq .SortType "leastcomment"}}active{{end}} item" href="{{$.Link}}?type={{$.ViewType}}&sort=leastcomment&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}">{{.i18n.Tr "repo.issues.filter_sort.leastcomment"}}</a>
 				</div>
 			</div>
 		</div>
@@ -98,10 +98,10 @@
 			{{ $timeStr:= TimeSince .Created $.Lang }}
       <li class="item">
       	<div class="ui {{if .IsRead}}black{{else}}green{{end}} label">#{{.Index}}</div>
-      	<a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Name}}</a>
+      	<a class="title" href="{{$.Link}}/{{.Index}}">{{.Name}}</a>
 
       	{{range .Labels}}
-				<a class="ui label" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}" style="background-color: {{.Color}}">{{.Name}}</a>
+				<a class="ui label" href="{{$.Link}}?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}" style="background-color: {{.Color}}">{{.Name}}</a>
       	{{end}}
 
       	{{if .NumComments}}
@@ -111,7 +111,7 @@
         <p class="desc">
         	{{$.i18n.Tr "repo.issues.opened_by" $timeStr .Poster.HomeLink .Poster.Name | Safe}}
 	        {{if .Milestone}}
-					<a class="milestone" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.Milestone.ID}}&assignee={{$.AssigneeID}}">
+					<a class="milestone" href="{{$.Link}}?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{.Milestone.ID}}&assignee={{$.AssigneeID}}">
 						<span class="octicon octicon-milestone"></span> {{.Milestone.Name}}
 					</a>
 	        {{end}}

+ 1 - 0
templates/repo/issue/navbar.tmpl

@@ -1,5 +1,6 @@
 <div class="ui compact small menu">
   <a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues">{{.i18n.Tr "repo.issues"}}</a>
+  <a class="{{if .PageIsPullList}}active{{end}} item" href="{{.RepoLink}}/pulls">{{.i18n.Tr "repo.pulls"}}</a>
   <a class="{{if .PageIsLabels}}active{{end}} item" href="{{.RepoLink}}/labels">{{.i18n.Tr "repo.labels"}}</a>
   <a class="{{if .PageIsMilestones}}active{{end}} item" href="{{.RepoLink}}/milestones">{{.i18n.Tr "repo.milestones"}}</a>
 </div>

+ 1 - 1
templates/repo/issue/view_content.tmpl

@@ -149,7 +149,7 @@
 		    		{{else if .IsPullReuqestBroken}}
 		    		<div class="item text red">
 		    			<span class="octicon octicon-x"></span>
-		    			{{$.i18n.Tr "repo.pulls.data_borken"}}
+		    			{{$.i18n.Tr "repo.pulls.data_broken"}}
 		    		</div>
 		    		{{else if .Issue.CanAutoMerge}}
 			    		<div class="item text green">

+ 0 - 48
templates/repo/pr2/list.tmpl

@@ -1,48 +0,0 @@
-{{template "ng/base/head" .}}
-{{template "ng/base/header" .}}
-<div id="repo-wrapper">
-    {{template "repo/header_old" .}}
-    <div class="issue-main container repo-wide-wrapper">
-        <ul id="issue-list-nav" class="menu menu-line">
-            <li><a href="#">Issue</a></li>
-            <li class="current"><a href="#">Pull Request</a></li>
-            <li><a href="#">Labels</a></li>
-            <li><a href="#">Milestones</a></li>
-            <li class="right" id="issue-new"><a href="#"><button id="issue-new-btn" class="btn btn-green text-bold">New Pull Request</button></a></li>
-            <li class="right"><a href="#">Filter</a></li>
-        </ul>
-        <div id="issue-list-container">
-            <div id="issue-list-menu">
-                <div class="left">
-                    <span class="mark open hover"><a href="#">
-                        <i class="octicon octicon-git-pull-request"></i> 88 Open
-                    </a></span>
-                    <span class="mark close"><a href="">
-                        <i class="octicon octicon-issue-closed"></i> 12 Close
-                    </a></span>
-                </div>
-                <div class="clear"></div>
-            </div>
-            <ul id="pull-list" class="list-no-style">
-                <li class="item" id="pr-id">
-                    <a class="comment" href="#">
-                        <i class="octicon octicon-comment"></i> 7
-                    </a>
-                    <p class="title text-bold">
-                        <i class="octicon octicon-git-pull-request"></i>
-                        <a href="#" class="title-text">Delete account text and/or translations missing</a>
-                    </p>
-                    <p class="desc">opened 7 days ago by <a href="#">marcuspoehls</a></p>
-                </li>
-            </ul>
-            <div id="issue-list-pager" class="pager text-center">
-                <a class="prev invalid" href="#">Prev</a>
-                <a class="page" href="#">1</a>
-                <a class="page hover" href="#">2</a>
-                <a class="page" href="#">3</a>
-                <a class="next" href="#">Next</a>
-            </div>
-        </div>
-    </div>
-</div>
-{{template "ng/base/footer" .}}

+ 3 - 3
templates/repo/sidebar.tmpl

@@ -3,9 +3,9 @@
         <li>
             <a class="radius" href="{{.RepoLink}}/issues"><i class="octicon octicon-issue-opened"></i>{{.i18n.Tr "repo.issues"}}<span class="num right label label-blue label-radius">{{.Repository.NumOpenIssues}}</span></a>
         </li>
-        <!-- <li>
-            <a class="radius" href="{{.RepoLink}}/pulls"><i class="octicon octicon-git-pull-request"></i>Pull Requests<span class="num right label label-blue label-radius">{{.Repository.NumOpenPulls}}</span></a>
-        </li> -->
+        <li>
+            <a class="radius" href="{{.RepoLink}}/pulls"><i class="octicon octicon-git-pull-request"></i>{{.i18n.Tr "repo.pulls"}}<span class="num right label label-blue label-radius">{{.Repository.NumOpenPulls}}</span></a>
+        </li>
         <li class="border-bottom"></li>
         <li class="head">{{if .IsViewBranch}}{{.BranchName}}{{else}}{{ShortSha .BranchName}}{{end}}</li>
         <li>

+ 5 - 0
templates/user/dashboard/feeds.tmpl

@@ -25,6 +25,9 @@
             {{else if eq .GetOpType 10}}
             {{ $index := index .GetIssueInfos 0}}
             {{$.i18n.Tr "action.comment_issue" .GetRepoLink $index .GetRepoPath | Str2html}}
+            {{else if eq .GetOpType 11}}
+            {{ $index := index .GetIssueInfos 0}}
+            {{$.i18n.Tr "action.merge_pull_request" .GetRepoLink $index .GetRepoPath | Str2html}}
             {{end}}
         </p>
         {{if eq .GetOpType 5}}
@@ -46,6 +49,8 @@
         <p class="news-content comment-news">{{index .GetIssueInfos 1}}</p>
         {{else if eq .GetOpType 10}}
         <p class="news-content comment-news">{{index .GetIssueInfos 1}}</p>
+        {{else if eq .GetOpType 11}}
+        <p class="news-content comment-news">{{index .GetIssueInfos 1}}</p>
         {{end}}
         <p class="news-time text-italic">{{TimeSince .GetCreate $.i18n.Lang}}</p>
     </div>

+ 1 - 1
templates/user/dashboard/issues.tmpl

@@ -21,7 +21,7 @@
   				{{end}}
   				<div class="ui divider"></div>
           {{range .Repos}}
-          <a class="{{if eq $.RepoID .ID}}active{{end}} item" href="{{$.Link}}?type={{$.ViewType}}{{if not (eq $.RepoID .ID)}}&repo={{.ID}}{{end}}&state={{$.State}}">{{$.SignedUser.Name}}/{{.Name}} <strong class="ui right">{{if $.IsShowClosed}}{{.NumClosedIssues}}{{else}}{{.NumOpenIssues}}{{end}}</strong></a>
+          <a class="{{if eq $.RepoID .ID}}active{{end}} item" href="{{$.Link}}?type={{$.ViewType}}{{if not (eq $.RepoID .ID)}}&repo={{.ID}}{{end}}&state={{$.State}}">{{$.ContextUser.Name}}/{{.Name}} <strong class="ui right">{{if $.IsShowClosed}}{{.NumClosedIssues}}{{else}}{{.NumOpenIssues}}{{end}}</strong></a>
           {{end}}
   			</div>
   		</div>

+ 3 - 0
templates/user/dashboard/navbar.tmpl

@@ -36,6 +36,9 @@
       <a class="{{if .PageIsIssues}}active{{end}} item" href="{{AppSubUrl}}/org/{{.ContextUser.Name}}/issues">
         <i class="octicon octicon-issue-opened"></i>&nbsp;{{.i18n.Tr "issues"}}
       </a>
+      <a class="{{if .PageIsPulls}}active{{end}} item" href="{{AppSubUrl}}/org/{{.ContextUser.Name}}/pulls">
+        <i class="octicon octicon-git-pull-request"></i>&nbsp;{{.i18n.Tr "pull_requests"}}
+      </a>
       <div class="right menu">
         <div class="item">
           <a class="ui blue basic button" href="{{AppSubUrl}}/org/{{.ContextUser.Name}}">

+ 0 - 5
templates/user/dashboard/pulls.tmpl

@@ -1,5 +0,0 @@
-{{template "ng/base/head" .}}
-{{template "ng/base/header" .}}
-{{template "user/dashboard/nav" .}}
-
-{{template "ng/base/footer" .}}

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů