def get_updated_version_copy(existing_version: version.Version, major: int = None, minor: int = None, micro: int = None) -> version.Version: """get_updated_version_copy Generates a copy of a version.Version with the specified major, minor, micro version. None values leaves the version components unchanged inputs: existing_version (version.Version): The existing version to base the changes on major (int): The major version to write to the version copy. Unchanged if None minor (int): The minor version to write to the version copy. Unchanged if None micro (int): The micro version to write to the version copy. Unchanged if None outputs: version.Version: The version copy with modified values """ # Unroll version data new_version = deepcopy(existing_version) new_version_data = new_version._version # pylint: disable=W0212 new_release = list(new_version_data.release) new_version_data = list(new_version_data) if major: new_release[0] = major if minor: new_release[1] = minor if micro: new_release[2] = micro new_version_data[1] = tuple(new_release) new_version_data = version._Version(*new_version_data) # pylint: disable=W0212 new_version._version = new_version_data # pylint: disable=W0212 return new_version
def bump(dev=False, patch=False, minor=False, major=False, nocommit=False): """Bump version number and commit change.""" if sum([int(x) for x in (patch, minor, major)]) > 1: raise ValueError('Only one of patch, minor, major can be incremented.') if check_staged(): raise EnvironmentError('There are staged changes, abort.') with open(str(INIT_PATH)) as f: lines = f.readlines() for i, line in enumerate(lines): varmatch = re.match("__([a-z]+)__ = '([^']+)'", line) if varmatch: if varmatch.group(1) == 'version': version = Version(varmatch.group(2)) vdict = version._version._asdict() print('Current version:', version) increment_release = True if dev: if vdict['dev']: vdict['dev'] = (vdict['dev'][0], vdict['dev'][1] + 1) increment_release = False if sum([int(x) for x in (patch, minor, major)]) > 0: raise ValueError( 'Cannot increment patch, minor, or major between dev versions.' ) else: vdict['dev'] = ('dev', 0) else: if vdict['dev']: vdict['dev'] = None increment_release = False if increment_release: rel = vdict['release'] if major: vdict['release'] = (rel[0] + 1, 0, 0) elif patch: vdict['release'] = (rel[0], rel[1], rel[2] + 1) else: # minor is default vdict['release'] = (rel[0], rel[1] + 1, 0) version._version = _Version(**vdict) print('Version bumped to:', version) lines[i] = "__version__ = '{!s}'\n".format(version) break with open(str(INIT_PATH), 'w') as f: f.writelines(lines) if not nocommit: call(['git', 'add', 'bucketcache/__init__.py']) call([ 'git', 'commit', '-m', 'Bumped version number to {!s}'.format(version) ]) return version
def bump(dev=False, patch=False, minor=False, major=False, nocommit=False): """Bump version number and commit change.""" if sum([int(x) for x in (patch, minor, major)]) > 1: raise ValueError('Only one of patch, minor, major can be incremented.') if check_staged(): raise EnvironmentError('There are staged changes, abort.') with open(str(INIT_PATH)) as f: lines = f.readlines() for i, line in enumerate(lines): varmatch = re.match("__([a-z]+)__ = '([^']+)'", line) if varmatch: if varmatch.group(1) == 'version': version = Version(varmatch.group(2)) vdict = version._version._asdict() print('Current version:', version) increment_release = True if dev: if vdict['dev']: vdict['dev'] = (vdict['dev'][0], vdict['dev'][1] + 1) increment_release = False if sum([int(x) for x in (patch, minor, major)]) > 0: raise ValueError('Cannot increment patch, minor, or major between dev versions.') else: vdict['dev'] = ('dev', 0) else: if vdict['dev']: vdict['dev'] = None increment_release = False if increment_release: rel = vdict['release'] if major: vdict['release'] = (rel[0] + 1, 0, 0) elif patch: vdict['release'] = (rel[0], rel[1], rel[2] + 1) else: # minor is default vdict['release'] = (rel[0], rel[1] + 1, 0) version._version = _Version(**vdict) print('Version bumped to:', version) lines[i] = "__version__ = '{!s}'\n".format(version) break with open(str(INIT_PATH), 'w') as f: f.writelines(lines) if not nocommit: call(['git', 'add', 'bucketcache/__init__.py']) call(['git', 'commit', '-m', 'Bumped version number to {!s}'.format(version)]) return version
def norm_specs(specs): # PEP 440: Compatible Release for spec in specs: if spec[0] == "~=": ver = spec[1] yield ('>=', ver) ver = parse(parse(ver).base_version) ver_as_dict = ver._version._asdict() ver_as_dict['release'] = ver_as_dict['release'][:-1] + ('*',) ver._version = _Version(**ver_as_dict) yield ('==', str(ver)) else: yield spec