Exemplo n.º 1
0
    def run(self):
        if self.set:
            newver = str(self.set)
        else:
            try:
                oldver = self.distribution.metadata.version
                oldver = StrictVersion(oldver)
            except ValueError as err:
                print("Error: setup.py", err, file=sys.stderr)
                sys.exit(errno.EINVAL)

            major, minor, patch = oldver.version
            pre = oldver.prerelease

            if self.alpha:
                if pre is None or pre[0] != 'a':
                    pre = ('a', 0)
                else:
                    pre = (pre[0], pre[1] + 1)
            elif self.beta:
                if pre is None or pre[0] != 'b':
                    pre = ('b', 0)
                else:
                    pre = (pre[0], pre[1] + 1)
            elif self.release:
                pre = None
            elif self.patch:
                patch = patch + 1
                pre = None
            elif self.minor:
                minor = minor + 1
                patch = 0
                pre = None
            elif self.major:
                major = major + 1
                minor = 0
                patch = 0
                pre = None
            else:
                return
            newver = StrictVersion()
            newver.version = (major, minor, patch)
            newver.prerelease = pre
            newver = str(newver)

        for dirpath, dirnames, filenames in os.walk(os.curdir):
            for filename in (f for f in filenames if os.path.splitext(f)[1] == '.py'):
                inpath = os.path.join(dirpath, filename)
                outpath = inpath + '.tmp'
                with open(inpath) as fin, open(outpath, 'w') as fout:
                    for line in fin:
                        if line.startswith("__version__"):
                            line = "__version__ = '{0}'\n".format(newver)
                        fout.write(line)
                shutil.copystat(inpath, outpath)
                os.replace(outpath, inpath)
Exemplo n.º 2
0
def load_config(filename):
    """
        Load the configuration file and test if version is supported.
    """
    (_, ext) = os.path.splitext(filename)
    config = None
    if ext == '.json':
        import json
        with open(filename, 'rb') as fds:
            config = json.load(fds)
    elif ext == '.yml':
        import yaml
        with open(filename, 'rb') as fds:
            config = yaml.safe_load(fds)
    else:
        logging.error('Config file extension not recognized: %s', filename)
        sys.exit(1)

    file_version_string = config.get('header', {}).get('version', None)

    if file_version_string is None:
        logging.error('Version missing: %s', filename)
        sys.exit(1)

    try:
        if not isinstance(file_version_string, str):
            logging.error('Version has to be a string: %s', filename)
            sys.exit(1)

        file_version = StrictVersion()
        file_version.parse(file_version_string)
        kas_version = StrictVersion()
        kas_version.parse(__version__)
        lower_version = StrictVersion()
        lower_version.parse(__compatible_version__)

        # Remove patch version, because we provide limited forwards
        # compatibility:
        if file_version.version[2] > 0:
            file_version.prerelease = None
            file_version.version = tuple(list(file_version.version[:2]) + [0])

        if file_version < lower_version or kas_version < file_version:
            logging.error(
                'This version of kas is compatible with version %s '
                'to %s, file has version %s: %s', lower_version, kas_version,
                file_version, filename)
            sys.exit(1)
    except ValueError:
        logging.exception('Not expected version format: %s', filename)
        raise

    return config