git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH (GIT-GUI,GITK) 0/8] Encoding support in GUI

From
Alexander Gavrilov <angavrilov@gmail.com>
Date
Sep 17, 2008, 21:07 UTC
Message-ID
<1221685659-476-1-git-send-email-angavrilov@gmail.com>

Currently GUI tools don't provide any support for viewing files that contain non-ASCII characters. This set of patches addresses that issue. The git-gui part of the series is based on patches that are currently in the 'pu' branch of the git-gui repository.

File encoding can be specified in the following ways:
1) It defaults to the current locale encoding.
2) It can be overridden by setting the gui.encoding option.
3) It can be further set on per-file basis by specifying
   the 'encoding' attribute in gitattributes.
4) Finally, git-gui allows directly selecting encodings
   through a popup menu.

The last item is a necessity to compensate for the fact that now staging/unstaging hunks would not work, if the selected encoding is incompatible with the actual data:

While most single-byte character sets are mutually compatible, all multibyte encodings, including utf-8, have the concept of invalid byte sequences, and thus are not completely reversible. Because of this, git-gui won't be able to apply hunks that contain such sequences, and the user would have to specify the encoding correctly, or fallback to ISO-8859-1.

Since git apparently cannot work with filenames in non-locale encodings anyway, I did not try to do anything about it apart from fixing some obvious bugs.

There are also some bugs in handling of commit encodings in gitk, but they are out of the scope of this series.

GIT-GUI:
	git-gui: Cleanup handling of the default encoding.
	---
	git-gui.sh       |    1 +
	lib/blame.tcl    |    2 +-
	lib/diff.tcl     |   11 ++++++-----
	lib/encoding.tcl |   14 ++++++++++++++
	lib/option.tcl   |   24 ++++++++++++++++++++++++
	5 files changed, 46 insertions(+), 6 deletions(-)
	git-gui: Add a menu of available encodings.
	---
	lib/encoding.tcl |  133 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
	lib/option.tcl   |   13 +++++-
	2 files changed, 142 insertions(+), 4 deletions(-)
	git-gui: Allow forcing display encoding for diffs using a submenu.
	---
	git-gui.sh       |    8 ++++++++
	lib/diff.tcl     |    9 +++++++++
	lib/encoding.tcl |   29 +++++++++++++++++++++++++++--
	3 files changed, 44 insertions(+), 2 deletions(-)
	git-gui: Optimize encoding name resolution using a lookup table.
	---
	lib/encoding.tcl |   82 +++++++++++++++++++++++++++++++++++-------------------
	1 files changed, 53 insertions(+), 29 deletions(-)
	git-gui: Support the encoding menu in gui blame.
	---
	lib/blame.tcl |   17 +++++++++++++++++
	1 files changed, 17 insertions(+), 0 deletions(-)
GITK:
	gitk: Port new encoding logic from git-gui.
	---
	gitk |   50 +++++++++++++++++++++++++++++++++++++++++++++++---
	1 files changed, 47 insertions(+), 3 deletions(-)
	gitk: Implement file contents encoding support.
	---
	gitk |   19 ++++++++++++++++---
	1 files changed, 16 insertions(+), 3 deletions(-)
	gitk: Support filenames in the locale encoding.
	---
	gitk |   16 +++++++++++-----
	1 files changed, 11 insertions(+), 5 deletions(-)
Next: Alexander Gavrilov
Message 1 of 44 in “Encoding support in GUI”
  1. 0/8 Encoding support in GUIAlexander Gavrilov, Sep 17, 2008
  2. 1/8 git-gui: Cleanup handling of the default encoding.Alexander Gavrilov, Sep 17, 2008
  3. 2/8 git-gui: Add a menu of available encodings.Alexander Gavrilov, Sep 17, 2008
  4. 3/8 git-gui: Allow forcing display encoding for diffs using a submenu.Alexander Gavrilov, Sep 17, 2008
  5. 4/8 git-gui: Optimize encoding name resolution using a lookup table.Alexander Gavrilov, Sep 17, 2008
  6. 5/8 git-gui: Support the encoding menu in gui blame.Alexander Gavrilov, Sep 17, 2008
  7. 6/8 gitk: Port new encoding logic from git-gui.Alexander Gavrilov, Sep 17, 2008
  8. 7/8 gitk: Implement file contents encoding support.Alexander Gavrilov, Sep 17, 2008
  9. 8/8 gitk: Support filenames in the locale encoding.Alexander Gavrilov, Sep 17, 2008
  10. Johannes SixtSep 19, 2008
  11. Alexander GavrilovSep 19, 2008
  12. Johannes SixtSep 19, 2008
  13. Alexander GavrilovSep 21, 2008
  14. Johannes SixtSep 22, 2008
  15. Johannes SixtSep 22, 2008
  16. Alexander GavrilovSep 22, 2008
  17. Johannes SixtSep 22, 2008
  18. Alexander GavrilovSep 22, 2008
  19. Johannes SixtSep 22, 2008
  20. Alexander GavrilovSep 22, 2008
  21. Dmitry PotapovSep 22, 2008
  22. Dmitry PotapovSep 18, 2008
  23. Alexander GavrilovSep 18, 2008
  24. Johannes SixtSep 18, 2008
  25. Dmitry PotapovSep 18, 2008
  26. Alexander GavrilovSep 18, 2008
  27. Dmitry PotapovSep 18, 2008
  28. Paul MackerrasSep 17, 2008
  29. Alexander GavrilovSep 18, 2008
  30. Paul MackerrasSep 21, 2008
  31. Alexander GavrilovSep 22, 2008
  32. 1/2 check-attr: add an internal check_attr() functionDmitry Potapov, Oct 5, 2008
  33. 2/2 check-attr: Add --stdin-paths optionDmitry Potapov, Oct 5, 2008
  34. Johannes SixtOct 6, 2008
  35. 1/2 check-attr: add an internal check_attr() functionDmitry Potapov, Oct 7, 2008
  36. 2/2 check-attr: Add --stdin-paths optionDmitry Potapov, Oct 7, 2008
  37. Shawn O. PearceOct 8, 2008
  38. Dmitry PotapovOct 12, 2008
  39. Jakub NarebskiOct 12, 2008
  40. Dmitry PotapovOct 12, 2008
  41. Paul MackerrasOct 10, 2008
  42. Dmitry PotapovOct 12, 2008
  43. Johannes SixtOct 1, 2008
  44. Paul MackerrasOct 10, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.