prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  [Backport] [scm-track] Fix commit command
  ### Original feature issue
  
  - PR: #3021
  
  ### Target release
  
  - [x] release33
  - [ ] release32
  - [ ] release30
  
  ### Reason
  
  Stabilizations of Cobbler 3.3.4
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `cobbler/modules/scm_track.py`
  Content:
  ```
  1 """
  2 (C) 2009, Red Hat Inc.
  3 Michael DeHaan <michael.dehaan AT gmail>
  4 
  5 This program is free software; you can redistribute it and/or modify
  6 it under the terms of the GNU General Public License as published by
  7 the Free Software Foundation; either version 2 of the License, or
  8 (at your option) any later version.
  9 
  10 This program is distributed in the hope that it will be useful,
  11 but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 GNU General Public License for more details.
  14 
  15 You should have received a copy of the GNU General Public License
  16 along with this program; if not, write to the Free Software
  17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  18 02110-1301  USA
  19 """
  20 
  21 
  22 import os
  23 
  24 import cobbler.utils as utils
  25 
  26 from cobbler.cexceptions import CX
  27 
  28 
  29 def register() -> str:
  30     """
  31     This pure python trigger acts as if it were a legacy shell-trigger, but is much faster. The return of this method
  32     indicates the trigger type
  33     :return: Always: ``/var/lib/cobbler/triggers/change/*``
  34     """
  35 
  36     return "/var/lib/cobbler/triggers/change/*"
  37 
  38 
  39 def run(api, args):
  40     """
  41     Runs the trigger, meaning in this case track any changed which happen to a config or data file.
  42 
  43     :param api: The api instance of the Cobbler server. Used to look up if scm_track_enabled is true.
  44     :param args: The parameter is currently unused for this trigger.
  45     :return: 0 on success, otherwise an exception is risen.
  46     """
  47     settings = api.settings()
  48 
  49     if not settings.scm_track_enabled:
  50         # feature disabled
  51         return 0
  52 
  53     mode = str(settings.scm_track_mode).lower()
  54     author = str(settings.scm_track_author)
  55     push_script = str(settings.scm_push_script)
  56 
  57     if mode == "git":
  58         old_dir = os.getcwd()
  59         os.chdir("/var/lib/cobbler")
  60         if os.getcwd() != "/var/lib/cobbler":
  61             raise CX("danger will robinson")
  62 
  63         if not os.path.exists("/var/lib/cobbler/.git"):
  64             utils.subprocess_call(["git", "init"], shell=False)
  65 
  66         # FIXME: If we know the remote user of an XMLRPC call use them as the author
  67         utils.subprocess_call(["git", "add", "--all", "collections"], shell=False)
  68         utils.subprocess_call(["git", "add", "--all", "templates"], shell=False)
  69         utils.subprocess_call(["git", "add", "--all", "snippets"], shell=False)
  70         utils.subprocess_call(["git", "commit", "-m", "API", "update", "--author", author], shell=False)
  71 
  72         if push_script:
  73             utils.subprocess_call([push_script], shell=False)
  74 
  75         os.chdir(old_dir)
  76         return 0
  77 
  78     elif mode == "hg":
  79         # use mercurial
  80         old_dir = os.getcwd()
  81         os.chdir("/var/lib/cobbler")
  82         if os.getcwd() != "/var/lib/cobbler":
  83             raise CX("danger will robinson")
  84 
  85         if not os.path.exists("/var/lib/cobbler/.hg"):
  86             utils.subprocess_call(["hg", "init"], shell=False)
  87 
  88         # FIXME: If we know the remote user of an XMLRPC call use them as the user
  89         utils.subprocess_call(["hg", "add collections"], shell=False)
  90         utils.subprocess_call(["hg", "add templates"], shell=False)
  91         utils.subprocess_call(["hg", "add snippets"], shell=False)
  92         utils.subprocess_call(["hg", "commit", "-m", "API", "update", "--user", author], shell=False)
  93 
  94         if push_script:
  95             utils.subprocess_call([push_script], shell=False)
  96 
  97         os.chdir(old_dir)
  98         return 0
  99 
  100     else:
  101         raise CX("currently unsupported SCM type: %s" % mode)
  102
  ```
  --- 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/cobbler/modules/scm_track.py b/cobbler/modules/scm_track.py
  --- a/cobbler/modules/scm_track.py
  +++ b/cobbler/modules/scm_track.py
  @@ -67,7 +67,7 @@
           utils.subprocess_call(["git", "add", "--all", "collections"], shell=False)
           utils.subprocess_call(["git", "add", "--all", "templates"], shell=False)
           utils.subprocess_call(["git", "add", "--all", "snippets"], shell=False)
  -        utils.subprocess_call(["git", "commit", "-m", "API", "update", "--author", author], shell=False)
  +        utils.subprocess_call(["git", "commit", "-m", "API update", "--author", author], shell=False)
   
           if push_script:
               utils.subprocess_call([push_script], shell=False)
  
