don't re-write the large asset file if it exists
This commit is contained in:
parent
f82779320d
commit
c22d346831
@ -25,14 +25,55 @@ func main() {
|
||||
written, _ := io.Copy(writer, os.Stdin)
|
||||
sha := hex.EncodeToString(sha1Hash.Sum(nil))
|
||||
|
||||
meta := &gitmedia.LargeAsset{
|
||||
asset := &gitmedia.LargeAsset{
|
||||
MediaType: "application/vnd.github.large-asset",
|
||||
Size: written,
|
||||
MD5: hex.EncodeToString(md5Hash.Sum(nil)),
|
||||
SHA1: sha,
|
||||
}
|
||||
|
||||
mediafile := gitmedia.LocalMediaPath(sha)
|
||||
output := ChooseWriter(asset, tmp)
|
||||
defer output.Close()
|
||||
|
||||
output.Write([]byte(fmt.Sprintf("# %d\n", len(gitmedia.MediaWarning))))
|
||||
output.Write(gitmedia.MediaWarning)
|
||||
enc := json.NewEncoder(output)
|
||||
enc.Encode(asset)
|
||||
}
|
||||
|
||||
func ChooseWriter(asset *gitmedia.LargeAsset, tmp *os.File) io.WriteCloser {
|
||||
mediafile := gitmedia.LocalMediaPath(asset.SHA1)
|
||||
if stat, _ := os.Stat(mediafile); stat == nil {
|
||||
return NewGitMediaCleanWriter(asset, tmp)
|
||||
} else {
|
||||
return NewGitMediaExistingWriter(asset, tmp)
|
||||
}
|
||||
}
|
||||
|
||||
type GitMediaExistingWriter struct {
|
||||
tempfile *os.File
|
||||
writer io.Writer
|
||||
}
|
||||
|
||||
func NewGitMediaExistingWriter(asset *gitmedia.LargeAsset, tmp *os.File) io.WriteCloser {
|
||||
return &GitMediaExistingWriter{tmp, os.Stdout}
|
||||
}
|
||||
|
||||
func (w *GitMediaExistingWriter) Write(buf []byte) (int, error) {
|
||||
return w.writer.Write(buf)
|
||||
}
|
||||
|
||||
func (w *GitMediaExistingWriter) Close() error {
|
||||
return os.Remove(w.tempfile.Name())
|
||||
}
|
||||
|
||||
type GitMediaCleanWriter struct {
|
||||
metafile *os.File
|
||||
*GitMediaExistingWriter
|
||||
}
|
||||
|
||||
func NewGitMediaCleanWriter(asset *gitmedia.LargeAsset, tmp *os.File) io.WriteCloser {
|
||||
mediafile := gitmedia.LocalMediaPath(asset.SHA1)
|
||||
metafile := mediafile + ".json"
|
||||
|
||||
if err := os.Rename(tmp.Name(), mediafile); err != nil {
|
||||
@ -46,12 +87,17 @@ func main() {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
defer func() { os.Remove(tmp.Name()) }()
|
||||
|
||||
writer = io.MultiWriter(os.Stdout, file)
|
||||
writer.Write([]byte(fmt.Sprintf("# %d\n", len(gitmedia.MediaWarning))))
|
||||
writer.Write(gitmedia.MediaWarning)
|
||||
enc := json.NewEncoder(writer)
|
||||
enc.Encode(meta)
|
||||
return &GitMediaCleanWriter{
|
||||
metafile: file,
|
||||
GitMediaExistingWriter: &GitMediaExistingWriter{tmp, io.MultiWriter(os.Stdout, file)},
|
||||
}
|
||||
}
|
||||
|
||||
func (w *GitMediaCleanWriter) Write(buf []byte) (int, error) {
|
||||
return w.writer.Write(buf)
|
||||
}
|
||||
|
||||
func (w *GitMediaCleanWriter) Close() error {
|
||||
w.GitMediaExistingWriter.Close()
|
||||
return w.metafile.Close()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user