Fossil SCM

Merge recent trunk enhancements.

drh 2016-08-16 16:25 unversioned-files merge
Commit f6d4a2bfe3b4838ba043fd48d27f5d043ac36afa
+4 -4
--- auto.def
+++ auto.def
@@ -88,17 +88,17 @@
8888
# the code below will append -ldl to LIBS.
8989
#
9090
foreach extralibs {{} {-ldl}} {
9191
9292
# Locate the system SQLite by searching for sqlite3_open(). Then check
93
- # if sqlite3_strlike() can be found as well. If we can find open() but
94
- # not strlike(), then the system SQLite is too old to link against
93
+ # if sqlite3_trace_v2() can be found as well. If we can find open() but
94
+ # not trace_v2(), then the system SQLite is too old to link against
9595
# fossil.
9696
#
9797
if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98
- if {![check-function-in-lib sqlite3_strlike sqlite3 $extralibs]} {
99
- user-error "system sqlite3 too old (require >= 3.10.0)"
98
+ if {![check-function-in-lib sqlite3_trace_v2 sqlite3 $extralibs]} {
99
+ user-error "system sqlite3 too old (require >= 3.14.0)"
100100
}
101101
102102
# Success. Update symbols and return.
103103
#
104104
define USE_SYSTEM_SQLITE 1
105105
--- auto.def
+++ auto.def
@@ -88,17 +88,17 @@
88 # the code below will append -ldl to LIBS.
89 #
90 foreach extralibs {{} {-ldl}} {
91
92 # Locate the system SQLite by searching for sqlite3_open(). Then check
93 # if sqlite3_strlike() can be found as well. If we can find open() but
94 # not strlike(), then the system SQLite is too old to link against
95 # fossil.
96 #
97 if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98 if {![check-function-in-lib sqlite3_strlike sqlite3 $extralibs]} {
99 user-error "system sqlite3 too old (require >= 3.10.0)"
100 }
101
102 # Success. Update symbols and return.
103 #
104 define USE_SYSTEM_SQLITE 1
105
--- auto.def
+++ auto.def
@@ -88,17 +88,17 @@
88 # the code below will append -ldl to LIBS.
89 #
90 foreach extralibs {{} {-ldl}} {
91
92 # Locate the system SQLite by searching for sqlite3_open(). Then check
93 # if sqlite3_trace_v2() can be found as well. If we can find open() but
94 # not trace_v2(), then the system SQLite is too old to link against
95 # fossil.
96 #
97 if {[check-function-in-lib sqlite3_open sqlite3 $extralibs]} {
98 if {![check-function-in-lib sqlite3_trace_v2 sqlite3 $extralibs]} {
99 user-error "system sqlite3 too old (require >= 3.14.0)"
100 }
101
102 # Success. Update symbols and return.
103 #
104 define USE_SYSTEM_SQLITE 1
105
--- src/attach.c
+++ src/attach.c
@@ -699,10 +699,16 @@
699699
** with the specified timestamp.
700700
** -t|--technote TECHNOTE-ID Specifies the technote to be
701701
** updated by its technote id.
702702
**
703703
** One of PAGENAME, DATETIME or TECHNOTE-ID must be specified.
704
+**
705
+** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
706
+** year-month-day form, it may be truncated, the "T" may be replaced by
707
+** a space, and it may also name a timezone offset from UTC as "-HH:MM"
708
+** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
709
+** means UTC.
704710
*/
705711
void attachment_cmd(void){
706712
int n;
707713
db_find_and_open_repository(0, 0);
708714
if( g.argc<3 ){
709715
--- src/attach.c
+++ src/attach.c
@@ -699,10 +699,16 @@
699 ** with the specified timestamp.
700 ** -t|--technote TECHNOTE-ID Specifies the technote to be
701 ** updated by its technote id.
702 **
703 ** One of PAGENAME, DATETIME or TECHNOTE-ID must be specified.
 
 
 
 
 
 
704 */
705 void attachment_cmd(void){
706 int n;
707 db_find_and_open_repository(0, 0);
708 if( g.argc<3 ){
709
--- src/attach.c
+++ src/attach.c
@@ -699,10 +699,16 @@
699 ** with the specified timestamp.
700 ** -t|--technote TECHNOTE-ID Specifies the technote to be
701 ** updated by its technote id.
702 **
703 ** One of PAGENAME, DATETIME or TECHNOTE-ID must be specified.
704 **
705 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
706 ** year-month-day form, it may be truncated, the "T" may be replaced by
707 ** a space, and it may also name a timezone offset from UTC as "-HH:MM"
708 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
709 ** means UTC.
710 */
711 void attachment_cmd(void){
712 int n;
713 db_find_and_open_repository(0, 0);
714 if( g.argc<3 ){
715
--- src/branch.c
+++ src/branch.c
@@ -257,10 +257,16 @@
257257
** --private branch is private (i.e., remains local)
258258
** --bgcolor COLOR use COLOR instead of automatic background
259259
** --nosign do not sign contents on this branch
260260
** --date-override DATE DATE to use instead of 'now'
261261
** --user-override USER USER to use instead of the current default
262
+**
263
+** DATE may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
264
+** year-month-day form, it may be truncated, the "T" may be
265
+** replaced by a space, and it may also name a timezone offset
266
+** from UTC as "-HH:MM" (westward) or "+HH:MM" (eastward).
267
+** Either no timezone suffix or "Z" means UTC.
262268
**
263269
** %fossil branch list ?-a|--all|-c|--closed?
264270
** %fossil branch ls ?-a|--all|-c|--closed?
265271
**
266272
** List all branches. Use -a or --all to list all branches and
267273
--- src/branch.c
+++ src/branch.c
@@ -257,10 +257,16 @@
257 ** --private branch is private (i.e., remains local)
258 ** --bgcolor COLOR use COLOR instead of automatic background
259 ** --nosign do not sign contents on this branch
260 ** --date-override DATE DATE to use instead of 'now'
261 ** --user-override USER USER to use instead of the current default
 
 
 
 
 
 
262 **
263 ** %fossil branch list ?-a|--all|-c|--closed?
264 ** %fossil branch ls ?-a|--all|-c|--closed?
265 **
266 ** List all branches. Use -a or --all to list all branches and
267
--- src/branch.c
+++ src/branch.c
@@ -257,10 +257,16 @@
257 ** --private branch is private (i.e., remains local)
258 ** --bgcolor COLOR use COLOR instead of automatic background
259 ** --nosign do not sign contents on this branch
260 ** --date-override DATE DATE to use instead of 'now'
261 ** --user-override USER USER to use instead of the current default
262 **
263 ** DATE may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
264 ** year-month-day form, it may be truncated, the "T" may be
265 ** replaced by a space, and it may also name a timezone offset
266 ** from UTC as "-HH:MM" (westward) or "+HH:MM" (eastward).
267 ** Either no timezone suffix or "Z" means UTC.
268 **
269 ** %fossil branch list ?-a|--all|-c|--closed?
270 ** %fossil branch ls ?-a|--all|-c|--closed?
271 **
272 ** List all branches. Use -a or --all to list all branches and
273
+1 -1
--- src/bundle.c
+++ src/bundle.c
@@ -313,11 +313,11 @@
313313
" VALUES('mtime',datetime('now'));"
314314
);
315315
db_multi_exec(
316316
"INSERT INTO bconfig(bcname,bcvalue)"
317317
" SELECT name, value FROM config"
318
- " WHERE name IN ('project-code');"
318
+ " WHERE name IN ('project-code','parent-project-code');"
319319
);
320320
321321
/* Directly copy content from the repository into the bundle as long
322322
** as the repository content is a delta from some other artifact that
323323
** is also in the bundle.
324324
--- src/bundle.c
+++ src/bundle.c
@@ -313,11 +313,11 @@
313 " VALUES('mtime',datetime('now'));"
314 );
315 db_multi_exec(
316 "INSERT INTO bconfig(bcname,bcvalue)"
317 " SELECT name, value FROM config"
318 " WHERE name IN ('project-code');"
319 );
320
321 /* Directly copy content from the repository into the bundle as long
322 ** as the repository content is a delta from some other artifact that
323 ** is also in the bundle.
324
--- src/bundle.c
+++ src/bundle.c
@@ -313,11 +313,11 @@
313 " VALUES('mtime',datetime('now'));"
314 );
315 db_multi_exec(
316 "INSERT INTO bconfig(bcname,bcvalue)"
317 " SELECT name, value FROM config"
318 " WHERE name IN ('project-code','parent-project-code');"
319 );
320
321 /* Directly copy content from the repository into the bundle as long
322 ** as the repository content is a delta from some other artifact that
323 ** is also in the bundle.
324
+12 -6
--- src/checkin.c
+++ src/checkin.c
@@ -546,11 +546,11 @@
546546
}
547547
}
548548
549549
/*
550550
** COMMAND: extras
551
-**
551
+**
552552
** Usage: %fossil extras ?OPTIONS? ?PATH1 ...?
553553
**
554554
** Print a list of all files in the source tree that are not part of the
555555
** current checkout. See also the "clean" command. If paths are specified,
556556
** only files in the given directories will be listed.
@@ -632,11 +632,11 @@
632632
db_finalize(&q);
633633
}
634634
635635
/*
636636
** COMMAND: clean
637
-**
637
+**
638638
** Usage: %fossil clean ?OPTIONS? ?PATH ...?
639639
**
640640
** Delete all "extra" files in the source tree. "Extra" files are files
641641
** that are not officially part of the checkout. If one or more PATH
642642
** arguments appear, then only the files named, or files contained with
@@ -645,21 +645,21 @@
645645
** If the --prompt option is used, prompts are issued to confirm the
646646
** permanent removal of each file. Otherwise, files are backed up to the
647647
** undo buffer prior to removal, and prompts are issued only for files
648648
** whose removal cannot be undone due to their large size or due to
649649
** --disable-undo being used.
650
-**
650
+**
651651
** The --force option treats all prompts as having been answered yes,
652652
** whereas --no-prompt treats them as having been answered no.
653
-**
653
+**
654654
** Files matching any glob pattern specified by the --clean option are
655655
** deleted without prompting, and the removal cannot be undone.
656656
**
657657
** No file that matches glob patterns specified by --ignore or --keep will
658658
** ever be deleted. Files and subdirectories whose names begin with "."
659659
** are automatically ignored unless the --dotfiles option is used.
660
-**
660
+**
661661
** The default values for --clean, --ignore, and --keep are determined by
662662
** the (versionable) clean-glob, ignore-glob, and keep-glob settings.
663663
**
664664
** The --verily option ignores the keep-glob and ignore-glob settings and
665665
** turns on --force, --emptydirs, --dotfiles, and --disable-undo. Use the
@@ -1689,12 +1689,18 @@
16891689
** --nosign do not attempt to sign this commit with gpg
16901690
** --private do not sync changes and their descendants
16911691
** --sha1sum verify file status using SHA1 hashing rather
16921692
** than relying on file mtimes
16931693
** --tag TAG-NAME assign given tag TAG-NAME to the check-in
1694
-** --date-override DATE DATE to use instead of 'now'
1694
+** --date-override DATETIME DATE to use instead of 'now'
16951695
** --user-override USER USER to use instead of the current default
1696
+**
1697
+** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
1698
+** year-month-day form, it may be truncated, the "T" may be replaced by
1699
+** a space, and it may also name a timezone offset from UTC as "-HH:MM"
1700
+** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
1701
+** means UTC.
16961702
**
16971703
** See also: branch, changes, checkout, extras, sync
16981704
*/
16991705
void commit_cmd(void){
17001706
int hasChanges; /* True if unsaved changes exist */
17011707
--- src/checkin.c
+++ src/checkin.c
@@ -546,11 +546,11 @@
546 }
547 }
548
549 /*
550 ** COMMAND: extras
551 **
552 ** Usage: %fossil extras ?OPTIONS? ?PATH1 ...?
553 **
554 ** Print a list of all files in the source tree that are not part of the
555 ** current checkout. See also the "clean" command. If paths are specified,
556 ** only files in the given directories will be listed.
@@ -632,11 +632,11 @@
632 db_finalize(&q);
633 }
634
635 /*
636 ** COMMAND: clean
637 **
638 ** Usage: %fossil clean ?OPTIONS? ?PATH ...?
639 **
640 ** Delete all "extra" files in the source tree. "Extra" files are files
641 ** that are not officially part of the checkout. If one or more PATH
642 ** arguments appear, then only the files named, or files contained with
@@ -645,21 +645,21 @@
645 ** If the --prompt option is used, prompts are issued to confirm the
646 ** permanent removal of each file. Otherwise, files are backed up to the
647 ** undo buffer prior to removal, and prompts are issued only for files
648 ** whose removal cannot be undone due to their large size or due to
649 ** --disable-undo being used.
650 **
651 ** The --force option treats all prompts as having been answered yes,
652 ** whereas --no-prompt treats them as having been answered no.
653 **
654 ** Files matching any glob pattern specified by the --clean option are
655 ** deleted without prompting, and the removal cannot be undone.
656 **
657 ** No file that matches glob patterns specified by --ignore or --keep will
658 ** ever be deleted. Files and subdirectories whose names begin with "."
659 ** are automatically ignored unless the --dotfiles option is used.
660 **
661 ** The default values for --clean, --ignore, and --keep are determined by
662 ** the (versionable) clean-glob, ignore-glob, and keep-glob settings.
663 **
664 ** The --verily option ignores the keep-glob and ignore-glob settings and
665 ** turns on --force, --emptydirs, --dotfiles, and --disable-undo. Use the
@@ -1689,12 +1689,18 @@
1689 ** --nosign do not attempt to sign this commit with gpg
1690 ** --private do not sync changes and their descendants
1691 ** --sha1sum verify file status using SHA1 hashing rather
1692 ** than relying on file mtimes
1693 ** --tag TAG-NAME assign given tag TAG-NAME to the check-in
1694 ** --date-override DATE DATE to use instead of 'now'
1695 ** --user-override USER USER to use instead of the current default
 
 
 
 
 
 
1696 **
1697 ** See also: branch, changes, checkout, extras, sync
1698 */
1699 void commit_cmd(void){
1700 int hasChanges; /* True if unsaved changes exist */
1701
--- src/checkin.c
+++ src/checkin.c
@@ -546,11 +546,11 @@
546 }
547 }
548
549 /*
550 ** COMMAND: extras
551 **
552 ** Usage: %fossil extras ?OPTIONS? ?PATH1 ...?
553 **
554 ** Print a list of all files in the source tree that are not part of the
555 ** current checkout. See also the "clean" command. If paths are specified,
556 ** only files in the given directories will be listed.
@@ -632,11 +632,11 @@
632 db_finalize(&q);
633 }
634
635 /*
636 ** COMMAND: clean
637 **
638 ** Usage: %fossil clean ?OPTIONS? ?PATH ...?
639 **
640 ** Delete all "extra" files in the source tree. "Extra" files are files
641 ** that are not officially part of the checkout. If one or more PATH
642 ** arguments appear, then only the files named, or files contained with
@@ -645,21 +645,21 @@
645 ** If the --prompt option is used, prompts are issued to confirm the
646 ** permanent removal of each file. Otherwise, files are backed up to the
647 ** undo buffer prior to removal, and prompts are issued only for files
648 ** whose removal cannot be undone due to their large size or due to
649 ** --disable-undo being used.
650 **
651 ** The --force option treats all prompts as having been answered yes,
652 ** whereas --no-prompt treats them as having been answered no.
653 **
654 ** Files matching any glob pattern specified by the --clean option are
655 ** deleted without prompting, and the removal cannot be undone.
656 **
657 ** No file that matches glob patterns specified by --ignore or --keep will
658 ** ever be deleted. Files and subdirectories whose names begin with "."
659 ** are automatically ignored unless the --dotfiles option is used.
660 **
661 ** The default values for --clean, --ignore, and --keep are determined by
662 ** the (versionable) clean-glob, ignore-glob, and keep-glob settings.
663 **
664 ** The --verily option ignores the keep-glob and ignore-glob settings and
665 ** turns on --force, --emptydirs, --dotfiles, and --disable-undo. Use the
@@ -1689,12 +1689,18 @@
1689 ** --nosign do not attempt to sign this commit with gpg
1690 ** --private do not sync changes and their descendants
1691 ** --sha1sum verify file status using SHA1 hashing rather
1692 ** than relying on file mtimes
1693 ** --tag TAG-NAME assign given tag TAG-NAME to the check-in
1694 ** --date-override DATETIME DATE to use instead of 'now'
1695 ** --user-override USER USER to use instead of the current default
1696 **
1697 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
1698 ** year-month-day form, it may be truncated, the "T" may be replaced by
1699 ** a space, and it may also name a timezone offset from UTC as "-HH:MM"
1700 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
1701 ** means UTC.
1702 **
1703 ** See also: branch, changes, checkout, extras, sync
1704 */
1705 void commit_cmd(void){
1706 int hasChanges; /* True if unsaved changes exist */
1707
+1 -1
--- src/clone.c
+++ src/clone.c
@@ -99,11 +99,11 @@
9999
** [file://]path/to/repo.fossil
100100
**
101101
** Note 1: For ssh and filesystem, path must have an extra leading
102102
** '/' to use an absolute path.
103103
**
104
-** Note 2: Use %HH escapes for special characters in the userid and
104
+** Note 2: Use %HH escapes for special characters in the userid and
105105
** password. For example "%40" in place of "@", "%2f" in place
106106
** of "/", and "%3a" in place of ":".
107107
**
108108
** By default, your current login name is used to create the default
109109
** admin user. This can be overridden using the -A|--admin-user
110110
--- src/clone.c
+++ src/clone.c
@@ -99,11 +99,11 @@
99 ** [file://]path/to/repo.fossil
100 **
101 ** Note 1: For ssh and filesystem, path must have an extra leading
102 ** '/' to use an absolute path.
103 **
104 ** Note 2: Use %HH escapes for special characters in the userid and
105 ** password. For example "%40" in place of "@", "%2f" in place
106 ** of "/", and "%3a" in place of ":".
107 **
108 ** By default, your current login name is used to create the default
109 ** admin user. This can be overridden using the -A|--admin-user
110
--- src/clone.c
+++ src/clone.c
@@ -99,11 +99,11 @@
99 ** [file://]path/to/repo.fossil
100 **
101 ** Note 1: For ssh and filesystem, path must have an extra leading
102 ** '/' to use an absolute path.
103 **
104 ** Note 2: Use %HH escapes for special characters in the userid and
105 ** password. For example "%40" in place of "@", "%2f" in place
106 ** of "/", and "%3a" in place of ":".
107 **
108 ** By default, your current login name is used to create the default
109 ** admin user. This can be overridden using the -A|--admin-user
110
+1 -1
--- src/content.c
+++ src/content.c
@@ -1170,11 +1170,11 @@
11701170
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
11711171
db_begin_transaction();
11721172
db_prepare(&q, "SELECT rid FROM delta WHERE srcid=:rid");
11731173
for(i=2; i<g.argc; i++){
11741174
int rid = atoi(g.argv[i]);
1175
- fossil_print("Erasing artifact %d (%s)\n",
1175
+ fossil_print("Erasing artifact %d (%s)\n",
11761176
rid, db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid));
11771177
db_bind_int(&q, ":rid", rid);
11781178
while( db_step(&q)==SQLITE_ROW ){
11791179
content_undelta(db_column_int(&q,0));
11801180
}
11811181
--- src/content.c
+++ src/content.c
@@ -1170,11 +1170,11 @@
1170 db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
1171 db_begin_transaction();
1172 db_prepare(&q, "SELECT rid FROM delta WHERE srcid=:rid");
1173 for(i=2; i<g.argc; i++){
1174 int rid = atoi(g.argv[i]);
1175 fossil_print("Erasing artifact %d (%s)\n",
1176 rid, db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid));
1177 db_bind_int(&q, ":rid", rid);
1178 while( db_step(&q)==SQLITE_ROW ){
1179 content_undelta(db_column_int(&q,0));
1180 }
1181
--- src/content.c
+++ src/content.c
@@ -1170,11 +1170,11 @@
1170 db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
1171 db_begin_transaction();
1172 db_prepare(&q, "SELECT rid FROM delta WHERE srcid=:rid");
1173 for(i=2; i<g.argc; i++){
1174 int rid = atoi(g.argv[i]);
1175 fossil_print("Erasing artifact %d (%s)\n",
1176 rid, db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid));
1177 db_bind_int(&q, ":rid", rid);
1178 while( db_step(&q)==SQLITE_ROW ){
1179 content_undelta(db_column_int(&q,0));
1180 }
1181
+1 -1
--- src/content.c
+++ src/content.c
@@ -1170,11 +1170,11 @@
11701170
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
11711171
db_begin_transaction();
11721172
db_prepare(&q, "SELECT rid FROM delta WHERE srcid=:rid");
11731173
for(i=2; i<g.argc; i++){
11741174
int rid = atoi(g.argv[i]);
1175
- fossil_print("Erasing artifact %d (%s)\n",
1175
+ fossil_print("Erasing artifact %d (%s)\n",
11761176
rid, db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid));
11771177
db_bind_int(&q, ":rid", rid);
11781178
while( db_step(&q)==SQLITE_ROW ){
11791179
content_undelta(db_column_int(&q,0));
11801180
}
11811181
--- src/content.c
+++ src/content.c
@@ -1170,11 +1170,11 @@
1170 db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
1171 db_begin_transaction();
1172 db_prepare(&q, "SELECT rid FROM delta WHERE srcid=:rid");
1173 for(i=2; i<g.argc; i++){
1174 int rid = atoi(g.argv[i]);
1175 fossil_print("Erasing artifact %d (%s)\n",
1176 rid, db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid));
1177 db_bind_int(&q, ":rid", rid);
1178 while( db_step(&q)==SQLITE_ROW ){
1179 content_undelta(db_column_int(&q,0));
1180 }
1181
--- src/content.c
+++ src/content.c
@@ -1170,11 +1170,11 @@
1170 db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
1171 db_begin_transaction();
1172 db_prepare(&q, "SELECT rid FROM delta WHERE srcid=:rid");
1173 for(i=2; i<g.argc; i++){
1174 int rid = atoi(g.argv[i]);
1175 fossil_print("Erasing artifact %d (%s)\n",
1176 rid, db_text("", "SELECT uuid FROM blob WHERE rid=%d", rid));
1177 db_bind_int(&q, ":rid", rid);
1178 while( db_step(&q)==SQLITE_ROW ){
1179 content_undelta(db_column_int(&q,0));
1180 }
1181
+8 -2
--- src/db.c
+++ src/db.c
@@ -1750,10 +1750,16 @@
17501750
**
17511751
** Options:
17521752
** --template FILE copy settings from repository file
17531753
** --admin-user|-A USERNAME select given USERNAME as admin user
17541754
** --date-override DATETIME use DATETIME as time of the initial check-in
1755
+**
1756
+** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
1757
+** year-month-day form, it may be truncated, the "T" may be replaced by
1758
+** a space, and it may also name a timezone offset from UTC as "-HH:MM"
1759
+** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
1760
+** means UTC.
17551761
**
17561762
** See also: clone
17571763
*/
17581764
void create_repository_cmd(void){
17591765
char *zPassword;
@@ -2977,11 +2983,11 @@
29772983
return sqlite3_mprintf("%.1f years", rSpan);
29782984
}
29792985
29802986
/*
29812987
** COMMAND: test-timespan
2982
-**
2988
+**
29832989
** Usage: %fossil test-timespan TIMESTAMP
29842990
**
29852991
** Print the approximate span of time from now to TIMESTAMP.
29862992
*/
29872993
void test_timespan_cmd(void){
@@ -2994,11 +3000,11 @@
29943000
g.db = 0;
29953001
}
29963002
29973003
/*
29983004
** COMMAND: test-without-rowid
2999
-**
3005
+**
30003006
** Usage: %fossil test-without-rowid FILENAME...
30013007
**
30023008
** Change the Fossil repository FILENAME to make use of the WITHOUT ROWID
30033009
** optimization. FILENAME can also be the ~/.fossil file or a local
30043010
** .fslckout or _FOSSIL_ file.
30053011
--- src/db.c
+++ src/db.c
@@ -1750,10 +1750,16 @@
1750 **
1751 ** Options:
1752 ** --template FILE copy settings from repository file
1753 ** --admin-user|-A USERNAME select given USERNAME as admin user
1754 ** --date-override DATETIME use DATETIME as time of the initial check-in
 
 
 
 
 
 
1755 **
1756 ** See also: clone
1757 */
1758 void create_repository_cmd(void){
1759 char *zPassword;
@@ -2977,11 +2983,11 @@
2977 return sqlite3_mprintf("%.1f years", rSpan);
2978 }
2979
2980 /*
2981 ** COMMAND: test-timespan
2982 **
2983 ** Usage: %fossil test-timespan TIMESTAMP
2984 **
2985 ** Print the approximate span of time from now to TIMESTAMP.
2986 */
2987 void test_timespan_cmd(void){
@@ -2994,11 +3000,11 @@
2994 g.db = 0;
2995 }
2996
2997 /*
2998 ** COMMAND: test-without-rowid
2999 **
3000 ** Usage: %fossil test-without-rowid FILENAME...
3001 **
3002 ** Change the Fossil repository FILENAME to make use of the WITHOUT ROWID
3003 ** optimization. FILENAME can also be the ~/.fossil file or a local
3004 ** .fslckout or _FOSSIL_ file.
3005
--- src/db.c
+++ src/db.c
@@ -1750,10 +1750,16 @@
1750 **
1751 ** Options:
1752 ** --template FILE copy settings from repository file
1753 ** --admin-user|-A USERNAME select given USERNAME as admin user
1754 ** --date-override DATETIME use DATETIME as time of the initial check-in
1755 **
1756 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
1757 ** year-month-day form, it may be truncated, the "T" may be replaced by
1758 ** a space, and it may also name a timezone offset from UTC as "-HH:MM"
1759 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
1760 ** means UTC.
1761 **
1762 ** See also: clone
1763 */
1764 void create_repository_cmd(void){
1765 char *zPassword;
@@ -2977,11 +2983,11 @@
2983 return sqlite3_mprintf("%.1f years", rSpan);
2984 }
2985
2986 /*
2987 ** COMMAND: test-timespan
2988 **
2989 ** Usage: %fossil test-timespan TIMESTAMP
2990 **
2991 ** Print the approximate span of time from now to TIMESTAMP.
2992 */
2993 void test_timespan_cmd(void){
@@ -2994,11 +3000,11 @@
3000 g.db = 0;
3001 }
3002
3003 /*
3004 ** COMMAND: test-without-rowid
3005 **
3006 ** Usage: %fossil test-without-rowid FILENAME...
3007 **
3008 ** Change the Fossil repository FILENAME to make use of the WITHOUT ROWID
3009 ** optimization. FILENAME can also be the ~/.fossil file or a local
3010 ** .fslckout or _FOSSIL_ file.
3011
+1 -1
--- src/delta.c
+++ src/delta.c
@@ -245,11 +245,11 @@
245245
#elif defined(_MSC_VER) && _MSC_VER>=1300
246246
while( z<zEnd ){
247247
sum += _byteswap_ulong(*(unsigned*)z);
248248
z += 4;
249249
}
250
-#else
250
+#else
251251
unsigned sum0 = 0;
252252
unsigned sum1 = 0;
253253
unsigned sum2 = 0;
254254
while(N >= 16){
255255
sum0 += ((unsigned)z[0] + z[4] + z[8] + z[12]);
256256
--- src/delta.c
+++ src/delta.c
@@ -245,11 +245,11 @@
245 #elif defined(_MSC_VER) && _MSC_VER>=1300
246 while( z<zEnd ){
247 sum += _byteswap_ulong(*(unsigned*)z);
248 z += 4;
249 }
250 #else
251 unsigned sum0 = 0;
252 unsigned sum1 = 0;
253 unsigned sum2 = 0;
254 while(N >= 16){
255 sum0 += ((unsigned)z[0] + z[4] + z[8] + z[12]);
256
--- src/delta.c
+++ src/delta.c
@@ -245,11 +245,11 @@
245 #elif defined(_MSC_VER) && _MSC_VER>=1300
246 while( z<zEnd ){
247 sum += _byteswap_ulong(*(unsigned*)z);
248 z += 4;
249 }
250 #else
251 unsigned sum0 = 0;
252 unsigned sum1 = 0;
253 unsigned sum2 = 0;
254 while(N >= 16){
255 sum0 += ((unsigned)z[0] + z[4] + z[8] + z[12]);
256
--- src/descendants.c
+++ src/descendants.c
@@ -196,11 +196,11 @@
196196
"WITH RECURSIVE g(x,i) AS ("
197197
" VALUES(%d,1)"
198198
" UNION ALL"
199199
" SELECT plink.pid, g.i+1 FROM plink, g"
200200
" WHERE plink.cid=g.x AND plink.isprim)"
201
- "INSERT INTO ancestor(rid,generation) SELECT x,i FROM g;",
201
+ "INSERT INTO ancestor(rid,generation) SELECT x,i FROM g;",
202202
rid
203203
);
204204
}
205205
206206
/*
207207
--- src/descendants.c
+++ src/descendants.c
@@ -196,11 +196,11 @@
196 "WITH RECURSIVE g(x,i) AS ("
197 " VALUES(%d,1)"
198 " UNION ALL"
199 " SELECT plink.pid, g.i+1 FROM plink, g"
200 " WHERE plink.cid=g.x AND plink.isprim)"
201 "INSERT INTO ancestor(rid,generation) SELECT x,i FROM g;",
202 rid
203 );
204 }
205
206 /*
207
--- src/descendants.c
+++ src/descendants.c
@@ -196,11 +196,11 @@
196 "WITH RECURSIVE g(x,i) AS ("
197 " VALUES(%d,1)"
198 " UNION ALL"
199 " SELECT plink.pid, g.i+1 FROM plink, g"
200 " WHERE plink.cid=g.x AND plink.isprim)"
201 "INSERT INTO ancestor(rid,generation) SELECT x,i FROM g;",
202 rid
203 );
204 }
205
206 /*
207
+8 -3
--- src/doc.c
+++ src/doc.c
@@ -506,11 +506,11 @@
506506
static void convert_href_and_output(Blob *pIn){
507507
int i, base;
508508
int n = blob_size(pIn);
509509
char *z = blob_buffer(pIn);
510510
for(base=0, i=7; i<n; i++){
511
- if( z[i]=='$'
511
+ if( z[i]=='$'
512512
&& strncmp(&z[i],"$ROOT/", 6)==0
513513
&& (z[i-1]=='\'' || z[i-1]=='"')
514514
&& i-base>=9
515515
&& (fossil_strnicmp(&z[i-7]," href=", 6)==0 ||
516516
fossil_strnicmp(&z[i-9]," action=", 8)==0)
@@ -705,13 +705,18 @@
705705
convert_href_and_output(&filebody);
706706
style_footer();
707707
#ifdef FOSSIL_ENABLE_TH1_DOCS
708708
}else if( Th_AreDocsEnabled() &&
709709
fossil_strcmp(zMime, "application/x-th1")==0 ){
710
- style_header("%h", zName);
710
+ int raw = P("raw")!=0;
711
+ if( !raw ){
712
+ style_header("%h", zName);
713
+ }
711714
Th_Render(blob_str(&filebody));
712
- style_footer();
715
+ if( !raw ){
716
+ style_footer();
717
+ }
713718
#endif
714719
}else{
715720
cgi_set_content_type(zMime);
716721
cgi_set_content(&filebody);
717722
}
718723
--- src/doc.c
+++ src/doc.c
@@ -506,11 +506,11 @@
506 static void convert_href_and_output(Blob *pIn){
507 int i, base;
508 int n = blob_size(pIn);
509 char *z = blob_buffer(pIn);
510 for(base=0, i=7; i<n; i++){
511 if( z[i]=='$'
512 && strncmp(&z[i],"$ROOT/", 6)==0
513 && (z[i-1]=='\'' || z[i-1]=='"')
514 && i-base>=9
515 && (fossil_strnicmp(&z[i-7]," href=", 6)==0 ||
516 fossil_strnicmp(&z[i-9]," action=", 8)==0)
@@ -705,13 +705,18 @@
705 convert_href_and_output(&filebody);
706 style_footer();
707 #ifdef FOSSIL_ENABLE_TH1_DOCS
708 }else if( Th_AreDocsEnabled() &&
709 fossil_strcmp(zMime, "application/x-th1")==0 ){
710 style_header("%h", zName);
 
 
 
711 Th_Render(blob_str(&filebody));
712 style_footer();
 
 
713 #endif
714 }else{
715 cgi_set_content_type(zMime);
716 cgi_set_content(&filebody);
717 }
718
--- src/doc.c
+++ src/doc.c
@@ -506,11 +506,11 @@
506 static void convert_href_and_output(Blob *pIn){
507 int i, base;
508 int n = blob_size(pIn);
509 char *z = blob_buffer(pIn);
510 for(base=0, i=7; i<n; i++){
511 if( z[i]=='$'
512 && strncmp(&z[i],"$ROOT/", 6)==0
513 && (z[i-1]=='\'' || z[i-1]=='"')
514 && i-base>=9
515 && (fossil_strnicmp(&z[i-7]," href=", 6)==0 ||
516 fossil_strnicmp(&z[i-9]," action=", 8)==0)
@@ -705,13 +705,18 @@
705 convert_href_and_output(&filebody);
706 style_footer();
707 #ifdef FOSSIL_ENABLE_TH1_DOCS
708 }else if( Th_AreDocsEnabled() &&
709 fossil_strcmp(zMime, "application/x-th1")==0 ){
710 int raw = P("raw")!=0;
711 if( !raw ){
712 style_header("%h", zName);
713 }
714 Th_Render(blob_str(&filebody));
715 if( !raw ){
716 style_footer();
717 }
718 #endif
719 }else{
720 cgi_set_content_type(zMime);
721 cgi_set_content(&filebody);
722 }
723
+8 -3
--- src/doc.c
+++ src/doc.c
@@ -506,11 +506,11 @@
506506
static void convert_href_and_output(Blob *pIn){
507507
int i, base;
508508
int n = blob_size(pIn);
509509
char *z = blob_buffer(pIn);
510510
for(base=0, i=7; i<n; i++){
511
- if( z[i]=='$'
511
+ if( z[i]=='$'
512512
&& strncmp(&z[i],"$ROOT/", 6)==0
513513
&& (z[i-1]=='\'' || z[i-1]=='"')
514514
&& i-base>=9
515515
&& (fossil_strnicmp(&z[i-7]," href=", 6)==0 ||
516516
fossil_strnicmp(&z[i-9]," action=", 8)==0)
@@ -705,13 +705,18 @@
705705
convert_href_and_output(&filebody);
706706
style_footer();
707707
#ifdef FOSSIL_ENABLE_TH1_DOCS
708708
}else if( Th_AreDocsEnabled() &&
709709
fossil_strcmp(zMime, "application/x-th1")==0 ){
710
- style_header("%h", zName);
710
+ int raw = P("raw")!=0;
711
+ if( !raw ){
712
+ style_header("%h", zName);
713
+ }
711714
Th_Render(blob_str(&filebody));
712
- style_footer();
715
+ if( !raw ){
716
+ style_footer();
717
+ }
713718
#endif
714719
}else{
715720
cgi_set_content_type(zMime);
716721
cgi_set_content(&filebody);
717722
}
718723
--- src/doc.c
+++ src/doc.c
@@ -506,11 +506,11 @@
506 static void convert_href_and_output(Blob *pIn){
507 int i, base;
508 int n = blob_size(pIn);
509 char *z = blob_buffer(pIn);
510 for(base=0, i=7; i<n; i++){
511 if( z[i]=='$'
512 && strncmp(&z[i],"$ROOT/", 6)==0
513 && (z[i-1]=='\'' || z[i-1]=='"')
514 && i-base>=9
515 && (fossil_strnicmp(&z[i-7]," href=", 6)==0 ||
516 fossil_strnicmp(&z[i-9]," action=", 8)==0)
@@ -705,13 +705,18 @@
705 convert_href_and_output(&filebody);
706 style_footer();
707 #ifdef FOSSIL_ENABLE_TH1_DOCS
708 }else if( Th_AreDocsEnabled() &&
709 fossil_strcmp(zMime, "application/x-th1")==0 ){
710 style_header("%h", zName);
 
 
 
711 Th_Render(blob_str(&filebody));
712 style_footer();
 
 
713 #endif
714 }else{
715 cgi_set_content_type(zMime);
716 cgi_set_content(&filebody);
717 }
718
--- src/doc.c
+++ src/doc.c
@@ -506,11 +506,11 @@
506 static void convert_href_and_output(Blob *pIn){
507 int i, base;
508 int n = blob_size(pIn);
509 char *z = blob_buffer(pIn);
510 for(base=0, i=7; i<n; i++){
511 if( z[i]=='$'
512 && strncmp(&z[i],"$ROOT/", 6)==0
513 && (z[i-1]=='\'' || z[i-1]=='"')
514 && i-base>=9
515 && (fossil_strnicmp(&z[i-7]," href=", 6)==0 ||
516 fossil_strnicmp(&z[i-9]," action=", 8)==0)
@@ -705,13 +705,18 @@
705 convert_href_and_output(&filebody);
706 style_footer();
707 #ifdef FOSSIL_ENABLE_TH1_DOCS
708 }else if( Th_AreDocsEnabled() &&
709 fossil_strcmp(zMime, "application/x-th1")==0 ){
710 int raw = P("raw")!=0;
711 if( !raw ){
712 style_header("%h", zName);
713 }
714 Th_Render(blob_str(&filebody));
715 if( !raw ){
716 style_footer();
717 }
718 #endif
719 }else{
720 cgi_set_content_type(zMime);
721 cgi_set_content(&filebody);
722 }
723
+2 -2
--- src/encode.c
+++ src/encode.c
@@ -367,11 +367,11 @@
367367
return z64;
368368
}
369369
370370
/*
371371
** COMMAND: test-encode64
372
-**
372
+**
373373
** Usage: %fossil test-encode64 STRING
374374
*/
375375
void test_encode64_cmd(void){
376376
char *z;
377377
int i;
@@ -433,11 +433,11 @@
433433
return zData;
434434
}
435435
436436
/*
437437
** COMMAND: test-decode64
438
-**
438
+**
439439
** Usage: %fossil test-decode64 STRING
440440
*/
441441
void test_decode64_cmd(void){
442442
char *z;
443443
int i, n;
444444
--- src/encode.c
+++ src/encode.c
@@ -367,11 +367,11 @@
367 return z64;
368 }
369
370 /*
371 ** COMMAND: test-encode64
372 **
373 ** Usage: %fossil test-encode64 STRING
374 */
375 void test_encode64_cmd(void){
376 char *z;
377 int i;
@@ -433,11 +433,11 @@
433 return zData;
434 }
435
436 /*
437 ** COMMAND: test-decode64
438 **
439 ** Usage: %fossil test-decode64 STRING
440 */
441 void test_decode64_cmd(void){
442 char *z;
443 int i, n;
444
--- src/encode.c
+++ src/encode.c
@@ -367,11 +367,11 @@
367 return z64;
368 }
369
370 /*
371 ** COMMAND: test-encode64
372 **
373 ** Usage: %fossil test-encode64 STRING
374 */
375 void test_encode64_cmd(void){
376 char *z;
377 int i;
@@ -433,11 +433,11 @@
433 return zData;
434 }
435
436 /*
437 ** COMMAND: test-decode64
438 **
439 ** Usage: %fossil test-decode64 STRING
440 */
441 void test_decode64_cmd(void){
442 char *z;
443 int i, n;
444
+4 -4
--- src/event.c
+++ src/event.c
@@ -59,11 +59,11 @@
5959
** complete.
6060
** aid=ARTIFACTID Which specific version of the tech-note. Optional.
6161
** v=BOOLEAN Show details if TRUE. Default is FALSE. Optional.
6262
**
6363
** Display an existing tech-note identified by its ID, optionally at a
64
-** specific version, and optionally with additional details.
64
+** specific version, and optionally with additional details.
6565
*/
6666
void event_page(void){
6767
int rid = 0; /* rid of the event artifact */
6868
char *zUuid; /* UUID corresponding to rid */
6969
const char *zId; /* Event identifier */
@@ -155,11 +155,11 @@
155155
style_header("%s", blob_str(&title));
156156
if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){
157157
style_submenu_element("Edit", 0, "%R/technoteedit?name=%!S", zId);
158158
if( g.perm.Attach ){
159159
style_submenu_element("Attach", "Add an attachment",
160
- "%R/attachadd?technote=%!S&from=%R/technote/%!S",
160
+ "%R/attachadd?technote=%!S&from=%R/technote/%!S",
161161
zId, zId);
162162
}
163163
}
164164
zETime = db_text(0, "SELECT datetime(%.17g)", pTNote->rEventDate);
165165
style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zId);
@@ -235,11 +235,11 @@
235235
manifest_destroy(pTNote);
236236
}
237237
238238
/*
239239
** Add or update a new tech note to the repository. rid is id of
240
-** the prior version of this technote, if any.
240
+** the prior version of this technote, if any.
241241
**
242242
** returns 1 if the tech note was added or updated, 0 if the
243243
** update failed making an invalid artifact
244244
*/
245245
int event_commit_common(
@@ -266,11 +266,11 @@
266266
blob_appendf(&event, "C %#F\n", n, zComment);
267267
}
268268
zDate = date_in_standard_format("now");
269269
blob_appendf(&event, "D %s\n", zDate);
270270
free(zDate);
271
-
271
+
272272
zETime[10] = 'T';
273273
blob_appendf(&event, "E %s %s\n", zETime, zId);
274274
zETime[10] = ' ';
275275
if( rid ){
276276
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
277277
--- src/event.c
+++ src/event.c
@@ -59,11 +59,11 @@
59 ** complete.
60 ** aid=ARTIFACTID Which specific version of the tech-note. Optional.
61 ** v=BOOLEAN Show details if TRUE. Default is FALSE. Optional.
62 **
63 ** Display an existing tech-note identified by its ID, optionally at a
64 ** specific version, and optionally with additional details.
65 */
66 void event_page(void){
67 int rid = 0; /* rid of the event artifact */
68 char *zUuid; /* UUID corresponding to rid */
69 const char *zId; /* Event identifier */
@@ -155,11 +155,11 @@
155 style_header("%s", blob_str(&title));
156 if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){
157 style_submenu_element("Edit", 0, "%R/technoteedit?name=%!S", zId);
158 if( g.perm.Attach ){
159 style_submenu_element("Attach", "Add an attachment",
160 "%R/attachadd?technote=%!S&from=%R/technote/%!S",
161 zId, zId);
162 }
163 }
164 zETime = db_text(0, "SELECT datetime(%.17g)", pTNote->rEventDate);
165 style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zId);
@@ -235,11 +235,11 @@
235 manifest_destroy(pTNote);
236 }
237
238 /*
239 ** Add or update a new tech note to the repository. rid is id of
240 ** the prior version of this technote, if any.
241 **
242 ** returns 1 if the tech note was added or updated, 0 if the
243 ** update failed making an invalid artifact
244 */
245 int event_commit_common(
@@ -266,11 +266,11 @@
266 blob_appendf(&event, "C %#F\n", n, zComment);
267 }
268 zDate = date_in_standard_format("now");
269 blob_appendf(&event, "D %s\n", zDate);
270 free(zDate);
271
272 zETime[10] = 'T';
273 blob_appendf(&event, "E %s %s\n", zETime, zId);
274 zETime[10] = ' ';
275 if( rid ){
276 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
277
--- src/event.c
+++ src/event.c
@@ -59,11 +59,11 @@
59 ** complete.
60 ** aid=ARTIFACTID Which specific version of the tech-note. Optional.
61 ** v=BOOLEAN Show details if TRUE. Default is FALSE. Optional.
62 **
63 ** Display an existing tech-note identified by its ID, optionally at a
64 ** specific version, and optionally with additional details.
65 */
66 void event_page(void){
67 int rid = 0; /* rid of the event artifact */
68 char *zUuid; /* UUID corresponding to rid */
69 const char *zId; /* Event identifier */
@@ -155,11 +155,11 @@
155 style_header("%s", blob_str(&title));
156 if( g.perm.WrWiki && g.perm.Write && nextRid==0 ){
157 style_submenu_element("Edit", 0, "%R/technoteedit?name=%!S", zId);
158 if( g.perm.Attach ){
159 style_submenu_element("Attach", "Add an attachment",
160 "%R/attachadd?technote=%!S&from=%R/technote/%!S",
161 zId, zId);
162 }
163 }
164 zETime = db_text(0, "SELECT datetime(%.17g)", pTNote->rEventDate);
165 style_submenu_element("Context", 0, "%R/timeline?c=%.20s", zId);
@@ -235,11 +235,11 @@
235 manifest_destroy(pTNote);
236 }
237
238 /*
239 ** Add or update a new tech note to the repository. rid is id of
240 ** the prior version of this technote, if any.
241 **
242 ** returns 1 if the tech note was added or updated, 0 if the
243 ** update failed making an invalid artifact
244 */
245 int event_commit_common(
@@ -266,11 +266,11 @@
266 blob_appendf(&event, "C %#F\n", n, zComment);
267 }
268 zDate = date_in_standard_format("now");
269 blob_appendf(&event, "D %s\n", zDate);
270 free(zDate);
271
272 zETime[10] = 'T';
273 blob_appendf(&event, "E %s %s\n", zETime, zId);
274 zETime[10] = ' ';
275 if( rid ){
276 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
277
+1 -1
--- src/file.c
+++ src/file.c
@@ -923,11 +923,11 @@
923923
blob_size(pOut), slash));
924924
}
925925
926926
/*
927927
** COMMAND: test-canonical-name
928
-**
928
+**
929929
** Usage: %fossil test-canonical-name FILENAME...
930930
**
931931
** Test the operation of the canonical name generator.
932932
** Also test Fossil's ability to measure attributes of a file.
933933
*/
934934
--- src/file.c
+++ src/file.c
@@ -923,11 +923,11 @@
923 blob_size(pOut), slash));
924 }
925
926 /*
927 ** COMMAND: test-canonical-name
928 **
929 ** Usage: %fossil test-canonical-name FILENAME...
930 **
931 ** Test the operation of the canonical name generator.
932 ** Also test Fossil's ability to measure attributes of a file.
933 */
934
--- src/file.c
+++ src/file.c
@@ -923,11 +923,11 @@
923 blob_size(pOut), slash));
924 }
925
926 /*
927 ** COMMAND: test-canonical-name
928 **
929 ** Usage: %fossil test-canonical-name FILENAME...
930 **
931 ** Test the operation of the canonical name generator.
932 ** Also test Fossil's ability to measure attributes of a file.
933 */
934
+7 -2
--- src/finfo.c
+++ src/finfo.c
@@ -282,17 +282,22 @@
282282
**
283283
** Show the change history for a single file.
284284
**
285285
** Additional query parameters:
286286
**
287
-** a=DATE Only show changes after DATE
288
-** b=DATE Only show changes before DATE
287
+** a=DATETIME Only show changes after DATETIME
288
+** b=DATETIME Only show changes before DATETIME
289289
** n=NUM Show the first NUM changes only
290290
** brbg Background color by branch name
291291
** ubg Background color by user name
292292
** ci=UUID Ancestors of a particular check-in
293293
** showid Show RID values for debugging
294
+**
295
+** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
296
+** year-month-day form, it may be truncated, and it may also name a
297
+** timezone offset from UTC as "-HH:MM" (westward) or "+HH:MM"
298
+** (eastward). Either no timezone suffix or "Z" means UTC.
294299
*/
295300
void finfo_page(void){
296301
Stmt q;
297302
const char *zFilename;
298303
char zPrevDate[20];
299304
--- src/finfo.c
+++ src/finfo.c
@@ -282,17 +282,22 @@
282 **
283 ** Show the change history for a single file.
284 **
285 ** Additional query parameters:
286 **
287 ** a=DATE Only show changes after DATE
288 ** b=DATE Only show changes before DATE
289 ** n=NUM Show the first NUM changes only
290 ** brbg Background color by branch name
291 ** ubg Background color by user name
292 ** ci=UUID Ancestors of a particular check-in
293 ** showid Show RID values for debugging
 
 
 
 
 
294 */
295 void finfo_page(void){
296 Stmt q;
297 const char *zFilename;
298 char zPrevDate[20];
299
--- src/finfo.c
+++ src/finfo.c
@@ -282,17 +282,22 @@
282 **
283 ** Show the change history for a single file.
284 **
285 ** Additional query parameters:
286 **
287 ** a=DATETIME Only show changes after DATETIME
288 ** b=DATETIME Only show changes before DATETIME
289 ** n=NUM Show the first NUM changes only
290 ** brbg Background color by branch name
291 ** ubg Background color by user name
292 ** ci=UUID Ancestors of a particular check-in
293 ** showid Show RID values for debugging
294 **
295 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
296 ** year-month-day form, it may be truncated, and it may also name a
297 ** timezone offset from UTC as "-HH:MM" (westward) or "+HH:MM"
298 ** (eastward). Either no timezone suffix or "Z" means UTC.
299 */
300 void finfo_page(void){
301 Stmt q;
302 const char *zFilename;
303 char zPrevDate[20];
304
+1 -1
--- src/foci.c
+++ src/foci.c
@@ -34,11 +34,11 @@
3434
** previousName TEXT, -- Name of the file in previous check-in
3535
** perm TEXT, -- Permissions on the file
3636
** symname TEXT HIDDEN -- Symbolic name of the check-in.
3737
** );
3838
**
39
-** The hidden symname column is (optionally) used as a query parameter to
39
+** The hidden symname column is (optionally) used as a query parameter to
4040
** identify the particular check-in to parse. The checkinID parameter
4141
** (such is a unique numeric RID rather than symbolic name) can also be used
4242
** to identify the check-in. Example:
4343
**
4444
** SELECT * FROM files_of_checkin
4545
--- src/foci.c
+++ src/foci.c
@@ -34,11 +34,11 @@
34 ** previousName TEXT, -- Name of the file in previous check-in
35 ** perm TEXT, -- Permissions on the file
36 ** symname TEXT HIDDEN -- Symbolic name of the check-in.
37 ** );
38 **
39 ** The hidden symname column is (optionally) used as a query parameter to
40 ** identify the particular check-in to parse. The checkinID parameter
41 ** (such is a unique numeric RID rather than symbolic name) can also be used
42 ** to identify the check-in. Example:
43 **
44 ** SELECT * FROM files_of_checkin
45
--- src/foci.c
+++ src/foci.c
@@ -34,11 +34,11 @@
34 ** previousName TEXT, -- Name of the file in previous check-in
35 ** perm TEXT, -- Permissions on the file
36 ** symname TEXT HIDDEN -- Symbolic name of the check-in.
37 ** );
38 **
39 ** The hidden symname column is (optionally) used as a query parameter to
40 ** identify the particular check-in to parse. The checkinID parameter
41 ** (such is a unique numeric RID rather than symbolic name) can also be used
42 ** to identify the check-in. Example:
43 **
44 ** SELECT * FROM files_of_checkin
45
+20 -1
--- src/info.c
+++ src/info.c
@@ -154,10 +154,21 @@
154154
db_column_text(&s, 1));
155155
}
156156
db_finalize(&s);
157157
}
158158
159
+/*
160
+** Show the parent project, if any
161
+*/
162
+static void showParentProject(void){
163
+ const char *zParentCode;
164
+ zParentCode = db_get("parent-project-code",0);
165
+ if( zParentCode ){
166
+ fossil_print("derived-from: %s %s\n", zParentCode, db_get("parent-project-name",""));
167
+ }
168
+}
169
+
159170
160171
/*
161172
** COMMAND: info
162173
**
163174
** Usage: %fossil info ?VERSION | REPOSITORY_FILENAME? ?OPTIONS?
@@ -189,10 +200,11 @@
189200
db_open_config(0, 0);
190201
db_open_repository(g.argv[2]);
191202
db_record_repository_filename(g.argv[2]);
192203
fossil_print("project-name: %s\n", db_get("project-name", "<unnamed>"));
193204
fossil_print("project-code: %s\n", db_get("project-code", "<none>"));
205
+ showParentProject();
194206
extraRepoInfo();
195207
return;
196208
}
197209
db_find_and_open_repository(0,0);
198210
verify_all_options();
@@ -208,10 +220,11 @@
208220
if( verboseFlag ) extraRepoInfo();
209221
if( g.zConfigDbName ){
210222
fossil_print("config-db: %s\n", g.zConfigDbName);
211223
}
212224
fossil_print("project-code: %s\n", db_get("project-code", ""));
225
+ showParentProject();
213226
vid = g.localOpen ? db_lget_int("checkout", 0) : 0;
214227
if( vid ){
215228
show_common_info(vid, "checkout:", 1, 1);
216229
}
217230
fossil_print("check-ins: %d\n",
@@ -2825,18 +2838,24 @@
28252838
**
28262839
** --author USER Make USER the author for check-in
28272840
** -m|--comment COMMENT Make COMMENT the check-in comment
28282841
** -M|--message-file FILE Read the amended comment from FILE
28292842
** -e|--edit-comment Launch editor to revise comment
2830
-** --date DATE Make DATE the check-in time
2843
+** --date DATETIME Make DATETIME the check-in time
28312844
** --bgcolor COLOR Apply COLOR to this check-in
28322845
** --branchcolor COLOR Apply and propagate COLOR to the branch
28332846
** --tag TAG Add new TAG to this check-in
28342847
** --cancel TAG Cancel TAG from this check-in
28352848
** --branch NAME Make this check-in the start of branch NAME
28362849
** --hide Hide branch starting from this check-in
28372850
** --close Mark this "leaf" as closed
2851
+**
2852
+** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
2853
+** year-month-day form, it may be truncated, the "T" may be replaced by
2854
+** a space, and it may also name a timezone offset from UTC as "-HH:MM"
2855
+** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
2856
+** means UTC.
28382857
*/
28392858
void ci_amend_cmd(void){
28402859
int rid;
28412860
const char *zComment; /* Current comment on the check-in */
28422861
const char *zNewComment; /* Revised check-in comment */
28432862
--- src/info.c
+++ src/info.c
@@ -154,10 +154,21 @@
154 db_column_text(&s, 1));
155 }
156 db_finalize(&s);
157 }
158
 
 
 
 
 
 
 
 
 
 
 
159
160 /*
161 ** COMMAND: info
162 **
163 ** Usage: %fossil info ?VERSION | REPOSITORY_FILENAME? ?OPTIONS?
@@ -189,10 +200,11 @@
189 db_open_config(0, 0);
190 db_open_repository(g.argv[2]);
191 db_record_repository_filename(g.argv[2]);
192 fossil_print("project-name: %s\n", db_get("project-name", "<unnamed>"));
193 fossil_print("project-code: %s\n", db_get("project-code", "<none>"));
 
194 extraRepoInfo();
195 return;
196 }
197 db_find_and_open_repository(0,0);
198 verify_all_options();
@@ -208,10 +220,11 @@
208 if( verboseFlag ) extraRepoInfo();
209 if( g.zConfigDbName ){
210 fossil_print("config-db: %s\n", g.zConfigDbName);
211 }
212 fossil_print("project-code: %s\n", db_get("project-code", ""));
 
213 vid = g.localOpen ? db_lget_int("checkout", 0) : 0;
214 if( vid ){
215 show_common_info(vid, "checkout:", 1, 1);
216 }
217 fossil_print("check-ins: %d\n",
@@ -2825,18 +2838,24 @@
2825 **
2826 ** --author USER Make USER the author for check-in
2827 ** -m|--comment COMMENT Make COMMENT the check-in comment
2828 ** -M|--message-file FILE Read the amended comment from FILE
2829 ** -e|--edit-comment Launch editor to revise comment
2830 ** --date DATE Make DATE the check-in time
2831 ** --bgcolor COLOR Apply COLOR to this check-in
2832 ** --branchcolor COLOR Apply and propagate COLOR to the branch
2833 ** --tag TAG Add new TAG to this check-in
2834 ** --cancel TAG Cancel TAG from this check-in
2835 ** --branch NAME Make this check-in the start of branch NAME
2836 ** --hide Hide branch starting from this check-in
2837 ** --close Mark this "leaf" as closed
 
 
 
 
 
 
2838 */
2839 void ci_amend_cmd(void){
2840 int rid;
2841 const char *zComment; /* Current comment on the check-in */
2842 const char *zNewComment; /* Revised check-in comment */
2843
--- src/info.c
+++ src/info.c
@@ -154,10 +154,21 @@
154 db_column_text(&s, 1));
155 }
156 db_finalize(&s);
157 }
158
159 /*
160 ** Show the parent project, if any
161 */
162 static void showParentProject(void){
163 const char *zParentCode;
164 zParentCode = db_get("parent-project-code",0);
165 if( zParentCode ){
166 fossil_print("derived-from: %s %s\n", zParentCode, db_get("parent-project-name",""));
167 }
168 }
169
170
171 /*
172 ** COMMAND: info
173 **
174 ** Usage: %fossil info ?VERSION | REPOSITORY_FILENAME? ?OPTIONS?
@@ -189,10 +200,11 @@
200 db_open_config(0, 0);
201 db_open_repository(g.argv[2]);
202 db_record_repository_filename(g.argv[2]);
203 fossil_print("project-name: %s\n", db_get("project-name", "<unnamed>"));
204 fossil_print("project-code: %s\n", db_get("project-code", "<none>"));
205 showParentProject();
206 extraRepoInfo();
207 return;
208 }
209 db_find_and_open_repository(0,0);
210 verify_all_options();
@@ -208,10 +220,11 @@
220 if( verboseFlag ) extraRepoInfo();
221 if( g.zConfigDbName ){
222 fossil_print("config-db: %s\n", g.zConfigDbName);
223 }
224 fossil_print("project-code: %s\n", db_get("project-code", ""));
225 showParentProject();
226 vid = g.localOpen ? db_lget_int("checkout", 0) : 0;
227 if( vid ){
228 show_common_info(vid, "checkout:", 1, 1);
229 }
230 fossil_print("check-ins: %d\n",
@@ -2825,18 +2838,24 @@
2838 **
2839 ** --author USER Make USER the author for check-in
2840 ** -m|--comment COMMENT Make COMMENT the check-in comment
2841 ** -M|--message-file FILE Read the amended comment from FILE
2842 ** -e|--edit-comment Launch editor to revise comment
2843 ** --date DATETIME Make DATETIME the check-in time
2844 ** --bgcolor COLOR Apply COLOR to this check-in
2845 ** --branchcolor COLOR Apply and propagate COLOR to the branch
2846 ** --tag TAG Add new TAG to this check-in
2847 ** --cancel TAG Cancel TAG from this check-in
2848 ** --branch NAME Make this check-in the start of branch NAME
2849 ** --hide Hide branch starting from this check-in
2850 ** --close Mark this "leaf" as closed
2851 **
2852 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
2853 ** year-month-day form, it may be truncated, the "T" may be replaced by
2854 ** a space, and it may also name a timezone offset from UTC as "-HH:MM"
2855 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
2856 ** means UTC.
2857 */
2858 void ci_amend_cmd(void){
2859 int rid;
2860 const char *zComment; /* Current comment on the check-in */
2861 const char *zNewComment; /* Revised check-in comment */
2862
+1 -1
--- src/loadctrl.c
+++ src/loadctrl.c
@@ -35,11 +35,11 @@
3535
return 0.0;
3636
}
3737
3838
/*
3939
** COMMAND: test-loadavg
40
-**
40
+**
4141
** %fossil test-loadavg
4242
**
4343
** Print the load average on the host machine.
4444
*/
4545
void loadavg_test_cmd(void){
4646
--- src/loadctrl.c
+++ src/loadctrl.c
@@ -35,11 +35,11 @@
35 return 0.0;
36 }
37
38 /*
39 ** COMMAND: test-loadavg
40 **
41 ** %fossil test-loadavg
42 **
43 ** Print the load average on the host machine.
44 */
45 void loadavg_test_cmd(void){
46
--- src/loadctrl.c
+++ src/loadctrl.c
@@ -35,11 +35,11 @@
35 return 0.0;
36 }
37
38 /*
39 ** COMMAND: test-loadavg
40 **
41 ** %fossil test-loadavg
42 **
43 ** Print the load average on the host machine.
44 */
45 void loadavg_test_cmd(void){
46
+3 -3
--- src/main.c
+++ src/main.c
@@ -592,12 +592,12 @@
592592
#endif
593593
{
594594
const char *zCmdName = "unknown";
595595
int idx;
596596
int rc;
597
- if( sqlite3_libversion_number()<3010000 ){
598
- fossil_fatal("Unsuitable SQLite version %s, must be at least 3.10.0",
597
+ if( sqlite3_libversion_number()<3014000 ){
598
+ fossil_fatal("Unsuitable SQLite version %s, must be at least 3.14.0",
599599
sqlite3_libversion());
600600
}
601601
sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
602602
sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0);
603603
memset(&g, 0, sizeof(g));
@@ -1228,11 +1228,11 @@
12281228
putchar('\n');
12291229
}
12301230
12311231
/*
12321232
** COMMAND: test-all-help
1233
-**
1233
+**
12341234
** Usage: %fossil test-all-help ?OPTIONS?
12351235
**
12361236
** Show help text for commands and pages. Useful for proof-reading.
12371237
** Defaults to just the CLI commands. Specify --www to see only the
12381238
** web pages, or --everything to see both commands and pages.
12391239
--- src/main.c
+++ src/main.c
@@ -592,12 +592,12 @@
592 #endif
593 {
594 const char *zCmdName = "unknown";
595 int idx;
596 int rc;
597 if( sqlite3_libversion_number()<3010000 ){
598 fossil_fatal("Unsuitable SQLite version %s, must be at least 3.10.0",
599 sqlite3_libversion());
600 }
601 sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
602 sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0);
603 memset(&g, 0, sizeof(g));
@@ -1228,11 +1228,11 @@
1228 putchar('\n');
1229 }
1230
1231 /*
1232 ** COMMAND: test-all-help
1233 **
1234 ** Usage: %fossil test-all-help ?OPTIONS?
1235 **
1236 ** Show help text for commands and pages. Useful for proof-reading.
1237 ** Defaults to just the CLI commands. Specify --www to see only the
1238 ** web pages, or --everything to see both commands and pages.
1239
--- src/main.c
+++ src/main.c
@@ -592,12 +592,12 @@
592 #endif
593 {
594 const char *zCmdName = "unknown";
595 int idx;
596 int rc;
597 if( sqlite3_libversion_number()<3014000 ){
598 fossil_fatal("Unsuitable SQLite version %s, must be at least 3.14.0",
599 sqlite3_libversion());
600 }
601 sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
602 sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0);
603 memset(&g, 0, sizeof(g));
@@ -1228,11 +1228,11 @@
1228 putchar('\n');
1229 }
1230
1231 /*
1232 ** COMMAND: test-all-help
1233 **
1234 ** Usage: %fossil test-all-help ?OPTIONS?
1235 **
1236 ** Show help text for commands and pages. Useful for proof-reading.
1237 ** Defaults to just the CLI commands. Specify --www to see only the
1238 ** web pages, or --everything to see both commands and pages.
1239
+1 -1
--- src/md5.c
+++ src/md5.c
@@ -422,11 +422,11 @@
422422
}
423423
424424
425425
/*
426426
** COMMAND: md5sum*
427
-**
427
+**
428428
** Usage: %fossil md5sum FILES....
429429
**
430430
** Compute an MD5 checksum of all files named on the command-line.
431431
** If a file is named "-" then content is read from standard input.
432432
*/
433433
--- src/md5.c
+++ src/md5.c
@@ -422,11 +422,11 @@
422 }
423
424
425 /*
426 ** COMMAND: md5sum*
427 **
428 ** Usage: %fossil md5sum FILES....
429 **
430 ** Compute an MD5 checksum of all files named on the command-line.
431 ** If a file is named "-" then content is read from standard input.
432 */
433
--- src/md5.c
+++ src/md5.c
@@ -422,11 +422,11 @@
422 }
423
424
425 /*
426 ** COMMAND: md5sum*
427 **
428 ** Usage: %fossil md5sum FILES....
429 **
430 ** Compute an MD5 checksum of all files named on the command-line.
431 ** If a file is named "-" then content is read from standard input.
432 */
433
+3 -3
--- src/name.c
+++ src/name.c
@@ -665,11 +665,11 @@
665665
db_finalize(&q);
666666
}
667667
668668
/*
669669
** COMMAND: whatis*
670
-**
670
+**
671671
** Usage: %fossil whatis NAME
672672
**
673673
** Resolve the symbol NAME into its canonical 40-character SHA1-hash
674674
** artifact name and provide a description of what role that artifact
675675
** plays.
@@ -721,11 +721,11 @@
721721
}
722722
}
723723
724724
/*
725725
** COMMAND: test-whatis-all
726
-**
726
+**
727727
** Usage: %fossil test-whatis-all
728728
**
729729
** Show "whatis" information about every artifact in the repository
730730
*/
731731
void test_whatis_all_cmd(void){
@@ -741,11 +741,11 @@
741741
}
742742
743743
744744
/*
745745
** COMMAND: test-ambiguous
746
-**
746
+**
747747
** Usage: %fossil test-ambiguous [--minsize N]
748748
**
749749
** Show a list of ambiguous SHA1-hash abbreviations of N characters or
750750
** more where N defaults to 4. Change N to a different value using
751751
** the "--minsize N" command-line option.
752752
--- src/name.c
+++ src/name.c
@@ -665,11 +665,11 @@
665 db_finalize(&q);
666 }
667
668 /*
669 ** COMMAND: whatis*
670 **
671 ** Usage: %fossil whatis NAME
672 **
673 ** Resolve the symbol NAME into its canonical 40-character SHA1-hash
674 ** artifact name and provide a description of what role that artifact
675 ** plays.
@@ -721,11 +721,11 @@
721 }
722 }
723
724 /*
725 ** COMMAND: test-whatis-all
726 **
727 ** Usage: %fossil test-whatis-all
728 **
729 ** Show "whatis" information about every artifact in the repository
730 */
731 void test_whatis_all_cmd(void){
@@ -741,11 +741,11 @@
741 }
742
743
744 /*
745 ** COMMAND: test-ambiguous
746 **
747 ** Usage: %fossil test-ambiguous [--minsize N]
748 **
749 ** Show a list of ambiguous SHA1-hash abbreviations of N characters or
750 ** more where N defaults to 4. Change N to a different value using
751 ** the "--minsize N" command-line option.
752
--- src/name.c
+++ src/name.c
@@ -665,11 +665,11 @@
665 db_finalize(&q);
666 }
667
668 /*
669 ** COMMAND: whatis*
670 **
671 ** Usage: %fossil whatis NAME
672 **
673 ** Resolve the symbol NAME into its canonical 40-character SHA1-hash
674 ** artifact name and provide a description of what role that artifact
675 ** plays.
@@ -721,11 +721,11 @@
721 }
722 }
723
724 /*
725 ** COMMAND: test-whatis-all
726 **
727 ** Usage: %fossil test-whatis-all
728 **
729 ** Show "whatis" information about every artifact in the repository
730 */
731 void test_whatis_all_cmd(void){
@@ -741,11 +741,11 @@
741 }
742
743
744 /*
745 ** COMMAND: test-ambiguous
746 **
747 ** Usage: %fossil test-ambiguous [--minsize N]
748 **
749 ** Show a list of ambiguous SHA1-hash abbreviations of N characters or
750 ** more where N defaults to 4. Change N to a different value using
751 ** the "--minsize N" command-line option.
752
+2 -2
--- src/purge.c
+++ src/purge.c
@@ -464,21 +464,21 @@
464464
** ==== FURTHER WARNING: This command is a work-in-progress and may yet ====
465465
** ==== contain bugs. ====
466466
**
467467
** fossil purge artifacts UUID... ?OPTIONS?
468468
**
469
-** Move arbitrary artifacts identified by the UUID list into the
469
+** Move arbitrary artifacts identified by the UUID list into the
470470
** graveyard.
471471
**
472472
** fossil purge cat UUID...
473473
**
474474
** Write the content of one or more artifacts in the graveyard onto
475475
** standard output.
476476
**
477477
** fossil purge checkins TAGS... ?OPTIONS?
478478
**
479
-** Move the check-ins or branches identified by TAGS and all of
479
+** Move the check-ins or branches identified by TAGS and all of
480480
** their descendants out of the repository and into the graveyard.
481481
** If TAGS includes a branch name then it means all the check-ins
482482
** on the most recent occurrence of that branch.
483483
**
484484
** fossil purge files NAME ... ?OPTIONS?
485485
--- src/purge.c
+++ src/purge.c
@@ -464,21 +464,21 @@
464 ** ==== FURTHER WARNING: This command is a work-in-progress and may yet ====
465 ** ==== contain bugs. ====
466 **
467 ** fossil purge artifacts UUID... ?OPTIONS?
468 **
469 ** Move arbitrary artifacts identified by the UUID list into the
470 ** graveyard.
471 **
472 ** fossil purge cat UUID...
473 **
474 ** Write the content of one or more artifacts in the graveyard onto
475 ** standard output.
476 **
477 ** fossil purge checkins TAGS... ?OPTIONS?
478 **
479 ** Move the check-ins or branches identified by TAGS and all of
480 ** their descendants out of the repository and into the graveyard.
481 ** If TAGS includes a branch name then it means all the check-ins
482 ** on the most recent occurrence of that branch.
483 **
484 ** fossil purge files NAME ... ?OPTIONS?
485
--- src/purge.c
+++ src/purge.c
@@ -464,21 +464,21 @@
464 ** ==== FURTHER WARNING: This command is a work-in-progress and may yet ====
465 ** ==== contain bugs. ====
466 **
467 ** fossil purge artifacts UUID... ?OPTIONS?
468 **
469 ** Move arbitrary artifacts identified by the UUID list into the
470 ** graveyard.
471 **
472 ** fossil purge cat UUID...
473 **
474 ** Write the content of one or more artifacts in the graveyard onto
475 ** standard output.
476 **
477 ** fossil purge checkins TAGS... ?OPTIONS?
478 **
479 ** Move the check-ins or branches identified by TAGS and all of
480 ** their descendants out of the repository and into the graveyard.
481 ** If TAGS includes a branch name then it means all the check-ins
482 ** on the most recent occurrence of that branch.
483 **
484 ** fossil purge files NAME ... ?OPTIONS?
485
+2 -2
--- src/rebuild.c
+++ src/rebuild.c
@@ -683,11 +683,11 @@
683683
}
684684
}
685685
686686
/*
687687
** COMMAND: test-detach
688
-**
688
+**
689689
** Usage: %fossil test-detach ?REPOSITORY?
690690
**
691691
** Change the project-code and make other changes in order to prevent
692692
** the repository from ever again pushing or pulling to other
693693
** repositories. Used to create a "test" repository for development
@@ -796,11 +796,11 @@
796796
}
797797
}
798798
799799
/*
800800
** COMMAND: scrub*
801
-**
801
+**
802802
** Usage: %fossil scrub ?OPTIONS? ?REPOSITORY?
803803
**
804804
** The command removes sensitive information (such as passwords) from a
805805
** repository so that the repository can be sent to an untrusted reader.
806806
**
807807
--- src/rebuild.c
+++ src/rebuild.c
@@ -683,11 +683,11 @@
683 }
684 }
685
686 /*
687 ** COMMAND: test-detach
688 **
689 ** Usage: %fossil test-detach ?REPOSITORY?
690 **
691 ** Change the project-code and make other changes in order to prevent
692 ** the repository from ever again pushing or pulling to other
693 ** repositories. Used to create a "test" repository for development
@@ -796,11 +796,11 @@
796 }
797 }
798
799 /*
800 ** COMMAND: scrub*
801 **
802 ** Usage: %fossil scrub ?OPTIONS? ?REPOSITORY?
803 **
804 ** The command removes sensitive information (such as passwords) from a
805 ** repository so that the repository can be sent to an untrusted reader.
806 **
807
--- src/rebuild.c
+++ src/rebuild.c
@@ -683,11 +683,11 @@
683 }
684 }
685
686 /*
687 ** COMMAND: test-detach
688 **
689 ** Usage: %fossil test-detach ?REPOSITORY?
690 **
691 ** Change the project-code and make other changes in order to prevent
692 ** the repository from ever again pushing or pulling to other
693 ** repositories. Used to create a "test" repository for development
@@ -796,11 +796,11 @@
796 }
797 }
798
799 /*
800 ** COMMAND: scrub*
801 **
802 ** Usage: %fossil scrub ?OPTIONS? ?REPOSITORY?
803 **
804 ** The command removes sensitive information (such as passwords) from a
805 ** repository so that the repository can be sent to an untrusted reader.
806 **
807
+32 -12
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -1,8 +1,8 @@
11
/******************************************************************************
22
** This file is an amalgamation of many separate C source files from SQLite
3
-** version 3.14.0. By combining all the individual C code files into this
3
+** version 3.14.1. By combining all the individual C code files into this
44
** single large file, the entire code can be compiled as a single translation
55
** unit. This allows many compilers to do optimizations that would not be
66
** possible if the files were compiled separately. Performance improvements
77
** of 5% or more are commonly seen when SQLite is compiled as a single
88
** translation unit.
@@ -378,13 +378,13 @@
378378
**
379379
** See also: [sqlite3_libversion()],
380380
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
381381
** [sqlite_version()] and [sqlite_source_id()].
382382
*/
383
-#define SQLITE_VERSION "3.14.0"
384
-#define SQLITE_VERSION_NUMBER 3014000
385
-#define SQLITE_SOURCE_ID "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
383
+#define SQLITE_VERSION "3.14.1"
384
+#define SQLITE_VERSION_NUMBER 3014001
385
+#define SQLITE_SOURCE_ID "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
386386
387387
/*
388388
** CAPI3REF: Run-Time Library Version Numbers
389389
** KEYWORDS: sqlite3_version, sqlite3_sourceid
390390
**
@@ -44996,29 +44996,49 @@
4499644996
*/
4499744997
static void pcache1TruncateUnsafe(
4499844998
PCache1 *pCache, /* The cache to truncate */
4499944999
unsigned int iLimit /* Drop pages with this pgno or larger */
4500045000
){
45001
- TESTONLY( unsigned int nPage = 0; ) /* To assert pCache->nPage is correct */
45002
- unsigned int h;
45001
+ TESTONLY( int nPage = 0; ) /* To assert pCache->nPage is correct */
45002
+ unsigned int h, iStop;
4500345003
assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
45004
- for(h=0; h<pCache->nHash; h++){
45005
- PgHdr1 **pp = &pCache->apHash[h];
45004
+ assert( pCache->iMaxKey >= iLimit );
45005
+ assert( pCache->nHash > 0 );
45006
+ if( pCache->iMaxKey - iLimit < pCache->nHash ){
45007
+ /* If we are just shaving the last few pages off the end of the
45008
+ ** cache, then there is no point in scanning the entire hash table.
45009
+ ** Only scan those hash slots that might contain pages that need to
45010
+ ** be removed. */
45011
+ h = iLimit % pCache->nHash;
45012
+ iStop = pCache->iMaxKey % pCache->nHash;
45013
+ TESTONLY( nPage = -10; ) /* Disable the pCache->nPage validity check */
45014
+ }else{
45015
+ /* This is the general case where many pages are being removed.
45016
+ ** It is necessary to scan the entire hash table */
45017
+ h = pCache->nHash/2;
45018
+ iStop = h - 1;
45019
+ }
45020
+ for(;;){
45021
+ PgHdr1 **pp;
4500645022
PgHdr1 *pPage;
45023
+ assert( h<pCache->nHash );
45024
+ pp = &pCache->apHash[h];
4500745025
while( (pPage = *pp)!=0 ){
4500845026
if( pPage->iKey>=iLimit ){
4500945027
pCache->nPage--;
4501045028
*pp = pPage->pNext;
4501145029
if( !pPage->isPinned ) pcache1PinPage(pPage);
4501245030
pcache1FreePage(pPage);
4501345031
}else{
4501445032
pp = &pPage->pNext;
45015
- TESTONLY( nPage++; )
45033
+ TESTONLY( if( nPage>=0 ) nPage++; )
4501645034
}
4501745035
}
45036
+ if( h==iStop ) break;
45037
+ h = (h+1) % pCache->nHash;
4501845038
}
45019
- assert( pCache->nPage==nPage );
45039
+ assert( nPage<0 || pCache->nPage==(unsigned)nPage );
4502045040
}
4502145041
4502245042
/******************************************************************************/
4502345043
/******** sqlite3_pcache Methods **********************************************/
4502445044
@@ -45491,11 +45511,11 @@
4549145511
static void pcache1Destroy(sqlite3_pcache *p){
4549245512
PCache1 *pCache = (PCache1 *)p;
4549345513
PGroup *pGroup = pCache->pGroup;
4549445514
assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) );
4549545515
pcache1EnterMutex(pGroup);
45496
- pcache1TruncateUnsafe(pCache, 0);
45516
+ if( pCache->nPage ) pcache1TruncateUnsafe(pCache, 0);
4549745517
assert( pGroup->nMaxPage >= pCache->nMax );
4549845518
pGroup->nMaxPage -= pCache->nMax;
4549945519
assert( pGroup->nMinPage >= pCache->nMin );
4550045520
pGroup->nMinPage -= pCache->nMin;
4550145521
pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
@@ -193998,11 +194018,11 @@
193998194018
int nArg, /* Number of args */
193999194019
sqlite3_value **apUnused /* Function arguments */
194000194020
){
194001194021
assert( nArg==0 );
194002194022
UNUSED_PARAM2(nArg, apUnused);
194003
- sqlite3_result_text(pCtx, "fts5: 2016-08-05 20:54:45 95578898835b933901603bd4d5e063f1219a016f", -1, SQLITE_TRANSIENT);
194023
+ sqlite3_result_text(pCtx, "fts5: 2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b", -1, SQLITE_TRANSIENT);
194004194024
}
194005194025
194006194026
static int fts5Init(sqlite3 *db){
194007194027
static const sqlite3_module fts5Mod = {
194008194028
/* iVersion */ 2,
194009194029
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -1,8 +1,8 @@
1 /******************************************************************************
2 ** This file is an amalgamation of many separate C source files from SQLite
3 ** version 3.14.0. By combining all the individual C code files into this
4 ** single large file, the entire code can be compiled as a single translation
5 ** unit. This allows many compilers to do optimizations that would not be
6 ** possible if the files were compiled separately. Performance improvements
7 ** of 5% or more are commonly seen when SQLite is compiled as a single
8 ** translation unit.
@@ -378,13 +378,13 @@
378 **
379 ** See also: [sqlite3_libversion()],
380 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
381 ** [sqlite_version()] and [sqlite_source_id()].
382 */
383 #define SQLITE_VERSION "3.14.0"
384 #define SQLITE_VERSION_NUMBER 3014000
385 #define SQLITE_SOURCE_ID "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
386
387 /*
388 ** CAPI3REF: Run-Time Library Version Numbers
389 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
390 **
@@ -44996,29 +44996,49 @@
44996 */
44997 static void pcache1TruncateUnsafe(
44998 PCache1 *pCache, /* The cache to truncate */
44999 unsigned int iLimit /* Drop pages with this pgno or larger */
45000 ){
45001 TESTONLY( unsigned int nPage = 0; ) /* To assert pCache->nPage is correct */
45002 unsigned int h;
45003 assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
45004 for(h=0; h<pCache->nHash; h++){
45005 PgHdr1 **pp = &pCache->apHash[h];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45006 PgHdr1 *pPage;
 
 
45007 while( (pPage = *pp)!=0 ){
45008 if( pPage->iKey>=iLimit ){
45009 pCache->nPage--;
45010 *pp = pPage->pNext;
45011 if( !pPage->isPinned ) pcache1PinPage(pPage);
45012 pcache1FreePage(pPage);
45013 }else{
45014 pp = &pPage->pNext;
45015 TESTONLY( nPage++; )
45016 }
45017 }
 
 
45018 }
45019 assert( pCache->nPage==nPage );
45020 }
45021
45022 /******************************************************************************/
45023 /******** sqlite3_pcache Methods **********************************************/
45024
@@ -45491,11 +45511,11 @@
45491 static void pcache1Destroy(sqlite3_pcache *p){
45492 PCache1 *pCache = (PCache1 *)p;
45493 PGroup *pGroup = pCache->pGroup;
45494 assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) );
45495 pcache1EnterMutex(pGroup);
45496 pcache1TruncateUnsafe(pCache, 0);
45497 assert( pGroup->nMaxPage >= pCache->nMax );
45498 pGroup->nMaxPage -= pCache->nMax;
45499 assert( pGroup->nMinPage >= pCache->nMin );
45500 pGroup->nMinPage -= pCache->nMin;
45501 pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
@@ -193998,11 +194018,11 @@
193998 int nArg, /* Number of args */
193999 sqlite3_value **apUnused /* Function arguments */
194000 ){
194001 assert( nArg==0 );
194002 UNUSED_PARAM2(nArg, apUnused);
194003 sqlite3_result_text(pCtx, "fts5: 2016-08-05 20:54:45 95578898835b933901603bd4d5e063f1219a016f", -1, SQLITE_TRANSIENT);
194004 }
194005
194006 static int fts5Init(sqlite3 *db){
194007 static const sqlite3_module fts5Mod = {
194008 /* iVersion */ 2,
194009
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -1,8 +1,8 @@
1 /******************************************************************************
2 ** This file is an amalgamation of many separate C source files from SQLite
3 ** version 3.14.1. By combining all the individual C code files into this
4 ** single large file, the entire code can be compiled as a single translation
5 ** unit. This allows many compilers to do optimizations that would not be
6 ** possible if the files were compiled separately. Performance improvements
7 ** of 5% or more are commonly seen when SQLite is compiled as a single
8 ** translation unit.
@@ -378,13 +378,13 @@
378 **
379 ** See also: [sqlite3_libversion()],
380 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
381 ** [sqlite_version()] and [sqlite_source_id()].
382 */
383 #define SQLITE_VERSION "3.14.1"
384 #define SQLITE_VERSION_NUMBER 3014001
385 #define SQLITE_SOURCE_ID "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
386
387 /*
388 ** CAPI3REF: Run-Time Library Version Numbers
389 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
390 **
@@ -44996,29 +44996,49 @@
44996 */
44997 static void pcache1TruncateUnsafe(
44998 PCache1 *pCache, /* The cache to truncate */
44999 unsigned int iLimit /* Drop pages with this pgno or larger */
45000 ){
45001 TESTONLY( int nPage = 0; ) /* To assert pCache->nPage is correct */
45002 unsigned int h, iStop;
45003 assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
45004 assert( pCache->iMaxKey >= iLimit );
45005 assert( pCache->nHash > 0 );
45006 if( pCache->iMaxKey - iLimit < pCache->nHash ){
45007 /* If we are just shaving the last few pages off the end of the
45008 ** cache, then there is no point in scanning the entire hash table.
45009 ** Only scan those hash slots that might contain pages that need to
45010 ** be removed. */
45011 h = iLimit % pCache->nHash;
45012 iStop = pCache->iMaxKey % pCache->nHash;
45013 TESTONLY( nPage = -10; ) /* Disable the pCache->nPage validity check */
45014 }else{
45015 /* This is the general case where many pages are being removed.
45016 ** It is necessary to scan the entire hash table */
45017 h = pCache->nHash/2;
45018 iStop = h - 1;
45019 }
45020 for(;;){
45021 PgHdr1 **pp;
45022 PgHdr1 *pPage;
45023 assert( h<pCache->nHash );
45024 pp = &pCache->apHash[h];
45025 while( (pPage = *pp)!=0 ){
45026 if( pPage->iKey>=iLimit ){
45027 pCache->nPage--;
45028 *pp = pPage->pNext;
45029 if( !pPage->isPinned ) pcache1PinPage(pPage);
45030 pcache1FreePage(pPage);
45031 }else{
45032 pp = &pPage->pNext;
45033 TESTONLY( if( nPage>=0 ) nPage++; )
45034 }
45035 }
45036 if( h==iStop ) break;
45037 h = (h+1) % pCache->nHash;
45038 }
45039 assert( nPage<0 || pCache->nPage==(unsigned)nPage );
45040 }
45041
45042 /******************************************************************************/
45043 /******** sqlite3_pcache Methods **********************************************/
45044
@@ -45491,11 +45511,11 @@
45511 static void pcache1Destroy(sqlite3_pcache *p){
45512 PCache1 *pCache = (PCache1 *)p;
45513 PGroup *pGroup = pCache->pGroup;
45514 assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) );
45515 pcache1EnterMutex(pGroup);
45516 if( pCache->nPage ) pcache1TruncateUnsafe(pCache, 0);
45517 assert( pGroup->nMaxPage >= pCache->nMax );
45518 pGroup->nMaxPage -= pCache->nMax;
45519 assert( pGroup->nMinPage >= pCache->nMin );
45520 pGroup->nMinPage -= pCache->nMin;
45521 pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
@@ -193998,11 +194018,11 @@
194018 int nArg, /* Number of args */
194019 sqlite3_value **apUnused /* Function arguments */
194020 ){
194021 assert( nArg==0 );
194022 UNUSED_PARAM2(nArg, apUnused);
194023 sqlite3_result_text(pCtx, "fts5: 2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b", -1, SQLITE_TRANSIENT);
194024 }
194025
194026 static int fts5Init(sqlite3 *db){
194027 static const sqlite3_module fts5Mod = {
194028 /* iVersion */ 2,
194029
+3 -3
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -118,13 +118,13 @@
118118
**
119119
** See also: [sqlite3_libversion()],
120120
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
121121
** [sqlite_version()] and [sqlite_source_id()].
122122
*/
123
-#define SQLITE_VERSION "3.14.0"
124
-#define SQLITE_VERSION_NUMBER 3014000
125
-#define SQLITE_SOURCE_ID "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
123
+#define SQLITE_VERSION "3.14.1"
124
+#define SQLITE_VERSION_NUMBER 3014001
125
+#define SQLITE_SOURCE_ID "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
126126
127127
/*
128128
** CAPI3REF: Run-Time Library Version Numbers
129129
** KEYWORDS: sqlite3_version, sqlite3_sourceid
130130
**
131131
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -118,13 +118,13 @@
118 **
119 ** See also: [sqlite3_libversion()],
120 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
121 ** [sqlite_version()] and [sqlite_source_id()].
122 */
123 #define SQLITE_VERSION "3.14.0"
124 #define SQLITE_VERSION_NUMBER 3014000
125 #define SQLITE_SOURCE_ID "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
126
127 /*
128 ** CAPI3REF: Run-Time Library Version Numbers
129 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
130 **
131
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -118,13 +118,13 @@
118 **
119 ** See also: [sqlite3_libversion()],
120 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
121 ** [sqlite_version()] and [sqlite_source_id()].
122 */
123 #define SQLITE_VERSION "3.14.1"
124 #define SQLITE_VERSION_NUMBER 3014001
125 #define SQLITE_SOURCE_ID "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
126
127 /*
128 ** CAPI3REF: Run-Time Library Version Numbers
129 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
130 **
131
+8 -2
--- src/stat.c
+++ src/stat.c
@@ -147,13 +147,19 @@
147147
" + 0.99");
148148
@ %d(n) days or approximately %.2f(n/365.2425) years.
149149
@ </td></tr>
150150
p = db_get("project-code", 0);
151151
if( p ){
152
- @ <tr><th>Project&nbsp;ID:</th><td>%h(p)</td></tr>
152
+ @ <tr><th>Project&nbsp;ID:</th>
153
+ @ <td>%h(p) %h(db_get("project-name",""))</td></tr>
154
+ }
155
+ p = db_get("parent-project-code", 0);
156
+ if( p ){
157
+ @ <tr><th>Parent&nbsp;Project&nbsp;ID:</th>
158
+ @ <td>%h(p) %h(db_get("parent-project-name",""))</td></tr>
153159
}
154
- @ <tr><th>Server&nbsp;ID:</th><td>%h(db_get("server-code",""))</td></tr>
160
+ /* @ <tr><th>Server&nbsp;ID:</th><td>%h(db_get("server-code",""))</td></tr> */
155161
@ <tr><th>Fossil&nbsp;Version:</th><td>
156162
@ %h(MANIFEST_DATE) %h(MANIFEST_VERSION)
157163
@ (%h(RELEASE_VERSION)) [compiled using %h(COMPILER_NAME)]
158164
@ </td></tr>
159165
@ <tr><th>SQLite&nbsp;Version:</th><td>%.19s(sqlite3_sourceid())
160166
--- src/stat.c
+++ src/stat.c
@@ -147,13 +147,19 @@
147 " + 0.99");
148 @ %d(n) days or approximately %.2f(n/365.2425) years.
149 @ </td></tr>
150 p = db_get("project-code", 0);
151 if( p ){
152 @ <tr><th>Project&nbsp;ID:</th><td>%h(p)</td></tr>
 
 
 
 
 
 
153 }
154 @ <tr><th>Server&nbsp;ID:</th><td>%h(db_get("server-code",""))</td></tr>
155 @ <tr><th>Fossil&nbsp;Version:</th><td>
156 @ %h(MANIFEST_DATE) %h(MANIFEST_VERSION)
157 @ (%h(RELEASE_VERSION)) [compiled using %h(COMPILER_NAME)]
158 @ </td></tr>
159 @ <tr><th>SQLite&nbsp;Version:</th><td>%.19s(sqlite3_sourceid())
160
--- src/stat.c
+++ src/stat.c
@@ -147,13 +147,19 @@
147 " + 0.99");
148 @ %d(n) days or approximately %.2f(n/365.2425) years.
149 @ </td></tr>
150 p = db_get("project-code", 0);
151 if( p ){
152 @ <tr><th>Project&nbsp;ID:</th>
153 @ <td>%h(p) %h(db_get("project-name",""))</td></tr>
154 }
155 p = db_get("parent-project-code", 0);
156 if( p ){
157 @ <tr><th>Parent&nbsp;Project&nbsp;ID:</th>
158 @ <td>%h(p) %h(db_get("parent-project-name",""))</td></tr>
159 }
160 /* @ <tr><th>Server&nbsp;ID:</th><td>%h(db_get("server-code",""))</td></tr> */
161 @ <tr><th>Fossil&nbsp;Version:</th><td>
162 @ %h(MANIFEST_DATE) %h(MANIFEST_VERSION)
163 @ (%h(RELEASE_VERSION)) [compiled using %h(COMPILER_NAME)]
164 @ </td></tr>
165 @ <tr><th>SQLite&nbsp;Version:</th><td>%.19s(sqlite3_sourceid())
166
+10 -2
--- src/sync.c
+++ src/sync.c
@@ -129,10 +129,11 @@
129129
urlOptional = 1;
130130
urlFlags = 0;
131131
}
132132
zHttpAuth = find_option("httpauth","B",1);
133133
if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER;
134
+ if( (*pSyncFlags) & SYNC_FROMPARENT ) urlFlags &= ~URL_REMEMBER;
134135
if( !uvOnly ){
135136
if( find_option("private",0,0)!=0 ){
136137
*pSyncFlags |= SYNC_PRIVATE;
137138
}
138139
/* The --verily option to sync, push, and pull forces extra igot cards
@@ -142,10 +143,13 @@
142143
*pSyncFlags |= SYNC_RESYNC;
143144
}
144145
}
145146
if( find_option("uv",0,0)!=0 ){
146147
*pSyncFlags |= SYNC_UNVERSIONED;
148
+ }
149
+ if( find_option("private",0,0)!=0 ){
150
+ *pSyncFlags |= SYNC_PRIVATE;
147151
}
148152
if( find_option("verbose","v",0)!=0 ){
149153
*pSyncFlags |= SYNC_VERBOSE;
150154
}
151155
url_proxy_options();
@@ -186,11 +190,11 @@
186190
**
187191
** Usage: %fossil pull ?URL? ?options?
188192
**
189193
** Pull all sharable changes from a remote repository into the local repository.
190194
** Sharable changes include public check-ins, and wiki, ticket, and tech-note
191
-** edits. Add the --private option to pull private branches. Use the
195
+** edits. Add the --private option to pull private branches. Use the
192196
** "configuration pull" command to pull website configuration details.
193197
**
194198
** If URL is not specified, then the URL from the most recent clone, push,
195199
** pull, remote-url, or sync command is used. See "fossil help clone" for
196200
** details on the URL formats.
@@ -197,10 +201,11 @@
197201
**
198202
** Options:
199203
**
200204
** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
201205
** if required by the remote website
206
+** --from-parent-project Pull content from the parent project
202207
** --ipv4 Use only IPv4, not IPv6
203208
** --once Do not remember URL for subsequent syncs
204209
** --proxy PROXY Use the specified HTTP proxy
205210
** --private Pull private branches too
206211
** -R|--repository REPO Repository to pull into
@@ -213,10 +218,13 @@
213218
** See also: clone, config pull, push, remote-url, sync
214219
*/
215220
void pull_cmd(void){
216221
unsigned configFlags = 0;
217222
unsigned syncFlags = SYNC_PULL;
223
+ if( find_option("from-parent-project",0,0)!=0 ){
224
+ syncFlags |= SYNC_FROMPARENT;
225
+ }
218226
process_sync_args(&configFlags, &syncFlags, 0);
219227
220228
/* We should be done with options.. */
221229
verify_all_options();
222230
@@ -228,11 +236,11 @@
228236
**
229237
** Usage: %fossil push ?URL? ?options?
230238
**
231239
** Push all sharable changes from the local repository to a remote repository.
232240
** Sharable changes include public check-ins, and wiki, ticket, and tech-note
233
-** edits. Use --private to also push private branches. Use the
241
+** edits. Use --private to also push private branches. Use the
234242
** "configuration pull" command to push website configuration details.
235243
**
236244
** If URL is not specified, then the URL from the most recent clone, push,
237245
** pull, remote-url, or sync command is used. See "fossil help clone" for
238246
** details on the URL formats.
239247
--- src/sync.c
+++ src/sync.c
@@ -129,10 +129,11 @@
129 urlOptional = 1;
130 urlFlags = 0;
131 }
132 zHttpAuth = find_option("httpauth","B",1);
133 if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER;
 
134 if( !uvOnly ){
135 if( find_option("private",0,0)!=0 ){
136 *pSyncFlags |= SYNC_PRIVATE;
137 }
138 /* The --verily option to sync, push, and pull forces extra igot cards
@@ -142,10 +143,13 @@
142 *pSyncFlags |= SYNC_RESYNC;
143 }
144 }
145 if( find_option("uv",0,0)!=0 ){
146 *pSyncFlags |= SYNC_UNVERSIONED;
 
 
 
147 }
148 if( find_option("verbose","v",0)!=0 ){
149 *pSyncFlags |= SYNC_VERBOSE;
150 }
151 url_proxy_options();
@@ -186,11 +190,11 @@
186 **
187 ** Usage: %fossil pull ?URL? ?options?
188 **
189 ** Pull all sharable changes from a remote repository into the local repository.
190 ** Sharable changes include public check-ins, and wiki, ticket, and tech-note
191 ** edits. Add the --private option to pull private branches. Use the
192 ** "configuration pull" command to pull website configuration details.
193 **
194 ** If URL is not specified, then the URL from the most recent clone, push,
195 ** pull, remote-url, or sync command is used. See "fossil help clone" for
196 ** details on the URL formats.
@@ -197,10 +201,11 @@
197 **
198 ** Options:
199 **
200 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
201 ** if required by the remote website
 
202 ** --ipv4 Use only IPv4, not IPv6
203 ** --once Do not remember URL for subsequent syncs
204 ** --proxy PROXY Use the specified HTTP proxy
205 ** --private Pull private branches too
206 ** -R|--repository REPO Repository to pull into
@@ -213,10 +218,13 @@
213 ** See also: clone, config pull, push, remote-url, sync
214 */
215 void pull_cmd(void){
216 unsigned configFlags = 0;
217 unsigned syncFlags = SYNC_PULL;
 
 
 
218 process_sync_args(&configFlags, &syncFlags, 0);
219
220 /* We should be done with options.. */
221 verify_all_options();
222
@@ -228,11 +236,11 @@
228 **
229 ** Usage: %fossil push ?URL? ?options?
230 **
231 ** Push all sharable changes from the local repository to a remote repository.
232 ** Sharable changes include public check-ins, and wiki, ticket, and tech-note
233 ** edits. Use --private to also push private branches. Use the
234 ** "configuration pull" command to push website configuration details.
235 **
236 ** If URL is not specified, then the URL from the most recent clone, push,
237 ** pull, remote-url, or sync command is used. See "fossil help clone" for
238 ** details on the URL formats.
239
--- src/sync.c
+++ src/sync.c
@@ -129,10 +129,11 @@
129 urlOptional = 1;
130 urlFlags = 0;
131 }
132 zHttpAuth = find_option("httpauth","B",1);
133 if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER;
134 if( (*pSyncFlags) & SYNC_FROMPARENT ) urlFlags &= ~URL_REMEMBER;
135 if( !uvOnly ){
136 if( find_option("private",0,0)!=0 ){
137 *pSyncFlags |= SYNC_PRIVATE;
138 }
139 /* The --verily option to sync, push, and pull forces extra igot cards
@@ -142,10 +143,13 @@
143 *pSyncFlags |= SYNC_RESYNC;
144 }
145 }
146 if( find_option("uv",0,0)!=0 ){
147 *pSyncFlags |= SYNC_UNVERSIONED;
148 }
149 if( find_option("private",0,0)!=0 ){
150 *pSyncFlags |= SYNC_PRIVATE;
151 }
152 if( find_option("verbose","v",0)!=0 ){
153 *pSyncFlags |= SYNC_VERBOSE;
154 }
155 url_proxy_options();
@@ -186,11 +190,11 @@
190 **
191 ** Usage: %fossil pull ?URL? ?options?
192 **
193 ** Pull all sharable changes from a remote repository into the local repository.
194 ** Sharable changes include public check-ins, and wiki, ticket, and tech-note
195 ** edits. Add the --private option to pull private branches. Use the
196 ** "configuration pull" command to pull website configuration details.
197 **
198 ** If URL is not specified, then the URL from the most recent clone, push,
199 ** pull, remote-url, or sync command is used. See "fossil help clone" for
200 ** details on the URL formats.
@@ -197,10 +201,11 @@
201 **
202 ** Options:
203 **
204 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
205 ** if required by the remote website
206 ** --from-parent-project Pull content from the parent project
207 ** --ipv4 Use only IPv4, not IPv6
208 ** --once Do not remember URL for subsequent syncs
209 ** --proxy PROXY Use the specified HTTP proxy
210 ** --private Pull private branches too
211 ** -R|--repository REPO Repository to pull into
@@ -213,10 +218,13 @@
218 ** See also: clone, config pull, push, remote-url, sync
219 */
220 void pull_cmd(void){
221 unsigned configFlags = 0;
222 unsigned syncFlags = SYNC_PULL;
223 if( find_option("from-parent-project",0,0)!=0 ){
224 syncFlags |= SYNC_FROMPARENT;
225 }
226 process_sync_args(&configFlags, &syncFlags, 0);
227
228 /* We should be done with options.. */
229 verify_all_options();
230
@@ -228,11 +236,11 @@
236 **
237 ** Usage: %fossil push ?URL? ?options?
238 **
239 ** Push all sharable changes from the local repository to a remote repository.
240 ** Sharable changes include public check-ins, and wiki, ticket, and tech-note
241 ** edits. Use --private to also push private branches. Use the
242 ** "configuration pull" command to push website configuration details.
243 **
244 ** If URL is not specified, then the URL from the most recent clone, push,
245 ** pull, remote-url, or sync command is used. See "fossil help clone" for
246 ** details on the URL formats.
247
+10 -2
--- src/sync.c
+++ src/sync.c
@@ -129,10 +129,11 @@
129129
urlOptional = 1;
130130
urlFlags = 0;
131131
}
132132
zHttpAuth = find_option("httpauth","B",1);
133133
if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER;
134
+ if( (*pSyncFlags) & SYNC_FROMPARENT ) urlFlags &= ~URL_REMEMBER;
134135
if( !uvOnly ){
135136
if( find_option("private",0,0)!=0 ){
136137
*pSyncFlags |= SYNC_PRIVATE;
137138
}
138139
/* The --verily option to sync, push, and pull forces extra igot cards
@@ -142,10 +143,13 @@
142143
*pSyncFlags |= SYNC_RESYNC;
143144
}
144145
}
145146
if( find_option("uv",0,0)!=0 ){
146147
*pSyncFlags |= SYNC_UNVERSIONED;
148
+ }
149
+ if( find_option("private",0,0)!=0 ){
150
+ *pSyncFlags |= SYNC_PRIVATE;
147151
}
148152
if( find_option("verbose","v",0)!=0 ){
149153
*pSyncFlags |= SYNC_VERBOSE;
150154
}
151155
url_proxy_options();
@@ -186,11 +190,11 @@
186190
**
187191
** Usage: %fossil pull ?URL? ?options?
188192
**
189193
** Pull all sharable changes from a remote repository into the local repository.
190194
** Sharable changes include public check-ins, and wiki, ticket, and tech-note
191
-** edits. Add the --private option to pull private branches. Use the
195
+** edits. Add the --private option to pull private branches. Use the
192196
** "configuration pull" command to pull website configuration details.
193197
**
194198
** If URL is not specified, then the URL from the most recent clone, push,
195199
** pull, remote-url, or sync command is used. See "fossil help clone" for
196200
** details on the URL formats.
@@ -197,10 +201,11 @@
197201
**
198202
** Options:
199203
**
200204
** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
201205
** if required by the remote website
206
+** --from-parent-project Pull content from the parent project
202207
** --ipv4 Use only IPv4, not IPv6
203208
** --once Do not remember URL for subsequent syncs
204209
** --proxy PROXY Use the specified HTTP proxy
205210
** --private Pull private branches too
206211
** -R|--repository REPO Repository to pull into
@@ -213,10 +218,13 @@
213218
** See also: clone, config pull, push, remote-url, sync
214219
*/
215220
void pull_cmd(void){
216221
unsigned configFlags = 0;
217222
unsigned syncFlags = SYNC_PULL;
223
+ if( find_option("from-parent-project",0,0)!=0 ){
224
+ syncFlags |= SYNC_FROMPARENT;
225
+ }
218226
process_sync_args(&configFlags, &syncFlags, 0);
219227
220228
/* We should be done with options.. */
221229
verify_all_options();
222230
@@ -228,11 +236,11 @@
228236
**
229237
** Usage: %fossil push ?URL? ?options?
230238
**
231239
** Push all sharable changes from the local repository to a remote repository.
232240
** Sharable changes include public check-ins, and wiki, ticket, and tech-note
233
-** edits. Use --private to also push private branches. Use the
241
+** edits. Use --private to also push private branches. Use the
234242
** "configuration pull" command to push website configuration details.
235243
**
236244
** If URL is not specified, then the URL from the most recent clone, push,
237245
** pull, remote-url, or sync command is used. See "fossil help clone" for
238246
** details on the URL formats.
239247
--- src/sync.c
+++ src/sync.c
@@ -129,10 +129,11 @@
129 urlOptional = 1;
130 urlFlags = 0;
131 }
132 zHttpAuth = find_option("httpauth","B",1);
133 if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER;
 
134 if( !uvOnly ){
135 if( find_option("private",0,0)!=0 ){
136 *pSyncFlags |= SYNC_PRIVATE;
137 }
138 /* The --verily option to sync, push, and pull forces extra igot cards
@@ -142,10 +143,13 @@
142 *pSyncFlags |= SYNC_RESYNC;
143 }
144 }
145 if( find_option("uv",0,0)!=0 ){
146 *pSyncFlags |= SYNC_UNVERSIONED;
 
 
 
147 }
148 if( find_option("verbose","v",0)!=0 ){
149 *pSyncFlags |= SYNC_VERBOSE;
150 }
151 url_proxy_options();
@@ -186,11 +190,11 @@
186 **
187 ** Usage: %fossil pull ?URL? ?options?
188 **
189 ** Pull all sharable changes from a remote repository into the local repository.
190 ** Sharable changes include public check-ins, and wiki, ticket, and tech-note
191 ** edits. Add the --private option to pull private branches. Use the
192 ** "configuration pull" command to pull website configuration details.
193 **
194 ** If URL is not specified, then the URL from the most recent clone, push,
195 ** pull, remote-url, or sync command is used. See "fossil help clone" for
196 ** details on the URL formats.
@@ -197,10 +201,11 @@
197 **
198 ** Options:
199 **
200 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
201 ** if required by the remote website
 
202 ** --ipv4 Use only IPv4, not IPv6
203 ** --once Do not remember URL for subsequent syncs
204 ** --proxy PROXY Use the specified HTTP proxy
205 ** --private Pull private branches too
206 ** -R|--repository REPO Repository to pull into
@@ -213,10 +218,13 @@
213 ** See also: clone, config pull, push, remote-url, sync
214 */
215 void pull_cmd(void){
216 unsigned configFlags = 0;
217 unsigned syncFlags = SYNC_PULL;
 
 
 
218 process_sync_args(&configFlags, &syncFlags, 0);
219
220 /* We should be done with options.. */
221 verify_all_options();
222
@@ -228,11 +236,11 @@
228 **
229 ** Usage: %fossil push ?URL? ?options?
230 **
231 ** Push all sharable changes from the local repository to a remote repository.
232 ** Sharable changes include public check-ins, and wiki, ticket, and tech-note
233 ** edits. Use --private to also push private branches. Use the
234 ** "configuration pull" command to push website configuration details.
235 **
236 ** If URL is not specified, then the URL from the most recent clone, push,
237 ** pull, remote-url, or sync command is used. See "fossil help clone" for
238 ** details on the URL formats.
239
--- src/sync.c
+++ src/sync.c
@@ -129,10 +129,11 @@
129 urlOptional = 1;
130 urlFlags = 0;
131 }
132 zHttpAuth = find_option("httpauth","B",1);
133 if( find_option("once",0,0)!=0 ) urlFlags &= ~URL_REMEMBER;
134 if( (*pSyncFlags) & SYNC_FROMPARENT ) urlFlags &= ~URL_REMEMBER;
135 if( !uvOnly ){
136 if( find_option("private",0,0)!=0 ){
137 *pSyncFlags |= SYNC_PRIVATE;
138 }
139 /* The --verily option to sync, push, and pull forces extra igot cards
@@ -142,10 +143,13 @@
143 *pSyncFlags |= SYNC_RESYNC;
144 }
145 }
146 if( find_option("uv",0,0)!=0 ){
147 *pSyncFlags |= SYNC_UNVERSIONED;
148 }
149 if( find_option("private",0,0)!=0 ){
150 *pSyncFlags |= SYNC_PRIVATE;
151 }
152 if( find_option("verbose","v",0)!=0 ){
153 *pSyncFlags |= SYNC_VERBOSE;
154 }
155 url_proxy_options();
@@ -186,11 +190,11 @@
190 **
191 ** Usage: %fossil pull ?URL? ?options?
192 **
193 ** Pull all sharable changes from a remote repository into the local repository.
194 ** Sharable changes include public check-ins, and wiki, ticket, and tech-note
195 ** edits. Add the --private option to pull private branches. Use the
196 ** "configuration pull" command to pull website configuration details.
197 **
198 ** If URL is not specified, then the URL from the most recent clone, push,
199 ** pull, remote-url, or sync command is used. See "fossil help clone" for
200 ** details on the URL formats.
@@ -197,10 +201,11 @@
201 **
202 ** Options:
203 **
204 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
205 ** if required by the remote website
206 ** --from-parent-project Pull content from the parent project
207 ** --ipv4 Use only IPv4, not IPv6
208 ** --once Do not remember URL for subsequent syncs
209 ** --proxy PROXY Use the specified HTTP proxy
210 ** --private Pull private branches too
211 ** -R|--repository REPO Repository to pull into
@@ -213,10 +218,13 @@
218 ** See also: clone, config pull, push, remote-url, sync
219 */
220 void pull_cmd(void){
221 unsigned configFlags = 0;
222 unsigned syncFlags = SYNC_PULL;
223 if( find_option("from-parent-project",0,0)!=0 ){
224 syncFlags |= SYNC_FROMPARENT;
225 }
226 process_sync_args(&configFlags, &syncFlags, 0);
227
228 /* We should be done with options.. */
229 verify_all_options();
230
@@ -228,11 +236,11 @@
236 **
237 ** Usage: %fossil push ?URL? ?options?
238 **
239 ** Push all sharable changes from the local repository to a remote repository.
240 ** Sharable changes include public check-ins, and wiki, ticket, and tech-note
241 ** edits. Use --private to also push private branches. Use the
242 ** "configuration pull" command to push website configuration details.
243 **
244 ** If URL is not specified, then the URL from the most recent clone, push,
245 ** pull, remote-url, or sync command is used. See "fossil help clone" for
246 ** details on the URL formats.
247
+2 -2
--- src/tag.c
+++ src/tag.c
@@ -382,11 +382,11 @@
382382
** --propagate Propagating tag.
383383
** --date-override DATETIME Set date and time added.
384384
** --user-override USER Name USER when adding the tag.
385385
** --dryrun|-n Display the tag text, but to not
386386
** actually insert it into the database.
387
-**
387
+**
388388
** The --date-override and --user-override options support
389389
** importing history from other SCM systems. DATETIME has
390390
** the form 'YYYY-MMM-DD HH:MM:SS'.
391391
**
392392
** %fossil tag cancel ?--raw? TAGNAME CHECK-IN
@@ -398,11 +398,11 @@
398398
** %fossil tag find ?OPTIONS? TAGNAME
399399
**
400400
** List all objects that use TAGNAME. TYPE can be "ci" for
401401
** check-ins or "e" for events. The limit option limits the number
402402
** of results to the given value.
403
-**
403
+**
404404
** Options:
405405
** --raw Raw tag name.
406406
** -t|--type TYPE One of "ci", or "e".
407407
** -n|--limit N Limit to N results.
408408
**
409409
--- src/tag.c
+++ src/tag.c
@@ -382,11 +382,11 @@
382 ** --propagate Propagating tag.
383 ** --date-override DATETIME Set date and time added.
384 ** --user-override USER Name USER when adding the tag.
385 ** --dryrun|-n Display the tag text, but to not
386 ** actually insert it into the database.
387 **
388 ** The --date-override and --user-override options support
389 ** importing history from other SCM systems. DATETIME has
390 ** the form 'YYYY-MMM-DD HH:MM:SS'.
391 **
392 ** %fossil tag cancel ?--raw? TAGNAME CHECK-IN
@@ -398,11 +398,11 @@
398 ** %fossil tag find ?OPTIONS? TAGNAME
399 **
400 ** List all objects that use TAGNAME. TYPE can be "ci" for
401 ** check-ins or "e" for events. The limit option limits the number
402 ** of results to the given value.
403 **
404 ** Options:
405 ** --raw Raw tag name.
406 ** -t|--type TYPE One of "ci", or "e".
407 ** -n|--limit N Limit to N results.
408 **
409
--- src/tag.c
+++ src/tag.c
@@ -382,11 +382,11 @@
382 ** --propagate Propagating tag.
383 ** --date-override DATETIME Set date and time added.
384 ** --user-override USER Name USER when adding the tag.
385 ** --dryrun|-n Display the tag text, but to not
386 ** actually insert it into the database.
387 **
388 ** The --date-override and --user-override options support
389 ** importing history from other SCM systems. DATETIME has
390 ** the form 'YYYY-MMM-DD HH:MM:SS'.
391 **
392 ** %fossil tag cancel ?--raw? TAGNAME CHECK-IN
@@ -398,11 +398,11 @@
398 ** %fossil tag find ?OPTIONS? TAGNAME
399 **
400 ** List all objects that use TAGNAME. TYPE can be "ci" for
401 ** check-ins or "e" for events. The limit option limits the number
402 ** of results to the given value.
403 **
404 ** Options:
405 ** --raw Raw tag name.
406 ** -t|--type TYPE One of "ci", or "e".
407 ** -n|--limit N Limit to N results.
408 **
409
+9 -4
--- src/timeline.c
+++ src/timeline.c
@@ -2045,14 +2045,19 @@
20452045
** before
20462046
** after
20472047
** descendants | children
20482048
** ancestors | parents
20492049
**
2050
-** The CHECKIN can be any unique prefix of 4 characters or more.
2051
-** The DATETIME should be in the ISO8601 format. For
2052
-** example: "2007-08-18 07:21:21". You can also say "current"
2053
-** for the current version or "now" for the current time.
2050
+** The CHECKIN can be any unique prefix of 4 characters or more. You
2051
+** can also say "current" for the current version.
2052
+**
2053
+** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
2054
+** year-month-day form, it may be truncated, the "T" may be replaced by
2055
+** a space, and it may also name a timezone offset from UTC as "-HH:MM"
2056
+** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
2057
+** means UTC.
2058
+**
20542059
**
20552060
** Options:
20562061
** -n|--limit N Output the first N entries (default 20 lines).
20572062
** N=0 means no limit.
20582063
** -p|--path PATH Output items affecting PATH only.
20592064
--- src/timeline.c
+++ src/timeline.c
@@ -2045,14 +2045,19 @@
2045 ** before
2046 ** after
2047 ** descendants | children
2048 ** ancestors | parents
2049 **
2050 ** The CHECKIN can be any unique prefix of 4 characters or more.
2051 ** The DATETIME should be in the ISO8601 format. For
2052 ** example: "2007-08-18 07:21:21". You can also say "current"
2053 ** for the current version or "now" for the current time.
 
 
 
 
 
2054 **
2055 ** Options:
2056 ** -n|--limit N Output the first N entries (default 20 lines).
2057 ** N=0 means no limit.
2058 ** -p|--path PATH Output items affecting PATH only.
2059
--- src/timeline.c
+++ src/timeline.c
@@ -2045,14 +2045,19 @@
2045 ** before
2046 ** after
2047 ** descendants | children
2048 ** ancestors | parents
2049 **
2050 ** The CHECKIN can be any unique prefix of 4 characters or more. You
2051 ** can also say "current" for the current version.
2052 **
2053 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
2054 ** year-month-day form, it may be truncated, the "T" may be replaced by
2055 ** a space, and it may also name a timezone offset from UTC as "-HH:MM"
2056 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
2057 ** means UTC.
2058 **
2059 **
2060 ** Options:
2061 ** -n|--limit N Output the first N entries (default 20 lines).
2062 ** N=0 means no limit.
2063 ** -p|--path PATH Output items affecting PATH only.
2064
+6
--- src/wiki.c
+++ src/wiki.c
@@ -1220,10 +1220,16 @@
12201220
** -s|--show-technote-ids The id of the tech note will be listed
12211221
** along side the timestamp. The tech note
12221222
** id will be the first word on each line.
12231223
** This option only applies if the
12241224
** --technote option is also specified.
1225
+**
1226
+** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
1227
+** year-month-day form, it may be truncated, the "T" may be replaced by
1228
+** a space, and it may also name a timezone offset from UTC as "-HH:MM"
1229
+** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
1230
+** means UTC.
12251231
**
12261232
*/
12271233
void wiki_cmd(void){
12281234
int n;
12291235
db_find_and_open_repository(0, 0);
12301236
--- src/wiki.c
+++ src/wiki.c
@@ -1220,10 +1220,16 @@
1220 ** -s|--show-technote-ids The id of the tech note will be listed
1221 ** along side the timestamp. The tech note
1222 ** id will be the first word on each line.
1223 ** This option only applies if the
1224 ** --technote option is also specified.
 
 
 
 
 
 
1225 **
1226 */
1227 void wiki_cmd(void){
1228 int n;
1229 db_find_and_open_repository(0, 0);
1230
--- src/wiki.c
+++ src/wiki.c
@@ -1220,10 +1220,16 @@
1220 ** -s|--show-technote-ids The id of the tech note will be listed
1221 ** along side the timestamp. The tech note
1222 ** id will be the first word on each line.
1223 ** This option only applies if the
1224 ** --technote option is also specified.
1225 **
1226 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
1227 ** year-month-day form, it may be truncated, the "T" may be replaced by
1228 ** a space, and it may also name a timezone offset from UTC as "-HH:MM"
1229 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
1230 ** means UTC.
1231 **
1232 */
1233 void wiki_cmd(void){
1234 int n;
1235 db_find_and_open_repository(0, 0);
1236
+12
--- src/xfer.c
+++ src/xfer.c
@@ -1634,10 +1634,11 @@
16341634
#define SYNC_CLONE 0x0004
16351635
#define SYNC_PRIVATE 0x0008
16361636
#define SYNC_VERBOSE 0x0010
16371637
#define SYNC_RESYNC 0x0020
16381638
#define SYNC_UNVERSIONED 0x0040
1639
+#define SYNC_FROMPARENT 0x0080
16391640
#endif
16401641
16411642
/*
16421643
** Floating-point absolute value
16431644
*/
@@ -1689,10 +1690,21 @@
16891690
sqlite3_int64 mtime; /* Modification time on a UV file */
16901691
16911692
if( db_get_boolean("dont-push", 0) ) syncFlags &= ~SYNC_PUSH;
16921693
if( (syncFlags & (SYNC_PUSH|SYNC_PULL|SYNC_CLONE|SYNC_UNVERSIONED))==0
16931694
&& configRcvMask==0 && configSendMask==0 ) return 0;
1695
+ if( syncFlags & SYNC_FROMPARENT ){
1696
+ configRcvMask = 0;
1697
+ configSendMask = 0;
1698
+ syncFlags &= ~(SYNC_PUSH);
1699
+ zPCode = db_get("parent-project-code", 0);
1700
+ if( zPCode==0 || db_get("parent-project-name",0)==0 ){
1701
+ fossil_fatal("there is no parent project: set the 'parent-project-code'"
1702
+ " and 'parent-project-name' config parameters set in order"
1703
+ " to pull from a parent project");
1704
+ }
1705
+ }
16941706
16951707
transport_stats(0, 0, 1);
16961708
socket_global_init();
16971709
memset(&xfer, 0, sizeof(xfer));
16981710
xfer.pIn = &recv;
16991711
--- src/xfer.c
+++ src/xfer.c
@@ -1634,10 +1634,11 @@
1634 #define SYNC_CLONE 0x0004
1635 #define SYNC_PRIVATE 0x0008
1636 #define SYNC_VERBOSE 0x0010
1637 #define SYNC_RESYNC 0x0020
1638 #define SYNC_UNVERSIONED 0x0040
 
1639 #endif
1640
1641 /*
1642 ** Floating-point absolute value
1643 */
@@ -1689,10 +1690,21 @@
1689 sqlite3_int64 mtime; /* Modification time on a UV file */
1690
1691 if( db_get_boolean("dont-push", 0) ) syncFlags &= ~SYNC_PUSH;
1692 if( (syncFlags & (SYNC_PUSH|SYNC_PULL|SYNC_CLONE|SYNC_UNVERSIONED))==0
1693 && configRcvMask==0 && configSendMask==0 ) return 0;
 
 
 
 
 
 
 
 
 
 
 
1694
1695 transport_stats(0, 0, 1);
1696 socket_global_init();
1697 memset(&xfer, 0, sizeof(xfer));
1698 xfer.pIn = &recv;
1699
--- src/xfer.c
+++ src/xfer.c
@@ -1634,10 +1634,11 @@
1634 #define SYNC_CLONE 0x0004
1635 #define SYNC_PRIVATE 0x0008
1636 #define SYNC_VERBOSE 0x0010
1637 #define SYNC_RESYNC 0x0020
1638 #define SYNC_UNVERSIONED 0x0040
1639 #define SYNC_FROMPARENT 0x0080
1640 #endif
1641
1642 /*
1643 ** Floating-point absolute value
1644 */
@@ -1689,10 +1690,21 @@
1690 sqlite3_int64 mtime; /* Modification time on a UV file */
1691
1692 if( db_get_boolean("dont-push", 0) ) syncFlags &= ~SYNC_PUSH;
1693 if( (syncFlags & (SYNC_PUSH|SYNC_PULL|SYNC_CLONE|SYNC_UNVERSIONED))==0
1694 && configRcvMask==0 && configSendMask==0 ) return 0;
1695 if( syncFlags & SYNC_FROMPARENT ){
1696 configRcvMask = 0;
1697 configSendMask = 0;
1698 syncFlags &= ~(SYNC_PUSH);
1699 zPCode = db_get("parent-project-code", 0);
1700 if( zPCode==0 || db_get("parent-project-name",0)==0 ){
1701 fossil_fatal("there is no parent project: set the 'parent-project-code'"
1702 " and 'parent-project-name' config parameters set in order"
1703 " to pull from a parent project");
1704 }
1705 }
1706
1707 transport_stats(0, 0, 1);
1708 socket_global_init();
1709 memset(&xfer, 0, sizeof(xfer));
1710 xfer.pIn = &recv;
1711
+12
--- src/xfer.c
+++ src/xfer.c
@@ -1634,10 +1634,11 @@
16341634
#define SYNC_CLONE 0x0004
16351635
#define SYNC_PRIVATE 0x0008
16361636
#define SYNC_VERBOSE 0x0010
16371637
#define SYNC_RESYNC 0x0020
16381638
#define SYNC_UNVERSIONED 0x0040
1639
+#define SYNC_FROMPARENT 0x0080
16391640
#endif
16401641
16411642
/*
16421643
** Floating-point absolute value
16431644
*/
@@ -1689,10 +1690,21 @@
16891690
sqlite3_int64 mtime; /* Modification time on a UV file */
16901691
16911692
if( db_get_boolean("dont-push", 0) ) syncFlags &= ~SYNC_PUSH;
16921693
if( (syncFlags & (SYNC_PUSH|SYNC_PULL|SYNC_CLONE|SYNC_UNVERSIONED))==0
16931694
&& configRcvMask==0 && configSendMask==0 ) return 0;
1695
+ if( syncFlags & SYNC_FROMPARENT ){
1696
+ configRcvMask = 0;
1697
+ configSendMask = 0;
1698
+ syncFlags &= ~(SYNC_PUSH);
1699
+ zPCode = db_get("parent-project-code", 0);
1700
+ if( zPCode==0 || db_get("parent-project-name",0)==0 ){
1701
+ fossil_fatal("there is no parent project: set the 'parent-project-code'"
1702
+ " and 'parent-project-name' config parameters set in order"
1703
+ " to pull from a parent project");
1704
+ }
1705
+ }
16941706
16951707
transport_stats(0, 0, 1);
16961708
socket_global_init();
16971709
memset(&xfer, 0, sizeof(xfer));
16981710
xfer.pIn = &recv;
16991711
--- src/xfer.c
+++ src/xfer.c
@@ -1634,10 +1634,11 @@
1634 #define SYNC_CLONE 0x0004
1635 #define SYNC_PRIVATE 0x0008
1636 #define SYNC_VERBOSE 0x0010
1637 #define SYNC_RESYNC 0x0020
1638 #define SYNC_UNVERSIONED 0x0040
 
1639 #endif
1640
1641 /*
1642 ** Floating-point absolute value
1643 */
@@ -1689,10 +1690,21 @@
1689 sqlite3_int64 mtime; /* Modification time on a UV file */
1690
1691 if( db_get_boolean("dont-push", 0) ) syncFlags &= ~SYNC_PUSH;
1692 if( (syncFlags & (SYNC_PUSH|SYNC_PULL|SYNC_CLONE|SYNC_UNVERSIONED))==0
1693 && configRcvMask==0 && configSendMask==0 ) return 0;
 
 
 
 
 
 
 
 
 
 
 
1694
1695 transport_stats(0, 0, 1);
1696 socket_global_init();
1697 memset(&xfer, 0, sizeof(xfer));
1698 xfer.pIn = &recv;
1699
--- src/xfer.c
+++ src/xfer.c
@@ -1634,10 +1634,11 @@
1634 #define SYNC_CLONE 0x0004
1635 #define SYNC_PRIVATE 0x0008
1636 #define SYNC_VERBOSE 0x0010
1637 #define SYNC_RESYNC 0x0020
1638 #define SYNC_UNVERSIONED 0x0040
1639 #define SYNC_FROMPARENT 0x0080
1640 #endif
1641
1642 /*
1643 ** Floating-point absolute value
1644 */
@@ -1689,10 +1690,21 @@
1690 sqlite3_int64 mtime; /* Modification time on a UV file */
1691
1692 if( db_get_boolean("dont-push", 0) ) syncFlags &= ~SYNC_PUSH;
1693 if( (syncFlags & (SYNC_PUSH|SYNC_PULL|SYNC_CLONE|SYNC_UNVERSIONED))==0
1694 && configRcvMask==0 && configSendMask==0 ) return 0;
1695 if( syncFlags & SYNC_FROMPARENT ){
1696 configRcvMask = 0;
1697 configSendMask = 0;
1698 syncFlags &= ~(SYNC_PUSH);
1699 zPCode = db_get("parent-project-code", 0);
1700 if( zPCode==0 || db_get("parent-project-name",0)==0 ){
1701 fossil_fatal("there is no parent project: set the 'parent-project-code'"
1702 " and 'parent-project-name' config parameters set in order"
1703 " to pull from a parent project");
1704 }
1705 }
1706
1707 transport_stats(0, 0, 1);
1708 socket_global_init();
1709 memset(&xfer, 0, sizeof(xfer));
1710 xfer.pIn = &recv;
1711
+1 -1
--- src/zip.c
+++ src/zip.c
@@ -326,11 +326,11 @@
326326
void zip_of_checkin(
327327
int rid, /* The RID of the checkin to construct the ZIP archive from */
328328
Blob *pZip, /* Write the ZIP archive content into this blob */
329329
const char *zDir, /* Top-level directory of the ZIP archive */
330330
Glob *pInclude, /* Only include files that match this pattern */
331
- Glob *pExclude /* Exclude files that match this pattern */
331
+ Glob *pExclude /* Exclude files that match this pattern */
332332
){
333333
Blob mfile, hash, file;
334334
Manifest *pManifest;
335335
ManifestFile *pFile;
336336
Blob filename;
337337
--- src/zip.c
+++ src/zip.c
@@ -326,11 +326,11 @@
326 void zip_of_checkin(
327 int rid, /* The RID of the checkin to construct the ZIP archive from */
328 Blob *pZip, /* Write the ZIP archive content into this blob */
329 const char *zDir, /* Top-level directory of the ZIP archive */
330 Glob *pInclude, /* Only include files that match this pattern */
331 Glob *pExclude /* Exclude files that match this pattern */
332 ){
333 Blob mfile, hash, file;
334 Manifest *pManifest;
335 ManifestFile *pFile;
336 Blob filename;
337
--- src/zip.c
+++ src/zip.c
@@ -326,11 +326,11 @@
326 void zip_of_checkin(
327 int rid, /* The RID of the checkin to construct the ZIP archive from */
328 Blob *pZip, /* Write the ZIP archive content into this blob */
329 const char *zDir, /* Top-level directory of the ZIP archive */
330 Glob *pInclude, /* Only include files that match this pattern */
331 Glob *pExclude /* Exclude files that match this pattern */
332 ){
333 Blob mfile, hash, file;
334 Manifest *pManifest;
335 ManifestFile *pFile;
336 Blob filename;
337
--- www/changes.wiki
+++ www/changes.wiki
@@ -2,10 +2,15 @@
22
33
<h2>Changes for Version 1.36 (2016-00-00)</h2>
44
55
* Update internal Unicode character tables, used in regular expression
66
handling, from version 8.0 to 9.0.
7
+ * Update the built-in SQLite to version 3.14.1. Doesn't work with
8
+ earlier SQLite versions than 3.14.0 any more.
9
+ * Fix [https://www.mail-archive.com/[email protected]/msg23618.html|multi-line timeline bug]
10
+ * Enhance the [/help?cmd=purge|fossil purge] command.
11
+ * New command [/help?cmd=shell|fossil shell].
712
813
<h2>Changes for Version 1.35 (2016-06-14)</h2>
914
1015
* Enable symlinks by default on all non-Windows platforms.
1116
* Enhance the [/md_rules|Markdown formatting] so that hyperlinks that begin
1217
1318
ADDED www/childprojects.wiki
--- www/changes.wiki
+++ www/changes.wiki
@@ -2,10 +2,15 @@
2
3 <h2>Changes for Version 1.36 (2016-00-00)</h2>
4
5 * Update internal Unicode character tables, used in regular expression
6 handling, from version 8.0 to 9.0.
 
 
 
 
 
7
8 <h2>Changes for Version 1.35 (2016-06-14)</h2>
9
10 * Enable symlinks by default on all non-Windows platforms.
11 * Enhance the [/md_rules|Markdown formatting] so that hyperlinks that begin
12
13 DDED www/childprojects.wiki
--- www/changes.wiki
+++ www/changes.wiki
@@ -2,10 +2,15 @@
2
3 <h2>Changes for Version 1.36 (2016-00-00)</h2>
4
5 * Update internal Unicode character tables, used in regular expression
6 handling, from version 8.0 to 9.0.
7 * Update the built-in SQLite to version 3.14.1. Doesn't work with
8 earlier SQLite versions than 3.14.0 any more.
9 * Fix [https://www.mail-archive.com/[email protected]/msg23618.html|multi-line timeline bug]
10 * Enhance the [/help?cmd=purge|fossil purge] command.
11 * New command [/help?cmd=shell|fossil shell].
12
13 <h2>Changes for Version 1.35 (2016-06-14)</h2>
14
15 * Enable symlinks by default on all non-Windows platforms.
16 * Enhance the [/md_rules|Markdown formatting] so that hyperlinks that begin
17
18 DDED www/childprojects.wiki
--- a/www/childprojects.wiki
+++ b/www/childprojects.wiki
@@ -0,0 +1,17 @@
1
+<title>Child Projects</title>
2
+
3
+<h2>Background</h2>
4
+
5
+The default behavior of Fossil is to share everything (all check-ins,
6
+tickets, wiki, etc) between all clients and all servers. Such a policy
7
+helps to promote a coihesive design for a cathedral-style project run
8
+by a small cliche of developers - the sort of project for which Fossil
9
+was designed.
10
+
11
+But sometimes it is desirable to branch off a side project that does not
12
+sync back to the master but does continue to track changes in the master.
13
+For example, the master project might be an open-source project like
14
+[https://www.sqlite.org/|SQLite] and a team might want to do a proprietary
15
+closed-source enhancement to that master project in a separate repository.
16
+All changes in the master project should flow forward into the derived
17
+project, but care must be taken to prevent proprietary contenblockquote></blockquote >Ba
--- a/www/childprojects.wiki
+++ b/www/childprojects.wiki
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/www/childprojects.wiki
+++ b/www/childprojects.wiki
@@ -0,0 +1,17 @@
1 <title>Child Projects</title>
2
3 <h2>Background</h2>
4
5 The default behavior of Fossil is to share everything (all check-ins,
6 tickets, wiki, etc) between all clients and all servers. Such a policy
7 helps to promote a coihesive design for a cathedral-style project run
8 by a small cliche of developers - the sort of project for which Fossil
9 was designed.
10
11 But sometimes it is desirable to branch off a side project that does not
12 sync back to the master but does continue to track changes in the master.
13 For example, the master project might be an open-source project like
14 [https://www.sqlite.org/|SQLite] and a team might want to do a proprietary
15 closed-source enhancement to that master project in a separate repository.
16 All changes in the master project should flow forward into the derived
17 project, but care must be taken to prevent proprietary contenblockquote></blockquote >Ba
+2 -1
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -13,13 +13,14 @@
1313
antibot.wiki {Defense against Spiders and Bots}
1414
blame.wiki {The Annotate/Blame Algorithm Of Fossil}
1515
branching.wiki {Branching, Forking, Merging, and Tagging}
1616
bugtheory.wiki {Bug Tracking In Fossil}
1717
build.wiki {Compiling and Installing Fossil}
18
+ changes.wiki {Fossil Changelog}
1819
checkin_names.wiki {Check-in And Version Names}
1920
checkin.wiki {Check-in Checklist}
20
- changes.wiki {Fossil Changelog}
21
+ childprojects.wiki {Child Projects}
2122
copyright-release.html {Contributor License Agreement}
2223
concepts.wiki {Fossil Core Concepts}
2324
contribute.wiki {Contributing Code or Documentation To The Fossil Project}
2425
customgraph.md {Theming: Customizing the Timeline Graph}
2526
customskin.md {Theming: Customizing The Appearance of Web Pages}
2627
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -13,13 +13,14 @@
13 antibot.wiki {Defense against Spiders and Bots}
14 blame.wiki {The Annotate/Blame Algorithm Of Fossil}
15 branching.wiki {Branching, Forking, Merging, and Tagging}
16 bugtheory.wiki {Bug Tracking In Fossil}
17 build.wiki {Compiling and Installing Fossil}
 
18 checkin_names.wiki {Check-in And Version Names}
19 checkin.wiki {Check-in Checklist}
20 changes.wiki {Fossil Changelog}
21 copyright-release.html {Contributor License Agreement}
22 concepts.wiki {Fossil Core Concepts}
23 contribute.wiki {Contributing Code or Documentation To The Fossil Project}
24 customgraph.md {Theming: Customizing the Timeline Graph}
25 customskin.md {Theming: Customizing The Appearance of Web Pages}
26
--- www/mkindex.tcl
+++ www/mkindex.tcl
@@ -13,13 +13,14 @@
13 antibot.wiki {Defense against Spiders and Bots}
14 blame.wiki {The Annotate/Blame Algorithm Of Fossil}
15 branching.wiki {Branching, Forking, Merging, and Tagging}
16 bugtheory.wiki {Bug Tracking In Fossil}
17 build.wiki {Compiling and Installing Fossil}
18 changes.wiki {Fossil Changelog}
19 checkin_names.wiki {Check-in And Version Names}
20 checkin.wiki {Check-in Checklist}
21 childprojects.wiki {Child Projects}
22 copyright-release.html {Contributor License Agreement}
23 concepts.wiki {Fossil Core Concepts}
24 contribute.wiki {Contributing Code or Documentation To The Fossil Project}
25 customgraph.md {Theming: Customizing the Timeline Graph}
26 customskin.md {Theming: Customizing The Appearance of Web Pages}
27
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -43,10 +43,11 @@
4343
<li><a href="checkin.wiki">Check-in Checklist</a></li>
4444
<li><a href="checkin.wiki">Checklist &mdash; Check-in</a></li>
4545
<li><a href="../test/release-checklist.wiki">Checklist &mdash; Pre-Release Testing</a></li>
4646
<li><a href="foss-cklist.wiki">Checklist For Successful Open-Source Projects</a></li>
4747
<li><a href="selfcheck.wiki">Checks &mdash; Fossil Repository Integrity Self</a></li>
48
+<li><a href="childprojects.wiki">Child Projects</a></li>
4849
<li><a href="contribute.wiki">Code or Documentation To The Fossil Project &mdash; Contributing</a></li>
4950
<li><a href="style.wiki">Code Style Guidelines &mdash; Source</a></li>
5051
<li><a href="build.wiki">Compiling and Installing Fossil</a></li>
5152
<li><a href="concepts.wiki">Concepts &mdash; Fossil Core</a></li>
5253
<li><a href="server.wiki">Configure A Fossil Server &mdash; How To</a></li>
@@ -148,10 +149,11 @@
148149
<li><a href="private.wiki">Private Branches &mdash; Creating, Syncing, and Deleting</a></li>
149150
<li><a href="makefile.wiki">Process &mdash; The Fossil Build</a></li>
150151
<li><a href="contribute.wiki">Project &mdash; Contributing Code or Documentation To The Fossil</a></li>
151152
<li><a href="embeddeddoc.wiki">Project Documentation &mdash; Embedded</a></li>
152153
<li><a href="foss-cklist.wiki">Projects &mdash; Checklist For Successful Open-Source</a></li>
154
+<li><a href="childprojects.wiki">Projects &mdash; Child</a></li>
153155
<li><a href="sync.wiki">Protocol &mdash; The Fossil Sync</a></li>
154156
<li><a href="faq.wiki">Questions &mdash; Frequently Asked</a></li>
155157
<li><a href="qandc.wiki">Questions And Criticisms</a></li>
156158
<li><a href="quickstart.wiki">Quick Start Guide &mdash; Fossil</a></li>
157159
<li><a href="quotes.wiki">Quotes: What People Are Saying About Fossil, Git, and DVCSes in General</a></li>
158160
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -43,10 +43,11 @@
43 <li><a href="checkin.wiki">Check-in Checklist</a></li>
44 <li><a href="checkin.wiki">Checklist &mdash; Check-in</a></li>
45 <li><a href="../test/release-checklist.wiki">Checklist &mdash; Pre-Release Testing</a></li>
46 <li><a href="foss-cklist.wiki">Checklist For Successful Open-Source Projects</a></li>
47 <li><a href="selfcheck.wiki">Checks &mdash; Fossil Repository Integrity Self</a></li>
 
48 <li><a href="contribute.wiki">Code or Documentation To The Fossil Project &mdash; Contributing</a></li>
49 <li><a href="style.wiki">Code Style Guidelines &mdash; Source</a></li>
50 <li><a href="build.wiki">Compiling and Installing Fossil</a></li>
51 <li><a href="concepts.wiki">Concepts &mdash; Fossil Core</a></li>
52 <li><a href="server.wiki">Configure A Fossil Server &mdash; How To</a></li>
@@ -148,10 +149,11 @@
148 <li><a href="private.wiki">Private Branches &mdash; Creating, Syncing, and Deleting</a></li>
149 <li><a href="makefile.wiki">Process &mdash; The Fossil Build</a></li>
150 <li><a href="contribute.wiki">Project &mdash; Contributing Code or Documentation To The Fossil</a></li>
151 <li><a href="embeddeddoc.wiki">Project Documentation &mdash; Embedded</a></li>
152 <li><a href="foss-cklist.wiki">Projects &mdash; Checklist For Successful Open-Source</a></li>
 
153 <li><a href="sync.wiki">Protocol &mdash; The Fossil Sync</a></li>
154 <li><a href="faq.wiki">Questions &mdash; Frequently Asked</a></li>
155 <li><a href="qandc.wiki">Questions And Criticisms</a></li>
156 <li><a href="quickstart.wiki">Quick Start Guide &mdash; Fossil</a></li>
157 <li><a href="quotes.wiki">Quotes: What People Are Saying About Fossil, Git, and DVCSes in General</a></li>
158
--- www/permutedindex.html
+++ www/permutedindex.html
@@ -43,10 +43,11 @@
43 <li><a href="checkin.wiki">Check-in Checklist</a></li>
44 <li><a href="checkin.wiki">Checklist &mdash; Check-in</a></li>
45 <li><a href="../test/release-checklist.wiki">Checklist &mdash; Pre-Release Testing</a></li>
46 <li><a href="foss-cklist.wiki">Checklist For Successful Open-Source Projects</a></li>
47 <li><a href="selfcheck.wiki">Checks &mdash; Fossil Repository Integrity Self</a></li>
48 <li><a href="childprojects.wiki">Child Projects</a></li>
49 <li><a href="contribute.wiki">Code or Documentation To The Fossil Project &mdash; Contributing</a></li>
50 <li><a href="style.wiki">Code Style Guidelines &mdash; Source</a></li>
51 <li><a href="build.wiki">Compiling and Installing Fossil</a></li>
52 <li><a href="concepts.wiki">Concepts &mdash; Fossil Core</a></li>
53 <li><a href="server.wiki">Configure A Fossil Server &mdash; How To</a></li>
@@ -148,10 +149,11 @@
149 <li><a href="private.wiki">Private Branches &mdash; Creating, Syncing, and Deleting</a></li>
150 <li><a href="makefile.wiki">Process &mdash; The Fossil Build</a></li>
151 <li><a href="contribute.wiki">Project &mdash; Contributing Code or Documentation To The Fossil</a></li>
152 <li><a href="embeddeddoc.wiki">Project Documentation &mdash; Embedded</a></li>
153 <li><a href="foss-cklist.wiki">Projects &mdash; Checklist For Successful Open-Source</a></li>
154 <li><a href="childprojects.wiki">Projects &mdash; Child</a></li>
155 <li><a href="sync.wiki">Protocol &mdash; The Fossil Sync</a></li>
156 <li><a href="faq.wiki">Questions &mdash; Frequently Asked</a></li>
157 <li><a href="qandc.wiki">Questions And Criticisms</a></li>
158 <li><a href="quickstart.wiki">Quick Start Guide &mdash; Fossil</a></li>
159 <li><a href="quotes.wiki">Quotes: What People Are Saying About Fossil, Git, and DVCSes in General</a></li>
160

Keyboard Shortcuts

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