mirror of
				https://github.com/containers/podman.git
				synced 2025-10-31 01:50:50 +08:00 
			
		
		
		
	podman-remote pull: fix duplicate progress outputs
By vendoring the fixes from containers/image. Also add a test (thanks @edsantiago) to make sure we won't regress in the future again. Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
This commit is contained in:
		
							
								
								
									
										5
									
								
								vendor/github.com/containers/image/v5/copy/copy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/containers/image/v5/copy/copy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -237,7 +237,7 @@ func Image(ctx context.Context, policyContext *signature.PolicyContext, destRef, | ||||
|  | ||||
| 	// If reportWriter is not a TTY (e.g., when piping to a file), do not | ||||
| 	// print the progress bars to avoid long and hard to parse output. | ||||
| 	// createProgressBar() will print a single line instead. | ||||
| 	// Instead use printCopyInfo() to print single line "Copying ..." messages. | ||||
| 	progressOutput := reportWriter | ||||
| 	if !isTTY(reportWriter) { | ||||
| 		progressOutput = io.Discard | ||||
| @ -1107,6 +1107,7 @@ func (ic *imageCopier) copyConfig(ctx context.Context, src types.Image) error { | ||||
| 			defer progressPool.Wait() | ||||
| 			bar := ic.c.createProgressBar(progressPool, false, srcInfo, "config", "done") | ||||
| 			defer bar.Abort(false) | ||||
| 			ic.c.printCopyInfo("config", srcInfo) | ||||
|  | ||||
| 			configBlob, err := src.ConfigBlob(ctx) | ||||
| 			if err != nil { | ||||
| @ -1162,6 +1163,8 @@ func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo, to | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	ic.c.printCopyInfo("blob", srcInfo) | ||||
|  | ||||
| 	cachedDiffID := ic.c.blobInfoCache.UncompressedDigest(srcInfo.Digest) // May be "" | ||||
| 	diffIDIsNeeded := ic.diffIDsAreNeeded && cachedDiffID == "" | ||||
| 	// When encrypting to decrypting, only use the simple code path. We might be able to optimize more | ||||
|  | ||||
							
								
								
									
										15
									
								
								vendor/github.com/containers/image/v5/copy/progress_bars.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/containers/image/v5/copy/progress_bars.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -38,7 +38,8 @@ type progressBar struct { | ||||
| } | ||||
|  | ||||
| // createProgressBar creates a progressBar in pool.  Note that if the copier's reportWriter | ||||
| // is io.Discard, the progress bar's output will be discarded | ||||
| // is io.Discard, the progress bar's output will be discarded.  Callers may call printCopyInfo() | ||||
| // to print a single line instead. | ||||
| // | ||||
| // NOTE: Every progress bar created within a progress pool must either successfully | ||||
| // complete or be aborted, or pool.Wait() will hang. That is typically done | ||||
| @ -95,15 +96,21 @@ func (c *copier) createProgressBar(pool *mpb.Progress, partial bool, info types. | ||||
| 			), | ||||
| 		) | ||||
| 	} | ||||
| 	if c.progressOutput == io.Discard { | ||||
| 		c.Printf("Copying %s %s\n", kind, info.Digest) | ||||
| 	} | ||||
| 	return &progressBar{ | ||||
| 		Bar:          bar, | ||||
| 		originalSize: info.Size, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // printCopyInfo prints a "Copying ..." message on the copier if the output is | ||||
| // set to `io.Discard`.  In that case, the progress bars won't be rendered but | ||||
| // we still want to indicate when blobs and configs are copied. | ||||
| func (c *copier) printCopyInfo(kind string, info types.BlobInfo) { | ||||
| 	if c.progressOutput == io.Discard { | ||||
| 		c.Printf("Copying %s %s\n", kind, info.Digest) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // mark100PercentComplete marks the progres bars as 100% complete; | ||||
| // it may do so by possibly advancing the current state if it is below the known total. | ||||
| func (bar *progressBar) mark100PercentComplete() { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Valentin Rothberg
					Valentin Rothberg