488 pickle.dump(log, open(cachefile, 'w')) |
489 pickle.dump(log, open(cachefile, 'w')) |
489 else: |
490 else: |
490 log = oldlog |
491 log = oldlog |
491 |
492 |
492 ui.status(_('%d log entries\n') % len(log)) |
493 ui.status(_('%d log entries\n') % len(log)) |
|
494 |
|
495 encodings = ui.configlist('convert', 'cvsps.logencoding') |
|
496 if encodings: |
|
497 def revstr(r): |
|
498 # this is needed, because logentry.revision is a tuple of "int" |
|
499 # (e.g. (1, 2) for "1.2") |
|
500 return '.'.join(pycompat.maplist(pycompat.bytestr, r)) |
|
501 |
|
502 for entry in log: |
|
503 comment = entry.comment |
|
504 for e in encodings: |
|
505 try: |
|
506 entry.comment = comment.decode(e).encode('utf-8') |
|
507 if ui.debugflag: |
|
508 ui.debug("transcoding by %s: %s of %s\n" % |
|
509 (e, revstr(entry.revision), entry.file)) |
|
510 break |
|
511 except UnicodeDecodeError: |
|
512 pass # try next encoding |
|
513 except LookupError as inst: # unknown encoding, maybe |
|
514 raise error.Abort(inst, |
|
515 hint=_('check convert.cvsps.logencoding' |
|
516 ' configuration')) |
|
517 else: |
|
518 raise error.Abort(_("no encoding can transcode" |
|
519 " CVS log message for %s of %s") |
|
520 % (revstr(entry.revision), entry.file), |
|
521 hint=_('check convert.cvsps.logencoding' |
|
522 ' configuration')) |
493 |
523 |
494 hook.hook(ui, None, "cvslog", True, log=log) |
524 hook.hook(ui, None, "cvslog", True, log=log) |
495 |
525 |
496 return log |
526 return log |
497 |
527 |