Rev 1354: Add implementation and tests for stats. in http://people.samba.org/bzr/jelmer/bzr-svn/0.4
Jelmer Vernooij
jelmer at samba.org
Thu Jun 26 17:27:43 BST 2008
At http://people.samba.org/bzr/jelmer/bzr-svn/0.4
------------------------------------------------------------
revno: 1354
revision-id: jelmer at samba.org-20080626162742-u11ccsf6jfn13w82
parent: jelmer at samba.org-20080626153956-oeoak8n8or9nqn5q
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Thu 2008-06-26 18:27:42 +0200
message:
Add implementation and tests for stats.
modified:
mapping.py mapping.py-20080128201303-6cp01phc0dmc0kiv-1
repository.py repository.py-20060306123302-1f8c5069b3fe0265
tests/test_blackbox.py test_blackbox.py-20070325150839-d10llf8arptpcfl6-1
tests/test_repository.py test_repos.py-20060508151940-ddc49a59257ca712
=== modified file 'mapping.py'
--- a/mapping.py 2008-06-22 23:44:07 +0000
+++ b/mapping.py 2008-06-26 16:27:42 +0000
@@ -135,6 +135,11 @@
return tuple(filter(lambda x: x != "", line.split("\t")))
+
+def parse_svn_dateprop(date):
+ return (properties.time_from_cstring(date) / 1000000.0, 0)
+
+
def parse_svn_revprops(svn_revprops, rev):
if svn_revprops.has_key(properties.PROP_REVISION_AUTHOR):
rev.committer = svn_revprops[properties.PROP_REVISION_AUTHOR]
@@ -150,8 +155,7 @@
pass
assert svn_revprops.has_key(properties.PROP_REVISION_DATE)
- rev.timestamp = properties.time_from_cstring(svn_revprops[properties.PROP_REVISION_DATE]) / 1000000.0
- rev.timezone = None
+ (rev.timestamp, rev.timezone) = parse_svn_dateprop(svn_revprops[properties.PROP_REVISION_DATE])
rev.properties = {}
=== modified file 'repository.py'
--- a/repository.py 2008-06-26 13:41:46 +0000
+++ b/repository.py 2008-06-26 16:27:42 +0000
@@ -23,7 +23,7 @@
from bzrlib.graph import CachingParentsProvider
from bzrlib.inventory import Inventory
from bzrlib.lockable_files import LockableFiles, TransportLock
-from bzrlib.repository import Repository, RepositoryFormat
+from bzrlib.repository import Repository, RepositoryFormat, needs_read_lock
from bzrlib.revisiontree import RevisionTree
from bzrlib.revision import Revision, NULL_REVISION, ensure_null
from bzrlib.transport import Transport, get_transport
@@ -31,7 +31,7 @@
import os
-from bzrlib.plugins.svn import changes, core, errors, logwalker
+from bzrlib.plugins.svn import changes, core, errors, logwalker, properties
from bzrlib.plugins.svn.branchprops import PathPropertyProvider
from bzrlib.plugins.svn.cache import create_cache_dir, sqlite3
from bzrlib.plugins.svn.changes import changes_path, find_prev_location
@@ -40,7 +40,8 @@
from bzrlib.plugins.svn.mapping import (SVN_PROP_BZR_REVISION_ID, SVN_REVPROP_BZR_SIGNATURE,
parse_revision_metadata, parse_revid_property,
parse_merge_property, BzrSvnMapping,
- get_default_mapping, parse_revision_id)
+ get_default_mapping, parse_revision_id,
+ parse_svn_dateprop)
from bzrlib.plugins.svn.mapping3 import BzrSvnMappingv3FileProps
from bzrlib.plugins.svn.parents import SqliteCachingParentsProvider
from bzrlib.plugins.svn.revids import CachingRevidMap, RevidMap
@@ -247,6 +248,24 @@
self._cached_revnum = self.transport.get_latest_revnum()
return self._cached_revnum
+ @needs_read_lock
+ def gather_stats(self, revid=None, committers=None):
+ result = {}
+ def revdate(revnum):
+ return parse_svn_dateprop(self._log.revprop_list(revnum)[properties.PROP_REVISION_DATE])
+ if committers is not None and revid is not None:
+ all_committers = set()
+ for rev in self.get_revisions(filter(lambda r: r is not None and r != NULL_REVISION, self.get_ancestry(revid))):
+ if rev.committer != '':
+ all_committers.add(rev.committer)
+ result['committers'] = len(all_committers)
+ result['firstrev'] = revdate(0)
+ result['latestrev'] = revdate(self.get_latest_revnum())
+ result['uuid'] = self.uuid
+ # Approximate number of revisions
+ result['revisions'] = self.get_latest_revnum()+1
+ return result
+
def get_mapping(self):
if self._default_mapping is None:
self._default_mapping = get_default_mapping().from_repository(self, self._hinted_branch_path)
@@ -362,8 +381,6 @@
ancestry = []
graph = self.get_graph()
for rev, parents in graph.iter_ancestry([revision_id]):
- if rev == NULL_REVISION:
- rev = None
ancestry.append(rev)
ancestry.reverse()
return ancestry
=== modified file 'tests/test_blackbox.py'
--- a/tests/test_blackbox.py 2008-06-05 02:12:47 +0000
+++ b/tests/test_blackbox.py 2008-06-26 16:27:42 +0000
@@ -42,6 +42,14 @@
repos_url = self.make_repository('d')
self.run_bzr('log %s' % repos_url)
+ def test_info(self):
+ repos_url = self.make_repository('d')
+ self.run_bzr('info %s' % repos_url)
+
+ def test_info_verbose(self):
+ repos_url = self.make_repository('d')
+ self.run_bzr('info -v %s' % repos_url)
+
def test_dumpfile(self):
filename = os.path.join(self.test_dir, "dumpfile")
uuid = "606c7b1f-987c-4826-b37d-eb456ceb87e1"
=== modified file 'tests/test_repository.py'
--- a/tests/test_repository.py 2008-06-23 18:58:17 +0000
+++ b/tests/test_repository.py 2008-06-26 16:27:42 +0000
@@ -248,6 +248,15 @@
set_branching_scheme(repos, TrunkBranchingScheme())
self.assertEqual([], list(repos.all_revision_ids()))
+ def test_gather_stats(self):
+ repos_url = self.make_repository("a")
+ repos = Repository.open(repos_url)
+ stats = repos.gather_stats()
+ self.assertEquals(1, stats['revisions'])
+ self.assertTrue(stats.has_key("firstrev"))
+ self.assertTrue(stats.has_key("latestrev"))
+ self.assertFalse(stats.has_key('committers'))
+
def test_all_revs(self):
repos_url = self.make_client("a", "dc")
self.build_tree({'dc/trunk/file': "data", "dc/foo/file":"data"})
More information about the bazaar-commits
mailing list