Get svn_ra module working again

* lib\vclib\svn_ra\__init__.py
  (created_rev):
    new function

  (LogEntry):
    removed

  (fetch_log):
    create Revision objects instead of LogEntries, and simplify return
    value

  (get_logs):
    set DirEntry.log_error property

  (SubversionRepository.listdir):
    add options argument to match rest of vclib library

  (SubversionRepository.dirlogs, filelog):
    add new vclib methods


git-svn-id: http://viewvc.tigris.org/svn/viewvc/trunk@799 8cb11bc2-c004-0410-86c3-e597b4017df7
remotes/tags/1.0.0-rc1
rey4 2004-01-25 19:29:00 +00:00
parent b826424b50
commit b01c037437
1 changed files with 34 additions and 25 deletions

View File

@ -25,6 +25,8 @@ import re
import tempfile
import popen2
from vclib.svn import Revision
# Subversion swig libs
from svn import core, delta, client, wc
@ -46,20 +48,9 @@ def date_from_rev(svnrepos, rev):
### this is, obviously, wrong
return 0
class LogEntry:
"Hold state for each revision's log entry."
def __init__(self, rev, date, author, msg, filename, copy_path, copy_rev):
self.rev = rev
self.date = date
self.author = author
self.state = '' # should we populate this?
self.changed = 0
self.log = msg
self.filename = filename
self.copy_path = copy_path
self.copy_rev = copy_rev
def created_rev(svnrepos, full_name):
### this is, obviously, wrong
return 0
class LastHistoryCollector:
def __init__(self):
@ -91,28 +82,23 @@ def _get_revision_info(svnrepos, rev, pool):
def fetch_log(svnrepos, full_name):
alltags = { # all the tags seen in the files of this dir
'MAIN' : '1',
'HEAD' : '1',
}
logs = {}
logs = []
dir_url = svnrepos.rootpath
if full_name and full_name != '':
if full_name:
dir_url = dir_url + '/' + full_name
def _log_cb(paths, revision, author, date, message, pool,
logs=logs, path=full_name):
date = core.svn_time_from_cstring(date, pool)
entry = LogEntry(revision, date, author, message, path, None, None)
entry.size = 0
logs[revision] = entry
entry = Revision(revision, date, author, message, None, path, None, None)
logs.append(entry)
cross_copies = getattr(svnrepos, 'cross_copies', 1)
client.svn_client_log([dir_url], _rev2optrev(1), _rev2optrev(svnrepos.rev),
0, not cross_copies, _log_cb,
svnrepos.ctx, svnrepos.pool)
return alltags, logs
return logs
def get_logs(svnrepos, full_name, files):
@ -130,6 +116,7 @@ def get_logs(svnrepos, full_name, files):
rev, author, date, log = _get_revision_info(svnrepos,
entry.created_rev, subpool)
rev_info_cache[entry.created_rev] = rev, author, date, log
file.log_error = 0
file.rev = rev
file.author = author
file.date = core.svn_time_from_cstring(date, subpool) / 1000000
@ -339,7 +326,7 @@ class SubversionRepository(vclib.Repository):
core.svn_stream_close(stream)
return SelfCleanFP(tmp_file), rev
def listdir(self, path_parts):
def listdir(self, path_parts, options):
entries = [ ]
dirents = self.get_dirents(path_parts, self.rev)
for name in dirents.keys():
@ -351,6 +338,28 @@ class SubversionRepository(vclib.Repository):
entries.append(vclib.DirEntry(name, kind))
return entries
def dirlogs(self, path_parts, entries, options):
get_logs(self, self._getpath(path_parts), entries)
def filelog(self, path_parts, rev, options):
full_name = self._getpath(path_parts)
if rev is not None:
try:
rev = int(rev)
except ValueError:
vclib.InvalidRevision(rev)
revs = fetch_log(self, full_name)
revs.sort()
prev = None
for rev in revs:
rev.prev = prev
prev = rev
return revs
def _getpath(self, path_parts):
return string.join(path_parts, '/')