prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  GitCommitBear: body_line_length shall be 72 and not 73
  The standard git commit guidelines suggest wrapping the body at 72 chars. So just replace the default of 73 with 72.
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `bears/vcs/git/GitCommitBear.py`
  Content:
  ```
  1 import re
  2 import shutil
  3 import os
  4 
  5 from coalib.bears.GlobalBear import GlobalBear
  6 from coalib.misc.ContextManagers import change_directory
  7 from coalib.misc.Shell import run_shell_command
  8 from coalib.results.Result import Result
  9 
  10 
  11 class GitCommitBear(GlobalBear):
  12 
  13     @classmethod
  14     def check_prerequisites(cls):
  15         if shutil.which("git") is None:
  16             return "git is not installed."
  17         else:
  18             return True
  19 
  20     def run(self,
  21             shortlog_length: int=50,
  22             body_line_length: int=73,
  23             force_body: bool=False,
  24             allow_empty_commit_message: bool=False,
  25             shortlog_regex: str="",
  26             shortlog_trailing_period: bool=None):
  27         """
  28         Checks the current git commit message at HEAD.
  29 
  30         This bear ensures that the shortlog and body do not exceed a given
  31         line-length and that a newline lies between them.
  32 
  33         :param shortlog_length:            The maximum length of the shortlog.
  34                                            The shortlog is the first line of
  35                                            the commit message. The newline
  36                                            character at end does not count to
  37                                            the length.
  38         :param body_line_length:           The maximum line-length of the body.
  39                                            The newline character at each line
  40                                            end does not count to the length.
  41         :param force_body:                 Whether a body shall exist or not.
  42         :param allow_empty_commit_message: Whether empty commit messages are
  43                                            allowed or not.
  44         :param shortlog_regex:             A regex to check the shortlog with.
  45                                            A full match of this regex is then
  46                                            required. Passing an empty string
  47                                            disable the regex-check.
  48         :param shortlog_trailing_period:   Whether a dot shall be enforced at
  49                                            the end of the shortlog line.
  50                                            Providing ``None`` means
  51                                            "doesn't care".
  52         """
  53         with change_directory(self.get_config_dir() or os.getcwd()):
  54             stdout, stderr = run_shell_command("git log -1 --pretty=%B")
  55 
  56         if stderr:
  57             self.err("git:", repr(stderr))
  58             return
  59 
  60         stdout = stdout.rstrip("\n").splitlines()
  61 
  62         if len(stdout) == 0:
  63             if not allow_empty_commit_message:
  64                 yield Result(self, "HEAD commit has no message.")
  65             return
  66 
  67         yield from self.check_shortlog(shortlog_length,
  68                                        shortlog_regex,
  69                                        shortlog_trailing_period,
  70                                        stdout[0])
  71         yield from self.check_body(body_line_length, force_body, stdout[1:])
  72 
  73     def check_shortlog(self,
  74                        shortlog_length,
  75                        regex,
  76                        shortlog_trailing_period,
  77                        shortlog):
  78         """
  79         Checks the given shortlog.
  80 
  81         :param shortlog_length:          The maximum length of the shortlog.
  82                                          The newline character at end does not
  83                                          count to the length.
  84         :param regex:                    A regex to check the shortlog with.
  85         :param shortlog_trailing_period: Whether a dot shall be enforced at end
  86                                          end or not (or ``None`` for "don't
  87                                          care").
  88         :param shortlog:                 The shortlog message string.
  89         """
  90         diff = len(shortlog) - shortlog_length
  91         if diff > 0:
  92             yield Result(self,
  93                          "Shortlog of HEAD commit is {} character(s) longer "
  94                          "than the limit ({} > {}).".format(
  95                              diff, len(shortlog), shortlog_length))
  96 
  97         if (shortlog[-1] != ".") == shortlog_trailing_period:
  98             yield Result(self,
  99                          "Shortlog of HEAD commit contains no period at end."
  100                          if shortlog_trailing_period else
  101                          "Shortlog of HEAD commit contains a period at end.")
  102 
  103         if regex != "":
  104             match = re.match(regex, shortlog)
  105             # fullmatch() inside re-module exists sadly since 3.4, but we
  106             # support 3.3 so we need to check that the regex matched completely
  107             # ourselves.
  108             if not match or match.end() != len(shortlog):
  109                 yield Result(
  110                     self,
  111                     "Shortlog of HEAD commit does not match given regex.")
  112 
  113     def check_body(self, body_line_length, force_body, body):
  114         """
  115         Checks the given commit body.
  116 
  117         :param body_line_length: The maximum line-length of the body. The
  118                                  newline character at each line end does not
  119                                  count to the length.
  120         :param force_body:       Whether a body shall exist or not.
  121         :param body:             The commit body splitted by lines.
  122         """
  123         if len(body) == 0:
  124             if force_body:
  125                 yield Result(self, "No commit message body at HEAD.")
  126             return
  127 
  128         if body[0] != "":
  129             yield Result(self, "No newline between shortlog and body at HEAD.")
  130             return
  131 
  132         if any(len(line) > body_line_length for line in body[1:]):
  133             yield Result(self, "Body of HEAD commit contains too long lines.")
  134
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/bears/vcs/git/GitCommitBear.py b/bears/vcs/git/GitCommitBear.py
  --- a/bears/vcs/git/GitCommitBear.py
  +++ b/bears/vcs/git/GitCommitBear.py
  @@ -19,7 +19,7 @@
   
       def run(self,
               shortlog_length: int=50,
  -            body_line_length: int=73,
  +            body_line_length: int=72,
               force_body: bool=False,
               allow_empty_commit_message: bool=False,
               shortlog_regex: str="",
  
verification_info: {"golden_diff": "diff --git a/bears/vcs/git/GitCommitBear.py b/bears/vcs/git/GitCommitBear.py\n--- a/bears/vcs/git/GitCommitBear.py\n+++ b/bears/vcs/git/GitCommitBear.py\n@@ -19,7 +19,7 @@\n \n     def run(self,\n             shortlog_length: int=50,\n-            body_line_length: int=73,\n+            body_line_length: int=72,\n             force_body: bool=False,\n             allow_empty_commit_message: bool=False,\n             shortlog_regex: str=\"\",\n", "issue": "GitCommitBear: body_line_length shall be 72 and not 73\nThe standard git commit guidelines suggest wrapping the body at 72 chars. So just replace the default of 73 with 72.\n\n", "before_files": [{"content": "import re\nimport shutil\nimport os\n\nfrom coalib.bears.GlobalBear import GlobalBear\nfrom coalib.misc.ContextManagers import change_directory\nfrom coalib.misc.Shell import run_shell_command\nfrom coalib.results.Result import Result\n\n\nclass GitCommitBear(GlobalBear):\n\n    @classmethod\n    def check_prerequisites(cls):\n        if shutil.which(\"git\") is None:\n            return \"git is not installed.\"\n        else:\n            return True\n\n    def run(self,\n            shortlog_length: int=50,\n            body_line_length: int=73,\n            force_body: bool=False,\n            allow_empty_commit_message: bool=False,\n            shortlog_regex: str=\"\",\n            shortlog_trailing_period: bool=None):\n        \"\"\"\n        Checks the current git commit message at HEAD.\n\n        This bear ensures that the shortlog and body do not exceed a given\n        line-length and that a newline lies between them.\n\n        :param shortlog_length:            The maximum length of the shortlog.\n                                           The shortlog is the first line of\n                                           the commit message. The newline\n                                           character at end does not count to\n                                           the length.\n        :param body_line_length:           The maximum line-length of the body.\n                                           The newline character at each line\n                                           end does not count to the length.\n        :param force_body:                 Whether a body shall exist or not.\n        :param allow_empty_commit_message: Whether empty commit messages are\n                                           allowed or not.\n        :param shortlog_regex:             A regex to check the shortlog with.\n                                           A full match of this regex is then\n                                           required. Passing an empty string\n                                           disable the regex-check.\n        :param shortlog_trailing_period:   Whether a dot shall be enforced at\n                                           the end of the shortlog line.\n                                           Providing ``None`` means\n                                           \"doesn't care\".\n        \"\"\"\n        with change_directory(self.get_config_dir() or os.getcwd()):\n            stdout, stderr = run_shell_command(\"git log -1 --pretty=%B\")\n\n        if stderr:\n            self.err(\"git:\", repr(stderr))\n            return\n\n        stdout = stdout.rstrip(\"\\n\").splitlines()\n\n        if len(stdout) == 0:\n            if not allow_empty_commit_message:\n                yield Result(self, \"HEAD commit has no message.\")\n            return\n\n        yield from self.check_shortlog(shortlog_length,\n                                       shortlog_regex,\n                                       shortlog_trailing_period,\n                                       stdout[0])\n        yield from self.check_body(body_line_length, force_body, stdout[1:])\n\n    def check_shortlog(self,\n                       shortlog_length,\n                       regex,\n                       shortlog_trailing_period,\n                       shortlog):\n        \"\"\"\n        Checks the given shortlog.\n\n        :param shortlog_length:          The maximum length of the shortlog.\n                                         The newline character at end does not\n                                         count to the length.\n        :param regex:                    A regex to check the shortlog with.\n        :param shortlog_trailing_period: Whether a dot shall be enforced at end\n                                         end or not (or ``None`` for \"don't\n                                         care\").\n        :param shortlog:                 The shortlog message string.\n        \"\"\"\n        diff = len(shortlog) - shortlog_length\n        if diff > 0:\n            yield Result(self,\n                         \"Shortlog of HEAD commit is {} character(s) longer \"\n                         \"than the limit ({} > {}).\".format(\n                             diff, len(shortlog), shortlog_length))\n\n        if (shortlog[-1] != \".\") == shortlog_trailing_period:\n            yield Result(self,\n                         \"Shortlog of HEAD commit contains no period at end.\"\n                         if shortlog_trailing_period else\n                         \"Shortlog of HEAD commit contains a period at end.\")\n\n        if regex != \"\":\n            match = re.match(regex, shortlog)\n            # fullmatch() inside re-module exists sadly since 3.4, but we\n            # support 3.3 so we need to check that the regex matched completely\n            # ourselves.\n            if not match or match.end() != len(shortlog):\n                yield Result(\n                    self,\n                    \"Shortlog of HEAD commit does not match given regex.\")\n\n    def check_body(self, body_line_length, force_body, body):\n        \"\"\"\n        Checks the given commit body.\n\n        :param body_line_length: The maximum line-length of the body. The\n                                 newline character at each line end does not\n                                 count to the length.\n        :param force_body:       Whether a body shall exist or not.\n        :param body:             The commit body splitted by lines.\n        \"\"\"\n        if len(body) == 0:\n            if force_body:\n                yield Result(self, \"No commit message body at HEAD.\")\n            return\n\n        if body[0] != \"\":\n            yield Result(self, \"No newline between shortlog and body at HEAD.\")\n            return\n\n        if any(len(line) > body_line_length for line in body[1:]):\n            yield Result(self, \"Body of HEAD commit contains too long lines.\")\n", "path": "bears/vcs/git/GitCommitBear.py"}], "after_files": [{"content": "import re\nimport shutil\nimport os\n\nfrom coalib.bears.GlobalBear import GlobalBear\nfrom coalib.misc.ContextManagers import change_directory\nfrom coalib.misc.Shell import run_shell_command\nfrom coalib.results.Result import Result\n\n\nclass GitCommitBear(GlobalBear):\n\n    @classmethod\n    def check_prerequisites(cls):\n        if shutil.which(\"git\") is None:\n            return \"git is not installed.\"\n        else:\n            return True\n\n    def run(self,\n            shortlog_length: int=50,\n            body_line_length: int=72,\n            force_body: bool=False,\n            allow_empty_commit_message: bool=False,\n            shortlog_regex: str=\"\",\n            shortlog_trailing_period: bool=None):\n        \"\"\"\n        Checks the current git commit message at HEAD.\n\n        This bear ensures that the shortlog and body do not exceed a given\n        line-length and that a newline lies between them.\n\n        :param shortlog_length:            The maximum length of the shortlog.\n                                           The shortlog is the first line of\n                                           the commit message. The newline\n                                           character at end does not count to\n                                           the length.\n        :param body_line_length:           The maximum line-length of the body.\n                                           The newline character at each line\n                                           end does not count to the length.\n        :param force_body:                 Whether a body shall exist or not.\n        :param allow_empty_commit_message: Whether empty commit messages are\n                                           allowed or not.\n        :param shortlog_regex:             A regex to check the shortlog with.\n                                           A full match of this regex is then\n                                           required. Passing an empty string\n                                           disable the regex-check.\n        :param shortlog_trailing_period:   Whether a dot shall be enforced at\n                                           the end of the shortlog line.\n                                           Providing ``None`` means\n                                           \"doesn't care\".\n        \"\"\"\n        with change_directory(self.get_config_dir() or os.getcwd()):\n            stdout, stderr = run_shell_command(\"git log -1 --pretty=%B\")\n\n        if stderr:\n            self.err(\"git:\", repr(stderr))\n            return\n\n        stdout = stdout.rstrip(\"\\n\").splitlines()\n\n        if len(stdout) == 0:\n            if not allow_empty_commit_message:\n                yield Result(self, \"HEAD commit has no message.\")\n            return\n\n        yield from self.check_shortlog(shortlog_length,\n                                       shortlog_regex,\n                                       shortlog_trailing_period,\n                                       stdout[0])\n        yield from self.check_body(body_line_length, force_body, stdout[1:])\n\n    def check_shortlog(self,\n                       shortlog_length,\n                       regex,\n                       shortlog_trailing_period,\n                       shortlog):\n        \"\"\"\n        Checks the given shortlog.\n\n        :param shortlog_length:          The maximum length of the shortlog.\n                                         The newline character at end does not\n                                         count to the length.\n        :param regex:                    A regex to check the shortlog with.\n        :param shortlog_trailing_period: Whether a dot shall be enforced at end\n                                         end or not (or ``None`` for \"don't\n                                         care\").\n        :param shortlog:                 The shortlog message string.\n        \"\"\"\n        diff = len(shortlog) - shortlog_length\n        if diff > 0:\n            yield Result(self,\n                         \"Shortlog of HEAD commit is {} character(s) longer \"\n                         \"than the limit ({} > {}).\".format(\n                             diff, len(shortlog), shortlog_length))\n\n        if (shortlog[-1] != \".\") == shortlog_trailing_period:\n            yield Result(self,\n                         \"Shortlog of HEAD commit contains no period at end.\"\n                         if shortlog_trailing_period else\n                         \"Shortlog of HEAD commit contains a period at end.\")\n\n        if regex != \"\":\n            match = re.match(regex, shortlog)\n            # fullmatch() inside re-module exists sadly since 3.4, but we\n            # support 3.3 so we need to check that the regex matched completely\n            # ourselves.\n            if not match or match.end() != len(shortlog):\n                yield Result(\n                    self,\n                    \"Shortlog of HEAD commit does not match given regex.\")\n\n    def check_body(self, body_line_length, force_body, body):\n        \"\"\"\n        Checks the given commit body.\n\n        :param body_line_length: The maximum line-length of the body. The\n                                 newline character at each line end does not\n                                 count to the length.\n        :param force_body:       Whether a body shall exist or not.\n        :param body:             The commit body splitted by lines.\n        \"\"\"\n        if len(body) == 0:\n            if force_body:\n                yield Result(self, \"No commit message body at HEAD.\")\n            return\n\n        if body[0] != \"\":\n            yield Result(self, \"No newline between shortlog and body at HEAD.\")\n            return\n\n        if any(len(line) > body_line_length for line in body[1:]):\n            yield Result(self, \"Body of HEAD commit contains too long lines.\")\n", "path": "bears/vcs/git/GitCommitBear.py"}]}