2012-04-04 3 views
1

Я установил удаленный репозиторий Mercurial (Hg), который содержит большой Java-проект. Я хотел бы отслеживать любые изменения, внесенные в файл pom проекта, и получать электронные письма, когда изменения были внесены в pom.Как я могу отслеживать конкретный файл для изменений в Mercurial?

Я хотел бы исключить все другие изменения файла из уведомлений, поскольку меня интересует только мониторинг любых возможных изменений зависимостей (отсюда POM). Существует ли какое-либо Mercurial Extension или обходное решение, использующее Jenkins для подписки на историю изменений для одного отдельного файла внутри Mercurial repo?

ответ

2

notify extension отправляет электронное письмо с изменениями репо.

Change Context (см. Раздел 6) дает вам возможность перебирать файлы в наборе изменений.

Объединение этих двух предметов в пользовательский крючок должно быть довольно простым. Просмотрите контекст и отправьте сообщение только в том случае, если указан ваш специальный файл.

+0

Кажется, так :) Но не могли бы вы описать более подробно, как это сделать? Насколько я понимаю, я должен переопределить changegroup.notify = python: hgext.notify.hook с кодом моего крючка. Но как я могу вызвать исходный «hgext.notify.hook» из моего кода, если обнаружено, что целевой файл изменен? –

0

@ Ed.ward

Недавно я должен был сделать это (объединить расширение оповещать контексте изменения) только уведомить, если некоторые файлы изменились. Чтобы вызвать крючок уведомлений с вашего собственного крючка, вам нужно импортировать hgext, а затем вызвать hgext.notify.hook. Мой рабочий пример python:

import re, traceback 
import hgext 
def check_changegroup(ui, repo, hooktype, node=None, source=None, **kwargs): 
    ui.note("Checking for files in %s with path: %s\n" % (repo.__class__.__name__, repo.root)) 
    file_match = ".*base.*" #ui.config('monitor_files', 'file_match') 
    ui.note("file_match: %s\n" % file_match) 
    file_match_re = re.compile(file_match, re.I) 
    monitored_file_changed = False 
    for rev in xrange(repo[node].rev(), len(repo)): 
     changectx = repo[rev]  
     for f in changectx.files(): 
      if file_match_re.match(f): 
       ui.note(" matched: %s\n" % f) 
       monitored_file_changed = True 
     if monitored_file_changed: 
      ui.note("rev: %s from user: %s has changes on monitored files\n" % (rev, changectx.user())) 
    if monitored_file_changed: 
     ui.note("calling notify hook\n") 
     try: 
      hgext.notify.hook(ui, repo, hooktype, node, source) 
     except Exception as exc: 
      ui.warn(('%s error calling notify hook: %s\n') % (exc.__class__.__name__, exc)) 
      traceback.print_exc() 
      raise 
Смежные вопросы