about summary refs log tree commit diff stats
path: root/html/012transform.cc.html
Commit message (Expand)AuthorAgeFilesLines
* 4891Kartik Agaram2018-12-301-0/+1
* 4890 - new html renderingsKartik Agaram2018-12-291-15/+10
* 4814Kartik Agaram2018-12-011-17/+21
* 4709Kartik Agaram2018-10-171-4/+4
* 4539Kartik Agaram2018-09-071-4/+4
* 4447Kartik Agaram2018-07-271-5/+5
* 4239Kartik Agaram2018-05-081-4/+4
* 4228Kartik K. Agaram2018-03-151-1/+1
* 4199Kartik K. Agaram2018-01-251-25/+24
* 4162Kartik K. Agaram2017-12-221-1/+1
* 4161Kartik K. Agaram2017-12-151-5/+5
* 4155Kartik K. Agaram2017-12-071-4/+4
* 3971Kartik K. Agaram2017-08-191-1/+1
* 3927Kartik K. Agaram2017-06-191-4/+4
* 3897 - various updates to documentationKartik K. Agaram2017-05-291-4/+4
* 3764 - better colors for cross-linksKartik K. Agaram2017-03-081-4/+5
* 3761Kartik K. Agaram2017-03-071-58/+60
* 3750Kartik K. Agaram2017-03-021-4/+4
* 3749Kartik K. Agaram2017-03-021-4/+4
* 3746Kartik K. Agaram2017-02-071-1/+1
* 3716Kartik K. Agaram2016-12-261-0/+2
* 3713 - cross-link calls with definitions in htmlKartik K. Agaram2016-12-261-23/+23
* 3710Kartik K. Agaram2016-12-261-101/+101
* 3709 - line numbers in htmlKartik K. Agaram2016-12-261-103/+127
* 3561Kartik K. Agaram2016-10-221-2/+2
* 3558Kartik K. Agaram2016-10-221-1/+1
* 3544Kartik K. Agaram2016-10-221-1/+1
* 3543Kartik K. Agaram2016-10-221-1/+1
* 3524Kartik K. Agaram2016-10-201-11/+7
* 3456Kartik K. Agaram2016-10-061-3/+8
* 2996Kartik K. Agaram2016-05-211-0/+12
* 2866Kartik K. Agaram2016-04-251-1/+1
* 2812Kartik K. Agaram2016-03-271-15/+24
* 2744Kartik K. Agaram2016-03-091-3/+3
* 2743Kartik K. Agaram2016-03-091-32/+30
* 2611Kartik K. Agaram2015-11-291-0/+9
* 2423 - describe shape-shifting in html docsKartik K. Agaram2015-11-101-3/+24
* 2175Kartik K. Agaram2015-09-061-4/+2
* 2062Kartik K. Agaram2015-08-231-18/+17
* 1949Kartik K. Agaram2015-08-061-16/+17
* 1885Kartik K. Agaram2015-07-291-17/+16
* 1853Kartik K. Agaram2015-07-251-16/+17
* 1766Kartik K. Agaram2015-07-121-4/+5
* 1632Kartik K. Agaram2015-06-231-1/+1
* 1631 - update html versionsKartik K. Agaram2015-06-231-5/+5
* 1556Kartik K. Agaram2015-06-121-1/+1
* 1549Kartik K. Agaram2015-06-091-2/+2
* 1517Kartik K. Agaram2015-05-301-3/+3
* 1461 - descriptions/table of contents for the layersKartik K. Agaram2015-05-261-1/+1
* 1459Kartik K. Agaram2015-05-251-10/+10
class="kc">None: return None rev = rev.strip() if len(rev) == 0: return None 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'] if refspec: args = args + ["-r", refspec] if filelist: args = args + filelist raw = self._bzr(self.path, args, catchout=True, silent=True) L = re.findall('-+$(.*?)^-', raw + '\n---', re.MULTILINE | re.DOTALL) log = [] for t in L: t = t.strip() if len(t) == 0: continue dt = {} m = re.search('^revno:\s*([0-9]+)\s*$', t, re.MULTILINE) if m: dt['short'] = m.group(1).strip() m = re.search('^revision-id:\s*(.+)\s*$', t, re.MULTILINE) if m: dt['revid'] = m.group(1).strip() m = re.search('^committer:\s*(.+)\s*$', t, re.MULTILINE) if m: dt['author'] = m.group(1).strip() m = re.search('^timestamp:\s*(.+)\s*$', t, re.MULTILINE) if m: dt['date'] = datetime.strptime(m.group(1).strip(), '%a %Y-%m-%d %H:%M:%S %z') m = re.search('^message:\s*^(.+)$', t, re.MULTILINE) if m: dt['summary'] = m.group(1).strip() log.append(dt) return log def _bzr_file_status(self, st): st = st.strip() if st in "AM": return 'staged' elif st in "D": return 'deleted' 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 #--------------------------- def get_status_allfiles(self): """Returns a dict indexed by files not in sync their status as values. Paths are given relative to the root. Strips trailing '/' from dirs.""" raw = self._bzr(self.path, ['status', '--short', '--no-classify'], catchout=True, bytes=True) L = re.findall('^(..)\s*(.*?)\s*$', raw.decode('utf-8'), re.MULTILINE) ret = {} for st, p in L: sta = self._bzr_file_status(st) 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_remote_status(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) except VcsError: remote = "" 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_info(self, rev=None): """Gets info about the given revision rev""" if rev == None: rev = self.HEAD rev = self._sanitize_rev(rev) if rev == self.HEAD and not self._has_head(): return [] L = self._log(refspec=rev) if len(L) == 0: raise VcsError("Revision %s does not exist" % rev) elif len(L) > 1: 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 [] # vim: expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80