Edgewall Software

Ticket #7723: 7723-changeset-admin-r8028.2.patch

File 7723-changeset-admin-r8028.2.patch, 5.1 KB (added by rblank, 3 years ago)

Ah, forgot the unit tests.

  • trac/admin/tests/console-tests.txt

    diff --git a/trac/admin/tests/console-tests.txt b/trac/admin/tests/console-tests.txt
    a b  
    1111attachment export    Export an attachment from a resource to a file or stdout 
    1212attachment list      List attachments of a resource 
    1313attachment remove    Remove an attachment from a resource 
     14changeset added      Notify trac about changesets added to a repository 
     15changeset modified   Notify trac about changesets modified in a repository 
    1416component add        Add a new component 
    1517component chown      Change component ownership 
    1618component list       Show available components 
     
    3840repository add       Add a source repository 
    3941repository alias     Create an alias for a repository 
    4042repository list      List source repositories 
    41 repository notify    Notify trac about repository events 
    4243repository remove    Remove a source repository 
    4344repository rename    Rename a source repository 
    4445repository resync    Re-synchronize trac with repositories 
  • trac/versioncontrol/admin.py

    diff --git a/trac/versioncontrol/admin.py b/trac/versioncontrol/admin.py
    a b  
    1717from trac.core import * 
    1818from trac.util.text import print_table, printerr, printout 
    1919from trac.util.translation import _, ngettext 
    20 from trac.versioncontrol import IRepositoryChangeListener, RepositoryManager 
     20from trac.versioncontrol import RepositoryManager 
    2121 
    2222 
    2323class VersionControlAdmin(Component): 
     
    2828    # IAdminCommandProvider methods 
    2929     
    3030    def get_admin_commands(self): 
     31        yield ('changeset added', '<repos> <rev> [rev] [...]', 
     32               """Notify trac about changesets added to a repository 
     33                
     34               This command should be called from a post-commit hook. It will 
     35               trigger a cache update and notify components about the addition. 
     36               """, 
     37               self._complete_repos, self._do_changeset_added) 
     38        yield ('changeset modified', '<repos> <rev> [rev] [...]', 
     39               """Notify trac about changesets modified in a repository 
     40                
     41               This command should be called from a post-revprop hook after 
     42               revision properties like the commit message, author or date 
     43               have been changed. It will trigger a cache update for the given 
     44               revisions and notify components about the change. 
     45               """, 
     46               self._complete_repos, self._do_changeset_modified) 
    3147        yield ('repository add', '<repos> <dir> [type]', 
    3248               'Add a source repository', 
    3349               self._complete_add, self._do_add) 
     
    3753        yield ('repository list', '', 
    3854               'List source repositories', 
    3955               None, self._do_list) 
    40         yield ('repository notify', '<event> <repos> <rev> [rev] [...]', 
    41                """Notify trac about repository events 
    42                 
    43                The event "changeset_added" notifies that new changesets have 
    44                been added to a repository. 
    45                 
    46                The event "changeset_modified" notifies that existing changesets 
    47                have been modified in a repository. 
    48                """, 
    49                self._complete_notify, self._do_notify) 
    5056        yield ('repository remove', '<repos>', 
    5157               'Remove a source repository', 
    5258               self._complete_repos, self._do_remove) 
     
    7581               """, 
    7682               self._complete_repos, self._do_sync) 
    7783     
    78     _notify_events = [each for each in IRepositoryChangeListener.__dict__ 
    79                       if not each.startswith('_')] 
    80      
    8184    def get_supported_types(self): 
    8285        rm = RepositoryManager(self.env) 
    8386        return [type_ for connector in rm.connectors 
     
    9598        elif len(args) == 3: 
    9699            return self.get_supported_types() 
    97100     
    98     def _complete_notify(self, args): 
    99         if len(args) == 1: 
    100             return self._notify_events 
    101         elif len(args) == 2: 
    102             return self.get_reponames() 
    103      
    104101    def _complete_repos(self, args): 
    105102        if len(args) == 1: 
    106103            return self.get_reponames() 
    107104     
     105    def _do_changeset_added(self, reponame, *revs): 
     106        rm = RepositoryManager(self.env) 
     107        rm.notify('changeset_added', reponame, revs, None) 
     108     
     109    def _do_changeset_modified(self, reponame, *revs): 
     110        rm = RepositoryManager(self.env) 
     111        rm.notify('changeset_modified', reponame, revs, None) 
     112     
    108113    def _do_add(self, reponame, dir, type_=None): 
    109114        if reponame == '(default)': 
    110115            reponame = '' 
     
    143148                           alias, info.get('dir', ''))) 
    144149        print_table(values, [_('Name'), _('Type'), _('Alias'), _('Directory')]) 
    145150     
    146     def _do_notify(self, event, reponame, *revs): 
    147         if event not in self._notify_events: 
    148             raise TracError(_('Unknown notify event "%s"' % event)) 
    149         rm = RepositoryManager(self.env) 
    150         rm.notify(event, reponame, revs, None) 
    151      
    152151    def _do_remove(self, reponame): 
    153152        if reponame == '(default)': 
    154153            reponame = ''