diff --git a/utils/jsonmessage.go b/utils/jsonmessage.go index 7ad4548c38..e22d06eccd 100644 --- a/utils/jsonmessage.go +++ b/utils/jsonmessage.go @@ -50,7 +50,12 @@ func (p *JSONProgress) String() string { total := units.HumanSize(int64(p.Total)) percentage := int(float64(p.Current)/float64(p.Total)*100) / 2 if width > 110 { - pbBox = fmt.Sprintf("[%s>%s] ", strings.Repeat("=", percentage), strings.Repeat(" ", 50-percentage)) + // this number can't be negetive gh#7136 + numSpaces := 0 + if 50-percentage > 0 { + numSpaces = 50 - percentage + } + pbBox = fmt.Sprintf("[%s>%s] ", strings.Repeat("=", percentage), strings.Repeat(" ", numSpaces)) } numbersBox = fmt.Sprintf("%8v/%v", current, total) diff --git a/utils/jsonmessage_test.go b/utils/jsonmessage_test.go index ecf1896762..0ce9492c98 100644 --- a/utils/jsonmessage_test.go +++ b/utils/jsonmessage_test.go @@ -17,13 +17,22 @@ func TestProgress(t *testing.T) { t.Fatalf("Expected empty string, got '%s'", jp.String()) } + expected := " 1 B" jp2 := JSONProgress{Current: 1} - if jp2.String() != " 1 B" { - t.Fatalf("Expected ' 1 B', got '%s'", jp2.String()) + if jp2.String() != expected { + t.Fatalf("Expected %q, got %q", expected, jp2.String()) } + expected = "[=========================> ] 50 B/100 B" jp3 := JSONProgress{Current: 50, Total: 100} - if jp3.String() != "[=========================> ] 50 B/100 B" { - t.Fatalf("Expected '[=========================> ] 50 B/100 B', got '%s'", jp3.String()) + if jp3.String() != expected { + t.Fatalf("Expected %q, got %q", expected, jp3.String()) + } + + // this number can't be negetive gh#7136 + expected = "[==============================================================>] 50 B/40 B" + jp4 := JSONProgress{Current: 50, Total: 40} + if jp4.String() != expected { + t.Fatalf("Expected %q, got %q", expected, jp4.String()) } }