view contrib/xml.rnc @ 32325:763d72925691

match: use match.prefix() in subdirmatcher It seems like the subdirmatcher should be checking if the matcher it's based on is matching prefixes. It was effectively doing that already because "prefix() == not always() and not anypats() and not isexact()", subdirmatcher was checking the first two parts of that condition and I don't think it will ever be given an "exact" matcher with it's directory name (because exact matchers are for matching files, not directories). Still, let's switch to using prefix() for clarity (and because I'm trying to remove code that reaches for matchers internals).
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 17 May 2017 22:33:15 -0700
parents 3acfb69a4729
children
line wrap: on
line source

# 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}