Fossil SCM

Sync with trunk.

florian 2024-12-13 17:10 diff-word-wrap merge
Commit 4d7277762fab0b2df1f2a2e426da8909d508b513e369e17b6e7409bc5ff59217
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -50,11 +50,11 @@
5050
has a single file to show (and also a different DOM layout). */
5151
document.querySelectorAll('table.diff').forEach(addToggle);
5252
}
5353
const icm = allToggles.length>1 ? window.fossil.page.diffControlContainer : 0;
5454
if(icm) {
55
- const btnAll = D.addClass(D.a("#", "Toggle all diffs"), "button");
55
+ const btnAll = D.addClass(D.a("#", "Show/Hide"), "button");
5656
D.append( icm, btnAll );
5757
btnAll.addEventListener('click', function(ev){
5858
ev.preventDefault();
5959
ev.stopPropagation();
6060
/* Figure out whether we want to show all or hide all: if any diffs are
6161
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -50,11 +50,11 @@
50 has a single file to show (and also a different DOM layout). */
51 document.querySelectorAll('table.diff').forEach(addToggle);
52 }
53 const icm = allToggles.length>1 ? window.fossil.page.diffControlContainer : 0;
54 if(icm) {
55 const btnAll = D.addClass(D.a("#", "Toggle all diffs"), "button");
56 D.append( icm, btnAll );
57 btnAll.addEventListener('click', function(ev){
58 ev.preventDefault();
59 ev.stopPropagation();
60 /* Figure out whether we want to show all or hide all: if any diffs are
61
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -50,11 +50,11 @@
50 has a single file to show (and also a different DOM layout). */
51 document.querySelectorAll('table.diff').forEach(addToggle);
52 }
53 const icm = allToggles.length>1 ? window.fossil.page.diffControlContainer : 0;
54 if(icm) {
55 const btnAll = D.addClass(D.a("#", "Show/Hide"), "button");
56 D.append( icm, btnAll );
57 btnAll.addEventListener('click', function(ev){
58 ev.preventDefault();
59 ev.stopPropagation();
60 /* Figure out whether we want to show all or hide all: if any diffs are
61
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -50,11 +50,11 @@
5050
has a single file to show (and also a different DOM layout). */
5151
document.querySelectorAll('table.diff').forEach(addToggle);
5252
}
5353
const icm = allToggles.length>1 ? window.fossil.page.diffControlContainer : 0;
5454
if(icm) {
55
- const btnAll = D.addClass(D.a("#", "Toggle all diffs"), "button");
55
+ const btnAll = D.addClass(D.a("#", "Show/Hide"), "button");
5656
D.append( icm, btnAll );
5757
btnAll.addEventListener('click', function(ev){
5858
ev.preventDefault();
5959
ev.stopPropagation();
6060
/* Figure out whether we want to show all or hide all: if any diffs are
6161
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -50,11 +50,11 @@
50 has a single file to show (and also a different DOM layout). */
51 document.querySelectorAll('table.diff').forEach(addToggle);
52 }
53 const icm = allToggles.length>1 ? window.fossil.page.diffControlContainer : 0;
54 if(icm) {
55 const btnAll = D.addClass(D.a("#", "Toggle all diffs"), "button");
56 D.append( icm, btnAll );
57 btnAll.addEventListener('click', function(ev){
58 ev.preventDefault();
59 ev.stopPropagation();
60 /* Figure out whether we want to show all or hide all: if any diffs are
61
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -50,11 +50,11 @@
50 has a single file to show (and also a different DOM layout). */
51 document.querySelectorAll('table.diff').forEach(addToggle);
52 }
53 const icm = allToggles.length>1 ? window.fossil.page.diffControlContainer : 0;
54 if(icm) {
55 const btnAll = D.addClass(D.a("#", "Show/Hide"), "button");
56 D.append( icm, btnAll );
57 btnAll.addEventListener('click', function(ev){
58 ev.preventDefault();
59 ev.stopPropagation();
60 /* Figure out whether we want to show all or hide all: if any diffs are
61
+36 -22
--- src/info.c
+++ src/info.c
@@ -622,16 +622,19 @@
622622
char *zHostname;
623623
char *zCwd;
624624
int diffType; /* 0: no diff, 1: unified, 2: side-by-side */
625625
DiffConfig DCfg,*pCfg; /* Diff details */
626626
const char *zHome; /* Home directory */
627
+ const char *zW; /* The "w" query parameter */
628
+ int nChng; /* Number of changes */
627629
Stmt q;
628630
629631
if( !db_open_local(0) || !cgi_is_loopback(g.zIpAddr) ){
630
- cgi_redirect("%R/home");
632
+ cgi_redirectf("%R/home");
631633
return;
632634
}
635
+ file_chdir(g.zLocalRoot, 0);
633636
diffType = preferred_diff_type();
634637
pCfg = construct_diff_flags(diffType, &DCfg);
635638
vid = db_lget_int("checkout", 0);
636639
db_unprotect(PROTECT_ALL);
637640
vfile_check_signature(vid, CKSIG_ENOTFILE);
@@ -650,11 +653,14 @@
650653
style_header("Checkout Status: %h on %h", zCwd, zHostname);
651654
}else{
652655
style_header("Checkout Status: %h", zCwd);
653656
}
654657
render_checkin_context(vid, 0, 0, 0);
655
- if( pCfg==0 ){
658
+ nChng = db_int(0, "SELECT count(*) FROM vfile"
659
+ " WHERE vid=%d AND (deleted OR chnged OR rid==0)", vid);
660
+ if( nChng==0 ){
661
+ @ <p>No uncommitted changes</p>
656662
style_finish_page();
657663
return;
658664
}
659665
db_prepare(&q,
660666
/* 0 1 2 3 4 5 6 */
@@ -663,17 +669,32 @@
663669
" WHERE vid=%d"
664670
" AND (deleted OR chnged OR rid==0)"
665671
" ORDER BY pathname /*scan*/",
666672
vid
667673
);
668
- if( pCfg->diffFlags & DIFF_SIDEBYSIDE ){
669
- pCfg->diffFlags |= DIFF_HTML | DIFF_NOTTOOBIG;
674
+ if( DCfg.diffFlags & DIFF_SIDEBYSIDE ){
675
+ DCfg.diffFlags |= DIFF_HTML | DIFF_NOTTOOBIG;
670676
}else{
671
- pCfg->diffFlags |= DIFF_LINENO | DIFF_HTML | DIFF_NOTTOOBIG;
677
+ DCfg.diffFlags |= DIFF_LINENO | DIFF_HTML | DIFF_NOTTOOBIG;
672678
}
679
+ @ <hr>
673680
@ <div class="sectionmenu info-changes-menu">
674
- /* Filled out by JS */
681
+ zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
682
+ if( diffType!=1 ){
683
+ @ %z(chref("button","%R?diff=1%s",zW))Unified&nbsp;Diff</a>
684
+ }
685
+ if( diffType!=2 ){
686
+ @ %z(chref("button","%R?diff=2%s",zW))Side-by-Side&nbsp;Diff</a>
687
+ }
688
+ if( diffType!=0 ){
689
+ if( *zW ){
690
+ @ %z(chref("button","%R?diff=%d",diffType))\
691
+ @ Show&nbsp;Whitespace&nbsp;Changes</a>
692
+ }else{
693
+ @ %z(chref("button","%R?diff=%d&w",diffType))Ignore&nbsp;Whitespace</a>
694
+ }
695
+ }
675696
@ </div>
676697
while( db_step(&q)==SQLITE_ROW ){
677698
const char *zTreename = db_column_text(&q,0);
678699
int isDeleted = db_column_int(&q, 1);
679700
int isChnged = db_column_int(&q,2);
@@ -681,39 +702,39 @@
681702
int srcid = db_column_int(&q, 4);
682703
int isLink = db_column_int(&q, 5);
683704
const char *zUuid = db_column_text(&q, 6);
684705
int showDiff = 1;
685706
686
- pCfg->diffFlags &= (~DIFF_FILE_MASK);
707
+ DCfg.diffFlags &= (~DIFF_FILE_MASK);
687708
@ <div class='file-change-line'><span>
688709
if( isDeleted ){
689710
@ DELETED %h(zTreename)
690
- pCfg->diffFlags |= DIFF_FILE_DELETED;
711
+ DCfg.diffFlags |= DIFF_FILE_DELETED;
691712
showDiff = 0;
692713
}else if( file_access(zTreename, F_OK) ){
693714
@ MISSING %h(zTreename)
694715
showDiff = 0;
695716
}else if( isNew ){
696717
@ ADDED %h(zTreename)
697
- pCfg->diffFlags |= DIFF_FILE_ADDED;
718
+ DCfg.diffFlags |= DIFF_FILE_ADDED;
698719
srcid = 0;
699720
showDiff = 0;
700721
}else if( isChnged==3 ){
701722
@ ADDED_BY_MERGE %h(zTreename)
702
- pCfg->diffFlags |= DIFF_FILE_ADDED;
723
+ DCfg.diffFlags |= DIFF_FILE_ADDED;
703724
srcid = 0;
704725
showDiff = 0;
705726
}else if( isChnged==5 ){
706727
@ ADDED_BY_INTEGRATE %h(zTreename)
707
- pCfg->diffFlags |= DIFF_FILE_ADDED;
728
+ DCfg.diffFlags |= DIFF_FILE_ADDED;
708729
srcid = 0;
709730
showDiff = 0;
710731
}else{
711732
@ CHANGED %h(zTreename)
712733
}
713734
@ </span></div>
714
- if( showDiff ){
735
+ if( showDiff && pCfg ){
715736
Blob old, new;
716737
if( !isLink != !file_islink(zTreename) ){
717738
@ %s(DIFF_CANNOT_COMPUTE_SYMLINK)
718739
continue;
719740
}
@@ -729,10 +750,11 @@
729750
blob_reset(&old);
730751
blob_reset(&new);
731752
}
732753
}
733754
db_finalize(&q);
755
+ // @ </div> <!-- ap-002 -->
734756
append_diff_javascript(diffType);
735757
style_finish_page();
736758
}
737759
738760
/*
@@ -758,11 +780,10 @@
758780
const char *zParent; /* Hash of the parent check-in (if any) */
759781
const char *zRe; /* regex parameter */
760782
ReCompiled *pRe = 0; /* regex */
761783
const char *zW; /* URL param for ignoring whitespace */
762784
const char *zPage = "vinfo"; /* Page that shows diffs */
763
- const char *zPageHide = "ci"; /* Page that hides diffs */
764785
const char *zBrName; /* Branch name */
765786
DiffConfig DCfg,*pCfg; /* Type of diff */
766787
767788
login_check_credentials();
768789
if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
@@ -1028,21 +1049,17 @@
10281049
@ <div class="sectionmenu info-changes-menu">
10291050
/* ^^^ .info-changes-menu is used by diff scroll sync */
10301051
pCfg = construct_diff_flags(diffType, &DCfg);
10311052
DCfg.pRe = pRe;
10321053
zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
1033
- if( diffType!=0 ){
1034
- @ %z(chref("button","%R/%s/%T?diff=0",zPageHide,zName))\
1035
- @ Hide&nbsp;Diffs</a>
1036
- }
10371054
if( diffType!=1 ){
10381055
@ %z(chref("button","%R/%s/%T?diff=1%s",zPage,zName,zW))\
1039
- @ Unified&nbsp;Diffs</a>
1056
+ @ Unified&nbsp;Diff</a>
10401057
}
10411058
if( diffType!=2 ){
10421059
@ %z(chref("button","%R/%s/%T?diff=2%s",zPage,zName,zW))\
1043
- @ Side-by-Side&nbsp;Diffs</a>
1060
+ @ Side-by-Side&nbsp;Diff</a>
10441061
}
10451062
if( diffType!=0 ){
10461063
if( *zW ){
10471064
@ %z(chref("button","%R/%s/%T",zPage,zName))
10481065
@ Show&nbsp;Whitespace&nbsp;Changes</a>
@@ -1398,13 +1415,10 @@
13981415
cgi_check_for_malice();
13991416
style_set_current_feature("vdiff");
14001417
if( zBranch==0 ){
14011418
style_submenu_element("Path", "%R/timeline?me=%T&you=%T", zFrom, zTo);
14021419
}
1403
- if( diffType!=0 ){
1404
- style_submenu_element("Hide Diff", "%R/vdiff?diff=0&%b%b", &qp, &qpGlob);
1405
- }
14061420
if( diffType!=2 ){
14071421
style_submenu_element("Side-by-Side Diff", "%R/vdiff?diff=2&%b%b", &qp,
14081422
&qpGlob);
14091423
}
14101424
if( diffType!=1 ) {
14111425
--- src/info.c
+++ src/info.c
@@ -622,16 +622,19 @@
622 char *zHostname;
623 char *zCwd;
624 int diffType; /* 0: no diff, 1: unified, 2: side-by-side */
625 DiffConfig DCfg,*pCfg; /* Diff details */
626 const char *zHome; /* Home directory */
 
 
627 Stmt q;
628
629 if( !db_open_local(0) || !cgi_is_loopback(g.zIpAddr) ){
630 cgi_redirect("%R/home");
631 return;
632 }
 
633 diffType = preferred_diff_type();
634 pCfg = construct_diff_flags(diffType, &DCfg);
635 vid = db_lget_int("checkout", 0);
636 db_unprotect(PROTECT_ALL);
637 vfile_check_signature(vid, CKSIG_ENOTFILE);
@@ -650,11 +653,14 @@
650 style_header("Checkout Status: %h on %h", zCwd, zHostname);
651 }else{
652 style_header("Checkout Status: %h", zCwd);
653 }
654 render_checkin_context(vid, 0, 0, 0);
655 if( pCfg==0 ){
 
 
 
656 style_finish_page();
657 return;
658 }
659 db_prepare(&q,
660 /* 0 1 2 3 4 5 6 */
@@ -663,17 +669,32 @@
663 " WHERE vid=%d"
664 " AND (deleted OR chnged OR rid==0)"
665 " ORDER BY pathname /*scan*/",
666 vid
667 );
668 if( pCfg->diffFlags & DIFF_SIDEBYSIDE ){
669 pCfg->diffFlags |= DIFF_HTML | DIFF_NOTTOOBIG;
670 }else{
671 pCfg->diffFlags |= DIFF_LINENO | DIFF_HTML | DIFF_NOTTOOBIG;
672 }
 
673 @ <div class="sectionmenu info-changes-menu">
674 /* Filled out by JS */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
675 @ </div>
676 while( db_step(&q)==SQLITE_ROW ){
677 const char *zTreename = db_column_text(&q,0);
678 int isDeleted = db_column_int(&q, 1);
679 int isChnged = db_column_int(&q,2);
@@ -681,39 +702,39 @@
681 int srcid = db_column_int(&q, 4);
682 int isLink = db_column_int(&q, 5);
683 const char *zUuid = db_column_text(&q, 6);
684 int showDiff = 1;
685
686 pCfg->diffFlags &= (~DIFF_FILE_MASK);
687 @ <div class='file-change-line'><span>
688 if( isDeleted ){
689 @ DELETED %h(zTreename)
690 pCfg->diffFlags |= DIFF_FILE_DELETED;
691 showDiff = 0;
692 }else if( file_access(zTreename, F_OK) ){
693 @ MISSING %h(zTreename)
694 showDiff = 0;
695 }else if( isNew ){
696 @ ADDED %h(zTreename)
697 pCfg->diffFlags |= DIFF_FILE_ADDED;
698 srcid = 0;
699 showDiff = 0;
700 }else if( isChnged==3 ){
701 @ ADDED_BY_MERGE %h(zTreename)
702 pCfg->diffFlags |= DIFF_FILE_ADDED;
703 srcid = 0;
704 showDiff = 0;
705 }else if( isChnged==5 ){
706 @ ADDED_BY_INTEGRATE %h(zTreename)
707 pCfg->diffFlags |= DIFF_FILE_ADDED;
708 srcid = 0;
709 showDiff = 0;
710 }else{
711 @ CHANGED %h(zTreename)
712 }
713 @ </span></div>
714 if( showDiff ){
715 Blob old, new;
716 if( !isLink != !file_islink(zTreename) ){
717 @ %s(DIFF_CANNOT_COMPUTE_SYMLINK)
718 continue;
719 }
@@ -729,10 +750,11 @@
729 blob_reset(&old);
730 blob_reset(&new);
731 }
732 }
733 db_finalize(&q);
 
734 append_diff_javascript(diffType);
735 style_finish_page();
736 }
737
738 /*
@@ -758,11 +780,10 @@
758 const char *zParent; /* Hash of the parent check-in (if any) */
759 const char *zRe; /* regex parameter */
760 ReCompiled *pRe = 0; /* regex */
761 const char *zW; /* URL param for ignoring whitespace */
762 const char *zPage = "vinfo"; /* Page that shows diffs */
763 const char *zPageHide = "ci"; /* Page that hides diffs */
764 const char *zBrName; /* Branch name */
765 DiffConfig DCfg,*pCfg; /* Type of diff */
766
767 login_check_credentials();
768 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
@@ -1028,21 +1049,17 @@
1028 @ <div class="sectionmenu info-changes-menu">
1029 /* ^^^ .info-changes-menu is used by diff scroll sync */
1030 pCfg = construct_diff_flags(diffType, &DCfg);
1031 DCfg.pRe = pRe;
1032 zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
1033 if( diffType!=0 ){
1034 @ %z(chref("button","%R/%s/%T?diff=0",zPageHide,zName))\
1035 @ Hide&nbsp;Diffs</a>
1036 }
1037 if( diffType!=1 ){
1038 @ %z(chref("button","%R/%s/%T?diff=1%s",zPage,zName,zW))\
1039 @ Unified&nbsp;Diffs</a>
1040 }
1041 if( diffType!=2 ){
1042 @ %z(chref("button","%R/%s/%T?diff=2%s",zPage,zName,zW))\
1043 @ Side-by-Side&nbsp;Diffs</a>
1044 }
1045 if( diffType!=0 ){
1046 if( *zW ){
1047 @ %z(chref("button","%R/%s/%T",zPage,zName))
1048 @ Show&nbsp;Whitespace&nbsp;Changes</a>
@@ -1398,13 +1415,10 @@
1398 cgi_check_for_malice();
1399 style_set_current_feature("vdiff");
1400 if( zBranch==0 ){
1401 style_submenu_element("Path", "%R/timeline?me=%T&you=%T", zFrom, zTo);
1402 }
1403 if( diffType!=0 ){
1404 style_submenu_element("Hide Diff", "%R/vdiff?diff=0&%b%b", &qp, &qpGlob);
1405 }
1406 if( diffType!=2 ){
1407 style_submenu_element("Side-by-Side Diff", "%R/vdiff?diff=2&%b%b", &qp,
1408 &qpGlob);
1409 }
1410 if( diffType!=1 ) {
1411
--- src/info.c
+++ src/info.c
@@ -622,16 +622,19 @@
622 char *zHostname;
623 char *zCwd;
624 int diffType; /* 0: no diff, 1: unified, 2: side-by-side */
625 DiffConfig DCfg,*pCfg; /* Diff details */
626 const char *zHome; /* Home directory */
627 const char *zW; /* The "w" query parameter */
628 int nChng; /* Number of changes */
629 Stmt q;
630
631 if( !db_open_local(0) || !cgi_is_loopback(g.zIpAddr) ){
632 cgi_redirectf("%R/home");
633 return;
634 }
635 file_chdir(g.zLocalRoot, 0);
636 diffType = preferred_diff_type();
637 pCfg = construct_diff_flags(diffType, &DCfg);
638 vid = db_lget_int("checkout", 0);
639 db_unprotect(PROTECT_ALL);
640 vfile_check_signature(vid, CKSIG_ENOTFILE);
@@ -650,11 +653,14 @@
653 style_header("Checkout Status: %h on %h", zCwd, zHostname);
654 }else{
655 style_header("Checkout Status: %h", zCwd);
656 }
657 render_checkin_context(vid, 0, 0, 0);
658 nChng = db_int(0, "SELECT count(*) FROM vfile"
659 " WHERE vid=%d AND (deleted OR chnged OR rid==0)", vid);
660 if( nChng==0 ){
661 @ <p>No uncommitted changes</p>
662 style_finish_page();
663 return;
664 }
665 db_prepare(&q,
666 /* 0 1 2 3 4 5 6 */
@@ -663,17 +669,32 @@
669 " WHERE vid=%d"
670 " AND (deleted OR chnged OR rid==0)"
671 " ORDER BY pathname /*scan*/",
672 vid
673 );
674 if( DCfg.diffFlags & DIFF_SIDEBYSIDE ){
675 DCfg.diffFlags |= DIFF_HTML | DIFF_NOTTOOBIG;
676 }else{
677 DCfg.diffFlags |= DIFF_LINENO | DIFF_HTML | DIFF_NOTTOOBIG;
678 }
679 @ <hr>
680 @ <div class="sectionmenu info-changes-menu">
681 zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
682 if( diffType!=1 ){
683 @ %z(chref("button","%R?diff=1%s",zW))Unified&nbsp;Diff</a>
684 }
685 if( diffType!=2 ){
686 @ %z(chref("button","%R?diff=2%s",zW))Side-by-Side&nbsp;Diff</a>
687 }
688 if( diffType!=0 ){
689 if( *zW ){
690 @ %z(chref("button","%R?diff=%d",diffType))\
691 @ Show&nbsp;Whitespace&nbsp;Changes</a>
692 }else{
693 @ %z(chref("button","%R?diff=%d&w",diffType))Ignore&nbsp;Whitespace</a>
694 }
695 }
696 @ </div>
697 while( db_step(&q)==SQLITE_ROW ){
698 const char *zTreename = db_column_text(&q,0);
699 int isDeleted = db_column_int(&q, 1);
700 int isChnged = db_column_int(&q,2);
@@ -681,39 +702,39 @@
702 int srcid = db_column_int(&q, 4);
703 int isLink = db_column_int(&q, 5);
704 const char *zUuid = db_column_text(&q, 6);
705 int showDiff = 1;
706
707 DCfg.diffFlags &= (~DIFF_FILE_MASK);
708 @ <div class='file-change-line'><span>
709 if( isDeleted ){
710 @ DELETED %h(zTreename)
711 DCfg.diffFlags |= DIFF_FILE_DELETED;
712 showDiff = 0;
713 }else if( file_access(zTreename, F_OK) ){
714 @ MISSING %h(zTreename)
715 showDiff = 0;
716 }else if( isNew ){
717 @ ADDED %h(zTreename)
718 DCfg.diffFlags |= DIFF_FILE_ADDED;
719 srcid = 0;
720 showDiff = 0;
721 }else if( isChnged==3 ){
722 @ ADDED_BY_MERGE %h(zTreename)
723 DCfg.diffFlags |= DIFF_FILE_ADDED;
724 srcid = 0;
725 showDiff = 0;
726 }else if( isChnged==5 ){
727 @ ADDED_BY_INTEGRATE %h(zTreename)
728 DCfg.diffFlags |= DIFF_FILE_ADDED;
729 srcid = 0;
730 showDiff = 0;
731 }else{
732 @ CHANGED %h(zTreename)
733 }
734 @ </span></div>
735 if( showDiff && pCfg ){
736 Blob old, new;
737 if( !isLink != !file_islink(zTreename) ){
738 @ %s(DIFF_CANNOT_COMPUTE_SYMLINK)
739 continue;
740 }
@@ -729,10 +750,11 @@
750 blob_reset(&old);
751 blob_reset(&new);
752 }
753 }
754 db_finalize(&q);
755 // @ </div> <!-- ap-002 -->
756 append_diff_javascript(diffType);
757 style_finish_page();
758 }
759
760 /*
@@ -758,11 +780,10 @@
780 const char *zParent; /* Hash of the parent check-in (if any) */
781 const char *zRe; /* regex parameter */
782 ReCompiled *pRe = 0; /* regex */
783 const char *zW; /* URL param for ignoring whitespace */
784 const char *zPage = "vinfo"; /* Page that shows diffs */
 
785 const char *zBrName; /* Branch name */
786 DiffConfig DCfg,*pCfg; /* Type of diff */
787
788 login_check_credentials();
789 if( !g.perm.Read ){ login_needed(g.anon.Read); return; }
@@ -1028,21 +1049,17 @@
1049 @ <div class="sectionmenu info-changes-menu">
1050 /* ^^^ .info-changes-menu is used by diff scroll sync */
1051 pCfg = construct_diff_flags(diffType, &DCfg);
1052 DCfg.pRe = pRe;
1053 zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
 
 
 
 
1054 if( diffType!=1 ){
1055 @ %z(chref("button","%R/%s/%T?diff=1%s",zPage,zName,zW))\
1056 @ Unified&nbsp;Diff</a>
1057 }
1058 if( diffType!=2 ){
1059 @ %z(chref("button","%R/%s/%T?diff=2%s",zPage,zName,zW))\
1060 @ Side-by-Side&nbsp;Diff</a>
1061 }
1062 if( diffType!=0 ){
1063 if( *zW ){
1064 @ %z(chref("button","%R/%s/%T",zPage,zName))
1065 @ Show&nbsp;Whitespace&nbsp;Changes</a>
@@ -1398,13 +1415,10 @@
1415 cgi_check_for_malice();
1416 style_set_current_feature("vdiff");
1417 if( zBranch==0 ){
1418 style_submenu_element("Path", "%R/timeline?me=%T&you=%T", zFrom, zTo);
1419 }
 
 
 
1420 if( diffType!=2 ){
1421 style_submenu_element("Side-by-Side Diff", "%R/vdiff?diff=2&%b%b", &qp,
1422 &qpGlob);
1423 }
1424 if( diffType!=1 ) {
1425

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button