summaryrefslogtreecommitdiff
path: root/test/tools
diff options
context:
space:
mode:
authorJohannes Altmanninger <aclopte@gmail.com>2024-02-12 23:48:29 +0100
committerMaxime Coste <mawww@kakoune.org>2024-02-13 19:24:24 +1100
commite1fd2351e0b1060e92a63be2418d2d6d68f568e7 (patch)
tree3c030108bdfd558184cb1d3a19f12076db541508 /test/tools
parentb838d58e1a68d26dc75292ab57ec3564bd091d52 (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/cmd1
-rwxr-xr-xtest/tools/git/blame-jump-message/enabled2
l---------test/tools/git/blame-jump-message/env1
-rw-r--r--test/tools/git/blame-jump-message/in1
-rw-r--r--test/tools/git/blame-jump-message/rc10
-rw-r--r--test/tools/git/blame-jump-message/script10
-rw-r--r--test/tools/git/env13
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.