Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
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