archive: report the node as "{p1node}+" when archiving a dirty wdir()
This is more useful than reporting all 'f's, allowing the archive to be diffed
against a specific revision to see what changed.
--- a/mercurial/archival.py Mon Jun 15 16:06:17 2015 -0700
+++ b/mercurial/archival.py Tue Jun 16 23:14:45 2015 -0400
@@ -67,8 +67,14 @@
def buildmetadata(ctx):
'''build content of .hg_archival.txt'''
repo = ctx.repo()
+ hex = ctx.hex()
+ if ctx.rev() is None:
+ hex = ctx.p1().hex()
+ if ctx.dirty():
+ hex += '+'
+
base = 'repo: %s\nnode: %s\nbranch: %s\n' % (
- _rootctx(repo).hex(), ctx.hex(), encoding.fromlocal(ctx.branch()))
+ _rootctx(repo).hex(), hex, encoding.fromlocal(ctx.branch()))
tags = ''.join('tag: %s\n' % t for t in ctx.tags()
if repo.tagtype(t) == 'global')
--- a/tests/test-subrepo-deep-nested-change.t Mon Jun 15 16:06:17 2015 -0700
+++ b/tests/test-subrepo-deep-nested-change.t Tue Jun 16 23:14:45 2015 -0400
@@ -187,6 +187,14 @@
../wdir/sub1/sub2/folder/test.txt
../wdir/sub1/sub2/sub2
+ $ cat ../wdir/.hg_archival.txt
+ repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
+ node: 9bb10eebee29dc0f1201dcf5977b811a540255fd+
+ branch: default
+ latesttag: null
+ latesttagdistance: 4
+ changessincelatesttag: 3
+
Attempting to archive 'wdir()' with a missing file is handled gracefully
$ rm sub1/sub1
$ rm -r ../wdir
@@ -204,6 +212,16 @@
Continue relative path printing + subrepos
$ hg update -Cq
+ $ rm -r ../wdir
+ $ hg archive -S -r 'wdir()' ../wdir
+ $ cat ../wdir/.hg_archival.txt
+ repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
+ node: 9bb10eebee29dc0f1201dcf5977b811a540255fd
+ branch: default
+ latesttag: null
+ latesttagdistance: 4
+ changessincelatesttag: 3
+
$ touch sub1/sub2/folder/bar
$ hg addremove sub1/sub2
adding sub1/sub2/folder/bar (glob)