Compare commits

...

2 Commits

Author SHA1 Message Date
cclecle
96250682ec fix missing user/mail for git 2023-03-18 00:59:35 +00:00
cclecle
014e8ac0d2 fix + more unittests 2023-03-18 00:49:33 +00:00
2 changed files with 114 additions and 28 deletions

View File

@@ -37,10 +37,19 @@ def _exec(cmd: str, root: str | os.PathLike | None = None) -> list[str]:
"""
try:
stdout = subprocess.check_output(cmd, shell=True, text=True, cwd=root)
#stdout = subprocess.check_output(cmd, shell=True, text=True, cwd=root)
p = subprocess.run(cmd.split(), text=True, cwd=root, capture_output=True)
if re.search("not a git repository",p.stderr):
raise gitversionhelper.repository.notAGitRepository()
if re.search("fatal:",p.stderr):
raise gitversionhelper.unknownGITFatalError()
if int(p.returncode) < 0:
raise gitversionhelper.unknownGITError
except subprocess.CalledProcessError as e:
stdout = e.output
lines = stdout.splitlines()
raise RuntimeError(e.output)
lines = p.stdout.splitlines()
return [line.rstrip() for line in lines if line.rstrip()]
class gitversionhelperException(Exception):
@@ -52,12 +61,18 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
"""
class wrongArguments(gitversionhelperException):
pass
class unknownGITError(gitversionhelperException):
pass
class unknownGITFatalError(unknownGITError):
pass
class repository:
"""
class containing methods focusing on repository
"""
class repositoryException(gitversionhelperException):
pass
class notAGitRepository(repositoryException):
pass
class repositoryDirty(repositoryException):
pass
@classmethod
@@ -115,7 +130,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
if len(res)==0:
raise cls.tagNotFound("no tag found in commit history")
elif len(res)!=1:
raise cls.MoreThanOneTag("multiple tags on same commit is unsupported")
raise cls.moreThanOneTag("multiple tags on same commit is unsupported")
return res[0]
@classmethod
@@ -153,6 +168,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
"Auto" : None
}
}
__versionReseted = False
class versionException(gitversionhelperException):
pass
class noValidVersion(versionException):
@@ -294,9 +310,13 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
saved_kwargs = copy(kwargs)
if "formated_output" in kwargs:
del saved_kwargs["formated_output"]
_v = cls.getLastVersion(**saved_kwargs)
amount = gitversionhelper.tag.getDistanceFromTag(_v.raw,**kwargs)
_v = _v.bump(amount,**kwargs)
if cls.__versionReseted == False:
amount = gitversionhelper.tag.getDistanceFromTag(_v.raw,**kwargs)
_v = _v.bump(amount,**kwargs)
if ((cls.__OptDict["formated_output"] in kwargs) and (kwargs[cls.__OptDict["formated_output"]] is True)):
return _v.doFormatVersion(**kwargs)
return _v
@@ -319,10 +339,13 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
bAutoVersionStd = True
lastTag=cls.MetaVersion.raw
cls.__versionReseted = False
try:
lastTag = gitversionhelper.tag.getLastTag(**kwargs)
except gitversionhelper.tag.tagNotFound:
logging.warning('tag not found, reseting versionning')
cls.__versionReseted = True
bFound = False
if VersionStd == "SemVer" or (bAutoVersionStd is True) :
@@ -422,23 +445,3 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
revpattern="-pre"
revcount=f".{pre_count}"
return OutputFormat.format(major=inputversion.major,minor=inputversion.minor,patch=patch,revpattern=revpattern,revcount=revcount)
#print(gitversionhelper.head.isDirty())
#print(gitversionhelper.tag.getTags())
#print(gitversionhelper.tag.getLastTag())
#print(gitversionhelper.tag.getLastTag(same_branch=True))
#print(gitversionhelper.tag.getDistanceFromLastTag())
#print(gitversionhelper.tag.getDistanceFromLastTag(same_branch=True))
#print(gitversionhelper.version.getLastVersion())
#print(gitversionhelper.version.getLastVersion(same_branch=True,version_std="PEP440"))
#print(gitversionhelper.version.getLastVersion(same_branch=True,version_std="PEP440"))
#print(gitversionhelper.version.getLastVersion(same_branch=False,version_std="PEP440"))
#from setuptools_git_versioning import version_from_git
#print(str(version_from_git(tag_filter="^\d+\.\d+\.\d+$",dev_template = "{tag}.post{ccount}",sort_by="v:refname")),end ="")

