Fossil SCM
Merge with trunk to get the latest web UI updates.
Commit
0f9981971ea6eb4b8270c7caf3e5d07e8b3121e1a949d294a7ad08e3a7b04a42
Parent
2ffedc2bcbc32c6…
6 files changed
+33
-9
+11
-1
+11
-5
+7
-6
+3
+3
+33
-9
| --- src/alerts.c | ||
| +++ src/alerts.c | ||
| @@ -1748,15 +1748,10 @@ | ||
| 1748 | 1748 | if( alert_webpages_disabled() ){ |
| 1749 | 1749 | db_commit_transaction(); |
| 1750 | 1750 | return; |
| 1751 | 1751 | } |
| 1752 | 1752 | login_check_credentials(); |
| 1753 | - if( !g.perm.EmailAlert ){ | |
| 1754 | - db_commit_transaction(); | |
| 1755 | - login_needed(g.anon.EmailAlert); | |
| 1756 | - /*NOTREACHED*/ | |
| 1757 | - } | |
| 1758 | 1753 | isLogin = login_is_individual(); |
| 1759 | 1754 | zName = P("name"); |
| 1760 | 1755 | nName = zName ? (int)strlen(zName) : 0; |
| 1761 | 1756 | if( g.perm.Admin && P("sid")!=0 ){ |
| 1762 | 1757 | sid = atoi(P("sid")); |
| @@ -1767,11 +1762,11 @@ | ||
| 1767 | 1762 | " THEN subscriberId ELSE 0 END" |
| 1768 | 1763 | " FROM subscriber WHERE subscriberCode>=hextoblob(%Q)" |
| 1769 | 1764 | " LIMIT 1", zName, zName); |
| 1770 | 1765 | if( sid ) keepAlive = 1; |
| 1771 | 1766 | } |
| 1772 | - if( sid==0 && isLogin ){ | |
| 1767 | + if( sid==0 && isLogin && g.perm.EmailAlert ){ | |
| 1773 | 1768 | sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 1774 | 1769 | " WHERE suname=%Q", g.zLogin); |
| 1775 | 1770 | } |
| 1776 | 1771 | if( sid==0 ){ |
| 1777 | 1772 | db_commit_transaction(); |
| @@ -2128,17 +2123,44 @@ | ||
| 2128 | 2123 | int bSubmit; |
| 2129 | 2124 | const char *zEAddr; |
| 2130 | 2125 | char *zCode = 0; |
| 2131 | 2126 | int sid = 0; |
| 2132 | 2127 | |
| 2133 | - /* If a valid subscriber code is supplied, then unsubscribe immediately. | |
| 2128 | + if( zName==0 ) zName = P("scode"); | |
| 2129 | + | |
| 2130 | + /* If a valid subscriber code is supplied, then either present the user | |
| 2131 | + ** with a comformation, or if already confirmed, unsubscribe immediately. | |
| 2134 | 2132 | */ |
| 2135 | 2133 | if( zName |
| 2136 | 2134 | && (sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 2137 | 2135 | " WHERE subscriberCode=hextoblob(%Q)", zName))!=0 |
| 2138 | 2136 | ){ |
| 2139 | - alert_unsubscribe(sid); | |
| 2137 | + char *zUnsubName = mprintf("confirm%04x", sid); | |
| 2138 | + if( P(zUnsubName)!=0 ){ | |
| 2139 | + alert_unsubscribe(sid); | |
| 2140 | + }else if( P("manage")!=0 ){ | |
| 2141 | + cgi_redirectf("%R/alerts/%s", zName); | |
| 2142 | + }else{ | |
| 2143 | + style_header("Unsubscribed"); | |
| 2144 | + form_begin(0, "%R/unsubscribe"); | |
| 2145 | + @ <input type="hidden" name="scode" value="%h(zName)"> | |
| 2146 | + @ <table border="0" cellpadding="10" width="100%%"> | |
| 2147 | + @ <tr><td align="right"> | |
| 2148 | + @ <input type="submit" name="%h(zUnsubName)" value="Unsubscribe"> | |
| 2149 | + @ </td><td><big><b>←</b></big></td> | |
| 2150 | + @ <td>Cancel your subscription to %h(g.zBaseURL) notifications | |
| 2151 | + @ </td><tr> | |
| 2152 | + @ <tr><td align="right"> | |
| 2153 | + @ <input type="submit" name="manage" \ | |
| 2154 | + @ value="Manage Subscription Settings"> | |
| 2155 | + @ </td><td><big><b>←</b></big></td> | |
| 2156 | + @ <td>Make changes to your subscription preferences | |
| 2157 | + @ </td><tr> | |
| 2158 | + @ </table> | |
| 2159 | + @ </form> | |
| 2160 | + style_finish_page(); | |
| 2161 | + } | |
| 2140 | 2162 | return; |
| 2141 | 2163 | } |
| 2142 | 2164 | |
| 2143 | 2165 | /* Logged in users are redirected to the /alerts page */ |
| 2144 | 2166 | login_check_credentials(); |
| @@ -2963,12 +2985,14 @@ | ||
| 2963 | 2985 | Blob fhdr, fbody; |
| 2964 | 2986 | blob_init(&fhdr, 0, 0); |
| 2965 | 2987 | blob_appendf(&fhdr, "To: <%s>\r\n", zEmail); |
| 2966 | 2988 | blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr)); |
| 2967 | 2989 | blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 2968 | - blob_appendf(&fbody, "\n-- \nSubscription info: %s/alerts/%s\n", | |
| 2990 | + blob_appendf(&fbody, "\n-- \nUnsubscribe: %s/unsubscribe/%s\n", | |
| 2969 | 2991 | zUrl, zCode); |
| 2992 | + /* blob_appendf(&fbody, "Subscription settings: %s/alerts/%s\n", | |
| 2993 | + ** zUrl, zCode); */ | |
| 2970 | 2994 | alert_send(pSender,&fhdr,&fbody,p->zFromName); |
| 2971 | 2995 | nSent++; |
| 2972 | 2996 | blob_reset(&fhdr); |
| 2973 | 2997 | blob_reset(&fbody); |
| 2974 | 2998 | }else{ |
| 2975 | 2999 |
| --- src/alerts.c | |
| +++ src/alerts.c | |
| @@ -1748,15 +1748,10 @@ | |
| 1748 | if( alert_webpages_disabled() ){ |
| 1749 | db_commit_transaction(); |
| 1750 | return; |
| 1751 | } |
| 1752 | login_check_credentials(); |
| 1753 | if( !g.perm.EmailAlert ){ |
| 1754 | db_commit_transaction(); |
| 1755 | login_needed(g.anon.EmailAlert); |
| 1756 | /*NOTREACHED*/ |
| 1757 | } |
| 1758 | isLogin = login_is_individual(); |
| 1759 | zName = P("name"); |
| 1760 | nName = zName ? (int)strlen(zName) : 0; |
| 1761 | if( g.perm.Admin && P("sid")!=0 ){ |
| 1762 | sid = atoi(P("sid")); |
| @@ -1767,11 +1762,11 @@ | |
| 1767 | " THEN subscriberId ELSE 0 END" |
| 1768 | " FROM subscriber WHERE subscriberCode>=hextoblob(%Q)" |
| 1769 | " LIMIT 1", zName, zName); |
| 1770 | if( sid ) keepAlive = 1; |
| 1771 | } |
| 1772 | if( sid==0 && isLogin ){ |
| 1773 | sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 1774 | " WHERE suname=%Q", g.zLogin); |
| 1775 | } |
| 1776 | if( sid==0 ){ |
| 1777 | db_commit_transaction(); |
| @@ -2128,17 +2123,44 @@ | |
| 2128 | int bSubmit; |
| 2129 | const char *zEAddr; |
| 2130 | char *zCode = 0; |
| 2131 | int sid = 0; |
| 2132 | |
| 2133 | /* If a valid subscriber code is supplied, then unsubscribe immediately. |
| 2134 | */ |
| 2135 | if( zName |
| 2136 | && (sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 2137 | " WHERE subscriberCode=hextoblob(%Q)", zName))!=0 |
| 2138 | ){ |
| 2139 | alert_unsubscribe(sid); |
| 2140 | return; |
| 2141 | } |
| 2142 | |
| 2143 | /* Logged in users are redirected to the /alerts page */ |
| 2144 | login_check_credentials(); |
| @@ -2963,12 +2985,14 @@ | |
| 2963 | Blob fhdr, fbody; |
| 2964 | blob_init(&fhdr, 0, 0); |
| 2965 | blob_appendf(&fhdr, "To: <%s>\r\n", zEmail); |
| 2966 | blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr)); |
| 2967 | blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 2968 | blob_appendf(&fbody, "\n-- \nSubscription info: %s/alerts/%s\n", |
| 2969 | zUrl, zCode); |
| 2970 | alert_send(pSender,&fhdr,&fbody,p->zFromName); |
| 2971 | nSent++; |
| 2972 | blob_reset(&fhdr); |
| 2973 | blob_reset(&fbody); |
| 2974 | }else{ |
| 2975 |
| --- src/alerts.c | |
| +++ src/alerts.c | |
| @@ -1748,15 +1748,10 @@ | |
| 1748 | if( alert_webpages_disabled() ){ |
| 1749 | db_commit_transaction(); |
| 1750 | return; |
| 1751 | } |
| 1752 | login_check_credentials(); |
| 1753 | isLogin = login_is_individual(); |
| 1754 | zName = P("name"); |
| 1755 | nName = zName ? (int)strlen(zName) : 0; |
| 1756 | if( g.perm.Admin && P("sid")!=0 ){ |
| 1757 | sid = atoi(P("sid")); |
| @@ -1767,11 +1762,11 @@ | |
| 1762 | " THEN subscriberId ELSE 0 END" |
| 1763 | " FROM subscriber WHERE subscriberCode>=hextoblob(%Q)" |
| 1764 | " LIMIT 1", zName, zName); |
| 1765 | if( sid ) keepAlive = 1; |
| 1766 | } |
| 1767 | if( sid==0 && isLogin && g.perm.EmailAlert ){ |
| 1768 | sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 1769 | " WHERE suname=%Q", g.zLogin); |
| 1770 | } |
| 1771 | if( sid==0 ){ |
| 1772 | db_commit_transaction(); |
| @@ -2128,17 +2123,44 @@ | |
| 2123 | int bSubmit; |
| 2124 | const char *zEAddr; |
| 2125 | char *zCode = 0; |
| 2126 | int sid = 0; |
| 2127 | |
| 2128 | if( zName==0 ) zName = P("scode"); |
| 2129 | |
| 2130 | /* If a valid subscriber code is supplied, then either present the user |
| 2131 | ** with a comformation, or if already confirmed, unsubscribe immediately. |
| 2132 | */ |
| 2133 | if( zName |
| 2134 | && (sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 2135 | " WHERE subscriberCode=hextoblob(%Q)", zName))!=0 |
| 2136 | ){ |
| 2137 | char *zUnsubName = mprintf("confirm%04x", sid); |
| 2138 | if( P(zUnsubName)!=0 ){ |
| 2139 | alert_unsubscribe(sid); |
| 2140 | }else if( P("manage")!=0 ){ |
| 2141 | cgi_redirectf("%R/alerts/%s", zName); |
| 2142 | }else{ |
| 2143 | style_header("Unsubscribed"); |
| 2144 | form_begin(0, "%R/unsubscribe"); |
| 2145 | @ <input type="hidden" name="scode" value="%h(zName)"> |
| 2146 | @ <table border="0" cellpadding="10" width="100%%"> |
| 2147 | @ <tr><td align="right"> |
| 2148 | @ <input type="submit" name="%h(zUnsubName)" value="Unsubscribe"> |
| 2149 | @ </td><td><big><b>←</b></big></td> |
| 2150 | @ <td>Cancel your subscription to %h(g.zBaseURL) notifications |
| 2151 | @ </td><tr> |
| 2152 | @ <tr><td align="right"> |
| 2153 | @ <input type="submit" name="manage" \ |
| 2154 | @ value="Manage Subscription Settings"> |
| 2155 | @ </td><td><big><b>←</b></big></td> |
| 2156 | @ <td>Make changes to your subscription preferences |
| 2157 | @ </td><tr> |
| 2158 | @ </table> |
| 2159 | @ </form> |
| 2160 | style_finish_page(); |
| 2161 | } |
| 2162 | return; |
| 2163 | } |
| 2164 | |
| 2165 | /* Logged in users are redirected to the /alerts page */ |
| 2166 | login_check_credentials(); |
| @@ -2963,12 +2985,14 @@ | |
| 2985 | Blob fhdr, fbody; |
| 2986 | blob_init(&fhdr, 0, 0); |
| 2987 | blob_appendf(&fhdr, "To: <%s>\r\n", zEmail); |
| 2988 | blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr)); |
| 2989 | blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 2990 | blob_appendf(&fbody, "\n-- \nUnsubscribe: %s/unsubscribe/%s\n", |
| 2991 | zUrl, zCode); |
| 2992 | /* blob_appendf(&fbody, "Subscription settings: %s/alerts/%s\n", |
| 2993 | ** zUrl, zCode); */ |
| 2994 | alert_send(pSender,&fhdr,&fbody,p->zFromName); |
| 2995 | nSent++; |
| 2996 | blob_reset(&fhdr); |
| 2997 | blob_reset(&fbody); |
| 2998 | }else{ |
| 2999 |
+11
-1
| --- src/backlink.c | ||
| +++ src/backlink.c | ||
| @@ -34,10 +34,11 @@ | ||
| 34 | 34 | */ |
| 35 | 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | 36 | Blob sql; |
| 37 | 37 | Stmt q; |
| 38 | 38 | char *zGlob; |
| 39 | + int needEndPanel = 0; | |
| 39 | 40 | zGlob = mprintf("%.5s*", zUuid); |
| 40 | 41 | db_multi_exec( |
| 41 | 42 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 42 | 43 | "DELETE FROM ok;\n" |
| 43 | 44 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | ||
| 49 | 50 | " WHERE target GLOB %Q" |
| 50 | 51 | " AND %Q GLOB (target || '*');", |
| 51 | 52 | zGlob, zUuid |
| 52 | 53 | ); |
| 53 | 54 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 54 | - if( zLabel ) cgi_printf("%s", zLabel); | |
| 55 | + if( zLabel ){ | |
| 56 | + cgi_printf("%s", zLabel); | |
| 57 | + if( strstr(zLabel, "accordion")!=0 ){ | |
| 58 | + cgi_printf("<div class=\"accordion_panel\">\n"); | |
| 59 | + needEndPanel = 1; | |
| 60 | + } | |
| 61 | + } | |
| 55 | 62 | blob_zero(&sql); |
| 56 | 63 | blob_append(&sql, timeline_query_for_www(), -1); |
| 57 | 64 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 58 | 65 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 59 | 66 | www_print_timeline(&q, |
| 60 | 67 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 61 | 68 | 0, 0, 0, 0, 0, 0); |
| 62 | 69 | db_finalize(&q); |
| 70 | + if( needEndPanel ){ | |
| 71 | + cgi_printf("</div>\n"); | |
| 72 | + } | |
| 63 | 73 | } |
| 64 | 74 | |
| 65 | 75 | /* |
| 66 | 76 | ** WEBPAGE: test-backlink-timeline |
| 67 | 77 | ** |
| 68 | 78 |
| --- src/backlink.c | |
| +++ src/backlink.c | |
| @@ -34,10 +34,11 @@ | |
| 34 | */ |
| 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | Blob sql; |
| 37 | Stmt q; |
| 38 | char *zGlob; |
| 39 | zGlob = mprintf("%.5s*", zUuid); |
| 40 | db_multi_exec( |
| 41 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 42 | "DELETE FROM ok;\n" |
| 43 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | |
| 49 | " WHERE target GLOB %Q" |
| 50 | " AND %Q GLOB (target || '*');", |
| 51 | zGlob, zUuid |
| 52 | ); |
| 53 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 54 | if( zLabel ) cgi_printf("%s", zLabel); |
| 55 | blob_zero(&sql); |
| 56 | blob_append(&sql, timeline_query_for_www(), -1); |
| 57 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 58 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 59 | www_print_timeline(&q, |
| 60 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 61 | 0, 0, 0, 0, 0, 0); |
| 62 | db_finalize(&q); |
| 63 | } |
| 64 | |
| 65 | /* |
| 66 | ** WEBPAGE: test-backlink-timeline |
| 67 | ** |
| 68 |
| --- src/backlink.c | |
| +++ src/backlink.c | |
| @@ -34,10 +34,11 @@ | |
| 34 | */ |
| 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | Blob sql; |
| 37 | Stmt q; |
| 38 | char *zGlob; |
| 39 | int needEndPanel = 0; |
| 40 | zGlob = mprintf("%.5s*", zUuid); |
| 41 | db_multi_exec( |
| 42 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 43 | "DELETE FROM ok;\n" |
| 44 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | |
| 50 | " WHERE target GLOB %Q" |
| 51 | " AND %Q GLOB (target || '*');", |
| 52 | zGlob, zUuid |
| 53 | ); |
| 54 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 55 | if( zLabel ){ |
| 56 | cgi_printf("%s", zLabel); |
| 57 | if( strstr(zLabel, "accordion")!=0 ){ |
| 58 | cgi_printf("<div class=\"accordion_panel\">\n"); |
| 59 | needEndPanel = 1; |
| 60 | } |
| 61 | } |
| 62 | blob_zero(&sql); |
| 63 | blob_append(&sql, timeline_query_for_www(), -1); |
| 64 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 65 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 66 | www_print_timeline(&q, |
| 67 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 68 | 0, 0, 0, 0, 0, 0); |
| 69 | db_finalize(&q); |
| 70 | if( needEndPanel ){ |
| 71 | cgi_printf("</div>\n"); |
| 72 | } |
| 73 | } |
| 74 | |
| 75 | /* |
| 76 | ** WEBPAGE: test-backlink-timeline |
| 77 | ** |
| 78 |
+11
-5
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -680,11 +680,12 @@ | ||
| 680 | 680 | zUser = zEUser ? zEUser : zOrigUser; |
| 681 | 681 | zComment = db_column_text(&q1, 3); |
| 682 | 682 | zDate = db_column_text(&q1,1); |
| 683 | 683 | zOrigDate = db_column_text(&q1, 4); |
| 684 | 684 | if( zOrigDate==0 ) zOrigDate = zDate; |
| 685 | - @ <div class="section">Overview</div> | |
| 685 | + @ <div class="section accordion">Overview</div> | |
| 686 | + @ <div class="accordion_panel"> | |
| 686 | 687 | @ <table class="label-value"> |
| 687 | 688 | @ <tr><th>Comment:</th><td class="infoComment">\ |
| 688 | 689 | @ %!W(zEComment?zEComment:zComment)</td></tr> |
| 689 | 690 | |
| 690 | 691 | /* The Download: line */ |
| @@ -868,17 +869,21 @@ | ||
| 868 | 869 | }else{ |
| 869 | 870 | style_header("Check-in Information"); |
| 870 | 871 | login_anonymous_available(); |
| 871 | 872 | } |
| 872 | 873 | db_finalize(&q1); |
| 874 | + @ </div> | |
| 875 | + builtin_request_js("accordion.js"); | |
| 873 | 876 | if( !PB("nowiki") ){ |
| 874 | 877 | wiki_render_associated("checkin", zUuid, 0); |
| 875 | 878 | } |
| 876 | - render_backlink_graph(zUuid, "<div class=\"section\">References</div>\n"); | |
| 877 | - @ <div class="section">Context</div> | |
| 879 | + render_backlink_graph(zUuid, | |
| 880 | + "<div class=\"section accordion\">References</div>\n"); | |
| 881 | + @ <div class="section accordion">Context</div><div class="accordion_panel"> | |
| 878 | 882 | render_checkin_context(rid, 0, 0, 0); |
| 879 | - @ <div class="section">Changes</div> | |
| 883 | + @ </div><div class="section accordion">Changes</div> | |
| 884 | + @ <div class="accordion_panel"> | |
| 880 | 885 | @ <div class="sectionmenu"> |
| 881 | 886 | pCfg = construct_diff_flags(diffType, &DCfg); |
| 882 | 887 | DCfg.pRe = pRe; |
| 883 | 888 | zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 884 | 889 | if( diffType!=0 ){ |
| @@ -907,11 +912,11 @@ | ||
| 907 | 912 | @ Patch</a> |
| 908 | 913 | } |
| 909 | 914 | if( g.perm.Admin ){ |
| 910 | 915 | @ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a> |
| 911 | 916 | } |
| 912 | - @</div> | |
| 917 | + @ </div> | |
| 913 | 918 | if( pRe ){ |
| 914 | 919 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 915 | 920 | @ are shown.</b></p> |
| 916 | 921 | } |
| 917 | 922 | db_prepare(&q3, |
| @@ -935,10 +940,11 @@ | ||
| 935 | 940 | const char *zOldName = db_column_text(&q3, 4); |
| 936 | 941 | append_file_change_line(zUuid, zName, zOld, zNew, zOldName, |
| 937 | 942 | pCfg,mperm); |
| 938 | 943 | } |
| 939 | 944 | db_finalize(&q3); |
| 945 | + @ </div> | |
| 940 | 946 | append_diff_javascript(diffType); |
| 941 | 947 | style_finish_page(); |
| 942 | 948 | } |
| 943 | 949 | |
| 944 | 950 | /* |
| 945 | 951 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -680,11 +680,12 @@ | |
| 680 | zUser = zEUser ? zEUser : zOrigUser; |
| 681 | zComment = db_column_text(&q1, 3); |
| 682 | zDate = db_column_text(&q1,1); |
| 683 | zOrigDate = db_column_text(&q1, 4); |
| 684 | if( zOrigDate==0 ) zOrigDate = zDate; |
| 685 | @ <div class="section">Overview</div> |
| 686 | @ <table class="label-value"> |
| 687 | @ <tr><th>Comment:</th><td class="infoComment">\ |
| 688 | @ %!W(zEComment?zEComment:zComment)</td></tr> |
| 689 | |
| 690 | /* The Download: line */ |
| @@ -868,17 +869,21 @@ | |
| 868 | }else{ |
| 869 | style_header("Check-in Information"); |
| 870 | login_anonymous_available(); |
| 871 | } |
| 872 | db_finalize(&q1); |
| 873 | if( !PB("nowiki") ){ |
| 874 | wiki_render_associated("checkin", zUuid, 0); |
| 875 | } |
| 876 | render_backlink_graph(zUuid, "<div class=\"section\">References</div>\n"); |
| 877 | @ <div class="section">Context</div> |
| 878 | render_checkin_context(rid, 0, 0, 0); |
| 879 | @ <div class="section">Changes</div> |
| 880 | @ <div class="sectionmenu"> |
| 881 | pCfg = construct_diff_flags(diffType, &DCfg); |
| 882 | DCfg.pRe = pRe; |
| 883 | zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 884 | if( diffType!=0 ){ |
| @@ -907,11 +912,11 @@ | |
| 907 | @ Patch</a> |
| 908 | } |
| 909 | if( g.perm.Admin ){ |
| 910 | @ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a> |
| 911 | } |
| 912 | @</div> |
| 913 | if( pRe ){ |
| 914 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 915 | @ are shown.</b></p> |
| 916 | } |
| 917 | db_prepare(&q3, |
| @@ -935,10 +940,11 @@ | |
| 935 | const char *zOldName = db_column_text(&q3, 4); |
| 936 | append_file_change_line(zUuid, zName, zOld, zNew, zOldName, |
| 937 | pCfg,mperm); |
| 938 | } |
| 939 | db_finalize(&q3); |
| 940 | append_diff_javascript(diffType); |
| 941 | style_finish_page(); |
| 942 | } |
| 943 | |
| 944 | /* |
| 945 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -680,11 +680,12 @@ | |
| 680 | zUser = zEUser ? zEUser : zOrigUser; |
| 681 | zComment = db_column_text(&q1, 3); |
| 682 | zDate = db_column_text(&q1,1); |
| 683 | zOrigDate = db_column_text(&q1, 4); |
| 684 | if( zOrigDate==0 ) zOrigDate = zDate; |
| 685 | @ <div class="section accordion">Overview</div> |
| 686 | @ <div class="accordion_panel"> |
| 687 | @ <table class="label-value"> |
| 688 | @ <tr><th>Comment:</th><td class="infoComment">\ |
| 689 | @ %!W(zEComment?zEComment:zComment)</td></tr> |
| 690 | |
| 691 | /* The Download: line */ |
| @@ -868,17 +869,21 @@ | |
| 869 | }else{ |
| 870 | style_header("Check-in Information"); |
| 871 | login_anonymous_available(); |
| 872 | } |
| 873 | db_finalize(&q1); |
| 874 | @ </div> |
| 875 | builtin_request_js("accordion.js"); |
| 876 | if( !PB("nowiki") ){ |
| 877 | wiki_render_associated("checkin", zUuid, 0); |
| 878 | } |
| 879 | render_backlink_graph(zUuid, |
| 880 | "<div class=\"section accordion\">References</div>\n"); |
| 881 | @ <div class="section accordion">Context</div><div class="accordion_panel"> |
| 882 | render_checkin_context(rid, 0, 0, 0); |
| 883 | @ </div><div class="section accordion">Changes</div> |
| 884 | @ <div class="accordion_panel"> |
| 885 | @ <div class="sectionmenu"> |
| 886 | pCfg = construct_diff_flags(diffType, &DCfg); |
| 887 | DCfg.pRe = pRe; |
| 888 | zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 889 | if( diffType!=0 ){ |
| @@ -907,11 +912,11 @@ | |
| 912 | @ Patch</a> |
| 913 | } |
| 914 | if( g.perm.Admin ){ |
| 915 | @ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a> |
| 916 | } |
| 917 | @ </div> |
| 918 | if( pRe ){ |
| 919 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 920 | @ are shown.</b></p> |
| 921 | } |
| 922 | db_prepare(&q3, |
| @@ -935,10 +940,11 @@ | |
| 940 | const char *zOldName = db_column_text(&q3, 4); |
| 941 | append_file_change_line(zUuid, zName, zOld, zNew, zOldName, |
| 942 | pCfg,mperm); |
| 943 | } |
| 944 | db_finalize(&q3); |
| 945 | @ </div> |
| 946 | append_diff_javascript(diffType); |
| 947 | style_finish_page(); |
| 948 | } |
| 949 | |
| 950 | /* |
| 951 |
+7
-6
| --- src/login.c | ||
| +++ src/login.c | ||
| @@ -2127,16 +2127,17 @@ | ||
| 2127 | 2127 | ** |
| 2128 | 2128 | ** > fossil login-group |
| 2129 | 2129 | ** |
| 2130 | 2130 | ** Show the login-group to which the repository belongs. |
| 2131 | 2131 | ** |
| 2132 | -** > fossil login-group join ?--name NAME? | |
| 2132 | +** > fossil login-group join REPO ?--name NAME? | |
| 2133 | 2133 | ** |
| 2134 | 2134 | ** Add this repository to login group to which REPO belongs, or creates a |
| 2135 | 2135 | ** new login group between itself and REPO if REPO does not already belong |
| 2136 | 2136 | ** to a login-group. When creating a new login-group, the name of the new |
| 2137 | -** group is determined by the "--name" option. | |
| 2137 | +** group is determined by the "--name" option. REPO may optionally be | |
| 2138 | +** specified using the -R REPO flag. | |
| 2138 | 2139 | ** |
| 2139 | 2140 | ** > fossil login-group leave |
| 2140 | 2141 | ** |
| 2141 | 2142 | ** Takes the repository out of whatever login group it is currently |
| 2142 | 2143 | ** a part of. |
| @@ -2163,17 +2164,17 @@ | ||
| 2163 | 2164 | if( g.argc>2 ){ |
| 2164 | 2165 | zCmd = g.argv[2]; |
| 2165 | 2166 | nCmd = (int)strlen(zCmd); |
| 2166 | 2167 | if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){ |
| 2167 | 2168 | const char *zNewName = find_option("name",0,1); |
| 2168 | - const char *zOther; | |
| 2169 | + const char *zOther = g.zRepositoryOption | |
| 2170 | + ? g.zRepositoryOption : (g.argc>3 ? g.argv[3] : 0); | |
| 2169 | 2171 | char *zErr = 0; |
| 2170 | 2172 | verify_all_options(); |
| 2171 | - if( g.argc!=4 ){ | |
| 2172 | - fossil_fatal("unknown extra arguments to \"login-group join\""); | |
| 2173 | + if( g.zRepositoryOption ? g.argc!=3 : g.argc!=4 ){ | |
| 2174 | + fossil_fatal("unexpected argument count for \"login-group join\""); | |
| 2173 | 2175 | } |
| 2174 | - zOther = g.argv[3]; | |
| 2175 | 2176 | login_group_leave(&zErr); |
| 2176 | 2177 | sqlite3_free(zErr); |
| 2177 | 2178 | zErr = 0; |
| 2178 | 2179 | login_group_join(zOther,0,0,0,zNewName,&zErr); |
| 2179 | 2180 | if( zErr ){ |
| 2180 | 2181 |
| --- src/login.c | |
| +++ src/login.c | |
| @@ -2127,16 +2127,17 @@ | |
| 2127 | ** |
| 2128 | ** > fossil login-group |
| 2129 | ** |
| 2130 | ** Show the login-group to which the repository belongs. |
| 2131 | ** |
| 2132 | ** > fossil login-group join ?--name NAME? |
| 2133 | ** |
| 2134 | ** Add this repository to login group to which REPO belongs, or creates a |
| 2135 | ** new login group between itself and REPO if REPO does not already belong |
| 2136 | ** to a login-group. When creating a new login-group, the name of the new |
| 2137 | ** group is determined by the "--name" option. |
| 2138 | ** |
| 2139 | ** > fossil login-group leave |
| 2140 | ** |
| 2141 | ** Takes the repository out of whatever login group it is currently |
| 2142 | ** a part of. |
| @@ -2163,17 +2164,17 @@ | |
| 2163 | if( g.argc>2 ){ |
| 2164 | zCmd = g.argv[2]; |
| 2165 | nCmd = (int)strlen(zCmd); |
| 2166 | if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){ |
| 2167 | const char *zNewName = find_option("name",0,1); |
| 2168 | const char *zOther; |
| 2169 | char *zErr = 0; |
| 2170 | verify_all_options(); |
| 2171 | if( g.argc!=4 ){ |
| 2172 | fossil_fatal("unknown extra arguments to \"login-group join\""); |
| 2173 | } |
| 2174 | zOther = g.argv[3]; |
| 2175 | login_group_leave(&zErr); |
| 2176 | sqlite3_free(zErr); |
| 2177 | zErr = 0; |
| 2178 | login_group_join(zOther,0,0,0,zNewName,&zErr); |
| 2179 | if( zErr ){ |
| 2180 |
| --- src/login.c | |
| +++ src/login.c | |
| @@ -2127,16 +2127,17 @@ | |
| 2127 | ** |
| 2128 | ** > fossil login-group |
| 2129 | ** |
| 2130 | ** Show the login-group to which the repository belongs. |
| 2131 | ** |
| 2132 | ** > fossil login-group join REPO ?--name NAME? |
| 2133 | ** |
| 2134 | ** Add this repository to login group to which REPO belongs, or creates a |
| 2135 | ** new login group between itself and REPO if REPO does not already belong |
| 2136 | ** to a login-group. When creating a new login-group, the name of the new |
| 2137 | ** group is determined by the "--name" option. REPO may optionally be |
| 2138 | ** specified using the -R REPO flag. |
| 2139 | ** |
| 2140 | ** > fossil login-group leave |
| 2141 | ** |
| 2142 | ** Takes the repository out of whatever login group it is currently |
| 2143 | ** a part of. |
| @@ -2163,17 +2164,17 @@ | |
| 2164 | if( g.argc>2 ){ |
| 2165 | zCmd = g.argv[2]; |
| 2166 | nCmd = (int)strlen(zCmd); |
| 2167 | if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){ |
| 2168 | const char *zNewName = find_option("name",0,1); |
| 2169 | const char *zOther = g.zRepositoryOption |
| 2170 | ? g.zRepositoryOption : (g.argc>3 ? g.argv[3] : 0); |
| 2171 | char *zErr = 0; |
| 2172 | verify_all_options(); |
| 2173 | if( g.zRepositoryOption ? g.argc!=3 : g.argc!=4 ){ |
| 2174 | fossil_fatal("unexpected argument count for \"login-group join\""); |
| 2175 | } |
| 2176 | login_group_leave(&zErr); |
| 2177 | sqlite3_free(zErr); |
| 2178 | zErr = 0; |
| 2179 | login_group_join(zOther,0,0,0,zNewName,&zErr); |
| 2180 | if( zErr ){ |
| 2181 |
+3
| --- www/mkindex.tcl | ||
| +++ www/mkindex.tcl | ||
| @@ -167,10 +167,13 @@ | ||
| 167 | 167 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 168 | 168 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 169 | 169 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 170 | 170 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 171 | 171 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 172 | + <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a. | |
| 173 | + how deliverables are built</li></ul> | |
| 174 | +</li> | |
| 172 | 175 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 173 | 176 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 174 | 177 | </ul> |
| 175 | 178 | <h2 id="pindex">Other Documents:</h2> |
| 176 | 179 | <ul>} |
| 177 | 180 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -167,10 +167,13 @@ | |
| 167 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 168 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 169 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 170 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 171 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 172 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 173 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 174 | </ul> |
| 175 | <h2 id="pindex">Other Documents:</h2> |
| 176 | <ul>} |
| 177 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -167,10 +167,13 @@ | |
| 167 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 168 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 169 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 170 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 171 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 172 | <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a. |
| 173 | how deliverables are built</li></ul> |
| 174 | </li> |
| 175 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 176 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 177 | </ul> |
| 178 | <h2 id="pindex">Other Documents:</h2> |
| 179 | <ul>} |
| 180 |
| --- www/permutedindex.html | ||
| +++ www/permutedindex.html | ||
| @@ -13,10 +13,13 @@ | ||
| 13 | 13 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 14 | 14 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 15 | 15 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 16 | 16 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 17 | 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | + <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a. | |
| 19 | + how deliverables are built</li></ul> | |
| 20 | +</li> | |
| 18 | 21 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 19 | 22 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 20 | 23 | </ul> |
| 21 | 24 | <h2 id="pindex">Other Documents:</h2> |
| 22 | 25 | <ul> |
| 23 | 26 |
| --- www/permutedindex.html | |
| +++ www/permutedindex.html | |
| @@ -13,10 +13,13 @@ | |
| 13 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 14 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 15 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 16 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 19 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 20 | </ul> |
| 21 | <h2 id="pindex">Other Documents:</h2> |
| 22 | <ul> |
| 23 |
| --- www/permutedindex.html | |
| +++ www/permutedindex.html | |
| @@ -13,10 +13,13 @@ | |
| 13 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 14 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 15 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 16 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a. |
| 19 | how deliverables are built</li></ul> |
| 20 | </li> |
| 21 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 22 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 23 | </ul> |
| 24 | <h2 id="pindex">Other Documents:</h2> |
| 25 | <ul> |
| 26 |