diff options
| author | Johannes Altmanninger <aclopte@gmail.com> | 2024-02-12 23:48:29 +0100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2024-02-13 19:24:24 +1100 |
| commit | e1fd2351e0b1060e92a63be2418d2d6d68f568e7 (patch) | |
| tree | 3c030108bdfd558184cb1d3a19f12076db541508 /test/tools | |
| parent | b838d58e1a68d26dc75292ab57ec3564bd091d52 (diff) | |
rc git.kak: fix blame-jump for commits with special characters
Commit 53d9b9b67 (Escaping tweak in git.kak, 2024-02-06) broke
blame-jump when the commit subject contains a single quote.
(Also on unbalanced "{" which is a rare edge case but we already have
it in our Git history.)
git.kak assumes that filenames don't contain ' or unbalanced {,
but we can't really make that assumption about people's names or
commit subjects.
Unfortunately the escaping here is very messy. We need to pass
arbitrary text to callbacks; maybe we should have closures that can
capture private temporary registers.
Diffstat (limited to 'test/tools')
| -rw-r--r-- | test/tools/git/blame-jump-message/cmd | 1 | ||||
| -rwxr-xr-x | test/tools/git/blame-jump-message/enabled | 2 | ||||
| l--------- | test/tools/git/blame-jump-message/env | 1 | ||||
| -rw-r--r-- | test/tools/git/blame-jump-message/in | 1 | ||||
| -rw-r--r-- | test/tools/git/blame-jump-message/rc | 10 | ||||
| -rw-r--r-- | test/tools/git/blame-jump-message/script | 10 | ||||
| -rw-r--r-- | test/tools/git/env | 13 |
7 files changed, 38 insertions, 0 deletions
diff --git a/test/tools/git/blame-jump-message/cmd b/test/tools/git/blame-jump-message/cmd new file mode 100644 index 00000000..2eeea72e --- /dev/null +++ b/test/tools/git/blame-jump-message/cmd @@ -0,0 +1 @@ +:run<ret> diff --git a/test/tools/git/blame-jump-message/enabled b/test/tools/git/blame-jump-message/enabled new file mode 100755 index 00000000..a041a9b4 --- /dev/null +++ b/test/tools/git/blame-jump-message/enabled @@ -0,0 +1,2 @@ +#!/bin/sh +command -v git >/dev/null diff --git a/test/tools/git/blame-jump-message/env b/test/tools/git/blame-jump-message/env new file mode 120000 index 00000000..971e97aa --- /dev/null +++ b/test/tools/git/blame-jump-message/env @@ -0,0 +1 @@ +../env
\ No newline at end of file diff --git a/test/tools/git/blame-jump-message/in b/test/tools/git/blame-jump-message/in new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/test/tools/git/blame-jump-message/in @@ -0,0 +1 @@ + diff --git a/test/tools/git/blame-jump-message/rc b/test/tools/git/blame-jump-message/rc new file mode 100644 index 00000000..53c3447b --- /dev/null +++ b/test/tools/git/blame-jump-message/rc @@ -0,0 +1,10 @@ +declare-option str jumpclient +source "%val{runtime}/rc/filetype/diff.kak" +source "%val{runtime}/rc/tools/git.kak" + +define-command run %[ + git init + git add + git commit --message "Don't break on single quotes or unbalanced {" + git blame-jump +] diff --git a/test/tools/git/blame-jump-message/script b/test/tools/git/blame-jump-message/script new file mode 100644 index 00000000..33e01b6f --- /dev/null +++ b/test/tools/git/blame-jump-message/script @@ -0,0 +1,10 @@ +ui_out -ignore 7 +ui_out -ignore 4 + +ui_out -ignore 3 +subject=$(cat <<'EOF' +2017-07-14 A U Thor "Don't break on single quotes or unbalanced {" +EOF +) +json_quoted_subject=\"$(printf '%s' "$subject" | sed 's/"/\\"/g')\" +ui_out -within-next 3 '{ "jsonrpc": "2.0", "method": "draw_status", "params": [[{ "face": { "fg": "black", "bg": "yellow", "underline": "default", "attributes": [] }, "contents": '"$json_quoted_subject"' }], [{ "face": { "fg": "default", "bg": "default", "underline": "default", "attributes": [] }, "contents": "*git* 13:2 " }, { "face": { "fg": "black", "bg": "yellow", "underline": "default", "attributes": [] }, "contents": "[scratch]" }, { "face": { "fg": "default", "bg": "default", "underline": "default", "attributes": [] }, "contents": " " }, { "face": { "fg": "blue", "bg": "default", "underline": "default", "attributes": [] }, "contents": "1 sel" }, { "face": { "fg": "default", "bg": "default", "underline": "default", "attributes": [] }, "contents": " - client0@[kak-tests]" }], { "fg": "cyan", "bg": "default", "underline": "default", "attributes": [] }] }' diff --git a/test/tools/git/env b/test/tools/git/env new file mode 100644 index 00000000..abdcc13c --- /dev/null +++ b/test/tools/git/env @@ -0,0 +1,13 @@ +for git_var in $(set | awk -F= '/^GIT_/ {print $1}') +do + unset -v "$git_var" +done +export GIT_CONFIG_NOSYSTEM=true +export GIT_CONFIG_GLOBAL=/dev/null +export GIT_AUTHOR_NAME="A U Thor" +export GIT_AUTHOR_EMAIL="author@domain.tld" +export GIT_COMMITTER_NAME="C O Mitter" +export GIT_COMMITTER_EMAIL="committer@domain.tld" +export GIT_AUTHOR_DATE="1500000000 -0500" +export GIT_COMMITTER_DATE="1500000000 -0500" +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main # Suppress noisy warning. |
