Discovering tags as part of a push back to a svn repository takes too long
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Bazaar Subversion Plugin |
New
|
Undecided
|
Unassigned |
Bug Description
I have a large svn repository (~410000 revisions, though the individual project I'm working with only has 7728 bzr revisions). As part of a push, there's a 'discovering tags' phase, which is prohibitively time consuming unless the entire TDB bzr-svn cache is in the kernel's disk cache (it's vastly faster to cat the cache.tdb to /dev/null and then run the bzr push).
Here is a backtrace during the operation
(Pdb) bt
/home/
-> exit_val = bzrlib.
/home/
-> ret = run_bzr_
/home/
-> return exception_
/home/
-> return the_callable(*args, **kwargs)
/home/
-> ret = run(*run_argv)
/home/
-> return self.run_
/home/
-> return self._operation
/home/
-> self.cleanups, self.func, *args, **kwargs)
/home/
-> result = func(*args, **kwargs)
/home/
-> use_existing_
/home/
-> remember, create_prefix)
/home/
-> overwrite=
/home/
-> *args, **kwargs)
/home/
-> result.
/home/
-> return self.source.
/home/
-> dest_dict = to_tags.
/home/
-> tag_revmetas = self._get_
/home/
-> revnum=
/home/
-> result = unbound(self, *args, **kwargs)
/home/
-> to_revnum=revnum)
/home/
-> result = unbound(self, *args, **kwargs)
/home/
-> for kind, item in self._revmeta_
/home/
-> for kind, item in browser:
/home/
-> return self.it()
/home/
-> ret = self._iter.next()
/home/
-> for (paths, revnum, revprops) in self._iter_log:
/home/
-> if path == "" or changes.
/home/
-> if path_is_child(path, p):
/home/
-> path.startswith
> /home/maxb/
-> signal.
I'm not sure this can really be said to be a duplicate of "decent cache format". Whilst that might ameliorate the situation a bit, I think the real problem here is that bzr-svn is doing a scan of the entire repository, not scoping its search correctly to the single project involved.