[PATCH 5 of 5 v2] check-commit: sort errors by line number

Augie Fackler raf at durin42.com
Thu Jan 14 12:47:17 CST 2016


On Tue, Jan 12, 2016 at 02:56:37AM -0600, timeless wrote:
> # HG changeset patch
> # User timeless <timeless at mozdev.org>
> # Date 1452587678 0
> #      Tue Jan 12 08:34:38 2016 +0000
> # Node ID 4afc76115625c832e62aea33341bffeb83c566ab
> # Parent  cc73958b28c58766d93a6b94d4af52bb2bf14aa9
> check-commit: sort errors by line number

Queued these, thanks.

>
> diff --git a/contrib/check-commit b/contrib/check-commit
> --- a/contrib/check-commit
> +++ b/contrib/check-commit
> @@ -48,28 +48,35 @@
>  def checkcommit(commit, node = None):
>      exitcode = 0
>      printed = node is None
> +    hits = []
>      for exp, msg in errors:
>          m = re.search(exp, commit)
>          if m:
> -            pos = 0
>              end = m.end()
>              trailing = re.search(r'(\\n)+$', exp)
>              if trailing:
>                  end -= len(trailing.group()) / 2
> -            last = ''
> -            for n, l in enumerate(commit.splitlines(True)):
> -                pos += len(l)
> +            hits.append((end, exp, msg))
> +    if hits:
> +        hits.sort()
> +        pos = 0
> +        last = ''
> +        for n, l in enumerate(commit.splitlines(True)):
> +            pos += len(l)
> +            while len(hits):
> +                end, exp, msg = hits[0]
>                  if pos < end:
> -                    last = nonempty(l, last)
> -                else:
> -                    if not printed:
> -                        printed = True
> -                        print "node: %s" % node
> -                    print "%d: %s" % (n, msg)
> -                    print " %s" % nonempty(l, last)[:-1]
> -                    if "BYPASS" not in os.environ:
> -                        exitcode = 1
>                      break
> +                if not printed:
> +                    printed = True
> +                    print "node: %s" % node
> +                print "%d: %s" % (n, msg)
> +                print " %s" % nonempty(l, last)[:-1]
> +                if "BYPASS" not in os.environ:
> +                    exitcode = 1
> +                del hits[0]
> +            last = nonempty(l, last)
> +
>      return exitcode
>
>  def readcommit(node):
> diff --git a/tests/test-contrib-check-commit.t b/tests/test-contrib-check-commit.t
> --- a/tests/test-contrib-check-commit.t
> +++ b/tests/test-contrib-check-commit.t
> @@ -55,15 +55,15 @@
>    >          if opts.get('all'):
>    > EOF
>    $ cat patch-with-long-header.diff | $TESTDIR/../contrib/check-commit
> +  1: username is not an email address
> +   # User timeless
> +  7: summary keyword should be most user-relevant one-word command or topic
> +   transplant/foo: this summary is way too long use Oxford comma (bc) (bug123) (issue 244)
>    7: (BC) needs to be uppercase
>     transplant/foo: this summary is way too long use Oxford comma (bc) (bug123) (issue 244)
> -  7: no space allowed between issue and number
> -   transplant/foo: this summary is way too long use Oxford comma (bc) (bug123) (issue 244)
>    7: use (issueDDDD) instead of bug
>     transplant/foo: this summary is way too long use Oxford comma (bc) (bug123) (issue 244)
> -  1: username is not an email address
> -   # User timeless
> -  7: summary keyword should be most user-relevant one-word command or topic
> +  7: no space allowed between issue and number
>     transplant/foo: this summary is way too long use Oxford comma (bc) (bug123) (issue 244)
>    7: summary line too long (limit is 78)
>     transplant/foo: this summary is way too long use Oxford comma (bc) (bug123) (issue 244)
> @@ -96,16 +96,16 @@
>    $ cat patch-with-long-header.diff | $TESTDIR/../contrib/check-commit
>    1: username is not an email address
>     # User timeless
> +  7: don't capitalize summary lines
> +   This has no topic and ends with a period.
>    7: summary line doesn't start with 'topic: '
>     This has no topic and ends with a period.
> -  7: don't capitalize summary lines
> -   This has no topic and ends with a period.
>    7: don't add trailing period on summary line
>     This has no topic and ends with a period.
> -  19: adds double empty line
> -   +
>    15: adds double empty line
>     +
>    16: adds a function with foo_bar naming
>     + def blah_blah(x):
> +  19: adds double empty line
> +   +
>    [1]
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list