Mercurial

ExtdiffExtension

http://mercurial.selenic.com/wiki/ExtdiffExtension

Extensions

[extensions]
hgext.extdiff =
graphlog =
transplant=
hgext.gpg=
color=

[extdiff]
# add new command called ediff, runs emacs diff
cmd.ediff = sh
opts.ediff = -c 'if [ -d $0 ]; then emacs --eval "(ediff-directories \"$0\" \"$1\" \"\")"; else emacs --eval "(ediff-files \"$0\" \"$1\")"; fi'


[gpg]
# if cmd is not provided it defaults to gpg
# cmd=/path/to/gpg-command-to-use
# key is optional and can be provided on the command line
key=F20FBB54

[hostfingerprints]
cae-hg.wob.vw.vwg = fc:da:9e:a8:7c:27:7a:c0:17:7d:a3:e0:1b:1b:56:de:23:2e:94:dd

Workflow

mercurial_workflow_image.png

1. Getting the repo (just once!):

hg clone lxgmap26:8000 synthesis

2. Making changes, you know how to do.

3. Committing to the local repo

hg commit -m 'Important changes' [optional single files]

4. Publish to the online repo

hg push

5. Get changes from the online repo

hg pull
hg update

"Online repository"

.hg/hgrc

[ui]
username = User Name <User.Name@example.fr>
verbose = True
merge = meld
[web]
style = gitweb
allow_archive = bz2, gz, zip 
allow_push = *
push_ssl = false
description = Kewl stuff, ey.

hgweb.conf

[paths]
frenetique = /home/pommrich/frenetique
scripts = /home/pommrich/results/scripts
fediacov = /home/pommrich/results/fediacov
synthesis_octobre = /home/pommrich/synthesis_octobre
werkstatt = /home/pommrich/werkstatt

Serving

hg serve --accesslog access.log --webdir-conf ../hgweb.config &

Beispielworkflow

Überblick

Change-Prozess

Überblick

Der folgende Workflow stammt aus [http://draketo.de/light/english/mercurial/complete-branching-strategy diesem sehr lesenswerten Artikel] und ist dort sehr gut dokumentiert und mit vielen Mercurial Beispielen versehen. Es folgt eine knappe Zusammenfassung der für uns relevanten Punkte.

In jedem Batchskript-Repository gibt es die Branches <tt>default</tt> und <tt>stable</tt>. Der Change-Prozess folgt in jedem Repository den folgenden einfachen Regeln:

Dabei bezeichnet

Das folgende Schema (ebenfalls aus o.g. Artikel) illustriert den Prozess und die zugehörigen Aktivitäten:

Rollenzuordnung

Die Rollen aus dem Change-Prozess sind wie folgt zugeordnet:

Qualitätssicherung (Entwurf)

In folgenden Situationen sind veränderte Batchskripte durch geeignete Testjobs zu testen:

* Programmer: Während der Entwicklung und vor pushen den default Branch des zentralen Repos * Maintainer: Nach dem Mergen und vor Produktivschaltung

Howto's

Normale Entwicklung

Die normale Entwicklung, d.h. kleine Änderungen, die keine Hotfixes sind, werden auf dem default Branch durchgeführt:

   1   $ hg pull && hg update default
   2   $ ... # do work *and* testing
   3   $ hg commit
   4   $ hg push

Feature Branches

Umfangreichere Änderungen können in eigenen Feature Branches, die vom default Branch verzweigen:

   1   $ hg pull && hg update default
   2   $ hg branch feature-xxx # Ersetze xxx durch zugehörige Ticket-ID
   3   $ ... # do work *and* testing
   4   $ hg commit
   5   $ ... # do some more work
   6   $ hg commit
   7   $ ... # final tests!!!
   8   $ hg push

Weiterentwicklung eines Features Branches und Abschließen der Entwicklung:

   1   $ hg pull
   2   $ hg update feature-xxx
   3   $ ... # do work and testing
   4   $ hg commit --close-branch -m "(#xxx) completed"
   5   $ hg update default
   6   $ hg merge issue-xxx
   7   $ hg push

Releases

Nur der Maintainer ist verantwortlich für die Releases:

   1   $ hg pull && hg update stable
   2   $ # 1) Mergen des <tt>default</tt> Branches in den <tt>stable</tt> Branch:
   3   $ RELEASENAME=$(date +%Y.%m)
   4   $ hg merge default
   5   $ hg commit -m "released $RELEASENAME"
   6   $ ... # 2) Testen des entstandenen Merge Commits
   7   $ hg push
   8   $ # 3) Verteilen auf dem Cluster:
   9   scacc1:/opt/vw/local/lsf/sc-appl/vecXXX$ hg pull && hg update stable
  10   scacc1:/opt/vw/local/lsf/sc-appl/vecXXX$ chmod 644 Vectis.*
  11   scacc1:/opt/vw/local/lsf/sc-appl/vecXXX$ make dist
  12   $ # 4) Taggen des Merge Commits:
  13   $ hg tag $RELEASENAME
  14   $ # 5) Zurückmergen von <tt>stable</tt> nach <tt>default</tt>:
  15   $ hg update default
  16   $ hg merge stable
  17   $ hg commit -m "merged release $RELEASENAME"
  18   $ hg push

Wikinger: Mercurial (zuletzt geändert am 2015-06-02 13:31:23 durch Robert)