lfs: introduce GitFilter

This commit is contained in:
rick olson 2017-10-24 11:42:00 -06:00
parent 3480fa480e
commit a9b6ad9837
3 changed files with 34 additions and 9 deletions

13
lfs/gitfilter.go Normal file

@ -0,0 +1,13 @@
package lfs
import (
"github.com/git-lfs/git-lfs/config"
)
type GitFilter struct {
cfg *config.Configuration
}
func NewGitFilter(cfg *config.Configuration) *GitFilter {
return &GitFilter{cfg: cfg}
}

@ -19,7 +19,11 @@ type cleanedAsset struct {
}
func PointerClean(reader io.Reader, fileName string, fileSize int64, cb progress.CopyCallback) (*cleanedAsset, error) {
extensions, err := config.Config.SortedExtensions()
return NewGitFilter(config.Config).Clean(reader, fileName, fileSize, cb)
}
func (f *GitFilter) Clean(reader io.Reader, fileName string, fileSize int64, cb progress.CopyCallback) (*cleanedAsset, error) {
extensions, err := f.cfg.SortedExtensions()
if err != nil {
return nil, err
}

@ -17,13 +17,21 @@ import (
)
func PointerSmudgeToFile(filename string, ptr *Pointer, download bool, manifest *tq.Manifest, cb progress.CopyCallback) error {
return NewGitFilter(config.Config).SmudgeToFile(filename, ptr, download, manifest, cb)
}
func PointerSmudge(writer io.Writer, ptr *Pointer, workingfile string, download bool, manifest *tq.Manifest, cb progress.CopyCallback) (int64, error) {
return NewGitFilter(config.Config).Smudge(writer, ptr, workingfile, download, manifest, cb)
}
func (f *GitFilter) SmudgeToFile(filename string, ptr *Pointer, download bool, manifest *tq.Manifest, cb progress.CopyCallback) error {
os.MkdirAll(filepath.Dir(filename), 0755)
file, err := os.Create(filename)
if err != nil {
return fmt.Errorf("Could not create working directory file: %v", err)
}
defer file.Close()
if _, err := PointerSmudge(file, ptr, filename, download, manifest, cb); err != nil {
if _, err := f.Smudge(file, ptr, filename, download, manifest, cb); err != nil {
if errors.IsDownloadDeclinedError(err) {
// write placeholder data instead
file.Seek(0, os.SEEK_SET)
@ -36,7 +44,7 @@ func PointerSmudgeToFile(filename string, ptr *Pointer, download bool, manifest
return nil
}
func PointerSmudge(writer io.Writer, ptr *Pointer, workingfile string, download bool, manifest *tq.Manifest, cb progress.CopyCallback) (int64, error) {
func (f *GitFilter) Smudge(writer io.Writer, ptr *Pointer, workingfile string, download bool, manifest *tq.Manifest, cb progress.CopyCallback) (int64, error) {
mediafile, err := LocalMediaPath(ptr.Oid)
if err != nil {
return 0, err
@ -58,12 +66,12 @@ func PointerSmudge(writer io.Writer, ptr *Pointer, workingfile string, download
if statErr != nil || stat == nil {
if download {
n, err = downloadFile(writer, ptr, workingfile, mediafile, manifest, cb)
n, err = f.downloadFile(writer, ptr, workingfile, mediafile, manifest, cb)
} else {
return 0, errors.NewDownloadDeclinedError(statErr, "smudge")
}
} else {
n, err = readLocalFile(writer, ptr, mediafile, workingfile, cb)
n, err = f.readLocalFile(writer, ptr, mediafile, workingfile, cb)
}
if err != nil {
@ -73,7 +81,7 @@ func PointerSmudge(writer io.Writer, ptr *Pointer, workingfile string, download
return n, nil
}
func downloadFile(writer io.Writer, ptr *Pointer, workingfile, mediafile string, manifest *tq.Manifest, cb progress.CopyCallback) (int64, error) {
func (f *GitFilter) downloadFile(writer io.Writer, ptr *Pointer, workingfile, mediafile string, manifest *tq.Manifest, cb progress.CopyCallback) (int64, error) {
fmt.Fprintf(os.Stderr, "Downloading %s (%s)\n", workingfile, humanize.FormatBytes(uint64(ptr.Size)))
// NOTE: if given, "cb" is a progress.CopyCallback which writes updates
@ -97,10 +105,10 @@ func downloadFile(writer io.Writer, ptr *Pointer, workingfile, mediafile string,
}
}
return readLocalFile(writer, ptr, mediafile, workingfile, nil)
return f.readLocalFile(writer, ptr, mediafile, workingfile, nil)
}
func readLocalFile(writer io.Writer, ptr *Pointer, mediafile string, workingfile string, cb progress.CopyCallback) (int64, error) {
func (f *GitFilter) readLocalFile(writer io.Writer, ptr *Pointer, mediafile string, workingfile string, cb progress.CopyCallback) (int64, error) {
reader, err := os.Open(mediafile)
if err != nil {
return 0, errors.Wrapf(err, "Error opening media file.")
@ -114,7 +122,7 @@ func readLocalFile(writer io.Writer, ptr *Pointer, mediafile string, workingfile
}
if len(ptr.Extensions) > 0 {
registeredExts := config.Config.Extensions()
registeredExts := f.cfg.Extensions()
extensions := make(map[string]config.Extension)
for _, ptrExt := range ptr.Extensions {
ext, ok := registeredExts[ptrExt.Name]