Example #1
0
def compute_meta_version(dependency_repositories, workdir=None, accepted_tag_pattern=None):

    kwargs = {}

    if workdir:
        kwargs.update({
            'repository_directory' : workdir,
            'fix_environment' : True
        })

    if accepted_tag_pattern:
        kwargs.update({
            'accepted_tag_pattern' : accepted_tag_pattern
        })

    describe = get_git_describe(**kwargs)
    meta_branch = retrieve_current_branch(**kwargs)

    version = compute_version(describe)
    
    repositories_dir = mkdtemp(dir=os.curdir, prefix="build-repository-dependencies-")
    for repository_dict in dependency_repositories:
        if repository_dict.has_key('branch'):
            branch = repository_dict['branch']
        else:
            branch = meta_branch
        workdir = fetch_repository(repository_dict['url'], branch=branch, workdir=repositories_dir)
        # this is pattern for dependency repo, NOT for for ourselves -> pattern of it, not ours
        # now hardcoded, but shall be retrieved via egg_info or custom command
        project_pattern = "%s-[0-9]*" % repository_dict['package_name']
        new_version = compute_version(get_git_describe(repository_directory=workdir, fix_environment=True, accepted_tag_pattern=project_pattern))
        version = sum_versions(version, new_version)
    return version
Example #2
0
def compute_meta_version(dependency_repositories, workdir=None, accepted_tag_pattern=None, cachedir=None, dependency_versions=None, remove_cloned_dirs=False):

    kwargs = {}

    if workdir:
        kwargs.update({
            'repository_directory' : workdir,
            'fix_environment' : True
        })

    if accepted_tag_pattern:
        kwargs.update({
            'accepted_tag_pattern' : accepted_tag_pattern
        })

    describe = get_git_describe(**kwargs)
    meta_branch = retrieve_current_branch(**kwargs)

    version = compute_version(describe)
    
    repositories_dir = mkdtemp(dir=os.curdir, prefix="build-repository-dependencies-")
    for repository_dict in dependency_repositories:
        if repository_dict.has_key('branch'):
            branch = repository_dict['branch']
        else:
            branch = meta_branch

        reference_repository = None

        if cachedir:
            reponame = urlsplit(repository_dict['url'])[2].split("/")[-1]
            if reponame.endswith(".git"):
                cachename = reponame[:-4]
            else:
                cachename = reponame

            if os.path.exists(os.path.join(cachedir, cachename)):
                reference_repository = os.path.abspath(os.path.join(cachedir, cachename))
                
            elif os.path.exists(os.path.join(cachedir, cachename+".git")):
                reference_repository = os.path.abspath(os.path.join(cachedir, cachename+".git"))

        workdir = fetch_repository(repository_dict['url'], branch=branch, workdir=repositories_dir, reference_repository=reference_repository)
        # this is pattern for dependency repo, NOT for for ourselves -> pattern of it, not ours
        # now hardcoded, but shall be retrieved via egg_info or custom command
        project_pattern = "%s-[0-9]*" % repository_dict['package_name']
        new_version = compute_version(get_git_describe(repository_directory=workdir, fix_environment=True, accepted_tag_pattern=project_pattern))
        if dependency_versions is not None:
            dependency_versions[repository_dict['package_name']] = new_version
        version = sum_versions(version, new_version)
        if remove_cloned_dirs:
            rmtree(workdir)
    return version
Example #3
0
def copy_images(repositories, static_dir):
    """
    For every repository, copy images from "static" dir in downloaded repository
    to static_dir/project, if directory exists
    """
    for repository in repositories:
        if repository.has_key('branch'):
            branch = repository['branch']
        else:
            branch = retrieve_current_branch(repository_directory=os.curdir, fix_environment=True)
        dir = fetch_repository(repository['url'], workdir=os.curdir, branch=branch)
        package_static_dir = os.path.join(dir, repository['package_name'], 'static')
        if os.path.exists(package_static_dir):
            copytree(package_static_dir, os.path.join(static_dir, repository['package_name']))
Example #4
0
    def test_cached_repo_is_not_fetched_again(self):
        invalid_repo_uri = "ssh://[email protected]/repository"

        handle, cache_file = mkstemp(prefix="config_git_", suffix=".ini")
        f = open(cache_file, "w+b")
        f.write("""[%s]
cache_dir = %s
""" % (invalid_repo_uri, self.repo))
        f.close()

        self.assertEquals(self.repo, fetch_repository(repository=invalid_repo_uri,
            cache_config_dir=os.path.dirname(cache_file),
            cache_config_file_name=os.path.basename(cache_file)
        ))
Example #5
0
    def test_fetching_creates_cache(self):
        repo_uri = os.path.abspath(self.repo)
        cache_dir = mkdtemp(prefix="test_git_")

        dir = fetch_repository(repository=repo_uri, cache_config_dir=cache_dir)

        config_file = os.path.join(cache_dir, "cached_repositories.ini")
        self.assertTrue(os.path.exists(config_file))

        parser = SafeConfigParser()
        parser.read([config_file])

        self.assertEquals(dir, parser.get(repo_uri, "cache_dir"))

        rmtree(cache_dir)
Example #6
0
def fetch_new_dependencies(repository, workdir=None):
    if repository.has_key('branch'):
        branch = repository['branch']
    else:
        if workdir:
            branch = retrieve_current_branch(repository_directory=workdir, fix_environment=True)
        else:
            branch = retrieve_current_branch()
    repo = fetch_repository(
        repository=repository['url'], branch=branch
    )
    #FIXME: This should not be hardcoded
    project_pattern = "%s-[0-9]*" % repository['package_name']

    deps = get_new_dependencies(repo, accepted_tag_pattern=project_pattern)

    return deps