diff mercurial/archival.py @ 9614:58edd448da4f

archive: add branch and tag informations to the .hg_archival.txt file Up to this changeset, only the repo (first node) and current node hash were included. This adds also the named branch and tags. So the additional lines to .hg_archival.txt are branch: the named branch tag: the global tags of this revision, one per line in case of multiple tags latesttag: if the revision is untagged, the latest tag (most recent in ancestors), again one per line if this ancestor has multiple tags. latestagdistance: the longest distance (changesets) to this latest ancestor.
author Gilles Moris <gilles.moris@free.fr>
date Tue, 11 Aug 2009 09:04:02 +0200
parents c5f36402daad
children 25e572394f5c
line wrap: on
line diff
--- a/mercurial/archival.py	Mon Oct 19 23:27:20 2009 +0300
+++ b/mercurial/archival.py	Tue Aug 11 09:04:02 2009 +0200
@@ -7,6 +7,7 @@
 
 from i18n import _
 from node import hex
+import cmdutil
 import util
 import cStringIO, os, stat, tarfile, time, zipfile
 import zlib, gzip
@@ -217,9 +218,25 @@
     archiver = archivers[kind](dest, prefix, mtime or ctx.date()[0])
 
     if repo.ui.configbool("ui", "archivemeta", True):
-        write('.hg_archival.txt', 0644, False,
-              lambda: 'repo: %s\nnode: %s\n' % (
-                  hex(repo.changelog.node(0)), hex(node)))
+        def metadata():
+            base = 'repo: %s\nnode: %s\nbranch: %s\n' % (
+                hex(repo.changelog.node(0)), hex(node), ctx.branch())
+
+            tags = ''.join('tag: %s\n' % t for t in ctx.tags()
+                           if repo.tagtype(t) == 'global')
+            if not tags:
+                repo.ui.pushbuffer()
+                opts = {'template': '{latesttag}\n{latesttagdistance}',
+                        'style': '', 'patch': None, 'git': None}
+                cmdutil.show_changeset(repo.ui, repo, opts).show(ctx)
+                ltags, dist = repo.ui.popbuffer().split('\n')
+                tags = ''.join('latesttag: %s\n' % t for t in ltags.split(':'))
+                tags += 'latesttagdistance: %s\n' % dist
+
+            return base + tags
+
+        write('.hg_archival.txt', 0644, False, metadata)
+
     for f in ctx:
         ff = ctx.flags(f)
         write(f, 'x' in ff and 0755 or 0644, 'l' in ff, ctx[f].data)