Edgewall Software

Ticket #2620: check_svn_repos.py

File check_svn_repos.py, 1.4 KB (added by cboos, 3 years ago)

Very simple test script that directly fetches a changeset from a repository. Usage: python svn_check_repos.py <repository_path> <changeset>

Line 
1from trac.versioncontrol.svn_fs import Pool
2from trac.util import TracError
3from svn import repos, fs, delta
4
5import sys
6import os
7
8class ChangeCollectorChecker(object):
9    def __init__(self, path):
10        self.pool = Pool()
11       
12        # Remove any trailing slash or else subversion might abort
13        path = os.path.normpath(path).replace('\\', '/')
14        self.path = repos.svn_repos_find_root_path(path, self.pool())
15        if self.path is None:
16            raise TracError, \
17                  "%s does not appear to be a Subversion repository." % path
18
19        self.repos = repos.svn_repos_open(self.path, self.pool())
20        self.fs_ptr = repos.svn_repos_fs(self.repos)
21
22    def check(self, rev):
23        pool = Pool(self.pool)
24        root = fs.revision_root(self.fs_ptr, rev, pool())
25        editor = repos.RevisionChangeCollector(self.fs_ptr, rev, pool())
26        e_ptr, e_baton = delta.make_editor(editor, pool())
27        repos.svn_repos_replay(root, e_ptr, e_baton, pool())
28
29
30if __name__ == '__main__':
31    try:
32        path = sys.argv[1]
33        rev = sys.argv[2]
34        ChangeCollectorChecker(path).check(int(rev))
35        import gc
36        print "Checked revision %s (%d objects unreachable)" % (rev, gc.collect())
37    except:
38        import traceback
39        traceback.print_exc(file=sys.stderr)
40        print>>sys.stderr, "Usage: python check_repos.py <repository_path> <revision>"
41        sys.exit(2)