aboutsummaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rwxr-xr-xtests/t0106-diff.sh29
-rw-r--r--ui-diff.c78
2 files changed, 42 insertions, 65 deletions
diff --git a/tests/t0106-diff.sh b/tests/t0106-diff.sh
index 4490ecc..0e45087 100755
--- a/tests/t0106-diff.sh
+++ b/tests/t0106-diff.sh
@@ -71,17 +71,9 @@ test_expect_success 'ref picker: to: shows master when id=master' '
grep "master" tmp
'
-test_expect_success 'ref picker: from: preselects the to ref when no id2' '
+test_expect_success 'ref picker: from: empty when no id2' '
cgit_query "url=foo/diff" >tmp &&
- grep "<select name=.id2. onchange=.this.form.submit();.><option value=.master. selected=.selected.>master</option>" tmp
-'
-
-test_expect_success 'from offset: one back when no id2' '
- grep "name=.id2off. title=.N commits back from the selected ref. value=.1.>" tmp
-'
-
-test_expect_success 'to offset: empty when idoff unset' '
- grep "name=.idoff. title=.N commits back from the selected ref.>" tmp
+ grep "<select name=.id2." tmp
'
test_expect_success 'compare initial commit with HEAD' '
@@ -153,21 +145,4 @@ test_expect_success 'flip link carries the offsets' '
grep "/foo/diff/?id2=master&amp;idoff=2&amp;id2off=1" tmp
'
-test_expect_success 'from ref: follows the stepped to ref' '
- cgit_query "url=foo/diff&id=master&idoff=2" >tmp &&
- grep "name=.id2off. title=.N commits back from the selected ref. value=.3.>" tmp &&
- grep "name=.idoff. title=.N commits back from the selected ref. value=.2.>" tmp
-'
-
-test_expect_success 'from ref: shows the given offset' '
- cgit_query "url=foo/diff&id=master&id2=master&id2off=2" >tmp &&
- grep "name=.id2off. title=.N commits back from the selected ref. value=.2.>" tmp
-'
-
-test_expect_success 'from ref: empty when the to ref is the root' '
- root=$(git --git-dir="$PWD/repos/foo/.git" rev-list --max-parents=0 HEAD) &&
- cgit_query "url=foo/diff&id=$root" >tmp &&
- grep "name=.id2off. title=.N commits back from the selected ref.>" tmp
-'
-
test_done
diff --git a/ui-diff.c b/ui-diff.c
index a542eb0..c77ca2f 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -415,34 +415,12 @@ void cgit_print_diff_ctrls(void)
const char *new_ref = ctx.qry.oid && *ctx.qry.oid ?
ctx.qry.oid : ctx.qry.head;
const char *old_ref = ctx.qry.oid2;
- const char *disp_old_ref;
- int idoff = ctx.qry.idoff;
- int id2off = ctx.qry.id2off;
- int disp_id2off;
-
- if (old_ref && *old_ref) {
- disp_old_ref = old_ref;
- disp_id2off = id2off;
- } else if (!is_null_oid(old_rev_oid)) {
- /*
- * No from ref given: the diff compares the (stepped)
- * to rev against its parent, i.e. new_ref~(idoff+1);
- * show that instead of leaving the picker empty. Keep
- * the ref name rather than a materialized parent sha.
- */
- disp_old_ref = new_ref;
- disp_id2off = idoff + 1;
- } else {
- /* to rev is the root: diff against the empty tree */
- disp_old_ref = NULL;
- disp_id2off = 0;
- }
html("<tr>");
html("<td class='label'>from:</td>");
html("<td class='ctrl'>");
- cgit_print_ref_select("id2", disp_old_ref);
- cgit_print_ref_offset("id2off", disp_id2off);
+ cgit_print_ref_select("id2", old_ref);
+ cgit_print_ref_offset("id2off", ctx.qry.id2off);
html("</td></tr><tr>");
html("<td class='label'>to:</td>");
html("<td class='ctrl'>");
@@ -453,20 +431,44 @@ void cgit_print_diff_ctrls(void)
html("<tr><td/><td class='ctrl'>");
html("<input type='submit' value='apply'>");
html(" | ");
- /*
- * The flip link swaps the displayed refs, so the displayed
- * from ref becomes the to ref. cgit_diff_link() emits the
- * offsets from ctx.qry; swap them around the call so they
- * follow the refs.
- */
- ctx.qry.idoff = disp_id2off;
- ctx.qry.id2off = idoff;
- cgit_diff_link("flip", "swap from and to", "button",
- ctx.qry.head,
- disp_old_ref, new_ref,
- ctx.qry.path);
- ctx.qry.idoff = idoff;
- ctx.qry.id2off = id2off;
+ {
+ const char *flip_new_ref;
+ int flip_idoff;
+ int idoff = ctx.qry.idoff;
+ int id2off = ctx.qry.id2off;
+
+ if (old_ref && *old_ref) {
+ /* explicit from ref */
+ flip_new_ref = old_ref;
+ flip_idoff = id2off;
+ } else if (!is_null_oid(old_rev_oid)) {
+ /*
+ * The from rev is the parent of the (stepped)
+ * to rev, i.e. new_ref~(idoff+1); keep the
+ * ref name in the url instead of a materialized
+ * parent sha.
+ */
+ flip_new_ref = new_ref;
+ flip_idoff = idoff + 1;
+ } else {
+ /* root: no from rev to flip to */
+ flip_new_ref = NULL;
+ flip_idoff = 0;
+ }
+
+ /*
+ * cgit_diff_link() emits the offsets from ctx.qry;
+ * swap them around the call so they follow the refs.
+ */
+ ctx.qry.idoff = flip_idoff;
+ ctx.qry.id2off = idoff;
+ cgit_diff_link("flip", "swap from and to", "button",
+ ctx.qry.head,
+ flip_new_ref, new_ref,
+ ctx.qry.path);
+ ctx.qry.idoff = idoff;
+ ctx.qry.id2off = id2off;
+ }
html("</td></tr>");
}
html("</table>");