Mercurial > hg
view tests/test-logtoprocess.t @ 35510:2062f7c2ac83
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
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 29 Dec 2017 21:28:19 -0500 |
parents | af43cb56af4e |
children | dfca83594145 |
line wrap: on
line source
#require no-windows ATTENTION: logtoprocess runs commands asynchronously. Be sure to append "| cat" to hg commands, to wait for the output, if you want to test its output. Otherwise the test will be flaky. Test if logtoprocess correctly captures command-related log calls. $ hg init $ cat > $TESTTMP/foocommand.py << EOF > from __future__ import absolute_import > from mercurial import registrar > cmdtable = {} > command = registrar.command(cmdtable) > configtable = {} > configitem = registrar.configitem(configtable) > configitem('logtoprocess', 'foo', > default=None, > ) > @command(b'foo', []) > def foo(ui, repo): > ui.log('foo', 'a message: %(bar)s\n', bar='spam') > EOF $ cp $HGRCPATH $HGRCPATH.bak $ cat >> $HGRCPATH << EOF > [extensions] > logtoprocess= > foocommand=$TESTTMP/foocommand.py > [logtoprocess] > command=echo 'logtoprocess command output:'; > echo "\$EVENT"; > echo "\$MSG1"; > echo "\$MSG2" > commandfinish=echo 'logtoprocess commandfinish output:'; > echo "\$EVENT"; > echo "\$MSG1"; > echo "\$MSG2"; > echo "\$MSG3" > foo=echo 'logtoprocess foo output:'; > echo "\$EVENT"; > echo "\$MSG1"; > echo "\$OPT_BAR" > EOF Running a command triggers both a ui.log('command') and a ui.log('commandfinish') call. The foo command also uses ui.log. Use sort to avoid ordering issues between the various processes we spawn: $ hg foo | cat | sort (chg !) 0 a message: spam command command (chg !) commandfinish foo foo foo foo foo exited 0 after * seconds (glob) logtoprocess command output: logtoprocess command output: (chg !) logtoprocess commandfinish output: logtoprocess foo output: serve --cmdserver chgunix * (glob) (chg !) serve --cmdserver chgunix * (glob) (chg !) spam Confirm that logging blocked time catches stdio properly: $ cp $HGRCPATH.bak $HGRCPATH $ cat >> $HGRCPATH << EOF > [extensions] > logtoprocess= > pager= > [logtoprocess] > uiblocked=echo "\$EVENT stdio \$OPT_STDIO_BLOCKED ms command \$OPT_COMMAND_DURATION ms" > [ui] > logblockedtimes=True > EOF $ hg log | cat uiblocked stdio [0-9]+.[0-9]* ms command [0-9]+.[0-9]* ms (re)