##// END OF EJS Templates
transplant: crash if repo.commit() finds nothing to commit...
transplant: crash if repo.commit() finds nothing to commit (makes issue2135, issue2264 more obvious, but does nothing to fix either one) This seems to happen in two distinct cases: * patch.patch() claims success but changes nothing (e.g. the transplanted changeset adds an empty file that already exists) * patch.patch() makes changes, but repo.status() fails to report them Both of these seem like bugs in other parts of Mercurial, so arguably it's not transplant's job to detect the failure to commit. However: * detecting the problem as soon as possible is desirable * it prevents a more obscure crash later, in transplants.write() * there might be other lurking (or future) bugs that cause repo.commit() to do nothing Also, in the case of issue2264 (source changesets silently dropped by transplant), the only way to spot the problem currently is the crash in transplants.write(). Failure to transplant a patch should abort immediately, whether it's user error (patch does not apply) or a Mercurial bug (e.g. repo.status() failing to report changes).

File last commit:

r11570:2d88369a default
r11638:79231258 stable
Show More
gendoc.py
119 lines | 3.3 KiB | text/x-python | PythonLexer
Martin Geisler
gendoc: do not wrap encoded string...
r9484 import os, sys
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 # import from the live mercurial repo
sys.path.insert(0, "..")
Cédric Duval
gendoc: fall back to pure modules if C extensions are not available (issue1711)
r9130 # fall back to pure modules if required C extensions are not available
sys.path.append(os.path.join('..', 'mercurial', 'pure'))
Matt Mackall
gendoc: use demandimport
r5209 from mercurial import demandimport; demandimport.enable()
Martin Geisler
test-gendoc: add tests for all languages...
r9485 from mercurial import encoding
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 from mercurial.commands import table, globalopts
Cédric Duval
gendoc: don't translate topic strings twice (issue1760)
r9240 from mercurial.i18n import _
Matt Mackall
Generate docs for help topics
r3797 from mercurial.help import helptable
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
def get_desc(docstr):
if not docstr:
return "", ""
# sanitize
docstr = docstr.strip("\n")
docstr = docstr.rstrip()
shortdesc = docstr.splitlines()[0].strip()
i = docstr.find("\n")
if i != -1:
Matt Mackall
many, many trivial check-code fixups
r10282 desc = docstr[i + 2:]
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 else:
desc = " %s" % shortdesc
return (shortdesc, desc)
def get_opts(opts):
FUJIWARA Katsunori
help: show value requirement and multiple occurrence of options...
r11321 for opt in opts:
if len(opt) == 5:
shortopt, longopt, default, desc, optlabel = opt
else:
shortopt, longopt, default, desc = opt
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 allopts = []
if shortopt:
allopts.append("-%s" % shortopt)
if longopt:
allopts.append("--%s" % longopt)
desc += default and _(" (default: %s)") % default or ""
yield(", ".join(allopts), desc)
def get_cmd(cmd):
d = {}
attr = table[cmd]
cmds = cmd.lstrip("^").split("|")
d['cmd'] = cmds[0]
d['aliases'] = cmd.split("|")[1:]
d['desc'] = get_desc(attr[0].__doc__)
d['opts'] = list(get_opts(attr[1]))
Matt Mackall
doc: handle shortened command synopses
r7376
s = 'hg ' + cmds[0]
if len(attr) > 2:
if not attr[2].startswith('hg'):
Ori Avtalion
gendoc: add missing space in command synopsis
r8546 s += ' ' + attr[2]
Matt Mackall
doc: handle shortened command synopses
r7376 else:
s = attr[2]
Martin Geisler
gendoc: fix synopsis...
r9622 d['synopsis'] = s.strip()
Matt Mackall
doc: handle shortened command synopses
r7376
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 return d
def show_doc(ui):
Martin Geisler
gendoc: rename underlined/bold to section/subsection
r9296 def section(s):
Martin Geisler
test-gendoc: add tests for all languages...
r9485 ui.write("%s\n%s\n\n" % (s, "-" * encoding.colwidth(s)))
Martin Geisler
gendoc: rename underlined/bold to section/subsection
r9296 def subsection(s):
Martin Geisler
test-gendoc: add tests for all languages...
r9485 ui.write("%s\n%s\n\n" % (s, '"' * encoding.colwidth(s)))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
# print options
Martin Geisler
doc: use titlecase in man page section titles
r9792 section(_("Options"))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 for optstr, desc in get_opts(globalopts):
Martin Geisler
doc: use reStructuredText for man and HTML pages...
r9158 ui.write("%s\n %s\n\n" % (optstr, desc))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
# print cmds
Martin Geisler
doc: use titlecase in man page section titles
r9792 section(_("Commands"))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 h = {}
for c, attr in table.items():
Christian Ebert
gendoc: fix indentation
r6488 f = c.split("|")[0]
f = f.lstrip("^")
h[f] = c
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 cmds = h.keys()
cmds.sort()
for f in cmds:
Matt Mackall
many, many trivial check-code fixups
r10282 if f.startswith("debug"):
continue
Christian Ebert
gendoc: fix indentation
r6488 d = get_cmd(h[f])
# synopsis
Martin Geisler
doc: use reStructuredText for man and HTML pages...
r9158 ui.write(".. _%s:\n\n" % d['cmd'])
ui.write("``%s``\n" % d['synopsis'].replace("hg ","", 1))
Christian Ebert
gendoc: fix indentation
r6488 # description
ui.write("%s\n\n" % d['desc'][1])
# options
opt_output = list(d['opts'])
if opt_output:
opts_len = max([len(line[0]) for line in opt_output])
Martin Geisler
doc: use reStructuredText for man and HTML pages...
r9158 ui.write(_(" options:\n\n"))
Christian Ebert
gendoc: fix indentation
r6488 for optstr, desc in opt_output:
if desc:
s = "%-*s %s" % (opts_len, optstr, desc)
else:
s = optstr
Martin Geisler
gendoc: do not wrap encoded string...
r9484 ui.write(" %s\n" % s)
Christian Ebert
gendoc: fix indentation
r6488 ui.write("\n")
# aliases
if d['aliases']:
ui.write(_(" aliases: %s\n\n") % " ".join(d['aliases']))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
Matt Mackall
Generate docs for help topics
r3797 # print topics
Martin Geisler
gendoc: rename underlined/bold to section/subsection
r9296 for names, sec, doc in helptable:
Martin Geisler
gendoc: make anchors for help topic names
r9297 for name in names:
ui.write(".. _%s:\n" % name)
ui.write("\n")
Martin Geisler
doc: use titlecase in man page section titles
r9792 section(sec)
Matt Mackall
Generate docs for help topics
r3797 if callable(doc):
doc = doc()
Cédric Duval
gendoc: fix localization of help topic...
r9021 ui.write(doc)
Matt Mackall
Generate docs for help topics
r3797 ui.write("\n")
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 if __name__ == "__main__":
show_doc(sys.stdout)