Exemple #1
0
def pin_requirements(dist, all_dists):
    """
    Override versions of things we're tagging to be explicit pins. 
    This will 'flatten' the dependency graph for anything that is third-party so that nothing 
    shifts under our feet when we install this later.
    """
    get_log().info("Pinning requirements for %s" % dist)

    with chdir(dist.location):
        parser = get_parser()
        cfg = get_metadata(parser)
        new_reqs = set()
        for req in pkg_resources.parse_requirements(cfg['install_requires']):
            if not req.key in all_dists:
                raise PackageError("Dependency %s is not installed, cannot pin to version." % req.project_name)
            req_dist = all_dists[req.key]
            if is_third_party(req_dist):
                # Flatten third-party requirement graphs.
                [new_reqs.add(i.as_requirement()) for i in resolve_dependencies([req_dist]).values()]
            else:
                new_reqs.add(all_dists[req.key].as_requirement())
        
        parser.set('metadata','install_requires',  '\n'.join(str(i) for i in new_reqs))

        # Save setup file away so we can go back to the un-pinned version
        shutil.copyfile('setup.cfg', 'setup.cfg.unpinned')

        # Write out pinned requirements 
        with open('setup.cfg', 'wb') as fp:
            parser.write(fp)
        return new_reqs
Exemple #2
0
def verify(dist):
    get_log().info("Verifying %s" % dist)
    with chdir(dist.location):
        diff = run(['hg', 'st'], capture=True)
        if diff:
            raise PackageError("Package %s has uncommitted changes at %s" %
                               (dist.project_name, dist.location))
Exemple #3
0
def update(dist):
    get_log().info("Updating %s" % dist)
    with chdir(dist.location):
        run(['hg','pull', '-u'])
        heads = run(['hg','heads', '--template','{node}-'],capture=True).split('-')[:-1]
        if len(heads) > 1:
            raise PackageError("Package %s has unmerged heads at %s" % (dist.project_name, dist.location))
Exemple #4
0
def tag(dist):
    get_log().info("Tagging %s" % dist)
    with chdir(dist.location):    
        diff = run(['hg','st'], capture = True)
        if 'setup.cfg' in diff:
            get_log().info("Committing new setup.cfg") 
            run(['hg','commit','-m','Pinning requirements for version %s' % dist.version])
        run(['hg','tag', str(dist.version)])
Exemple #5
0
def update(dist):
    get_log().info("Updating %s" % dist)
    with chdir(dist.location):
        run(['hg', 'pull', '-u'])
        heads = run(['hg', 'heads', '--template', '{node}-'],
                    capture=True).split('-')[:-1]
        if len(heads) > 1:
            raise PackageError("Package %s has unmerged heads at %s" %
                               (dist.project_name, dist.location))
Exemple #6
0
def is_top_level(pkg):
    with chdir(pkg):
        parser = get_parser()
        try:
            if parser.get('tagup','top_level') == 'true':
                return True
        except (ConfigParser.NoSectionError, ConfigParser.NoOpotionError):
            pass
    return False
Exemple #7
0
def upload(dist):
    get_log().info("Uploading %s" % dist)
    with chdir(dist.location):
        cfg = get_parser()
        run([
            'scp',
            'dist/%s-%s.tar.gz' % (cfg.get('metadata', 'name'), dist.version),
            PKG_REPO
        ])
Exemple #8
0
def is_top_level(pkg):
    with chdir(pkg):
        parser = get_parser()
        try:
            if parser.get('tagup', 'top_level') == 'true':
                return True
        except (ConfigParser.NoSectionError, ConfigParser.NoOpotionError):
            pass
    return False
Exemple #9
0
def tag(dist):
    get_log().info("Tagging %s" % dist)
    with chdir(dist.location):
        diff = run(['hg', 'st'], capture=True)
        if 'setup.cfg' in diff:
            get_log().info("Committing new setup.cfg")
            run([
                'hg', 'commit', '-m',
                'Pinning requirements for version %s' % dist.version
            ])
        run(['hg', 'tag', str(dist.version)])
Exemple #10
0
def rollover(dist, version):
    get_log().info("Rolling over %s" % dist)
    with chdir(dist.location):    
        if os.path.isfile('setup.cfg.unpinned'):
            get_log().info("Rolling back to unpinned setup.cfg")
            shutil.move('setup.cfg.unpinned', 'setup.cfg')
        new_version = next_version(version)
        cfg = get_parser()
        cfg.set('metadata','version',new_version.vstring)
        with open('setup.cfg', 'wb') as fp:
            cfg.write(fp)
        get_log().info("New version is: %s" % new_version.vstring)
