##// END OF EJS Templates
bookmarks: allow pushkey if new equals current...
bookmarks: allow pushkey if new equals current Previously a bookmark pushkey would be rejected if the specified 'old' value didn't match the servers 'current' value. This change allows this situation, as long as the 'current' server value equals the 'new' pushkey value already. We are trying to write a hook that forces a server bookmark to move forward, using a changegroup hook. If the user also pushed the bookmark, they would get an error, since they computed their pushkey (old,new) pair before the server moved the bookmark. Long term, bundle2 will let us do this more smartly, but this change seems reasonable for now.

File last commit:

r20363:e3ee7ec8 default
r22364:5c153c69 default
Show More
posplit
77 lines | 2.7 KiB | text/plain | TextLexer
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 #!/usr/bin/env python
#
# posplit - split messages in paragraphs on .po/.pot files
#
# license: MIT/X11/Expat
#
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 import re
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 import sys
import polib
def addentry(po, entry, cache):
e = cache.get(entry.msgid)
if e:
e.occurrences.extend(entry.occurrences)
else:
po.append(entry)
cache[entry.msgid] = entry
def mkentry(orig, delta, msgid, msgstr):
entry = polib.POEntry()
entry.merge(orig)
entry.msgid = msgid or orig.msgid
entry.msgstr = msgstr or orig.msgstr
entry.occurrences = [(p, int(l) + delta) for (p, l) in orig.occurrences]
return entry
if __name__ == "__main__":
po = polib.pofile(sys.argv[1])
cache = {}
entries = po[:]
po[:] = []
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 findd = re.compile(r' *\.\. (\w+)::') # for finding directives
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 for entry in entries:
msgids = entry.msgid.split(u'\n\n')
if entry.msgstr:
msgstrs = entry.msgstr.split(u'\n\n')
else:
msgstrs = [u''] * len(msgids)
if len(msgids) != len(msgstrs):
# places the whole existing translation as a fuzzy
# translation for each paragraph, to give the
# translator a chance to recover part of the old
# translation - erasing extra paragraphs is
# probably better than retranslating all from start
if 'fuzzy' not in entry.flags:
entry.flags.append('fuzzy')
msgstrs = [entry.msgstr] * len(msgids)
delta = 0
for msgid, msgstr in zip(msgids, msgstrs):
Simon Heimberg
i18n: posplit removes the entry "::" from the pot file...
r20361 if msgid and msgid != '::':
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 newentry = mkentry(entry, delta, msgid, msgstr)
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 mdirective = findd.match(msgid)
if mdirective:
Simon Heimberg
i18n: leave out entries which contain only a rst directive...
r20362 if not msgid[mdirective.end():].rstrip():
# only directive, nothing to translate here
continue
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 directive = mdirective.group(1)
Simon Heimberg
i18n: leave out entries which contain only rst syntax...
r20363 if directive in ('container', 'include'):
if msgid.rstrip('\n').count('\n') == 0:
# only rst syntax, nothing to translate
continue
else:
# lines following directly, unexpected
print 'Warning: text follows line with directive' \
' %s' % directive
Simon Heimberg
i18n: posplit writes a warning for translators before rst directives...
r20359 comment = 'do not translate: .. %s::' % directive
if not newentry.comment:
newentry.comment = comment
elif comment not in newentry.comment:
newentry.comment += '\n' + comment
Wagner Bruna
i18n: script for splitting large messages on .po/.pot files...
r11389 addentry(po, newentry, cache)
delta += 2 + msgid.count('\n')
po.save()