Ticket #2382: 2382.patch
| File 2382.patch, 5.2 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/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>
