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
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
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']))
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) ))
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)
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