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).
$ rm -rf a
$ hg init a
$ cd a
$ echo a > a
$ hg ci -Am0
adding a
$ hg tag t1 # 1
$ hg tag --remove t1 # 2
$ hg co 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg tag -f -r0 t1
$ hg tags
tip 3:a49829c4fc11
t1 0:f7b1eb17ad24
Ensure that the username access fails gracefully if assumptions about the
environment made by python do not hold.
#if windows
>>> import os
>>> from mercurial import util
>>> os.environ.pop('LOGNAME', None) and None
>>> os.environ.pop('USER', None) and None
>>> os.environ.pop('LNAME', None) and None
>>> os.environ.pop('USERNAME', None) and None
>>> print(util.username())
None
#endif
$ cd ..