##// END OF EJS Templates
procutil: avoid `+= None` when writing to full std{err,out} descriptor on py3...
procutil: avoid `+= None` when writing to full std{err,out} descriptor on py3 The write function returns `None` if there was no room to write the given data[1]. I don't like that this is effectively an infinite loop if there's never any progress emptying the underlying buffer, but we're no worse off than before, and it fixes random stacktrace popups seen in the py3 build of TortoiseHg. [1] https://docs.python.org/3/library/io.html#io.RawIOBase.write Differential Revision: https://phab.mercurial-scm.org/D12555

File last commit:

r10161:3acfb69a default
r49958:90e56488 stable
Show More
xml.rnc
41 lines | 1.2 KiB | application/relax-ng-compact-syntax | RNCCompactLexer
# RelaxNG schema for "xml" log style
# Inspired by Subversion's XML log format.
start = log
node.type = xsd:string {minLength = "40" maxLength = "40"}
log = element log { logentry+ }
logentry = element logentry {
logentry.attlist,
branch*, tag*, hgparent*,
author, date,
msg, paths?, copies?, extra*
}
logentry.attlist =
attribute revision {xsd:nonNegativeInteger}
& attribute node {node.type}
branch = element branch { text }
tag = element tag { text }
hgparent = element parent {hgparent.attlist, text}
hgparent.attlist =
attribute revision {xsd:integer {minInclusive = "-1"} }
& attribute node {node.type}
author = element author { author.attlist, text }
author.attlist =
attribute email {text}
date = element date {xsd:dateTime}
msg = element msg {msg.attlist, text}
msg.attlist =
attribute xml:space {"preserve"}
paths = element paths { path* }
path = element path { path.attlist, text }
path.attlist =
# Action: (A)dd, (M)odify, (R)emove
attribute action {"A"|"M"|"R"}
copies = element copies { copy+ }
copy = element copy { copy.attlist, text }
copy.attlist =
attribute source {text}
extra = element extra {extra.attlist, text}
extra.attlist =
attribute key {text}