verification_info: {"golden_diff": "diff --git a/cobbler/modules/scm_track.py b/cobbler/modules/scm_track.py\n--- a/cobbler/modules/scm_track.py\n+++ b/cobbler/modules/scm_track.py\n@@ -67,7 +67,7 @@\n         utils.subprocess_call([\"git\", \"add\", \"--all\", \"collections\"], shell=False)\n         utils.subprocess_call([\"git\", \"add\", \"--all\", \"templates\"], shell=False)\n         utils.subprocess_call([\"git\", \"add\", \"--all\", \"snippets\"], shell=False)\n-        utils.subprocess_call([\"git\", \"commit\", \"-m\", \"API\", \"update\", \"--author\", author], shell=False)\n+        utils.subprocess_call([\"git\", \"commit\", \"-m\", \"API update\", \"--author\", author], shell=False)\n \n         if push_script:\n             utils.subprocess_call([push_script], shell=False)\n", "issue": "[Backport] [scm-track] Fix commit command\n### Original feature issue\r\n\r\n- PR: #3021\r\n\r\n### Target release\r\n\r\n- [x] release33\r\n- [ ] release32\r\n- [ ] release30\r\n\r\n### Reason\r\n\r\nStabilizations of Cobbler 3.3.4\r\n\n", "before_files": [{"content": "\"\"\"\n(C) 2009, Red Hat Inc.\nMichael DeHaan <michael.dehaan AT gmail>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\n02110-1301  USA\n\"\"\"\n\n\nimport os\n\nimport cobbler.utils as utils\n\nfrom cobbler.cexceptions import CX\n\n\ndef register() -> str:\n    \"\"\"\n    This pure python trigger acts as if it were a legacy shell-trigger, but is much faster. The return of this method\n    indicates the trigger type\n    :return: Always: ``/var/lib/cobbler/triggers/change/*``\n    \"\"\"\n\n    return \"/var/lib/cobbler/triggers/change/*\"\n\n\ndef run(api, args):\n    \"\"\"\n    Runs the trigger, meaning in this case track any changed which happen to a config or data file.\n\n    :param api: The api instance of the Cobbler server. Used to look up if scm_track_enabled is true.\n    :param args: The parameter is currently unused for this trigger.\n    :return: 0 on success, otherwise an exception is risen.\n    \"\"\"\n    settings = api.settings()\n\n    if not settings.scm_track_enabled:\n        # feature disabled\n        return 0\n\n    mode = str(settings.scm_track_mode).lower()\n    author = str(settings.scm_track_author)\n    push_script = str(settings.scm_push_script)\n\n    if mode == \"git\":\n        old_dir = os.getcwd()\n        os.chdir(\"/var/lib/cobbler\")\n        if os.getcwd() != \"/var/lib/cobbler\":\n            raise CX(\"danger will robinson\")\n\n        if not os.path.exists(\"/var/lib/cobbler/.git\"):\n            utils.subprocess_call([\"git\", \"init\"], shell=False)\n\n        # FIXME: If we know the remote user of an XMLRPC call use them as the author\n        utils.subprocess_call([\"git\", \"add\", \"--all\", \"collections\"], shell=False)\n        utils.subprocess_call([\"git\", \"add\", \"--all\", \"templates\"], shell=False)\n        utils.subprocess_call([\"git\", \"add\", \"--all\", \"snippets\"], shell=False)\n        utils.subprocess_call([\"git\", \"commit\", \"-m\", \"API\", \"update\", \"--author\", author], shell=False)\n\n        if push_script:\n            utils.subprocess_call([push_script], shell=False)\n\n        os.chdir(old_dir)\n        return 0\n\n    elif mode == \"hg\":\n        # use mercurial\n        old_dir = os.getcwd()\n        os.chdir(\"/var/lib/cobbler\")\n        if os.getcwd() != \"/var/lib/cobbler\":\n            raise CX(\"danger will robinson\")\n\n        if not os.path.exists(\"/var/lib/cobbler/.hg\"):\n            utils.subprocess_call([\"hg\", \"init\"], shell=False)\n\n        # FIXME: If we know the remote user of an XMLRPC call use them as the user\n        utils.subprocess_call([\"hg\", \"add collections\"], shell=False)\n        utils.subprocess_call([\"hg\", \"add templates\"], shell=False)\n        utils.subprocess_call([\"hg\", \"add snippets\"], shell=False)\n        utils.subprocess_call([\"hg\", \"commit\", \"-m\", \"API\", \"update\", \"--user\", author], shell=False)\n\n        if push_script:\n            utils.subprocess_call([push_script], shell=False)\n\n        os.chdir(old_dir)\n        return 0\n\n    else:\n        raise CX(\"currently unsupported SCM type: %s\" % mode)\n", "path": "cobbler/modules/scm_track.py"}], "after_files": [{"content": "\"\"\"\n(C) 2009, Red Hat Inc.\nMichael DeHaan <michael.dehaan AT gmail>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA\n02110-1301  USA\n\"\"\"\n\n\nimport os\n\nimport cobbler.utils as utils\n\nfrom cobbler.cexceptions import CX\n\n\ndef register() -> str:\n    \"\"\"\n    This pure python trigger acts as if it were a legacy shell-trigger, but is much faster. The return of this method\n    indicates the trigger type\n    :return: Always: ``/var/lib/cobbler/triggers/change/*``\n    \"\"\"\n\n    return \"/var/lib/cobbler/triggers/change/*\"\n\n\ndef run(api, args):\n    \"\"\"\n    Runs the trigger, meaning in this case track any changed which happen to a config or data file.\n\n    :param api: The api instance of the Cobbler server. Used to look up if scm_track_enabled is true.\n    :param args: The parameter is currently unused for this trigger.\n    :return: 0 on success, otherwise an exception is risen.\n    \"\"\"\n    settings = api.settings()\n\n    if not settings.scm_track_enabled:\n        # feature disabled\n        return 0\n\n    mode = str(settings.scm_track_mode).lower()\n    author = str(settings.scm_track_author)\n    push_script = str(settings.scm_push_script)\n\n    if mode == \"git\":\n        old_dir = os.getcwd()\n        os.chdir(\"/var/lib/cobbler\")\n        if os.getcwd() != \"/var/lib/cobbler\":\n            raise CX(\"danger will robinson\")\n\n        if not os.path.exists(\"/var/lib/cobbler/.git\"):\n            utils.subprocess_call([\"git\", \"init\"], shell=False)\n\n        # FIXME: If we know the remote user of an XMLRPC call use them as the author\n        utils.subprocess_call([\"git\", \"add\", \"--all\", \"collections\"], shell=False)\n        utils.subprocess_call([\"git\", \"add\", \"--all\", \"templates\"], shell=False)\n        utils.subprocess_call([\"git\", \"add\", \"--all\", \"snippets\"], shell=False)\n        utils.subprocess_call([\"git\", \"commit\", \"-m\", \"API update\", \"--author\", author], shell=False)\n\n        if push_script:\n            utils.subprocess_call([push_script], shell=False)\n\n        os.chdir(old_dir)\n        return 0\n\n    elif mode == \"hg\":\n        # use mercurial\n        old_dir = os.getcwd()\n        os.chdir(\"/var/lib/cobbler\")\n        if os.getcwd() != \"/var/lib/cobbler\":\n            raise CX(\"danger will robinson\")\n\n        if not os.path.exists(\"/var/lib/cobbler/.hg\"):\n            utils.subprocess_call([\"hg\", \"init\"], shell=False)\n\n        # FIXME: If we know the remote user of an XMLRPC call use them as the user\n        utils.subprocess_call([\"hg\", \"add collections\"], shell=False)\n        utils.subprocess_call([\"hg\", \"add templates\"], shell=False)\n        utils.subprocess_call([\"hg\", \"add snippets\"], shell=False)\n        utils.subprocess_call([\"hg\", \"commit\", \"-m\", \"API\", \"update\", \"--user\", author], shell=False)\n\n        if push_script:\n            utils.subprocess_call([push_script], shell=False)\n\n        os.chdir(old_dir)\n        return 0\n\n    else:\n        raise CX(\"currently unsupported SCM type: %s\" % mode)\n", "path": "cobbler/modules/scm_track.py"}]}