mirror of
				https://github.com/restic/restic.git
				synced 2025-10-31 21:31:00 +00:00 
			
		
		
		
	
		
			
	
	
		
			56 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | package ui | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | 	"time" | ||
|  | ) | ||
|  | 
 | ||
|  | func FormatBytes(c uint64) string { | ||
|  | 	b := float64(c) | ||
|  | 	switch { | ||
|  | 	case c > 1<<40: | ||
|  | 		return fmt.Sprintf("%.3f TiB", b/(1<<40)) | ||
|  | 	case c > 1<<30: | ||
|  | 		return fmt.Sprintf("%.3f GiB", b/(1<<30)) | ||
|  | 	case c > 1<<20: | ||
|  | 		return fmt.Sprintf("%.3f MiB", b/(1<<20)) | ||
|  | 	case c > 1<<10: | ||
|  | 		return fmt.Sprintf("%.3f KiB", b/(1<<10)) | ||
|  | 	default: | ||
|  | 		return fmt.Sprintf("%d B", c) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // FormatPercent formats numerator/denominator as a percentage. | ||
|  | func FormatPercent(numerator uint64, denominator uint64) string { | ||
|  | 	if denominator == 0 { | ||
|  | 		return "" | ||
|  | 	} | ||
|  | 
 | ||
|  | 	percent := 100.0 * float64(numerator) / float64(denominator) | ||
|  | 	if percent > 100 { | ||
|  | 		percent = 100 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return fmt.Sprintf("%3.2f%%", percent) | ||
|  | } | ||
|  | 
 | ||
|  | // FormatDuration formats d as FormatSeconds would. | ||
|  | func FormatDuration(d time.Duration) string { | ||
|  | 	sec := uint64(d / time.Second) | ||
|  | 	return FormatSeconds(sec) | ||
|  | } | ||
|  | 
 | ||
|  | // FormatSeconds formats sec as MM:SS, or HH:MM:SS if sec seconds | ||
|  | // is at least an hour. | ||
|  | func FormatSeconds(sec uint64) string { | ||
|  | 	hours := sec / 3600 | ||
|  | 	sec -= hours * 3600 | ||
|  | 	min := sec / 60 | ||
|  | 	sec -= min * 60 | ||
|  | 	if hours > 0 { | ||
|  | 		return fmt.Sprintf("%d:%02d:%02d", hours, min, sec) | ||
|  | 	} | ||
|  | 	return fmt.Sprintf("%d:%02d", min, sec) | ||
|  | } |