def handle_failure(self): """Handles our failure cases. Args: None. Returns: None. """ msg = ('Failed during vim setup. Do you wish to ' 'roll back the changes? [y/n]') generic_msg.prompt(msg) input_result = raw_input().lower() if input_result in self.yes_answers: msg = ('Rolling back changes.') generic_msg.info(msg) rmdir_result = handle_rmdir(self.vim_dir, recursive=True) if not rmdir_result: msg = ('There was an issue removing the .vim directory.') generic_msg.error(msg) else: msg = ('Moving the backup directory %s back ' 'to .vim.' % (self.backup_directory)) generic_msg.info(msg) handle_moving_dirs(self.backup_directory, self.vim_dir) else: msg = ('Not rolling back. VIM setup may be ' 'incomplete. Your backup can be found ' 'here: %s' % (self.backup_directory)) generic_msg.warning(msg) exit_msg = ('Failed to do the setup properly. My apologies.') sys.exit(exit_msg)
def handle_cleanup(self): """Handles the cleanup of files and directories. Args: self Returns: int. Status code (anything over 0 is a failure). """ status_code = 0 cleanup_extensions = [ '.rst', '.markdown', '.md' ] for root, _, files in os.walk(self.vim_dir): for fname in files: ext = os.path.splitext(fname)[-1] if ext in cleanup_extensions: full_path = os.path.join(root, fname) try: os.remove(full_path) except OSError as err: msg = ('Error removing file: %s. ' 'Error: %s' % (full_path, err)) generic_msg.warning(msg) status_code += 1 return status_code
def get_plugins(self): """Gets the plugins we want for vim. Args: None. Returns: bool. True or False. """ status_code = 0 plugin_file = os.path.join(os.getcwd(), 'vim_plugins.json') with open(plugin_file, 'r') as fopen: try: vim_plugins = json.loads(fopen.read()) except ValueError as err: msg = ('An error occurred when attempting to parse the ' 'json file. Error: %s' % (err)) generic_msg.error(err) self.handle_failure() except TypeError as err: msg = ('An error occurred when attempting to parse the ' 'json file. Error: %s' % (err)) generic_msg.error(err) self.handle_failure() pathogen_url = ('https://raw.github.com/tpope/vim-pathogen/master' '/autoload/pathogen.vim') result = self.handle_curl_clone(pathogen_url, os.path.join(self.vim_dir, 'autoload')) status_code += result for key, value in vim_plugins.iteritems(): full_dirname = os.path.join(self.vim_dir, key) for obj in value: if obj['type'] == 'git': result = self.handle_git_clone( obj['location'], full_dirname ) status_code += result elif obj['type'] == 'curl': result = self.handle_curl_clone( obj['location'], full_dirname ) status_code += result else: msg = ('No type specified. Ignoring. %s %s' % (key, obj)) generic_msg.warning(msg) if status_code: msg = ('Looks like the setup had some issues. We are ' 'gonna go ahead and continue on. Note the error ' 'messages though.') generic_msg.warning(msg) return True
def vim_setup(self): """This does all of our setup to grab all the necessary data. Args: None. Returns: bool. True or False. """ pathogen_dirs = ['autoload', 'bundle', 'colors', 'plugin'] vimdir_result = handle_mkdir(self.vim_dir) if not vimdir_result['success']: generic_msg.error(vimdir_result['msg']) self.handle_failure() msg = ('Making the following ' 'directories: %s' % (', '.join(pathogen_dirs))) generic_msg.info(msg) for dirname in pathogen_dirs: full_dirname = os.path.join(self.vim_dir, dirname) dir_result = handle_mkdir(full_dirname) if not dir_result['success']: generic_msg.error(dir_result['msg']) self.handle_failure() plugin_result = self.get_plugins() if not plugin_result: msg = ('Something really f****d up here. We have to ' 'kill this now.') generic_msg.error(msg) self.handle_failure() msg = ('We can run some cleanup and try and remove all of the ' '.rst, .md and .markdown files now if you would like. ' 'Proceed? [y/n]') generic_msg.prompt(msg) input_result = raw_input().lower() if input_result in self.yes_answers: cleanup_result = self.handle_cleanup() if cleanup_result: msg = ('Something during the cleanup process got borked. ' 'Not a big deal, but you should probably check ' 'it out.') generic_msg.warning(msg) return True
def handle_mkdir(dir_name): """Handles making directories so we don't replicate code. Args: dir_name (str): The directory to create. Returns: dict. Failure or Success and the output message. {'success': True, 'msg': 'Success message'} {'success': False, 'msg': 'Failure message'} """ out_data = { 'success': True, 'msg': 'Successfully created directory: %s' % (dir_name) } if os.path.exists(dir_name): msg = ('Directory %s exists. Attempting to ' 'remove it.' % (dir_name)) generic_msg.info(msg) rmdir_result = handle_rmdir(dir_name) if not rmdir_result: msg = ('Was not able to delete it. Will continue on ' 'hoping for the best. :)') generic_msg.warning(msg) return out_data try: os.mkdir(dir_name) except OSError as err: out_data['msg'] = ('Failed to create directory: %s. ' 'Error: %s' % (dir_name, err)) out_data['success'] = False return out_data