From patchwork Sat Jan 30 13:48:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D9929: churn: count lines that look like diff headers but are not From: phabricator X-Patchwork-Id: 48240 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Sat, 30 Jan 2021 13:48:44 +0000 aayjaychan created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY Previously, churn cannot count added lines that start with "++ " or removed lines that start with "-- ". REPOSITORY rHG Mercurial BRANCH stable REVISION DETAIL https://phab.mercurial-scm.org/D9929 AFFECTED FILES hgext/churn.py tests/test-churn.t CHANGE DETAILS To: aayjaychan, #hg-reviewers Cc: mercurial-patches, mercurial-devel diff --git a/tests/test-churn.t b/tests/test-churn.t --- a/tests/test-churn.t +++ b/tests/test-churn.t @@ -195,3 +195,22 @@ alltogether 11 ********************************************************* $ cd .. + +count lines that look like headings but are not + + $ hg init not-headers + $ cd not-headers + $ cat > a < diff + > @@ -195,3 +195,21 @@ + > -- a/tests/test-churn.t + > ++ b/tests/test-churn.t + > EOF + $ hg ci -Am adda -u user1 + adding a + $ hg churn --diffstat + user1 +4/-0 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + $ hg rm a + $ hg ci -Am removea -u user1 + $ hg churn --diffstat + user1 +4/-4 +++++++++++++++++++++++++++--------------------------- diff --git a/hgext/churn.py b/hgext/churn.py --- a/hgext/churn.py +++ b/hgext/churn.py @@ -38,11 +38,16 @@ def changedlines(ui, repo, ctx1, ctx2, fmatch): added, removed = 0, 0 diff = b''.join(patch.diff(repo, ctx1.node(), ctx2.node(), fmatch)) + inhunk = False for l in diff.split(b'\n'): - if l.startswith(b"+") and not l.startswith(b"+++ "): + if inhunk and l.startswith(b"+"): added += 1 - elif l.startswith(b"-") and not l.startswith(b"--- "): + elif inhunk and l.startswith(b"-"): removed += 1 + elif l.startswith(b"@"): + inhunk = True + elif l.startswith(b"d"): + inhunk = False return (added, removed)