Fossil SCM
Merged in trunk.
Commit
22150abaf2b6e55d761c3838cc07d7d667fa4d78a0bda07563917daf2fbb2cfa
Parent
6edf8bcd9ab0784…
15 files changed
+12
+1
-1
+12
-6
+1
-1
+1
-5
+71
-42
+1
-1
+20
-18
+1
-1
+223
+1
-1
+2
-5
+13
-12
+1
-1
+1
-1
+12
| --- a/.editorconfig | ||
| +++ b/.editorconfig | ||
| @@ -0,0 +1,12 @@ | ||
| 1 | +# EditorConfig (https://editorconfig.com) Configuration for Fossil | |
| 2 | +# | |
| 3 | +# Following https://fossil-scm.org/fossil/doc/trunk/www/style.wiki | |
| 4 | +# | |
| 5 | + | |
| 6 | +# Defaults for all files | |
| 7 | +[*] | |
| 8 | +end_of_line = lf | |
| 9 | +insert_final_newline = true | |
| 10 | +indent_style = space | |
| 11 | +indent_size = 2 | |
| 12 | + |
| --- a/.editorconfig | |
| +++ b/.editorconfig | |
| @@ -0,0 +1,12 @@ | |
| --- a/.editorconfig | |
| +++ b/.editorconfig | |
| @@ -0,0 +1,12 @@ | |
| 1 | # EditorConfig (https://editorconfig.com) Configuration for Fossil |
| 2 | # |
| 3 | # Following https://fossil-scm.org/fossil/doc/trunk/www/style.wiki |
| 4 | # |
| 5 | |
| 6 | # Defaults for all files |
| 7 | [*] |
| 8 | end_of_line = lf |
| 9 | insert_final_newline = true |
| 10 | indent_style = space |
| 11 | indent_size = 2 |
| 12 |
M
VERSION
+1
-1
| --- VERSION | ||
| +++ VERSION | ||
| @@ -1,1 +1,1 @@ | ||
| 1 | -2.10 | |
| 1 | +2.11 | |
| 2 | 2 |
| --- VERSION | |
| +++ VERSION | |
| @@ -1,1 +1,1 @@ | |
| 1 | 2.10 |
| 2 |
| --- VERSION | |
| +++ VERSION | |
| @@ -1,1 +1,1 @@ | |
| 1 | 2.11 |
| 2 |
M
src/db.c
+12
-6
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -4006,16 +4006,18 @@ | ||
| 4006 | 4006 | ** Also set "fingerprint" and "checkout-hash". |
| 4007 | 4007 | */ |
| 4008 | 4008 | void db_set_checkout(int rid){ |
| 4009 | 4009 | char *z; |
| 4010 | 4010 | db_lset_int("checkout", rid); |
| 4011 | - z = db_text(0,"SELECT uuid FROM blob WHERE rid=%d",rid); | |
| 4012 | - db_lset("checkout-hash", z); | |
| 4013 | - fossil_free(z); | |
| 4014 | - z = db_fingerprint(0, 1); | |
| 4015 | - db_lset("fingerprint", z); | |
| 4016 | - fossil_free(z); | |
| 4011 | + if (rid != 0) { | |
| 4012 | + z = db_text(0,"SELECT uuid FROM blob WHERE rid=%d",rid); | |
| 4013 | + db_lset("checkout-hash", z); | |
| 4014 | + fossil_free(z); | |
| 4015 | + z = db_fingerprint(0, 1); | |
| 4016 | + db_lset("fingerprint", z); | |
| 4017 | + fossil_free(z); | |
| 4018 | + } | |
| 4017 | 4019 | } |
| 4018 | 4020 | |
| 4019 | 4021 | /* |
| 4020 | 4022 | ** Verify that the fingerprint recorded in the "fingerprint" entry |
| 4021 | 4023 | ** of the VVAR table matches the fingerprint on the currently |
| @@ -4025,10 +4027,14 @@ | ||
| 4025 | 4027 | int db_fingerprint_ok(void){ |
| 4026 | 4028 | char *zCkout; /* The fingerprint recorded in the checkout database */ |
| 4027 | 4029 | char *zRepo; /* The fingerprint of the repository */ |
| 4028 | 4030 | int rc; /* Result */ |
| 4029 | 4031 | |
| 4032 | + if( !db_lget_int("checkout", 0) ){ | |
| 4033 | + /* We have an empty checkout, fingerprint is still NULL. */ | |
| 4034 | + return 2; | |
| 4035 | + } | |
| 4030 | 4036 | zCkout = db_text(0,"SELECT value FROM localdb.vvar WHERE name='fingerprint'"); |
| 4031 | 4037 | if( zCkout==0 ){ |
| 4032 | 4038 | /* This is an older checkout that does not record a fingerprint. |
| 4033 | 4039 | ** We have to assume everything is ok */ |
| 4034 | 4040 | return 2; |
| 4035 | 4041 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -4006,16 +4006,18 @@ | |
| 4006 | ** Also set "fingerprint" and "checkout-hash". |
| 4007 | */ |
| 4008 | void db_set_checkout(int rid){ |
| 4009 | char *z; |
| 4010 | db_lset_int("checkout", rid); |
| 4011 | z = db_text(0,"SELECT uuid FROM blob WHERE rid=%d",rid); |
| 4012 | db_lset("checkout-hash", z); |
| 4013 | fossil_free(z); |
| 4014 | z = db_fingerprint(0, 1); |
| 4015 | db_lset("fingerprint", z); |
| 4016 | fossil_free(z); |
| 4017 | } |
| 4018 | |
| 4019 | /* |
| 4020 | ** Verify that the fingerprint recorded in the "fingerprint" entry |
| 4021 | ** of the VVAR table matches the fingerprint on the currently |
| @@ -4025,10 +4027,14 @@ | |
| 4025 | int db_fingerprint_ok(void){ |
| 4026 | char *zCkout; /* The fingerprint recorded in the checkout database */ |
| 4027 | char *zRepo; /* The fingerprint of the repository */ |
| 4028 | int rc; /* Result */ |
| 4029 | |
| 4030 | zCkout = db_text(0,"SELECT value FROM localdb.vvar WHERE name='fingerprint'"); |
| 4031 | if( zCkout==0 ){ |
| 4032 | /* This is an older checkout that does not record a fingerprint. |
| 4033 | ** We have to assume everything is ok */ |
| 4034 | return 2; |
| 4035 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -4006,16 +4006,18 @@ | |
| 4006 | ** Also set "fingerprint" and "checkout-hash". |
| 4007 | */ |
| 4008 | void db_set_checkout(int rid){ |
| 4009 | char *z; |
| 4010 | db_lset_int("checkout", rid); |
| 4011 | if (rid != 0) { |
| 4012 | z = db_text(0,"SELECT uuid FROM blob WHERE rid=%d",rid); |
| 4013 | db_lset("checkout-hash", z); |
| 4014 | fossil_free(z); |
| 4015 | z = db_fingerprint(0, 1); |
| 4016 | db_lset("fingerprint", z); |
| 4017 | fossil_free(z); |
| 4018 | } |
| 4019 | } |
| 4020 | |
| 4021 | /* |
| 4022 | ** Verify that the fingerprint recorded in the "fingerprint" entry |
| 4023 | ** of the VVAR table matches the fingerprint on the currently |
| @@ -4025,10 +4027,14 @@ | |
| 4027 | int db_fingerprint_ok(void){ |
| 4028 | char *zCkout; /* The fingerprint recorded in the checkout database */ |
| 4029 | char *zRepo; /* The fingerprint of the repository */ |
| 4030 | int rc; /* Result */ |
| 4031 | |
| 4032 | if( !db_lget_int("checkout", 0) ){ |
| 4033 | /* We have an empty checkout, fingerprint is still NULL. */ |
| 4034 | return 2; |
| 4035 | } |
| 4036 | zCkout = db_text(0,"SELECT value FROM localdb.vvar WHERE name='fingerprint'"); |
| 4037 | if( zCkout==0 ){ |
| 4038 | /* This is an older checkout that does not record a fingerprint. |
| 4039 | ** We have to assume everything is ok */ |
| 4040 | return 2; |
| 4041 |
+1
-1
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -180,11 +180,11 @@ | ||
| 180 | 180 | ** in the repository of the current tree that the argument refers |
| 181 | 181 | ** to. Or if the argument is the name of a repository, show |
| 182 | 182 | ** information about that repository. |
| 183 | 183 | ** |
| 184 | 184 | ** If the argument is a repository name, then the --verbose option shows |
| 185 | -** known the check-out locations for that repository and all URLs used | |
| 185 | +** all known check-out locations for that repository and all URLs used | |
| 186 | 186 | ** to access the repository. The --verbose is (currently) a no-op if |
| 187 | 187 | ** the argument is the name of a object within the repository. |
| 188 | 188 | ** |
| 189 | 189 | ** Use the "finfo" command to get information about a specific |
| 190 | 190 | ** file in a checkout. |
| 191 | 191 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -180,11 +180,11 @@ | |
| 180 | ** in the repository of the current tree that the argument refers |
| 181 | ** to. Or if the argument is the name of a repository, show |
| 182 | ** information about that repository. |
| 183 | ** |
| 184 | ** If the argument is a repository name, then the --verbose option shows |
| 185 | ** known the check-out locations for that repository and all URLs used |
| 186 | ** to access the repository. The --verbose is (currently) a no-op if |
| 187 | ** the argument is the name of a object within the repository. |
| 188 | ** |
| 189 | ** Use the "finfo" command to get information about a specific |
| 190 | ** file in a checkout. |
| 191 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -180,11 +180,11 @@ | |
| 180 | ** in the repository of the current tree that the argument refers |
| 181 | ** to. Or if the argument is the name of a repository, show |
| 182 | ** information about that repository. |
| 183 | ** |
| 184 | ** If the argument is a repository name, then the --verbose option shows |
| 185 | ** all known check-out locations for that repository and all URLs used |
| 186 | ** to access the repository. The --verbose is (currently) a no-op if |
| 187 | ** the argument is the name of a object within the repository. |
| 188 | ** |
| 189 | ** Use the "finfo" command to get information about a specific |
| 190 | ** file in a checkout. |
| 191 |
+1
-5
| --- src/shell.c | ||
| +++ src/shell.c | ||
| @@ -16691,16 +16691,12 @@ | ||
| 16691 | 16691 | |
| 16692 | 16692 | /* .parameter clear |
| 16693 | 16693 | ** Clear all bind parameters by dropping the TEMP table that holds them. |
| 16694 | 16694 | */ |
| 16695 | 16695 | if( nArg==2 && strcmp(azArg[1],"clear")==0 ){ |
| 16696 | - int wrSchema = 0; | |
| 16697 | - sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, -1, &wrSchema); | |
| 16698 | - sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, 1, 0); | |
| 16699 | 16696 | sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp.sqlite_parameters;", |
| 16700 | 16697 | 0, 0, 0); |
| 16701 | - sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, wrSchema, 0); | |
| 16702 | 16698 | }else |
| 16703 | 16699 | |
| 16704 | 16700 | /* .parameter list |
| 16705 | 16701 | ** List all bind parameters. |
| 16706 | 16702 | */ |
| @@ -17966,11 +17962,11 @@ | ||
| 17966 | 17962 | sqlite3_trace_v2(p->db, mType, sql_trace_callback, p); |
| 17967 | 17963 | } |
| 17968 | 17964 | }else |
| 17969 | 17965 | #endif /* !defined(SQLITE_OMIT_TRACE) */ |
| 17970 | 17966 | |
| 17971 | -#ifdef SQLITE_DEBUG | |
| 17967 | +#if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_VIRTUALTABLE) | |
| 17972 | 17968 | if( c=='u' && strncmp(azArg[0], "unmodule", n)==0 ){ |
| 17973 | 17969 | int ii; |
| 17974 | 17970 | int lenOpt; |
| 17975 | 17971 | char *zOpt; |
| 17976 | 17972 | if( nArg<2 ){ |
| 17977 | 17973 |
| --- src/shell.c | |
| +++ src/shell.c | |
| @@ -16691,16 +16691,12 @@ | |
| 16691 | |
| 16692 | /* .parameter clear |
| 16693 | ** Clear all bind parameters by dropping the TEMP table that holds them. |
| 16694 | */ |
| 16695 | if( nArg==2 && strcmp(azArg[1],"clear")==0 ){ |
| 16696 | int wrSchema = 0; |
| 16697 | sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, -1, &wrSchema); |
| 16698 | sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, 1, 0); |
| 16699 | sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp.sqlite_parameters;", |
| 16700 | 0, 0, 0); |
| 16701 | sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, wrSchema, 0); |
| 16702 | }else |
| 16703 | |
| 16704 | /* .parameter list |
| 16705 | ** List all bind parameters. |
| 16706 | */ |
| @@ -17966,11 +17962,11 @@ | |
| 17966 | sqlite3_trace_v2(p->db, mType, sql_trace_callback, p); |
| 17967 | } |
| 17968 | }else |
| 17969 | #endif /* !defined(SQLITE_OMIT_TRACE) */ |
| 17970 | |
| 17971 | #ifdef SQLITE_DEBUG |
| 17972 | if( c=='u' && strncmp(azArg[0], "unmodule", n)==0 ){ |
| 17973 | int ii; |
| 17974 | int lenOpt; |
| 17975 | char *zOpt; |
| 17976 | if( nArg<2 ){ |
| 17977 |
| --- src/shell.c | |
| +++ src/shell.c | |
| @@ -16691,16 +16691,12 @@ | |
| 16691 | |
| 16692 | /* .parameter clear |
| 16693 | ** Clear all bind parameters by dropping the TEMP table that holds them. |
| 16694 | */ |
| 16695 | if( nArg==2 && strcmp(azArg[1],"clear")==0 ){ |
| 16696 | sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp.sqlite_parameters;", |
| 16697 | 0, 0, 0); |
| 16698 | }else |
| 16699 | |
| 16700 | /* .parameter list |
| 16701 | ** List all bind parameters. |
| 16702 | */ |
| @@ -17966,11 +17962,11 @@ | |
| 17962 | sqlite3_trace_v2(p->db, mType, sql_trace_callback, p); |
| 17963 | } |
| 17964 | }else |
| 17965 | #endif /* !defined(SQLITE_OMIT_TRACE) */ |
| 17966 | |
| 17967 | #if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_VIRTUALTABLE) |
| 17968 | if( c=='u' && strncmp(azArg[0], "unmodule", n)==0 ){ |
| 17969 | int ii; |
| 17970 | int lenOpt; |
| 17971 | char *zOpt; |
| 17972 | if( nArg<2 ){ |
| 17973 |
+71
-42
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -1165,11 +1165,11 @@ | ||
| 1165 | 1165 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1166 | 1166 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1167 | 1167 | */ |
| 1168 | 1168 | #define SQLITE_VERSION "3.30.0" |
| 1169 | 1169 | #define SQLITE_VERSION_NUMBER 3030000 |
| 1170 | -#define SQLITE_SOURCE_ID "2019-09-26 16:57:42 49073b7003330027303c4c776e9f85112f8b99b89f848fec3f953eba501d7505" | |
| 1170 | +#define SQLITE_SOURCE_ID "2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f" | |
| 1171 | 1171 | |
| 1172 | 1172 | /* |
| 1173 | 1173 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1174 | 1174 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1175 | 1175 | ** |
| @@ -16171,10 +16171,11 @@ | ||
| 16171 | 16171 | #define sqlite3MutexInit() SQLITE_OK |
| 16172 | 16172 | #define sqlite3MutexEnd() |
| 16173 | 16173 | #define MUTEX_LOGIC(X) |
| 16174 | 16174 | #else |
| 16175 | 16175 | #define MUTEX_LOGIC(X) X |
| 16176 | +SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*); | |
| 16176 | 16177 | #endif /* defined(SQLITE_MUTEX_OMIT) */ |
| 16177 | 16178 | |
| 16178 | 16179 | /************** End of mutex.h ***********************************************/ |
| 16179 | 16180 | /************** Continuing where we left off in sqliteInt.h ******************/ |
| 16180 | 16181 | |
| @@ -17174,12 +17175,15 @@ | ||
| 17174 | 17175 | sqlite3 *db; /* The database connection */ |
| 17175 | 17176 | u8 *aSortFlags; /* Sort order for each column. */ |
| 17176 | 17177 | CollSeq *aColl[1]; /* Collating sequence for each term of the key */ |
| 17177 | 17178 | }; |
| 17178 | 17179 | |
| 17179 | -#define KEYINFO_ORDER_DESC 0x01 | |
| 17180 | -#define KEYINFO_ORDER_BIGNULL 0x02 | |
| 17180 | +/* | |
| 17181 | +** Allowed bit values for entries in the KeyInfo.aSortFlags[] array. | |
| 17182 | +*/ | |
| 17183 | +#define KEYINFO_ORDER_DESC 0x01 /* DESC sort order */ | |
| 17184 | +#define KEYINFO_ORDER_BIGNULL 0x02 /* NULL is larger than any other value */ | |
| 17181 | 17185 | |
| 17182 | 17186 | /* |
| 17183 | 17187 | ** This object holds a record which has been parsed out into individual |
| 17184 | 17188 | ** fields, for the purposes of doing a comparison. |
| 17185 | 17189 | ** |
| @@ -17505,10 +17509,11 @@ | ||
| 17505 | 17509 | #endif |
| 17506 | 17510 | int iTable; /* TK_COLUMN: cursor number of table holding column |
| 17507 | 17511 | ** TK_REGISTER: register number |
| 17508 | 17512 | ** TK_TRIGGER: 1 -> new, 0 -> old |
| 17509 | 17513 | ** EP_Unlikely: 134217728 times likelihood |
| 17514 | + ** TK_IN: ephemerial table holding RHS | |
| 17510 | 17515 | ** TK_SELECT_COLUMN: Number of columns on the LHS |
| 17511 | 17516 | ** TK_SELECT: 1st register of result vector */ |
| 17512 | 17517 | ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid. |
| 17513 | 17518 | ** TK_VARIABLE: variable number (always >= 1). |
| 17514 | 17519 | ** TK_SELECT_COLUMN: column of the result vector */ |
| @@ -29226,13 +29231,14 @@ | ||
| 29226 | 29231 | break; |
| 29227 | 29232 | } |
| 29228 | 29233 | |
| 29229 | 29234 | case TK_COLLATE: { |
| 29230 | 29235 | /* COLLATE operators without the EP_Collate flag are intended to |
| 29231 | - ** emulate collation associated with a table column. Explicit | |
| 29232 | - ** COLLATE operators that appear in the original SQL always have | |
| 29233 | - ** the EP_Collate bit set */ | |
| 29236 | + ** emulate collation associated with a table column. These show | |
| 29237 | + ** up in the treeview output as "SOFT-COLLATE". Explicit COLLATE | |
| 29238 | + ** operators that appear in the original SQL always have the | |
| 29239 | + ** EP_Collate bit set and appear in treeview output as just "COLLATE" */ | |
| 29234 | 29240 | sqlite3TreeViewLine(pView, "%sCOLLATE %Q%s", |
| 29235 | 29241 | !ExprHasProperty(pExpr, EP_Collate) ? "SOFT-" : "", |
| 29236 | 29242 | pExpr->u.zToken, zFlgs); |
| 29237 | 29243 | sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); |
| 29238 | 29244 | break; |
| @@ -32583,17 +32589,33 @@ | ||
| 32583 | 32589 | /* # include <sys/ioctl.h> */ |
| 32584 | 32590 | # include <sys/file.h> |
| 32585 | 32591 | # include <sys/param.h> |
| 32586 | 32592 | #endif /* SQLITE_ENABLE_LOCKING_STYLE */ |
| 32587 | 32593 | |
| 32588 | -#if defined(__APPLE__) && ((__MAC_OS_X_VERSION_MIN_REQUIRED > 1050) || \ | |
| 32589 | - (__IPHONE_OS_VERSION_MIN_REQUIRED > 2000)) | |
| 32590 | -# if (!defined(TARGET_OS_EMBEDDED) || (TARGET_OS_EMBEDDED==0)) \ | |
| 32591 | - && (!defined(TARGET_IPHONE_SIMULATOR) || (TARGET_IPHONE_SIMULATOR==0)) | |
| 32592 | -# define HAVE_GETHOSTUUID 1 | |
| 32593 | -# else | |
| 32594 | -# warning "gethostuuid() is disabled." | |
| 32594 | +/* | |
| 32595 | +** Try to determine if gethostuuid() is available based on standard | |
| 32596 | +** macros. This might sometimes compute the wrong value for some | |
| 32597 | +** obscure platforms. For those cases, simply compile with one of | |
| 32598 | +** the following: | |
| 32599 | +** | |
| 32600 | +** -DHAVE_GETHOSTUUID=0 | |
| 32601 | +** -DHAVE_GETHOSTUUID=1 | |
| 32602 | +** | |
| 32603 | +** None if this matters except when building on Apple products with | |
| 32604 | +** -DSQLITE_ENABLE_LOCKING_STYLE. | |
| 32605 | +*/ | |
| 32606 | +#ifndef HAVE_GETHOSTUUID | |
| 32607 | +# define HAVE_GETHOSTUUID 0 | |
| 32608 | +# if defined(__APPLE__) && ((__MAC_OS_X_VERSION_MIN_REQUIRED > 1050) || \ | |
| 32609 | + (__IPHONE_OS_VERSION_MIN_REQUIRED > 2000)) | |
| 32610 | +# if (!defined(TARGET_OS_EMBEDDED) || (TARGET_OS_EMBEDDED==0)) \ | |
| 32611 | + && (!defined(TARGET_IPHONE_SIMULATOR) || (TARGET_IPHONE_SIMULATOR==0)) | |
| 32612 | +# undef HAVE_GETHOSTUUID | |
| 32613 | +# define HAVE_GETHOSTUUID 1 | |
| 32614 | +# else | |
| 32615 | +# warning "gethostuuid() is disabled." | |
| 32616 | +# endif | |
| 32595 | 32617 | # endif |
| 32596 | 32618 | #endif |
| 32597 | 32619 | |
| 32598 | 32620 | |
| 32599 | 32621 | #if OS_VXWORKS |
| @@ -39605,11 +39627,11 @@ | ||
| 39605 | 39627 | SQLITE_API int sqlite3_hostid_num = 0; |
| 39606 | 39628 | #endif |
| 39607 | 39629 | |
| 39608 | 39630 | #define PROXY_HOSTIDLEN 16 /* conch file host id length */ |
| 39609 | 39631 | |
| 39610 | -#ifdef HAVE_GETHOSTUUID | |
| 39632 | +#if HAVE_GETHOSTUUID | |
| 39611 | 39633 | /* Not always defined in the headers as it ought to be */ |
| 39612 | 39634 | extern int gethostuuid(uuid_t id, const struct timespec *wait); |
| 39613 | 39635 | #endif |
| 39614 | 39636 | |
| 39615 | 39637 | /* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN |
| @@ -39616,11 +39638,11 @@ | ||
| 39616 | 39638 | ** bytes of writable memory. |
| 39617 | 39639 | */ |
| 39618 | 39640 | static int proxyGetHostID(unsigned char *pHostID, int *pError){ |
| 39619 | 39641 | assert(PROXY_HOSTIDLEN == sizeof(uuid_t)); |
| 39620 | 39642 | memset(pHostID, 0, PROXY_HOSTIDLEN); |
| 39621 | -#ifdef HAVE_GETHOSTUUID | |
| 39643 | +#if HAVE_GETHOSTUUID | |
| 39622 | 39644 | { |
| 39623 | 39645 | struct timespec timeout = {1, 0}; /* 1 sec timeout */ |
| 39624 | 39646 | if( gethostuuid(pHostID, &timeout) ){ |
| 39625 | 39647 | int err = errno; |
| 39626 | 39648 | if( pError ){ |
| @@ -84381,11 +84403,11 @@ | ||
| 84381 | 84403 | printf(" ir:%lld", p->u.i); |
| 84382 | 84404 | }else if( p->flags & MEM_Int ){ |
| 84383 | 84405 | printf(" i:%lld", p->u.i); |
| 84384 | 84406 | #ifndef SQLITE_OMIT_FLOATING_POINT |
| 84385 | 84407 | }else if( p->flags & MEM_Real ){ |
| 84386 | - printf(" r:%g", p->u.r); | |
| 84408 | + printf(" r:%.17g", p->u.r); | |
| 84387 | 84409 | #endif |
| 84388 | 84410 | }else if( sqlite3VdbeMemIsRowSet(p) ){ |
| 84389 | 84411 | printf(" (rowset)"); |
| 84390 | 84412 | }else{ |
| 84391 | 84413 | char zBuf[200]; |
| @@ -102445,11 +102467,12 @@ | ||
| 102445 | 102467 | && pA->op!=TK_TRUEFALSE |
| 102446 | 102468 | && (combinedFlags & EP_Reduced)==0 |
| 102447 | 102469 | ){ |
| 102448 | 102470 | if( pA->iColumn!=pB->iColumn ) return 2; |
| 102449 | 102471 | if( pA->op2!=pB->op2 ) return 2; |
| 102450 | - if( pA->iTable!=pB->iTable | |
| 102472 | + if( pA->op!=TK_IN | |
| 102473 | + && pA->iTable!=pB->iTable | |
| 102451 | 102474 | && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2; |
| 102452 | 102475 | } |
| 102453 | 102476 | } |
| 102454 | 102477 | return 0; |
| 102455 | 102478 | } |
| @@ -110436,11 +110459,12 @@ | ||
| 110436 | 110459 | goto exit_drop_table; |
| 110437 | 110460 | } |
| 110438 | 110461 | } |
| 110439 | 110462 | #endif |
| 110440 | 110463 | if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 |
| 110441 | - && sqlite3StrNICmp(pTab->zName, "sqlite_stat", 11)!=0 ){ | |
| 110464 | + && sqlite3StrNICmp(pTab->zName+7, "stat", 4)!=0 | |
| 110465 | + && sqlite3StrNICmp(pTab->zName+7, "parameters", 10)!=0 ){ | |
| 110442 | 110466 | sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName); |
| 110443 | 110467 | goto exit_drop_table; |
| 110444 | 110468 | } |
| 110445 | 110469 | |
| 110446 | 110470 | #ifndef SQLITE_OMIT_VIEW |
| @@ -121079,11 +121103,15 @@ | ||
| 121079 | 121103 | #endif |
| 121080 | 121104 | /* Version 3.28.0 and later */ |
| 121081 | 121105 | sqlite3_stmt_isexplain, |
| 121082 | 121106 | sqlite3_value_frombind, |
| 121083 | 121107 | /* Version 3.30.0 and later */ |
| 121108 | +#ifndef SQLITE_OMIT_VIRTUALTABLE | |
| 121084 | 121109 | sqlite3_drop_modules, |
| 121110 | +#else | |
| 121111 | + 0, | |
| 121112 | +#endif | |
| 121085 | 121113 | }; |
| 121086 | 121114 | |
| 121087 | 121115 | /* |
| 121088 | 121116 | ** Attempt to load an SQLite extension library contained in the file |
| 121089 | 121117 | ** zFile. The entry point is zProc. zProc may be 0 in which case a |
| @@ -162211,10 +162239,22 @@ | ||
| 162211 | 162239 | #ifndef SQLITE_CORE |
| 162212 | 162240 | /* # include "sqlite3ext.h" */ |
| 162213 | 162241 | SQLITE_EXTENSION_INIT1 |
| 162214 | 162242 | #endif |
| 162215 | 162243 | |
| 162244 | +/* | |
| 162245 | +** The following are copied from sqliteInt.h. | |
| 162246 | +** | |
| 162247 | +** Constants for the largest and smallest possible 64-bit signed integers. | |
| 162248 | +** These macros are designed to work correctly on both 32-bit and 64-bit | |
| 162249 | +** compilers. | |
| 162250 | +*/ | |
| 162251 | +#ifndef SQLITE_AMALGAMATION | |
| 162252 | +# define LARGEST_INT64 (0xffffffff|(((sqlite3_int64)0x7fffffff)<<32)) | |
| 162253 | +# define SMALLEST_INT64 (((sqlite3_int64)-1) - LARGEST_INT64) | |
| 162254 | +#endif | |
| 162255 | + | |
| 162216 | 162256 | static int fts3EvalNext(Fts3Cursor *pCsr); |
| 162217 | 162257 | static int fts3EvalStart(Fts3Cursor *pCsr); |
| 162218 | 162258 | static int fts3TermSegReaderCursor( |
| 162219 | 162259 | Fts3Cursor *, const char *, int, int, Fts3MultiSegReader **); |
| 162220 | 162260 | |
| @@ -163989,14 +164029,15 @@ | ||
| 163989 | 164029 | } |
| 163990 | 164030 | *ppPoslist = pEnd; |
| 163991 | 164031 | } |
| 163992 | 164032 | |
| 163993 | 164033 | /* |
| 163994 | -** Value used to signify the end of an position-list. This is safe because | |
| 163995 | -** it is not possible to have a document with 2^31 terms. | |
| 164034 | +** Value used to signify the end of an position-list. This must be | |
| 164035 | +** as large or larger than any value that might appear on the | |
| 164036 | +** position-list, even a position list that has been corrupted. | |
| 163996 | 164037 | */ |
| 163997 | -#define POSITION_LIST_END 0x7fffffff | |
| 164038 | +#define POSITION_LIST_END LARGEST_INT64 | |
| 163998 | 164039 | |
| 163999 | 164040 | /* |
| 164000 | 164041 | ** This function is used to help parse position-lists. When this function is |
| 164001 | 164042 | ** called, *pp may point to the start of the next varint in the position-list |
| 164002 | 164043 | ** being parsed, or it may point to 1 byte past the end of the position-list |
| @@ -164068,18 +164109,18 @@ | ||
| 164068 | 164109 | |
| 164069 | 164110 | if( *p1==POS_COLUMN ){ |
| 164070 | 164111 | fts3GetVarint32(&p1[1], &iCol1); |
| 164071 | 164112 | if( iCol1==0 ) return FTS_CORRUPT_VTAB; |
| 164072 | 164113 | } |
| 164073 | - else if( *p1==POS_END ) iCol1 = POSITION_LIST_END; | |
| 164114 | + else if( *p1==POS_END ) iCol1 = 0x7fffffff; | |
| 164074 | 164115 | else iCol1 = 0; |
| 164075 | 164116 | |
| 164076 | 164117 | if( *p2==POS_COLUMN ){ |
| 164077 | 164118 | fts3GetVarint32(&p2[1], &iCol2); |
| 164078 | 164119 | if( iCol2==0 ) return FTS_CORRUPT_VTAB; |
| 164079 | 164120 | } |
| 164080 | - else if( *p2==POS_END ) iCol2 = POSITION_LIST_END; | |
| 164121 | + else if( *p2==POS_END ) iCol2 = 0x7fffffff; | |
| 164081 | 164122 | else iCol2 = 0; |
| 164082 | 164123 | |
| 164083 | 164124 | if( iCol1==iCol2 ){ |
| 164084 | 164125 | sqlite3_int64 i1 = 0; /* Last position from pp1 */ |
| 164085 | 164126 | sqlite3_int64 i2 = 0; /* Last position from pp2 */ |
| @@ -165085,22 +165126,10 @@ | ||
| 165085 | 165126 | } |
| 165086 | 165127 | assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); |
| 165087 | 165128 | return rc; |
| 165088 | 165129 | } |
| 165089 | 165130 | |
| 165090 | -/* | |
| 165091 | -** The following are copied from sqliteInt.h. | |
| 165092 | -** | |
| 165093 | -** Constants for the largest and smallest possible 64-bit signed integers. | |
| 165094 | -** These macros are designed to work correctly on both 32-bit and 64-bit | |
| 165095 | -** compilers. | |
| 165096 | -*/ | |
| 165097 | -#ifndef SQLITE_AMALGAMATION | |
| 165098 | -# define LARGEST_INT64 (0xffffffff|(((sqlite3_int64)0x7fffffff)<<32)) | |
| 165099 | -# define SMALLEST_INT64 (((sqlite3_int64)-1) - LARGEST_INT64) | |
| 165100 | -#endif | |
| 165101 | - | |
| 165102 | 165131 | /* |
| 165103 | 165132 | ** If the numeric type of argument pVal is "integer", then return it |
| 165104 | 165133 | ** converted to a 64-bit signed integer. Otherwise, return a copy of |
| 165105 | 165134 | ** the second parameter, iDefault. |
| 165106 | 165135 | */ |
| @@ -175826,18 +175855,18 @@ | ||
| 175826 | 175855 | memset(p, 0, sizeof(NodeReader)); |
| 175827 | 175856 | p->aNode = aNode; |
| 175828 | 175857 | p->nNode = nNode; |
| 175829 | 175858 | |
| 175830 | 175859 | /* Figure out if this is a leaf or an internal node. */ |
| 175831 | - if( p->aNode[0] ){ | |
| 175860 | + if( aNode && aNode[0] ){ | |
| 175832 | 175861 | /* An internal node. */ |
| 175833 | 175862 | p->iOff = 1 + sqlite3Fts3GetVarint(&p->aNode[1], &p->iChild); |
| 175834 | 175863 | }else{ |
| 175835 | 175864 | p->iOff = 1; |
| 175836 | 175865 | } |
| 175837 | 175866 | |
| 175838 | - return nodeReaderNext(p); | |
| 175867 | + return aNode ? nodeReaderNext(p) : SQLITE_OK; | |
| 175839 | 175868 | } |
| 175840 | 175869 | |
| 175841 | 175870 | /* |
| 175842 | 175871 | ** This function is called while writing an FTS segment each time a leaf o |
| 175843 | 175872 | ** node is finished and written to disk. The key (zTerm/nTerm) is guaranteed |
| @@ -176325,12 +176354,12 @@ | ||
| 176325 | 176354 | |
| 176326 | 176355 | for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){ |
| 176327 | 176356 | NodeReader reader; |
| 176328 | 176357 | pNode = &pWriter->aNodeWriter[i]; |
| 176329 | 176358 | |
| 176330 | - rc = nodeReaderInit(&reader, pNode->block.a, pNode->block.n); | |
| 176331 | - if( reader.aNode ){ | |
| 176359 | + if( pNode->block.a){ | |
| 176360 | + rc = nodeReaderInit(&reader, pNode->block.a, pNode->block.n); | |
| 176332 | 176361 | while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader); |
| 176333 | 176362 | blobGrowBuffer(&pNode->key, reader.term.n, &rc); |
| 176334 | 176363 | if( rc==SQLITE_OK ){ |
| 176335 | 176364 | memcpy(pNode->key.a, reader.term.a, reader.term.n); |
| 176336 | 176365 | pNode->key.n = reader.term.n; |
| @@ -220236,11 +220265,11 @@ | ||
| 220236 | 220265 | int nArg, /* Number of args */ |
| 220237 | 220266 | sqlite3_value **apUnused /* Function arguments */ |
| 220238 | 220267 | ){ |
| 220239 | 220268 | assert( nArg==0 ); |
| 220240 | 220269 | UNUSED_PARAM2(nArg, apUnused); |
| 220241 | - sqlite3_result_text(pCtx, "fts5: 2019-09-25 18:44:49 36d35dbd5a80dc4a149ed7409cc4b43712622fc4c6a8915b4fbb62fd1d6b7763", -1, SQLITE_TRANSIENT); | |
| 220270 | + sqlite3_result_text(pCtx, "fts5: 2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f", -1, SQLITE_TRANSIENT); | |
| 220242 | 220271 | } |
| 220243 | 220272 | |
| 220244 | 220273 | /* |
| 220245 | 220274 | ** Return true if zName is the extension on one of the shadow tables used |
| 220246 | 220275 | ** by this module. |
| @@ -225004,12 +225033,12 @@ | ||
| 225004 | 225033 | } |
| 225005 | 225034 | #endif /* SQLITE_CORE */ |
| 225006 | 225035 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 225007 | 225036 | |
| 225008 | 225037 | /************** End of stmt.c ************************************************/ |
| 225009 | -#if __LINE__!=225009 | |
| 225038 | +#if __LINE__!=225038 | |
| 225010 | 225039 | #undef SQLITE_SOURCE_ID |
| 225011 | -#define SQLITE_SOURCE_ID "2019-09-26 16:57:42 49073b7003330027303c4c776e9f85112f8b99b89f848fec3f953eba501dalt2" | |
| 225040 | +#define SQLITE_SOURCE_ID "2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6alt2" | |
| 225012 | 225041 | #endif |
| 225013 | 225042 | /* Return the source-id for this library */ |
| 225014 | 225043 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 225015 | 225044 | /************************** End of sqlite3.c ******************************/ |
| 225016 | 225045 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1165,11 +1165,11 @@ | |
| 1165 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1166 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1167 | */ |
| 1168 | #define SQLITE_VERSION "3.30.0" |
| 1169 | #define SQLITE_VERSION_NUMBER 3030000 |
| 1170 | #define SQLITE_SOURCE_ID "2019-09-26 16:57:42 49073b7003330027303c4c776e9f85112f8b99b89f848fec3f953eba501d7505" |
| 1171 | |
| 1172 | /* |
| 1173 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1174 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1175 | ** |
| @@ -16171,10 +16171,11 @@ | |
| 16171 | #define sqlite3MutexInit() SQLITE_OK |
| 16172 | #define sqlite3MutexEnd() |
| 16173 | #define MUTEX_LOGIC(X) |
| 16174 | #else |
| 16175 | #define MUTEX_LOGIC(X) X |
| 16176 | #endif /* defined(SQLITE_MUTEX_OMIT) */ |
| 16177 | |
| 16178 | /************** End of mutex.h ***********************************************/ |
| 16179 | /************** Continuing where we left off in sqliteInt.h ******************/ |
| 16180 | |
| @@ -17174,12 +17175,15 @@ | |
| 17174 | sqlite3 *db; /* The database connection */ |
| 17175 | u8 *aSortFlags; /* Sort order for each column. */ |
| 17176 | CollSeq *aColl[1]; /* Collating sequence for each term of the key */ |
| 17177 | }; |
| 17178 | |
| 17179 | #define KEYINFO_ORDER_DESC 0x01 |
| 17180 | #define KEYINFO_ORDER_BIGNULL 0x02 |
| 17181 | |
| 17182 | /* |
| 17183 | ** This object holds a record which has been parsed out into individual |
| 17184 | ** fields, for the purposes of doing a comparison. |
| 17185 | ** |
| @@ -17505,10 +17509,11 @@ | |
| 17505 | #endif |
| 17506 | int iTable; /* TK_COLUMN: cursor number of table holding column |
| 17507 | ** TK_REGISTER: register number |
| 17508 | ** TK_TRIGGER: 1 -> new, 0 -> old |
| 17509 | ** EP_Unlikely: 134217728 times likelihood |
| 17510 | ** TK_SELECT_COLUMN: Number of columns on the LHS |
| 17511 | ** TK_SELECT: 1st register of result vector */ |
| 17512 | ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid. |
| 17513 | ** TK_VARIABLE: variable number (always >= 1). |
| 17514 | ** TK_SELECT_COLUMN: column of the result vector */ |
| @@ -29226,13 +29231,14 @@ | |
| 29226 | break; |
| 29227 | } |
| 29228 | |
| 29229 | case TK_COLLATE: { |
| 29230 | /* COLLATE operators without the EP_Collate flag are intended to |
| 29231 | ** emulate collation associated with a table column. Explicit |
| 29232 | ** COLLATE operators that appear in the original SQL always have |
| 29233 | ** the EP_Collate bit set */ |
| 29234 | sqlite3TreeViewLine(pView, "%sCOLLATE %Q%s", |
| 29235 | !ExprHasProperty(pExpr, EP_Collate) ? "SOFT-" : "", |
| 29236 | pExpr->u.zToken, zFlgs); |
| 29237 | sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); |
| 29238 | break; |
| @@ -32583,17 +32589,33 @@ | |
| 32583 | /* # include <sys/ioctl.h> */ |
| 32584 | # include <sys/file.h> |
| 32585 | # include <sys/param.h> |
| 32586 | #endif /* SQLITE_ENABLE_LOCKING_STYLE */ |
| 32587 | |
| 32588 | #if defined(__APPLE__) && ((__MAC_OS_X_VERSION_MIN_REQUIRED > 1050) || \ |
| 32589 | (__IPHONE_OS_VERSION_MIN_REQUIRED > 2000)) |
| 32590 | # if (!defined(TARGET_OS_EMBEDDED) || (TARGET_OS_EMBEDDED==0)) \ |
| 32591 | && (!defined(TARGET_IPHONE_SIMULATOR) || (TARGET_IPHONE_SIMULATOR==0)) |
| 32592 | # define HAVE_GETHOSTUUID 1 |
| 32593 | # else |
| 32594 | # warning "gethostuuid() is disabled." |
| 32595 | # endif |
| 32596 | #endif |
| 32597 | |
| 32598 | |
| 32599 | #if OS_VXWORKS |
| @@ -39605,11 +39627,11 @@ | |
| 39605 | SQLITE_API int sqlite3_hostid_num = 0; |
| 39606 | #endif |
| 39607 | |
| 39608 | #define PROXY_HOSTIDLEN 16 /* conch file host id length */ |
| 39609 | |
| 39610 | #ifdef HAVE_GETHOSTUUID |
| 39611 | /* Not always defined in the headers as it ought to be */ |
| 39612 | extern int gethostuuid(uuid_t id, const struct timespec *wait); |
| 39613 | #endif |
| 39614 | |
| 39615 | /* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN |
| @@ -39616,11 +39638,11 @@ | |
| 39616 | ** bytes of writable memory. |
| 39617 | */ |
| 39618 | static int proxyGetHostID(unsigned char *pHostID, int *pError){ |
| 39619 | assert(PROXY_HOSTIDLEN == sizeof(uuid_t)); |
| 39620 | memset(pHostID, 0, PROXY_HOSTIDLEN); |
| 39621 | #ifdef HAVE_GETHOSTUUID |
| 39622 | { |
| 39623 | struct timespec timeout = {1, 0}; /* 1 sec timeout */ |
| 39624 | if( gethostuuid(pHostID, &timeout) ){ |
| 39625 | int err = errno; |
| 39626 | if( pError ){ |
| @@ -84381,11 +84403,11 @@ | |
| 84381 | printf(" ir:%lld", p->u.i); |
| 84382 | }else if( p->flags & MEM_Int ){ |
| 84383 | printf(" i:%lld", p->u.i); |
| 84384 | #ifndef SQLITE_OMIT_FLOATING_POINT |
| 84385 | }else if( p->flags & MEM_Real ){ |
| 84386 | printf(" r:%g", p->u.r); |
| 84387 | #endif |
| 84388 | }else if( sqlite3VdbeMemIsRowSet(p) ){ |
| 84389 | printf(" (rowset)"); |
| 84390 | }else{ |
| 84391 | char zBuf[200]; |
| @@ -102445,11 +102467,12 @@ | |
| 102445 | && pA->op!=TK_TRUEFALSE |
| 102446 | && (combinedFlags & EP_Reduced)==0 |
| 102447 | ){ |
| 102448 | if( pA->iColumn!=pB->iColumn ) return 2; |
| 102449 | if( pA->op2!=pB->op2 ) return 2; |
| 102450 | if( pA->iTable!=pB->iTable |
| 102451 | && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2; |
| 102452 | } |
| 102453 | } |
| 102454 | return 0; |
| 102455 | } |
| @@ -110436,11 +110459,12 @@ | |
| 110436 | goto exit_drop_table; |
| 110437 | } |
| 110438 | } |
| 110439 | #endif |
| 110440 | if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 |
| 110441 | && sqlite3StrNICmp(pTab->zName, "sqlite_stat", 11)!=0 ){ |
| 110442 | sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName); |
| 110443 | goto exit_drop_table; |
| 110444 | } |
| 110445 | |
| 110446 | #ifndef SQLITE_OMIT_VIEW |
| @@ -121079,11 +121103,15 @@ | |
| 121079 | #endif |
| 121080 | /* Version 3.28.0 and later */ |
| 121081 | sqlite3_stmt_isexplain, |
| 121082 | sqlite3_value_frombind, |
| 121083 | /* Version 3.30.0 and later */ |
| 121084 | sqlite3_drop_modules, |
| 121085 | }; |
| 121086 | |
| 121087 | /* |
| 121088 | ** Attempt to load an SQLite extension library contained in the file |
| 121089 | ** zFile. The entry point is zProc. zProc may be 0 in which case a |
| @@ -162211,10 +162239,22 @@ | |
| 162211 | #ifndef SQLITE_CORE |
| 162212 | /* # include "sqlite3ext.h" */ |
| 162213 | SQLITE_EXTENSION_INIT1 |
| 162214 | #endif |
| 162215 | |
| 162216 | static int fts3EvalNext(Fts3Cursor *pCsr); |
| 162217 | static int fts3EvalStart(Fts3Cursor *pCsr); |
| 162218 | static int fts3TermSegReaderCursor( |
| 162219 | Fts3Cursor *, const char *, int, int, Fts3MultiSegReader **); |
| 162220 | |
| @@ -163989,14 +164029,15 @@ | |
| 163989 | } |
| 163990 | *ppPoslist = pEnd; |
| 163991 | } |
| 163992 | |
| 163993 | /* |
| 163994 | ** Value used to signify the end of an position-list. This is safe because |
| 163995 | ** it is not possible to have a document with 2^31 terms. |
| 163996 | */ |
| 163997 | #define POSITION_LIST_END 0x7fffffff |
| 163998 | |
| 163999 | /* |
| 164000 | ** This function is used to help parse position-lists. When this function is |
| 164001 | ** called, *pp may point to the start of the next varint in the position-list |
| 164002 | ** being parsed, or it may point to 1 byte past the end of the position-list |
| @@ -164068,18 +164109,18 @@ | |
| 164068 | |
| 164069 | if( *p1==POS_COLUMN ){ |
| 164070 | fts3GetVarint32(&p1[1], &iCol1); |
| 164071 | if( iCol1==0 ) return FTS_CORRUPT_VTAB; |
| 164072 | } |
| 164073 | else if( *p1==POS_END ) iCol1 = POSITION_LIST_END; |
| 164074 | else iCol1 = 0; |
| 164075 | |
| 164076 | if( *p2==POS_COLUMN ){ |
| 164077 | fts3GetVarint32(&p2[1], &iCol2); |
| 164078 | if( iCol2==0 ) return FTS_CORRUPT_VTAB; |
| 164079 | } |
| 164080 | else if( *p2==POS_END ) iCol2 = POSITION_LIST_END; |
| 164081 | else iCol2 = 0; |
| 164082 | |
| 164083 | if( iCol1==iCol2 ){ |
| 164084 | sqlite3_int64 i1 = 0; /* Last position from pp1 */ |
| 164085 | sqlite3_int64 i2 = 0; /* Last position from pp2 */ |
| @@ -165085,22 +165126,10 @@ | |
| 165085 | } |
| 165086 | assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); |
| 165087 | return rc; |
| 165088 | } |
| 165089 | |
| 165090 | /* |
| 165091 | ** The following are copied from sqliteInt.h. |
| 165092 | ** |
| 165093 | ** Constants for the largest and smallest possible 64-bit signed integers. |
| 165094 | ** These macros are designed to work correctly on both 32-bit and 64-bit |
| 165095 | ** compilers. |
| 165096 | */ |
| 165097 | #ifndef SQLITE_AMALGAMATION |
| 165098 | # define LARGEST_INT64 (0xffffffff|(((sqlite3_int64)0x7fffffff)<<32)) |
| 165099 | # define SMALLEST_INT64 (((sqlite3_int64)-1) - LARGEST_INT64) |
| 165100 | #endif |
| 165101 | |
| 165102 | /* |
| 165103 | ** If the numeric type of argument pVal is "integer", then return it |
| 165104 | ** converted to a 64-bit signed integer. Otherwise, return a copy of |
| 165105 | ** the second parameter, iDefault. |
| 165106 | */ |
| @@ -175826,18 +175855,18 @@ | |
| 175826 | memset(p, 0, sizeof(NodeReader)); |
| 175827 | p->aNode = aNode; |
| 175828 | p->nNode = nNode; |
| 175829 | |
| 175830 | /* Figure out if this is a leaf or an internal node. */ |
| 175831 | if( p->aNode[0] ){ |
| 175832 | /* An internal node. */ |
| 175833 | p->iOff = 1 + sqlite3Fts3GetVarint(&p->aNode[1], &p->iChild); |
| 175834 | }else{ |
| 175835 | p->iOff = 1; |
| 175836 | } |
| 175837 | |
| 175838 | return nodeReaderNext(p); |
| 175839 | } |
| 175840 | |
| 175841 | /* |
| 175842 | ** This function is called while writing an FTS segment each time a leaf o |
| 175843 | ** node is finished and written to disk. The key (zTerm/nTerm) is guaranteed |
| @@ -176325,12 +176354,12 @@ | |
| 176325 | |
| 176326 | for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){ |
| 176327 | NodeReader reader; |
| 176328 | pNode = &pWriter->aNodeWriter[i]; |
| 176329 | |
| 176330 | rc = nodeReaderInit(&reader, pNode->block.a, pNode->block.n); |
| 176331 | if( reader.aNode ){ |
| 176332 | while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader); |
| 176333 | blobGrowBuffer(&pNode->key, reader.term.n, &rc); |
| 176334 | if( rc==SQLITE_OK ){ |
| 176335 | memcpy(pNode->key.a, reader.term.a, reader.term.n); |
| 176336 | pNode->key.n = reader.term.n; |
| @@ -220236,11 +220265,11 @@ | |
| 220236 | int nArg, /* Number of args */ |
| 220237 | sqlite3_value **apUnused /* Function arguments */ |
| 220238 | ){ |
| 220239 | assert( nArg==0 ); |
| 220240 | UNUSED_PARAM2(nArg, apUnused); |
| 220241 | sqlite3_result_text(pCtx, "fts5: 2019-09-25 18:44:49 36d35dbd5a80dc4a149ed7409cc4b43712622fc4c6a8915b4fbb62fd1d6b7763", -1, SQLITE_TRANSIENT); |
| 220242 | } |
| 220243 | |
| 220244 | /* |
| 220245 | ** Return true if zName is the extension on one of the shadow tables used |
| 220246 | ** by this module. |
| @@ -225004,12 +225033,12 @@ | |
| 225004 | } |
| 225005 | #endif /* SQLITE_CORE */ |
| 225006 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 225007 | |
| 225008 | /************** End of stmt.c ************************************************/ |
| 225009 | #if __LINE__!=225009 |
| 225010 | #undef SQLITE_SOURCE_ID |
| 225011 | #define SQLITE_SOURCE_ID "2019-09-26 16:57:42 49073b7003330027303c4c776e9f85112f8b99b89f848fec3f953eba501dalt2" |
| 225012 | #endif |
| 225013 | /* Return the source-id for this library */ |
| 225014 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 225015 | /************************** End of sqlite3.c ******************************/ |
| 225016 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1165,11 +1165,11 @@ | |
| 1165 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 1166 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 1167 | */ |
| 1168 | #define SQLITE_VERSION "3.30.0" |
| 1169 | #define SQLITE_VERSION_NUMBER 3030000 |
| 1170 | #define SQLITE_SOURCE_ID "2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f" |
| 1171 | |
| 1172 | /* |
| 1173 | ** CAPI3REF: Run-Time Library Version Numbers |
| 1174 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 1175 | ** |
| @@ -16171,10 +16171,11 @@ | |
| 16171 | #define sqlite3MutexInit() SQLITE_OK |
| 16172 | #define sqlite3MutexEnd() |
| 16173 | #define MUTEX_LOGIC(X) |
| 16174 | #else |
| 16175 | #define MUTEX_LOGIC(X) X |
| 16176 | SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*); |
| 16177 | #endif /* defined(SQLITE_MUTEX_OMIT) */ |
| 16178 | |
| 16179 | /************** End of mutex.h ***********************************************/ |
| 16180 | /************** Continuing where we left off in sqliteInt.h ******************/ |
| 16181 | |
| @@ -17174,12 +17175,15 @@ | |
| 17175 | sqlite3 *db; /* The database connection */ |
| 17176 | u8 *aSortFlags; /* Sort order for each column. */ |
| 17177 | CollSeq *aColl[1]; /* Collating sequence for each term of the key */ |
| 17178 | }; |
| 17179 | |
| 17180 | /* |
| 17181 | ** Allowed bit values for entries in the KeyInfo.aSortFlags[] array. |
| 17182 | */ |
| 17183 | #define KEYINFO_ORDER_DESC 0x01 /* DESC sort order */ |
| 17184 | #define KEYINFO_ORDER_BIGNULL 0x02 /* NULL is larger than any other value */ |
| 17185 | |
| 17186 | /* |
| 17187 | ** This object holds a record which has been parsed out into individual |
| 17188 | ** fields, for the purposes of doing a comparison. |
| 17189 | ** |
| @@ -17505,10 +17509,11 @@ | |
| 17509 | #endif |
| 17510 | int iTable; /* TK_COLUMN: cursor number of table holding column |
| 17511 | ** TK_REGISTER: register number |
| 17512 | ** TK_TRIGGER: 1 -> new, 0 -> old |
| 17513 | ** EP_Unlikely: 134217728 times likelihood |
| 17514 | ** TK_IN: ephemerial table holding RHS |
| 17515 | ** TK_SELECT_COLUMN: Number of columns on the LHS |
| 17516 | ** TK_SELECT: 1st register of result vector */ |
| 17517 | ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid. |
| 17518 | ** TK_VARIABLE: variable number (always >= 1). |
| 17519 | ** TK_SELECT_COLUMN: column of the result vector */ |
| @@ -29226,13 +29231,14 @@ | |
| 29231 | break; |
| 29232 | } |
| 29233 | |
| 29234 | case TK_COLLATE: { |
| 29235 | /* COLLATE operators without the EP_Collate flag are intended to |
| 29236 | ** emulate collation associated with a table column. These show |
| 29237 | ** up in the treeview output as "SOFT-COLLATE". Explicit COLLATE |
| 29238 | ** operators that appear in the original SQL always have the |
| 29239 | ** EP_Collate bit set and appear in treeview output as just "COLLATE" */ |
| 29240 | sqlite3TreeViewLine(pView, "%sCOLLATE %Q%s", |
| 29241 | !ExprHasProperty(pExpr, EP_Collate) ? "SOFT-" : "", |
| 29242 | pExpr->u.zToken, zFlgs); |
| 29243 | sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); |
| 29244 | break; |
| @@ -32583,17 +32589,33 @@ | |
| 32589 | /* # include <sys/ioctl.h> */ |
| 32590 | # include <sys/file.h> |
| 32591 | # include <sys/param.h> |
| 32592 | #endif /* SQLITE_ENABLE_LOCKING_STYLE */ |
| 32593 | |
| 32594 | /* |
| 32595 | ** Try to determine if gethostuuid() is available based on standard |
| 32596 | ** macros. This might sometimes compute the wrong value for some |
| 32597 | ** obscure platforms. For those cases, simply compile with one of |
| 32598 | ** the following: |
| 32599 | ** |
| 32600 | ** -DHAVE_GETHOSTUUID=0 |
| 32601 | ** -DHAVE_GETHOSTUUID=1 |
| 32602 | ** |
| 32603 | ** None if this matters except when building on Apple products with |
| 32604 | ** -DSQLITE_ENABLE_LOCKING_STYLE. |
| 32605 | */ |
| 32606 | #ifndef HAVE_GETHOSTUUID |
| 32607 | # define HAVE_GETHOSTUUID 0 |
| 32608 | # if defined(__APPLE__) && ((__MAC_OS_X_VERSION_MIN_REQUIRED > 1050) || \ |
| 32609 | (__IPHONE_OS_VERSION_MIN_REQUIRED > 2000)) |
| 32610 | # if (!defined(TARGET_OS_EMBEDDED) || (TARGET_OS_EMBEDDED==0)) \ |
| 32611 | && (!defined(TARGET_IPHONE_SIMULATOR) || (TARGET_IPHONE_SIMULATOR==0)) |
| 32612 | # undef HAVE_GETHOSTUUID |
| 32613 | # define HAVE_GETHOSTUUID 1 |
| 32614 | # else |
| 32615 | # warning "gethostuuid() is disabled." |
| 32616 | # endif |
| 32617 | # endif |
| 32618 | #endif |
| 32619 | |
| 32620 | |
| 32621 | #if OS_VXWORKS |
| @@ -39605,11 +39627,11 @@ | |
| 39627 | SQLITE_API int sqlite3_hostid_num = 0; |
| 39628 | #endif |
| 39629 | |
| 39630 | #define PROXY_HOSTIDLEN 16 /* conch file host id length */ |
| 39631 | |
| 39632 | #if HAVE_GETHOSTUUID |
| 39633 | /* Not always defined in the headers as it ought to be */ |
| 39634 | extern int gethostuuid(uuid_t id, const struct timespec *wait); |
| 39635 | #endif |
| 39636 | |
| 39637 | /* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN |
| @@ -39616,11 +39638,11 @@ | |
| 39638 | ** bytes of writable memory. |
| 39639 | */ |
| 39640 | static int proxyGetHostID(unsigned char *pHostID, int *pError){ |
| 39641 | assert(PROXY_HOSTIDLEN == sizeof(uuid_t)); |
| 39642 | memset(pHostID, 0, PROXY_HOSTIDLEN); |
| 39643 | #if HAVE_GETHOSTUUID |
| 39644 | { |
| 39645 | struct timespec timeout = {1, 0}; /* 1 sec timeout */ |
| 39646 | if( gethostuuid(pHostID, &timeout) ){ |
| 39647 | int err = errno; |
| 39648 | if( pError ){ |
| @@ -84381,11 +84403,11 @@ | |
| 84403 | printf(" ir:%lld", p->u.i); |
| 84404 | }else if( p->flags & MEM_Int ){ |
| 84405 | printf(" i:%lld", p->u.i); |
| 84406 | #ifndef SQLITE_OMIT_FLOATING_POINT |
| 84407 | }else if( p->flags & MEM_Real ){ |
| 84408 | printf(" r:%.17g", p->u.r); |
| 84409 | #endif |
| 84410 | }else if( sqlite3VdbeMemIsRowSet(p) ){ |
| 84411 | printf(" (rowset)"); |
| 84412 | }else{ |
| 84413 | char zBuf[200]; |
| @@ -102445,11 +102467,12 @@ | |
| 102467 | && pA->op!=TK_TRUEFALSE |
| 102468 | && (combinedFlags & EP_Reduced)==0 |
| 102469 | ){ |
| 102470 | if( pA->iColumn!=pB->iColumn ) return 2; |
| 102471 | if( pA->op2!=pB->op2 ) return 2; |
| 102472 | if( pA->op!=TK_IN |
| 102473 | && pA->iTable!=pB->iTable |
| 102474 | && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2; |
| 102475 | } |
| 102476 | } |
| 102477 | return 0; |
| 102478 | } |
| @@ -110436,11 +110459,12 @@ | |
| 110459 | goto exit_drop_table; |
| 110460 | } |
| 110461 | } |
| 110462 | #endif |
| 110463 | if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 |
| 110464 | && sqlite3StrNICmp(pTab->zName+7, "stat", 4)!=0 |
| 110465 | && sqlite3StrNICmp(pTab->zName+7, "parameters", 10)!=0 ){ |
| 110466 | sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName); |
| 110467 | goto exit_drop_table; |
| 110468 | } |
| 110469 | |
| 110470 | #ifndef SQLITE_OMIT_VIEW |
| @@ -121079,11 +121103,15 @@ | |
| 121103 | #endif |
| 121104 | /* Version 3.28.0 and later */ |
| 121105 | sqlite3_stmt_isexplain, |
| 121106 | sqlite3_value_frombind, |
| 121107 | /* Version 3.30.0 and later */ |
| 121108 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 121109 | sqlite3_drop_modules, |
| 121110 | #else |
| 121111 | 0, |
| 121112 | #endif |
| 121113 | }; |
| 121114 | |
| 121115 | /* |
| 121116 | ** Attempt to load an SQLite extension library contained in the file |
| 121117 | ** zFile. The entry point is zProc. zProc may be 0 in which case a |
| @@ -162211,10 +162239,22 @@ | |
| 162239 | #ifndef SQLITE_CORE |
| 162240 | /* # include "sqlite3ext.h" */ |
| 162241 | SQLITE_EXTENSION_INIT1 |
| 162242 | #endif |
| 162243 | |
| 162244 | /* |
| 162245 | ** The following are copied from sqliteInt.h. |
| 162246 | ** |
| 162247 | ** Constants for the largest and smallest possible 64-bit signed integers. |
| 162248 | ** These macros are designed to work correctly on both 32-bit and 64-bit |
| 162249 | ** compilers. |
| 162250 | */ |
| 162251 | #ifndef SQLITE_AMALGAMATION |
| 162252 | # define LARGEST_INT64 (0xffffffff|(((sqlite3_int64)0x7fffffff)<<32)) |
| 162253 | # define SMALLEST_INT64 (((sqlite3_int64)-1) - LARGEST_INT64) |
| 162254 | #endif |
| 162255 | |
| 162256 | static int fts3EvalNext(Fts3Cursor *pCsr); |
| 162257 | static int fts3EvalStart(Fts3Cursor *pCsr); |
| 162258 | static int fts3TermSegReaderCursor( |
| 162259 | Fts3Cursor *, const char *, int, int, Fts3MultiSegReader **); |
| 162260 | |
| @@ -163989,14 +164029,15 @@ | |
| 164029 | } |
| 164030 | *ppPoslist = pEnd; |
| 164031 | } |
| 164032 | |
| 164033 | /* |
| 164034 | ** Value used to signify the end of an position-list. This must be |
| 164035 | ** as large or larger than any value that might appear on the |
| 164036 | ** position-list, even a position list that has been corrupted. |
| 164037 | */ |
| 164038 | #define POSITION_LIST_END LARGEST_INT64 |
| 164039 | |
| 164040 | /* |
| 164041 | ** This function is used to help parse position-lists. When this function is |
| 164042 | ** called, *pp may point to the start of the next varint in the position-list |
| 164043 | ** being parsed, or it may point to 1 byte past the end of the position-list |
| @@ -164068,18 +164109,18 @@ | |
| 164109 | |
| 164110 | if( *p1==POS_COLUMN ){ |
| 164111 | fts3GetVarint32(&p1[1], &iCol1); |
| 164112 | if( iCol1==0 ) return FTS_CORRUPT_VTAB; |
| 164113 | } |
| 164114 | else if( *p1==POS_END ) iCol1 = 0x7fffffff; |
| 164115 | else iCol1 = 0; |
| 164116 | |
| 164117 | if( *p2==POS_COLUMN ){ |
| 164118 | fts3GetVarint32(&p2[1], &iCol2); |
| 164119 | if( iCol2==0 ) return FTS_CORRUPT_VTAB; |
| 164120 | } |
| 164121 | else if( *p2==POS_END ) iCol2 = 0x7fffffff; |
| 164122 | else iCol2 = 0; |
| 164123 | |
| 164124 | if( iCol1==iCol2 ){ |
| 164125 | sqlite3_int64 i1 = 0; /* Last position from pp1 */ |
| 164126 | sqlite3_int64 i2 = 0; /* Last position from pp2 */ |
| @@ -165085,22 +165126,10 @@ | |
| 165126 | } |
| 165127 | assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); |
| 165128 | return rc; |
| 165129 | } |
| 165130 | |
| 165131 | /* |
| 165132 | ** If the numeric type of argument pVal is "integer", then return it |
| 165133 | ** converted to a 64-bit signed integer. Otherwise, return a copy of |
| 165134 | ** the second parameter, iDefault. |
| 165135 | */ |
| @@ -175826,18 +175855,18 @@ | |
| 175855 | memset(p, 0, sizeof(NodeReader)); |
| 175856 | p->aNode = aNode; |
| 175857 | p->nNode = nNode; |
| 175858 | |
| 175859 | /* Figure out if this is a leaf or an internal node. */ |
| 175860 | if( aNode && aNode[0] ){ |
| 175861 | /* An internal node. */ |
| 175862 | p->iOff = 1 + sqlite3Fts3GetVarint(&p->aNode[1], &p->iChild); |
| 175863 | }else{ |
| 175864 | p->iOff = 1; |
| 175865 | } |
| 175866 | |
| 175867 | return aNode ? nodeReaderNext(p) : SQLITE_OK; |
| 175868 | } |
| 175869 | |
| 175870 | /* |
| 175871 | ** This function is called while writing an FTS segment each time a leaf o |
| 175872 | ** node is finished and written to disk. The key (zTerm/nTerm) is guaranteed |
| @@ -176325,12 +176354,12 @@ | |
| 176354 | |
| 176355 | for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){ |
| 176356 | NodeReader reader; |
| 176357 | pNode = &pWriter->aNodeWriter[i]; |
| 176358 | |
| 176359 | if( pNode->block.a){ |
| 176360 | rc = nodeReaderInit(&reader, pNode->block.a, pNode->block.n); |
| 176361 | while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader); |
| 176362 | blobGrowBuffer(&pNode->key, reader.term.n, &rc); |
| 176363 | if( rc==SQLITE_OK ){ |
| 176364 | memcpy(pNode->key.a, reader.term.a, reader.term.n); |
| 176365 | pNode->key.n = reader.term.n; |
| @@ -220236,11 +220265,11 @@ | |
| 220265 | int nArg, /* Number of args */ |
| 220266 | sqlite3_value **apUnused /* Function arguments */ |
| 220267 | ){ |
| 220268 | assert( nArg==0 ); |
| 220269 | UNUSED_PARAM2(nArg, apUnused); |
| 220270 | sqlite3_result_text(pCtx, "fts5: 2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f", -1, SQLITE_TRANSIENT); |
| 220271 | } |
| 220272 | |
| 220273 | /* |
| 220274 | ** Return true if zName is the extension on one of the shadow tables used |
| 220275 | ** by this module. |
| @@ -225004,12 +225033,12 @@ | |
| 225033 | } |
| 225034 | #endif /* SQLITE_CORE */ |
| 225035 | #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ |
| 225036 | |
| 225037 | /************** End of stmt.c ************************************************/ |
| 225038 | #if __LINE__!=225038 |
| 225039 | #undef SQLITE_SOURCE_ID |
| 225040 | #define SQLITE_SOURCE_ID "2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6alt2" |
| 225041 | #endif |
| 225042 | /* Return the source-id for this library */ |
| 225043 | SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } |
| 225044 | /************************** End of sqlite3.c ******************************/ |
| 225045 |
+1
-1
| --- src/sqlite3.h | ||
| +++ src/sqlite3.h | ||
| @@ -123,11 +123,11 @@ | ||
| 123 | 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | 125 | */ |
| 126 | 126 | #define SQLITE_VERSION "3.30.0" |
| 127 | 127 | #define SQLITE_VERSION_NUMBER 3030000 |
| 128 | -#define SQLITE_SOURCE_ID "2019-09-26 16:57:42 49073b7003330027303c4c776e9f85112f8b99b89f848fec3f953eba501d7505" | |
| 128 | +#define SQLITE_SOURCE_ID "2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f" | |
| 129 | 129 | |
| 130 | 130 | /* |
| 131 | 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | 133 | ** |
| 134 | 134 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -123,11 +123,11 @@ | |
| 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | */ |
| 126 | #define SQLITE_VERSION "3.30.0" |
| 127 | #define SQLITE_VERSION_NUMBER 3030000 |
| 128 | #define SQLITE_SOURCE_ID "2019-09-26 16:57:42 49073b7003330027303c4c776e9f85112f8b99b89f848fec3f953eba501d7505" |
| 129 | |
| 130 | /* |
| 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | ** |
| 134 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -123,11 +123,11 @@ | |
| 123 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 124 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 125 | */ |
| 126 | #define SQLITE_VERSION "3.30.0" |
| 127 | #define SQLITE_VERSION_NUMBER 3030000 |
| 128 | #define SQLITE_SOURCE_ID "2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f" |
| 129 | |
| 130 | /* |
| 131 | ** CAPI3REF: Run-Time Library Version Numbers |
| 132 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 133 | ** |
| 134 |
+20
-18
| --- src/wiki.c | ||
| +++ src/wiki.c | ||
| @@ -1495,10 +1495,11 @@ | ||
| 1495 | 1495 | || strncmp(g.argv[2],"create",n)==0 ){ |
| 1496 | 1496 | const char *zPageName; /* page name */ |
| 1497 | 1497 | Blob content; /* Input content */ |
| 1498 | 1498 | int rid = 0; |
| 1499 | 1499 | Manifest *pWiki = 0; /* Parsed wiki page content */ |
| 1500 | + const int isCreate = 'r'==g.argv[2][1] /* else "commit" */; | |
| 1500 | 1501 | const char *zMimeType = find_option("mimetype", "M", 1); |
| 1501 | 1502 | const char *zETime = find_option("technote", "t", 1); |
| 1502 | 1503 | const char *zTags = find_option("technote-tags", NULL, 1); |
| 1503 | 1504 | const char *zClr = find_option("technote-bgcolor", NULL, 1); |
| 1504 | 1505 | if( g.argc!=4 && g.argc!=5 ){ |
| @@ -1509,42 +1510,43 @@ | ||
| 1509 | 1510 | zPageName = g.argv[3]; |
| 1510 | 1511 | if( g.argc==4 ){ |
| 1511 | 1512 | blob_read_from_channel(&content, stdin, -1); |
| 1512 | 1513 | }else{ |
| 1513 | 1514 | blob_read_from_file(&content, g.argv[4], ExtFILE); |
| 1515 | + } | |
| 1516 | + if ( !zETime ){ | |
| 1517 | + rid = db_int(0, "SELECT x.rid FROM tag t, tagxref x" | |
| 1518 | + " WHERE x.tagid=t.tagid AND t.tagname='wiki-%q'" | |
| 1519 | + " ORDER BY x.mtime DESC LIMIT 1", | |
| 1520 | + zPageName | |
| 1521 | + ); | |
| 1522 | + if( rid>0 ){ | |
| 1523 | + pWiki = manifest_get(rid, CFTYPE_WIKI, 0); | |
| 1524 | + } | |
| 1525 | + }else{ | |
| 1526 | + rid = wiki_technote_to_rid(zETime); | |
| 1527 | + if( rid>0 ){ | |
| 1528 | + pWiki = manifest_get(rid, CFTYPE_EVENT, 0); | |
| 1529 | + } | |
| 1514 | 1530 | } |
| 1515 | 1531 | if( !zMimeType || !*zMimeType ){ |
| 1516 | 1532 | /* Try to deduce the mime type based on the prior version. */ |
| 1517 | - if ( !zETime ){ | |
| 1518 | - rid = db_int(0, "SELECT x.rid FROM tag t, tagxref x" | |
| 1519 | - " WHERE x.tagid=t.tagid AND t.tagname='wiki-%q'" | |
| 1520 | - " ORDER BY x.mtime DESC LIMIT 1", | |
| 1521 | - zPageName | |
| 1522 | - ); | |
| 1523 | - if( rid>0 && (pWiki = manifest_get(rid, CFTYPE_WIKI, 0))!=0 | |
| 1524 | - && (pWiki->zMimetype && *pWiki->zMimetype) ){ | |
| 1525 | - zMimeType = pWiki->zMimetype; | |
| 1526 | - } | |
| 1527 | - }else{ | |
| 1528 | - rid = wiki_technote_to_rid(zETime); | |
| 1529 | - if( rid>0 && (pWiki = manifest_get(rid, CFTYPE_EVENT, 0))!=0 | |
| 1530 | - && (pWiki->zMimetype && *pWiki->zMimetype) ){ | |
| 1531 | - zMimeType = pWiki->zMimetype; | |
| 1532 | - } | |
| 1533 | + if( pWiki!=0 && (pWiki->zMimetype && *pWiki->zMimetype) ){ | |
| 1534 | + zMimeType = pWiki->zMimetype; | |
| 1533 | 1535 | } |
| 1534 | 1536 | }else{ |
| 1535 | 1537 | zMimeType = wiki_filter_mimetypes(zMimeType); |
| 1536 | 1538 | } |
| 1537 | - if( g.argv[2][1]=='r' && rid>0 ){ | |
| 1539 | + if( isCreate && rid>0 ){ | |
| 1538 | 1540 | if ( !zETime ){ |
| 1539 | 1541 | fossil_fatal("wiki page %s already exists", zPageName); |
| 1540 | 1542 | }else{ |
| 1541 | 1543 | /* Creating a tech note with same timestamp is permitted |
| 1542 | 1544 | and should create a new tech note */ |
| 1543 | 1545 | rid = 0; |
| 1544 | 1546 | } |
| 1545 | - }else if( g.argv[2][1]=='o' && rid == 0 ){ | |
| 1547 | + }else if( !isCreate && rid == 0 ){ | |
| 1546 | 1548 | if ( !zETime ){ |
| 1547 | 1549 | fossil_fatal("no such wiki page: %s", zPageName); |
| 1548 | 1550 | }else{ |
| 1549 | 1551 | fossil_fatal("no such tech note: %s", zETime); |
| 1550 | 1552 | } |
| 1551 | 1553 |
| --- src/wiki.c | |
| +++ src/wiki.c | |
| @@ -1495,10 +1495,11 @@ | |
| 1495 | || strncmp(g.argv[2],"create",n)==0 ){ |
| 1496 | const char *zPageName; /* page name */ |
| 1497 | Blob content; /* Input content */ |
| 1498 | int rid = 0; |
| 1499 | Manifest *pWiki = 0; /* Parsed wiki page content */ |
| 1500 | const char *zMimeType = find_option("mimetype", "M", 1); |
| 1501 | const char *zETime = find_option("technote", "t", 1); |
| 1502 | const char *zTags = find_option("technote-tags", NULL, 1); |
| 1503 | const char *zClr = find_option("technote-bgcolor", NULL, 1); |
| 1504 | if( g.argc!=4 && g.argc!=5 ){ |
| @@ -1509,42 +1510,43 @@ | |
| 1509 | zPageName = g.argv[3]; |
| 1510 | if( g.argc==4 ){ |
| 1511 | blob_read_from_channel(&content, stdin, -1); |
| 1512 | }else{ |
| 1513 | blob_read_from_file(&content, g.argv[4], ExtFILE); |
| 1514 | } |
| 1515 | if( !zMimeType || !*zMimeType ){ |
| 1516 | /* Try to deduce the mime type based on the prior version. */ |
| 1517 | if ( !zETime ){ |
| 1518 | rid = db_int(0, "SELECT x.rid FROM tag t, tagxref x" |
| 1519 | " WHERE x.tagid=t.tagid AND t.tagname='wiki-%q'" |
| 1520 | " ORDER BY x.mtime DESC LIMIT 1", |
| 1521 | zPageName |
| 1522 | ); |
| 1523 | if( rid>0 && (pWiki = manifest_get(rid, CFTYPE_WIKI, 0))!=0 |
| 1524 | && (pWiki->zMimetype && *pWiki->zMimetype) ){ |
| 1525 | zMimeType = pWiki->zMimetype; |
| 1526 | } |
| 1527 | }else{ |
| 1528 | rid = wiki_technote_to_rid(zETime); |
| 1529 | if( rid>0 && (pWiki = manifest_get(rid, CFTYPE_EVENT, 0))!=0 |
| 1530 | && (pWiki->zMimetype && *pWiki->zMimetype) ){ |
| 1531 | zMimeType = pWiki->zMimetype; |
| 1532 | } |
| 1533 | } |
| 1534 | }else{ |
| 1535 | zMimeType = wiki_filter_mimetypes(zMimeType); |
| 1536 | } |
| 1537 | if( g.argv[2][1]=='r' && rid>0 ){ |
| 1538 | if ( !zETime ){ |
| 1539 | fossil_fatal("wiki page %s already exists", zPageName); |
| 1540 | }else{ |
| 1541 | /* Creating a tech note with same timestamp is permitted |
| 1542 | and should create a new tech note */ |
| 1543 | rid = 0; |
| 1544 | } |
| 1545 | }else if( g.argv[2][1]=='o' && rid == 0 ){ |
| 1546 | if ( !zETime ){ |
| 1547 | fossil_fatal("no such wiki page: %s", zPageName); |
| 1548 | }else{ |
| 1549 | fossil_fatal("no such tech note: %s", zETime); |
| 1550 | } |
| 1551 |
| --- src/wiki.c | |
| +++ src/wiki.c | |
| @@ -1495,10 +1495,11 @@ | |
| 1495 | || strncmp(g.argv[2],"create",n)==0 ){ |
| 1496 | const char *zPageName; /* page name */ |
| 1497 | Blob content; /* Input content */ |
| 1498 | int rid = 0; |
| 1499 | Manifest *pWiki = 0; /* Parsed wiki page content */ |
| 1500 | const int isCreate = 'r'==g.argv[2][1] /* else "commit" */; |
| 1501 | const char *zMimeType = find_option("mimetype", "M", 1); |
| 1502 | const char *zETime = find_option("technote", "t", 1); |
| 1503 | const char *zTags = find_option("technote-tags", NULL, 1); |
| 1504 | const char *zClr = find_option("technote-bgcolor", NULL, 1); |
| 1505 | if( g.argc!=4 && g.argc!=5 ){ |
| @@ -1509,42 +1510,43 @@ | |
| 1510 | zPageName = g.argv[3]; |
| 1511 | if( g.argc==4 ){ |
| 1512 | blob_read_from_channel(&content, stdin, -1); |
| 1513 | }else{ |
| 1514 | blob_read_from_file(&content, g.argv[4], ExtFILE); |
| 1515 | } |
| 1516 | if ( !zETime ){ |
| 1517 | rid = db_int(0, "SELECT x.rid FROM tag t, tagxref x" |
| 1518 | " WHERE x.tagid=t.tagid AND t.tagname='wiki-%q'" |
| 1519 | " ORDER BY x.mtime DESC LIMIT 1", |
| 1520 | zPageName |
| 1521 | ); |
| 1522 | if( rid>0 ){ |
| 1523 | pWiki = manifest_get(rid, CFTYPE_WIKI, 0); |
| 1524 | } |
| 1525 | }else{ |
| 1526 | rid = wiki_technote_to_rid(zETime); |
| 1527 | if( rid>0 ){ |
| 1528 | pWiki = manifest_get(rid, CFTYPE_EVENT, 0); |
| 1529 | } |
| 1530 | } |
| 1531 | if( !zMimeType || !*zMimeType ){ |
| 1532 | /* Try to deduce the mime type based on the prior version. */ |
| 1533 | if( pWiki!=0 && (pWiki->zMimetype && *pWiki->zMimetype) ){ |
| 1534 | zMimeType = pWiki->zMimetype; |
| 1535 | } |
| 1536 | }else{ |
| 1537 | zMimeType = wiki_filter_mimetypes(zMimeType); |
| 1538 | } |
| 1539 | if( isCreate && rid>0 ){ |
| 1540 | if ( !zETime ){ |
| 1541 | fossil_fatal("wiki page %s already exists", zPageName); |
| 1542 | }else{ |
| 1543 | /* Creating a tech note with same timestamp is permitted |
| 1544 | and should create a new tech note */ |
| 1545 | rid = 0; |
| 1546 | } |
| 1547 | }else if( !isCreate && rid == 0 ){ |
| 1548 | if ( !zETime ){ |
| 1549 | fossil_fatal("no such wiki page: %s", zPageName); |
| 1550 | }else{ |
| 1551 | fossil_fatal("no such tech note: %s", zETime); |
| 1552 | } |
| 1553 |
+1
-1
| --- www/changes.wiki | ||
| +++ www/changes.wiki | ||
| @@ -1,9 +1,9 @@ | ||
| 1 | 1 | <title>Change Log</title> |
| 2 | 2 | |
| 3 | 3 | <a name='v2_10'></a> |
| 4 | -<h2>Changes for Version 2.10 (pending)</h2> | |
| 4 | +<h2>Changes for Version 2.10 (2019-10-04)</h2> | |
| 5 | 5 | |
| 6 | 6 | * Added support for [./serverext.wiki|CGI-based Server Extensions]. |
| 7 | 7 | * Added the [/help?cmd=repolist-skin|repolist-skin] setting used to |
| 8 | 8 | add style to repository list pages. |
| 9 | 9 | * Enhance the hierarchical display of Forum threads to do less |
| 10 | 10 | |
| 11 | 11 | ADDED www/javascript.md |
| --- www/changes.wiki | |
| +++ www/changes.wiki | |
| @@ -1,9 +1,9 @@ | |
| 1 | <title>Change Log</title> |
| 2 | |
| 3 | <a name='v2_10'></a> |
| 4 | <h2>Changes for Version 2.10 (pending)</h2> |
| 5 | |
| 6 | * Added support for [./serverext.wiki|CGI-based Server Extensions]. |
| 7 | * Added the [/help?cmd=repolist-skin|repolist-skin] setting used to |
| 8 | add style to repository list pages. |
| 9 | * Enhance the hierarchical display of Forum threads to do less |
| 10 | |
| 11 | DDED www/javascript.md |
| --- www/changes.wiki | |
| +++ www/changes.wiki | |
| @@ -1,9 +1,9 @@ | |
| 1 | <title>Change Log</title> |
| 2 | |
| 3 | <a name='v2_10'></a> |
| 4 | <h2>Changes for Version 2.10 (2019-10-04)</h2> |
| 5 | |
| 6 | * Added support for [./serverext.wiki|CGI-based Server Extensions]. |
| 7 | * Added the [/help?cmd=repolist-skin|repolist-skin] setting used to |
| 8 | add style to repository list pages. |
| 9 | * Enhance the hierarchical display of Forum threads to do less |
| 10 | |
| 11 | DDED www/javascript.md |
+223
| --- a/www/javascript.md | ||
| +++ b/www/javascript.md | ||
| @@ -0,0 +1,223 @@ | ||
| 1 | +# Use of JavaScri | |
| 2 | + | |
| 3 | +T will eded functiment project’s policy is to use JavaScript where it | |
| 4 | +helps make its web UI better, but to offer graceful fallbacks wherever | |
| 5 | +practical. The intent is that the UI be usable with JavaScript entirely | |
| 6 | +disabled. In every placeabled. In almost all places wh it is an | |
| 7 | +enhancement to provided functio another way | |
| 8 | +to accomplish a given end `vi`create We cover some of the common arguments against JavaScript | |
| 9 | +[below](#debate), JavaScript, the | |
| 10 | + rrelativelye remainder of this document will eded functio another way | |
| 11 | +to accomplish a given end `vi`create # Use of JavaScrip, editor.) If | |
| 12 | + S as it | |
| 13 | + a | |
| 14 | +...e of JavaScript in Fossil | |
| 15 | + | |
| 16 | +## Philo in Fossil | |
| 17 | + | |
| 18 | +block"></a>Blocking Javwholesale or give up on blocking | |
| 19 | +entirely, we recommend that you use] to selectively productively, | |
| 20 | +as it was intended.Use of JavaScript in Fossil | |
| 21 | + | |
| 22 | +## Philosophy & Policy | |
| 23 | + | |
| 24 | +The Fossil developmeipt in Fossil | |
| 25 | + | |
| 26 | +## Philosophy & Policy | |
| 27 | + | |
| 28 | +The Fossil development project’s�**T�[2cbsd]:snoop"></a>Fos Use of JavaScri JavaScript in Fossil | |
| 29 | + | |
| 30 | +## Philosophy & Policy | |
| 31 | + | |
| 32 | +The Fossil developmel | |
| 33 | + | |
| 34 | +## Philosophy &se JavaScript where it | |
| 35 | +helps mak, soaScript where it | |
| 36 | +helps make its web UI better, but to offer graceful fallbacks wherever | |
| 37 | +practical. The intent is that the UI be usable with JavaScript entirely | |
| 38 | +disabled. In every placeabled. In almost all places wh it is an | |
| 39 | +enhancement to provided functio another way | |
| 40 | +to accomplish a given end `vi`create We cover some of the common arguments against JavaScript | |
| 41 | +[below](#debate), stats"></a>How Many Users Ru Disabled Anyway? | |
| 42 | + | |
| 43 | +There are several studies that have directly measured the web audience | |
| 44 | + | |
| 45 | +z@2m1,13@2n3,17@2oA,10@2pL,w@2qP,1:TG@5m0,p@2re,14@2sX,4: an | |
| 46 | +z@2ti,11@2uk,8: expect | |
| 47 | +v@2vx,L@BW,n@2xF,E: to find that | |
| 48 | +r@2yJ,F: run [powerfuavaScript in Fossil | |
| 49 | + | |
| 50 | +## Philosophy & Policy | |
| 51 | + | |
| 52 | +The Fossil development project’s policy is to use JavaScript where it | |
| 53 | +helps make its web UI better, but to offer graceful fallbacks wherever | |
| 54 | +practical. The intent is that the UI be usable with JavaScript entirely | |
| 55 | +disabled. In every placeabled. In almost all places wh it is an | |
| 56 | +enhancement to provided functio another way | |
| 57 | +to accomplish a given end `vi`create We cover some of the common arguments against JavaScript | |
| 58 | +[below](#debate), JavaScript, the | |
| 59 | + rrelativelye remainder of this document will eded functio another way | |
| 60 | +to accomplish a given end `vi`create # Use of JavaScrip, editor.) If | |
| 61 | + S as it | |
| 62 | + a | |
| 63 | +...e of JavaScript in Fossil | |
| 64 | + | |
| 65 | +## Philo in Fossil | |
| 66 | + | |
| 67 | +block"></a>Blocking Javwholesale or give up on blocking | |
| 68 | +entirely, we recommend that you use] to selectively productively, | |
| 69 | +as it was intended.Use of JavaScript in Fossil | |
| 70 | + | |
| 71 | +## Philosophy & Policy | |
| 72 | + | |
| 73 | +The Fossil developmeipt in Fossil | |
| 74 | + | |
| 75 | +## Philosophy & Policy | |
| 76 | + | |
| 77 | +The Fossil development project’s�**T�[2cbsd]:snoop"></a>Fos Use of JavaScri JavaScript in Fossil | |
| 78 | + | |
| 79 | +## Philosophy & Policy | |
| 80 | + | |
| 81 | +The Fossil developmel | |
| 82 | + | |
| 83 | +## Philosophy &56Use of JavaScript in Fossil | |
| 84 | + | |
| 85 | +## Philosophy & Policy | |
| 86 | + | |
| 87 | +The Fossil development project’s policy is to use JavaScript where it | |
| 88 | +helps make its web UI better, but to offer graceful fallbacks wherever | |
| 89 | +practical. The intent is that the UI be usable with JavaScript entirely | |
| 90 | +disabled. In every placeabled. In almost all places wh it is an | |
| 91 | +enhancement to provided functio another way | |
| 92 | +to accomplish a given end `vi`create We cover some of the common arguments against JavaScript | |
| 93 | +[below](#debate), stats"></a>How Many Users Ru Disabled Anyway? | |
| 94 | + | |
| 95 | +There are several studies that have directly measured the web audience | |
| 96 | + | |
| 97 | +z@2m1,13@2n3,17@2oA,10@2pL,w@2qP,1:TG@5m0,p@2re,14@2sX,4: an | |
| 98 | +z@2ti,11@2uk,8: expect | |
| 99 | +v@2vx,L@BW,n@2xF,E: to find that | |
| 100 | +r@2yJ,F: run [powerful | |
| 101 | +j@2zS,M@2~E,7: | |
| 102 | +block J@dG,H:. We suspect thata@30J,1: | |
| 103 | +X@30u,b@31U,5:[s1]:s@3EB,1_@3F6,13@3Gj,e6@pe,1:"k@1To,1:"Nq@1Ua,1:"N@1rU,1:"Aj@1rt,1:"R@21f,1:"RJ@228,1:"d@2TV,1:"6b@2UA,1:"h@2_p,1:"9C@2aZ,1:"N@32B,4:haveS@32i,1:"As@33C,3Lk@3Hn,16p1o~;SS code to | |
| 104 | + SSabled. In every placeabled. In almost all places wh it is an | |
| 105 | +enhancement to provided functio another way | |
| 106 | +to accomplish a given end `vi`create We cover some of the common arguments against JavaScript | |
| 107 | +[below](#debate), JavaScript, the | |
| 108 | + rrelativelye remainder of this document will eded functio another way | |
| 109 | +to accomplish a given end `vi`create # Use of JavaScrip, editor.) If | |
| 110 | + new wiki | |
| 111 | + as it | |
| 112 | + a | |
| 113 | +...e of JavaScript in Fossil | |
| 114 | + | |
| 115 | +## Philo in Fossil | |
| 116 | + | |
| 117 | +block"></a>Blocking Javwholesale or give up on blocking | |
| 118 | +entirely, we recommend that you use] to selectively productively, | |
| 119 | +as it was intended.Use of JavaScript in Fossil | |
| 120 | + | |
| 121 | +## Philosophy & Policy | |
| 122 | + | |
| 123 | +The Fossil developmeipt in Fossil | |
| 124 | + | |
| 125 | +## Philosophy & Policy | |
| 126 | + | |
| 127 | +The Fossil development project’s�**T�[2cbsd]:snoop"></a>Fos Use of JavaScri JavaScript in Fossil | |
| 128 | + | |
| 129 | +## Philosophy & Policy | |
| 130 | + | |
| 131 | +The Fossil developmel | |
| 132 | + | |
| 133 | +## Philosophy &56Use of JavaScript in Fossil | |
| 134 | + | |
| 135 | +## Philosophy & Policy | |
| 136 | + | |
| 137 | +The Fossil development project’s policy is to use JavaScript where it | |
| 138 | +helps make its web UI better, but to offer graceful fallbacks wherever | |
| 139 | +practical. The intent is that the UI be usable with JavaScript entirely | |
| 140 | +disabled. In every placeabled. In almost all places wh it is an | |
| 141 | +enhancement to provided functio another way | |
| 142 | +to accomplish a given end `vi`create We cover some of the common arguments against JavaScript | |
| 143 | +[below](#debate), stats"></a>How Many Users Ru Disabled Anyway? | |
| 144 | + | |
| 145 | +There are several studies that have directly measured the web audience | |
| 146 | + | |
| 147 | +z@2m1,13@2n3,17@2oA,10@2pL,w@2qP,1:TG@5m0WYSIWYG Wiki Editor | |
| 148 | + | |
| 149 | +The Admin → Wiki → “Enable WYSIWYG Wiki Editing” toggle switches the | |
| 150 | +default plaintext editor for [Fossil wiki][fw] documents to one that | |
| 151 | +works like a basic word processor. This featuredience | |
| 152 | + | |
| 153 | +z@2m1,13@2n3,in | |
| 154 | +,w@2qP,1:TG@5m0,p@2re,14@2sX,4: button, meaning | |
| 155 | +: expect | |
| 156 | +v@2vx,L@BW,n@2xF,E: to WYSIWYG editor | |
| 157 | +E,7: | |
| 158 | +block J@dG,H:. We suspect straightforward | |
| 159 | +q@1Ua,1:"N@the UI be usableEdit your wiki documents in the default plain text | |
| 160 | +wiki editor. Fossil’s wiki and Markdown language processors were | |
| 161 | +designed to be edited that way. | |
| 162 | + | |
| 163 | +[fw31U,5:[s1]:s@3EB,1_@3F6,13@3Gj,e6@pe,1:"k@1To,1:"Nq@1Ua,1:"N@the UI be usable with JavaScript entirely | |
| 164 | +disabled. In every placeabled. provided functio in JavaScript. | |
| 165 | +([Example][mainc].)e common arguments against JavaScript | |
| 166 | +[below](#debate), JavaScript, the | |
| 167 | + rrela, or provide a patch to reload thavwholesale or give | |
| 168 | +server round-tripy &se JavaScript where it | |
| 169 | +helps mak, soaScript where it | |
| 170 | +helps make its web UI better, but to offer graceful fallbacks wherever | |
| 171 | +practical. The intent is that the UI be usable with JavaScript entirely | |
| 172 | +disabled. In every placeabled. In almost all places wh it is an | |
| 173 | +enhancement to provided functio another way | |
| 174 | +to accomplish a given end `vi`create We cover some of the common arguments against JavaScript | |
| 175 | +[below](#debate), stats"></a>How Many Users Ru Disabled Anyway? | |
| 176 | + | |
| 177 | +There are several studies that have directly measured the web audience | |
| 178 | + | |
| 179 | +z@2m1,13@2n3,17@2oA,10@2pL,w@2qP,1:TG@5m0,p@2re,14@2sX,4: an | |
| 180 | +z@2ti,11@2uk,8: expect | |
| 181 | +v@2vx,L@BW,n@2xF,E: to find that | |
| 182 | +r@2yJ,F: run [powerfuavaScript in Fossil | |
| 183 | + | |
| 184 | +## Philosophy & Policy | |
| 185 | + | |
| 186 | +The Fossil development project’s policy is to use JavaScript where it | |
| 187 | +helps make its web UI better, but to offer graceful fallbacks wherever | |
| 188 | +practical. The intent is that the UI be usable with JavaScript entirely | |
| 189 | +disabled. In every placeabled. In almost all places wh it is an | |
| 190 | +enhancement to provided functio another way | |
| 191 | +to accomplish a given end `vi`create We cover some of the common arguments against JavaScript | |
| 192 | +[below](#debate), JavaScript, the | |
| 193 | + rrelativelye remainder of this document will eded functio another way | |
| 194 | +to accomplish a given end `vi`create # Use of JavaScrip, editor.) If | |
| 195 | + S as it | |
| 196 | + a | |
| 197 | +...e of JavaScript in Fossil | |
| 198 | + | |
| 199 | +## Philo in Fossil | |
| 200 | + | |
| 201 | +block"></a>Blocking Javwholesale or give up on blocking | |
| 202 | +entirely, we recommend that you use] to selectively productively, | |
| 203 | +as it was intended.Use of JavaScript in Fossil | |
| 204 | + | |
| 205 | +## Philosophy & Policy | |
| 206 | + | |
| 207 | +The Fossil developmeipt in Fossil | |
| 208 | + | |
| 209 | +## Philosophy & Policy | |
| 210 | + | |
| 211 | +The Fossil development project’s�**T�[2cbsd]:snoop"></a>Fos Use of JavaScri JavaScript in Fossil | |
| 212 | + | |
| 213 | +## Philosophy & Policy | |
| 214 | + | |
| 215 | +The Fossil developmel | |
| 216 | + | |
| 217 | +## Philosophy &56Use of JavaScript in Fossil | |
| 218 | + | |
| 219 | +## Philosophy & Policy | |
| 220 | + | |
| 221 | +The Fossil development project’s policy is to use JavaScript where it | |
| 222 | +helps make its web UI better, but to offer graceful fallbacks wherever | |
| 223 | +practical. The intent is that the U |
| --- a/www/javascript.md | |
| +++ b/www/javascript.md | |
| @@ -0,0 +1,223 @@ | |
| --- a/www/javascript.md | |
| +++ b/www/javascript.md | |
| @@ -0,0 +1,223 @@ | |
| 1 | # Use of JavaScri |
| 2 | |
| 3 | T will eded functiment project’s policy is to use JavaScript where it |
| 4 | helps make its web UI better, but to offer graceful fallbacks wherever |
| 5 | practical. The intent is that the UI be usable with JavaScript entirely |
| 6 | disabled. In every placeabled. In almost all places wh it is an |
| 7 | enhancement to provided functio another way |
| 8 | to accomplish a given end `vi`create We cover some of the common arguments against JavaScript |
| 9 | [below](#debate), JavaScript, the |
| 10 | rrelativelye remainder of this document will eded functio another way |
| 11 | to accomplish a given end `vi`create # Use of JavaScrip, editor.) If |
| 12 | S as it |
| 13 | a |
| 14 | ...e of JavaScript in Fossil |
| 15 | |
| 16 | ## Philo in Fossil |
| 17 | |
| 18 | block"></a>Blocking Javwholesale or give up on blocking |
| 19 | entirely, we recommend that you use] to selectively productively, |
| 20 | as it was intended.Use of JavaScript in Fossil |
| 21 | |
| 22 | ## Philosophy & Policy |
| 23 | |
| 24 | The Fossil developmeipt in Fossil |
| 25 | |
| 26 | ## Philosophy & Policy |
| 27 | |
| 28 | The Fossil development project’s�**T�[2cbsd]:snoop"></a>Fos Use of JavaScri JavaScript in Fossil |
| 29 | |
| 30 | ## Philosophy & Policy |
| 31 | |
| 32 | The Fossil developmel |
| 33 | |
| 34 | ## Philosophy &se JavaScript where it |
| 35 | helps mak, soaScript where it |
| 36 | helps make its web UI better, but to offer graceful fallbacks wherever |
| 37 | practical. The intent is that the UI be usable with JavaScript entirely |
| 38 | disabled. In every placeabled. In almost all places wh it is an |
| 39 | enhancement to provided functio another way |
| 40 | to accomplish a given end `vi`create We cover some of the common arguments against JavaScript |
| 41 | [below](#debate), stats"></a>How Many Users Ru Disabled Anyway? |
| 42 | |
| 43 | There are several studies that have directly measured the web audience |
| 44 | |
| 45 | z@2m1,13@2n3,17@2oA,10@2pL,w@2qP,1:TG@5m0,p@2re,14@2sX,4: an |
| 46 | z@2ti,11@2uk,8: expect |
| 47 | v@2vx,L@BW,n@2xF,E: to find that |
| 48 | r@2yJ,F: run [powerfuavaScript in Fossil |
| 49 | |
| 50 | ## Philosophy & Policy |
| 51 | |
| 52 | The Fossil development project’s policy is to use JavaScript where it |
| 53 | helps make its web UI better, but to offer graceful fallbacks wherever |
| 54 | practical. The intent is that the UI be usable with JavaScript entirely |
| 55 | disabled. In every placeabled. In almost all places wh it is an |
| 56 | enhancement to provided functio another way |
| 57 | to accomplish a given end `vi`create We cover some of the common arguments against JavaScript |
| 58 | [below](#debate), JavaScript, the |
| 59 | rrelativelye remainder of this document will eded functio another way |
| 60 | to accomplish a given end `vi`create # Use of JavaScrip, editor.) If |
| 61 | S as it |
| 62 | a |
| 63 | ...e of JavaScript in Fossil |
| 64 | |
| 65 | ## Philo in Fossil |
| 66 | |
| 67 | block"></a>Blocking Javwholesale or give up on blocking |
| 68 | entirely, we recommend that you use] to selectively productively, |
| 69 | as it was intended.Use of JavaScript in Fossil |
| 70 | |
| 71 | ## Philosophy & Policy |
| 72 | |
| 73 | The Fossil developmeipt in Fossil |
| 74 | |
| 75 | ## Philosophy & Policy |
| 76 | |
| 77 | The Fossil development project’s�**T�[2cbsd]:snoop"></a>Fos Use of JavaScri JavaScript in Fossil |
| 78 | |
| 79 | ## Philosophy & Policy |
| 80 | |
| 81 | The Fossil developmel |
| 82 | |
| 83 | ## Philosophy &56Use of JavaScript in Fossil |
| 84 | |
| 85 | ## Philosophy & Policy |
| 86 | |
| 87 | The Fossil development project’s policy is to use JavaScript where it |
| 88 | helps make its web UI better, but to offer graceful fallbacks wherever |
| 89 | practical. The intent is that the UI be usable with JavaScript entirely |
| 90 | disabled. In every placeabled. In almost all places wh it is an |
| 91 | enhancement to provided functio another way |
| 92 | to accomplish a given end `vi`create We cover some of the common arguments against JavaScript |
| 93 | [below](#debate), stats"></a>How Many Users Ru Disabled Anyway? |
| 94 | |
| 95 | There are several studies that have directly measured the web audience |
| 96 | |
| 97 | z@2m1,13@2n3,17@2oA,10@2pL,w@2qP,1:TG@5m0,p@2re,14@2sX,4: an |
| 98 | z@2ti,11@2uk,8: expect |
| 99 | v@2vx,L@BW,n@2xF,E: to find that |
| 100 | r@2yJ,F: run [powerful |
| 101 | j@2zS,M@2~E,7: |
| 102 | block J@dG,H:. We suspect thata@30J,1: |
| 103 | X@30u,b@31U,5:[s1]:s@3EB,1_@3F6,13@3Gj,e6@pe,1:"k@1To,1:"Nq@1Ua,1:"N@1rU,1:"Aj@1rt,1:"R@21f,1:"RJ@228,1:"d@2TV,1:"6b@2UA,1:"h@2_p,1:"9C@2aZ,1:"N@32B,4:haveS@32i,1:"As@33C,3Lk@3Hn,16p1o~;SS code to |
| 104 | SSabled. In every placeabled. In almost all places wh it is an |
| 105 | enhancement to provided functio another way |
| 106 | to accomplish a given end `vi`create We cover some of the common arguments against JavaScript |
| 107 | [below](#debate), JavaScript, the |
| 108 | rrelativelye remainder of this document will eded functio another way |
| 109 | to accomplish a given end `vi`create # Use of JavaScrip, editor.) If |
| 110 | new wiki |
| 111 | as it |
| 112 | a |
| 113 | ...e of JavaScript in Fossil |
| 114 | |
| 115 | ## Philo in Fossil |
| 116 | |
| 117 | block"></a>Blocking Javwholesale or give up on blocking |
| 118 | entirely, we recommend that you use] to selectively productively, |
| 119 | as it was intended.Use of JavaScript in Fossil |
| 120 | |
| 121 | ## Philosophy & Policy |
| 122 | |
| 123 | The Fossil developmeipt in Fossil |
| 124 | |
| 125 | ## Philosophy & Policy |
| 126 | |
| 127 | The Fossil development project’s�**T�[2cbsd]:snoop"></a>Fos Use of JavaScri JavaScript in Fossil |
| 128 | |
| 129 | ## Philosophy & Policy |
| 130 | |
| 131 | The Fossil developmel |
| 132 | |
| 133 | ## Philosophy &56Use of JavaScript in Fossil |
| 134 | |
| 135 | ## Philosophy & Policy |
| 136 | |
| 137 | The Fossil development project’s policy is to use JavaScript where it |
| 138 | helps make its web UI better, but to offer graceful fallbacks wherever |
| 139 | practical. The intent is that the UI be usable with JavaScript entirely |
| 140 | disabled. In every placeabled. In almost all places wh it is an |
| 141 | enhancement to provided functio another way |
| 142 | to accomplish a given end `vi`create We cover some of the common arguments against JavaScript |
| 143 | [below](#debate), stats"></a>How Many Users Ru Disabled Anyway? |
| 144 | |
| 145 | There are several studies that have directly measured the web audience |
| 146 | |
| 147 | z@2m1,13@2n3,17@2oA,10@2pL,w@2qP,1:TG@5m0WYSIWYG Wiki Editor |
| 148 | |
| 149 | The Admin → Wiki → “Enable WYSIWYG Wiki Editing” toggle switches the |
| 150 | default plaintext editor for [Fossil wiki][fw] documents to one that |
| 151 | works like a basic word processor. This featuredience |
| 152 | |
| 153 | z@2m1,13@2n3,in |
| 154 | ,w@2qP,1:TG@5m0,p@2re,14@2sX,4: button, meaning |
| 155 | : expect |
| 156 | v@2vx,L@BW,n@2xF,E: to WYSIWYG editor |
| 157 | E,7: |
| 158 | block J@dG,H:. We suspect straightforward |
| 159 | q@1Ua,1:"N@the UI be usableEdit your wiki documents in the default plain text |
| 160 | wiki editor. Fossil’s wiki and Markdown language processors were |
| 161 | designed to be edited that way. |
| 162 | |
| 163 | [fw31U,5:[s1]:s@3EB,1_@3F6,13@3Gj,e6@pe,1:"k@1To,1:"Nq@1Ua,1:"N@the UI be usable with JavaScript entirely |
| 164 | disabled. In every placeabled. provided functio in JavaScript. |
| 165 | ([Example][mainc].)e common arguments against JavaScript |
| 166 | [below](#debate), JavaScript, the |
| 167 | rrela, or provide a patch to reload thavwholesale or give |
| 168 | server round-tripy &se JavaScript where it |
| 169 | helps mak, soaScript where it |
| 170 | helps make its web UI better, but to offer graceful fallbacks wherever |
| 171 | practical. The intent is that the UI be usable with JavaScript entirely |
| 172 | disabled. In every placeabled. In almost all places wh it is an |
| 173 | enhancement to provided functio another way |
| 174 | to accomplish a given end `vi`create We cover some of the common arguments against JavaScript |
| 175 | [below](#debate), stats"></a>How Many Users Ru Disabled Anyway? |
| 176 | |
| 177 | There are several studies that have directly measured the web audience |
| 178 | |
| 179 | z@2m1,13@2n3,17@2oA,10@2pL,w@2qP,1:TG@5m0,p@2re,14@2sX,4: an |
| 180 | z@2ti,11@2uk,8: expect |
| 181 | v@2vx,L@BW,n@2xF,E: to find that |
| 182 | r@2yJ,F: run [powerfuavaScript in Fossil |
| 183 | |
| 184 | ## Philosophy & Policy |
| 185 | |
| 186 | The Fossil development project’s policy is to use JavaScript where it |
| 187 | helps make its web UI better, but to offer graceful fallbacks wherever |
| 188 | practical. The intent is that the UI be usable with JavaScript entirely |
| 189 | disabled. In every placeabled. In almost all places wh it is an |
| 190 | enhancement to provided functio another way |
| 191 | to accomplish a given end `vi`create We cover some of the common arguments against JavaScript |
| 192 | [below](#debate), JavaScript, the |
| 193 | rrelativelye remainder of this document will eded functio another way |
| 194 | to accomplish a given end `vi`create # Use of JavaScrip, editor.) If |
| 195 | S as it |
| 196 | a |
| 197 | ...e of JavaScript in Fossil |
| 198 | |
| 199 | ## Philo in Fossil |
| 200 | |
| 201 | block"></a>Blocking Javwholesale or give up on blocking |
| 202 | entirely, we recommend that you use] to selectively productively, |
| 203 | as it was intended.Use of JavaScript in Fossil |
| 204 | |
| 205 | ## Philosophy & Policy |
| 206 | |
| 207 | The Fossil developmeipt in Fossil |
| 208 | |
| 209 | ## Philosophy & Policy |
| 210 | |
| 211 | The Fossil development project’s�**T�[2cbsd]:snoop"></a>Fos Use of JavaScri JavaScript in Fossil |
| 212 | |
| 213 | ## Philosophy & Policy |
| 214 | |
| 215 | The Fossil developmel |
| 216 | |
| 217 | ## Philosophy &56Use of JavaScript in Fossil |
| 218 | |
| 219 | ## Philosophy & Policy |
| 220 | |
| 221 | The Fossil development project’s policy is to use JavaScript where it |
| 222 | helps make its web UI better, but to offer graceful fallbacks wherever |
| 223 | practical. The intent is that the U |
+1
-1
| --- www/mkindex.tcl | ||
| +++ www/mkindex.tcl | ||
| @@ -19,11 +19,10 @@ | ||
| 19 | 19 | branching.wiki {Branching, Forking, Merging, and Tagging} |
| 20 | 20 | bugtheory.wiki {Bug Tracking In Fossil} |
| 21 | 21 | build.wiki {Compiling and Installing Fossil} |
| 22 | 22 | caps/ {Administering User Capabilities} |
| 23 | 23 | caps/admin-v-setup.md {Differences Between Setup and Admin Users} |
| 24 | - caps/login-groups.md {Differences Between Setup and Admin Users} | |
| 25 | 24 | caps/ref.html {User Capability Reference} |
| 26 | 25 | cgi.wiki {CGI Script Configuration Options} |
| 27 | 26 | changes.wiki {Fossil Changelog} |
| 28 | 27 | checkin_names.wiki {Check-in And Version Names} |
| 29 | 28 | checkin.wiki {Check-in Checklist} |
| @@ -57,10 +56,11 @@ | ||
| 57 | 56 | /help {Lists of Commands and Webpages} |
| 58 | 57 | hints.wiki {Fossil Tips And Usage Hints} |
| 59 | 58 | index.wiki {Home Page} |
| 60 | 59 | inout.wiki {Import And Export To And From Git} |
| 61 | 60 | image-format-vs-repo-size.md {Image Format vs Fossil Repo Size} |
| 61 | + javascript.md {Use of JavaScript in Fossil} | |
| 62 | 62 | makefile.wiki {The Fossil Build Process} |
| 63 | 63 | mirrorlimitations.md {Limitations On Git Mirrors} |
| 64 | 64 | mirrortogithub.md {How To Mirror A Fossil Repository On GitHub} |
| 65 | 65 | /md_rules {Markdown Formatting Rules} |
| 66 | 66 | newrepo.wiki {How To Create A New Fossil Repository} |
| 67 | 67 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -19,11 +19,10 @@ | |
| 19 | branching.wiki {Branching, Forking, Merging, and Tagging} |
| 20 | bugtheory.wiki {Bug Tracking In Fossil} |
| 21 | build.wiki {Compiling and Installing Fossil} |
| 22 | caps/ {Administering User Capabilities} |
| 23 | caps/admin-v-setup.md {Differences Between Setup and Admin Users} |
| 24 | caps/login-groups.md {Differences Between Setup and Admin Users} |
| 25 | caps/ref.html {User Capability Reference} |
| 26 | cgi.wiki {CGI Script Configuration Options} |
| 27 | changes.wiki {Fossil Changelog} |
| 28 | checkin_names.wiki {Check-in And Version Names} |
| 29 | checkin.wiki {Check-in Checklist} |
| @@ -57,10 +56,11 @@ | |
| 57 | /help {Lists of Commands and Webpages} |
| 58 | hints.wiki {Fossil Tips And Usage Hints} |
| 59 | index.wiki {Home Page} |
| 60 | inout.wiki {Import And Export To And From Git} |
| 61 | image-format-vs-repo-size.md {Image Format vs Fossil Repo Size} |
| 62 | makefile.wiki {The Fossil Build Process} |
| 63 | mirrorlimitations.md {Limitations On Git Mirrors} |
| 64 | mirrortogithub.md {How To Mirror A Fossil Repository On GitHub} |
| 65 | /md_rules {Markdown Formatting Rules} |
| 66 | newrepo.wiki {How To Create A New Fossil Repository} |
| 67 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -19,11 +19,10 @@ | |
| 19 | branching.wiki {Branching, Forking, Merging, and Tagging} |
| 20 | bugtheory.wiki {Bug Tracking In Fossil} |
| 21 | build.wiki {Compiling and Installing Fossil} |
| 22 | caps/ {Administering User Capabilities} |
| 23 | caps/admin-v-setup.md {Differences Between Setup and Admin Users} |
| 24 | caps/ref.html {User Capability Reference} |
| 25 | cgi.wiki {CGI Script Configuration Options} |
| 26 | changes.wiki {Fossil Changelog} |
| 27 | checkin_names.wiki {Check-in And Version Names} |
| 28 | checkin.wiki {Check-in Checklist} |
| @@ -57,10 +56,11 @@ | |
| 56 | /help {Lists of Commands and Webpages} |
| 57 | hints.wiki {Fossil Tips And Usage Hints} |
| 58 | index.wiki {Home Page} |
| 59 | inout.wiki {Import And Export To And From Git} |
| 60 | image-format-vs-repo-size.md {Image Format vs Fossil Repo Size} |
| 61 | javascript.md {Use of JavaScript in Fossil} |
| 62 | makefile.wiki {The Fossil Build Process} |
| 63 | mirrorlimitations.md {Limitations On Git Mirrors} |
| 64 | mirrortogithub.md {How To Mirror A Fossil Repository On GitHub} |
| 65 | /md_rules {Markdown Formatting Rules} |
| 66 | newrepo.wiki {How To Create A New Fossil Repository} |
| 67 |
+2
-5
| --- www/permutedindex.html | ||
| +++ www/permutedindex.html | ||
| @@ -24,11 +24,10 @@ | ||
| 24 | 24 | <li><a href="fossil-from-msvc.wiki">2010 IDE — Integrating Fossil in the Microsoft Express</a></li> |
| 25 | 25 | <li><a href="tech_overview.wiki"><b>A Technical Overview Of The Design And Implementation Of Fossil</b></a></li> |
| 26 | 26 | <li><a href="serverext.wiki"><b>Adding Extensions To A Fossil Server Using CGI Scripts</b></a></li> |
| 27 | 27 | <li><a href="adding_code.wiki"><b>Adding New Features To Fossil</b></a></li> |
| 28 | 28 | <li><a href="caps/admin-v-setup.md">Admin Users — Differences Between Setup and</a></li> |
| 29 | -<li><a href="caps/login-groups.md">Admin Users — Differences Between Setup and</a></li> | |
| 30 | 29 | <li><a href="caps/"><b>Administering User Capabilities</b></a></li> |
| 31 | 30 | <li><a href="copyright-release.html">Agreement — Contributor License</a></li> |
| 32 | 31 | <li><a href="alerts.md">Alerts And Notifications — Email</a></li> |
| 33 | 32 | <li><a href="delta_encoder_algorithm.wiki">Algorithm — Fossil Delta Encoding</a></li> |
| 34 | 33 | <li><a href="blame.wiki">Algorithm Of Fossil — The Annotate/Blame</a></li> |
| @@ -38,11 +37,10 @@ | ||
| 38 | 37 | <li><a href="password.wiki">Authentication — Password Management And</a></li> |
| 39 | 38 | <li><a href="backoffice.md">Backoffice mechanism of Fossil — The</a></li> |
| 40 | 39 | <li><a href="fossil_prompt.wiki">Bash Prompt — Fossilized</a></li> |
| 41 | 40 | <li><a href="whyusefossil.wiki"><b>Benefits Of Version Control</b></a></li> |
| 42 | 41 | <li><a href="caps/admin-v-setup.md">Between Setup and Admin Users — Differences</a></li> |
| 43 | -<li><a href="caps/login-groups.md">Between Setup and Admin Users — Differences</a></li> | |
| 44 | 42 | <li><a href="hashpolicy.wiki">Between SHA1 and SHA3-256 — Hash Policy: Choosing</a></li> |
| 45 | 43 | <li><a href="blockchain.md">Blockchain — Fossil As</a></li> |
| 46 | 44 | <li><a href="antibot.wiki">Bots — Defense against Spiders and</a></li> |
| 47 | 45 | <li><a href="private.wiki">Branches — Creating, Syncing, and Deleting Private</a></li> |
| 48 | 46 | <li><a href="branching.wiki"><b>Branching, Forking, Merging, and Tagging</b></a></li> |
| @@ -92,11 +90,10 @@ | ||
| 92 | 90 | <li><a href="delta_encoder_algorithm.wiki">Delta Encoding Algorithm — Fossil</a></li> |
| 93 | 91 | <li><a href="delta_format.wiki">Delta Format — Fossil</a></li> |
| 94 | 92 | <li><a href="tech_overview.wiki">Design And Implementation Of Fossil — A Technical Overview Of The</a></li> |
| 95 | 93 | <li><a href="theory1.wiki">Design Of The Fossil DVCS — Thoughts On The</a></li> |
| 96 | 94 | <li><a href="caps/admin-v-setup.md"><b>Differences Between Setup and Admin Users</b></a></li> |
| 97 | -<li><a href="caps/login-groups.md"><b>Differences Between Setup and Admin Users</b></a></li> | |
| 98 | 95 | <li><a href="embeddeddoc.wiki">Documentation — Embedded Project</a></li> |
| 99 | 96 | <li><a href="contribute.wiki">Documentation To The Fossil Project — Contributing Code or</a></li> |
| 100 | 97 | <li><a href="aboutdownload.wiki">Download Page Works — How The</a></li> |
| 101 | 98 | <li><a href="theory1.wiki">DVCS — Thoughts On The Design Of The Fossil</a></li> |
| 102 | 99 | <li><a href="quotes.wiki">DVCSes in General — Quotes: What People Are Saying About Fossil, Git, and</a></li> |
| @@ -173,10 +170,11 @@ | ||
| 173 | 170 | <li><a href="inout.wiki"><b>Import And Export To And From Git</b></a></li> |
| 174 | 171 | <li><a href="build.wiki">Installing Fossil — Compiling and</a></li> |
| 175 | 172 | <li><a href="fossil-from-msvc.wiki"><b>Integrating Fossil in the Microsoft Express 2010 IDE</b></a></li> |
| 176 | 173 | <li><a href="selfcheck.wiki">Integrity Self Checks — Fossil Repository</a></li> |
| 177 | 174 | <li><a href="webui.wiki">Interface — The Fossil Web</a></li> |
| 175 | +<li><a href="javascript.md">JavaScript in Fossil — Use of</a></li> | |
| 178 | 176 | <li><a href="th1.md">Language — The TH1 Scripting</a></li> |
| 179 | 177 | <li><a href="copyright-release.html">License Agreement — Contributor</a></li> |
| 180 | 178 | <li><a href="mirrorlimitations.md"><b>Limitations On Git Mirrors</b></a></li> |
| 181 | 179 | <li><a href="../../../help"><b>Lists of Commands and Webpages</b></a></li> |
| 182 | 180 | <li><a href="password.wiki">Management And Authentication — Password</a></li> |
| @@ -246,11 +244,10 @@ | ||
| 246 | 244 | <li><a href="server/">Server — How To Configure A Fossil</a></li> |
| 247 | 245 | <li><a href="serverext.wiki">Server Extensions — CGI</a></li> |
| 248 | 246 | <li><a href="serverext.wiki">Server Using CGI Scripts — Adding Extensions To A Fossil</a></li> |
| 249 | 247 | <li><a href="settings.wiki">Settings — Fossil</a></li> |
| 250 | 248 | <li><a href="caps/admin-v-setup.md">Setup and Admin Users — Differences Between</a></li> |
| 251 | -<li><a href="caps/login-groups.md">Setup and Admin Users — Differences Between</a></li> | |
| 252 | 249 | <li><a href="hashpolicy.wiki">SHA1 and SHA3-256 — Hash Policy: Choosing Between</a></li> |
| 253 | 250 | <li><a href="hashpolicy.wiki">SHA3-256 — Hash Policy: Choosing Between SHA1 and</a></li> |
| 254 | 251 | <li><a href="shunning.wiki"><b>Shunning: Deleting Content From Fossil</b></a></li> |
| 255 | 252 | <li><a href="fiveminutes.wiki">Single User — Up and Running in 5 Minutes as a</a></li> |
| 256 | 253 | <li><a href="../../../sitemap"><b>Site Map</b></a></li> |
| @@ -289,15 +286,15 @@ | ||
| 289 | 286 | <li><a href="hints.wiki">Tips And Usage Hints — Fossil</a></li> |
| 290 | 287 | <li><a href="bugtheory.wiki">Tracking In Fossil — Bug</a></li> |
| 291 | 288 | <li><a href="unvers.wiki"><b>Unversioned Files</b></a></li> |
| 292 | 289 | <li><a href="fiveminutes.wiki"><b>Up and Running in 5 Minutes as a Single User</b></a></li> |
| 293 | 290 | <li><a href="hints.wiki">Usage Hints — Fossil Tips And</a></li> |
| 291 | +<li><a href="javascript.md"><b>Use of JavaScript in Fossil</b></a></li> | |
| 294 | 292 | <li><a href="fiveminutes.wiki">User — Up and Running in 5 Minutes as a Single</a></li> |
| 295 | 293 | <li><a href="caps/">User Capabilities — Administering</a></li> |
| 296 | 294 | <li><a href="caps/ref.html"><b>User Capability Reference</b></a></li> |
| 297 | 295 | <li><a href="caps/admin-v-setup.md">Users — Differences Between Setup and Admin</a></li> |
| 298 | -<li><a href="caps/login-groups.md">Users — Differences Between Setup and Admin</a></li> | |
| 299 | 296 | <li><a href="serverext.wiki">Using CGI Scripts — Adding Extensions To A Fossil Server</a></li> |
| 300 | 297 | <li><a href="ssl.wiki"><b>Using SSL with Fossil</b></a></li> |
| 301 | 298 | <li><a href="env-opts.md">Variables and Global Options — Environment</a></li> |
| 302 | 299 | <li><a href="whyusefossil.wiki">Version Control — Benefits Of</a></li> |
| 303 | 300 | <li><a href="checkin_names.wiki">Version Names — Check-in And</a></li> |
| 304 | 301 |
| --- www/permutedindex.html | |
| +++ www/permutedindex.html | |
| @@ -24,11 +24,10 @@ | |
| 24 | <li><a href="fossil-from-msvc.wiki">2010 IDE — Integrating Fossil in the Microsoft Express</a></li> |
| 25 | <li><a href="tech_overview.wiki"><b>A Technical Overview Of The Design And Implementation Of Fossil</b></a></li> |
| 26 | <li><a href="serverext.wiki"><b>Adding Extensions To A Fossil Server Using CGI Scripts</b></a></li> |
| 27 | <li><a href="adding_code.wiki"><b>Adding New Features To Fossil</b></a></li> |
| 28 | <li><a href="caps/admin-v-setup.md">Admin Users — Differences Between Setup and</a></li> |
| 29 | <li><a href="caps/login-groups.md">Admin Users — Differences Between Setup and</a></li> |
| 30 | <li><a href="caps/"><b>Administering User Capabilities</b></a></li> |
| 31 | <li><a href="copyright-release.html">Agreement — Contributor License</a></li> |
| 32 | <li><a href="alerts.md">Alerts And Notifications — Email</a></li> |
| 33 | <li><a href="delta_encoder_algorithm.wiki">Algorithm — Fossil Delta Encoding</a></li> |
| 34 | <li><a href="blame.wiki">Algorithm Of Fossil — The Annotate/Blame</a></li> |
| @@ -38,11 +37,10 @@ | |
| 38 | <li><a href="password.wiki">Authentication — Password Management And</a></li> |
| 39 | <li><a href="backoffice.md">Backoffice mechanism of Fossil — The</a></li> |
| 40 | <li><a href="fossil_prompt.wiki">Bash Prompt — Fossilized</a></li> |
| 41 | <li><a href="whyusefossil.wiki"><b>Benefits Of Version Control</b></a></li> |
| 42 | <li><a href="caps/admin-v-setup.md">Between Setup and Admin Users — Differences</a></li> |
| 43 | <li><a href="caps/login-groups.md">Between Setup and Admin Users — Differences</a></li> |
| 44 | <li><a href="hashpolicy.wiki">Between SHA1 and SHA3-256 — Hash Policy: Choosing</a></li> |
| 45 | <li><a href="blockchain.md">Blockchain — Fossil As</a></li> |
| 46 | <li><a href="antibot.wiki">Bots — Defense against Spiders and</a></li> |
| 47 | <li><a href="private.wiki">Branches — Creating, Syncing, and Deleting Private</a></li> |
| 48 | <li><a href="branching.wiki"><b>Branching, Forking, Merging, and Tagging</b></a></li> |
| @@ -92,11 +90,10 @@ | |
| 92 | <li><a href="delta_encoder_algorithm.wiki">Delta Encoding Algorithm — Fossil</a></li> |
| 93 | <li><a href="delta_format.wiki">Delta Format — Fossil</a></li> |
| 94 | <li><a href="tech_overview.wiki">Design And Implementation Of Fossil — A Technical Overview Of The</a></li> |
| 95 | <li><a href="theory1.wiki">Design Of The Fossil DVCS — Thoughts On The</a></li> |
| 96 | <li><a href="caps/admin-v-setup.md"><b>Differences Between Setup and Admin Users</b></a></li> |
| 97 | <li><a href="caps/login-groups.md"><b>Differences Between Setup and Admin Users</b></a></li> |
| 98 | <li><a href="embeddeddoc.wiki">Documentation — Embedded Project</a></li> |
| 99 | <li><a href="contribute.wiki">Documentation To The Fossil Project — Contributing Code or</a></li> |
| 100 | <li><a href="aboutdownload.wiki">Download Page Works — How The</a></li> |
| 101 | <li><a href="theory1.wiki">DVCS — Thoughts On The Design Of The Fossil</a></li> |
| 102 | <li><a href="quotes.wiki">DVCSes in General — Quotes: What People Are Saying About Fossil, Git, and</a></li> |
| @@ -173,10 +170,11 @@ | |
| 173 | <li><a href="inout.wiki"><b>Import And Export To And From Git</b></a></li> |
| 174 | <li><a href="build.wiki">Installing Fossil — Compiling and</a></li> |
| 175 | <li><a href="fossil-from-msvc.wiki"><b>Integrating Fossil in the Microsoft Express 2010 IDE</b></a></li> |
| 176 | <li><a href="selfcheck.wiki">Integrity Self Checks — Fossil Repository</a></li> |
| 177 | <li><a href="webui.wiki">Interface — The Fossil Web</a></li> |
| 178 | <li><a href="th1.md">Language — The TH1 Scripting</a></li> |
| 179 | <li><a href="copyright-release.html">License Agreement — Contributor</a></li> |
| 180 | <li><a href="mirrorlimitations.md"><b>Limitations On Git Mirrors</b></a></li> |
| 181 | <li><a href="../../../help"><b>Lists of Commands and Webpages</b></a></li> |
| 182 | <li><a href="password.wiki">Management And Authentication — Password</a></li> |
| @@ -246,11 +244,10 @@ | |
| 246 | <li><a href="server/">Server — How To Configure A Fossil</a></li> |
| 247 | <li><a href="serverext.wiki">Server Extensions — CGI</a></li> |
| 248 | <li><a href="serverext.wiki">Server Using CGI Scripts — Adding Extensions To A Fossil</a></li> |
| 249 | <li><a href="settings.wiki">Settings — Fossil</a></li> |
| 250 | <li><a href="caps/admin-v-setup.md">Setup and Admin Users — Differences Between</a></li> |
| 251 | <li><a href="caps/login-groups.md">Setup and Admin Users — Differences Between</a></li> |
| 252 | <li><a href="hashpolicy.wiki">SHA1 and SHA3-256 — Hash Policy: Choosing Between</a></li> |
| 253 | <li><a href="hashpolicy.wiki">SHA3-256 — Hash Policy: Choosing Between SHA1 and</a></li> |
| 254 | <li><a href="shunning.wiki"><b>Shunning: Deleting Content From Fossil</b></a></li> |
| 255 | <li><a href="fiveminutes.wiki">Single User — Up and Running in 5 Minutes as a</a></li> |
| 256 | <li><a href="../../../sitemap"><b>Site Map</b></a></li> |
| @@ -289,15 +286,15 @@ | |
| 289 | <li><a href="hints.wiki">Tips And Usage Hints — Fossil</a></li> |
| 290 | <li><a href="bugtheory.wiki">Tracking In Fossil — Bug</a></li> |
| 291 | <li><a href="unvers.wiki"><b>Unversioned Files</b></a></li> |
| 292 | <li><a href="fiveminutes.wiki"><b>Up and Running in 5 Minutes as a Single User</b></a></li> |
| 293 | <li><a href="hints.wiki">Usage Hints — Fossil Tips And</a></li> |
| 294 | <li><a href="fiveminutes.wiki">User — Up and Running in 5 Minutes as a Single</a></li> |
| 295 | <li><a href="caps/">User Capabilities — Administering</a></li> |
| 296 | <li><a href="caps/ref.html"><b>User Capability Reference</b></a></li> |
| 297 | <li><a href="caps/admin-v-setup.md">Users — Differences Between Setup and Admin</a></li> |
| 298 | <li><a href="caps/login-groups.md">Users — Differences Between Setup and Admin</a></li> |
| 299 | <li><a href="serverext.wiki">Using CGI Scripts — Adding Extensions To A Fossil Server</a></li> |
| 300 | <li><a href="ssl.wiki"><b>Using SSL with Fossil</b></a></li> |
| 301 | <li><a href="env-opts.md">Variables and Global Options — Environment</a></li> |
| 302 | <li><a href="whyusefossil.wiki">Version Control — Benefits Of</a></li> |
| 303 | <li><a href="checkin_names.wiki">Version Names — Check-in And</a></li> |
| 304 |
| --- www/permutedindex.html | |
| +++ www/permutedindex.html | |
| @@ -24,11 +24,10 @@ | |
| 24 | <li><a href="fossil-from-msvc.wiki">2010 IDE — Integrating Fossil in the Microsoft Express</a></li> |
| 25 | <li><a href="tech_overview.wiki"><b>A Technical Overview Of The Design And Implementation Of Fossil</b></a></li> |
| 26 | <li><a href="serverext.wiki"><b>Adding Extensions To A Fossil Server Using CGI Scripts</b></a></li> |
| 27 | <li><a href="adding_code.wiki"><b>Adding New Features To Fossil</b></a></li> |
| 28 | <li><a href="caps/admin-v-setup.md">Admin Users — Differences Between Setup and</a></li> |
| 29 | <li><a href="caps/"><b>Administering User Capabilities</b></a></li> |
| 30 | <li><a href="copyright-release.html">Agreement — Contributor License</a></li> |
| 31 | <li><a href="alerts.md">Alerts And Notifications — Email</a></li> |
| 32 | <li><a href="delta_encoder_algorithm.wiki">Algorithm — Fossil Delta Encoding</a></li> |
| 33 | <li><a href="blame.wiki">Algorithm Of Fossil — The Annotate/Blame</a></li> |
| @@ -38,11 +37,10 @@ | |
| 37 | <li><a href="password.wiki">Authentication — Password Management And</a></li> |
| 38 | <li><a href="backoffice.md">Backoffice mechanism of Fossil — The</a></li> |
| 39 | <li><a href="fossil_prompt.wiki">Bash Prompt — Fossilized</a></li> |
| 40 | <li><a href="whyusefossil.wiki"><b>Benefits Of Version Control</b></a></li> |
| 41 | <li><a href="caps/admin-v-setup.md">Between Setup and Admin Users — Differences</a></li> |
| 42 | <li><a href="hashpolicy.wiki">Between SHA1 and SHA3-256 — Hash Policy: Choosing</a></li> |
| 43 | <li><a href="blockchain.md">Blockchain — Fossil As</a></li> |
| 44 | <li><a href="antibot.wiki">Bots — Defense against Spiders and</a></li> |
| 45 | <li><a href="private.wiki">Branches — Creating, Syncing, and Deleting Private</a></li> |
| 46 | <li><a href="branching.wiki"><b>Branching, Forking, Merging, and Tagging</b></a></li> |
| @@ -92,11 +90,10 @@ | |
| 90 | <li><a href="delta_encoder_algorithm.wiki">Delta Encoding Algorithm — Fossil</a></li> |
| 91 | <li><a href="delta_format.wiki">Delta Format — Fossil</a></li> |
| 92 | <li><a href="tech_overview.wiki">Design And Implementation Of Fossil — A Technical Overview Of The</a></li> |
| 93 | <li><a href="theory1.wiki">Design Of The Fossil DVCS — Thoughts On The</a></li> |
| 94 | <li><a href="caps/admin-v-setup.md"><b>Differences Between Setup and Admin Users</b></a></li> |
| 95 | <li><a href="embeddeddoc.wiki">Documentation — Embedded Project</a></li> |
| 96 | <li><a href="contribute.wiki">Documentation To The Fossil Project — Contributing Code or</a></li> |
| 97 | <li><a href="aboutdownload.wiki">Download Page Works — How The</a></li> |
| 98 | <li><a href="theory1.wiki">DVCS — Thoughts On The Design Of The Fossil</a></li> |
| 99 | <li><a href="quotes.wiki">DVCSes in General — Quotes: What People Are Saying About Fossil, Git, and</a></li> |
| @@ -173,10 +170,11 @@ | |
| 170 | <li><a href="inout.wiki"><b>Import And Export To And From Git</b></a></li> |
| 171 | <li><a href="build.wiki">Installing Fossil — Compiling and</a></li> |
| 172 | <li><a href="fossil-from-msvc.wiki"><b>Integrating Fossil in the Microsoft Express 2010 IDE</b></a></li> |
| 173 | <li><a href="selfcheck.wiki">Integrity Self Checks — Fossil Repository</a></li> |
| 174 | <li><a href="webui.wiki">Interface — The Fossil Web</a></li> |
| 175 | <li><a href="javascript.md">JavaScript in Fossil — Use of</a></li> |
| 176 | <li><a href="th1.md">Language — The TH1 Scripting</a></li> |
| 177 | <li><a href="copyright-release.html">License Agreement — Contributor</a></li> |
| 178 | <li><a href="mirrorlimitations.md"><b>Limitations On Git Mirrors</b></a></li> |
| 179 | <li><a href="../../../help"><b>Lists of Commands and Webpages</b></a></li> |
| 180 | <li><a href="password.wiki">Management And Authentication — Password</a></li> |
| @@ -246,11 +244,10 @@ | |
| 244 | <li><a href="server/">Server — How To Configure A Fossil</a></li> |
| 245 | <li><a href="serverext.wiki">Server Extensions — CGI</a></li> |
| 246 | <li><a href="serverext.wiki">Server Using CGI Scripts — Adding Extensions To A Fossil</a></li> |
| 247 | <li><a href="settings.wiki">Settings — Fossil</a></li> |
| 248 | <li><a href="caps/admin-v-setup.md">Setup and Admin Users — Differences Between</a></li> |
| 249 | <li><a href="hashpolicy.wiki">SHA1 and SHA3-256 — Hash Policy: Choosing Between</a></li> |
| 250 | <li><a href="hashpolicy.wiki">SHA3-256 — Hash Policy: Choosing Between SHA1 and</a></li> |
| 251 | <li><a href="shunning.wiki"><b>Shunning: Deleting Content From Fossil</b></a></li> |
| 252 | <li><a href="fiveminutes.wiki">Single User — Up and Running in 5 Minutes as a</a></li> |
| 253 | <li><a href="../../../sitemap"><b>Site Map</b></a></li> |
| @@ -289,15 +286,15 @@ | |
| 286 | <li><a href="hints.wiki">Tips And Usage Hints — Fossil</a></li> |
| 287 | <li><a href="bugtheory.wiki">Tracking In Fossil — Bug</a></li> |
| 288 | <li><a href="unvers.wiki"><b>Unversioned Files</b></a></li> |
| 289 | <li><a href="fiveminutes.wiki"><b>Up and Running in 5 Minutes as a Single User</b></a></li> |
| 290 | <li><a href="hints.wiki">Usage Hints — Fossil Tips And</a></li> |
| 291 | <li><a href="javascript.md"><b>Use of JavaScript in Fossil</b></a></li> |
| 292 | <li><a href="fiveminutes.wiki">User — Up and Running in 5 Minutes as a Single</a></li> |
| 293 | <li><a href="caps/">User Capabilities — Administering</a></li> |
| 294 | <li><a href="caps/ref.html"><b>User Capability Reference</b></a></li> |
| 295 | <li><a href="caps/admin-v-setup.md">Users — Differences Between Setup and Admin</a></li> |
| 296 | <li><a href="serverext.wiki">Using CGI Scripts — Adding Extensions To A Fossil Server</a></li> |
| 297 | <li><a href="ssl.wiki"><b>Using SSL with Fossil</b></a></li> |
| 298 | <li><a href="env-opts.md">Variables and Global Options — Environment</a></li> |
| 299 | <li><a href="whyusefossil.wiki">Version Control — Benefits Of</a></li> |
| 300 | <li><a href="checkin_names.wiki">Version Names — Check-in And</a></li> |
| 301 |
+13
-12
| --- www/server/windows/service.md | ||
| +++ www/server/windows/service.md | ||
| @@ -9,36 +9,37 @@ | ||
| 9 | 9 | 2. You have PowerShell 5.1 or above installed. |
| 10 | 10 | |
| 11 | 11 | ## Place Fossil on Server |
| 12 | 12 | |
| 13 | 13 | However you obtained your copy of Fossil, it is recommended that you follow |
| 14 | -Windows conventions and place it within `\Program Files (x86)\FossilSCM`. Since | |
| 15 | -Fossil is a 32bit binary, this is the proper location for the executable. This | |
| 14 | +Windows conventions and place it within `\Program Files\FossilSCM`. Since | |
| 15 | +Fossil 2.10 is a 64bit binary, this is the proper location for the executable. This | |
| 16 | 16 | way Fossil is in an expected location and you will have minimal issues with |
| 17 | 17 | Windows interfering in your ability to run Fossil as a service. You will need |
| 18 | 18 | Administrative rights to place fossil at the recommended location. You do NOT |
| 19 | 19 | need to add this location to the path, though you may do so if you wish. |
| 20 | 20 | |
| 21 | 21 | ## Make Fossil a Windows Service |
| 22 | 22 | |
| 23 | 23 | Luckily the hard work to use Fossil as a Windows Service has been done by the |
| 24 | 24 | Fossil team. We simply have to install it with the proper command line options. |
| 25 | -As of Fossil 2.9 the built in `fossil winsrv` command is failing, so an | |
| 26 | -alternative service install using PowerShell is documented here. The below | |
| 27 | -should all be entered as a single line in an Administrative PowerShell console. | |
| 25 | +Fossil on Windows has a command `fossil winsrv` to allow installing Fossil as a | |
| 26 | +service on Windows, but the options are limited, so an alternative service | |
| 27 | +install using PowerShell is documented here. The below should all be entered | |
| 28 | +as a single line in an Administrative PowerShell console. | |
| 28 | 29 | |
| 29 | 30 | ```PowerShell |
| 30 | -New-Service -Name fossil -DisplayName fossil -BinaryPathName '"C:\Program Files (x86)\FossilSCM\fossil.exe" | |
| 31 | +New-Service -Name fossil -DisplayName fossil -BinaryPathName '"C:\Program Files\FossilSCM\fossil.exe" | |
| 31 | 32 | server --port 8080 --repolist "D:/Path/to/Repos"' -StartupType Automatic |
| 32 | 33 | ``` |
| 33 | 34 | |
| 34 | -Please note the use of forward slashes in the paths passed to Fossil. Windows | |
| 35 | -will accept either back slashes or forward slashes in path names, but Fossil has | |
| 36 | -a preference for forward slashes. The use of `--repolist` will make this a | |
| 37 | -multiple repository server. If you want to serve only a single repository, | |
| 38 | -then leave off the `--repolist` parameter and provide the full path to the | |
| 39 | -proper repository file. Other options are listed in the | |
| 35 | +Please note the use of forward slashes in the repolist path passed to Fossil. | |
| 36 | +Windows will accept either back slashes or forward slashes in path names, but | |
| 37 | +Fossil has a preference for forward slashes. The use of `--repolist` will make | |
| 38 | +this a multiple repository server. If you want to serve only a single | |
| 39 | +repository, then leave off the `--repolist` parameter and provide the full path | |
| 40 | +to the proper repository file. Other options are listed in the | |
| 40 | 41 | [fossil server](/help?cmd=server) documentation. |
| 41 | 42 | |
| 42 | 43 | The service will be installed by default to use the Local Service account. |
| 43 | 44 | Since Fossil only needs access to local files, this is fine and causes no |
| 44 | 45 | issues. The service will not be running once installed. You will need to start |
| 45 | 46 |
| --- www/server/windows/service.md | |
| +++ www/server/windows/service.md | |
| @@ -9,36 +9,37 @@ | |
| 9 | 2. You have PowerShell 5.1 or above installed. |
| 10 | |
| 11 | ## Place Fossil on Server |
| 12 | |
| 13 | However you obtained your copy of Fossil, it is recommended that you follow |
| 14 | Windows conventions and place it within `\Program Files (x86)\FossilSCM`. Since |
| 15 | Fossil is a 32bit binary, this is the proper location for the executable. This |
| 16 | way Fossil is in an expected location and you will have minimal issues with |
| 17 | Windows interfering in your ability to run Fossil as a service. You will need |
| 18 | Administrative rights to place fossil at the recommended location. You do NOT |
| 19 | need to add this location to the path, though you may do so if you wish. |
| 20 | |
| 21 | ## Make Fossil a Windows Service |
| 22 | |
| 23 | Luckily the hard work to use Fossil as a Windows Service has been done by the |
| 24 | Fossil team. We simply have to install it with the proper command line options. |
| 25 | As of Fossil 2.9 the built in `fossil winsrv` command is failing, so an |
| 26 | alternative service install using PowerShell is documented here. The below |
| 27 | should all be entered as a single line in an Administrative PowerShell console. |
| 28 | |
| 29 | ```PowerShell |
| 30 | New-Service -Name fossil -DisplayName fossil -BinaryPathName '"C:\Program Files (x86)\FossilSCM\fossil.exe" |
| 31 | server --port 8080 --repolist "D:/Path/to/Repos"' -StartupType Automatic |
| 32 | ``` |
| 33 | |
| 34 | Please note the use of forward slashes in the paths passed to Fossil. Windows |
| 35 | will accept either back slashes or forward slashes in path names, but Fossil has |
| 36 | a preference for forward slashes. The use of `--repolist` will make this a |
| 37 | multiple repository server. If you want to serve only a single repository, |
| 38 | then leave off the `--repolist` parameter and provide the full path to the |
| 39 | proper repository file. Other options are listed in the |
| 40 | [fossil server](/help?cmd=server) documentation. |
| 41 | |
| 42 | The service will be installed by default to use the Local Service account. |
| 43 | Since Fossil only needs access to local files, this is fine and causes no |
| 44 | issues. The service will not be running once installed. You will need to start |
| 45 |
| --- www/server/windows/service.md | |
| +++ www/server/windows/service.md | |
| @@ -9,36 +9,37 @@ | |
| 9 | 2. You have PowerShell 5.1 or above installed. |
| 10 | |
| 11 | ## Place Fossil on Server |
| 12 | |
| 13 | However you obtained your copy of Fossil, it is recommended that you follow |
| 14 | Windows conventions and place it within `\Program Files\FossilSCM`. Since |
| 15 | Fossil 2.10 is a 64bit binary, this is the proper location for the executable. This |
| 16 | way Fossil is in an expected location and you will have minimal issues with |
| 17 | Windows interfering in your ability to run Fossil as a service. You will need |
| 18 | Administrative rights to place fossil at the recommended location. You do NOT |
| 19 | need to add this location to the path, though you may do so if you wish. |
| 20 | |
| 21 | ## Make Fossil a Windows Service |
| 22 | |
| 23 | Luckily the hard work to use Fossil as a Windows Service has been done by the |
| 24 | Fossil team. We simply have to install it with the proper command line options. |
| 25 | Fossil on Windows has a command `fossil winsrv` to allow installing Fossil as a |
| 26 | service on Windows, but the options are limited, so an alternative service |
| 27 | install using PowerShell is documented here. The below should all be entered |
| 28 | as a single line in an Administrative PowerShell console. |
| 29 | |
| 30 | ```PowerShell |
| 31 | New-Service -Name fossil -DisplayName fossil -BinaryPathName '"C:\Program Files\FossilSCM\fossil.exe" |
| 32 | server --port 8080 --repolist "D:/Path/to/Repos"' -StartupType Automatic |
| 33 | ``` |
| 34 | |
| 35 | Please note the use of forward slashes in the repolist path passed to Fossil. |
| 36 | Windows will accept either back slashes or forward slashes in path names, but |
| 37 | Fossil has a preference for forward slashes. The use of `--repolist` will make |
| 38 | this a multiple repository server. If you want to serve only a single |
| 39 | repository, then leave off the `--repolist` parameter and provide the full path |
| 40 | to the proper repository file. Other options are listed in the |
| 41 | [fossil server](/help?cmd=server) documentation. |
| 42 | |
| 43 | The service will be installed by default to use the Local Service account. |
| 44 | Since Fossil only needs access to local files, this is fine and causes no |
| 45 | issues. The service will not be running once installed. You will need to start |
| 46 |
+1
-1
| --- www/server/windows/stunnel.md | ||
| +++ www/server/windows/stunnel.md | ||
| @@ -24,11 +24,11 @@ | ||
| 24 | 24 | Following most of [Fossil as a Windows Service](./service.md), you will need |
| 25 | 25 | to change the command to install the Fossil Service to configure it properly for |
| 26 | 26 | use with stunnel as an https proxy. Run the following instead: |
| 27 | 27 | |
| 28 | 28 | ```PowerShell |
| 29 | -New-Service -Name fossil-secure -DisplayName fossil-secure -BinaryPathName '"C:\Program Files (x86)\FossilSCM\fossil.exe" | |
| 29 | +New-Service -Name fossil-secure -DisplayName fossil-secure -BinaryPathName '"C:\Program Files\FossilSCM\fossil.exe" | |
| 30 | 30 | server --localhost --port 9000 --https --repolist "D:/Path/to/Repos"' -StartupType Automatic |
| 31 | 31 | |
| 32 | 32 | ``` |
| 33 | 33 | |
| 34 | 34 | The use of `--localhost` means Fossil will only listen for traffic on the local |
| 35 | 35 |
| --- www/server/windows/stunnel.md | |
| +++ www/server/windows/stunnel.md | |
| @@ -24,11 +24,11 @@ | |
| 24 | Following most of [Fossil as a Windows Service](./service.md), you will need |
| 25 | to change the command to install the Fossil Service to configure it properly for |
| 26 | use with stunnel as an https proxy. Run the following instead: |
| 27 | |
| 28 | ```PowerShell |
| 29 | New-Service -Name fossil-secure -DisplayName fossil-secure -BinaryPathName '"C:\Program Files (x86)\FossilSCM\fossil.exe" |
| 30 | server --localhost --port 9000 --https --repolist "D:/Path/to/Repos"' -StartupType Automatic |
| 31 | |
| 32 | ``` |
| 33 | |
| 34 | The use of `--localhost` means Fossil will only listen for traffic on the local |
| 35 |
| --- www/server/windows/stunnel.md | |
| +++ www/server/windows/stunnel.md | |
| @@ -24,11 +24,11 @@ | |
| 24 | Following most of [Fossil as a Windows Service](./service.md), you will need |
| 25 | to change the command to install the Fossil Service to configure it properly for |
| 26 | use with stunnel as an https proxy. Run the following instead: |
| 27 | |
| 28 | ```PowerShell |
| 29 | New-Service -Name fossil-secure -DisplayName fossil-secure -BinaryPathName '"C:\Program Files\FossilSCM\fossil.exe" |
| 30 | server --localhost --port 9000 --https --repolist "D:/Path/to/Repos"' -StartupType Automatic |
| 31 | |
| 32 | ``` |
| 33 | |
| 34 | The use of `--localhost` means Fossil will only listen for traffic on the local |
| 35 |
+1
-1
| --- www/serverext.wiki | ||
| +++ www/serverext.wiki | ||
| @@ -34,11 +34,11 @@ | ||
| 34 | 34 | |
| 35 | 35 | <blockquote><pre> |
| 36 | 36 | extroot: <i>DIRECTORY</i> |
| 37 | 37 | </pre></blockquote> |
| 38 | 38 | |
| 39 | -Or, if the Fossil server is begin run as using the | |
| 39 | +Or, if the Fossil server is being run using the | |
| 40 | 40 | "[./server/any/none.md|fossil server]" or |
| 41 | 41 | "[./server/any/none.md|fossil ui]" or |
| 42 | 42 | "[./server/any/inetd.md|fossil http]" commands, then add an extra |
| 43 | 43 | "--extroot <i>DIRECTORY</i>" option to that command. |
| 44 | 44 | |
| 45 | 45 |
| --- www/serverext.wiki | |
| +++ www/serverext.wiki | |
| @@ -34,11 +34,11 @@ | |
| 34 | |
| 35 | <blockquote><pre> |
| 36 | extroot: <i>DIRECTORY</i> |
| 37 | </pre></blockquote> |
| 38 | |
| 39 | Or, if the Fossil server is begin run as using the |
| 40 | "[./server/any/none.md|fossil server]" or |
| 41 | "[./server/any/none.md|fossil ui]" or |
| 42 | "[./server/any/inetd.md|fossil http]" commands, then add an extra |
| 43 | "--extroot <i>DIRECTORY</i>" option to that command. |
| 44 | |
| 45 |
| --- www/serverext.wiki | |
| +++ www/serverext.wiki | |
| @@ -34,11 +34,11 @@ | |
| 34 | |
| 35 | <blockquote><pre> |
| 36 | extroot: <i>DIRECTORY</i> |
| 37 | </pre></blockquote> |
| 38 | |
| 39 | Or, if the Fossil server is being run using the |
| 40 | "[./server/any/none.md|fossil server]" or |
| 41 | "[./server/any/none.md|fossil ui]" or |
| 42 | "[./server/any/inetd.md|fossil http]" commands, then add an extra |
| 43 | "--extroot <i>DIRECTORY</i>" option to that command. |
| 44 | |
| 45 |