tests: Load screendump files with "git vimdumps" Commit: https://github.com/vim/vim/commit/5eaacef18eb6fc99617c008cf436d304aa4328d0 Author: Aliaksei Budavei <0x000...@gmail.com> Date: Sat Jan 11 17:10:06 2025 +0100
tests: Load screendump files with "git vimdumps" Also, fold the difference part and the bottom part for the identical screendump files. closes: #16380 Co-authored-by: D. Ben Knoble <ben.knoble+git...@gmail.com> Signed-off-by: Aliaksei Budavei <0x000...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/doc/tags b/runtime/doc/tags index 2fc28d724..9310df8f7 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7926,6 +7926,7 @@ gf editing.txt /*gf* gg motion.txt /*gg* gh visual.txt /*gh* gi insert.txt /*gi* +git-vimdumps terminal.txt /*git-vimdumps* gj motion.txt /*gj* gk motion.txt /*gk* glob() builtin.txt /*glob()* diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt index 1fcc470db..43b5e5f24 100644 --- a/runtime/doc/terminal.txt +++ b/runtime/doc/terminal.txt @@ -494,6 +494,12 @@ ConPTY problems have been fixed "winpty" will be preferred. Environment variables are used to pass information to the running job: VIM_SERVERNAME v:servername + *git-vimdumps* +There exists a git-difftool extension called `git-vimdumps` that can be used +to conveniently inspect screendump files and diff them. Please see in the Vim +Repository the file `src/testdir/commondumps.vim` on how to create and use +this git extension. + ============================================================================== 2. Terminal functions *terminal-function-details* diff --git a/runtime/syntax/testdir/README.txt b/runtime/syntax/testdir/README.txt index b96e8f6c6..6703228b9 100644 --- a/runtime/syntax/testdir/README.txt +++ b/runtime/syntax/testdir/README.txt @@ -199,6 +199,9 @@ You can now examine the extracted screendumps: Viewing generated screendumps (submitted for a pull request) ------------------------------------------------------------ +Note: There is also a "git difftool" extension described in + src/testdir/commondumps.vim + First, you need to check out the topic branch with the proposed changes and write down a difference list between the HEAD commit (index) and its parent commit with respect to the changed "dumps" filenames: diff --git a/src/testdir/README.txt b/src/testdir/README.txt index 203c3245b..c7067ac02 100644 --- a/src/testdir/README.txt +++ b/src/testdir/README.txt @@ -162,6 +162,8 @@ You can now examine the extracted screendumps: VIEWING GENERATED SCREENDUMPS (submitted for a pull request): +Note: There is also a "git difftool" extension described in ./commondumps.vim. + First, you need to check out the topic branch with the proposed changes and write down a difference list between the HEAD commit (index) and its parent commit with respect to the changed "dumps" filenames: diff --git a/src/testdir/commondumps.vim b/src/testdir/commondumps.vim index 1211ae9c4..3dbdab532 100644 --- a/src/testdir/commondumps.vim +++ b/src/testdir/commondumps.vim @@ -1,7 +1,112 @@ vim9script -# (Script-local.) +# See below on how to configure the git difftool extension + +# Extend "git difftool" with the capability for loading screendump files. +if v:progname =~? '\<g\=vimdiff$' + # Let "(g)vimdiff" render other files. + if [argv(0), argv(1)] + ->filter((_: number, fname: string) => + fname =~? '^\%(/dev/null\|.\+\.dump\)$') + ->len() == 2 + try + if argv(0) ==? '/dev/null' + term_dumpload(argv(1)) + elseif argv(1) ==? '/dev/null' + term_dumpload(argv(0)) + else + term_dumpdiff(argv(0), argv(1)) + endif + finally + silent bwipeout 1 2 + endtry + endif + + # Always stop from further sourcing this script for "(g)vimdiff". + finish +endif + +# CONSIDER ALTERNATIVES FOR ENABLING THE ABOVE EXTENSION. +# +# For convenience, it is assumed that there is a defined "$VIM_FORK_PATHNAME" +# environment variable holding an absolute pathname for the root directory of +# this repository. +# +# +# A. USE Git FOR CONFIGURATION. +# +# Define the following Git variables with "git config --edit --local" (where +# the "vimdumps" name is arbitrary): +# +# ------------------------------------------------------------------------------ +# [diff] +# tool = vimdumps +# [difftool.vimdumps] +# cmd = vimdiff -S "${VIM_FORK_PATHNAME:?}"/src/testdir/commondumps.vim -o -- "$LOCAL" "$REMOTE" +# ------------------------------------------------------------------------------ +# +# Rendered screendump files (among other files) between revisions can now be +# compared, two at a time, by using "git difftool", e.g.: +# git difftool 50423ab8~1 50423ab8 +# git difftool 50423ab8~1 50423ab8 -- '**/*.dump' +# +# The raw files can also be examined: +# :all +# +# +# B. USE Bash FOR CONFIGURATION (on Debian GNU/Linux). +# +# 1. Make an alias that sources this file, e.g.: +# alias git_vimdiff="git difftool -x 'vimdiff -S "${VIM_FORK_PATHNAME:?}"/vim/src/testdir/commondumps.vim -o --'" # +# 2. Enable programmable completion for the alias, e.g.: +# cat ~/.local/share/bash-completion/completions/git_vimdiff +# +# ------------------------------------------------------------------------------ +# ## Consider (un)setting "$BASH_COMPLETION_USER_DIR" and/or "$XDG_DATA_HOME" so +# ## that this file can be found and sourced; look for these variables in the +# ## "/usr/share/bash-completion/bash_completion" script. +# ## +# ## Look for __git_complete() examples in the header comment of the sourced +# ## "/usr/share/bash-completion/completions/git" script. +# [ -r /usr/share/bash-completion/completions/git ] && +# . /usr/share/bash-completion/completions/git && +# __git_complete git_vimdiff _git_difftool +# ------------------------------------------------------------------------------ +# +# Rendered screendump files (among other files) between revisions can now be +# compared, two at a time, by using the alias, e.g.: +# git_vimdiff 50423ab8~1 50423ab8 +# git_vimdiff 50423ab8~1 50423ab8 -- '**/*.dump' +# +# The raw files can also be examined: +# :all + + +# Script-local functions +# +# Fold the difference part and the bottom part when the top and the bottom +# parts are identical. +def FoldDumpDiffCopy() + try + normal mc + # Shape the pattern after get_separator() from "terminal.c". + const separator: string = '^\(=\+\)\=\s\S.*\.dump\s $' + const start_lnum: number = search(separator, 'eW', (line('$') / 2)) + if start_lnum > 0 + const end_lnum: number = search(separator, 'eW') + if end_lnum > 0 && getline((start_lnum + 1), (end_lnum - 1)) + ->filter((_: number, line: string) => line !~ '^\s\+$') + ->empty() + setlocal foldenable foldmethod=manual + exec 'normal ' .. start_lnum .. 'GzfG' + endif + endif + finally + normal `c + endtry +enddef + # Render a loaded screendump file or the difference of a loaded screendump # file and its namesake file from the "dumps" directory. def Render() @@ -13,6 +118,7 @@ def Render() fnamemodify(failed_fname, ':p:h:h') .. '/dumps') if filereadable(dumps_fname) term_dumpdiff(failed_fname, dumps_fname) + FoldDumpDiffCopy() else term_dumpload(failed_fname) endif @@ -21,6 +127,8 @@ def Render() endtry enddef +# Public functions +# # Search for the "failed" directory in the passed _subtreedirname_ directories # (usually "\<src\>" or "\<syntax\>") and, if found, select its passed _count_ # occurrence, add all its "*.dump" files to the argument list and list them; -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tWe8d-0056Fa-F0%40256bit.org.