implement a copy callback for pushing files
This commit is contained in:
parent
d7a787dab8
commit
defae1cef6
@ -53,7 +53,15 @@ func pushAsset(oid, filename string) *wrappedError {
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
err = gitmediaclient.Put(path, filename, nil)
|
||||
cb, file, cbErr := gitmedia.CopyCallbackFile("push", filename)
|
||||
if cbErr != nil {
|
||||
Error(cbErr.Error())
|
||||
}
|
||||
|
||||
err = gitmediaclient.Put(path, filename, cb)
|
||||
if file != nil {
|
||||
file.Close()
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
@ -51,12 +51,12 @@ func CopyCallbackFile(event, filename string) (CopyCallback, *os.File, error) {
|
||||
|
||||
cbDir := filepath.Dir(cbFilename)
|
||||
if err := os.MkdirAll(cbDir, 0755); err != nil {
|
||||
return nil, nil, wrapProgressError(err, cbFilename)
|
||||
return nil, nil, wrapProgressError(err, event, cbFilename)
|
||||
}
|
||||
|
||||
file, err := os.OpenFile(cbFilename, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
|
||||
if err != nil {
|
||||
return nil, file, wrapProgressError(err, cbFilename)
|
||||
return nil, file, wrapProgressError(err, event, cbFilename)
|
||||
}
|
||||
|
||||
var prevProgress int
|
||||
@ -71,7 +71,7 @@ func CopyCallbackFile(event, filename string) (CopyCallback, *os.File, error) {
|
||||
if progress != prevProgress {
|
||||
_, err := file.Write([]byte(fmt.Sprintf("%s %d %s\n", event, progress, filename)))
|
||||
prevProgress = progress
|
||||
return wrapProgressError(err, cbFilename)
|
||||
return wrapProgressError(err, event, cbFilename)
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -81,10 +81,10 @@ func CopyCallbackFile(event, filename string) (CopyCallback, *os.File, error) {
|
||||
return cb, file, nil
|
||||
}
|
||||
|
||||
func wrapProgressError(err error, filename string) error {
|
||||
func wrapProgressError(err error, event, filename string) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return fmt.Errorf("Error writing Git Media progress to %s: %s", filename, err.Error())
|
||||
return fmt.Errorf("Error writing Git Media %s progress to %s: %s", event, filename, err.Error())
|
||||
}
|
||||
|
@ -48,12 +48,13 @@ func Put(filehash, filename string, cb gitmedia.CopyCallback) error {
|
||||
}
|
||||
|
||||
oid := filepath.Base(filehash)
|
||||
stat, err := os.Stat(filehash)
|
||||
file, err := os.Open(filehash)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
file, err := os.Open(filehash)
|
||||
stat, err := file.Stat()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -63,14 +64,21 @@ func Put(filehash, filename string, cb gitmedia.CopyCallback) error {
|
||||
return err
|
||||
}
|
||||
|
||||
bar := pb.StartNew(int(stat.Size()))
|
||||
fileSize := stat.Size()
|
||||
reader := &gitmedia.CallbackReader{
|
||||
C: cb,
|
||||
TotalSize: fileSize,
|
||||
Reader: file,
|
||||
}
|
||||
|
||||
bar := pb.StartNew(int(fileSize))
|
||||
bar.SetUnits(pb.U_BYTES)
|
||||
bar.Start()
|
||||
|
||||
req.Header.Set("Content-Type", gitMediaType)
|
||||
req.Header.Set("Accept", gitMediaMetaType)
|
||||
req.Body = ioutil.NopCloser(bar.NewProxyReader(file))
|
||||
req.ContentLength = stat.Size()
|
||||
req.Body = ioutil.NopCloser(bar.NewProxyReader(reader))
|
||||
req.ContentLength = fileSize
|
||||
|
||||
fmt.Printf("Sending %s\n", filename)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user