Skip to content

tig-2.0

Compare
Choose a tag to compare
@jonas jonas released this 23 Apr 21:17
· 1078 commits to master since this release

A little over 8 years ago the first version of Tig was released. To celebrate the many years with this cursed Git interface, here is a fresh new installment. Version 2.0 of Tig brings several configuration improvements, some of which unfortunately also breaks backwards compatibility with respect to the configuration file. Among view related changes, the branch view has been renamed to the refs view and now also shows tags, the log view now highlights diff stats and supports --graph, and the new grep view allows to quickly jump between matching files. This release also adds mouse support, improvements to the graph rendering, and readline support in the prompt. Please read the release notes below for more information and upgrade instructions.

Thanks to everybody who contributed to this release.

Release notes

Note to packagers:

  • Add .adoc extension to AsciiDoc files so they show correctly on GitHub.
    This includes README, INSTALL, and NEWS and files in doc/ directory.
  • BUGS file has been merged into README.adoc.
  • Default keybindings have been moved to a system-level tigrc file, which is
    installed to ${sysconfdir} by default. The content of the tigrc file is
    included inside the binary as a fall-back. Pass NO_BUILTIN_TIGRC=y to not
    include the system tigrc content and reduce the size of the binary.
  • The example contrib/tigrc file (made obsolete by tigrc) has been removed.
  • Source files have been moved to src and include and tig.c was split up.
  • Build output is less verbose by default; use make V=1 for old output.

