コード例 #1
0
ファイル: githelpers.py プロジェクト: mhl/gib
def has_objects_and_refs(path):
    '''Returns True if <path>/objects and <path>/refs both exist and
    (after resolving any symlinks) are directories; returns False
    otherwise.  The existence of this directory structure is a
    resonable sanity check on <path> being a git repository'''
    objects_path = os.path.join(path,"objects")
    refs_path = os.path.join(path,"refs")
    return exists_and_is_directory(objects_path) and \
        exists_and_is_directory(refs_path)
コード例 #2
0
ファイル: githelpers.py プロジェクト: mhl/gib
def is_in_another_git_repository(relative_path):
    if not exists_and_is_directory(relative_path):
        raise Exception("{} was not a directory".format(relative_path))
    while True:
        parent = os.path.dirname(relative_path)
        if not parent:
            return False
        if probable_non_bare_repository(parent):
            return True
        relative_path = parent
コード例 #3
0
ファイル: gitsetup.py プロジェクト: mhl/gib
    def __init__(self, command_line_options):

        self.configuration_file = '.gib.conf'

        self.directory_to_backup = None
        self.directory_to_backup_from = None

        self.git_directory = None
        self.git_directory_from = None

        self.branch = None
        self.branch_from = None

        if command_line_options.directory:
            self.directory_to_backup = command_line_options.directory
            self.directory_to_backup_from = OptionFrom.COMMAND_LINE
        else:
            if 'HOME' not in os.environ:
                # Then we can't use HOME as default directory:
                print_stderr("The HOME environment variable was not set")
                sys.exit(Errors.STRANGE_ENVIRONMENT)
            self.directory_to_backup = os.environ['HOME']
            self.directory_to_backup_from = OptionFrom.DEFAULT_VALUE

        # We need to make sure that this is an absolute path before
        # changing directory:

        self.directory_to_backup = os.path.abspath(self.directory_to_backup)

        if not exists_and_is_directory(self.directory_to_backup):
            sys.exit(Errors.DIRECTORY_TO_BACKUP_MISSING)

        # Now we know the directory that we're backing up, try to load the
        # config file:

        configuration = RawConfigParser()
        configuration.read(os.path.join(self.directory_to_backup,
                                        self.configuration_file))

        # Now set the git directory:

        if command_line_options.git_directory:
            self.git_directory = command_line_options.git_directory
            self.git_directory_from = OptionFrom.COMMAND_LINE
        elif configuration.has_option('repository','git_directory'):
            self.git_directory = configuration.get(
                'repository','git_directory'
            )
            self.git_directory_from = OptionFrom.CONFIGURATION_FILE
        else:
            self.git_directory = os.path.join(self.directory_to_backup,'.git')
            self.git_directory_from = OptionFrom.DEFAULT_VALUE

        if not os.path.isabs(self.git_directory):
            print_stderr("The git directory must be an absolute path.")
            sys.exit(Errors.GIT_DIRECTORY_RELATIVE)

        # And finally the branch:

        if command_line_options.branch:
            self.branch = command_line_options.branch
            self.branch_from = OptionFrom.COMMAND_LINE
        elif configuration.has_option('repository','branch'):
            self.branch = configuration.get('repository','branch')
            self.branch_from = OptionFrom.CONFIGURATION_FILE
        else:
            self.branch = 'master'
            self.branch_from = OptionFrom.DEFAULT_VALUE

        # Check that the git_directory ends in '.git':

        if not re.search('\.git/*$',self.git_directory):
            message = "The git directory ({}) did not end in '.git'"
            print_stderr(message.format(self.git_directory))
            sys.exit(Errors.BAD_GIT_DIRECTORY)

        # Also check that it actually exists:

        if not os.path.exists(self.git_directory):
            message = "The git directory '{}' does not exist."
            print_stderr(message.format(self.git_directory))
            sys.exit(Errors.GIT_DIRECTORY_MISSING)