dirstate-item: change the internal storage and constructor value
This should be closer to what we do need and what we can actually reliably
record.
In practice it means that we abandon the prospect of storing much more refined
data for now. We don't have the necessary information nor code using it right
now. So it seems safer to just use a clearer version of what we had so far.
See the documentation changes for details.
Differential Revision: https://phab.mercurial-scm.org/D11557
#require hardlink
$ echo "[extensions]" >> $HGRCPATH
$ echo "relink=" >> $HGRCPATH
$ fix_path() {
> tr '\\' /
> }
$ cat > arelinked.py <<EOF
> from __future__ import absolute_import, print_function
> import os
> import sys
> from mercurial import (
> pycompat,
> util,
> )
> path1, path2 = sys.argv[1:3]
> if util.samefile(pycompat.fsencode(path1), pycompat.fsencode(path2)):
> print('%s == %s' % (path1, path2))
> else:
> print('%s != %s' % (path1, path2))
> EOF
create source repository
$ hg init repo
$ cd repo
$ echo a > a
$ echo b > b
$ hg ci -Am addfile
adding a
adding b
$ cat "$TESTDIR/binfile.bin" >> a
$ cat "$TESTDIR/binfile.bin" >> b
$ hg ci -Am changefiles
make another commit to create files larger than 1 KB to test
formatting of final byte count
$ cat "$TESTDIR/binfile.bin" >> a
$ cat "$TESTDIR/binfile.bin" >> b
$ hg ci -m anotherchange
don't sit forever trying to double-lock the source repo
$ hg relink .
relinking $TESTTMP/repo/.hg/store to $TESTTMP/repo/.hg/store
there is nothing to relink
Test files are read in binary mode
$ "$PYTHON" -c "open('.hg/store/data/dummy.i', 'wb').write(b'a\r\nb\n')"
$ cd ..
clone and pull to break links
$ hg clone --pull -r0 repo clone
adding changesets
adding manifests
adding file changes
added 1 changesets with 2 changes to 2 files
new changesets 008c0c271c47
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd clone
$ hg pull -q
$ echo b >> b
$ hg ci -m changeb
created new head
$ "$PYTHON" -c "open('.hg/store/data/dummy.i', 'wb').write(b'a\nb\r\n')"
relink
#if no-reposimplestore
$ hg relink --debug --config progress.debug=true | fix_path
relinking $TESTTMP/repo/.hg/store to $TESTTMP/clone/.hg/store
tip has 2 files, estimated total number of files: 3
collecting: 00changelog.i 1/3 files (33.33%)
collecting: 00manifest.i 2/3 files (66.67%)
collecting: a.i 3/3 files (100.00%)
collecting: b.i 4/3 files (133.33%)
collecting: dummy.i 5/3 files (166.67%)
collected 5 candidate storage files
not linkable: 00changelog.i
not linkable: 00manifest.i
pruning: data/a.i 3/5 files (60.00%)
not linkable: data/b.i
pruning: data/dummy.i 5/5 files (100.00%)
pruned down to 2 probably relinkable files
relinking: data/a.i 1/2 files (50.00%)
not linkable: data/dummy.i
relinked 1 files (1.36 KB reclaimed)
$ cd ..
check hardlinks
$ "$PYTHON" arelinked.py repo/.hg/store/data/a.i clone/.hg/store/data/a.i
repo/.hg/store/data/a.i == clone/.hg/store/data/a.i
$ "$PYTHON" arelinked.py repo/.hg/store/data/b.i clone/.hg/store/data/b.i
repo/.hg/store/data/b.i != clone/.hg/store/data/b.i
#endif