[PATCH 1 of 5] archive: add branch and tag informations to the .hg_archival.txt file
Gilles Moris
gilles.moris at free.fr
Fri Oct 16 04:16:25 CDT 2009
mercurial/archival.py | 23 ++++++++++++++++++++---
tests/test-archive | 8 ++++++++
tests/test-archive.out | 11 +++++++++++
3 files changed, 39 insertions(+), 3 deletions(-)
# HG changeset patch
# User Gilles Moris <gilles.moris at free.fr>
# Date 1249974242 -7200
# Node ID 67e886f2c7864e0ee92e7119c28da4580be1e1bf
# Parent 7d429eedeb0d72c9e363aa9d799501299f50f72c
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.
diff --git a/mercurial/archival.py b/mercurial/archival.py
--- a/mercurial/archival.py
+++ b/mercurial/archival.py
@@ -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)
diff --git a/tests/test-archive b/tests/test-archive
--- a/tests/test-archive
+++ b/tests/test-archive
@@ -108,6 +108,14 @@
echo 'rev-0.tar created'
fi
+echo '% test .hg_archival.txt'
+hg archive ../test-tags
+cat ../test-tags/.hg_archival.txt
+hg tag -r 2 mytag
+hg tag -r 2 anothertag
+hg archive -r 2 ../test-lasttag
+cat ../test-lasttag/.hg_archival.txt
+
hg archive -t bogus test.bogus
echo % server errors
diff --git a/tests/test-archive.out b/tests/test-archive.out
--- a/tests/test-archive.out
+++ b/tests/test-archive.out
@@ -57,6 +57,17 @@
test-TIP/baz/bletch
test-TIP/foo
rev-0.tar created
+% test .hg_archival.txt
+repo: daa7f7c60e0a224faa4ff77ca41b2760562af264
+node: 2c0277f05ed49d1c8328fb9ba92fba7a5ebcb33e
+branch: default
+latesttag: null
+latesttagdistance: 3
+repo: daa7f7c60e0a224faa4ff77ca41b2760562af264
+node: 2c0277f05ed49d1c8328fb9ba92fba7a5ebcb33e
+branch: default
+tag: anothertag
+tag: mytag
abort: unknown archive type 'bogus'
% server errors
% empty repo
More information about the Mercurial-devel
mailing list