diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -1787,18 +1787,17 @@ def diffstatdata(lines): diffre = re.compile('^diff .*-r [a-z0-9]+\s(.*)$') results = [] - filename, adds, removes = None, 0, 0 + filename, adds, removes, isbinary = None, 0, 0, False def addresult(): if filename: - isbinary = adds == 0 and removes == 0 results.append((filename, adds, removes, isbinary)) for line in lines: if line.startswith('diff'): addresult() # set numbers to 0 anyway when starting new file - adds, removes = 0, 0 + adds, removes, isbinary = 0, 0, False if line.startswith('diff --git'): filename = gitre.search(line).group(1) elif line.startswith('diff -r'): @@ -1808,6 +1807,9 @@ def diffstatdata(lines): adds += 1 elif line.startswith('-') and not line.startswith('---'): removes += 1 + elif (line.startswith('GIT binary patch') or + line.startswith('Binary file')): + isbinary = True addresult() return results @@ -1832,7 +1834,7 @@ def diffstat(lines, width=80, git=False) return max(i * graphwidth // maxtotal, int(bool(i))) for filename, adds, removes, isbinary in stats: - if git and isbinary: + if isbinary: count = 'Bin' else: count = adds + removes diff --git a/tests/test-diffstat.t b/tests/test-diffstat.t --- a/tests/test-diffstat.t +++ b/tests/test-diffstat.t @@ -36,19 +36,21 @@ Narrow diffstat: $ hg ci -m appenda $ printf '\0' > c - $ hg add c + $ touch d + $ hg add c d Binary diffstat: $ hg diff --stat - c | 0 + c | Bin 1 files changed, 0 insertions(+), 0 deletions(-) Binary git diffstat: $ hg diff --stat --git c | Bin - 1 files changed, 0 insertions(+), 0 deletions(-) + d | 0 + 2 files changed, 0 insertions(+), 0 deletions(-) $ hg ci -m createb @@ -58,7 +60,7 @@ Binary git diffstat: Filename with spaces diffstat: $ hg diff --stat - file with spaces | 0 + file with spaces | Bin 1 files changed, 0 insertions(+), 0 deletions(-) Filename with spaces git diffstat: