mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
9f77f93071
File handling was broken on Windows. This commit contains a revision of the path handling with separation of file paths and urls where needed. There may be remaining issues and there may be better ways to do this, but it is easier to start that refactoring job with a set of passing tests. Fixes #687 Fixes #660
120 lines
2.6 KiB
Go
120 lines
2.6 KiB
Go
// Copyright © 2014 Steve Francia <spf@spf13.com>.
|
|
//
|
|
// Licensed under the Simple Public License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
// http://opensource.org/licenses/Simple-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package source
|
|
|
|
import (
|
|
"github.com/spf13/hugo/helpers"
|
|
"io"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
type File struct {
|
|
relpath string // Original Full Path eg. /Users/Home/Hugo/foo.txt
|
|
logicalName string // foo.txt
|
|
Contents io.Reader
|
|
section string // The first directory
|
|
dir string // The full directory Path (minus file name)
|
|
ext string // Just the ext (eg txt)
|
|
uniqueId string // MD5 of the filename
|
|
}
|
|
|
|
func (f *File) UniqueId() string {
|
|
if f.uniqueId == "" {
|
|
f.uniqueId = helpers.Md5String(f.LogicalName())
|
|
}
|
|
return f.uniqueId
|
|
}
|
|
|
|
func (f *File) String() string {
|
|
return helpers.ReaderToString(f.Contents)
|
|
}
|
|
|
|
func (f *File) Bytes() []byte {
|
|
return helpers.ReaderToBytes(f.Contents)
|
|
}
|
|
|
|
// Filename without extension
|
|
func (f *File) BaseFileName() string {
|
|
return helpers.Filename(f.LogicalName())
|
|
}
|
|
|
|
func (f *File) Section() string {
|
|
if f.section != "" {
|
|
return f.section
|
|
} else {
|
|
f.section = helpers.GuessSection(f.Dir())
|
|
return f.section
|
|
}
|
|
}
|
|
|
|
func (f *File) LogicalName() string {
|
|
if f.logicalName != "" {
|
|
return f.logicalName
|
|
} else {
|
|
_, f.logicalName = filepath.Split(f.relpath)
|
|
return f.logicalName
|
|
}
|
|
}
|
|
|
|
func (f *File) SetDir(dir string) {
|
|
f.dir = dir
|
|
}
|
|
|
|
func (f *File) Dir() string {
|
|
if f.dir != "" {
|
|
return f.dir
|
|
} else {
|
|
f.dir, _ = filepath.Split(f.relpath)
|
|
return f.dir
|
|
}
|
|
}
|
|
|
|
func (f *File) Extension() string {
|
|
if f.ext != "" {
|
|
return f.ext
|
|
} else {
|
|
f.ext = strings.TrimPrefix(filepath.Ext(f.LogicalName()), ".")
|
|
return f.ext
|
|
}
|
|
}
|
|
|
|
func (f *File) Ext() string {
|
|
return f.Extension()
|
|
}
|
|
|
|
func (f *File) Path() string {
|
|
return f.relpath
|
|
}
|
|
|
|
func NewFileWithContents(relpath string, content io.Reader) *File {
|
|
file := NewFile(relpath)
|
|
file.Contents = content
|
|
return file
|
|
}
|
|
|
|
func NewFile(relpath string) *File {
|
|
return &File{
|
|
relpath: relpath,
|
|
}
|
|
}
|
|
|
|
func NewFileFromAbs(base, fullpath string, content io.Reader) (f *File, err error) {
|
|
var name string
|
|
if name, err = helpers.GetRelativePath(fullpath, base); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return NewFileWithContents(name, content), nil
|
|
}
|