Mittwoch, 8. Juni 2011

Finalbuilder-Hook in Mercurial

In der Firma in der ich arbeite wird viel Finalbuilder verwendet. Das Tool ist zwar ganz nett, hat aber Probleme zu bemerken dass eine bereits geöffnete Datei verändert wurde. Das führt zu den merkwürdigsten Problemen wenn die Finalbuilder-Dateien unter Versionskontrolle stehen (Schnell ein update machen, aber Finalbuilder ist noch geöffnet. Das update funktioniert problemlos, nur sind keine Änderungen im Finalbuilder „angekommen“)

Damit mir das nicht mehr passiert habe ich mir mal einen kleinen hook für mercurial zusammen gezimmert.

Einfach das folgende Skript irgendwo auf der Platte parken:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os

def preupdate(ui, repo, **kwargs):
 basepath = repo.origroot
 rev = kwargs['parent1']
 node = repo.changelog.lookup(rev)
 _,_,_,files,_,_ = repo.changelog.read(node)
 for file in files:
  if os.path.splitext(file)[1] != '.fbz6':
   continue
  fb_file = os.path.join(basepath, file)
  fb_lockfile = os.path.splitext(fb_file)[0] + '.fb6lck'
  if os.path.exists(fb_lockfile):
   ui.write('Fehler: Die Finalbuilder-Datei\n%s\nsoll geändert werden, ist aber noch gelockt.\nSchließen sie Finalbuilder um das Update durchzuführen.\n' % fb_file)
   ui.write('(Hinweis: Wenn sie (wirklich...) keinen Finalbuilder mehr geöffnet haben,\nsollten sie die lock-datei löschen.\n diese findet sich unter:\n%s)\n' % fb_lockfile)
   return True
 
 return False

Diesen hook dann noch in mercurial einbauen, indem die globale mercurial.ini (bei mir: c:\users\nils\mercurial.ini) mit einem editor geöffnet wird und folgende Zeilen ergänzen:
[hooks]
preupdate.finalbuilder = python:C:\wo\das\skript\liegt.py:preupdate

Mehr info's über mercurial-hooks gib es im mercurial Buch, Kap. 10.

Hinweis: Zur Ausführung dieses hooks muss kein python extra installiert werden, der hook wird einfach „direkt“ in mercurial ausgeführt. Mehr dazu gibt es im mercurial Buch.

Keine Kommentare:

Kommentar veröffentlichen