From c3ba5590c98a32c149c4dfa97bbfed65135d4f3e Mon Sep 17 00:00:00 2001 From: Unknwon <u@gogs.io> Date: Sun, 25 Oct 2015 03:10:22 -0400 Subject: [PATCH] Reopen PR need retest patch --- README.md | 6 +- README_ZH.md | 6 +- conf/locale/locale_lv-LV.ini | 133 ++++++++++++++++++----------------- conf/locale/locale_pt-BR.ini | 3 +- gogs.go | 2 +- models/issue.go | 18 ++--- models/pull.go | 109 +++++++++++++++------------- routers/repo/issue.go | 22 ++++++ routers/repo/pull.go | 5 +- templates/.VERSION | 2 +- 10 files changed, 171 insertions(+), 135 deletions(-) diff --git a/README.md b/README.md index 8e4cc83312..9d61d852db 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ The goal of this project is to make the easiest, fastest, and most painless way ## Installation -Make sure you install the [prerequisites](http://gogs.io/docs/installation/) first. +Make sure you install the [prerequisites](http://gogs.io/docs/installation) first. There are 5 ways to install Gogs: @@ -108,8 +108,8 @@ There are 5 ways to install Gogs: ## Acknowledgments -- Router and middleware mechanism of [Macaron](https://github.com/Unknwon/macaron). -- Mail Service, modules design is inspired by [WeTalk](https://github.com/beego/wetalk). +- Router and middleware mechanism of [Macaron](https://github.com/go-macaron/macaron). +- Modules design is inspired by [WeTalk](https://github.com/beego/wetalk). - System Monitor Status is inspired by [GoBlog](https://github.com/fuxiaohei/goblog). - Thanks [lavachen](http://www.lavachen.cn/) and [Rocker](http://weibo.com/rocker1989) for designing Logo. - Thanks [Crowdin](https://crowdin.com/project/gogs) for providing open source translation plan. diff --git a/README_ZH.md b/README_ZH.md index 471cc79aa6..a11627a057 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -44,7 +44,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自 ## 安装部署 -在安装 Gogs 之前,您需要先安装 [基本环境](http://gogs.io/docs/installation/)。 +在安装 Gogs 之前,您需要先安装 [基本环境](http://gogs.io/docs/installation)。 然后,您可以通过以下 5 种方式来安装 Gogs: @@ -56,8 +56,8 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自 ## 特别鸣谢 -- 基于 [Macaron](https://github.com/Unknwon/macaron) 的路由与中间件机制。 -- 基于 [WeTalk](https://github.com/beego/wetalk) 修改的邮件服务和模块设计。 +- 基于 [Macaron](https://github.com/go-macaron/macaron) 的路由与中间件机制。 +- 基于 [WeTalk](https://github.com/beego/wetalk) 修改的模块设计。 - 基于 [GoBlog](https://github.com/fuxiaohei/goblog) 修改的系统监视状态。 - 感谢 [lavachen](http://www.lavachen.cn/) 和 [Rocker](http://weibo.com/rocker1989) 设计的 Logo。 - 感谢 [Crowdin](https://crowdin.com/project/gogs) 提供免费的开源项目本地化支持。 diff --git a/conf/locale/locale_lv-LV.ini b/conf/locale/locale_lv-LV.ini index 7e167d0bfb..1f8cd7b5ff 100755 --- a/conf/locale/locale_lv-LV.ini +++ b/conf/locale/locale_lv-LV.ini @@ -444,14 +444,14 @@ issues.filter_sort.recentupdate=Nesen atjaunotās issues.filter_sort.leastupdate=Vissenāk atjaunotās issues.filter_sort.mostcomment=Visvairāk komentētās issues.filter_sort.leastcomment=Vismazāk komentētās -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.opened_by=<a href="%[2]s">%[3]s</a> atvēra %[1]s +issues.opened_by_fake=%[2]s atvēra %[1]s issues.previous=Iepriekšējā issues.next=Nākamā issues.open_title=Atvērta issues.closed_title=Slēgta issues.num_comments=%d komentāri -issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>` +issues.commented_at=`komentēja <a id="%[1]s" href="#%[1]s">%[2]s</a>` issues.no_content=Vēl nav satura. issues.close_issue=Aizvērt issues.close_comment_issue=Komentēt un aizvērt @@ -489,44 +489,45 @@ pulls.no_results=Nekas netika atrasts. pulls.nothing_to_compare=Nav ko salīdzināt, jo bāzes un salīdzināmie atzari ir vienādi. pulls.has_pull_request=`Jau eksistē izmaiņu pieprasījums starp šiem diviem atzariem: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>` pulls.create=Izveidot izmaiņu pieprasījumu -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.title_desc=vēlas sapludināt %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code> +pulls.merged_title_desc=sapludināja %[1]d revīzijas no <code>%[2]s</code> uz <code>%[3]s</code> %[4]s pulls.tab_conversation=Saruna pulls.tab_commits=Revīzijas pulls.tab_files=Izmainītie faili pulls.reopen_to_merge=Lūdzu, atkārtoti atveriet šo izmaiņu pieprasījumu, lai veiktu sapludināšanu. pulls.merged=Sapludināts pulls.has_merged=Šo izmaiņu pieprasījums tika veiksmīgi sapludināts! -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.data_broken=Nepieejami izmaiņu pieprasījuma dati, jo dzēsta informācija no atdalītā repozitorija. +pulls.is_checking=Notiek konfliktu pārbaude, mirkli uzgaidiet un atjaunojiet lapu. +pulls.can_auto_merge_desc=Ir iespējams veikt automātisko sapludināšanas darbību šim izmaiņu pieprasījumam. +pulls.cannot_auto_merge_desc=Nav iespējams veikt automātisko sapludināšanas darbību, jo starp revīzijām ir konflikti. pulls.cannot_auto_merge_helper=Lūdzu, izmantojiet komandrindas rīku, lai to atrisinātu. pulls.merge_pull_request=Izmaiņu pieprasījuma sapludināšana -pulls.open_unmerged_pull_exists=`You can't perform reopen operation because there is already an open pull request (#%d) from same repository with same merge information and is waiting for merging.` +pulls.open_unmerged_pull_exists=`Jūs nevarat veikt atkārtotas atvēršanas darbību, jo jau eksistē izmaiņu pieprasījums (#%d) no šī repozitorija ar tādu pašu sapludināšanas informāciju un gaida sapludināšanu.` -milestones.new=New Milestone +milestones.new=Jauns atskaites punkts milestones.open_tab=%d atvērti milestones.close_tab=%d aizvērti milestones.closed=Aizvērts %s -milestones.no_due_date=No due date +milestones.no_due_date=Bez termiņa milestones.open=Atvērt milestones.close=Aizvērt milestones.new_subheader=Izveidojiet atskaites punktus, lai organizētu problēmas. milestones.create=Izveidot atskaites punktu milestones.title=Virsraksts milestones.desc=Apraksts -milestones.due_date=Due Date (optional) +milestones.due_date=Termiņš (neobligāts) milestones.clear=Notīrīt -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 -milestones.edit_subheader=Use better description for milestones so people won't be confused. +milestones.invalid_due_date_format=Termiņa datuma formāts ir nekorekts, jābūt formātā 'gggg-mm-dd'. +milestones.create_success=Atskaites punkts '%s' tika veiksmīgi izveidots! +milestones.edit=Labot atskaites punktu +milestones.edit_subheader=Izmantojiet pēc iespējas labāku aprakstu atskaites punktiem, lai citiem tas būtu saprotamāks. milestones.cancel=Atcelt -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.modify=Mainīt atskaites punktu +milestones.edit_success=Izmaiņas atskaites punktā '%s' tika veiksmīgi saglabātas! +milestones.deletion=Atskaites punkta dzēšana +milestones.deletion_desc=Dzēšot šo atskaites punktu tiks noņemta arī saistītā informācija no problēmu ziņojumiem. Vai vēlaties turpināt? +milestones.deletion_success=Atskaites punkts tika veiksmīgi izdzēsts! settings=Iestatījumi settings.options=Opcijas @@ -537,20 +538,20 @@ settings.basic_settings=Pamatiestatījumi settings.danger_zone=Bīstamā zona settings.site=Oficiālā mājas lapa settings.update_settings=Mainīt iestatījumus -settings.change_reponame_prompt=This change will affect how links relate to the repository. +settings.change_reponame_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo repozitoriju. settings.transfer=Mainīt īpašnieku settings.transfer_desc=Mainīt šī repozitorija īpašnieku uz citu lietotāju vai organizāciju, kurai Jums ir administratora tiesībs. settings.new_owner_has_same_repo=Jaunajam īpašniekam jau ir repozitorijs ar šādu nosaukumu. settings.delete=Dzēst šo repozitoriju settings.delete_desc=Dzēšot repozitoriju, tā datus vairs nebūs iespējams atgūt. Pirms dzēšanas pārliecinieites vai patiešām vēlaties to darīt. -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.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.transfer_notices_1=- Jūs pazaudēsiet piekļuvi, ja jaunais īpašnieks ir lietotājs. +settings.transfer_notices_2=- Jūs saglabāsiet piekļuvi, ja jaunais īpašnieks ir organizācija un Jūs esat viens no tās īpašniekiem. +settings.transfer_form_title=Lūdzu, ievadiet sekojošu informāciju, lai apstiprinātu šo darbību: +settings.delete_notices_1=- Šī darbība ir <strong>NEATGRIEZENISKA</strong>. +settings.delete_notices_2=- Šī darbība neatgriezeniski izdzēsīs visus šī repozitorija datus, tai skaitā Git datus, problēmu ziņojumus, komentārus un definētās piekļuves tiesības. +settings.delete_notices_fork_1=- Ja repozitorijs ir publisks, visi atdalītie repozitoriji kļūs neatkarīgi. +settings.delete_notices_fork_2=- Ja repozitorijs ir privāts, tiks dzēsti arī visi atdalītie repozitoriji. +settings.delete_notices_fork_3=- Ja vēlaties saglabāt atdalīts repozitorijus pēc dzēšanas, sākumā nomainiet repozitorija redzamību uz publisku. settings.update_settings_success=Repozitorija opcijas ir veiksmīgi saglabātas. settings.transfer_owner=Jaunais īpašnieks settings.make_transfer=Mainīt @@ -562,9 +563,9 @@ settings.remove_collaborator_success=Līdzstrādnieks tika noņemts. settings.user_is_org_member=Lietotājs ir organizācijas biedrs, kas nevar tikt pievienots kā līdzstrādnieks. settings.add_webhook=Pievienot tīmekļa āķi settings.hooks_desc=Tīmekļa āķi ļauj paziņot ārējiem servisiem par noteiktiem notikomiem, kas notiek Git servisā. Kad iestāsies kāds notikums, katram ārējā servisa URL tiks nosūtīts POST pieprasījums. Lai uzzinātu sīkāk skatieties <a target="_blank" href="%s">Tīmekļa āķu rokasgrāmatā</a>. -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_deletion=Dzēst tīmekļa āķi +settings.webhook_deletion_desc=Dzēšot tīmekļa āķi tiks dzēsta visa ar to saistītā informācija un izpildes vēsture. Vai vēlaties turpināt? +settings.webhook_deletion_success=Tīmekļa āķis tika veiksmīgi izdzēsts! settings.webhook.request=Pieprasījums settings.webhook.response=Atbilde settings.webhook.headers=Galvenes @@ -587,9 +588,9 @@ settings.event_push_only=Tikai izmaiņu nosūtīšanas notikumiem. settings.event_send_everything=Vēlos saņemt <strong>visu</strong>. settings.event_choose=Atzīmēt, ko vēlos saņemt. settings.event_create=Izveidot -settings.event_create_desc=Branch, or tag created -settings.event_push=Push -settings.event_push_desc=Git push to a repository +settings.event_create_desc=Atzara vai taga izveidošana +settings.event_push=Izmaiņu nosūtīšana +settings.event_push_desc=Git izmaiņu nosūtīšana uz repozitoriju settings.active=Aktīvs settings.active_helper=Tiks nosūtīti notikuma dati, kad nostrādās šis āķis. settings.add_hook_success=Jauns tīmekļa āķis tika veiksmīgi pievienots. @@ -604,15 +605,15 @@ settings.slack_domain=Domēns settings.slack_channel=Kanāls settings.deploy_keys=Izvietot atslēgas settings.add_deploy_key=Pievienot izvietošanas atslēgu -settings.no_deploy_keys=You haven't added any deploy key. +settings.no_deploy_keys=Nav pievienota neviena izvietošanas atslēga. settings.title=Virsraksts settings.deploy_key_content=Saturs -settings.key_been_used=Deploy key content has been used. -settings.key_name_used=Deploy key with same name has already existed. -settings.add_key_success=New deploy key '%s' has been added successfully! +settings.key_been_used=Šāda izvietošanas atslēga jau eksistē. +settings.key_name_used=Izvietošanas atslēga ar šādu nosaukumu jau eksistē. +settings.add_key_success=Izvietošanas atslēga '%s' tik veiksmīgi pievienota! settings.deploy_key_deletion=Dzēst izvietošanas atslēgu -settings.deploy_key_deletion_desc=Delete this deploy key will remove all related accesses for this repository. Do you want to continue? -settings.deploy_key_deletion_success=Deploy key has been deleted successfully! +settings.deploy_key_deletion_desc=Dzēšot šo izvietošanas atslēgu tiks noņemta arī ar to saistītā piekļuve šim repozitorijam. Vai vēlaties turpināt? +settings.deploy_key_deletion_success=Izvietošanas atslēga tika veiksmīgi izdzēsta! diff.browse_source=Pārlūkot izejas kodu diff.parent=vecāks @@ -665,8 +666,8 @@ team_name_helper=Šo nosaukumu varēs izmantot, lai pieminētu komandu sarunās. team_desc_helper=Komandas apraksts team_permission_desc=Kādām tiesībām šai komandai būtu jābūt? -form.name_reserved=Organization name '%s' is reserved. -form.name_pattern_not_allowed=Organization name pattern '%s' is not allowed. +form.name_reserved=Organizācijas nosaukums '%s' ir rezervēts. +form.name_pattern_not_allowed=Organizācijas nosaukums '%s' nav atļauts. settings=Iestatījumi settings.options=Opcijas @@ -675,8 +676,8 @@ settings.website=Mājas lapa settings.location=Atrašanās vieta settings.update_settings=Mainīt iestatījumus settings.update_setting_success=Organizācijas iestatījumi tika veiksmīgi saglabāti. -settings.change_orgname_prompt=This change will affect how links relate to the organization. -settings.update_avatar_success=Organization avatar setting has been updated successfully. +settings.change_orgname_prompt=Šī izmaiņa ietekmēs saites, kas ir saistītas ar šo organizāciju. +settings.update_avatar_success=Organizācijas avatara iestatījumi tika veiksmīgi saglabāti. settings.delete=Dzēst organizāciju settings.delete_account=Dzēst šo organizāciju settings.delete_prompt=Šī darbība pilnībā dzēsīs šo organizāciju, kā arī tā ir <strong>NEATGRIEZENISKA</strong>! @@ -732,8 +733,8 @@ authentication=Autentifikācijas config=Konfigurācija notices=Sistēmas paziņojumi monitor=Uzraudzība -first_page=First -last_page=Last +first_page=Pirmā +last_page=Pēdējā total=Kopā: %d dashboard.statistic=Statistika @@ -793,13 +794,13 @@ users.activated=Aktivizēts users.admin=Administrators users.repos=Repozitoriji users.created=Izveidots -users.send_register_notify=Send Registration Notification To User -users.new_success=New account '%s' has been created successfully. +users.send_register_notify=Nosūtīt lietotājam reģistrācijas paziņojumu +users.new_success=Jauns konts '%s' tika veiksmīgi izveidots. users.edit=Labot -users.auth_source=Authentication Source +users.auth_source=Autentificēšanas avots users.local=Iebūvētā -users.auth_login_name=Authentication Login Name -users.password_helper=Leave it empty to remain unchanged. +users.auth_login_name=Autentifikācijas pieteikšanās vārds +users.password_helper=Atstājiet tukšu, ja nevēlaties mainīt. users.update_profile_success=Konta profils tika veiksmīgi saglabāts. users.edit_account=Labot kontu users.is_activated=Konts ir aktivizēts @@ -809,7 +810,7 @@ users.update_profile=Mainīt konta profilu users.delete_account=Dzēst šo kontu users.still_own_repo=Šis konts ir vismaz viena repozitorija īpašnieks, tos sākumā ir nepieciešams izdzēst vai nomainīt to īpašnieku. users.still_has_org=Šis konts ir vismaz vienas organizācijas biedrs, sākumā nepieciešams pamest vai izdzēst šo organizāciju. -users.deletion_success=Account has been deleted successfully! +users.deletion_success=Konts tika veiksmīgi izdzēsts! orgs.org_manage_panel=Organizāciju pārvaldības panelis orgs.name=Nosaukums @@ -824,8 +825,8 @@ repos.watches=Vērošana repos.stars=Atzīmētās zvaigznītes repos.issues=Problēmas -auths.auth_manage_panel=Authentication Manage Panel -auths.new=Add New Source +auths.auth_manage_panel=Autentifikācijas pārvaldības panelis +auths.new=Pievienot jaunu avotu auths.name=Nosaukums auths.type=Veids auths.enabled=Iespējota @@ -850,17 +851,17 @@ auths.smtp_auth=SMTP autentifikācijas tips auths.smtphost=SMTP resursdators auths.smtpport=SMTP ports auths.allowed_domains=Atļautie domēni -auths.allowed_domains_helper=Leave it empty to not restrict any domains. Multiple domains should be separated by comma ','. +auths.allowed_domains_helper=Atstājiet tukšu, ja nevēlaties ierobežot domēnu vārdus. Domēna vārdus nepieciešams atdalīt ar komatu ','. auths.enable_tls=Iespējot TLS šifrēšanu auths.skip_tls_verify=Izlaist TLS verifikāciju auths.pam_service_name=PAM servisa nosaukums auths.enable_auto_register=Iespējot automātisko reģistrāciju auths.tips=Padomi -auths.edit=Edit Authentication Setting +auths.edit=Labot autentifikācijas iestatījumus auths.activated=Autentifikācija ir aktivizēta -auths.new_success=New authentication '%s' has been added successfully. -auths.update_success=Authentication setting has been updated successfully. -auths.update=Update Authentication Setting +auths.new_success=Jauna autentifikācija '%s' tika veiksmīgi pievienota. +auths.update_success=Autentifikācijas iestatījumi tika veiksmīgi saglabāti. +auths.update=Mainīt autentifikācijas iestatījumus auths.delete=Dzēst šo autentifikāciju auths.delete_auth_title=Autentifikācijas dzēšana auths.delete_auth_desc=Šī autentifikācija tiks dzēsta, vai vēlaties turpināt? @@ -896,8 +897,8 @@ config.show_registration_button=Rādīt reģistrēšanās pogu config.require_sign_in_view=Nepieciešama autorizācija config.enable_cache_avatar=Glabāt profila attēlus kešatmiņā config.mail_notify=Pasta paziņojumi -config.disable_key_size_check=Disable Minimum Key Size Check -config.enable_captcha=Enable Captcha +config.disable_key_size_check=Atspējot atslēgas minimālā garuma pārbaudi +config.enable_captcha=Iespējot drošības kodu config.active_code_lives=Aktīvā koda ilgums config.reset_password_code_lives=Paroles atiestatīšanas koda ilgums config.webhook_config=Tīkla āķu konfigurācija @@ -951,12 +952,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> +rename_repo=pārsauca repozitoriju no <code>%[1]s</code> uz <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>` +create_pull_request=`izveidoja izmaiņu pieprasījumu <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>` +merge_pull_request=`sapludināja izmaiņu pieprasījumu <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 diff --git a/conf/locale/locale_pt-BR.ini b/conf/locale/locale_pt-BR.ini index ba82fc74d5..a34ef731b9 100755 --- a/conf/locale/locale_pt-BR.ini +++ b/conf/locale/locale_pt-BR.ini @@ -444,7 +444,7 @@ issues.filter_sort.recentupdate=Mais recentemente atualizados issues.filter_sort.leastupdate=Menos recentemente atualizados issues.filter_sort.mostcomment=Mais comentados issues.filter_sort.leastcomment=Menos comentados -issues.opened_by=%[1]s foi aberto por <a href="/%[2]s">%[3]s</a> +issues.opened_by=%[1]s foi aberto por <a href="%[2]s">%[3]s</a> issues.opened_by_fake=aberto %[1]s por %[2]s issues.previous=Página anterior issues.next=Próxima página @@ -498,6 +498,7 @@ pulls.reopen_to_merge=Por favor reabra esse pull request para executar a operaç pulls.merged=Merge realizado pulls.has_merged=Este pull request foi mesclado com sucesso! pulls.data_broken=Dados deste pull request foram quebrados devido à deleção de informação do fork. +pulls.is_checking=The conflict checking is still in progress, please refresh page in few moments. pulls.can_auto_merge_desc=Você pode realizar uma auto-mescla neste pull request. pulls.cannot_auto_merge_desc=Você não pode realizar uma auto-mescla porque há conflitos entre os commits. pulls.cannot_auto_merge_helper=Por favor, utilize linha de comando para solucionar isto. diff --git a/gogs.go b/gogs.go index 705b360856..039c5d4cb0 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.6.17.1024 Beta" +const APP_VER = "0.6.17.1025 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/issue.go b/models/issue.go index 1cefa42f5a..077e945c37 100644 --- a/models/issue.go +++ b/models/issue.go @@ -92,15 +92,6 @@ func (i *Issue) AfterSet(colName string, _ xorm.Cell) { if err != nil { log.Error(3, "GetUserByID[%d]: %v", i.ID, err) } - case "is_pull": - if !i.IsPull { - return - } - - i.PullRequest, err = GetPullRequestByIssueID(i.ID) - if err != nil { - log.Error(3, "GetPullRequestByIssueID[%d]: %v", i.ID, err) - } case "created": i.Created = regulateTimeZone(i.Created) } @@ -282,6 +273,15 @@ func (i *Issue) ChangeStatus(doer *User, isClosed bool) (err error) { return sess.Commit() } +func (i *Issue) GetPullRequest() (err error) { + if i.PullRequest != nil { + return nil + } + + i.PullRequest, err = GetPullRequestByIssueID(i.ID) + return err +} + // It's caller's responsibility to create action. func newIssue(e *xorm.Session, repo *Repository, issue *Issue, labelIDs []int64, uuids []string, isPull bool) (err error) { if _, err = e.Insert(issue); err != nil { diff --git a/models/pull.go b/models/pull.go index 7436511c91..7ef0901cc7 100644 --- a/models/pull.go +++ b/models/pull.go @@ -226,6 +226,12 @@ func (pr *PullRequest) testPatch() (err error) { return fmt.Errorf("BaseRepo.PatchPath: %v", err) } + // Fast fail if patch does not exist, this assumes data is cruppted. + if !com.IsFile(patchPath) { + log.Trace("PullRequest[%d].testPatch: ignored cruppted data", pr.ID) + return nil + } + log.Trace("PullRequest[%d].testPatch(patchPath): %s", pr.ID, patchPath) if err := pr.BaseRepo.UpdateLocalCopy(); err != nil { @@ -373,28 +379,47 @@ func (pr *PullRequest) UpdateCols(cols ...string) error { var PullRequestQueue = NewUniqueQueue(setting.Repository.PullRequestQueueLength) -// checkAndUpdateStatus checks if pull request is possible to levaing checking status, -// and set to be either conflict or mergeable. -func (pr *PullRequest) checkAndUpdateStatus() { - // Status is not changed to conflict means mergeable. - if pr.Status == PULL_REQUEST_STATUS_CHECKING { - pr.Status = PULL_REQUEST_STATUS_MERGEABLE +// UpdatePatch generates and saves a new patch. +func (pr *PullRequest) UpdatePatch() error { + if err := pr.GetHeadRepo(); err != nil { + return fmt.Errorf("GetHeadRepo: %v", err) + } else if pr.HeadRepo == nil { + log.Trace("PullRequest[%d].UpdatePatch: ignored cruppted data", pr.ID) + return nil } - // Make sure there is no waiting test to process before levaing the checking status. - if !PullRequestQueue.Exist(pr.ID) { - if err := pr.UpdateCols("status"); err != nil { - log.Error(4, "Update[%d]: %v", pr.ID, err) - } + if err := pr.GetBaseRepo(); err != nil { + return fmt.Errorf("GetBaseRepo: %v", err) } + + headRepoPath, err := pr.HeadRepo.RepoPath() + if err != nil { + return fmt.Errorf("HeadRepo.RepoPath: %v", err) + } + + headGitRepo, err := git.OpenRepository(headRepoPath) + if err != nil { + return fmt.Errorf("OpenRepository: %v", err) + } + + patch, err := headGitRepo.GetPatch(pr.MergeBase, pr.HeadBranch) + if err != nil { + return fmt.Errorf("GetPatch: %v", err) + } + + if err = pr.BaseRepo.SavePatch(pr.Index, patch); err != nil { + return fmt.Errorf("BaseRepo.SavePatch: %v", err) + } + + return nil } -// addToTaskQueue adds itself to pull request test task queue. -func (pr *PullRequest) addToTaskQueue() { +// AddToTaskQueue adds itself to pull request test task queue. +func (pr *PullRequest) AddToTaskQueue() { go PullRequestQueue.AddFunc(pr.ID, func() { pr.Status = PULL_REQUEST_STATUS_CHECKING if err := pr.UpdateCols("status"); err != nil { - log.Error(5, "addToTaskQueue.UpdateCols[%d].(add to queue): %v", pr.ID, err) + log.Error(5, "AddToTaskQueue.UpdateCols[%d].(add to queue): %v", pr.ID, err) } }) } @@ -402,44 +427,12 @@ func (pr *PullRequest) addToTaskQueue() { func addHeadRepoTasks(prs []*PullRequest) { for _, pr := range prs { log.Trace("addHeadRepoTasks[%d]: composing new test task", pr.ID) - if err := pr.GetHeadRepo(); err != nil { - log.Error(4, "GetHeadRepo[%d]: %v", pr.ID, err) - continue - } else if pr.HeadRepo == nil { - log.Trace("addHeadRepoTasks[%d]: ignored cruppted data", pr.ID) - continue - } - - if err := pr.GetBaseRepo(); err != nil { - log.Error(4, "GetBaseRepo[%d]: %v", pr.ID, err) - continue - } - - headRepoPath, err := pr.HeadRepo.RepoPath() - if err != nil { - log.Error(4, "HeadRepo.RepoPath[%d]: %v", pr.ID, err) - continue - } - - headGitRepo, err := git.OpenRepository(headRepoPath) - if err != nil { - log.Error(4, "OpenRepository[%d]: %v", pr.ID, err) - continue - } - - // Generate patch. - patch, err := headGitRepo.GetPatch(pr.MergeBase, pr.HeadBranch) - if err != nil { - log.Error(4, "GetPatch[%d]: %v", pr.ID, err) - continue - } - - if err = pr.BaseRepo.SavePatch(pr.Index, patch); err != nil { - log.Error(4, "BaseRepo.SavePatch[%d]: %v", pr.ID, err) + if err := pr.UpdatePatch(); err != nil { + log.Error(4, "UpdatePatch: %v", err) continue } - pr.addToTaskQueue() + pr.AddToTaskQueue() } } @@ -461,7 +454,23 @@ func AddTestPullRequestTask(repoID int64, branch string) { return } for _, pr := range prs { - pr.addToTaskQueue() + pr.AddToTaskQueue() + } +} + +// checkAndUpdateStatus checks if pull request is possible to levaing checking status, +// and set to be either conflict or mergeable. +func (pr *PullRequest) checkAndUpdateStatus() { + // Status is not changed to conflict means mergeable. + if pr.Status == PULL_REQUEST_STATUS_CHECKING { + pr.Status = PULL_REQUEST_STATUS_MERGEABLE + } + + // Make sure there is no waiting test to process before levaing the checking status. + if !PullRequestQueue.Exist(pr.ID) { + if err := pr.UpdateCols("status"); err != nil { + log.Error(4, "Update[%d]: %v", pr.ID, err) + } } } diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 166b369dca..30dcf92578 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -476,6 +476,11 @@ func ViewIssue(ctx *middleware.Context) { } if issue.IsPull { + if err = issue.GetPullRequest(); err != nil { + ctx.Handle(500, "GetPullRequest", err) + return + } + ctx.Data["PageIsPullList"] = true ctx.Data["PageIsPullConversation"] = true } else { @@ -747,6 +752,12 @@ func NewComment(ctx *middleware.Context, form auth.CreateCommentForm) { } return } + if issue.IsPull { + if err = issue.GetPullRequest(); err != nil { + ctx.Handle(500, "GetPullRequest", err) + return + } + } var attachments []string if setting.AttachmentEnabled { @@ -766,6 +777,7 @@ func NewComment(ctx *middleware.Context, form auth.CreateCommentForm) { (form.Status == "reopen" || form.Status == "close") && !(issue.IsPull && issue.HasMerged) { + // Duplication and conflict check should apply to reopen pull request. var pr *models.PullRequest if form.Status == "reopen" && issue.IsPull { @@ -777,6 +789,16 @@ func NewComment(ctx *middleware.Context, form auth.CreateCommentForm) { return } } + + // Regenerate patch and test conflict. + if pr == nil { + if err = issue.UpdatePatch(); err != nil { + ctx.Handle(500, "UpdatePatch", err) + return + } + + issue.AddToTaskQueue() + } } if pr != nil { diff --git a/routers/repo/pull.go b/routers/repo/pull.go index eade4407f7..b69592411b 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -149,7 +149,10 @@ func checkPullInfo(ctx *middleware.Context) *models.Issue { if err = issue.GetPoster(); err != nil { ctx.Handle(500, "GetPoster", err) return nil - } else if issue.GetHeadRepo(); err != nil { + } else if err = issue.GetPullRequest(); err != nil { + ctx.Handle(500, "GetPullRequest", err) + return nil + } else if err = issue.GetHeadRepo(); err != nil { ctx.Handle(500, "GetHeadRepo", err) return nil } diff --git a/templates/.VERSION b/templates/.VERSION index b4080f5ea3..1ab1a873d4 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.6.17.1024 Beta \ No newline at end of file +0.6.17.1025 Beta \ No newline at end of file