diff --git a/lfs/gitfilter.go b/lfs/gitfilter.go new file mode 100644 index 00000000..ac143059 --- /dev/null +++ b/lfs/gitfilter.go @@ -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} +} diff --git a/lfs/pointer_clean.go b/lfs/gitfilter_clean.go similarity index 90% rename from lfs/pointer_clean.go rename to lfs/gitfilter_clean.go index 6d4e960d..826b7ca6 100644 --- a/lfs/pointer_clean.go +++ b/lfs/gitfilter_clean.go @@ -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 } diff --git a/lfs/pointer_smudge.go b/lfs/gitfilter_smudge.go similarity index 81% rename from lfs/pointer_smudge.go rename to lfs/gitfilter_smudge.go index 2ad1999f..276cab32 100644 --- a/lfs/pointer_smudge.go +++ b/lfs/gitfilter_smudge.go @@ -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]