Пример #1
0
    def install_dependency(self, dependencyName, version, url, installDirectoryRelPath):
        savePath = utility.download_file(url, self.download_directory)
        utility.clear_directory_contents(self.extraction_directory)

        utility.extract_file(savePath, self.extraction_directory)
        os.remove(savePath)

        if self.installedDependencies.is_installed(dependencyName):
            self.remove_dependency(dependencyName)

        # not sure wether to add this or not (can cause serious impact)
        #if os.path.exists(installDirectory):
        #    utility.log("installation directory {i} for dependency {d} already exist, overwriting it...".format(i=installDirectory,d=dependencyName))
        #    shutil.rmtree(installDirectory)

        installDirectory = utility.joinPaths(self.dependencies_directory, installDirectoryRelPath)        
        utility.ensure_directory(installDirectory)

        # if the archive top level contains only one directory,copy its contents(not the directory itself)
        tempDirContents = [name for name in os.listdir(self.extraction_directory)]
        if len(tempDirContents) == 1 and os.path.isdir(utility.joinPaths(self.extraction_directory, tempDirContents[0])):
            dirPath = utility.joinPaths(self.extraction_directory, tempDirContents[0])
            utility.move_directory_contents(dirPath, installDirectory)
            os.rmdir(dirPath)
        else:
            utility.move_directory_contents(self.extraction_directory, installDirectory)

        self.installedDependencies.add_dependency(dependencyName, version, installDirectoryRelPath)
        return True
Пример #2
0
    def __init__(self, installed_dependencies, base_directory):
        assert (isinstance(installed_dependencies, InstalledDependencies))
        assert (base_directory and os.path.isdir(base_directory))

        self.dependencies_directory = base_directory
        self.download_directory = utility.joinPaths(base_directory, TMPDOWNLOAD_DIR_NAME)
        self.extraction_directory = utility.joinPaths(self.download_directory, TMPEXTRACTION_DIR_NAME)

        utility.remove_file_or_dir(self.extraction_directory)
        utility.remove_file_or_dir(self.download_directory)
        utility.ensure_directory(self.download_directory)
        utility.ensure_directory(self.extraction_directory)

        self.installedDependencies = installed_dependencies
Пример #3
0
def install_dependency(name, version, dependencyManager, registryClient, repositoryClient):
    try:
        packageHandler = registryClient.get_package_details(name)
    except Exception as e:
        utility.log(str(e))
        return False

    if not packageHandler.check_version_existence(version):
        utility.log("package {p} version {v} is not in the ppm registry".format(p=name, v=version))
        return False

    url = packageHandler.get_package_url(version)
    # check for repository url
    if repositoryClient:
        repository_url = repositoryClient.get_package_repository_url(url)
        if repository_url:
            url = repository_url

    parentDirectoryPath = packageHandler.get_package_parentdir(version)
    directoryName = packageHandler.get_package_dirname(version)
    installDirectoryRelPath = utility.joinPaths(parentDirectoryPath, directoryName)
    try:
        dependencyManager.install_dependency(name, version, url, installDirectoryRelPath)
        return True
    except Exception as e:
        utility.log(str(e))
        return False
Пример #4
0
 def get_package_env(self, version):
     env = self.__get_attribute("env", version)
     if not env:
         return
     parent_package = self.get_package_parentdir(version)
     dir_name = self.get_package_dirname(version)
     dir_path = utility.joinPaths(parent_package, dir_name)            
     return [s.replace("${HOME}","${DEPS_HOME}/"+dir_path) for s in list(env)]
Пример #5
0
 def remove_dependency(self, dependencyName):
     installRelPath = self.installedDependencies.get_installation_path(dependencyName)
     installLocation = utility.joinPaths(self.dependencies_directory, installRelPath)
     if os.path.exists(installLocation):
         try:
             shutil.rmtree(installLocation)
         except Exception:
             raise Exception("Error, can't remove {s}, ensure that you have prermissions and the program is not already running".format(s=installLocation))
     else:
         utility.log("directory {s} does not exist, this should happen only if you have deleted the directory manually, please report the problem otherwise".format(s=installLocation))
     self.installedDependencies.remove_dependency(dependencyName)
Пример #6
0
def cmd_download(args):
    """ downloading one or more packages without monitoring them"""
    downloadDirectory = utility.joinPaths(os.getcwd(), args.directory)
    packages = [('@' in p and p.split('@')) or [p,"latest"] for p in args.packages]
    utility.ensure_directory(downloadDirectory)

    registryClient = get_registry_client()
    if not registryClient:
        raise Exception("registry server is not set, please set it using set-registry-server command")
    
    repositoryClient = get_repository_client()

    for name, version in packages:
        try:
            package_handler = registryClient.get_package_details(name)
        except Exception as e:
            utility.log(str(e))
            continue

        if version == 'latest':
            version = get_latest_version(package_handler.get_package_versions())
            if version == '0.0':
                utility.log("Package {p} is not in the ppm registry".format(p=name))
                continue
        else:
            version = str(StrictVersion(version))
            if not package_handler.check_version_existence(version):
                utility.log("Package {p} is not in the ppm registry".format(p=name))
                continue

        url = package_handler.get_package_url(version)
        # check for repository url
        if repositoryClient:
            repository_url = repositoryClient.get_package_repository_url(url)
            if repository_url:
                url = repository_url
        utility.download_file(url, downloadDirectory)