##// END OF EJS Templates
remotefilelog: replace repack lock to solve race condition...
remotefilelog: replace repack lock to solve race condition 2c74337e6483 reduced the probability of race-conditions when starting background repack and prefetch and we saw the difference in our CI instance with all failures disappearing except one where one call to waitonrepack seems to returns too early. I'm not sure what exactly goes wrong but I realized that while the prefetch operation uses a standard Mercurial lock, the repack operation is using a custom lock based on `fcntl.flock` on available platforms. As `extutil.flock` fallback on traditional Mercurial locks on other platforms and the tests are stable on my laptop, our CI environment and GCC112, I'm sending this patch to standardize the behavior across environments. Differential Revision: https://phab.mercurial-scm.org/D6844

File last commit:

r28353:cd03fbd5 default
r43213:5fadf610 default
Show More
debugcmdserver.py
49 lines | 1.2 KiB | text/x-python | PythonLexer
Idan Kamara
contrib: add a script to help diagnose raw output of the cmdserver
r15259 #!/usr/bin/env python
#
# Dumps output generated by Mercurial's command server in a formatted style to a
# given file or stderr if '-' is specified. Output is also written in its raw
# format to stdout.
#
# $ ./hg serve --cmds pipe | ./contrib/debugcmdserver.py -
# o, 52 -> 'capabilities: getencoding runcommand\nencoding: UTF-8'
Pulkit Goyal
debugcmdserver: use absolute_import and print_function
r28353 from __future__ import absolute_import, print_function
import struct
import sys
Idan Kamara
contrib: add a script to help diagnose raw output of the cmdserver
r15259
if len(sys.argv) != 2:
Pulkit Goyal
debugcmdserver: use absolute_import and print_function
r28353 print('usage: debugcmdserver.py FILE')
Idan Kamara
contrib: add a script to help diagnose raw output of the cmdserver
r15259 sys.exit(1)
outputfmt = '>cI'
outputfmtsize = struct.calcsize(outputfmt)
if sys.argv[1] == '-':
log = sys.stderr
else:
log = open(sys.argv[1], 'a')
def read(size):
data = sys.stdin.read(size)
if not data:
Brodie Rao
cleanup: "raise SomeException()" -> "raise SomeException"
r16687 raise EOFError
Idan Kamara
contrib: add a script to help diagnose raw output of the cmdserver
r15259 sys.stdout.write(data)
sys.stdout.flush()
return data
try:
while True:
header = read(outputfmtsize)
channel, length = struct.unpack(outputfmt, header)
log.write('%s, %-4d' % (channel, length))
if channel in 'IL':
log.write(' -> waiting for input\n')
else:
data = read(length)
log.write(' -> %r\n' % data)
log.flush()
except EOFError:
pass
finally:
if log != sys.stderr:
log.close()