Changeset 4425

Show
Ignore:
Timestamp:
10/08/08 13:14:15 (3 months ago)
Author:
novalis_dt
Message:

support multiple types of hook; doco; import NoSuchChangeset? where needed

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • repositoryhooksystemplugin/0.11/repository_hook_system/interface.py

    r4247 r4425  
    1616        """can this subscriber be invoked on this hook?"""         
    1717 
    18     def invoke(changeset): 
    19         """what to do on a commit""" 
     18    def after_commit(changeset): 
     19        """what to do after a commit""" 
     20 
     21    def before_commit(changeset): 
     22        """what to do before a commit""" 
     23 
     24    def other_repository_action(*args): 
     25        """what to do in the case of some other repositiory action""" 
    2026 
    2127### interfaces for the hook system 
    2228 
    2329class IRepositoryChangeListener(Interface): 
    24     """listeners to changes from repository hooks""" 
     30    """This is a particular type of repository (SVN, Git, etc)'s change 
     31    listener.""" 
    2532 
    2633    def type(): 
  • repositoryhooksystemplugin/0.11/repository_hook_system/listener.py

    r4247 r4425  
    3333        # find the active listeners 
    3434        listeners = ExtensionPoint(IRepositoryChangeListener).extensions(env) 
    35          
     35 
    3636        # find the listener for the given repository type and invoke the hook 
    3737        for listener in listeners: 
    3838            if env.config.get('trac', 'repository_type') in listener.type(): 
    39                 changeset = listener.changeset(repo, *args) 
     39                changeset = listener.changeset(repo, hook, *args) 
    4040                subscribers = listener.subscribers(hook) 
    4141                for subscriber in subscribers: 
    42                     subscriber.invoke(changeset) 
     42                    funcname = hook.replace("-","_") 
     43                    func = getattr(subscriber, funcname, None) 
     44                    if func: 
     45                        func(changeset) 
    4346         
    4447def filename(): 
  • repositoryhooksystemplugin/0.11/repository_hook_system/svnhooksystem.py

    r4247 r4425  
    1313from trac.core import * 
    1414from trac.util.text import CRLF 
     15from trac.versioncontrol.api import NoSuchChangeset 
    1516from utils import iswritable 
    1617 
     
    7879                 and subscriber.is_available(self.type(), hookname) ] 
    7980 
    80     def changeset(self, repo, revision): 
     81    def changeset(self, repo, hook, revision): 
    8182        """  
    8283        return the changeset given the repository object and revision number 
    8384        """ 
    8485        try: 
    85             chgset = repo.get_changeset(revision) 
     86            if hook == 'pre-commit': 
     87                chgset = {'transaction' : revision} #Trac has no way to get a transaction out of svn 
     88            else: 
     89                chgset = repo.get_changeset(revision) 
    8690        except NoSuchChangeset: 
    8791            # XXX should probably throw an exception (same one?) 
  • repositoryhooksystemplugin/0.11/repository_hook_system/ticketchanger.py

    r4256 r4425  
    4747        return True 
    4848 
    49     def invoke(self, chgset): 
     49    def post_commit(self, chgset): 
    5050 
    5151        # regular expressions