repo-upgrade: write new requirement before upgrading the dirstate
This will prevent a small race condition where another hg process still
believes the repo is dirstate-v1 during the upgrade process.
This is good to have, but it is not a proper fix for the underlying problem.
There is code that assumes a requirement means a usage, e.g. having the
`generaldelta` requirement would imply *all* revlogs to use general delta,
but it's not true, it simply means that the repository advertises to the
client it needs to understand `generaldelta` in order to read the repo.
In the case of the dirstate, having the requirement *technically* should always
be the same as using dirstate-v2, since there is only one dirstate and
requirements should be as minimal as possible. However, we should not assume
this and make the code more robust in a future patch (series).
Force revlog max inline value to be smaller than default
$ mkdir $TESTTMP/ext
$ cat << EOF > $TESTTMP/ext/small_inline.py
> from mercurial import revlog
> revlog._maxinline = 8
> EOF
$ cat << EOF >> $HGRCPATH
> [extensions]
> small_inline=$TESTTMP/ext/small_inline.py
> EOF
$ hg init repo
$ cd repo
Try on an empty repository
$ hg debug-revlog-stats
rev-count data-size inl type target
0 0 yes changelog
0 0 yes manifest
$ mkdir folder
$ touch a b folder/c folder/d
$ hg commit -Aqm 0
$ echo "text" > a
$ hg rm b
$ echo "longer string" > folder/d
$ hg commit -Aqm 1
Differences in data size observed with pure is due to different compression
algorithms
$ hg debug-revlog-stats
rev-count data-size inl type target
2 138 no changelog (no-pure !)
2 137 no changelog (pure !)
2 177 no manifest (no-pure !)
2 168 no manifest (pure !)
2 6 yes file a
1 0 yes file b
1 0 yes file folder/c
2 15 no file folder/d
Test 'changelog' command argument
$ hg debug-revlog-stats -c
rev-count data-size inl type target
2 138 no changelog (no-pure !)
2 137 no changelog (pure !)
Test 'manifest' command argument
$ hg debug-revlog-stats -m
rev-count data-size inl type target
2 177 no manifest (no-pure !)
2 168 no manifest (pure !)
Test 'file' command argument
$ hg debug-revlog-stats -f
rev-count data-size inl type target
2 6 yes file a
1 0 yes file b
1 0 yes file folder/c
2 15 no file folder/d
Test multiple command arguments
$ hg debug-revlog-stats -cm
rev-count data-size inl type target
2 138 no changelog (no-pure !)
2 137 no changelog (pure !)
2 177 no manifest (no-pure !)
2 168 no manifest (pure !)