prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  dvc: fix version generatio
  Looks like dynamic version got broken https://travis-ci.com/iterative/dvc/jobs/274986530 .
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `dvc/version.py`
  Content:
  ```
  1 # Used in setup.py, so don't pull any additional dependencies
  2 #
  3 # Based on:
  4 #   - https://github.com/python/mypy/blob/master/mypy/version.py
  5 #   - https://github.com/python/mypy/blob/master/mypy/git.py
  6 import os
  7 import subprocess
  8 
  9 
  10 _BASE_VERSION = "0.81.0"
  11 
  12 
  13 def _generate_version(base_version):
  14     """Generate a version with information about the git repository"""
  15     pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  16 
  17     if not _is_git_repo(pkg_dir) or not _have_git():
  18         return base_version
  19 
  20     if _is_release(pkg_dir, base_version) and not _is_dirty(pkg_dir):
  21         return base_version
  22 
  23     return "{base_version}+{short_sha}{dirty}".format(
  24         base_version=base_version,
  25         short_sha=_git_revision(pkg_dir).decode("utf-8")[0:6],
  26         dirty=".mod" if _is_dirty(pkg_dir) else "",
  27     )
  28 
  29 
  30 def _is_git_repo(dir_path):
  31     """Is the given directory version-controlled with git?"""
  32     return os.path.exists(os.path.join(dir_path, ".git"))
  33 
  34 
  35 def _have_git():
  36     """Can we run the git executable?"""
  37     try:
  38         subprocess.check_output(["git", "--help"])
  39         return True
  40     except subprocess.CalledProcessError:
  41         return False
  42     except OSError:
  43         return False
  44 
  45 
  46 def _is_release(dir_path, base_version):
  47     try:
  48         output = subprocess.check_output(
  49             ["git", "describe", "--tags", "--exact-match"],
  50             cwd=dir_path,
  51             stderr=subprocess.STDOUT,
  52         )
  53         tag = output.strip()
  54         return tag == base_version
  55     except subprocess.CalledProcessError:
  56         return False
  57 
  58 
  59 def _git_revision(dir_path):
  60     """Get the SHA-1 of the HEAD of a git repository."""
  61     return subprocess.check_output(
  62         ["git", "rev-parse", "HEAD"], cwd=dir_path
  63     ).strip()
  64 
  65 
  66 def _is_dirty(dir_path):
  67     """Check whether a git repository has uncommitted changes."""
  68     try:
  69         subprocess.check_call(["git", "diff", "--quiet"], cwd=dir_path)
  70         return False
  71     except subprocess.CalledProcessError:
  72         return True
  73 
  74 
  75 __version__ = _generate_version(_BASE_VERSION)
  76
  ```
  --- 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/dvc/version.py b/dvc/version.py
  --- a/dvc/version.py
  +++ b/dvc/version.py
  @@ -49,7 +49,7 @@
               ["git", "describe", "--tags", "--exact-match"],
               cwd=dir_path,
               stderr=subprocess.STDOUT,
  -        )
  +        ).decode("utf-8")
           tag = output.strip()
           return tag == base_version
       except subprocess.CalledProcessError:
  