Incompatibilities:

  • In preparation for key combo support, key mappings for symbolic keys (e.g.
    Up and Down) must now start with < and end with >, e.g. <Up> and
    <Down>. Furthermore, escape key combos must now use <Esc>key instead of
    ^[key, and control key mappings must now use <Ctrl-key> instead of
    ^key.
  • Only use 'diff-options' for the diff view and introduce '%(cmdlineargs)' to
    hold non-file and non-revision flags passed on the command line. Affects all
    user-defined commands that expect '%(diffargs)' to hold both 'diff-options'
    arguments and those passed on the command line. (GH #228)
  • Remove built-in keybinding for git gc. Add the following line to ~/.tigrc
    to restore it: bind generic G ?git gc.
  • To support view specific colors, '.' can no longer be used interchangeably
    with '-' and '_' in settings names and in particular color names.
  • Replace 'stage-next' action with prompt command using a predefined search
    (see below) and add binding (<at> by default) to also work in the diff view.
  • Most view display options must now be set via the new *-view options in
    tigrc. Existing options are no longer recognized, but a warning is shown.
  • Remap default bindings to have more consistent convention: use lower-case
    keys primarily for view switching and non-destructive actions, use upper-case
    keys for view-specific actions including user-defined commands. To preserve
    old default key bindings see contrib/bindings-v1.x.tigrc. (GH #257)

Improvements:

  • Add mouse support: scroll view, click line to move cursor, double click line
    (or click again) to "Enter" cursor line, e.g. open commit diff. Disabled by
    default, since it makes text selection less intuitive. If you enable this
    remember to hold down Shift (or Option on Mac) when selecting text.
  • Rewrite and improve the rendering of the commit graph. (GH #144, #46)
  • Add completion and history support to the prompt via readline. (GH #185)
  • Options can be configured and toggled individually for each view. Use the new
    view settings to configure the order and display options for each view
    columns. See system tigrc and tigrc(5) for examples. (GH #89, #222)
  • Add grep view as a front-end to git-grep(1): tig grep -p strchr. From
    within Tig, the key for switching or grepping is bound to 'g' by default.
  • Rename 'branch' view to 'refs' view and show tags. (GH #134)
  • Add main view pager mode that reads git-log's '--pretty=raw' data
    from stdin, e.g. git reflog --pretty=raw | tig --pretty=raw.
  • Add support for --graph and highlight diff stats in the log view.
  • Add default command bindings: ! to delete branch, ! to drop stash.
  • Add 'stage-split-chunk' action for splitting chunks in the stage view.
    Bound to '' by default. (GH #107)
  • Add 'back' action bound to '<' by default, which will return the blame view
    to the previous revision and line after moving e.g. to the parent. (GH #124)
  • Auto-refresh views based on watched repository changes. Configure by setting
    refresh-mode to 'manual', 'auto', 'after-command', or 'periodic'. (GH #190)
  • All default settings are in well-documented system tigrc.
  • Add :toggle prompt command to manipulate options using keybindings. For
    example: bind diff D :toggle diff-options --patience --notes. (GH #69)
  • Add a new "auto" value for the 'vertical-split' option to let Tig choose the
    split orientation (this is the new default behavior). Can be toggled.
  • Make it possible to toggle the display of files in untracked directories.
  • Allow Tig to be started with no default configuration by specifying an
    alternative system tigrc file, e.g.: TIGRC_SYSTEM=~/.tigrc.safe tig. Set
    TIGRC_SYSTEM to the empty string to use built-in configuration instead of
  • Key mappings can contain UTF-8 multibyte unicode keys.
  • Warn about conflicting keybindings using Ctrl, e.g. <Ctrl-f> and
    <Ctrl-F>. (GH #218)
  • Extend key bindings for prompt commands (ie. bind <keymap> <key> :<prompt>)
    to support predefined searches, eg.: bind stage 2 :?^ <at> <at>.
  • Git color mappings can be configured in tigrc.
  • More informative configuration error messages.
  • Make reference label formatting configurable, for example:
    set reference-format = (branch) <tags> remote. (GH #201)
  • Adjust author width and other view columns automatically. (GH #49)
  • Support view specific colors: color stage.diff-add yellow default.
  • Copy -S, -G and --grep= pattern to search buffer so 'find-next' and
    'find-prev' work as expected.
  • Optionally specify custom prompt for %(prompt) in shell commands, e.g.
    bind main B ?git checkout -b "%(prompt Enter new branch name: )".
  • Add %(remote) and %(tag) symbols to complement %(branch).
  • User-defined commands can now be prefixed with any of the supported flags,
    e.g. ?git checkout -b %(branch).
  • Open editor at line number for combined diffs e.g. diffs of unmerged files.
  • Add build configuration for Cygwin (OS name: CYGWIN_NT-6.1). (GH #92)
  • Document the Git commands supported by the pager mode. (GH #1)
    system tigrc configuration. (GH #235)

Bug fixes:

  • Fix stash diff display when reloading the stash view after a deleting.
  • Set the commit reference when opening the blame view from the blob view.
  • Correctly identify and highlight the remote branch tracked by HEAD.
  • Pass --no-color after user defined arguments to ensure that colors do not
    break the output parsing. (GH #191)
  • Close stdin when pager mode is not supported.
  • Show newly created branches in the main view. (GH #196)
  • File with 0 changes breaks diffstat highlighting (GH #215)
  • Update %(branch) variable in the main view. (GH #223)
  • Disable graph rendering when either of --reverse, -S, -G, and --grep
    are passed to the main view. (GH #127)
  • Only refresh views that support it.
  • Fix author and date annotation of renamed entries in the tree view.
  • Fix use of unsafe methods in the signal handler. (GH #245)
  • Fix rendering in non-UTF8 terminals.
  • Fix stage-update-line by rewriting the diff chunk containing the line instead
    of using --unidiff-zero and a diff context of zero. (GH #130)
  • Fix status-update to work for untracked directories. (GH #236)
  • Don't pass log parameters given on the command line to the diff view.

Change summary

The diffstat and log summary for changes made in this release.

 .gitignore                                         |   26 +-
 .travis.yml                                        |   18 +
 BUGS                                               |    8 -
 INSTALL => INSTALL.adoc                            |   15 +-
 Makefile                                           |  241 +-
 NEWS => NEWS.adoc                                  |  118 +
 README                                             |   24 -
 README.adoc                                        |   40 +
 autogen.sh                                         |    8 +-
 compat/ansidecl.h                                  |  313 +
 compat/compat.h                                    |    3 +-
 compat/hashtab.c                                   | 1001 +
 compat/hashtab.h                                   |  209 +
 compat/mkstemps.c                                  |    2 +-
 compat/setenv.c                                    |    2 +-
 config.make.in                                     |    3 +-
 configure.ac                                       |   10 +-
 contrib/bindings-v1.x.tigrc                        |   23 +
 contrib/config.make                                |   11 +-
 contrib/config.make-CYGWIN_NT-6.1                  |   19 +
 contrib/config.make-Darwin                         |    8 +
 contrib/tig-completion.bash                        |    9 +-
 contrib/tig.spec.in                                |   10 +-
 contrib/tigrc                                      |   76 -
 doc/{manual.asciidoc => manual.adoc}               |   30 +-
 doc/{tig.1.asciidoc => tig.1.adoc}                 |  107 +-
 doc/{tigmanual.7.asciidoc => tigmanual.7.adoc}     |    2 +-
 doc/tigrc.5.adoc                                   |  963 +
 doc/tigrc.5.asciidoc                               |  757 -
 graph.c                                            |  412 -
 include/tig/argv.h                                 |   73 +
 contrib/header.h => include/tig/blame.h            |   18 +-
 contrib/header.h => include/tig/blob.h             |   18 +-
 include/tig/diff.h                                 |   43 +
 include/tig/display.h                              |   62 +
 include/tig/draw.h                                 |   45 +
 git.h => include/tig/git.h                         |   26 +-
 graph.h => include/tig/graph.h                     |   41 +-
 contrib/header.h => include/tig/grep.h             |   13 +-
 contrib/header.h => include/tig/help.h             |   18 +-
 io.h => include/tig/io.h                           |   46 +-
 include/tig/keys.h                                 |   84 +
 include/tig/line.h                                 |  130 +
 contrib/header.h => include/tig/log.h              |   18 +-
 include/tig/main.h                                 |   56 +
 include/tig/options.h                              |  194 +
 include/tig/pager.h                                |   34 +
 include/tig/parse.h                                |   67 +
 include/tig/prompt.h                               |   47 +
 refs.h => include/tig/refdb.h                      |   36 +-
 contrib/header.h => include/tig/refs.h             |   18 +-
 include/tig/repo.h                                 |   37 +
 include/tig/request.h                              |  116 +
 contrib/header.h => include/tig/stage.h            |   16 +-
 contrib/header.h => include/tig/stash.h            |   18 +-
 include/tig/status.h                               |   53 +
 include/tig/string.h                               |  123 +
 include/tig/tig.h                                  |  151 +
 include/tig/tree.h                                 |   30 +
 include/tig/types.h                                |  165 +
 include/tig/util.h                                 |  126 +
 include/tig/view.h                                 |  356 +
 include/tig/watch.h                                |   58 +
 refs.c                                             |  250 -
 src/argv.c                                         |  487 +
 src/blame.c                                        |  518 +
 src/blob.c                                         |  133 +
 src/diff.c                                         |  440 +
 src/display.c                                      |  527 +
 src/draw.c                                         |  661 +
 src/graph.c                                        |  999 +
 src/grep.c                                         |  263 +
 src/help.c                                         |  301 +
 io.c => src/io.c                                   |  373 +-
 src/keys.c                                         |  438 +
 src/line.c                                         |  208 +
 src/log.c                                          |  156 +
 src/main.c                                         |  514 +
 src/options.c                                      | 1067 +
 src/pager.c                                        |  233 +
 src/parse.c                                        |  330 +
 src/prompt.c                                       |  892 +
 src/refdb.c                                        |  398 +
 src/refs.c                                         |  202 +
 src/repo.c                                         |  136 +
 src/request.c                                      |   69 +
 src/stage.c                                        |  562 +
 src/stash.c                                        |   57 +
 src/status.c                                       |  748 +
 src/string.c                                       |  372 +
 src/tig.c                                          |  735 +
 src/tree.c                                         |  486 +
 src/types.c                                        |  116 +
 src/util.c                                         |  325 +
 src/view.c                                         | 1488 ++
 src/watch.c                                        |  276 +
 test/builtin-config.sh                             |   18 +
 .../10_shorter_merge_than_branch.in                |   22 +
 .../10_shorter_merge_than_branch.out               |   11 +
 test/test-graph-samples/11_new_branch_in_middle.in |   18 +
 .../test-graph-samples/11_new_branch_in_middle.out |    9 +
 test/test-graph-samples/12_cross_over_collapse.in  |   18 +
 test/test-graph-samples/12_cross_over_collapse.out |    9 +
 ...rallel_branches_with_different_middle_branch.in |   20 +
 ...allel_branches_with_different_middle_branch.out |   10 +
 test/test-graph-samples/14_long_collapse_line.in   |   40 +
 test/test-graph-samples/14_long_collapse_line.out  |   20 +
 test/test-graph-samples/16_changes.in              |    8 +
 test/test-graph-samples/16_changes.out             |    4 +
 test/test-graph-samples/1_merge_from_left.in       |   10 +
 test/test-graph-samples/1_merge_from_left.out      |    5 +
 test/test-graph-samples/2_duplicate_parent.in      |   18 +
 test/test-graph-samples/2_duplicate_parent.out     |    9 +
 test/test-graph-samples/3_octo_merge.in            |   10 +
 test/test-graph-samples/3_octo_merge.out           |    5 +
 test/test-graph-samples/4_missing_bar.in           |   14 +
 test/test-graph-samples/4_missing_bar.out          |    7 +
 test/test-graph-samples/5_extra_pipe.in            |   12 +
 test/test-graph-samples/5_extra_pipe.out           |    6 +
 test/test-graph-samples/6_extra_bars.in            |  115 +
 test/test-graph-samples/6_extra_bars.out           |   57 +
 test/test-graph-samples/7_multi_collapse.in        |   16 +
 test/test-graph-samples/7_multi_collapse.out       |    8 +
 test/test-graph-samples/8_multi_collapse_2.in      |   18 +
 test/test-graph-samples/8_multi_collapse_2.out     |    9 +
 test/test-graph-samples/9_parallel_siblings.in     |   18 +
 test/test-graph-samples/9_parallel_siblings.out    |    9 +
 test/test-graph-samples/many_merges.in             |   65 +
 test/test-graph-samples/many_merges.out            |   20 +
 test/test-graph-samples/more.in                    |   72 +
 test/test-graph-samples/more.out                   |   36 +
 test/test-graph-samples/simple.in                  |   22 +
 test/test-graph-samples/simple.out                 |    6 +
 test/test-graph-samples/tig-all-long.in            |14986 ++++++++++++
 test/test-graph-samples/tig-all-long.out           | 1517 ++
 test/test-graph-samples/tig-all.in                 |  286 +
 test/test-graph-samples/tig-all.out                |   35 +
 test/test-graph-samples/tig.in                     |   28 +
 test/test-graph-samples/tig.out                    |    8 +
 test-graph.c => test/test-graph.c                  |   23 +-
 test/unit-test-graph.sh                            |   19 +
 tig.c                                              | 9043 -------
 tig.h                                              |  622 -
 tigrc                                              |  386 +
 {contrib => tools}/announcement.sh                 |    8 +-
 {contrib => tools}/aspell.dict                     |   16 +-
 tools/ax_lib_readline.m4                           |  223 +
 {contrib => tools}/ax_with_curses.m4               |    0
 tools/doc-gen.c                                    |   84 +
 {contrib => tools}/header.h                        |    2 +-
 tools/install.sh                                   |   49 +
 tools/make-builtin-config.sh                       |   40 +
 {contrib => tools}/release.sh                      |   11 +-
 {contrib => tools}/update-release-docs.sh          |    2 +-
 154 files changed, 38086 insertions(+), 11640 deletions(-)
 1 Andreas Schlick
 1 Beat Bolli
 1 Benjamin Bergman
 1 Ciro Santilli
 1 Dmitry Malikov
 1 Ed Bruck
 3 Jeff King

399 Jonas Fonseca
3 Kumar Appaiah
1 LCD 47
1 Lau Ching Jun
1 Michael Barlow
1 Oliver Chang
1 Pat Tullmann
4 Sven Wegener
3 Vivien Didelot
1 hasufell