def load(self, repo_path): repo_path = core.svn_path_canonicalize(repo_path) repos_ptr = repos.open(repo_path) fs_ptr = repos.fs(repos_ptr) rev = fs.youngest_rev(fs_ptr) base_root = fs.revision_root(fs_ptr, 0) root = fs.revision_root(fs_ptr, rev) hist = fs.node_history(root, self.root) while hist is not None: hist = fs.history_prev(hist,0) dummy,rev = fs.history_location(hist) d = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_DATE) author = fs.revision_prop(fs_ptr, rev, \ core.SVN_PROP_REVISION_AUTHOR) if author == 'svnadmin': continue self.last_author = author self.last_date = core.svn_time_from_cstring(d) / 1000000 self.last_rev = rev def authz_cb(root, path, pool): return 1 editor = SvnDumperEditor(self) e_ptr, e_baton = delta.make_editor(editor) repos.dir_delta(base_root, '', '', root, self.root, e_ptr, e_baton, authz_cb, 0, 1, 0, 0) break
def do_ls(self, arg): """list the contents of the current directory or provided path""" parent = self.path if not len(arg): # no arg -- show a listing for the current directory. entries = fs.dir_entries(self.root, self.path) else: # arg? show a listing of that path. newpath = self._parse_path(arg) kind = fs.check_path(self.root, newpath) if kind == core.svn_node_dir: parent = newpath entries = fs.dir_entries(self.root, parent) elif kind == core.svn_node_file: parts = self._path_to_parts(newpath) name = parts.pop(-1) parent = self._parts_to_path(parts) print(parent + ':' + name) tmpentries = fs.dir_entries(self.root, parent) if not tmpentries.get(name, None): return entries = {} entries[name] = tmpentries[name] else: print("Path '%s' not found." % newpath) return keys = sorted(entries.keys()) print(" REV AUTHOR NODE-REV-ID SIZE DATE NAME") print("----------------------------------------------------------------------------") for entry in keys: fullpath = parent + '/' + entry size = '' is_dir = fs.is_dir(self.root, fullpath) if is_dir: name = entry + '/' else: size = str(fs.file_length(self.root, fullpath)) name = entry node_id = fs.unparse_id(entries[entry].id) created_rev = fs.node_created_rev(self.root, fullpath) author = fs.revision_prop(self.fs_ptr, created_rev, core.SVN_PROP_REVISION_AUTHOR) if not author: author = "" date = fs.revision_prop(self.fs_ptr, created_rev, core.SVN_PROP_REVISION_DATE) if not date: date = "" else: date = self._format_date(date) print("%6s %8s %12s %8s %12s %s" % (created_rev, author[:8], node_id, size, date, name))
def get_last_modified(self): _date = fs.revision_prop(self.fs_ptr, self.created_rev, core.SVN_PROP_REVISION_DATE, self.pool()) if not _date: return None return core.svn_time_from_cstring(_date, self.pool()) / 1000000
def get_revision_info(self, revision_number): """ Get revision information: @return: svn_log, svn_date, svn_author """ # Get svn log information svn_log = fs.revision_prop(self.fs_ptr, revision_number, 'svn:log') # Commit date of the selected revision svn_date = fs.revision_prop(self.fs_ptr, revision_number, 'svn:date') # Author of the selected revisision svn_author = fs.revision_prop(self.fs_ptr, revision_number, 'svn:author') # Return turple with all information return (svn_log, svn_date, svn_author)
def get_last_modified(self): """Retrieve timestamp of last modification, in micro-seconds. (wraps ``fs.revision_prop``) """ _date = fs.revision_prop(self.fs_ptr, self.created_rev, core.SVN_PROP_REVISION_DATE, self.pool()) if not _date: return None return from_utimestamp(core.svn_time_from_cstring(_date, self.pool()))
def plist(rev=None, home='.', *props): db_path = os.path.join(home, 'db') if not os.path.exists(db_path): db_path = home fs_ptr = fs.new(None) fs.open_berkeley(fs_ptr, db_path) if rev is None: rev = fs.youngest_rev(fs_ptr) print('Properties for revision: %s' % rev) if props: for propname in props: value = fs.revision_prop(fs_ptr, rev, propname) if value is None: print('%s: <not present>' % propname) else: print('%s: %s' % (propname, value)) else: proplist = fs.revision_proplist(fs_ptr, rev) for propname, value in proplist.items(): print('%s: %s' % (propname, value))
def get_last_modified(self): date = fs.revision_prop(self.fs_ptr, self.created_rev, core.SVN_PROP_REVISION_DATE) return core.svn_time_from_cstring(date) / 1000000
def _get_prop(self, name): return fs.revision_prop(self.fs_ptr, self.rev, name, self.pool())
def _get_property(self, name): """Returns the revision/transaction property for the given name.""" if self.txn_ptr: return fs.txn_prop(self.txn_ptr, name) return fs.revision_prop(self.fs_ptr, self.rev, name)
def _get_revprop(self, name): return fs.revision_prop(self.fs_ptr, self.node.rev, name, self.pool())
def get_last_modified(self): date = fs.revision_prop(self.fs_ptr, self.created_rev, core.SVN_PROP_REVISION_DATE, self.pool()) if not date: return 0 return core.svn_time_from_cstring(date, self.pool()) / 1000000
def _fs_rev_props(fsptr, rev, pool): author = fs.revision_prop(fsptr, rev, core.SVN_PROP_REVISION_AUTHOR, pool) msg = fs.revision_prop(fsptr, rev, core.SVN_PROP_REVISION_LOG, pool) date = fs.revision_prop(fsptr, rev, core.SVN_PROP_REVISION_DATE, pool) return date, author, msg
def date_from_rev(svnrepos, rev): if (rev < 0) or (rev > svnrepos.youngest): raise vclib.InvalidRevision(rev) datestr = fs.revision_prop(svnrepos.fs_ptr, rev, core.SVN_PROP_REVISION_DATE, svnrepos.pool) return _datestr_to_date(datestr, svnrepos.pool)
def _get_property(self, name): if self.txn_ptr: return fs.txn_prop(self.txn_ptr, name) return fs.revision_prop(self.fs_ptr, self.rev, name)
def _get_prop(self, name): return fs.revision_prop(self.fs_ptr, self.rev, name)
def main(pool, repos_dir, rev, config_fp): # Construct a ChangeCollector to fetch our changes. fs_ptr = repos.svn_repos_fs(repos.svn_repos_open(repos_dir, pool)) root = fs.revision_root(fs_ptr, rev, pool) # Get revision properties we need. (Subversion 1.2) # cc = repos.ChangeCollector(fs_ptr, root, pool) # props = cc.get_root_props() # author = str(props.get(core.SVN_PROP_REVISION_AUTHOR, '')) # log = str(props.get(core.SVN_PROP_REVISION_LOG, '')) # Get revision properties we need. (Subversion 1.1) cc = repos.RevisionChangeCollector(fs_ptr, rev, pool) author = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_AUTHOR, pool) log = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_LOG, pool) ### Do any Subversion-to-Scarab author mappings here ### # Example: # _authors = { # 'miw':'mick', # 'lif':'lisefr', # 'gni':'gunleik', # 'man':'Maja', # 'ako':'konand', # 'hho':'helga', # 'hba':'hilde', # 'rgc':'rgc' # } # author = _authors.get(author, author) # Now build the comment. First we start with some header # information about the revision, and a link to the ViewCVS revision # view. e_ptr, e_baton = delta.make_editor(cc, pool) repos.svn_repos_replay(root, e_ptr, e_baton, pool) comment = "%s %d: %s/?view=rev&rev=%d\n" \ % (MSG_SUBVERSION_COMMIT, rev, VIEWCVS_URL, rev) comment = comment + \ """------------------------------------------------------------------------- %s ------------------------------------------------------------------------- """ % log # Next, we'll figure out which paths changed and use that # information to generate ViewCVS links. # changes = cc.get_changes() # Subversion 1.2 changes = cc.changes # Subversion 1.1 paths = changes.keys() # paths.sort(lambda a, b: core.svn_path_compare_paths(a, b)) # Subversion 1.2 for path in paths: change = changes[path] diff_url = '' action = None if not change.path: ### Deleted (show the last living version) action = MSG_ACTION_DELETED diff_url = '%s/%s?view=auto&rev=%d' \ % (VIEWCVS_URL, urllib.quote(change.base_path[1:]), change.base_rev) elif change.added: ### Added if change.base_path and (change.base_rev != -1): ### (with history) action = MSG_ACTION_COPIED diff_url = '%s/%s?view=diff&rev=%d&p1=%s&r1=%d&p2=%s&r2=%d' \ % (VIEWCVS_URL, urllib.quote(change.path), rev, urllib.quote(change.base_path[1:]), change.base_rev, urllib.quote(change.path), rev) else: ### (without history, show new file) action = MSG_ACTION_ADDED diff_url = '%s/%s?view=auto&rev=%d' \ % (VIEWCVS_URL, urllib.quote(change.path), rev) elif change.text_changed: ### Modified action = MSG_ACTION_MODIFIED diff_url = '%s/%s?view=diff&rev=%d&p1=%s&r1=%d&p2=%s&r2=%d' \ % (VIEWCVS_URL, urllib.quote(change.path), rev, urllib.quote(change.base_path[1:]), change.base_rev, urllib.quote(change.path), rev) if action: comment = comment + "%s: %s\n %s\n" % (action, path, diff_url) # Connect to the xmlrpc server, and transmit our data. Server(SCARAB_XMLRPC_URL).simple.addComment(log, author, comment, DISABLE_EMAILS)
def _prop(self,propid): return fs.revision_prop(self._repo.fs_ptr, self._revno, propid) or ''