store: add a `target_id` attribute on RevlogStoreEntry
This hold the "target" (file, directory, etc) of a revlog. Having this
available will help a lot of code to avoid direct file path access.
=========================================================
Test features and behaviors related to the archived phase
=========================================================
$ cat << EOF >> $HGRCPATH
> [format]
> exp-archived-phase=yes
> [extensions]
> strip=
> [experimental]
> EOF
$ hg init repo
$ cd repo
$ echo root > a
$ hg add a
$ hg ci -m 'root'
Test that bundle can unarchive a changeset
------------------------------------------
$ echo foo >> a
$ hg st
M a
$ hg ci -m 'unbundletesting'
$ hg log -G
@ changeset: 1:883aadbbf309
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
o changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ hg strip --soft --rev '.'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/883aadbbf309-efc55adc-backup.hg
$ hg log -G
@ changeset: 0:c1863a3840c6
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ hg log -G --hidden
o changeset: 1:883aadbbf309
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
@ changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ hg unbundle .hg/strip-backup/883aadbbf309-efc55adc-backup.hg
adding changesets
adding manifests
adding file changes
added 0 changesets with 0 changes to 1 files
(run 'hg update' to get a working copy)
$ hg log -G
o changeset: 1:883aadbbf309
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
@ changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
Test that history rewriting command can use the archived phase when allowed to
------------------------------------------------------------------------------
$ hg up 'desc(unbundletesting)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo bar >> a
$ hg commit --amend --config experimental.cleanup-as-archived=yes
$ hg log -G
@ changeset: 2:d1e73e428f29
| tag: tip
| parent: 0:c1863a3840c6
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
o changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ hg log -G --hidden
@ changeset: 2:d1e73e428f29
| tag: tip
| parent: 0:c1863a3840c6
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
| o changeset: 1:883aadbbf309
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
o changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ ls -1 .hg/strip-backup/
883aadbbf309-efc55adc-amend.hg
883aadbbf309-efc55adc-backup.hg
$ hg unbundle .hg/strip-backup/883aadbbf309*amend.hg
adding changesets
adding manifests
adding file changes
added 0 changesets with 0 changes to 1 files
(run 'hg update' to get a working copy)
$ hg log -G
@ changeset: 2:d1e73e428f29
| tag: tip
| parent: 0:c1863a3840c6
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
| o changeset: 1:883aadbbf309
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
o changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
Test that a strip will preserve unrelated changeset archived
------------------------------------------------------------
prepare a suitable tree
$ echo foo > bar
$ hg add bar
$ hg commit -m 'some more commit'
$ hg log -G --hidden -T '{rev} {node|short} [{phase}] {desc|firstline}\n'
@ 3 f90bf4e57854 [draft] some more commit
|
o 2 d1e73e428f29 [draft] unbundletesting
|
| o 1 883aadbbf309 [draft] unbundletesting
|/
o 0 c1863a3840c6 [draft] root
$ hg strip --soft --rev '.'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/f90bf4e57854-56b37ff2-backup.hg
$ hg log -G --hidden -T '{rev} {node|short} [{phase}] {desc|firstline}\n'
o 3 f90bf4e57854 [archived] some more commit
|
@ 2 d1e73e428f29 [draft] unbundletesting
|
| o 1 883aadbbf309 [draft] unbundletesting
|/
o 0 c1863a3840c6 [draft] root
Strips the other (lower rev-num) head
$ hg strip --rev 'min(head() and not .)'
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/883aadbbf309-efc55adc-backup.hg
The archived changeset should still be hidden
$ hg log -G -T '{rev} {node|short} [{phase}] {desc|firstline}\n'
@ 1 d1e73e428f29 [draft] unbundletesting
|
o 0 c1863a3840c6 [draft] root
It may still be around:
$ hg log --hidden -G -T '{rev} {node|short} [{phase}] {desc|firstline}\n'
o 2 f90bf4e57854 [archived] some more commit
|
@ 1 d1e73e428f29 [draft] unbundletesting
|
o 0 c1863a3840c6 [draft] root