13 Aug
Geschrieben von LeSpocky in: HowTo, Versionsverwaltung
In der Diskussion zu CRE130 über verteilte Versionsverwaltungssysteme kam die Frage auf, ob man Mercurial für die Bearbeitung von LaTeX-Files nutzen und dort dann vielleicht sogar eines der Pakete rcs, rcsinfo, rcs-multi, svn, svninfo, svn-multi oder vc verwenden kann. Ersteres ist kein Problem. Selbstverständlich kann man mit Mercurial seine LaTeX-Dokumente versionieren.
Die automatische Ersetzung von sogenannten Keywords, wie man das von RCS, CVS oder Subversion kennt, lässt sich bei Mercurial über die Erweiterung Keyword Extension realisieren, die bei Mercurial gleich dabei ist. Damit das möglicherweise mit einem der oben genannten LaTeX-Pakete zusammenspielt, beschreibe ich nun, wie man die Keywords denen von Subversion maximal ähnlich aussehen lässt.
Zunächst muss man die Erweiterung aktivieren. Das macht man am besten nicht global sondern einzeln im Repository, indem man im Repo in die Datei .hg/hgrc folgendes einfügt:
[extensions] keyword =
Auf welche Dateien die automatische Ersetzung angewendet wird, bestimmt man in einem weiteren Abschnitt, hier z.B. für alle Dateien mit der Endung .txt in allen Unterordnern des Repositorys:
[keyword] **.txt =
Die Ausgestaltung der Keywords kann man nun mit der Template Engine (in anderem Zusammenhang in Kapitel »Customizing the output of Mercurial« des großartigen Mecurial Buchs beschrieben) von Mercurial selbst vornehmen. Es gibt zwar default Keywords, aber in der .hg/hgrc definiert man die besser selbst. Meine aktuellen Einstellungen sehen wie folgt aus:
[keywordmaps] Author = {author} Date = {date|isodate} Id = {file|basename} {rev}:{node|short} {date|isodate} {author|user} Revision = {rev}:{node|short}
In einer Testdatei führt das dann zu folgendem Ergebnis bei der Ersetzung:
$Author: Alexander Dahl <a...@antiblau.de> $
$Date: 2009-08-13 10:43 +0200 $
$Id: bar.txt 1:986b794ecbb1 2009-08-13 10:43 +0200 alex $
$Revision: 1:986b794ecbb1 $
Um das dem Output von Subversion noch ähnlicher zu machen, könnte man den Teil für die Revision sogar noch auf {rev} abkürzen. Hier ist allerdings zu beachten, dass die Revisionsnummern von Mercurial nicht global eindeutig sind, sondern nur für das jeweilige Repository gelten.
5 Kommentare
joede
13. August 2009, 11:07 Uhr 1Schöner Blogpost. Für mich war die nur lokal gültige Revision-ID das K.O. für die “keyword substition”. Spätestens mit dem nächsten push/pull zum Abgleich der Arbeit mit anderen ist es um die Eindeutigkeit Nummer geschehen.
Oder sehe ich da was falsch? Hast Du schn Erfahrungen damit gemacht?
Ich habe bisher mit GIT/Mercurial nur kurz “gespielt”.
LeSpocky
13. August 2009, 13:37 Uhr 2Es ist nur um die Eindeutigkeit der numerischen lokalen Revisionsnummer geschehen. Der hexadezimale String (in obigem Beispiel nach dem ‘:’) ist eindeutig, auch bei push/pull. Bei dem auf 12 Stellen verkürzten, können natürlich noch Kollisionen auftreten, theoretisch sogar beim vollen SHA1-Hash mit 40 Hex-Stellen, was aber extrem unwahrscheinlich ist, so dass man hier von Eindeutigkeit ausgehen kann. Mehr darüber im Mercurial-Wiki unter ChangeSetID.
Zur eindeutigen Referenzierung ist also nur die ChangeSetID, nicht aber die Revision Number geeignet. Ob und wie man erstere in LaTeX unterbringt, kann ich aber nicht sagen. Ein Paket, das extra für Mercurial gemacht ist, habe ich bei einer schnellen Suche im CTAN nicht gefunden. Ich stell mir das wegen des oben beschrieben Templating von Mercurial auch schwierig vor, wenn auch nicht unmöglich. Ob man mit dem oben genannten Mechanismus eins der Pakete für svn austricksen kann, hab ich nicht probiert. In das Paket vc kann man das sicher nachrüsten (bzr und git gibt’s da ja schon), aber das erforderte auch noch awk zu installieren und ist vielleicht ein bisschen oversized.
joede
14. August 2009, 08:26 Uhr 3Das Paket rcs-latex müsste direkt funktionieren, wenn man “Revision = {node|short}” benutzt. Allerdings will ich nicht den verkürzten Hex-String als Revision auf meinem Deckblatt haben. ;-)
Deswegen war das Thema für mich durch… erst einmal.
LeSpocky
14. August 2009, 08:47 Uhr 4Ich hab mir die Revisionsnummer damals nur im Draft-Modus in die Fußzeile schreiben lassen, da war das praktisch. Für’s Deckblatt hängt’s natürlich von der Art der Publikation ab. ;-)
joede
14. August 2009, 09:47 Uhr 5Ich schreibe die ganzen Dokumente (Lastenhefte, Spezifikationen,…), die der ISO-9001 unterliegen, mit LaTeX. Da ist die Revision Pflicht. Da kam mir die CVS-Revision eigentlich gerade recht. Aber es wird auch so gehen. ;-)
Hinterlasse einen Kommentar:
Suchen
Kategorien
Allgemein AntiVir Apache CLI DataMining Debian eBay Eclipse Eisfair GnuPG GTD Hardware HCI HowTo ICQ Ideen IMPULS Internet IRC Jabber KDE Kommunikation LaTeX Linux Literatur Lustiges Magdeburg MATLAB Mobiltelefon MSRS OpenSource Perl PIM Politik Programmierung RFID Shirt Sicherheit Software Umwelt Versionsverwaltung Video Virtualisierung WebUni Wikipedia Windows WordPress Zaurus
Letzte Beiträge
Letzte Kommentare
Autoren
Meta
Blogroll
Archiv
A design creation of Design Disease
Copyright © 2007–2010 – antiblau blog – Impressum
InSense 1.0 Theme by Design Disease translated by antiblau blog team.