aboutsummaryrefslogtreecommitdiff
path: root/tests/t0106-diff.sh
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
authorGravatar Saya Andy <saya.andy@posteo.com> 2026-09-08 00:11:57 +0700
committerGravatar Saya Andy <saya.andy@posteo.com> 2026-09-08 00:11:57 +0700
commit3e40b846456e4efc06ece7180ef152e053114385 (patch)
treefcf80f1d06756472f996bf306ee1fdf1dc9a3b98 /tests/t0106-diff.sh
parent3b18a7d8c9608ed0bf13d546018f44e703c62e11 (diff)
downloadcgitext-3e40b846456e4efc06ece7180ef152e053114385.tar.gz
cgitext-3e40b846456e4efc06ece7180ef152e053114385.zip
diff: allow stepping back N commits from the selected refsHEADv1.3.1+16masterdevelop
The ref pickers can only select the exact ref that is shown. Add an offset input next to each picker (idoff and id2off), whose value is the number of commits to step back, so any ancestor of a branch or tag can be compared without typing a rev into the url by hand. An apply button submits the values typed there, since text inputs cannot be auto-submitted on their own; the flip link swaps the offsets along with the refs, and the file-level links carry them through. By default both offsets are empty, meaning the selected refs themselves. An empty ref submitted from the form is likewise treated as no ref instead of triggering a bad object name error.
Diffstat (limited to 'tests/t0106-diff.sh')
-rwxr-xr-xtests/t0106-diff.sh55
1 files changed, 51 insertions, 4 deletions
diff --git a/tests/t0106-diff.sh b/tests/t0106-diff.sh
index 1100596..0e45087 100755
--- a/tests/t0106-diff.sh
+++ b/tests/t0106-diff.sh
@@ -50,8 +50,7 @@ test_expect_success 'flip link present' '
'
test_expect_success 'flip link swaps the default refs' '
- old=$(git --git-dir="$PWD/repos/foo/.git" rev-parse master~1) &&
- grep "/foo/diff/?id=$old&amp;id2=master" tmp
+ grep "/foo/diff/?id2=master&amp;idoff=1" tmp
'
test_expect_success 'compare two refs: foo/diff?id=master&id2=HEAD' '
@@ -88,8 +87,7 @@ test_expect_success 'diff with HEAD and root shows content' '
test_expect_success 'flip link swaps explicit refs' '
cgit_query "url=foo/diff&id=master&id2=HEAD" >tmp &&
- new=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD) &&
- grep "/foo/diff/?id=$new&amp;id2=master" tmp
+ grep "/foo/diff/?id=HEAD&amp;id2=master" tmp
'
test_expect_success 'flip link omits id for a diff against a root commit' '
@@ -98,4 +96,53 @@ test_expect_success 'flip link omits id for a diff against a root commit' '
grep "href=./foo/diff/?id2=$root." tmp
'
+test_expect_success 'offset input: to: present' '
+ grep "name=.idoff." tmp
+'
+
+test_expect_success 'offset input: from: present' '
+ grep "name=.id2off." tmp
+'
+
+test_expect_success 'apply button present' '
+ grep "value=.apply." tmp
+'
+
+test_expect_success 'offset: idoff steps back the to ref' '
+ cgit_query "url=foo/diff&id=master&idoff=1" >tmp &&
+ grep "a/file-4 b/file-4" tmp
+'
+
+test_expect_success 'offset: id2off steps back the from ref' '
+ cgit_query "url=foo/diff&id=master&id2=master&id2off=2" >tmp &&
+ grep "a/file-5 b/file-5" tmp
+'
+
+test_expect_success 'offset: filled input and hidden field' '
+ cgit_query "url=foo/diff&id=master&idoff=1" >tmp &&
+ grep "title=.N commits back from the selected ref. value=.1.>" tmp &&
+ grep "type=.hidden. name=.idoff. value=.1./>" tmp
+'
+
+test_expect_success 'offset: too large 404s with the stepped rev' '
+ cgit_query "url=foo/diff&id=master&id2=master&id2off=9" >tmp &&
+ grep "Bad object name: master~9" tmp
+'
+
+test_expect_success 'empty id2 does not 404' '
+ cgit_query "url=foo/diff&id=master&id2=" >tmp &&
+ grep "diffstat" tmp &&
+ ! grep "Bad object name" tmp
+'
+
+test_expect_success 'file link carries the offsets' '
+ cgit_query "url=foo/diff&id=master&id2=master&id2off=2" >tmp &&
+ grep "/foo/diff/file-5?id2=master&amp;id2off=2" tmp
+'
+
+test_expect_success 'flip link carries the offsets' '
+ cgit_query "url=foo/diff&id=master&id2=master&idoff=1&id2off=2" >tmp &&
+ grep "/foo/diff/?id2=master&amp;idoff=2&amp;id2off=1" tmp
+'
+
test_done