From 6329a4aa8aff762c458fe5d5069ff67698aac38d Mon Sep 17 00:00:00 2001 From: risk danger olson Date: Fri, 27 Sep 2013 14:28:45 -0600 Subject: [PATCH] extract cleaning logic --- clean/clean.go | 38 ++++++++++++++++++++++++++++++++++++++ cmd/git-media-clean.go | 37 ++++++++++--------------------------- 2 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 clean/clean.go diff --git a/clean/clean.go b/clean/clean.go new file mode 100644 index 00000000..7e071937 --- /dev/null +++ b/clean/clean.go @@ -0,0 +1,38 @@ +package gitmediaclean + +import ( + ".." + "crypto/md5" + "crypto/sha1" + "encoding/hex" + "io" + "os" +) + +type CleanedAsset struct { + File *os.File + *gitmedia.LargeAsset +} + +func Clean(reader io.Reader) (*CleanedAsset, error) { + tmp, err := gitmedia.TempFile() + if err != nil { + return nil, err + } + + sha1Hash := sha1.New() + md5Hash := md5.New() + writer := io.MultiWriter(sha1Hash, md5Hash, tmp) + + written, _ := io.Copy(writer, os.Stdin) + sha := hex.EncodeToString(sha1Hash.Sum(nil)) + + asset := &gitmedia.LargeAsset{ + MediaType: "application/vnd.github.large-asset", + Size: written, + MD5: hex.EncodeToString(md5Hash.Sum(nil)), + SHA1: sha, + } + + return &CleanedAsset{tmp, asset}, nil +} diff --git a/cmd/git-media-clean.go b/cmd/git-media-clean.go index 583987fb..349658d1 100644 --- a/cmd/git-media-clean.go +++ b/cmd/git-media-clean.go @@ -3,47 +3,30 @@ package main import ( ".." "../clean" - "crypto/md5" - "crypto/sha1" - "encoding/hex" "fmt" "io" "os" ) func main() { - tmp, err := gitmedia.TempFile() + cleaned, err := gitmediaclean.Clean(os.Stdin) if err != nil { - fmt.Println("Error trying to create temp file") + fmt.Println("Error cleaning asset") panic(err) } - sha1Hash := sha1.New() - md5Hash := md5.New() - writer := io.MultiWriter(sha1Hash, md5Hash, tmp) + writer := ChooseWriter(cleaned) + defer writer.Close() - written, _ := io.Copy(writer, os.Stdin) - sha := hex.EncodeToString(sha1Hash.Sum(nil)) - - asset := &gitmedia.LargeAsset{ - MediaType: "application/vnd.github.large-asset", - Size: written, - MD5: hex.EncodeToString(md5Hash.Sum(nil)), - SHA1: sha, - } - - output := ChooseWriter(asset, tmp) - defer output.Close() - - enc := gitmedia.NewEncoder(output) - enc.Encode(asset) + enc := gitmedia.NewEncoder(writer) + enc.Encode(cleaned.LargeAsset) } -func ChooseWriter(asset *gitmedia.LargeAsset, tmp *os.File) io.WriteCloser { - mediafile := gitmedia.LocalMediaPath(asset.SHA1) +func ChooseWriter(cleaned *gitmediaclean.CleanedAsset) io.WriteCloser { + mediafile := gitmedia.LocalMediaPath(cleaned.SHA1) if stat, _ := os.Stat(mediafile); stat == nil { - return gitmediaclean.NewWriter(asset, tmp) + return gitmediaclean.NewWriter(cleaned.LargeAsset, cleaned.File) } else { - return gitmediaclean.NewExistingWriter(asset, tmp) + return gitmediaclean.NewExistingWriter(cleaned.LargeAsset, cleaned.File) } }