Skip to content

Commit

Permalink
Remove version stamping
Browse files Browse the repository at this point in the history
This replaces it with a simple use of importlib.metadata.version,
but that doesn't necessarily achieve the goals of version stamping,
if it is a goal for git.__version__ to be "git" when GitPython is
imported from modules from a local directory and not site-packages.
  • Loading branch information
EliahKagan committed Apr 1, 2024
1 parent 5364053 commit e8535b9
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 51 deletions.
15 changes: 11 additions & 4 deletions git/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,16 @@
"to_hex_sha",
]

__version__ = "git"
__version__: str

import sys
import warnings

from typing import Any, List, Optional, Sequence, TYPE_CHECKING, Tuple, Union

if TYPE_CHECKING:
from types import ModuleType

import warnings

from gitdb.util import to_hex_sha

from git.exc import (
Expand Down Expand Up @@ -193,7 +194,13 @@ def _warned_import(message: str, fullname: str) -> "ModuleType":


def _getattr(name: str) -> Any:
# TODO: If __version__ is made dynamic and lazily fetched, put that case right here.
if name == "__version__":
if sys.version_info >= (3, 8):
from importlib.metadata import version
else:
from importlib_metadata import version

return version("GitPython")

if name == "util":
return _warned_import(
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
gitdb>=4.0.1,<5
importlib-metadata;python_version<"3.8"
typing-extensions>=3.7.4.3;python_version<"3.8"
47 changes: 0 additions & 47 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
#!/usr/bin/env python

import os
from pathlib import Path
import sys
from typing import Sequence

from setuptools import setup, find_packages
from setuptools.command.build_py import build_py as _build_py
from setuptools.command.sdist import sdist as _sdist


def _read_content(path: str) -> str:
Expand All @@ -21,50 +16,8 @@ def _read_content(path: str) -> str:
long_description = _read_content("README.md")


class build_py(_build_py):
def run(self) -> None:
init = os.path.join(self.build_lib, "git", "__init__.py")
if os.path.exists(init):
os.unlink(init)
_build_py.run(self)
_stamp_version(init)
self.byte_compile([init])


class sdist(_sdist):
def make_release_tree(self, base_dir: str, files: Sequence) -> None:
_sdist.make_release_tree(self, base_dir, files)
orig = os.path.join("git", "__init__.py")
assert os.path.exists(orig), orig
dest = os.path.join(base_dir, orig)
if hasattr(os, "link") and os.path.exists(dest):
os.unlink(dest)
self.copy_file(orig, dest)
_stamp_version(dest)


def _stamp_version(filename: str) -> None:
found, out = False, []
try:
with open(filename) as f:
for line in f:
if "__version__ =" in line:
line = line.replace('"git"', "'%s'" % version)
found = True
out.append(line)
except OSError:
print("Couldn't find file %s to stamp version" % filename, file=sys.stderr)

if found:
with open(filename, "w") as f:
f.writelines(out)
else:
print("WARNING: Couldn't find version line in file %s" % filename, file=sys.stderr)


setup(
name="GitPython",
cmdclass={"build_py": build_py, "sdist": sdist},
version=version,
description="GitPython is a Python library used to interact with Git repositories",
author="Sebastian Thiel, Michael Trier",
Expand Down

0 comments on commit e8535b9

Please sign in to comment.