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