hgext/notify.py
changeset 2230 332950340788
parent 2225 ff43ea94eff4
child 2296 6e8e3dd7976e
equal deleted inserted replaced
2229:0ff326c2b286 2230:332950340788
    38 #   template = ...         # template to use when formatting email
    38 #   template = ...         # template to use when formatting email
    39 #   incoming = ...         # template to use when run as incoming hook
    39 #   incoming = ...         # template to use when run as incoming hook
    40 #   changegroup = ...      # template when run as changegroup hook
    40 #   changegroup = ...      # template when run as changegroup hook
    41 #   maxdiff = 300          # max lines of diffs to include (0=none, -1=all)
    41 #   maxdiff = 300          # max lines of diffs to include (0=none, -1=all)
    42 #   maxsubject = 67        # truncate subject line longer than this
    42 #   maxsubject = 67        # truncate subject line longer than this
       
    43 #   sources = serve        # notify if source of incoming changes in this list
       
    44 #                          # (serve == ssh or http, push, pull, bundle)
    43 #   [email]
    45 #   [email]
    44 #   from = user@host.com   # email address to send as if none given
    46 #   from = user@host.com   # email address to send as if none given
    45 #   [web]
    47 #   [web]
    46 #   baseurl = http://hgserver/... # root of hg web site for browsing commits
    48 #   baseurl = http://hgserver/... # root of hg web site for browsing commits
    47 #
    49 #
   164 
   166 
   165         self.t.show(changenode=node, changes=self.repo.changelog.read(node),
   167         self.t.show(changenode=node, changes=self.repo.changelog.read(node),
   166                     baseurl=self.ui.config('web', 'baseurl'),
   168                     baseurl=self.ui.config('web', 'baseurl'),
   167                     root=self.repo.root,
   169                     root=self.repo.root,
   168                     webroot=self.root)
   170                     webroot=self.root)
       
   171 
       
   172     def skipsource(self, source):
       
   173         '''true if incoming changes from this source should be skipped.'''
       
   174         ok_sources = self.ui.config('notify', 'sources', 'serve').split()
       
   175         return source not in ok_sources
   169 
   176 
   170     def send(self, node, count):
   177     def send(self, node, count):
   171         '''send message.'''
   178         '''send message.'''
   172 
   179 
   173         p = email.Parser.Parser()
   180         p = email.Parser.Parser()
   208         msg['X-Hg-Notification'] = 'changeset ' + short(node)
   215         msg['X-Hg-Notification'] = 'changeset ' + short(node)
   209         if not msg['Message-Id']:
   216         if not msg['Message-Id']:
   210             msg['Message-Id'] = ('<hg.%s.%s.%s@%s>' %
   217             msg['Message-Id'] = ('<hg.%s.%s.%s@%s>' %
   211                                  (short(node), int(time.time()),
   218                                  (short(node), int(time.time()),
   212                                   hash(self.repo.root), socket.getfqdn()))
   219                                   hash(self.repo.root), socket.getfqdn()))
   213         msg['To'] = self.subs
   220         msg['To'] = ', '.join(self.subs)
   214 
   221 
   215         msgtext = msg.as_string(0)
   222         msgtext = msg.as_string(0)
   216         if self.ui.configbool('notify', 'test', True):
   223         if self.ui.configbool('notify', 'test', True):
   217             self.ui.write(msgtext)
   224             self.ui.write(msgtext)
   218             if not msgtext.endswith('\n'):
   225             if not msgtext.endswith('\n'):
   236             difflines = difflines[:maxdiff]
   243             difflines = difflines[:maxdiff]
   237         elif difflines:
   244         elif difflines:
   238             self.sio.write(_('\ndiffs (%d lines):\n\n') % len(difflines))
   245             self.sio.write(_('\ndiffs (%d lines):\n\n') % len(difflines))
   239         self.sio.write(*difflines)
   246         self.sio.write(*difflines)
   240 
   247 
   241 def hook(ui, repo, hooktype, node=None, **kwargs):
   248 def hook(ui, repo, hooktype, node=None, source=None, **kwargs):
   242     '''send email notifications to interested subscribers.
   249     '''send email notifications to interested subscribers.
   243 
   250 
   244     if used as changegroup hook, send one email for all changesets in
   251     if used as changegroup hook, send one email for all changesets in
   245     changegroup. else send one email per changeset.'''
   252     changegroup. else send one email per changeset.'''
   246     n = notifier(ui, repo, hooktype)
   253     n = notifier(ui, repo, hooktype)
   247     if not n.subs: return True
   254     if not n.subs or n.skipsource(source):
       
   255         return
   248     node = bin(node)
   256     node = bin(node)
   249     if hooktype == 'changegroup':
   257     if hooktype == 'changegroup':
   250         start = repo.changelog.rev(node)
   258         start = repo.changelog.rev(node)
   251         end = repo.changelog.count()
   259         end = repo.changelog.count()
   252         count = end - start
   260         count = end - start