def __init__(self, testing=False, sparse=False): # Sparse init: config only if sparse: self.git = GitWrapper(None) # Load configuration self.settings = self.default_settings.copy() self.load_config() return # Testing: redirect stderr to stdout self.testing = testing if self.testing: self.stderr = sys.stdout # Quiet testing else: # pragma: no cover self.stderr = sys.stderr self.states = [] self.should_fetch = True # Check, if we're in a git repo try: repo_dir = get_git_dir() except (EnvironmentError, OSError, GitCommandNotFound) as e: if isinstance(e, GitCommandNotFound) or e.errno == errno.ENOENT: exc = GitError("The git executable could not be found") raise exc else: raise else: if repo_dir is None: exc = GitError("We don't seem to be in a git repository.") raise exc self.repo = Repo(repo_dir, odbt=GitCmdObjectDB) # Check for branch tracking informatino if not any(b.tracking_branch() for b in self.repo.branches): exc = GitError("Can\'t update your repo because it doesn\'t has " "any branches with tracking information.") self.print_error(exc) raise exc self.git = GitWrapper(self.repo) # target_map: map local branch names to remote tracking branches #: :type: dict[str, git.refs.remote.RemoteReference] self.target_map = dict() for branch in self.repo.branches: target = branch.tracking_branch() if target: if target.name.startswith('./'): # Tracking branch is in local repo target.is_local = True else: target.is_local = False self.target_map[branch.name] = target # branches: all local branches with tracking information #: :type: list[git.refs.head.Head] self.branches = [b for b in self.repo.branches if b.tracking_branch()] self.branches.sort(key=lambda br: br.name) # remotes: all remotes that are associated with local branches #: :type: list[git.refs.remote.RemoteReference] self.remotes = uniq( # name = '<remote>/<branch>' -> '<remote>' [r.name.split('/', 2)[0] for r in list(self.target_map.values())]) # change_count: Number of unstaged changes self.change_count = len( self.git.status(porcelain=True, untracked_files='no').split('\n')) # Load configuration self.settings = self.default_settings.copy() self.load_config()
def __init__(self, testing=False, sparse=False): # Sparse init: config only if sparse: self.git = GitWrapper(None) # Load configuration self.settings = self.default_settings.copy() self.load_config() return # Testing: redirect stderr to stdout self.testing = testing if self.testing: self.stderr = sys.stdout # Quiet testing else: # pragma: no cover self.stderr = sys.stderr self.states = [] self.should_fetch = True # Check, if we're in a git repo try: repo_dir = get_git_dir() except EnvironmentError as e: if e.errno == errno.ENOENT: exc = GitError("The git executable could not be found") raise exc else: raise else: if repo_dir is None: exc = GitError("We don't seem to be in a git repository.") raise exc self.repo = Repo(decode(repo_dir), odbt=GitCmdObjectDB) # Check for branch tracking informatino if not any(b.tracking_branch() for b in self.repo.branches): exc = GitError("Can\'t update your repo because it doesn\'t has " "any branches with tracking information.") self.print_error(exc) raise exc self.git = GitWrapper(self.repo) # target_map: map local branch names to remote tracking branches #: :type: dict[str, git.refs.remote.RemoteReference] self.target_map = dict() for branch in self.repo.branches: target = branch.tracking_branch() if target: if target.name.startswith('./'): # Tracking branch is in local repo target.is_local = True else: target.is_local = False self.target_map[branch.name] = target # branches: all local branches with tracking information #: :type: list[git.refs.head.Head] self.branches = [b for b in self.repo.branches if b.tracking_branch()] self.branches.sort(key=lambda br: br.name) # remotes: all remotes that are associated with local branches #: :type: list[git.refs.remote.RemoteReference] self.remotes = uniq( # name = '<remote>/<branch>' -> '<remote>' [r.name.split('/', 2)[0] for r in list(self.target_map.values())] ) # change_count: Number of unstaged changes self.change_count = len( self.git.status(porcelain=True, untracked_files='no').split( six.b('\n')) ) # Load configuration self.settings = self.default_settings.copy() self.load_config()
def test_uniq(): assert utils.uniq([1, 1, 1, 2, 3]) == [1, 2, 3] assert utils.uniq([1]) == [1] assert utils.uniq([]) == []
def __init__(self, testing=False, sparse=False): # Sparse init: config only if sparse: self.git = GitWrapper(None) # Load configuration self.settings = self.default_settings.copy() self.load_config() return # Testing: redirect stderr to stdout self.testing = testing if self.testing: self.stderr = sys.stdout # Quiet testing else: # pragma: no cover self.stderr = sys.stderr self.states = [] # Check, if we're in a git repo try: self.repo = Repo(execute('git rev-parse --show-toplevel'), odbt=GitCmdObjectDB) except IndexError: exc = GitError("We don't seem to be in a git repository.") self.print_error(exc) raise exc # Check for branch tracking informatino if not any(b.tracking_branch() for b in self.repo.branches): exc = GitError("Can\'t update your repo because it doesn\'t has " "any branches with tracking information.") self.print_error(exc) raise exc self.git = GitWrapper(self.repo) # target_map: map local branch names to remote tracking branches self.target_map = dict() for branch in self.repo.branches: target = branch.tracking_branch() if target: if target.name.startswith('./'): # Tracking branch is in local repo target.is_local = True else: target.is_local = False self.target_map[branch.name] = target # branches: all local branches with tracking information self.branches = [b for b in self.repo.branches if b.tracking_branch()] self.branches.sort(key=lambda br: br.name) # remotes: all remotes that are associated with local branches self.remotes = uniq( # name = '<remote>/<branch>' -> '<remote>' [r.name.split('/', 2)[0] for r in list(self.target_map.values())] ) # change_count: Number of unstaged changes self.change_count = len( self.git.status(porcelain=True, untracked_files='no').split('\n') ) # Load configuration self.settings = self.default_settings.copy() self.load_config()
def __init__(self, testing=False, sparse=False): # Sparse init: config only if sparse: self.git = GitWrapper(None) # Load configuration self.settings = self.default_settings.copy() self.load_config() return # Testing: redirect stderr to stdout self.testing = testing if testing: self.stderr = sys.stdout # Quiet testing else: self.stderr = sys.stderr self.states = [] # Check, if we're in a git repo try: self.repo = Repo(execute('git rev-parse --show-toplevel'), odbt=GitCmdObjectDB) except IndexError: exc = GitError("We don't seem to be in a git repository.") self.print_error(exc) raise exc # Check for branch tracking informatino if not any(b.tracking_branch() for b in self.repo.branches): exc = GitError("Can\'t update your repo because it doesn\'t has " "any branches with tracking information.") self.print_error(exc) raise exc self.git = GitWrapper(self.repo) # target_map: map local branch names to remote tracking branches self.target_map = dict() for branch in self.repo.branches: target = branch.tracking_branch() if target: if target.name.startswith('./'): # Tracking branch is in local repo target.is_local = True else: target.is_local = False self.target_map[branch.name] = target # branches: all local branches with tracking information self.branches = [b for b in self.repo.branches if b.tracking_branch()] self.branches.sort(key=lambda br: br.name) # remotes: all remotes that are associated with local branches self.remotes = uniq( # name = '<remote>/<branch>' -> '<remote>' [r.name.split('/', 2)[0] for r in list(self.target_map.values())] ) # change_count: Number of unstaged changes self.change_count = len( self.git.status(porcelain=True, untracked_files='no').split('\n') ) # Load configuration self.settings = self.default_settings.copy() self.load_config()
def test_uniq(): assert_equal(utils.uniq([1, 1, 1, 2, 3]), [1, 2, 3]) assert_equal(utils.uniq([1]), [1]) assert_equal(utils.uniq([]), [])