Esempio n. 1
0
File: Addon.py Progetto: Shaana/sau
    def clean_home(self):
        """
        delete the whole addon folder for a clean new install.
        """
        try:
            if self.protected:
                raise Error.AddonProtectedError(self)

            if os.path.exists(self.home):
                #OSError handled by _remove_tree()
                if not self._remove_tree(self.home):
                    return False

            return True

        except Error.AddonProtectedError as e:
            print(e)
Esempio n. 2
0
File: Addon.py Progetto: Shaana/sau
    def clean_ignore(self, list_files):
        """
        Delete folders and files mentioned by the config file.
        
        Returns True, if every file/folder mentioned was deleted. None otherwise
        
        @param list_files: list of folder_names, file_names to be deleted (NOT paths!)
        @type list_files: list
        
        """
        try:
            try:
                if self.protected:
                    raise Error.AddonProtectedError(self)

                #keep track of files we couldn't delete
                list_not_deleted = []

                for file in list_files:
                    #absolute path of the file
                    absolute_file = os.path.join(self.home, file)
                    if os.path.exists(absolute_file) and self._remove_tree(
                            absolute_file):
                        pass  #good
                    else:
                        list_not_deleted.append(file)

                if len(list_not_deleted) > 0:
                    raise Error.AddonCleanIgnoreError(self, list_not_deleted)

                return True

            except OSError as e:
                raise Error.CommonOSError(e)

            except (Error.AddonProtectedError,
                    Error.AddonCleanIgnoreError) as e:
                print(e)

        except Error.CommonOSError as e:
            print(e)
Esempio n. 3
0
File: Addon.py Progetto: Shaana/sau
    def clean_repository_folder(self):
        """
        Deletes the repository folder.
        
        Returns True, if the operation worked or the folder didn't exist in the first place.
        
        """
        try:
            if self.protected:
                raise Error.AddonProtectedError(self)

            if self.repo_type == "svn":
                self._crawl_directory(self.home, ".svn")

            else:
                if os.path.exists(self.repo_folder):
                    #OSError handled by _remove_tree()
                    if not self._remove_tree(self.repo_folder):
                        return False

            return True

        except Error.AddonProtectedError as e:
            print(e)
Esempio n. 4
0
File: Addon.py Progetto: Shaana/sau
    def _update(
            self,
            stderr=None,
            stdout=None):  #stderr=subprocess.STDOUT, stdout=subprocess.PIPE
        try:
            try:
                try:
                    #check if its protected
                    if self.protected:
                        raise Error.AddonProtectedError(self)

                    #check for the repo folder exists
                    if not os.path.exists(self.repo_folder):
                        raise Error.AddonRepositoryFolderError(self)

                    #git, hg need to be in the home folder in order to work !
                    os.chdir(self.home)
                    subprocess_exit_status = 0
                    if self.repo_type == "git":
                        subprocess_exit_status = subprocess.call(
                            ["git", "pull"], stderr=stderr, stdout=stdout)
                    elif self.repo_type == "svn":
                        subprocess_exit_status = subprocess.call(
                            ["svn", "update", self.home],
                            stderr=stderr,
                            stdout=stdout)
                    elif self.repo_type == "hg":
                        subprocess_exit_status = subprocess.call(
                            ["hg", "pull"], stderr=stderr, stdout=stdout)
                        if subprocess_exit_status != 0:
                            #TODO raise some error, if first part already failed
                            subprocess_exit_status = subprocess.call(
                                ["hg", "update"], stderr=stderr, stdout=stdout)
                    else:
                        #this should never every happen, since the _set_url_info is checking the repo_type already !
                        raise Error.AddonRepositoryTypeError(
                            self, self.url_info[0],
                            self.__class__._supported_repository_types)

                    return subprocess_exit_status

                except OSError as e:
                    raise Error.CommonOSError(e)

                except Error.AddonRepositoryFolderError as e:
                    print(e)
                    raise Error.AddonUpdateError(self,
                                                 "repository folder missing")

                except subprocess.CalledProcessError as e:
                    print(e)
                    raise Error.AddonUpdateError(
                        self, "subprocess returned non zero exit status")

                except Error.AddonRepositoryTypeError as e:
                    print(e)
                    raise Error.AddonUpdateError(
                        self, "invalid repository type used")

                except Error.AddonProtectedError as e:
                    print(e)
                    raise Error.AddonUpdateError(
                        self, "addon folder already exists and is protected")

            except Error.CommonOSError as e:
                print(e)
                raise Error.AddonUpdateError(self, "an OSError occurred")

        except Error.AddonUpdateError as e:
            print(e)
Esempio n. 5
0
File: Addon.py Progetto: Shaana/sau
    def _clone(self,
               stderr=None,
               stdout=None):  #stderr=subprocess.STDOUT, stdout=subprocess.PIPE
        try:
            try:
                #check if we even have url_info given
                if not self.url_info:
                    raise Error.AddonUrlError(self)

                #only prevent cloning if the addon_folder already exists and is protected!
                if os.path.exists(self.home):
                    if self.protected:
                        raise Error.AddonProtectedError(self)
                    else:
                        self._remove_tree(self.home)

                subprocess_exit_status = 0
                #using self.url_info[0] instead of self.repo_type, we checked if it exists
                if self.url_info[0] == "git":
                    subprocess_exit_status = subprocess.call(
                        ["git", "clone", self.url_info[1], self.home],
                        stderr=stderr,
                        stdout=stdout)
                elif self.url_info[0] == "svn":
                    subprocess_exit_status = subprocess.call(
                        ["svn", "checkout", self.url_info[1], self.home],
                        stderr=stderr,
                        stdout=stdout)
                elif self.url_info[0] == "hg":
                    subprocess_exit_status = subprocess.call(
                        ["hg", "clone", self.url_info[1], self.home],
                        stderr=stderr,
                        stdout=stdout)
                else:
                    #this should never every happen, since the _set_url_info is checking the repo_type already !
                    raise Error.AddonRepositoryTypeError(
                        self, self.url_info[0],
                        self.__class__._supported_repository_types)

                return subprocess_exit_status

            except subprocess.CalledProcessError as e:
                print(e)
                raise Error.AddonCloneError(
                    self, "subprocess returned non zero exit status")

            except Error.AddonUrlError as e:
                print(e)
                raise Error.AddonCloneError(self, "no url given")

            except Error.AddonRepositoryTypeError as e:
                print(e)
                raise Error.AddonCloneError(self,
                                            "invalid repository type used")

            except Error.AddonProtectedError as e:
                print(e)
                raise Error.AddonCloneError(
                    self, "addon folder already exists and is protected")

        except Error.AddonCloneError as e:
            print(e)