verification_info: {"golden_diff": "diff --git a/dvc/version.py b/dvc/version.py\n--- a/dvc/version.py\n+++ b/dvc/version.py\n@@ -49,7 +49,7 @@\n             [\"git\", \"describe\", \"--tags\", \"--exact-match\"],\n             cwd=dir_path,\n             stderr=subprocess.STDOUT,\n-        )\n+        ).decode(\"utf-8\")\n         tag = output.strip()\n         return tag == base_version\n     except subprocess.CalledProcessError:\n", "issue": "dvc: fix version generatio\nLooks like dynamic version got broken https://travis-ci.com/iterative/dvc/jobs/274986530 .\r\n\n", "before_files": [{"content": "# Used in setup.py, so don't pull any additional dependencies\n#\n# Based on:\n#   - https://github.com/python/mypy/blob/master/mypy/version.py\n#   - https://github.com/python/mypy/blob/master/mypy/git.py\nimport os\nimport subprocess\n\n\n_BASE_VERSION = \"0.81.0\"\n\n\ndef _generate_version(base_version):\n    \"\"\"Generate a version with information about the git repository\"\"\"\n    pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n\n    if not _is_git_repo(pkg_dir) or not _have_git():\n        return base_version\n\n    if _is_release(pkg_dir, base_version) and not _is_dirty(pkg_dir):\n        return base_version\n\n    return \"{base_version}+{short_sha}{dirty}\".format(\n        base_version=base_version,\n        short_sha=_git_revision(pkg_dir).decode(\"utf-8\")[0:6],\n        dirty=\".mod\" if _is_dirty(pkg_dir) else \"\",\n    )\n\n\ndef _is_git_repo(dir_path):\n    \"\"\"Is the given directory version-controlled with git?\"\"\"\n    return os.path.exists(os.path.join(dir_path, \".git\"))\n\n\ndef _have_git():\n    \"\"\"Can we run the git executable?\"\"\"\n    try:\n        subprocess.check_output([\"git\", \"--help\"])\n        return True\n    except subprocess.CalledProcessError:\n        return False\n    except OSError:\n        return False\n\n\ndef _is_release(dir_path, base_version):\n    try:\n        output = subprocess.check_output(\n            [\"git\", \"describe\", \"--tags\", \"--exact-match\"],\n            cwd=dir_path,\n            stderr=subprocess.STDOUT,\n        )\n        tag = output.strip()\n        return tag == base_version\n    except subprocess.CalledProcessError:\n        return False\n\n\ndef _git_revision(dir_path):\n    \"\"\"Get the SHA-1 of the HEAD of a git repository.\"\"\"\n    return subprocess.check_output(\n        [\"git\", \"rev-parse\", \"HEAD\"], cwd=dir_path\n    ).strip()\n\n\ndef _is_dirty(dir_path):\n    \"\"\"Check whether a git repository has uncommitted changes.\"\"\"\n    try:\n        subprocess.check_call([\"git\", \"diff\", \"--quiet\"], cwd=dir_path)\n        return False\n    except subprocess.CalledProcessError:\n        return True\n\n\n__version__ = _generate_version(_BASE_VERSION)\n", "path": "dvc/version.py"}], "after_files": [{"content": "# Used in setup.py, so don't pull any additional dependencies\n#\n# Based on:\n#   - https://github.com/python/mypy/blob/master/mypy/version.py\n#   - https://github.com/python/mypy/blob/master/mypy/git.py\nimport os\nimport subprocess\n\n\n_BASE_VERSION = \"0.81.0\"\n\n\ndef _generate_version(base_version):\n    \"\"\"Generate a version with information about the git repository\"\"\"\n    pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n\n    if not _is_git_repo(pkg_dir) or not _have_git():\n        return base_version\n\n    if _is_release(pkg_dir, base_version) and not _is_dirty(pkg_dir):\n        return base_version\n\n    return \"{base_version}+{short_sha}{dirty}\".format(\n        base_version=base_version,\n        short_sha=_git_revision(pkg_dir).decode(\"utf-8\")[0:6],\n        dirty=\".mod\" if _is_dirty(pkg_dir) else \"\",\n    )\n\n\ndef _is_git_repo(dir_path):\n    \"\"\"Is the given directory version-controlled with git?\"\"\"\n    return os.path.exists(os.path.join(dir_path, \".git\"))\n\n\ndef _have_git():\n    \"\"\"Can we run the git executable?\"\"\"\n    try:\n        subprocess.check_output([\"git\", \"--help\"])\n        return True\n    except subprocess.CalledProcessError:\n        return False\n    except OSError:\n        return False\n\n\ndef _is_release(dir_path, base_version):\n    try:\n        output = subprocess.check_output(\n            [\"git\", \"describe\", \"--tags\", \"--exact-match\"],\n            cwd=dir_path,\n            stderr=subprocess.STDOUT,\n        ).decode(\"utf-8\")\n        tag = output.strip()\n        return tag == base_version\n    except subprocess.CalledProcessError:\n        return False\n\n\ndef _git_revision(dir_path):\n    \"\"\"Get the SHA-1 of the HEAD of a git repository.\"\"\"\n    return subprocess.check_output(\n        [\"git\", \"rev-parse\", \"HEAD\"], cwd=dir_path\n    ).strip()\n\n\ndef _is_dirty(dir_path):\n    \"\"\"Check whether a git repository has uncommitted changes.\"\"\"\n    try:\n        subprocess.check_call([\"git\", \"diff\", \"--quiet\"], cwd=dir_path)\n        return False\n    except subprocess.CalledProcessError:\n        return True\n\n\n__version__ = _generate_version(_BASE_VERSION)\n", "path": "dvc/version.py"}]}