Exemple #11
0
def rollover(dist, version):
    get_log().info("Rolling over %s" % dist)
    with chdir(dist.location):
        if os.path.isfile('setup.cfg.unpinned'):
            get_log().info("Rolling back to unpinned setup.cfg")
            shutil.move('setup.cfg.unpinned', 'setup.cfg')
        new_version = next_version(version)
        cfg = get_parser()
        cfg.set('metadata', 'version', new_version.vstring)
        with open('setup.cfg', 'wb') as fp:
            cfg.write(fp)
        get_log().info("New version is: %s" % new_version.vstring)
Exemple #12
0
def should_tag(dist):
    get_log().info("Checking if we should tag %s" % dist)
    with chdir(dist.location):
        # Using cfg version in case the env is out-of-date
        version = get_version(get_parser())
        releases = get_tags()
        get_log().debug("This version: %s" % (version))
        get_log().debug("Releases : %s" % (releases))
        if version.vstring in releases.keys():
            raise PackageError("Version %s has already been tagged" % version)

        # Check if the second last revision number is in our releases
        # Second last because creating the tag itself is one commit, and
        # rolling over the version is another.

        second_last_revno = get_previous_revno(get_previous_revno(get_revno()))
        get_log().debug("Second-last revno: %s" % second_last_revno)
        if second_last_revno in releases.values():
            get_log().info("No changes since last release")
            return False
        return version
Exemple #13
0
def should_tag(dist):
    get_log().info("Checking if we should tag %s" % dist)
    with chdir(dist.location):
        # Using cfg version in case the env is out-of-date
        version = get_version(get_parser())
        releases = get_tags()
        get_log().debug("This version: %s" % (version))
        get_log().debug("Releases : %s" % (releases))
        if version.vstring in releases.keys():
            raise PackageError("Version %s has already been tagged" % version)

        # Check if the second last revision number is in our releases
        # Second last because creating the tag itself is one commit, and
        # rolling over the version is another.

        second_last_revno = get_previous_revno(get_previous_revno(get_revno()))
        get_log().debug("Second-last revno: %s" % second_last_revno)
        if second_last_revno in releases.values():
            get_log().info("No changes since last release")
            return False
        return version
Exemple #14
0
def pin_requirements(dist, all_dists):
    """
    Override versions of things we're tagging to be explicit pins. 
    This will 'flatten' the dependency graph for anything that is third-party so that nothing 
    shifts under our feet when we install this later.
    """
    get_log().info("Pinning requirements for %s" % dist)

    with chdir(dist.location):
        parser = get_parser()
        cfg = get_metadata(parser)
        new_reqs = set()
        for req in pkg_resources.parse_requirements(cfg['install_requires']):
            if not req.key in all_dists:
                raise PackageError(
                    "Dependency %s is not installed, cannot pin to version." %
                    req.project_name)
            req_dist = all_dists[req.key]
            if is_third_party(req_dist):
                # Flatten third-party requirement graphs.
                [
                    new_reqs.add(i.as_requirement())
                    for i in resolve_dependencies([req_dist]).values()
                ]
            else:
                new_reqs.add(all_dists[req.key].as_requirement())

        parser.set('metadata', 'install_requires',
                   '\n'.join(str(i) for i in new_reqs))

        # Save setup file away so we can go back to the un-pinned version
        shutil.copyfile('setup.cfg', 'setup.cfg.unpinned')

        # Write out pinned requirements
        with open('setup.cfg', 'wb') as fp:
            parser.write(fp)
        return new_reqs
Exemple #15
0
def upload(dist):
    get_log().info("Uploading %s" % dist)
    with chdir(dist.location):    
        cfg = get_parser()
        run(['scp', 'dist/%s-%s.tar.gz' % (cfg.get('metadata','name'), dist.version), PKG_REPO])
Exemple #16
0
def commit(dist):
    get_log().info("Committing %s" % dist)
    with chdir(dist.location):    
        run(['hg','commit','-m','Tagged at version %s' % dist.version])
Exemple #17
0
def build_dist(dist):
    get_log().info("Building %s" % dist)
    with chdir(dist.location):
        run(['python', 'setup.py', 'egg_info', '--tag-build=', 'sdist'])
Exemple #18
0
def get_dist_name(pkg_dir):
    with chdir(pkg_dir):
        return get_metadata(get_parser())['name']
Exemple #19
0
def commit(dist):
    get_log().info("Committing %s" % dist)
    with chdir(dist.location):
        run(['hg', 'commit', '-m', 'Tagged at version %s' % dist.version])
Exemple #20
0
def get_dist_name(pkg_dir):
    with chdir(pkg_dir):
        return get_metadata(get_parser())['name']
Exemple #21
0
def verify(dist):
    get_log().info("Verifying %s" % dist)
    with chdir(dist.location):
        diff = run(['hg','st'], capture = True)
        if diff:
            raise PackageError("Package %s has uncommitted changes at %s" % (dist.project_name, dist.location))
Exemple #22
0
def build_dist(dist):
    get_log().info("Building %s" % dist)
    with chdir(dist.location):    
        run(['python','setup.py','egg_info','--tag-build=', 'sdist'])