Compare commits

...

8 Commits

Author SHA1 Message Date
cclecle
3ce09a0194 fix typo 2023-03-18 21:04:03 +00:00
cclecle
961f92d9c6 update doc and docstring 2023-03-18 21:02:49 +00:00
cclecle
a1cf4983ff improve code quality 2023-03-18 20:21:59 +00:00
cclecle
c9e6f4f436 improve detection of wrong case: both pre and post index + test 2023-03-18 20:20:11 +00:00
cclecle
7d9f2a7792 improve coverage and unittest and quality 2023-03-18 20:11:14 +00:00
cclecle
a223500509 cleanup code 2023-03-18 19:38:29 +00:00
cclecle
04578b3066 fix typing + add formated_output option to bump
add more unittest
2023-03-18 19:34:26 +00:00
cclecle
2598a41227 fix kwargs 2023-03-18 09:25:43 +00:00
4 changed files with 796 additions and 304 deletions

View File

@@ -3,46 +3,30 @@
![](docs-static/Library.jpg)
# Python project template
# pyGitVersionHelper
A nice template to start a blank python projet.
This template automate a lot of handy things and allow CI/CD automatic releases generation.
A tiny library to help versioning management of git python project
It is also collectings data to feed Jenkins build.
Checkout [Latest Documentation](https://chacha.ddns.net/mkdocs-web/chacha/pychachadummyproject/{{branch}}/latest/).
Checkout [Latest Documentation](https://chacha.ddns.net/mkdocs-web/chacha/pygitversionhelper/{{branch}}/latest/).
## Features
### Generic pipeline skeleton:
- Prepare
- GetCode
- BuildPackage
- Install
- CheckCode
- PlotMetrics
- RunUnitTests
- GenDOC
- PostRelease
- list tags
- get last tag
- get last version
- get current version (bump)
- convert / switch from SemVer to PEP440 (both ways)
- automatic version format detection (SemVer by default)
### CI/CD Environment
- Jenkins
- Gitea (with patch for dynamic Readme variables: https://chacha.ddns.net/gitea/chacha/GiteaMarkupVariable)
- Docker
- MkDocsWeb
### CI/CD Helper libs
- VirtualEnv
- Changelog generation based on commits
- copier
- pylint + pylint_json2html
- mypy
- unittest + xmlrunner + junitparser + junit2htmlreport
- mkdocs
# Options
- restrict to same branch
- both SemVer and PEP440 support
- custom output format
- configurable default bump type major, minor, patch or dev
- configurable default bump type: post, pre-patch, pre-minor, pre-major
- ignore non-version tag
- force version format
### Python project
- Full .toml implementation
- .whl automatic generation
- dynamic versionning using git repository
- embedded unit-test
# Process
- CI/CD developpment: Gitea / Jenkins + few python libs
- Generated documentation through mkdocs
- CI/CD on Linux, manually tested in Windows environnement

View File

@@ -1,16 +1,105 @@
# Usage
## Pulvinar dolor
Donec dapibus est fermentum justo volutpat condimentum. Integer quis nunc neque. Donec dictum vehicula justo, in facilisis ex tincidunt in.
Vivamus sollicitudin sem dui, id mollis orci facilisis ut. Proin sed pulvinar dolor. Donec volutpat commodo urna imperdiet pulvinar. Fusce eget aliquam risus.
Vivamus viverra luctus ex, in finibus mi. Nullam elementum dapibus mollis. Ut suscipit volutpat ex, quis feugiat lacus consectetur eu.
## Installation
From master repository:
## Condimentum faucibus
Quisque auctor egestas sem, luctus suscipit ex maximus vitae. Duis facilisis augue et condimentum faucibus.
Donec cursus, enim a sagittis egestas, lectus lorem eleifend libero, at tincidunt leo magna at libero.
Nunc eros velit, suscipit luctus tempor vel, finibus et est. Curabitur efficitur pretium pulvinar.
Donec urna lectus, vulputate quis turpis sed, placerat congue urna. Phasellus aliquet fermentum quam, non auctor elit porta nec. Morbi eu ligula at nisl ultricies condimentum vitae id ante.
python -m pip install git+https://chacha.ddns.net/gitea/chacha/pygitversionhelper.git@master
## Aliquam lacinia
In volutpat lorem ex, et fringilla nibh faucibus quis. Mauris et arcu elementum, auctor dui vitae, egestas arcu. Duis sit amet aliquam quam.
Phasellus a odio turpis. Etiam tristique mi eu enim varius, eget facilisis est vestibulum. Aliquam lacinia nec purus sed luctus. Cras at laoreet erat.
From local .whl file:
python -m pip install pygitversionhelper-<VERSION>-py3-none-any.whl
From public repository:
TBD
## Import in your project
Add this line on the top of your python script:
#from pygitversionhelper import gitversionhelper
(optionnal)If you need to catch exception from this module:
#from pygitversionhelper import gitversionhelperException
## Basic API
All the API commands are static and so it is not needed to create instantiate any object.
They are all executed in the current active directory.
One easy way to change directory:
import os
os.chdir("<YOUR DIRECTORY>")
### sublib: repository
To check if a repository is dirty:
if gitversionhelper.repository.isDirty():
print("repository is dirty")
### sublib: tag
List all tags (default to taggerdate order):
for tag in gitversionhelper.tag.getTags():
print(f"found tag: {tag}")
List all tags (using git refname order):
for tag in gitversionhelper.tag.getTags("v:refname"):
print(f"found tag: {tag}")
Get the last tag:
print(f"most recent repository tag: {gitversionhelper.tag.getLastTag()}")
Get the last tag (only on same branch):
print(f"most recent repository tag: {gitversionhelper.tag.getLastTag(same_branch=True)}")
Get the distance from HEAD to last tag:
print(f"number of commit since last tag: {gitversionhelper.tag.getDistanceFromTag()}")
Get the distance from HEAD to last tag (only on same branch):
print(f"number of commit since last tag: {gitversionhelper.tag.getDistanceFromTag(same_branch=True)}")
### sublib: version
Get the last found version in the repository (return MetaVersion object):
print(f"most recent repository version: {gitversionhelper.tag.getLastVersion()}")
Get the last found version in the repository (return formated string):
print(f"most recent repository version: {gitversionhelper.tag.getLastVersion(formated_output=True)}")
Others kwargs available to this function:
- version_std: string to force a version standard for rendering ("PEP440" or "SemVer")
- same_branch: boolean to force searching on same branch
- ignore_unknown_tags: boolean to allow unknown tag to be ignored
Get the current version of the repository, including bumped one if the last one is not tagged (return MetaVersion object):
print(f"most recent repository version: {gitversionhelper.tag.getCurrentVersion()}")
kwargs available to this function:
- All same args as getLastVersion()
- bump_type: if version need to be pump, allow to configure next release update type: major, minor, patch, dev
- bump_dev_strategy: if bump_type is dev, allow to choose dev update strategy: post, pre-patch, pre-minor, pre-major
A version object can also be manually formated:
_version = gitversionhelper.tag.getCurrentVersion()
_version.doFormatVersion()
#or
gitversionhelper.version.doFormatVersion(_version)
kwargs available to those function:
- output_format: string to choose a rendering format ("Auto","PEP440" or "SemVer")
## Limitations
- MultiThreading and async behavior is not tested.
- Multiple tag on the same commit is not supported.
- Branch filter when searching for a version is only tested with -no-ff strategy

View File

@@ -7,13 +7,27 @@
# work. If not, see <https://creativecommons.org/licenses/by-nc-sa/4.0/>.
"""
This module is the main gitversionhelper file, containing all the code.
This project aim to be kept compact and focused on helping doing handy
things with git when it deal with project versions/tags.
This project try to help doing handy operations with git when
dealing with project versioning and tags on python project -
at leat for project using PEP440 or SemVer standards.
One requirement is to keep it compact and to not cover too much fancy features.
This is the reason why it is one single file with nested classes.
=> Design is on-purpose poorly expandable to keep the scope light.
This library is maid for repository using tag as version.
Support for non-version tags is optional and not well tested.
This module is the main project file, containing all the code.
Read the read me for more information.
Check the unittest s for usage samples.
Note:
Other Parameters are **kwargs
"""
from __future__ import annotations
from typing import TYPE_CHECKING
import os
import subprocess
@@ -23,10 +37,6 @@ import logging
from packaging.version import VERSION_PATTERN as packaging_VERSION_PATTERN
# Only imports the below statements during type checking
if TYPE_CHECKING:
from typing import Union
def _exec(cmd: str, root: str | os.PathLike | None = None) -> list[str]:
"""
helper function to handle system cmd execution
@@ -37,15 +47,13 @@ def _exec(cmd: str, root: str | os.PathLike | None = None) -> list[str]:
a list of command's return lines
"""
p = subprocess.run(cmd.split(), text=True, cwd=root, capture_output=True, check=False)
p = subprocess.run(cmd.split(), text=True, cwd=root, capture_output=True, check=False, timeout=2)
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
if re.search("fatal:",p.stderr): #pragma: nocover
raise gitversionhelper.unknownGITFatalError(p.stderr)
if int(p.returncode) < 0: #pragma: nocover
raise gitversionhelper.unknownGITError(p.stderr)
lines = p.stdout.splitlines()
return [line.rstrip() for line in lines if line.rstrip()]
@@ -124,7 +132,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
"""
@classmethod
def getTags(cls,sort:str = "version:refname") -> list[str]:
def getTags(cls,sort:str = "taggerdate",**kwargs) -> list[str]:
"""
retrieve all tags from a repository
Args:
@@ -132,39 +140,44 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
Returns:
the tags list
"""
if sort not in cls.__validGitTagSort:
raise gitversionhelper.wrongArguments("sort option not in allowed list")
return _exec(f"git tag -l --sort={sort}")
if ((cls.__OptDict["same_branch"] in kwargs) and (kwargs[cls.__OptDict["same_branch"]] is True)):
currentBranch = _exec("git rev-parse --abbrev-ref HEAD")
return list(reversed(_exec(f"git tag --merged {currentBranch[0]} --sort={sort}")))
return list(reversed(_exec(f"git tag -l --sort={sort}")))
@classmethod
def getLastTag(cls,**kwargs) -> Union[str,None]:
def getLastTag(cls,**kwargs) -> str | None:
"""
retrieve the last tag from a repository
Kwargs:
Keyword Arguments:
same_branch(bool): force searching only in the same branch
Returns:
the tag
"""
if ((cls.__OptDict["same_branch"] in kwargs) and (kwargs[cls.__OptDict["same_branch"]] is True)):
res = _exec("git describe --tags --abbrev=0")
res = _exec("git describe --tags --first-parent --abbrev=0")
else:
res = _exec("git rev-list --tags --max-count=1")
res = _exec("git rev-list --tags --date-order --max-count=1")
if len(res)==1:
res = _exec(f"git describe --tags {res[0]}")
if len(res)==0:
raise cls.tagNotFound("no tag found in commit history")
if len(res)!=1:
if len(res)!=1: #pragma: nocover
raise cls.moreThanOneTag("multiple tags on same commit is unsupported")
return res[0]
@classmethod
def getDistanceFromTag(cls,tag=None,**kwargs) -> int:
def getDistanceFromTag(cls,tag:str=None,**kwargs) -> int:
"""
retrieve the distance between HEAD and tag in the repository
Arguments:
tag: reference tag, if None the most recent one will be used
Kwargs:
Keyword Arguments:
same_branch(bool): force searching only in the same branch
Returns:
the tag
@@ -179,15 +192,15 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
"""
__OptDict = { "version_std": "version_std",
"formated_output": "formated_output",
"output_format": "output_format"}
"output_format": "output_format",
"ignore_unknown_tags": "ignore_unknown_tags"}
DefaultInputFormat = "Auto"
VersionStds = { "SemVer" : { "regex" : r"^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)"\
r"(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)"\
r"(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?"\
r"(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$",
"regex_preversion_num": r"(?:\.)(?P<num>(?:\d+(?!\w))+)",
"regex_build_num" : r"(?:\.)(?P<num>(?:\d+(?!\w))+)"
"regex_preversion_num": r"(?:\.)(?P<num>(?:\d+(?!\w))+)",
"regex_build_num" : r"(?:\.)(?P<num>(?:\d+(?!\w))+)"
},
"PEP440" : { "regex" : packaging_VERSION_PATTERN,
"Auto" : None
@@ -204,24 +217,31 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
no valid version found exception
"""
class PreAndPostVersionUnsupported(versionException):
"""
pre and post release can not be present at the same time
"""
class MetaVersion:
"""
generic version object
"""
__OptDict = { "bump_type": "bump_type",
"bump_dev_strategy": "bump_dev_strategy"}
__OptDict = { "bump_type": "bump_type",
"bump_dev_strategy": "bump_dev_strategy",
"formated_output": "formated_output"}
DefaultBumpType = "patch"
BumpTypes = ["major","minor","patch","dev"]
DefaultBumpDevStrategy = "post"
BumpDevStrategys = ["post","pre-patch","pre-minor","pre-major"]
version_std = "None"
major: int = 0
minor: int = 1
patch: int = 0
pre_count:int = 0
post_count:int = 0
raw:str = "0.1.0"
version_std: str = "None"
major: int = 0
minor: int = 1
patch: int = 0
pre_count:int = 0
post_count:int = 0
raw:str = "0.1.0"
def __init__(self,version_std,major=0,minor=1,patch=0,pre_count=0,post_count=0,raw="0.1.0"): #pylint: disable=R0913
self.version_std = version_std
@@ -236,7 +256,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
def _getBumpDevStrategy(cls,**kwargs) -> str:
"""
get selected bump_dev_strategy
Kwargs:
Keyword Arguments:
bump_dev_strategy(str): the given bump_dev_strategy (can be None)
Returns:
Kwargs given bump_dev_strategy or the default one.
@@ -253,7 +273,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
def _getBumpType(cls,**kwargs) -> str:
"""
get selected bump_type
Kwargs:
Keyword Arguments:
bump_type(str): the given bump_type (can be None)
Returns:
Kwargs given bump_type or the default one.
@@ -266,10 +286,10 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
raise gitversionhelper.wrongArguments(f"invalid {cls.__OptDict['bump_type']} requested")
return BumpType
def bump(self,amount:int=1,**kwargs): # pylint: disable=R0912
def bump(self,amount:int=1,**kwargs) -> gitversionhelper.version.MetaVersion | str : # pylint: disable=R0912
"""
bump the version to the next one
Kwargs:
Keyword Arguments:
bump_type(str): the given bump_type (can be None)
bump_dev_strategy(str): the given bump_dev_strategy (can be None)
Returns:
@@ -285,7 +305,8 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
_v.pre_count = _v.pre_count + amount
else:
_v.post_count = _v.post_count + amount
elif BumpDevStrategy in ["pre-patch","pre-minor","pre-major"]:
#elif BumpDevStrategy in ["pre-patch","pre-minor","pre-major"]:
else:
if _v.post_count > 0:
_v.post_count = _v.post_count + amount
else:
@@ -295,7 +316,8 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
elif BumpDevStrategy == "pre-minor":
_v.minor = _v.minor + 1
_v.patch = 0
elif BumpDevStrategy == "pre-major":
#elif BumpDevStrategy == "pre-major":
else:
_v.major = _v.major + 1
_v.minor = 0
_v.patch = 0
@@ -305,27 +327,32 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
_v.major = _v.major + amount
elif BumpType == "minor":
_v.minor = _v.minor + amount
elif BumpType == "patch":
#elif BumpType == "patch":
else:
_v.patch = _v.patch + amount
_v.pre_count=0
_v.post_count=0
_v.raw=_v.doFormatVersion(**kwargs)
if ((self.__OptDict["formated_output"] in kwargs) and (kwargs[self.__OptDict["formated_output"]] is True)):
return _v.doFormatVersion(**kwargs)
return _v
def doFormatVersion(self,**kwargs):
def doFormatVersion(self,**kwargs) -> str:
"""
output a formated version string
Keyword Arguments:
output_format: output format to render ("Auto" or "PEP440" or "SemVer")
Returns:
formated version string
"""
return gitversionhelper.version.doFormatVersion(self,**kwargs)
@classmethod
def _getVersionStd(cls,**kwargs):
def _getVersionStd(cls,**kwargs) -> str:
"""
get selected version_std
Kwargs:
Keyword Arguments:
version_std(str): the given version_std (can be None)
Returns:
Kwargs given version_std or the default one.
@@ -339,13 +366,15 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
return VersionStd
@classmethod
def getCurrentVersion(cls,**kwargs) -> Union[str,MetaVersion]:
def getCurrentVersion(cls,**kwargs) -> MetaVersion | str :
"""
get the current version or bump depending of repository state
Kwargs:
Keyword Arguments:
version_std(str): the given version_std (can be None)
same_branch(bool): force searching only in the same branch
formated_output(bool) : output a formated version string
bump_type(str): the given bump_type (can be None)
bump_dev_strategy(str): the given bump_dev_strategy (can be None)
Returns:
the last version
"""
@@ -360,41 +389,32 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
if not cls.__versionReseted:
amount = gitversionhelper.tag.getDistanceFromTag(_v.raw,**kwargs)
_v = _v.bump(amount,**kwargs)
_v = _v.bump(amount,**saved_kwargs)
if ((cls.__OptDict["formated_output"] in kwargs) and (kwargs[cls.__OptDict["formated_output"]] is True)):
return _v.doFormatVersion(**kwargs)
return _v
@classmethod
def getLastVersion(cls,**kwargs) -> Union[str,MetaVersion]: # pylint: disable=R0914, R0912, R0915
def _parseTag(cls,tag,**kwargs): # pylint: disable=R0914, R0912, R0915
"""get the last version from tags
Arguments:
tag: the tag to be parsed
Keyword Arguments:
version_std(str): the given version_std (can be None)
same_branch(bool): force searching only in the same branch
formated_output(bool) : output a formated version string
ignore_unknown_tags(bool): skip tags with not decoded versions (default to False)
Returns:
the last version
"""
VersionStd = cls._getVersionStd(**kwargs)
bAutoVersionStd = False
if VersionStd == "Auto":
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) :
_r=re.compile(r"^\s*" + cls.VersionStds["SemVer"]["regex"] + r"\s*$", re.VERBOSE | \
re.IGNORECASE)
_m = re.match(_r,lastTag)
_m = re.match(_r,tag)
if not _m:
pass
else:
@@ -421,7 +441,7 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
if VersionStd == "PEP440" or ( (bAutoVersionStd is True) and (bFound is not True)):
_r=re.compile(r"^\s*" + cls.VersionStds["PEP440"]["regex"] + r"\s*$", re.VERBOSE | \
re.IGNORECASE)
_m = re.match(_r,lastTag)
_m = re.match(_r,tag)
if not _m:
pass
else:
@@ -437,18 +457,58 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
VersionStd = "PEP440"
if not bFound :
raise gitversionhelper.version.noValidVersion("no valid version found in tags")
raise gitversionhelper.version.noValidVersion("no valid version found in tags")
if pre_count > 0 and post_count > 0:
raise cls.PreAndPostVersionUnsupported("can not parse a version with both pre" \
" and post release number.")
return cls.MetaVersion(VersionStd, major, minor, patch, pre_count, post_count, tag)
_v = cls.MetaVersion(VersionStd, major, minor, patch, pre_count, post_count, lastTag)
@classmethod
def getLastVersion(cls,**kwargs) -> MetaVersion | str : # pylint: disable=R0914, R0912, R0915
"""get the last version from tags
Keyword Arguments:
version_std(str): the given version_std (can be None)
same_branch(bool): force searching only in the same branch
formated_output(bool) : output a formated version string
ignore_unknown_tags(bool): skip tags with not decoded versions (default to False)
Returns:
the last version
"""
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
_v=None
try:
_v=cls._parseTag(lastTag,**kwargs)
except gitversionhelper.version.noValidVersion as _ex:
if ((cls.__OptDict["ignore_unknown_tags"] in kwargs) and (kwargs[cls.__OptDict["ignore_unknown_tags"]] is True)):
tags = gitversionhelper.tag.getTags(sort= "taggerdate",**kwargs)
_v = None
for _tag in tags:
try:
_v=cls._parseTag(_tag,**kwargs)
break
except gitversionhelper.version.noValidVersion:
continue
if _v is None:
raise gitversionhelper.version.noValidVersion() from _ex
if ((cls.__OptDict["formated_output"] in kwargs) and (kwargs[cls.__OptDict["formated_output"]] is True)):
return _v.doFormatVersion(**kwargs)
return _v
@classmethod
def doFormatVersion(cls,inputversion:MetaVersion,**kwargs):
def doFormatVersion(cls,inputversion:MetaVersion,**kwargs) -> str:
"""
output a formated version string
Keyword Arguments:
output_format: output format to render ("Auto" or "PEP440" or "SemVer")
Args:
inputversion: version to be rendered
Returns:
@@ -472,7 +532,8 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
if OutputFormat is None:
OutputFormat = "{major}.{minor}.{patch}{revpattern}{revcount}"
if post_count > 0 and pre_count > 0:
raise RuntimeError("pre and post release can not be present at the same time")
raise gitversionhelper.version.PreAndPostVersionUnsupported("cannot output a version with both pre " \
"and post release number.")
if VersionStd == "PEP440":
if post_count > 0:
revpattern=".post"
@@ -480,7 +541,8 @@ class gitversionhelper: # pylint: disable=too-few-public-methods
elif pre_count > 0:
revpattern=".pre"
revcount=f"{pre_count}"
elif VersionStd == "SemVer":
#elif VersionStd == "SemVer":
else:
if post_count > 0:
revpattern="+post"
revcount=f".{post_count}"

View File

@@ -12,8 +12,7 @@ import tempfile
import os
import pathlib
import re
from contextlib import redirect_stdout,redirect_stderr
import copy
print(__name__)
print(__package__)
@@ -38,7 +37,7 @@ class Test_gitversionhelper(unittest.TestCase):
os.system("git add .")
os.system("git commit -m \"first commit\"")
os.system(f"git tag {tag}")
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(**kwargs)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
@@ -55,6 +54,7 @@ class Test_gitversionhelper(unittest.TestCase):
self.assertEqual(int(_m.group("MAJ")),_v.major)
self.assertEqual(int(_m.group("MIN")),_v.minor)
self.assertEqual(int(_m.group("PATCH")),_v.patch)
return _v
def _test_version_format(self,_v:pygitversionhelper.gitversionhelper.version.MetaVersion,tag:str,**kwargs):
@@ -65,130 +65,141 @@ class Test_gitversionhelper(unittest.TestCase):
def _test_version_readback_simple(self,tag:str,**kwargs):
_v=self._test_version_readback(tag,**kwargs)
self._test_version_format(_v,tag,**kwargs)
def test_nominal__version__formated_output(self):
_v = pygitversionhelper.gitversionhelper.version.MetaVersion("PEP440",
1,
0,
0,
0,
0,
"1.0.0")
self.assertEqual("1.0.1", _v.bump(formated_output=True))
self.assertEqual("2.0.0", _v.bump(formated_output=True,bump_type="major"))
def test_nominal_version_auto_1(self):
def test_nominal__version__auto_1(self):
self._test_version_readback_simple("0.0.1")
def test_nominal_version_auto_2(self):
def test_nominal__version__auto_2(self):
self._test_version_readback_simple("0.0.2")
def test_nominal_version_auto_3(self):
def test_nominal__version__auto_3(self):
self._test_version_readback_simple("0.1.0")
def test_nominal_version_auto_4(self):
def test_nominal__version__auto_4(self):
self._test_version_readback_simple("0.1.1")
def test_nominal_version_auto_5(self):
def test_nominal__version__auto_5(self):
self._test_version_readback_simple("1.0.0")
def test_nominal_version_auto_6(self):
def test_nominal__version__auto_6(self):
self._test_version_readback_simple("1.1.0")
def test_nominal_version_auto_7(self):
def test_nominal__version__auto_7(self):
self._test_version_readback_simple("1.2.0")
def test_nominal_version_auto_8(self):
def test_nominal__version__auto_8(self):
self._test_version_readback_simple("1.1.1")
def test_nominal_version_auto_9(self):
def test_nominal__version__auto_9(self):
self._test_version_readback_simple("1.2.1")
def test_nominal_version_auto_PEP440_post(self):
def test_nominal__version__auto_PEP440_post(self):
self._test_version_readback_simple("1.2.1.post1")
def test_nominal_version_auto_PEP440_pre(self):
def test_nominal__version__auto_PEP440_pre(self):
self._test_version_readback_simple("1.2.1.pre1")
def test_nominal_version_auto_PEP440_post_2(self):
def test_nominal__version__auto_PEP440_post_2(self):
self._test_version_readback_simple("1.2.1.post10")
def test_nominal_version_auto_PEP440_pre_2(self):
def test_nominal__version__auto_PEP440_pre_2(self):
self._test_version_readback_simple("1.2.1.pre10")
def test_nominal_version_auto_SemVer_post(self):
def test_nominal__version__auto_SemVer_post(self):
self._test_version_readback_simple("1.2.1+post.1")
def test_nominal_version_auto_SemVer_pre(self):
def test_nominal__version__auto_SemVer_pre(self):
self._test_version_readback_simple("1.2.1-pre.1")
def test_nominal_version_auto_SemVer_post_2(self):
def test_nominal__version__auto_SemVer_post_2(self):
self._test_version_readback_simple("1.2.1+post.10")
def test_nominal_version_auto_Semver_pre_2(self):
def test_nominal__version__auto_Semver_pre_2(self):
self._test_version_readback_simple("1.2.1-pre.10")
def test_nominal_version_PEP440_1(self):
def test_nominal__version__PEP440_1(self):
self._test_version_readback_simple("0.0.1",version_std="PEP440")
def test_nominal_version_PEP440_2(self):
def test_nominal__version__PEP440_2(self):
self._test_version_readback_simple("0.0.2",version_std="PEP440")
def test_nominal_version_PEP440_3(self):
def test_nominal__version__PEP440_3(self):
self._test_version_readback_simple("0.1.0",version_std="PEP440")
def test_nominal_version_PEP440_4(self):
def test_nominal__version__PEP440_4(self):
self._test_version_readback_simple("0.1.1",version_std="PEP440")
def test_nominal_version_PEP440_5(self):
def test_nominal__version__PEP440_5(self):
self._test_version_readback_simple("1.0.0",version_std="PEP440")
def test_nominal_version_PEP440_6(self):
def test_nominal__version__PEP440_6(self):
self._test_version_readback_simple("1.1.0",version_std="PEP440")
def test_nominal_version_PEP440_7(self):
def test_nominal__version__PEP440_7(self):
self._test_version_readback_simple("1.2.0",version_std="PEP440")
def test_nominal_version_PEP440_8(self):
def test_nominal__version__PEP440_8(self):
self._test_version_readback_simple("1.1.1",version_std="PEP440")
def test_nominal_version_PEP440_9(self):
def test_nominal__version__PEP440_9(self):
self._test_version_readback_simple("1.2.1",version_std="PEP440")
def test_nominal_version_PEP440_post(self):
def test_nominal__version__PEP440_post(self):
self._test_version_readback_simple("1.2.1.post1",version_std="PEP440")
def test_nominal_version_PEP440_pre(self):
def test_nominal__version__PEP440_pre(self):
self._test_version_readback_simple("1.2.1.pre1",version_std="PEP440")
def test_nominal_version_PEP440_post_2(self):
def test_nominal__version__PEP440_post_2(self):
self._test_version_readback_simple("1.2.1.post10",version_std="PEP440")
def test_nominal_version_PEP440_pre_2(self):
def test_nominal__version__PEP440_pre_2(self):
self._test_version_readback_simple("1.2.1.pre10",version_std="PEP440")
def test_nominal_version_SemVer_1(self):
def test_nominal__version__SemVer_1(self):
self._test_version_readback_simple("0.0.1",version_std="SemVer")
def test_nominal_version_SemVer_2(self):
def test_nominal__version__SemVer_2(self):
self._test_version_readback_simple("0.0.2",version_std="SemVer")
def test_nominal_version_SemVer_3(self):
def test_nominal__version__SemVer_3(self):
self._test_version_readback_simple("0.1.0",version_std="SemVer")
def test_nominal_version_SemVer_4(self):
def test_nominal__version__SemVer_4(self):
self._test_version_readback_simple("0.1.1",version_std="SemVer")
def test_nominal_version_SemVer_5(self):
def test_nominal__version__SemVer_5(self):
self._test_version_readback_simple("1.0.0",version_std="SemVer")
def test_nominal_version_SemVer_6(self):
def test_nominal__version__SemVer_6(self):
self._test_version_readback_simple("1.1.0",version_std="SemVer")
def test_nominal_version_SemVer_7(self):
def test_nominal__version__SemVer_7(self):
self._test_version_readback_simple("1.2.0",version_std="SemVer")
def test_nominal_version_SemVer_8(self):
def test_nominal__version__SemVer_8(self):
self._test_version_readback_simple("1.1.1",version_std="SemVer")
def test_nominal_version_SemVer_9(self):
def test_nominal__version__SemVer_9(self):
self._test_version_readback_simple("1.2.1",version_std="SemVer")
def test_nominal_version_SemVer_post(self):
def test_nominal__version__SemVer_post(self):
self._test_version_readback_simple("1.2.1+post.1",version_std="SemVer")
def test_nominal_version_SemVer_pre(self):
def test_nominal__version__SemVer_pre(self):
self._test_version_readback_simple("1.2.1-pre.1",version_std="SemVer")
def test_nominal_version_SemVer_post_2(self):
def test_nominal__version__SemVer_post_2(self):
self._test_version_readback_simple("1.2.1+post.10",version_std="SemVer")
def test_nominal_version_SemVer_pre_2(self):
def test_nominal__version__SemVer_pre_2(self):
self._test_version_readback_simple("1.2.1-pre.10",version_std="SemVer")
def test_nominal_version_post_PEP440_to_SemVer(self):
def test_nominal__version__post_PEP440_to_SemVer(self):
_v=self._test_version_readback("1.2.1.post10",version_std="PEP440")
self._test_version_format(_v,"1.2.1+post.10",version_std="SemVer")
def test_nominal_version_post_SemVer_to_PEP440(self):
def test_nominal__version__post_SemVer_to_PEP440(self):
_v=self._test_version_readback("1.2.1+post.10",version_std="SemVer")
self._test_version_format(_v,"1.2.1.post10",version_std="PEP440")
def test_nominal_version_pre_PEP440_to_SemVer(self):
def test_nominal__version__pre_PEP440_to_SemVer(self):
_v=self._test_version_readback("1.2.1.pre10",version_std="PEP440")
self._test_version_format(_v,"1.2.1-pre.10",version_std="SemVer")
def test_nominal_version_pre_SemVer_to_PEP440(self):
def test_nominal__version__pre_SemVer_to_PEP440(self):
_v=self._test_version_readback("1.2.1-pre.10",version_std="SemVer")
self._test_version_format(_v,"1.2.1.pre10",version_std="PEP440")
def test_nominal_version_post_SemVer_nonum(self):
def test_nominal__version__post_SemVer_nonum(self):
_v=self._test_version_readback("1.2.1+post",version_std="SemVer")
self._test_version_format(_v,"1.2.1+post.1",version_std="SemVer")
def test_nominal_version_post_SemVer_nonum_random(self):
def test_nominal__version__post_SemVer_nonum_random(self):
_v=self._test_version_readback("1.2.1+toto",version_std="SemVer")
self._test_version_format(_v,"1.2.1+post.1",version_std="SemVer")
def test_nominal_version_pre_SemVer_nonum(self):
def test_nominal__version__pre_SemVer_nonum(self):
_v=self._test_version_readback("1.2.1-pre",version_std="SemVer")
self._test_version_format(_v,"1.2.1-pre.1",version_std="SemVer")
def test_nominal_version_pre_SemVer_nonum_random(self):
def test_nominal__version__pre_SemVer_nonum_random(self):
_v=self._test_version_readback("1.2.1-toto",version_std="SemVer")
self._test_version_format(_v,"1.2.1-pre.1",version_std="SemVer")
def test_version_pump_SemVer(self,**kwargs):
def test_nominal__version___pump_SemVer(self):
_v = self._test_version_readback("1.0.0",version_std="SemVer")
_v = _v.bump()
@@ -314,7 +325,7 @@ class Test_gitversionhelper(unittest.TestCase):
self.assertEqual(_v.post_count, 2)
self.assertEqual(_v.doFormatVersion(), "2.1.5+post.2")
def test_version_pump_PEP440(self,**kwargs):
def test_nominal__version___pump_PEP440(self):
_v = self._test_version_readback("1.0.0",version_std="PEP440")
_v = _v.bump()
@@ -440,16 +451,16 @@ class Test_gitversionhelper(unittest.TestCase):
self.assertEqual(_v.post_count, 2)
self.assertEqual(_v.doFormatVersion(), "2.1.5.post2")
def test_nominal_version_SemVer_zeroRev(self):
def test_nominal__version___SemVer_zeroRev(self):
_v=self._test_version_readback("0.0.0",version_std="SemVer")
self._test_version_format(_v,"0.0.0",version_std="SemVer")
def test_nominal_version_PEP440_zeroRev(self):
def test_nominal__version___PEP440_zeroRev(self):
_v=self._test_version_readback("0.0.0",version_std="PEP440")
self._test_version_format(_v,"0.0.0",version_std="PEP440")
def test_nominal_version_PEP440_noRev_noTag(self):
def test_nominal__version___PEP440_noRev_noTag(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
@@ -459,20 +470,13 @@ class Test_gitversionhelper(unittest.TestCase):
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self._test_version_format(_v,"0.1.0",version_std="PEP440")
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._test_version_format(_v,"0.1.0",version_std="PEP440")
def test_nominal_version_SemVer_noRev_noTag(self):
def test_nominal__version___SemVer_noRev_noTag(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
@@ -482,20 +486,13 @@ class Test_gitversionhelper(unittest.TestCase):
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="SemVer")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self._test_version_format(_v,"0.1.0",version_std="SemVer")
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._test_version_format(_v,"0.1.0",version_std="SemVer")
def test_nominal_version_AUTO_noRev_noTag(self):
def test_nominal__version___AUTO_noRev_noTag(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
@@ -505,21 +502,14 @@ class Test_gitversionhelper(unittest.TestCase):
_v = pygitversionhelper.gitversionhelper.version.getLastVersion()
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self._test_version_format(_v,"0.1.0")
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._test_version_format(_v,"0.1.0")
def test_nominal_version_AUTO_bump_commits(self):
def test_nominal__version___AUTO_bump_commits(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
@@ -529,20 +519,13 @@ class Test_gitversionhelper(unittest.TestCase):
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion()
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self._test_version_format(_v,"0.2.0")
self.assertEqual(_v.raw, "0.2.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,2)
self.assertEqual(_v.patch,0)
self.assertEqual(_v.pre_count,0)
self.assertEqual(_v.post_count,0)
self._test_version_format(_v,"0.2.0")
self.assertEqual(_v.post_count,0)
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue22")
@@ -552,20 +535,13 @@ class Test_gitversionhelper(unittest.TestCase):
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion()
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self._test_version_format(_v,"0.2.1")
self.assertEqual(_v.raw, "0.2.1")
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,2)
self.assertEqual(_v.patch,1)
self.assertEqual(_v.pre_count,0)
self.assertEqual(_v.post_count,0)
self._test_version_format(_v,"0.2.1")
self.assertEqual(_v.post_count,0)
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue223")
@@ -580,20 +556,13 @@ class Test_gitversionhelper(unittest.TestCase):
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion()
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self.assertEqual(_v.raw, "0.2.3")
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._test_version_format(_v,"0.2.3")
self.assertEqual(_v.raw, "0.2.3")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,2)
self.assertEqual(_v.patch,3)
self.assertEqual(_v.pre_count,0)
self.assertEqual(_v.post_count,0)
self._test_version_format(_v,"0.2.3")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue225")
@@ -604,75 +573,48 @@ class Test_gitversionhelper(unittest.TestCase):
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self.assertEqual(_v.raw, "0.2.0+post.4")
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._test_version_format(_v,"0.2.0+post.4")
self.assertEqual(_v.raw, "0.2.0+post.4")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,2)
self.assertEqual(_v.patch,0)
self.assertEqual(_v.pre_count,0)
self.assertEqual(_v.post_count,4)
self._test_version_format(_v,"0.2.0+post.4")
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion(bump_type="dev",bump_dev_strategy="pre-patch")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self.assertEqual(_v.raw, "0.2.1-pre.4")
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._test_version_format(_v,"0.2.1-pre.4")
self.assertEqual(_v.raw, "0.2.1-pre.4")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,2)
self.assertEqual(_v.patch,1)
self.assertEqual(_v.pre_count,4)
self.assertEqual(_v.post_count,0)
self._test_version_format(_v,"0.2.1-pre.4")
self.assertEqual(_v.post_count,0)
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion(bump_type="dev",bump_dev_strategy="pre-minor")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self._test_version_format(_v,"0.3.0-pre.4")
self.assertEqual(_v.raw, "0.3.0-pre.4")
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,3)
self.assertEqual(_v.patch,0)
self.assertEqual(_v.pre_count,4)
self.assertEqual(_v.post_count,0)
self._test_version_format(_v,"0.3.0-pre.4")
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion(bump_type="dev",bump_dev_strategy="pre-major")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self.assertEqual(_v.raw, "1.0.0-pre.4")
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._test_version_format(_v,"1.0.0-pre.4")
self.assertEqual(_v.raw, "1.0.0-pre.4")
self.assertEqual(_v.major,1)
self.assertEqual(_v.minor,0)
self.assertEqual(_v.patch,0)
self.assertEqual(_v.pre_count,4)
self.assertEqual(_v.post_count,0)
self._test_version_format(_v,"1.0.0-pre.4")
def test_nominal_custom_format(self):
def test_nominal__version___custom_format(self):
_v=self._test_version_readback("0.1.1",version_std="PEP440")
self.assertEqual("V_0_1_1____",_v.doFormatVersion(output_format="V_{major}_{minor}_{patch}____{revcount}"))
@@ -687,69 +629,491 @@ 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):
def test_nominal__git__emptyrepo(self):
_v = pygitversionhelper.gitversionhelper.version.getCurrentVersion()
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self.assertIsInstance(_v.raw, str)
self._test_version_format(_v,"0.1.0")
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):
def test_defect__git__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:
with self.assertRaises(pygitversionhelper.gitversionhelper.repository.repositoryDirty) :
pygitversionhelper.gitversionhelper.version.getCurrentVersion()
def test_defect_wrongargument_git_sortargs(self):
with self.assertRaises(pygitversionhelper.gitversionhelper.wrongArguments) as context:
def test_defect__version_post_and_pre_output(self):
_v = pygitversionhelper.gitversionhelper.version.MetaVersion("PEP440",
0,
0,
1,
1,
1,
"0.0.1.pre1.post1")
with self.assertRaises(pygitversionhelper.gitversionhelper.version.PreAndPostVersionUnsupported) :
_v.doFormatVersion()
_v = pygitversionhelper.gitversionhelper.version.MetaVersion("SemVer",
0,
0,
1,
1,
1,
"0.0.1-pre.1+post.1")
with self.assertRaises(pygitversionhelper.gitversionhelper.version.PreAndPostVersionUnsupported) :
_v.doFormatVersion()
def test_defect__version_post_and_pre_parse(self):
with self.assertRaises(pygitversionhelper.gitversionhelper.version.PreAndPostVersionUnsupported) :
pygitversionhelper.gitversionhelper.version._parseTag("0.0.1.pre1.post1")
def test_defect__git__wrongargument_sortargs(self):
with self.assertRaises(pygitversionhelper.gitversionhelper.wrongArguments) :
pygitversionhelper.gitversionhelper.tag.getTags(sort="toto")
def test_defect_git_notagfound(self):
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:
with self.assertRaises(pygitversionhelper.gitversionhelper.tag.tagNotFound) :
pygitversionhelper.gitversionhelper.tag.getLastTag()
""" This test is impossible to do
def test_defect_git_multipletagsfound(self):
""" This test is impossible to do because current implementation can only return one tag
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()
with self.assertRaises(pygitversionhelper.gitversionhelper.tag.moreThanOneTag) :
pygitversionhelper.gitversionhelper.tag.getLastTag(same_branch=True)
"""
def test_defect_wrongargument_bump_type(self):
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:
with self.assertRaises(pygitversionhelper.gitversionhelper.wrongArguments) :
pygitversionhelper.gitversionhelper.version.getCurrentVersion(bump_type="toto")
def test_defect_wrongargument_bump_dev_strategy(self):
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:
with self.assertRaises(pygitversionhelper.gitversionhelper.wrongArguments) :
pygitversionhelper.gitversionhelper.version.getCurrentVersion(bump_dev_strategy="toto")
def test_nominal__tag__getDistanceFromTag(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.2.0")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue1")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue2")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.3.0")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue3")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue4")
os.system("git add .")
os.system("git commit -m \"commit\"")
self.assertEqual(2,pygitversionhelper.gitversionhelper.tag.getDistanceFromTag())
self.assertEqual(4,pygitversionhelper.gitversionhelper.tag.getDistanceFromTag("0.2.0"))
def test_nominal__tag__getTags(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.2.0")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue1")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue2")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.3.0")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue3")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue4")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue5")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.3.1")
self.assertEqual(set(["0.3.0","0.2.0","0.3.1"]),set(pygitversionhelper.gitversionhelper.tag.getTags()))
def test_nominal__tag__getTags_two_branch(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.2.0")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue1")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue2")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.3.0")
os.system("git checkout -b dev")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue3")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue4")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue5")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.3.1")
self.assertEqual(set(["0.3.0","0.2.0","0.3.1"]),set(pygitversionhelper.gitversionhelper.tag.getTags()))
def test_nominal__tag__getTags_two_branch_samebranch(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.2.0")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue1")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue2")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.3.0")
os.system("git checkout -b dev")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue3")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue4")
os.system("git add .")
os.system("git commit -m \"commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue5")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.3.1")
self.assertEqual(set(["0.3.0","0.2.0","0.3.1"]),set(pygitversionhelper.gitversionhelper.tag.getTags(same_branch=True)))
os.system("git switch master")
self.assertEqual(set(["0.3.0","0.2.0"]),set(pygitversionhelper.gitversionhelper.tag.getTags(same_branch=True)))
os.system("git switch dev")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue4")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.3.2")
self.assertEqual(set(["0.3.0","0.2.0","0.3.1","0.3.2"]),set(pygitversionhelper.gitversionhelper.tag.getTags(same_branch=True)))
self.assertEqual(set(["0.3.0","0.2.0","0.3.1","0.3.2"]),set(pygitversionhelper.gitversionhelper.tag.getTags()))
os.system("git switch master")
self.assertEqual(set(["0.3.0","0.2.0"]),set(pygitversionhelper.gitversionhelper.tag.getTags(same_branch=True)))
self.assertEqual(set(["0.3.0","0.2.0","0.3.1","0.3.2"]),set(pygitversionhelper.gitversionhelper.tag.getTags()))
def test_nominal__tag__getLastTag_two_branches(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue")
os.system("git add .")
os.system("git commit -m \"first commit\"")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue1")
os.system("git add .")
os.system("git commit -m \"2nd commit\"")
os.system(f"git tag 0.1.0")
os.system("git checkout -b dev")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue2")
os.system("git add .")
os.system("git commit -m \"3rd commit\"")
os.system(f"git tag 0.2.0")
"""
print("===")
os.system(f"git status")
print("===")
os.system(f"git describe --tags --abbrev=0")
print("===")
os.system(f"git rev-list --all")
print("===")
os.system(f"git rev-list --tags")
print("===")
os.system(f"git log --oneline --decorate=short")
print("===")
os.system(f"git describe --tags")
print("===")
"""
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.2.0",version_std="PEP440")
self.assertEqual(_v.raw, "0.2.0")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,2)
self.assertEqual(_v.patch,0)
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue3")
os.system("git add .")
os.system("git commit -m \"3rd commit\"")
os.system(f"git tag 0.3.0")
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.3.0",version_std="PEP440")
self.assertEqual(_v.raw, "0.3.0")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,3)
self.assertEqual(_v.patch,0)
os.system("git switch master")
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.3.0",version_std="PEP440")
self.assertEqual(_v.raw, "0.3.0")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,3)
self.assertEqual(_v.patch,0)
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440",same_branch=True)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.1.0",version_std="PEP440")
self.assertEqual(_v.raw, "0.1.0")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,1)
self.assertEqual(_v.patch,0)
os.system("git merge --no-ff dev -m \"merge dev into master\"")
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440",same_branch=True)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.1.0",version_std="PEP440")
self.assertEqual(_v.raw, "0.1.0")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,1)
self.assertEqual(_v.patch,0)
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.3.0",version_std="PEP440")
self.assertEqual(_v.raw, "0.3.0")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,3)
self.assertEqual(_v.patch,0)
os.system(f"git tag 0.4.0")
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440",same_branch=True)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.4.0",version_std="PEP440")
self.assertEqual(_v.raw, "0.4.0")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,4)
self.assertEqual(_v.patch,0)
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(version_std="PEP440")
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.4.0",version_std="PEP440")
self.assertEqual(_v.raw, "0.4.0")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,4)
self.assertEqual(_v.patch,0)
def test_defect__tag__invalidtag(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue1")
os.system("git add .")
os.system("git commit -m \"2nd commit\"")
os.system(f"git tag INVALIDTAG")
with self.assertRaises(pygitversionhelper.gitversionhelper.version.noValidVersion) :
_v = pygitversionhelper.gitversionhelper.version.getLastVersion()
with self.assertRaises(pygitversionhelper.gitversionhelper.version.noValidVersion) :
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(ignore_unknown_tags=True)
def test_defect__tag__invalidtag_inbetween(self):
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue1")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.0.1")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue2")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag INVALIDTAG")
with self.assertRaises(pygitversionhelper.gitversionhelper.version.noValidVersion) :
_v = pygitversionhelper.gitversionhelper.version.getLastVersion()
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(ignore_unknown_tags=True)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.0.1",version_std="PEP440")
self.assertEqual(_v.raw, "0.0.1")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,0)
self.assertEqual(_v.patch,1)
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue3")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag INVALIDTAG2")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue4")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag INVALIDTA3")
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue4")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag INVALIDTA4")
with self.assertRaises(pygitversionhelper.gitversionhelper.version.noValidVersion) :
_v = pygitversionhelper.gitversionhelper.version.getLastVersion()
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(ignore_unknown_tags=True)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.0.1",version_std="PEP440")
self.assertEqual(_v.raw, "0.0.1")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,0)
self.assertEqual(_v.patch,1)
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue5")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.1.2")
_v = pygitversionhelper.gitversionhelper.version.getLastVersion()
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.1.2",version_std="PEP440")
self.assertEqual(_v.raw, "0.1.2")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,1)
self.assertEqual(_v.patch,2)
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(ignore_unknown_tags=True)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.1.2",version_std="PEP440")
self.assertEqual(_v.raw, "0.1.2")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,1)
self.assertEqual(_v.patch,2)
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue6")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag INVALIDTA5")
with self.assertRaises(pygitversionhelper.gitversionhelper.version.noValidVersion) :
_v = pygitversionhelper.gitversionhelper.version.getLastVersion()
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(ignore_unknown_tags=True)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.1.2",version_std="PEP440")
self.assertEqual(_v.raw, "0.1.2")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,1)
self.assertEqual(_v.patch,2)
with open("demofile.txt", "w+t") as tmpFile:
tmpFile.write("testvalue7")
os.system("git add .")
os.system("git commit -m \"commit\"")
os.system(f"git tag 0.1.3")
_v = pygitversionhelper.gitversionhelper.version.getLastVersion()
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.1.3",version_std="PEP440")
self.assertEqual(_v.raw, "0.1.3")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,1)
self.assertEqual(_v.patch,3)
_v = pygitversionhelper.gitversionhelper.version.getLastVersion(ignore_unknown_tags=True)
self.assertIsInstance(_v, pygitversionhelper.gitversionhelper.version.MetaVersion)
self._test_version_format(_v,"0.1.3",version_std="PEP440")
self.assertEqual(_v.raw, "0.1.3")
self.assertEqual(_v.major,0)
self.assertEqual(_v.minor,1)
self.assertEqual(_v.patch,3)
def tearDown(self):
os.chdir("/")
@@ -759,16 +1123,9 @@ class Test_gitversionhelperNoRepo(unittest.TestCase):
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:
def test_defect__norepo(self):
with self.assertRaises(pygitversionhelper.gitversionhelper.repository.notAGitRepository) :
_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"))
os.chdir("/")