Ticket #2382: 2382.1.patch
| File 2382.1.patch, 6.1 KB (added by Carsten Klein <carsten.klein@…>, 2 years ago) |
|---|
-
versioncontrol/admin.py
13 13 14 14 import sys 15 15 16 from StringIO import StringIO 17 16 18 from trac.admin import IAdminCommandProvider, IAdminPanelProvider 17 19 from trac.config import _TRUE_VALUES 18 20 from trac.core import * 19 21 from trac.perm import IPermissionRequestor 20 22 from trac.util.text import breakable_path, normalize_whitespace, print_table, \ 21 printout23 console_print, printout 22 24 from trac.util.translation import _, ngettext 23 25 from trac.versioncontrol import DbRepositoryProvider, RepositoryManager, \ 24 26 is_default … … 107 109 alias, info.get('dir', ''))) 108 110 print_table(values, [_('Name'), _('Type'), _('Alias'), _('Directory')]) 109 111 110 def _sync(self, reponame, rev, clean ):112 def _sync(self, reponame, rev, clean, out=sys.stdout): 111 113 rm = RepositoryManager(self.env) 112 114 if reponame == '*': 113 115 if rev is not None: … … 123 125 reponame=reponame or _('(default)'))) 124 126 if rev is not None: 125 127 repos.sync_changeset(rev) 126 printout(_('%(rev)s resynced on %(reponame)s.', rev=rev,127 re poname=repos.reponame or _('(default)')))128 console_print(out, _('%(rev)s resynced on %(reponame)s.', 129 rev=rev, reponame=repos.reponame or _('(default)'))) 128 130 return 129 131 repositories = [repos] 130 132 131 133 db = self.env.get_db_cnx() 132 134 cursor = db.cursor() 133 135 for repos in sorted(repositories, key=lambda r: r.reponame): 134 printout(_('Resyncing repository history for %(reponame)s... ', 136 137 console_print(out, _('Resyncing repository history for %(reponame)s... ', 135 138 reponame=repos.reponame or _('(default)'))) 136 repos.sync(self._sync_feedback, clean=clean)139 repos.sync(self._sync_feedback, out=out, clean=clean) 137 140 cursor.execute("SELECT count(rev) FROM revision WHERE repos=%s", 138 141 (repos.id,)) 139 142 for cnt, in cursor: 140 printout(ngettext('%(num)s revision cached.',143 console_print(out, ngettext('%(num)s revision cached.', 141 144 '%(num)s revisions cached.', num=cnt)) 142 printout(_('Done.'))145 console_print(out, _('Done.')) 143 146 144 def _sync_feedback(self, rev ):145 sys.stdout.write(' [%s]\r' % rev)146 sys.stdout.flush()147 def _sync_feedback(self, rev, out=sys.stdout): 148 out.write(' [%s]\r' % rev) 149 out.flush() 147 150 148 151 def _do_resync(self, reponame, rev=None): 149 152 self._sync(reponame, rev, clean=True) … … 258 261 # Refresh the list of repositories 259 262 elif req.args.get('refresh'): 260 263 req.redirect(req.href.admin(category, page)) 261 264 265 # Resync the selected repositories or all if none selected 266 elif req.args.get('resync'): 267 out = StringIO() 268 sel = req.args.getlist('sel') 269 if len(sel) == 0: 270 add_warning(req, _('Please select a repository or alias for resynchronization.')) 271 else: 272 rm = RepositoryManager(self.env) 273 reponames = set() 274 for name in sel: 275 reponames.add(rm.get_repository(name).reponame) 276 for name in reponames: 277 self._sync(name, None, True, out=out) 278 for line in out.getvalue().split('\n'): 279 if len(line) > 0: 280 add_notice(req, line) 281 262 282 # Remove repositories 263 283 elif db_provider and req.args.get('remove'): 264 284 sel = req.args.getlist('sel') -
versioncontrol/api.py
720 720 """ 721 721 pass 722 722 723 def sync(self, rev_callback=None, clean=False ):723 def sync(self, rev_callback=None, clean=False, out=None): 724 724 """Perform a sync of the repository cache, if relevant. 725 725 726 726 If given, `rev_callback` must be a callable taking a `rev` parameter. -
versioncontrol/cache.py
15 15 # Author: Christopher Lenz <cmlenz@gmx.de> 16 16 17 17 import os 18 import sys 18 19 19 20 from trac.cache import CacheProxy 20 21 from trac.core import TracError … … 112 113 (self.id,) + CACHE_METADATA_KEYS) 113 114 return dict(cursor) 114 115 115 def sync(self, feedback=None, clean=False ):116 def sync(self, feedback=None, clean=False, out=sys.out): 116 117 db = self.env.get_db_cnx() 117 118 cursor = db.cursor() 118 119 if clean: … … 277 278 278 279 # 1.5. provide some feedback 279 280 if feedback: 280 feedback(youngest )281 feedback(youngest, out=out) 281 282 282 283 def get_node(self, path, rev=None): 283 284 return self.repos.get_node(path, self.normalize_rev(rev)) -
versioncontrol/templates/admin_repositories.html
141 141 </table> 142 142 <div class="buttons"> 143 143 <input type="submit" name="refresh" value="${_('Refresh')}"/> 144 <input type="submit" name="resync" value="${_('Resync')}"/> 144 145 <input type="submit" name="remove" value="${_('Remove selected items')}"/> 145 146 </div> 146 147 </form>
