update: support updating to hidden cset if directaccess config is set
This patch adds support for updating to a hidden changeset without using
--hidden if `experimental.directacces=True` is set. The update command will
print out a warning when updating to a hidden changeset saying:
`updating to a hidden changeset <hash>`
The warning is also printed when directaccess is not used and --hidden is
passed which I think is good behaviour. Tests are added for the directaccess
part and updated output of tests which have case of updating to hidden cset
using `--hidden`.
Differential Revision: https://phab.mercurial-scm.org/D1762
commands: check for empty rev before passing to scmutil.unhidehashlikerevs
Differential Revision: https://phab.mercurial-scm.org/D1760
test-convert-cvs: change TZ=US/Hawaii to TZ=Pacific/Johnston
The former was limited to be known on Linux and the test failed on FreeBSD
and Solaris platforms. The newer is known on Linux, FreeBSD and Solaris.
osutil: implement getfsmountpoint() on BSD systems
I don't have a BSD system handy to test this, but it looks simple enough from
the man page.
debugfs: display the tested path and mount point of the filesystem, if known
While implementing win32.getfstype(), I noticed that MSYS path mangling is
getting in the way. Given a path \\host\share\dir:
- If strong quoted, hg receives it unchanged, and it works as expected
- If double quoted, it converts to \host\share\dir
- If unquoted, it converts to \hostsharedir
The second and third cases are problematic because those are valid paths
relative to the current drive letter, so os.path.realpath() will expand it as
such. The net effect is to silently turn a network path test into (typically) a
"C:\" test. Additionally, the command hangs after printing out 'symlink: no'
for the third case (but is interruptable with Ctrl + C). This path mangling
only comes into play because of the command line arguments- it won't affect
internally obtained paths. Therefore, the simplest thing to do is to provide
feedback on what the command is acting on.
I also added the mount point, because Windows supports nesting [1] volumes (see
the examples in "Junction Points and Mounted Folders"), and it was a useful
diagnostic for figuring out why the wrong filesystem was printed out in the
cases above.
I opted not to call os.path.realpath() on the path argument, to make it clearer
that the mangling isn't being done by Mercurial.
[1] https://msdn.microsoft.com/en-us/library/windows/desktop/
aa364996(v=vs.85).aspx
util: add a function to show the mount point of the filesystem
For now, this is Windows only, since Linux doesn't have the value in its statfs
structure, and I don't have a BSD system to test with.
win32: split a utility function to obtain the volume out of getfstype()
This is only done on Windows because it's simple enough to call statfs() on
Unix. The goal is to display this in `hg debugfs`.
util: whitelist NTFS for hardlink creation (
issue4580)
win32: implement util.getfstype()
This will allow NTFS to be added to the hardlink whitelist, and resume creating
hardlinks in transactions (which was disabled globally in
07a92bbd02e5; see also
e5ce49a30146). I opted to report "cifs" for remote volumes because this shows
in `hg debugfs`, which also reports that hardlinks are supported for these
volumes. So being able to distinguish it from "unknown" seems useful.
The documentation [1] seems to indicate that SMB isn't supported by these
functions, but experimenting shows that mapped drives are reported as "NTFS" on
Windows 7. I don't have a second Windows machine, but instead shared a temp
directory on C:\. In this setup, both of the following were detected as 'cifs'
with the explicit GetDriveType() check:
Z:\repo>hg ci -A
C:\>hg -R \\hostname\temp\repo ci -A # (without Z:\ being mapped)
It looks like this is called 6 times to add and commit a single new file, so I'm
a little surprised this isn't cached.
[1] https://msdn.microsoft.com/en-us/library/windows/desktop/
aa364993(v=vs.85).aspx
util: move getfstype() to the platform modules
This makes room for implementing on Windows using ctypes.