Przeglądaj źródła

Merge pull request #3287 from vieux/fix_progressbar_display_push

fix progressbar in docker push
Michael Crosby 11 lat temu
rodzic
commit
81e596e272
4 zmienionych plików z 16 dodań i 11 usunięć
  1. 5 0
      registry/registry.go
  2. 1 0
      server.go
  3. 1 1
      utils/jsonmessage.go
  4. 9 10
      utils/progressreader.go

+ 5 - 0
registry/registry.go

@@ -448,6 +448,11 @@ func (r *Registry) PushImageLayerRegistry(imgID string, layer io.Reader, registr
 	if err != nil {
 		return "", fmt.Errorf("Failed to upload layer: %s", err)
 	}
+	if rc, ok := layer.(io.Closer); ok {
+		if err := rc.Close(); err != nil {
+			return "", err
+		}
+	}
 	defer res.Body.Close()
 
 	if res.StatusCode != 200 {

+ 1 - 0
server.go

@@ -1284,6 +1284,7 @@ func (srv *Server) pushImage(r *registry.Registry, out io.Writer, remote, imgID,
 		return "", err
 	}
 
+	out.Write(sf.FormatProgress(utils.TruncateID(imgData.ID), "Image successfully pushed", nil))
 	return imgData.Checksum, nil
 }
 

+ 1 - 1
utils/jsonmessage.go

@@ -52,7 +52,7 @@ func (p *JSONProgress) String() string {
 	}
 	numbersBox = fmt.Sprintf("%8v/%v", current, total)
 
-	if p.Start > 0 {
+	if p.Start > 0 && percentage < 50 {
 		fromStart := time.Now().UTC().Sub(time.Unix(int64(p.Start), 0))
 		perEntry := fromStart / time.Duration(p.Current)
 		left := time.Duration(p.Total-p.Current) * perEntry

+ 9 - 10
utils/progressreader.go

@@ -7,21 +7,18 @@ import (
 
 // Reader with progress bar
 type progressReader struct {
-	reader   io.ReadCloser // Stream to read from
-	output   io.Writer     // Where to send progress bar to
-	progress JSONProgress
-	//	readTotal    int    // Expected stream length (bytes)
-	//	readProgress int    // How much has been read so far (bytes)
+	reader     io.ReadCloser // Stream to read from
+	output     io.Writer     // Where to send progress bar to
+	progress   JSONProgress
 	lastUpdate int // How many bytes read at least update
 	ID         string
 	action     string
-	//	template   string // Template to print. Default "%v/%v (%v)"
-	sf      *StreamFormatter
-	newLine bool
+	sf         *StreamFormatter
+	newLine    bool
 }
 
 func (r *progressReader) Read(p []byte) (n int, err error) {
-	read, err := io.ReadCloser(r.reader).Read(p)
+	read, err := r.reader.Read(p)
 	r.progress.Current += read
 	updateEvery := 1024 * 512 //512kB
 	if r.progress.Total > 0 {
@@ -41,7 +38,9 @@ func (r *progressReader) Read(p []byte) (n int, err error) {
 	return read, err
 }
 func (r *progressReader) Close() error {
-	return io.ReadCloser(r.reader).Close()
+	r.progress.Current = r.progress.Total
+	r.output.Write(r.sf.FormatProgress(r.ID, r.action, &r.progress))
+	return r.reader.Close()
 }
 func ProgressReader(r io.ReadCloser, size int, output io.Writer, sf *StreamFormatter, newline bool, ID, action string) *progressReader {
 	return &progressReader{