예제 #1
0
 def _check_mode(self, package):
     """ Check the package install mode is compatible with the system."""
     if isinstance(package, localpackage.LocalPackage):
         if package.get_install_mode() is not None and \
                 package.get_install_mode() != self._system.get_install_mode():
             raise snoing_exceptions.PackageException(
                 ("Package install mode is incompatible with the "
                  "system"), package.get_name())
예제 #2
0
 def remove_package(self, package_name, force=False):
     """ Remove a package, don't remove if force is False and packages depend on package_name."""
     package = self._packages[package_name]
     self._logger.set_state("Removing", package_name)
     if force:
         package.remove()
     else:
         if not self.check_installed(package_name):
             raise snoing_exceptions.PackageException(
                 "Cannot remove, not installed.", package_name)
         if not force:
             for dependent_name in self._package_dependents(package_name):
                 if self.check_installed(dependent_name):
                     raise snoing_exceptions.PackageException("Cannot remove as %s depends on it." % \
                                                                  dependent_name, package_name)
             # If get here then package can be deleted
             package.remove()
예제 #3
0
 def update_package(self, package_name):
     """ Update a package and all packages that depend on it."""
     self._check_package(package_name)
     package = self._packages[package_name]
     self._check_mode(package)
     if not isinstance(package, localpackage.LocalPackage):
         raise snoing_exceptions.PackageException(
             "Package cannot be updated by snoing. " +
             package.get_help_text(), package_name)
     if package.is_updated():  # Nothing todo if already updated
         return
     dependencies = self._install_dependencies(package)
     package.set_dependency_paths(dependencies)
     try:
         self._logger.set_state("Updating", package_name)
         package.update()
     except snoing_exceptions.SystemException, e:
         self._logger.error(e.args[0])
         self._logger.detail(e.Details)
         raise snoing_exceptions.PackageException("Installation fail",
                                                  package_name)
예제 #4
0
 def install_package(self, package_name):
     """ Install a package, installing all it's dependencies first."""
     if self.check_installed(package_name):
         return
     package = self._packages[package_name]
     self._check_mode(package)
     if not isinstance(package, localpackage.LocalPackage):
         raise snoing_exceptions.PackageException(
             "Package cannot be installed by snoing. " +
             package.get_help_text(), package_name)
     dependencies = self._install_dependencies(package)
     package.set_dependency_paths(dependencies)
     try:
         self._logger.set_state("Downloading", package_name)
         package.download()
         self._logger.package_downloaded(package_name)
         self._logger.set_state("Installing", package_name)
         package.install()
         self._logger.package_installed(package_name)
     except snoing_exceptions.SystemException, e:
         self._logger.error(e.args[0])
         self._logger.detail(e.Details)
         raise snoing_exceptions.PackageException("Installation fail",
                                                  package_name)
예제 #5
0
 def _check_package(self, package_name):
     """ Check a package with package_name exists."""
     if not package_name in self._packages.iterkeys():
         raise snoing_exceptions.PackageException("Package doesn't exist.",
                                                  package_name)
     self._packages[package_name].check_state()