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.
This commit is contained in:
Gilles Moris 2009-08-11 09:04:02 +02:00
parent e3586100e3
commit 15a6625324
3 changed files with 39 additions and 3 deletions

View File

@ -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 @@ def archive(repo, dest, node, kind, decode=True, matchfn=None,
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)

View File

@ -108,6 +108,14 @@ if [ -f rev-0.tar ]; then
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

View File

@ -57,6 +57,17 @@ test-TIP/bar
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