def __init__(self, path, **kw): assert not os.path.isfile(path), "No directory given!" Loadable.__init__(self, None, None) Accumulator.__init__(self) FileSystemObject.__init__(self, path, **kw) self.marked_items = list() for opt in ('sort_directories_first', 'sort', 'sort_reverse', 'sort_case_insensitive'): self.settings.signal_bind('setopt.' + opt, self.request_resort, weak=True, autosort=False) for opt in ('hidden_filter', 'show_hidden'): self.settings.signal_bind('setopt.' + opt, self.refilter, weak=True, autosort=False) self.settings = LocalSettings(path, self.settings) if self.settings.vcs_aware: self.vcs = Vcs(self) self.use()
def vcs(self): if not self._vcs_signal_handler_installed: self.settings.signal_bind('setopt.vcs_aware', self.vcs__reset, # pylint: disable=no-member weak=True, autosort=False) self._vcs_signal_handler_installed = True if self.settings.vcs_aware: return Vcs(self)
def load_vcs(self, parent): """ Reads data regarding the version control system the object is on. Does not load content specific data. """ from ranger.ext.vcs import Vcs, VcsError vcs = Vcs(self.path) # Not under vcs if vcs.root == None: return # Already know about the right vcs elif self.vcs and abspath(vcs.root) == abspath(self.vcs.root): self.vcs.update() # Need new Vcs object and self.path is the root elif self.vcs == None and abspath(vcs.root) == abspath(self.path): self.vcs = vcs self.vcs_outdated = True # Otherwise, find the root, and try to get the Vcs object from there else: rootdir = self.fm.get_directory(vcs.root) rootdir.load_if_outdated() # Get the Vcs object from rootdir rootdir.load_vcs(None) self.vcs = rootdir.vcs if rootdir.vcs_outdated: self.vcs_outdated = True if self.vcs: if self.vcs.vcsname == 'git': backend_state = self.settings.vcs_backend_git elif self.vcs.vcsname == 'hg': backend_state = self.settings.vcs_backend_hg elif self.vcs.vcsname == 'bzr': backend_state = self.settings.vcs_backend_bzr else: backend_state = 'disabled' self.vcs_enabled = backend_state in set(['enabled', 'local']) if self.vcs_enabled: try: if self.vcs_outdated or (parent and parent.vcs_outdated): self.vcs_outdated = False # this caches the file status for get_file_status(): self.vcs.get_status() self.vcsbranch = self.vcs.get_branch() self.vcshead = self.vcs.get_info(self.vcs.HEAD) if self.path == self.vcs.root and \ backend_state == 'enabled': self.vcsremotestatus = \ self.vcs.get_remote_status() elif parent: self.vcsbranch = parent.vcsbranch self.vcshead = parent.vcshead self.vcsfilestatus = self.vcs.get_file_status(self.path) except VcsError as err: self.vcsbranch = None self.vcshead = None self.vcsremotestatus = 'unknown' self.vcsfilestatus = 'unknown' self.fm.notify("Can not load vcs data on %s: %s" % (self.path, err), bad=True) else: self.vcs_enabled = False