lfs: introduce GitFilter
This commit is contained in:
parent
3480fa480e
commit
a9b6ad9837
13
lfs/gitfilter.go
Normal file
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]
|
Loading…
Reference in New Issue
Block a user