From 9a1fe801e526ae1bc0a211d8a218aabcf985376d Mon Sep 17 00:00:00 2001 From: Unknwon Date: Tue, 9 Dec 2014 02:18:25 -0500 Subject: [PATCH] fix #711 --- conf/locale/TRANSLATORS | 3 ++- conf/locale/locale_lv-LV.ini | 48 +++++++++++++++++------------------ gogs.go | 2 +- models/git_diff.go | 25 ++++++++++++++++++ modules/base/markdown.go | 4 +-- modules/base/template.go | 11 +++++--- routers/repo/commit.go | 22 ++++++++-------- routers/repo/view.go | 7 ++++- templates/.VERSION | 2 +- templates/admin/notice.tmpl | 4 +-- templates/repo/diff.tmpl | 2 +- templates/repo/view_list.tmpl | 2 +- 12 files changed, 84 insertions(+), 48 deletions(-) diff --git a/conf/locale/TRANSLATORS b/conf/locale/TRANSLATORS index 9899ea4ea..38e4ddc27 100644 --- a/conf/locale/TRANSLATORS +++ b/conf/locale/TRANSLATORS @@ -2,4 +2,5 @@ # Order of name is meaningless. Thomas Fanninger -Łukasz Jan Niemier \ No newline at end of file +Łukasz Jan Niemier +Lafriks \ No newline at end of file diff --git a/conf/locale/locale_lv-LV.ini b/conf/locale/locale_lv-LV.ini index ac1ea5b98..a9be8e50e 100755 --- a/conf/locale/locale_lv-LV.ini +++ b/conf/locale/locale_lv-LV.ini @@ -34,7 +34,7 @@ account_settings=Konta iestatījumi settings=Iestatījumi news_feed=Jaunumu plūsma -pull_requests=Vilkšanas pieprasījumi +pull_requests=Izmaiņu pieprasījumi issues=Problēmas cancel=Atcelt @@ -51,12 +51,12 @@ db_name=Datu bāzes nosaukums db_helper=Nepieciešams izmantot MySQL INNODB dzini ar rakstzīmju kopu utf8_general_ci. ssl_mode=SSL režīms path=Ceļš -sqlite_helper=SQLite 3 datu bāzes faila ceļš. +sqlite_helper=SQLite 3 datu bāzes faila atrašanās vieta. general_title=Gogs vispārīgie iestatījumi -repo_path=Repozitorija saknes ceļš +repo_path=Repozitoriju glabāšanas vieta repo_path_helper=Visi Git attālinātie repozitoriji tiks glabāti šajā direktorijā. run_user=Izpildes lietotājs -run_user_helper=Lietotājam ir jābūt tiesībām rakstīšanas tiesībām repozitorija saknes direktorijai un Gogs jābūt palaistam zem šī lietotāja. +run_user_helper=Lietotājam ir jābūt rakstīšanas tiesībām repozitorija saknes direktorijai un Gogs jābūt palaistam zem šī lietotāja. domain=Domēns domain_helper=Tas ietekmē SSH klonēšanas URL. app_url=Lietotnes URL @@ -77,14 +77,14 @@ install_gogs=Instalēt Gogs test_git_failed=Kļūda pārbaudot 'git' komandu: %v sqlite3_not_available=Jūsu versija neatbalsta SQLite3, lūdzu lejupielādējiet oficiālo bināro versiju no %s, NEVIS gobuild versiju. invalid_db_setting=Datu bāzes iestatījums nav pareizs: %v -invalid_repo_path=Repozitorija saknes ceļš ir nekorekts: %v +invalid_repo_path=Repozitorija atrašanās vieta ir nekorekta: %v run_user_not_match=Izpildes lietotājs nav pašreizējais lietotājs: %s -> %s -save_config_failed=Neizdevās saglanāt konfigurāciju: %v +save_config_failed=Neizdevās saglabāt konfigurāciju: %v invalid_admin_setting=Nekorekts admin konta iestatījums: %v install_success=Laipni lūdzam! Mēs priecājamies, ka Jūs izvēlaties Gogs, patīkamu lietošanu! [home] -uname_holder=Lietotājvārds vai e-pasta adrese +uname_holder=Lietotājvārds vai e-pasts password_holder=Parole switch_dashboard_context=Mainīt infopaneļa kontekstu my_repos=Mani repozitoriji @@ -291,7 +291,7 @@ no_desc=Nav apraksta quick_guide=Īsa pamācība clone_this_repo=Klonēt šo repozitoriju create_new_repo_command=Izveidot jaunu repozitoriju komandrindā -push_exist_repo=Veikt push darbību eksistējošam repozitorijam no komandrindas +push_exist_repo=Nosūtīt izmaiņas no komandrindas eksistējošam repozitorijam branch=Atzars tree=Koks @@ -354,7 +354,7 @@ settings.payload_url=Vērtuma URL settings.content_type=Satura tips settings.secret=Noslēpums settings.event_desc=Kādu notikumu rezultātā tiktu izsaukts tīmekļā āķis? -settings.event_push_only=Tikai push notikums. +settings.event_push_only=Tikai izmaiņu nosūtīšanas notikumiem. 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. @@ -430,7 +430,7 @@ teams.leave=Atstāt teams.read_access=Lasīšanas piekļuve teams.read_access_helper=Komanda varēs skatīties un klonēt šīs organizācijas repozitorijus. teams.write_access=Rakstīšanas piekļuve -teams.write_access_helper=Komanda varēs skatīties un klonēt, kā arī veikt push darbību šīs organizācijas repozitorijiem. +teams.write_access_helper=Komanda varēs skatīties un klonēt, kā arī nosūtīt izmaiņas šīs organizācijas repozitorijiem. teams.admin_access=Administratora piekļuve teams.admin_access_helper=Šī komanda varēs veikt push/pull komandas tās repozitorijiem, kā arī tiem pievienot citus līdzstrādniekus. teams.no_desc=Komandai nav apraksta @@ -444,7 +444,7 @@ teams.delete_team_title=Komandas dzēšana teams.delete_team_desc=Komanda tiks dzēsta, vai vēlaties turpināt? Komandas biedri var zaudēt piekļuvi dažiem vai pat visiem repozitorijiem. teams.delete_team_success=Komanda tika veiksmīgi izdzēsta. teams.read_permission_desc=Šai komandai ir lasīšanas tiesības: dalībnieki var skatīties un klonēt komandas repozitorijus. -teams.write_permission_desc=Šai komandai ir rakstīšanas tiesības: dalībnieki var lasīt un veikt push komandas repozitorijiem. +teams.write_permission_desc=Šai komandai ir rakstīšanas tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem. teams.admin_permission_desc=Šai komandai ir administratora tiesības: dalībnieki var lasīt, rakstīt un pievienot citus dalībniekus komandas repozitorijiem. teams.repositories=Komandas repozitoriji teams.add_team_repository=Pievienot komandas repozitoriju @@ -529,12 +529,12 @@ 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. -orgs.org_manage_panel=Organizācijas pārvaldīšanas panelis +orgs.org_manage_panel=Organizāciju pārvaldības panelis orgs.name=Nosaukums orgs.teams=Komandas orgs.members=Dalībnieki -repos.repo_manage_panel=Repozitorija pārvaldes panelis +repos.repo_manage_panel=Repozitoriju pārvaldības panelis repos.owner=Īpašnieks repos.name=Vārds repos.private=Privāts @@ -542,7 +542,7 @@ repos.watches=Vērošana repos.stars=Atzīmētās zvaigznītes repos.issues=Problēmas -auths.auth_manage_panel=Autorizācijas pārvaldīšanas panelis +auths.auth_manage_panel=Autorizāciju pārvaldības panelis auths.new=Pievienot jaunu autorizācijas veidu auths.name=Nosaukums auths.type=Veids @@ -580,9 +580,9 @@ config.offline_mode=Bezsaistes režīms config.disable_router_log=Atspējot maršrutētāja žurnalizēšanu config.run_user=Izpildes lietotājs config.run_mode=Izpildes režīms -config.repo_root_path=Repozitorija saknes ceļš -config.static_file_root_path=Statisko failu direktorija -config.log_file_root_path=Žurnalizēšānas failu direktorija +config.repo_root_path=Repozitoriju glabāšanas vieta +config.static_file_root_path=Statisko failu atrašanās vieta +config.log_file_root_path=Žurnalizēšanas failu glabāšanas vieta config.script_type=Skripta veids config.reverse_auth_user=Reversā lietotāja autentifikācija config.db_config=Datu bāzes konfigurācija @@ -650,12 +650,12 @@ notices.op=Op. notices.delete_success=Sistēmas paziņojums tika veiksmīgi izdzēsts. [action] -create_repo=izveidots repozitorijs %s -commit_repo=veica push atzaram %s repozitorijam %s -create_issue=reģistrēta problēma %s#%s -comment_issue=pievienots komentārs problēmai %s#%s -transfer_repo=Mainīja repozitorija īpašnieku %s uz %s -push_tag=veica push birkai %s uz %s +create_repo=izveidoja repozitoriju %s +commit_repo=veica izmaiņu nosūtīšanu atzaram %s repozitorijā %s +create_issue=reģistrēja problēmu %s#%s +comment_issue=pievienoja komentāru problēmai %s#%s +transfer_repo=mainīja repozitorija %s īpašnieku uz %s +push_tag=pievienoja birku %s repozitorijam %s compare_2_commits=Veikt salīdzināšanu starp šīm 2 revīzijām [tool] @@ -665,7 +665,7 @@ now=tagad 1s=1 sekundi %s 1m=1 minūti %s 1h=1 stundu %s -1d=1 diena %s +1d=1 dienu %s 1w=1 nedēļu %s 1mon=1 mēnesi %s 1y=1 gadu %s diff --git a/gogs.go b/gogs.go index 5097309e4..c3f264c2d 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.5.8.1205 Beta" +const APP_VER = "0.5.8.1209 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/git_diff.go b/models/git_diff.go index e093e7ab1..4bbe3c0e8 100644 --- a/models/git_diff.go +++ b/models/git_diff.go @@ -6,6 +6,7 @@ package models import ( "bufio" + "bytes" "fmt" "io" "os" @@ -15,8 +16,10 @@ import ( "github.com/Unknwon/com" + "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" + "github.com/gogits/gogs/modules/mahonia" "github.com/gogits/gogs/modules/process" ) @@ -80,6 +83,8 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff leftLine, rightLine int isTooLong bool + // FIXME: use first 30 lines to detect file encoding. Should use cache in the future. + buf bytes.Buffer ) diff := &Diff{Files: make([]*DiffFile, 0)} @@ -97,6 +102,11 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff i = i + 1 + // FIXME: use first 30 lines to detect file encoding. + if i <= 30 { + buf.WriteString(line) + } + // Diff data too large, we only show the first about maxlines lines if i == maxlines { isTooLong = true @@ -181,6 +191,21 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff } } + // FIXME: use first 30 lines to detect file encoding. + charset, err := base.DetectEncoding(buf.Bytes()) + if charset != "utf8" && err == nil { + decoder := mahonia.NewDecoder(charset) + if decoder != nil { + for _, f := range diff.Files { + for _, sec := range f.Sections { + for _, l := range sec.Lines { + l.Content = decoder.ConvertString(l.Content) + } + } + } + } + } + return diff, nil } diff --git a/modules/base/markdown.go b/modules/base/markdown.go index c85bd0206..b2f94c480 100644 --- a/modules/base/markdown.go +++ b/modules/base/markdown.go @@ -154,7 +154,7 @@ func RenderSpecialLink(rawBytes []byte, urlPrefix string) []byte { rawBytes = bytes.Replace(rawBytes, m, []byte(fmt.Sprintf( ` #%s`, m, ShortSha(string(m[i+7:j])))), -1) } - rawBytes = RenderissueIndexPattern(rawBytes, urlPrefix) + rawBytes = RenderIssueIndexPattern(rawBytes, urlPrefix) rawBytes = RenderSha1CurrentPattern(rawBytes, urlPrefix) return rawBytes } @@ -168,7 +168,7 @@ func RenderSha1CurrentPattern(rawBytes []byte, urlPrefix string) []byte { return rawBytes } -func RenderissueIndexPattern(rawBytes []byte, urlPrefix string) []byte { +func RenderIssueIndexPattern(rawBytes []byte, urlPrefix string) []byte { ms := issueIndexPattern.FindAll(rawBytes, -1) for _, m := range ms { rawBytes = bytes.Replace(rawBytes, m, []byte(fmt.Sprintf( diff --git a/modules/base/template.go b/modules/base/template.go index 446d01dd0..462269aa4 100644 --- a/modules/base/template.go +++ b/modules/base/template.go @@ -47,18 +47,23 @@ func ShortSha(sha1 string) string { return sha1 } -func ToUtf8WithErr(content []byte) (error, string) { +func DetectEncoding(content []byte) (string, error) { detector := chardet.NewTextDetector() result, err := detector.DetectBest(content) + return result.Charset, err +} + +func ToUtf8WithErr(content []byte) (error, string) { + charset, err := DetectEncoding(content) if err != nil { return err, "" } - if result.Charset == "utf8" { + if charset == "utf8" { return nil, string(content) } - decoder := mahonia.NewDecoder(result.Charset) + decoder := mahonia.NewDecoder(charset) if decoder != nil { return nil, decoder.ConvertString(string(content)) } diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 82be6881f..619c6c815 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -33,6 +33,16 @@ func RefCommits(ctx *middleware.Context) { } } +func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List { + 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)) + newCommits.PushBack(c) + } + return newCommits +} + func Commits(ctx *middleware.Context) { ctx.Data["IsRepoToolbarCommits"] = true @@ -86,16 +96,6 @@ func Commits(ctx *middleware.Context) { ctx.HTML(200, COMMITS) } -func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List { - 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)) - newCommits.PushBack(c) - } - return newCommits -} - func SearchCommits(ctx *middleware.Context) { ctx.Data["IsSearchPage"] = true ctx.Data["IsRepoToolbarCommits"] = true @@ -206,7 +206,7 @@ func Diff(ctx *middleware.Context) { commitId := ctx.Repo.CommitId commit := ctx.Repo.Commit - commit.CommitMessage = string(base.RenderissueIndexPattern([]byte(commit.CommitMessage), ctx.Repo.RepoLink)) + commit.CommitMessage = string(base.RenderIssueIndexPattern([]byte(commit.CommitMessage), ctx.Repo.RepoLink)) diff, err := models.GetDiffCommit(models.RepoPath(userName, repoName), commitId, setting.MaxGitDiffLines) if err != nil { diff --git a/routers/repo/view.go b/routers/repo/view.go index 073eb5d74..2fb411589 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -152,6 +152,11 @@ func Home(ctx *middleware.Context) { } } + // Render issue index links. + for _, f := range files { + c := f[1].(*git.Commit) + c.CommitMessage = string(base.RenderIssueIndexPattern([]byte(c.CommitMessage), ctx.Repo.RepoLink)) + } ctx.Data["Files"] = files var readmeFile *git.Blob @@ -199,7 +204,7 @@ func Home(ctx *middleware.Context) { } lastCommit := ctx.Repo.Commit - lastCommit.CommitMessage = string(base.RenderissueIndexPattern([]byte(lastCommit.CommitMessage), ctx.Repo.RepoLink)) + lastCommit.CommitMessage = string(base.RenderIssueIndexPattern([]byte(lastCommit.CommitMessage), ctx.Repo.RepoLink)) if len(treePath) > 0 { c, err := ctx.Repo.Commit.GetCommitOfRelPath(treePath) if err != nil { diff --git a/templates/.VERSION b/templates/.VERSION index 9808b6297..f7e9d476c 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.5.8.1205 Beta \ No newline at end of file +0.5.8.1209 Beta \ No newline at end of file diff --git a/templates/admin/notice.tmpl b/templates/admin/notice.tmpl index b3abbb6b7..a3ae2a10d 100644 --- a/templates/admin/notice.tmpl +++ b/templates/admin/notice.tmpl @@ -38,8 +38,8 @@ {{if or .LastPageNum .NextPageNum}} {{end}} diff --git a/templates/repo/diff.tmpl b/templates/repo/diff.tmpl index 2726b94d9..225175e8d 100644 --- a/templates/repo/diff.tmpl +++ b/templates/repo/diff.tmpl @@ -112,7 +112,7 @@ -
{{ToUtf8 .Content}}
+
{{.Content}}
{{end}} diff --git a/templates/repo/view_list.tmpl b/templates/repo/view_list.tmpl index 8160c17b8..fed91effa 100644 --- a/templates/repo/view_list.tmpl +++ b/templates/repo/view_list.tmpl @@ -1,7 +1,7 @@ -
+ {{if .LastCommitUser}}