Example #1
0
File: Addon.py Project: Shaana/sau
    def _set_url_info(self, url_info):
        """
        @param name: (repo_type, url)
        @type name: tuple
        """
        try:
            if url_info == None:
                self._url_info = url_info
            #check if it's a valid tuple
            elif type(url_info) == type(()) and len(url_info) == 2:
                if url_info[0] in self.__class__._supported_repository_types:
                    self._url_info = url_info
                else:
                    raise Error.AddonRepositoryTypeError(
                        self, url_info[0],
                        self.__class__._supported_repository_types)
            else:
                raise Error.CommonTypeError(
                    "url_info needs to be a tuple with length two or None.")

        except (Error.AddonRepositoryTypeError, Error.CommonTypeError) as e:
            print(e)
Example #2
0
File: Addon.py Project: 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)
Example #3
0
File: Addon.py Project: 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)