diff options
Diffstat (limited to 'ranger/ext/vcs/bzr.py')
-rw-r--r-- | ranger/ext/vcs/bzr.py | 154 |
1 files changed, 6 insertions, 148 deletions
diff --git a/ranger/ext/vcs/bzr.py b/ranger/ext/vcs/bzr.py index 7b870d7d..358db8ad 100644 --- a/ranger/ext/vcs/bzr.py +++ b/ranger/ext/vcs/bzr.py @@ -2,28 +2,25 @@ import os import re -import shutil from datetime import datetime from .vcs import Vcs, VcsError - class Bzr(Vcs): + """VCS implementiation for Bzr""" HEAD="last:1" - # Auxiliar stuff + # Generic #--------------------------- def _bzr(self, path, args, silent=True, catchout=False, bytes=False): return self._vcs(path, 'bzr', args, silent=silent, catchout=catchout, bytes=bytes) - def _has_head(self): """Checks whether repo has head""" rnum = self._bzr(self.path, ['revno'], catchout=True) return rnum != '0' - def _sanitize_rev(self, rev): if rev == None: return None rev = rev.strip() @@ -31,7 +28,6 @@ class Bzr(Vcs): return rev - def _log(self, refspec=None, filelist=None): """Gets a list of dicts containing revision info, for the revisions matching refspec""" args = ['log', '-n0', '--show-ids'] @@ -61,7 +57,6 @@ class Bzr(Vcs): log.append(dt) return log - def _bzr_file_status(self, st): st = st.strip() if st in "AM": return 'staged' @@ -69,76 +64,19 @@ class Bzr(Vcs): elif st in "?": return 'untracked' else: return 'unknown' - - - # Repo creation - #--------------------------- - - def init(self): - """Initializes a repo in current path""" - self._bzr(self.path, ['init']) - self.update() - - - def clone(self, src): - """Clones a repo from src""" - path = os.path.dirname(self.path) - name = os.path.basename(self.path) - try: - os.rmdir(self.path) - except OSError: - raise VcsError("Can't clone to %s. It is not an empty directory" % self.path) - - self._bzr(path, ['branch', src, name]) - self.update() - - - # Action Interface #--------------------------- - def commit(self, message): - """Commits with a given message""" - self._bzr(self.path, ['commit', '-m', message]) - - def add(self, filelist=None): """Adds files to the index, preparing for commit""" if filelist != None: self._bzr(self.path, ['add'] + filelist) else: self._bzr(self.path, ['add']) - def reset(self, filelist=None): """Removes files from the index""" if filelist != None: self._bzr(self.path, ['remove', '--keep', '--new'] + filelist) else: self._bzr(self.path, ['remove', '--keep', '--new']) - - def pull(self): - """Pulls a git repo""" - self._bzr(self.path, ['pull']) - - - def push(self): - """Pushes a git repo""" - self._bzr(self.path, ['push']) - - - def checkout(self, rev): - """Checks out a branch or revision""" - self._bzr(self.path, ['update', '-r', rev]) - - - def extract_file(self, rev, name, dest): - """Extracts a file from a given revision and stores it in dest dir""" - if rev == self.INDEX: - shutil.copyfile(os.path.join(self.path, name), dest) - else: - out = self._bzr(self.path, ['cat', '--r', rev, name], catchout=True, bytes=True) - with open(dest, 'wb') as fd: fd.write(out) - - - # Data Interface #--------------------------- @@ -153,65 +91,7 @@ class Bzr(Vcs): ret[os.path.normpath(p.strip())] = sta return ret - - def get_ignore_allfiles(self): - """Returns a set of all the ignored files in the repo. Strips trailing '/' from dirs.""" - raw = self._bzr(self.path, ['ls', '--ignored'], catchout=True) - return set(os.path.normpath(p) for p in raw.split('\n')) - - - # TODO: slow due to net access def get_status_remote(self): - """Checks the status of the repo regarding sync state with remote branch""" - if self.get_remote() == None: - return "none" - - ahead = behind = True - try: - self._bzr(self.path, ['missing', '--mine-only'], silent=True) - except: - ahead = False - - try: - self._bzr(self.path, ['missing', '--theirs-only'], silent=True) - except: - behind = False - - if ahead and behind: return "diverged" - elif ahead and not behind: return "ahead" - elif not ahead and behind: return "behind" - elif not ahead and not behind: return "sync" - - - def get_branch(self): - """Returns the current named branch, if this makes sense for the backend. None otherwise""" - branch = self._bzr(self.path, ['nick'], catchout=True) - return branch or None - - - def get_log(self, filelist=None, maxres=None): - """Get the entire log for the current HEAD""" - if not self._has_head(): return [] - return self._log(refspec=None, filelist=filelist) - - - def get_raw_log(self, filelist=None): - """Gets the raw log as a string""" - if not self._has_head(): return [] - args = ['log'] - if filelist: args = args + filelist - return self._bzr(self.path, args, catchout=True) - - - def get_raw_diff(self, refspec=None, filelist=None): - """Gets the raw diff as a string""" - args = ['diff', '--git'] - if refspec: args = args + [refspec] - if filelist: args = args + filelist - return self._bzr(self.path, args, catchout=True) - - - def get_remote(self): """Returns the url for the remote repo attached to head""" try: remote = self._bzr(self.path, ['config', 'parent_location'], catchout=True) @@ -220,19 +100,10 @@ class Bzr(Vcs): return remote.strip() or None - - def get_revision_id(self, rev=None): - """Get a canonical key for the revision rev""" - if rev == None: rev = self.HEAD - elif rev == self.INDEX: return None - rev = self._sanitize_rev(rev) - try: - L = self._log(refspec=rev) - except VcsError: - L = [] - if len(L) == 0: return None - else: return L[0]['revid'] - + def get_branch(self): + """Returns the current named branch, if this makes sense for the backend. None otherwise""" + branch = self._bzr(self.path, ['nick'], catchout=True) + return branch or None def get_info(self, rev=None): """Gets info about the given revision rev""" @@ -247,16 +118,3 @@ class Bzr(Vcs): raise VcsError("More than one instance of revision %s ?!?" % rev) else: return L[0] - - - def get_files(self, rev=None): - """Gets a list of files in revision rev""" - if rev == None: rev = self.HEAD - rev = self._sanitize_rev(rev) - - if rev: - if rev == self.INDEX: raw = self._bzr(self.path, ["ls"], catchout=True) - else: raw = self._bzr(self.path, ['ls', '--R', '-V', '-r', rev], catchout=True) - return raw.split('\n') - else: - return [] |