builtin-blame: Reencode commit messages according to git-log rules.

Currently git-blame outputs text from the commit messages
(e.g. the author name and the summary string) as-is, without
even providing any information about the encoding used for
the data. It makes interpreting the data in multilingual
environment very difficult.

This commit changes the blame implementation to recode the
messages using the rules used by other commands like git-log.
Namely, the target encoding can be specified through the
i18n.commitEncoding or i18n.logOutputEncoding options, or
directly on the command line using the --encoding parameter.

Converting the encoding before output seems to be more
friendly to the porcelain tools than simply providing the
value of the encoding header, and does not require changing
the output format.

If anybody needs the old behavior, it is possible to
achieve it by specifying --encoding=none.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 files changed
tree: 6520e907a99f50404bf9ba8e151ceb6f06e72e5e
  1. arm/
  2. compat/
  3. contrib/
  4. Documentation/
  5. git-gui/
  6. gitk-git/
  7. gitweb/
  8. mozilla-sha1/
  9. perl/
  10. ppc/
  11. t/
  12. templates/
  13. xdiff/
  14. .gitattributes
  15. .gitignore
  16. .mailmap
  17. abspath.c
  18. alias.c
  19. alloc.c
  20. archive-tar.c
  21. archive-zip.c
  22. archive.c
  23. archive.h
  24. attr.c
  25. attr.h
  26. base85.c
  27. blob.c
  28. blob.h
  29. branch.c
  30. branch.h
  31. builtin-add.c
  32. builtin-annotate.c
  33. builtin-apply.c
  34. builtin-archive.c
  35. builtin-blame.c
  36. builtin-branch.c
  37. builtin-bundle.c
  38. builtin-cat-file.c
  39. builtin-check-attr.c
  40. builtin-check-ref-format.c
  41. builtin-checkout-index.c
  42. builtin-checkout.c
  43. builtin-clean.c
  44. builtin-clone.c
  45. builtin-commit-tree.c
  46. builtin-commit.c
  47. builtin-config.c
  48. builtin-count-objects.c
  49. builtin-describe.c
  50. builtin-diff-files.c
  51. builtin-diff-index.c
  52. builtin-diff-tree.c
  53. builtin-diff.c
  54. builtin-fast-export.c
  55. builtin-fetch--tool.c
  56. builtin-fetch-pack.c
  57. builtin-fetch.c
  58. builtin-fmt-merge-msg.c
  59. builtin-for-each-ref.c
  60. builtin-fsck.c
  61. builtin-gc.c
  62. builtin-grep.c
  63. builtin-help.c
  64. builtin-http-fetch.c
  65. builtin-init-db.c
  66. builtin-log.c
  67. builtin-ls-files.c
  68. builtin-ls-remote.c
  69. builtin-ls-tree.c
  70. builtin-mailinfo.c
  71. builtin-mailsplit.c
  72. builtin-merge-base.c
  73. builtin-merge-file.c
  74. builtin-merge-ours.c
  75. builtin-merge-recursive.c
  76. builtin-merge.c
  77. builtin-mv.c
  78. builtin-name-rev.c
  79. builtin-pack-objects.c
  80. builtin-pack-refs.c
  81. builtin-prune-packed.c
  82. builtin-prune.c
  83. builtin-push.c
  84. builtin-read-tree.c
  85. builtin-receive-pack.c
  86. builtin-reflog.c
  87. builtin-remote.c
  88. builtin-rerere.c
  89. builtin-reset.c
  90. builtin-rev-list.c
  91. builtin-rev-parse.c
  92. builtin-revert.c
  93. builtin-rm.c
  94. builtin-send-pack.c
  95. builtin-shortlog.c
  96. builtin-show-branch.c
  97. builtin-show-ref.c
  98. builtin-stripspace.c
  99. builtin-symbolic-ref.c
  100. builtin-tag.c
  101. builtin-tar-tree.c
  102. builtin-unpack-objects.c
  103. builtin-update-index.c
  104. builtin-update-ref.c
  105. builtin-upload-archive.c
  106. builtin-verify-pack.c
  107. builtin-verify-tag.c
  108. builtin-write-tree.c
  109. builtin.h
  110. bundle.c
  111. bundle.h
  112. cache-tree.c
  113. cache-tree.h
  114. cache.h
  115. check-builtins.sh
  116. check-racy.c
  117. check_bindir
  118. color.c
  119. color.h
  120. combine-diff.c
  121. command-list.txt
  122. commit.c
  123. commit.h
  124. config.c
  125. config.mak.in
  126. configure.ac
  127. connect.c
  128. convert.c
  129. copy.c
  130. COPYING
  131. csum-file.c
  132. csum-file.h
  133. ctype.c
  134. daemon.c
  135. date.c
  136. decorate.c
  137. decorate.h
  138. delta.h
  139. diff-delta.c
  140. diff-lib.c
  141. diff-no-index.c
  142. diff.c
  143. diff.h
  144. diffcore-break.c
  145. diffcore-delta.c
  146. diffcore-order.c
  147. diffcore-pickaxe.c
  148. diffcore-rename.c
  149. diffcore.h
  150. dir.c
  151. dir.h
  152. dump-cache-tree.c
  153. editor.c
  154. entry.c
  155. environment.c
  156. exec_cmd.c
  157. exec_cmd.h
  158. fast-import.c
  159. fetch-pack.h
  160. fixup-builtins
  161. fsck.c
  162. fsck.h
  163. generate-cmdlist.sh
  164. git-add--interactive.perl
  165. git-am.sh
  166. git-archimport.perl
  167. git-bisect.sh
  168. git-compat-util.h
  169. git-cvsexportcommit.perl
  170. git-cvsimport.perl
  171. git-cvsserver.perl
  172. git-filter-branch.sh
  173. git-instaweb.sh
  174. git-lost-found.sh
  175. git-merge-octopus.sh
  176. git-merge-one-file.sh
  177. git-merge-resolve.sh
  178. git-mergetool.sh
  179. git-parse-remote.sh
  180. git-pull.sh
  181. git-quiltimport.sh
  182. git-rebase--interactive.sh
  183. git-rebase.sh
  184. git-relink.perl
  185. git-repack.sh
  186. git-request-pull.sh
  187. git-send-email.perl
  188. git-sh-setup.sh
  189. git-stash.sh
  190. git-submodule.sh
  191. git-svn.perl
  192. GIT-VERSION-GEN
  193. git-web--browse.sh
  194. git.c
  195. git.spec.in
  196. graph.c
  197. graph.h
  198. grep.c
  199. grep.h
  200. hash-object.c
  201. hash.c
  202. hash.h
  203. help.c
  204. help.h
  205. http-push.c
  206. http-walker.c
  207. http.c
  208. http.h
  209. ident.c
  210. imap-send.c
  211. index-pack.c
  212. INSTALL
  213. interpolate.c
  214. interpolate.h
  215. levenshtein.c
  216. levenshtein.h
  217. list-objects.c
  218. list-objects.h
  219. ll-merge.c
  220. ll-merge.h
  221. lockfile.c
  222. log-tree.c
  223. log-tree.h
  224. mailmap.c
  225. mailmap.h
  226. Makefile
  227. match-trees.c
  228. merge-file.c
  229. merge-index.c
  230. merge-recursive.c
  231. merge-recursive.h
  232. merge-tree.c
  233. mktag.c
  234. mktree.c
  235. name-hash.c
  236. object.c
  237. object.h
  238. pack-check.c
  239. pack-redundant.c
  240. pack-refs.c
  241. pack-refs.h
  242. pack-revindex.c
  243. pack-revindex.h
  244. pack-write.c
  245. pack.h
  246. pager.c
  247. parse-options.c
  248. parse-options.h
  249. patch-delta.c
  250. patch-id.c
  251. patch-ids.c
  252. patch-ids.h
  253. path.c
  254. pkt-line.c
  255. pkt-line.h
  256. pretty.c
  257. progress.c
  258. progress.h
  259. quote.c
  260. quote.h
  261. reachable.c
  262. reachable.h
  263. read-cache.c
  264. README
  265. reflog-walk.c
  266. reflog-walk.h
  267. refs.c
  268. refs.h
  269. remote.c
  270. remote.h
  271. rerere.c
  272. rerere.h
  273. revision.c
  274. revision.h
  275. run-command.c
  276. run-command.h
  277. send-pack.h
  278. server-info.c
  279. setup.c
  280. sha1-lookup.c
  281. sha1-lookup.h
  282. sha1_file.c
  283. sha1_name.c
  284. shallow.c
  285. shell.c
  286. shortlog.h
  287. show-index.c
  288. sideband.c
  289. sideband.h
  290. strbuf.c
  291. strbuf.h
  292. string-list.c
  293. string-list.h
  294. symlinks.c
  295. tag.c
  296. tag.h
  297. tar.h
  298. test-chmtime.c
  299. test-date.c
  300. test-delta.c
  301. test-genrandom.c
  302. test-match-trees.c
  303. test-parse-options.c
  304. test-path-utils.c
  305. test-sha1.c
  306. test-sha1.sh
  307. thread-utils.c
  308. thread-utils.h
  309. trace.c
  310. transport.c
  311. transport.h
  312. tree-diff.c
  313. tree-walk.c
  314. tree-walk.h
  315. tree.c
  316. tree.h
  317. unpack-file.c
  318. unpack-trees.c
  319. unpack-trees.h
  320. update-server-info.c
  321. upload-pack.c
  322. usage.c
  323. utf8.c
  324. utf8.h
  325. var.c
  326. walker.c
  327. walker.h
  328. wrapper.c
  329. write_or_die.c
  330. ws.c
  331. wt-status.c
  332. wt-status.h
  333. xdiff-interface.c
  334. xdiff-interface.h