mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 00:03:59 -04:00 
			
		
		
		
	fix #711
This commit is contained in:
		
							parent
							
								
									6f71632e3e
								
							
						
					
					
						commit
						9a1fe801e5
					
				| @ -2,4 +2,5 @@ | ||||
| # Order of name is meaningless. | ||||
| 
 | ||||
| Thomas Fanninger <gogs.thomas@fanninger.at> | ||||
| Łukasz Jan Niemier <lukasz@niemier.pl> | ||||
| Łukasz Jan Niemier <lukasz@niemier.pl> | ||||
| Lafriks <lafriks@gmail.com> | ||||
| @ -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 <code>push</code> 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 <code>push</code> 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 <code>push</code> 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 <strong>lasīšanas</strong> tiesības: dalībnieki var skatīties un klonēt komandas repozitorijus. | ||||
| teams.write_permission_desc=Šai komandai ir <strong>rakstīšanas</strong> tiesības: dalībnieki var lasīt un veikt <code>push</code> komandas repozitorijiem. | ||||
| teams.write_permission_desc=Šai komandai ir <strong>rakstīšanas</strong> tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem. | ||||
| teams.admin_permission_desc=Šai komandai ir <strong>administratora</strong> tiesības: dalībnieki var lasīt, rakstīt un pievienot citus dalībniekus komandas repozitorijiem. | ||||
| teams.repositories=Komandas repozitoriji | ||||
| teams.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 <a href="%s/%s">%s</a> | ||||
| commit_repo=veica <code>push</code> atzaram <a href="%s/%s/src/%s">%s</a> repozitorijam <a href="%s/%s">%s</a> | ||||
| create_issue=reģistrēta problēma <a href="%s/%s/issues/%s">%s#%s</a> | ||||
| comment_issue=pievienots komentārs problēmai <a href="%s/%s/issues/%s">%s#%s</a> | ||||
| transfer_repo=Mainīja repozitorija īpašnieku <code>%s</code> uz <a href="/%s%s">%s</a> | ||||
| push_tag=veica <code>push</code> birkai <a href="%s/%s/src/%s">%s</a> uz <a href="%s/%s">%s</a> | ||||
| create_repo=izveidoja repozitoriju <a href="%s/%s">%s</a> | ||||
| commit_repo=veica izmaiņu nosūtīšanu atzaram <a href="%s/%s/src/%s">%s</a> repozitorijā <a href="%s/%s">%s</a> | ||||
| create_issue=reģistrēja problēmu <a href="%s/%s/issues/%s">%s#%s</a> | ||||
| comment_issue=pievienoja komentāru problēmai <a href="%s/%s/issues/%s">%s#%s</a> | ||||
| transfer_repo=mainīja repozitorija <code>%s</code> īpašnieku uz <a href="/%s%s">%s</a> | ||||
| push_tag=pievienoja birku <a href="%s/%s/src/%s">%s</a> repozitorijam <a href="%s/%s">%s</a> | ||||
| 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 | ||||
|  | ||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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()) | ||||
|  | ||||
| @ -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 | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -154,7 +154,7 @@ func RenderSpecialLink(rawBytes []byte, urlPrefix string) []byte { | ||||
| 		rawBytes = bytes.Replace(rawBytes, m, []byte(fmt.Sprintf( | ||||
| 			` <a href="%s">#%s</a>`, 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( | ||||
|  | ||||
| @ -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)) | ||||
| 	} | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| 0.5.8.1205 Beta | ||||
| 0.5.8.1209 Beta | ||||
| @ -38,8 +38,8 @@ | ||||
| 					                </table> | ||||
| 					                {{if or .LastPageNum .NextPageNum}} | ||||
| 					                <ul class="pagination"> | ||||
| 					                    {{if .LastPageNum}}<li><a class="btn btn-medium btn-gray btn-radius" href="{{AppSubUrl}}/admin/users?p={{.LastPageNum}}">« {{.i18n.Tr "admin.prev"}}</a></li>{{end}} | ||||
| 					                    {{if .NextPageNum}}<li><a class="btn btn-medium btn-gray btn-radius" href="{{AppSubUrl}}/admin/users?p={{.NextPageNum}}">» {{.i18n.Tr "admin.next"}}</a></li>{{end}} | ||||
| 					                    {{if .LastPageNum}}<li><a class="btn btn-medium btn-gray btn-radius" href="{{AppSubUrl}}/admin/notices?p={{.LastPageNum}}">« {{.i18n.Tr "admin.prev"}}</a></li>{{end}} | ||||
| 					                    {{if .NextPageNum}}<li><a class="btn btn-medium btn-gray btn-radius" href="{{AppSubUrl}}/admin/notices?p={{.NextPageNum}}">» {{.i18n.Tr "admin.next"}}</a></li>{{end}} | ||||
| 					                </ul> | ||||
| 					                {{end}} | ||||
| 				                </div> | ||||
|  | ||||
| @ -112,7 +112,7 @@ | ||||
|                             </td> | ||||
|                              | ||||
|                             <td class="lines-code"> | ||||
|                                 <pre>{{ToUtf8 .Content}}</pre> | ||||
|                                 <pre>{{.Content}}</pre> | ||||
|                             </td> | ||||
|                         </tr> | ||||
|                         {{end}} | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| <table id="repo-files-table" class="table-border table-block table-radius"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|         <th colspan="4" class="clear"> | ||||
|         <th colspan="5" class="clear"> | ||||
|             <span class="author left"> | ||||
|                 {{if .LastCommitUser}} | ||||
|                 <img class="avatar-24 radius" src="{{.LastCommitUser.AvatarLink}}" /> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user