Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
 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