[PATCH 2 of 4] archive: add branch and tag informations to the .hg_archival.txt file
Gilles Moris
gilles.moris at free.fr
Tue Oct 6 08:18:29 UTC 2009
mercurial/archival.py | 22 +++++++++++++++++++---
tests/test-archive | 8 ++++++++
tests/test-archive.out | 11 +++++++++++
3 files changed, 38 insertions(+), 3 deletions(-)
# HG changeset patch
# User Gilles Moris <gilles.moris at free.fr>
# Date 1249974242 -7200
# Node ID f1911eaffbb0f31d87250163074c920cf6b0bd3e
# Parent c900201dd7709e704caac923cab31f423816afcd
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 where
printed. This adds also the named branch and tags.
Tags could be local or global tags. If multiple tags exist on this changeset,
they will be displayed one by line.
If the changeset has no tag, the latest tag in history (most recent in ancestors)
will be displayed instead, along to the longest distance to it.
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
+from cmdutil import latesttaginfo
import util
import cStringIO, os, stat, tarfile, time, zipfile
import zlib, gzip
@@ -217,9 +218,24 @@
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():
+ content = 'repo: %s\nnode: %s\n' % (
+ hex(repo.changelog.node(0)), hex(node))
+
+ content += 'branch: %s\n' % ctx.branch()
+ tags = ''.join(['%stag: %s\n' % (repo.tagtype(t) != 'global' and
+ repo.tagtype(t) or '', t)
+ for t in ctx.tags() if repo.tagtype(t)])
+ if tags:
+ return content + tags
+
+ latesttagcache = {-1: (0, 0, 'null')}
+ ltinfo = latesttaginfo(repo, ctx.rev(), latesttagcache)
+ return content + 'latesttag: %s\nlatesttagdistance: %d\n' % \
+ (ltinfo[2], ltinfo[1])
+
+ 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 -l -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
+localtag: anothertag
+tag: mytag
abort: unknown archive type 'bogus'
% server errors
% empty repo
More information about the Mercurial-devel
mailing list