Fossil SCM

Merge with trunk to get the latest web UI updates.

florian 2022-08-04 03:33 timeline-keyboard-navigation merge
Commit 0f9981971ea6eb4b8270c7caf3e5d07e8b3121e1a949d294a7ad08e3a7b04a42
+33 -9
--- src/alerts.c
+++ src/alerts.c
@@ -1748,15 +1748,10 @@
17481748
if( alert_webpages_disabled() ){
17491749
db_commit_transaction();
17501750
return;
17511751
}
17521752
login_check_credentials();
1753
- if( !g.perm.EmailAlert ){
1754
- db_commit_transaction();
1755
- login_needed(g.anon.EmailAlert);
1756
- /*NOTREACHED*/
1757
- }
17581753
isLogin = login_is_individual();
17591754
zName = P("name");
17601755
nName = zName ? (int)strlen(zName) : 0;
17611756
if( g.perm.Admin && P("sid")!=0 ){
17621757
sid = atoi(P("sid"));
@@ -1767,11 +1762,11 @@
17671762
" THEN subscriberId ELSE 0 END"
17681763
" FROM subscriber WHERE subscriberCode>=hextoblob(%Q)"
17691764
" LIMIT 1", zName, zName);
17701765
if( sid ) keepAlive = 1;
17711766
}
1772
- if( sid==0 && isLogin ){
1767
+ if( sid==0 && isLogin && g.perm.EmailAlert ){
17731768
sid = db_int(0, "SELECT subscriberId FROM subscriber"
17741769
" WHERE suname=%Q", g.zLogin);
17751770
}
17761771
if( sid==0 ){
17771772
db_commit_transaction();
@@ -2128,17 +2123,44 @@
21282123
int bSubmit;
21292124
const char *zEAddr;
21302125
char *zCode = 0;
21312126
int sid = 0;
21322127
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.
21342132
*/
21352133
if( zName
21362134
&& (sid = db_int(0, "SELECT subscriberId FROM subscriber"
21372135
" WHERE subscriberCode=hextoblob(%Q)", zName))!=0
21382136
){
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>&larr;</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>&larr;</b></big></td>
2156
+ @ <td>Make changes to your subscription preferences
2157
+ @ </td><tr>
2158
+ @ </table>
2159
+ @ </form>
2160
+ style_finish_page();
2161
+ }
21402162
return;
21412163
}
21422164
21432165
/* Logged in users are redirected to the /alerts page */
21442166
login_check_credentials();
@@ -2963,12 +2985,14 @@
29632985
Blob fhdr, fbody;
29642986
blob_init(&fhdr, 0, 0);
29652987
blob_appendf(&fhdr, "To: <%s>\r\n", zEmail);
29662988
blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr));
29672989
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",
29692991
zUrl, zCode);
2992
+ /* blob_appendf(&fbody, "Subscription settings: %s/alerts/%s\n",
2993
+ ** zUrl, zCode); */
29702994
alert_send(pSender,&fhdr,&fbody,p->zFromName);
29712995
nSent++;
29722996
blob_reset(&fhdr);
29732997
blob_reset(&fbody);
29742998
}else{
29752999
--- 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>&larr;</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>&larr;</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 @@
3434
*/
3535
void render_backlink_graph(const char *zUuid, const char *zLabel){
3636
Blob sql;
3737
Stmt q;
3838
char *zGlob;
39
+ int needEndPanel = 0;
3940
zGlob = mprintf("%.5s*", zUuid);
4041
db_multi_exec(
4142
"CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n"
4243
"DELETE FROM ok;\n"
4344
"INSERT OR IGNORE INTO ok(rid)\n"
@@ -49,19 +50,28 @@
4950
" WHERE target GLOB %Q"
5051
" AND %Q GLOB (target || '*');",
5152
zGlob, zUuid
5253
);
5354
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
+ }
5562
blob_zero(&sql);
5663
blob_append(&sql, timeline_query_for_www(), -1);
5764
blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC");
5865
db_prepare(&q, "%s", blob_sql_text(&sql));
5966
www_print_timeline(&q,
6067
TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS,
6168
0, 0, 0, 0, 0, 0);
6269
db_finalize(&q);
70
+ if( needEndPanel ){
71
+ cgi_printf("</div>\n");
72
+ }
6373
}
6474
6575
/*
6676
** WEBPAGE: test-backlink-timeline
6777
**
6878
--- 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 @@
680680
zUser = zEUser ? zEUser : zOrigUser;
681681
zComment = db_column_text(&q1, 3);
682682
zDate = db_column_text(&q1,1);
683683
zOrigDate = db_column_text(&q1, 4);
684684
if( zOrigDate==0 ) zOrigDate = zDate;
685
- @ <div class="section">Overview</div>
685
+ @ <div class="section accordion">Overview</div>
686
+ @ <div class="accordion_panel">
686687
@ <table class="label-value">
687688
@ <tr><th>Comment:</th><td class="infoComment">\
688689
@ %!W(zEComment?zEComment:zComment)</td></tr>
689690
690691
/* The Download: line */
@@ -868,17 +869,21 @@
868869
}else{
869870
style_header("Check-in Information");
870871
login_anonymous_available();
871872
}
872873
db_finalize(&q1);
874
+ @ </div>
875
+ builtin_request_js("accordion.js");
873876
if( !PB("nowiki") ){
874877
wiki_render_associated("checkin", zUuid, 0);
875878
}
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">
878882
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">
880885
@ <div class="sectionmenu">
881886
pCfg = construct_diff_flags(diffType, &DCfg);
882887
DCfg.pRe = pRe;
883888
zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
884889
if( diffType!=0 ){
@@ -907,11 +912,11 @@
907912
@ Patch</a>
908913
}
909914
if( g.perm.Admin ){
910915
@ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a>
911916
}
912
- @</div>
917
+ @ </div>
913918
if( pRe ){
914919
@ <p><b>Only differences that match regular expression "%h(zRe)"
915920
@ are shown.</b></p>
916921
}
917922
db_prepare(&q3,
@@ -935,10 +940,11 @@
935940
const char *zOldName = db_column_text(&q3, 4);
936941
append_file_change_line(zUuid, zName, zOld, zNew, zOldName,
937942
pCfg,mperm);
938943
}
939944
db_finalize(&q3);
945
+ @ </div>
940946
append_diff_javascript(diffType);
941947
style_finish_page();
942948
}
943949
944950
/*
945951
--- 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 @@
21272127
**
21282128
** > fossil login-group
21292129
**
21302130
** Show the login-group to which the repository belongs.
21312131
**
2132
-** > fossil login-group join ?--name NAME?
2132
+** > fossil login-group join REPO ?--name NAME?
21332133
**
21342134
** Add this repository to login group to which REPO belongs, or creates a
21352135
** new login group between itself and REPO if REPO does not already belong
21362136
** 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.
21382139
**
21392140
** > fossil login-group leave
21402141
**
21412142
** Takes the repository out of whatever login group it is currently
21422143
** a part of.
@@ -2163,17 +2164,17 @@
21632164
if( g.argc>2 ){
21642165
zCmd = g.argv[2];
21652166
nCmd = (int)strlen(zCmd);
21662167
if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){
21672168
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);
21692171
char *zErr = 0;
21702172
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\"");
21732175
}
2174
- zOther = g.argv[3];
21752176
login_group_leave(&zErr);
21762177
sqlite3_free(zErr);
21772178
zErr = 0;
21782179
login_group_join(zOther,0,0,0,zNewName,&zErr);
21792180
if( zErr ){
21802181
--- 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
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -167,10 +167,13 @@
167167
<li> <a href='history.md'>Purpose and History of Fossil</a>
168168
<li> <a href='build.wiki'>Compiling and installing Fossil</a>
169169
<li> <a href='../COPYRIGHT-BSD2.txt'>License</a>
170170
<li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a>
171171
<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>
172175
<li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a>
173176
<li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a>
174177
</ul>
175178
<h2 id="pindex">Other Documents:</h2>
176179
<ul>}
177180
--- 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 @@
1313
<li> <a href='history.md'>Purpose and History of Fossil</a>
1414
<li> <a href='build.wiki'>Compiling and installing Fossil</a>
1515
<li> <a href='../COPYRIGHT-BSD2.txt'>License</a>
1616
<li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a>
1717
<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>
1821
<li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a>
1922
<li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a>
2023
</ul>
2124
<h2 id="pindex">Other Documents:</h2>
2225
<ul>
2326
--- 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

Keyboard Shortcuts

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