diff options
author | Andrey Nering <andrey.nering@gmail.com> | 2016-08-11 21:07:09 -0300 |
---|---|---|
committer | 无闻 <u@gogs.io> | 2016-08-11 17:07:09 -0700 |
commit | dbed39ba05fd498dad6cd3bf127c1f68056bf2ab (patch) | |
tree | 5f57a18ecdb444bbf52e583894fc38f2d8d50280 /modules | |
parent | aa1fc30b898a928ddafbfd0fddc47547c04f96e5 (diff) | |
download | gitea-dbed39ba05fd498dad6cd3bf127c1f68056bf2ab.tar.gz gitea-dbed39ba05fd498dad6cd3bf127c1f68056bf2ab.zip |
On showing diff/file, use the tab_width specified on .editorconfig, if any (#3241)
Closes #3182
Diffstat (limited to 'modules')
-rw-r--r-- | modules/context/repo.go | 24 | ||||
-rw-r--r-- | modules/template/template.go | 10 |
2 files changed, 34 insertions, 0 deletions
diff --git a/modules/context/repo.go b/modules/context/repo.go index af18881486..2f6a5de7a1 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -6,10 +6,12 @@ package context import ( "fmt" + "io/ioutil" "path" "strings" "github.com/Unknwon/com" + "gopkg.in/editorconfig/editorconfig-core-go.v1" "gopkg.in/macaron.v1" "github.com/gogits/git-module" @@ -69,6 +71,28 @@ func (r *Repository) HasAccess() bool { return r.AccessMode >= models.ACCESS_MODE_READ } +// GetEditorconfig returns the .editorconfig definition if found in the +// HEAD of the default repo branch. +func (r *Repository) GetEditorconfig() (*editorconfig.Editorconfig, error) { + commit, err := r.GitRepo.GetBranchCommit(r.Repository.DefaultBranch) + if err != nil { + return nil, err + } + treeEntry, err := commit.GetTreeEntryByPath(".editorconfig") + if err != nil { + return nil, err + } + reader, err := treeEntry.Blob().Data() + if err != nil { + return nil, err + } + data, err := ioutil.ReadAll(reader) + if err != nil { + return nil, err + } + return editorconfig.ParseBytes(data) +} + func RetrieveBaseRepo(ctx *Context, repo *models.Repository) { // Non-fork repository will not return error in this method. if err := repo.GetBaseRepo(); err != nil { diff --git a/modules/template/template.go b/modules/template/template.go index 6e9b15b9be..1b5e0a11ad 100644 --- a/modules/template/template.go +++ b/modules/template/template.go @@ -17,6 +17,7 @@ import ( "golang.org/x/net/html/charset" "golang.org/x/text/transform" + "gopkg.in/editorconfig/editorconfig-core-go.v1" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/base" @@ -109,6 +110,15 @@ func NewFuncMap() []template.FuncMap { mimeType := mime.TypeByExtension(filepath.Ext(filename)) return strings.HasPrefix(mimeType, "image/") }, + "TabSizeClass": func(ec *editorconfig.Editorconfig, filename string) string { + if ec != nil { + def := ec.GetDefinitionForFilename(filename) + if def.TabWidth > 0 { + return fmt.Sprintf("tab-size-%d", def.TabWidth) + } + } + return "tab-size-8" + }, }} } |