View File

@@ -28,6 +28,8 @@ class Test_gitversionhelper(unittest.TestCase):
self.TmpWorkingDirPath=pathlib.Path(self.TmpWorkingDir.name)
os.chdir(self.TmpWorkingDirPath)
os.system("git init")
os.system('git config --local user.name "john doe"')
os.system('git config --local user.email "john@doe.org"')
def _test_version_readback(self,tag:str,**kwargs):
with open("demofile.txt", "w+t") as tmpFile:
@@ -685,7 +687,88 @@ class Test_gitversionhelper(unittest.TestCase):
self.assertEqual("V_1_0",pygitversionhelper.gitversionhelper.version.getCurrentVersion(bump_type="dev",bump_dev_strategy="pre-major",output_format="V_{major}_{minor}",formated_output=True))
def test_nominal_emptyrepo(self):
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion()
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self.assertEqual(_v.raw, "0.1.0")
self.assertIsInstance(_v.major, int)
self.assertIsInstance(_v.minor, int)
self.assertIsInstance(_v.patch, int)
self.assertIsInstance(_v.pre_count, int)
self.assertIsInstance(_v.post_count, int)
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,1)
self.assertEqual(_v.patch,0)
self.assertEqual(_v.pre_count,0)
self.assertEqual(_v.post_count,0)
self._test_version_format(_v,"0.1.0")
def test_defect_dirty(self):
_v=self._test_version_readback("0.1.1",version_std="PEP440")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue225")
with self.assertRaises(pygitversionhelper.gitversionhelper.repository.repositoryDirty) as context:
pygitversionhelper.gitversionhelper.version.getCurrentVersion()
def test_defect_wrongargument_git_sortargs(self):
with self.assertRaises(pygitversionhelper.gitversionhelper.wrongArguments) as context:
pygitversionhelper.gitversionhelper.tag.getTags(sort="toto")
def test_defect_git_notagfound(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
os.system("git commit -m \"first commit\"")
with self.assertRaises(pygitversionhelper.gitversionhelper.tag.tagNotFound) as context:
pygitversionhelper.gitversionhelper.tag.getLastTag()
""" This test is impossible to do
def test_defect_git_multipletagsfound(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
os.system("git commit -m \"first commit\"")
os.system(f"git tag 0.1.0")
os.system(f"git tag 0.2.0")
with self.assertRaises(pygitversionhelper.gitversionhelper.tag.moreThanOneTag) as context:
pygitversionhelper.gitversionhelper.tag.getLastTag()
"""
def test_defect_wrongargument_bump_type(self):
_v=self._test_version_readback("0.1.1",version_std="PEP440")
with self.assertRaises(pygitversionhelper.gitversionhelper.wrongArguments) as context:
pygitversionhelper.gitversionhelper.version.getCurrentVersion(bump_type="toto")
def test_defect_wrongargument_bump_dev_strategy(self):
_v=self._test_version_readback("0.1.1",version_std="PEP440")
with self.assertRaises(pygitversionhelper.gitversionhelper.wrongArguments) as context:
pygitversionhelper.gitversionhelper.version.getCurrentVersion(bump_dev_strategy="toto")
def tearDown(self):
os.chdir("/")
class Test_gitversionhelperNoRepo(unittest.TestCase):
def setUp(self):
self.TmpWorkingDir=tempfile.TemporaryDirectory()
self.TmpWorkingDirPath=pathlib.Path(self.TmpWorkingDir.name)
os.chdir(self.TmpWorkingDirPath)
def test_defect_norepo(self):
with self.assertRaises(pygitversionhelper.gitversionhelper.repository.notAGitRepository) as context:
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion()
def tearDown(self):
os.chdir("/")
#print(gitversionhelper.tag.getLastTag(same_branch=True))
#print(gitversionhelper.tag.getDistanceFromLastTag(same_branch=True))
#print(gitversionhelper.version.getLastVersion(same_branch=True,version_std="PEP440"))
#print(gitversionhelper.version.getLastVersion(same_branch=True,version_std="PEP440"))
#print(gitversionhelper.version.getLastVersion(same_branch=False,version_std="PEP440"))