![Demo](http://gogs.qiniudn.com/gogs_demo.gif)
-##### Current version: 0.5.11 Beta
+##### Current version: 0.5.12 Beta
### NOTICES
![Demo](http://gogs.qiniudn.com/gogs_demo.gif)
-##### 当前版本:0.5.11 Beta
+##### 当前版本:0.5.12 Beta
## 开发目的
auth_failed=Ошибка аутентификации: %v\r
\r
still_own_repo=На вашем аккаунте все еще остается как минимум один репозиторий, сначала вам нужно удалить или передать его.\r
-still_has_org=Your account still have membership of organization, you have to left or delete them first.\r
+still_has_org=Вы находитесь в организации, сперва Вам необходимо покинуть ее или удалить.\r
org_still_own_repo=Данная организация все еще является владельцем репозиториев, необходимо удалить или переместить их в начале.\r
\r
still_own_user=Эта проверка подлинности по-прежнему используется некоторыми пользователями, вы должны переместить их и затем снова удалить.\r
config.service_config=Service Configuration\r
config.register_email_confirm=Require E-mail Confirmation\r
config.disable_register=Отключить регистрацию\r
-config.require_sign_in_view=Require Sign In View\r
-config.mail_notify=Mail Notification\r
-config.enable_cache_avatar=Enable Cache Avatar\r
+config.require_sign_in_view=Для просмотра необходима авторизация\r
+config.mail_notify=Почтовые уведомления\r
+config.enable_cache_avatar=Кешировать аватар\r
config.active_code_lives=Active Code Lives\r
config.reset_password_code_lives=Reset Password Code Lives\r
config.webhook_config=Настройка автоматического обновления репозиции\r
-config.task_interval=Task Interval\r
-config.deliver_timeout=Deliver Timeout\r
-config.mailer_config=Mailer Configuration\r
+config.task_interval=Интервал задания\r
+config.deliver_timeout=Задержка доставки\r
+config.mailer_config=Настройки почты\r
config.mailer_enabled=Включено\r
config.mailer_name=Имя\r
config.mailer_host=Сервер\r
config.mailer_user=Пользователь\r
config.oauth_config=Конфигурация OAuth\r
config.oauth_enabled=Включено\r
-config.cache_config=Cache Configuration\r
+config.cache_config=Настройки кеша\r
config.cache_adapter=Cache Adapter\r
config.cache_interval=Cache Interval\r
config.cache_conn=Cache Connection\r
monitor.process=Запущенные процессы\r
monitor.desc=Описание\r
monitor.start=Start Time\r
-monitor.execute_time=Execution Time\r
+monitor.execute_time=Время выполнения\r
\r
notices.system_notice_list=Система уведомлений\r
notices.type=Тип\r
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.5.12.0120 Beta"
+const APP_VER = "0.5.12.0130 Beta"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())
MentionPattern = regexp.MustCompile(`@[0-9a-zA-Z_]{1,}`)
commitPattern = regexp.MustCompile(`(\s|^)https?.*commit/[0-9a-zA-Z]+(#+[0-9a-zA-Z-]*)?`)
issueFullPattern = regexp.MustCompile(`(\s|^)https?.*issues/[0-9]+(#+[0-9a-zA-Z-]*)?`)
- issueIndexPattern = regexp.MustCompile(`#[0-9]+`)
+ issueIndexPattern = regexp.MustCompile(`( |^)#[0-9]+`)
sha1CurrentPattern = regexp.MustCompile(`\b[0-9a-f]{40}\b`)
)
return res
}
+// RenderCommitMessage renders commit message with XSS-safe and special links.
+func RenderCommitMessage(msg, urlPrefix string) template.HTML {
+ return template.HTML(string(RenderIssueIndexPattern([]byte(template.HTMLEscapeString(msg)), urlPrefix)))
+}
+
var mailDomains = map[string]string{
"gmail.com": "gmail.com",
}
"EscapePound": func(str string) string {
return strings.Replace(str, "#", "%23", -1)
},
+ "RenderCommitMessage": RenderCommitMessage,
}
type Actioner interface {
newCommits := list.New()
for e := oldCommits.Front(); e != nil; e = e.Next() {
c := e.Value.(*git.Commit)
- c.CommitMessage = string(base.RenderIssueIndexPattern([]byte(c.CommitMessage), repoLink))
+ c.CommitMessage = c.CommitMessage
newCommits.PushBack(c)
}
return newCommits
commitId := ctx.Repo.CommitId
commit := ctx.Repo.Commit
- commit.CommitMessage = string(base.RenderIssueIndexPattern([]byte(commit.CommitMessage), ctx.Repo.RepoLink))
+ commit.CommitMessage = commit.CommitMessage
diff, err := models.GetDiffCommit(models.RepoPath(userName, repoName),
commitId, setting.Git.MaxGitDiffLines)
if err != nil {
for _, f := range files {
switch c := f[1].(type) {
case *git.Commit:
- c.CommitMessage = string(base.RenderIssueIndexPattern([]byte(c.CommitMessage), ctx.Repo.RepoLink))
+ c.CommitMessage = c.CommitMessage
case *git.SubModuleFile:
- c.CommitMessage = string(base.RenderIssueIndexPattern([]byte(c.CommitMessage), ctx.Repo.RepoLink))
+ c.CommitMessage = c.CommitMessage
}
}
ctx.Data["Files"] = files
-0.5.12.0120 Beta
\ No newline at end of file
+0.5.12.0130 Beta
\ No newline at end of file
{{end}}
</td>
<td class="sha"><a rel="nofollow" class="label label-green" href="{{AppSubUrl}}/{{$username}}/{{$reponame}}/commit/{{.Id}} ">{{SubStr .Id.String 0 10}} </a></td>
- <td class="message"><span class="text-truncate">{{Str2html .Summary}}</span></td>
+ <td class="message"><span class="text-truncate">{{RenderCommitMessage .Summary $.RepoLink}}</span></td>
<td class="date">{{TimeSince .Author.When $.Lang}}</td>
</tr>
{{end}}
<div class="panel panel-info panel-radius diff-head-box">
<div class="panel-header">
<a class="pull-right btn btn-blue btn-header btn-medium btn-radius" rel="nofollow" href="{{.SourcePath}}">{{.i18n.Tr "repo.diff.browse_source"}}</a>
- <h4 class="commit-message">{{Str2html .Commit.Message}}</h4>
+ <h4 class="commit-message">{{RenderCommitMessage .Commit.Message $.RepoLink}}</h4>
</div>
<div class="panel-body">
<span class="pull-right">
<a rel="nofollow" class="label label-green" href="{{AppSubUrl}}/{{$.Username}}/{{$.Reponame}}/commit/{{$commit.Id}} ">{{SubStr $commit.Id.String 0 10}} </a>
</td>
<td class="message">
- <span class="text-truncate">{{Str2html $commit.Summary}}</span>
+ <span class="text-truncate">{{RenderCommitMessage $commit.Summary $.RepoLink}}</span>
</td>
<td class="age">{{TimeSince $commit.Committer.When $.Lang}}</td>
</tr>