Fossil SCM
merge trunk
Commit
b1beeb77ee0f0d9979ca6d22384a01387728470b
Parent
9627a9051b5a573…
15 files changed
+36
-4
+4
-5
+4
-5
+12
-5
+4
-4
+4
-4
+32
-23
+32
-23
+84
-12
+2
-1
+11
-10
+11
-10
+2
-2
+5
-5
+5
-5
+36
-4
| --- src/add.c | ||
| +++ src/add.c | ||
| @@ -60,22 +60,39 @@ | ||
| 60 | 60 | static const char *const azManifest[] = { |
| 61 | 61 | "manifest", |
| 62 | 62 | "manifest.uuid", |
| 63 | 63 | }; |
| 64 | 64 | |
| 65 | + /* | |
| 66 | + ** Names of repository files, if they exist in the checkout. | |
| 67 | + */ | |
| 68 | + static const char *azRepo[4] = { 0, 0, 0, 0 }; | |
| 69 | + | |
| 65 | 70 | /* Cached setting "manifest" */ |
| 66 | 71 | static int cachedManifest = -1; |
| 67 | 72 | |
| 68 | 73 | if( cachedManifest == -1 ){ |
| 74 | + Blob repo; | |
| 69 | 75 | cachedManifest = db_get_boolean("manifest",0); |
| 76 | + blob_zero(&repo); | |
| 77 | + if( file_tree_name(g.zRepositoryName, &repo, 0) ){ | |
| 78 | + const char *zRepo = blob_str(&repo); | |
| 79 | + azRepo[0] = zRepo; | |
| 80 | + azRepo[1] = mprintf("%s-journal", zRepo); | |
| 81 | + azRepo[2] = mprintf("%s-wal", zRepo); | |
| 82 | + azRepo[3] = mprintf("%s-shm", zRepo); | |
| 83 | + } | |
| 70 | 84 | } |
| 71 | 85 | |
| 72 | - if( N>=0 && N<count(azName) ) return azName[N]; | |
| 73 | - if( N>=count(azName) && N<count(azName)+count(azManifest) | |
| 74 | - && cachedManifest ){ | |
| 75 | - return azManifest[N-count(azName)]; | |
| 86 | + if( N<0 ) return 0; | |
| 87 | + if( N<count(azName) ) return azName[N]; | |
| 88 | + N -= count(azName); | |
| 89 | + if( cachedManifest ){ | |
| 90 | + if( N<count(azManifest) ) return azManifest[N]; | |
| 91 | + N -= count(azManifest); | |
| 76 | 92 | } |
| 93 | + if( N<count(azRepo) ) return azRepo[N]; | |
| 77 | 94 | return 0; |
| 78 | 95 | } |
| 79 | 96 | |
| 80 | 97 | /* |
| 81 | 98 | ** Return a list of all reserved filenames as an SQL list. |
| @@ -93,10 +110,25 @@ | ||
| 93 | 110 | } |
| 94 | 111 | zAll = blob_str(&x); |
| 95 | 112 | } |
| 96 | 113 | return zAll; |
| 97 | 114 | } |
| 115 | + | |
| 116 | +/* | |
| 117 | +** COMMAND: test-reserved-names | |
| 118 | +** | |
| 119 | +** Show all reserved filenames for the current check-out. | |
| 120 | +*/ | |
| 121 | +void test_reserved_names(void){ | |
| 122 | + int i; | |
| 123 | + const char *z; | |
| 124 | + db_must_be_within_tree(); | |
| 125 | + for(i=0; (z = fossil_reserved_name(i))!=0; i++){ | |
| 126 | + fossil_print("%3d: %s\n", i, z); | |
| 127 | + } | |
| 128 | + fossil_print("ALL: (%s)\n", fossil_all_reserved_names()); | |
| 129 | +} | |
| 98 | 130 | |
| 99 | 131 | /* |
| 100 | 132 | ** Add a single file named zName to the VFILE table with vid. |
| 101 | 133 | ** |
| 102 | 134 | ** Omit any file whose name is pOmit. |
| 103 | 135 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -60,22 +60,39 @@ | |
| 60 | static const char *const azManifest[] = { |
| 61 | "manifest", |
| 62 | "manifest.uuid", |
| 63 | }; |
| 64 | |
| 65 | /* Cached setting "manifest" */ |
| 66 | static int cachedManifest = -1; |
| 67 | |
| 68 | if( cachedManifest == -1 ){ |
| 69 | cachedManifest = db_get_boolean("manifest",0); |
| 70 | } |
| 71 | |
| 72 | if( N>=0 && N<count(azName) ) return azName[N]; |
| 73 | if( N>=count(azName) && N<count(azName)+count(azManifest) |
| 74 | && cachedManifest ){ |
| 75 | return azManifest[N-count(azName)]; |
| 76 | } |
| 77 | return 0; |
| 78 | } |
| 79 | |
| 80 | /* |
| 81 | ** Return a list of all reserved filenames as an SQL list. |
| @@ -93,10 +110,25 @@ | |
| 93 | } |
| 94 | zAll = blob_str(&x); |
| 95 | } |
| 96 | return zAll; |
| 97 | } |
| 98 | |
| 99 | /* |
| 100 | ** Add a single file named zName to the VFILE table with vid. |
| 101 | ** |
| 102 | ** Omit any file whose name is pOmit. |
| 103 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -60,22 +60,39 @@ | |
| 60 | static const char *const azManifest[] = { |
| 61 | "manifest", |
| 62 | "manifest.uuid", |
| 63 | }; |
| 64 | |
| 65 | /* |
| 66 | ** Names of repository files, if they exist in the checkout. |
| 67 | */ |
| 68 | static const char *azRepo[4] = { 0, 0, 0, 0 }; |
| 69 | |
| 70 | /* Cached setting "manifest" */ |
| 71 | static int cachedManifest = -1; |
| 72 | |
| 73 | if( cachedManifest == -1 ){ |
| 74 | Blob repo; |
| 75 | cachedManifest = db_get_boolean("manifest",0); |
| 76 | blob_zero(&repo); |
| 77 | if( file_tree_name(g.zRepositoryName, &repo, 0) ){ |
| 78 | const char *zRepo = blob_str(&repo); |
| 79 | azRepo[0] = zRepo; |
| 80 | azRepo[1] = mprintf("%s-journal", zRepo); |
| 81 | azRepo[2] = mprintf("%s-wal", zRepo); |
| 82 | azRepo[3] = mprintf("%s-shm", zRepo); |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | if( N<0 ) return 0; |
| 87 | if( N<count(azName) ) return azName[N]; |
| 88 | N -= count(azName); |
| 89 | if( cachedManifest ){ |
| 90 | if( N<count(azManifest) ) return azManifest[N]; |
| 91 | N -= count(azManifest); |
| 92 | } |
| 93 | if( N<count(azRepo) ) return azRepo[N]; |
| 94 | return 0; |
| 95 | } |
| 96 | |
| 97 | /* |
| 98 | ** Return a list of all reserved filenames as an SQL list. |
| @@ -93,10 +110,25 @@ | |
| 110 | } |
| 111 | zAll = blob_str(&x); |
| 112 | } |
| 113 | return zAll; |
| 114 | } |
| 115 | |
| 116 | /* |
| 117 | ** COMMAND: test-reserved-names |
| 118 | ** |
| 119 | ** Show all reserved filenames for the current check-out. |
| 120 | */ |
| 121 | void test_reserved_names(void){ |
| 122 | int i; |
| 123 | const char *z; |
| 124 | db_must_be_within_tree(); |
| 125 | for(i=0; (z = fossil_reserved_name(i))!=0; i++){ |
| 126 | fossil_print("%3d: %s\n", i, z); |
| 127 | } |
| 128 | fossil_print("ALL: (%s)\n", fossil_all_reserved_names()); |
| 129 | } |
| 130 | |
| 131 | /* |
| 132 | ** Add a single file named zName to the VFILE table with vid. |
| 133 | ** |
| 134 | ** Omit any file whose name is pOmit. |
| 135 |
+4
-5
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -324,11 +324,10 @@ | ||
| 324 | 324 | ** |
| 325 | 325 | ** See also: changes, clean, status |
| 326 | 326 | */ |
| 327 | 327 | void extra_cmd(void){ |
| 328 | 328 | Blob path; |
| 329 | - Blob repo; | |
| 330 | 329 | Stmt q; |
| 331 | 330 | int n; |
| 332 | 331 | const char *zIgnoreFlag = find_option("ignore",0,1); |
| 333 | 332 | unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0; |
| 334 | 333 | int cwdRelative = 0; |
| @@ -353,13 +352,10 @@ | ||
| 353 | 352 | "SELECT x FROM sfile" |
| 354 | 353 | " WHERE x NOT IN (%s)" |
| 355 | 354 | " ORDER BY 1", |
| 356 | 355 | fossil_all_reserved_names() |
| 357 | 356 | ); |
| 358 | - if( file_tree_name(g.zRepositoryName, &repo, 0) ){ | |
| 359 | - db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo); | |
| 360 | - } | |
| 361 | 357 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 362 | 358 | blob_zero(&rewrittenPathname); |
| 363 | 359 | while( db_step(&q)==SQLITE_ROW ){ |
| 364 | 360 | zDisplayName = zPathname = db_column_text(&q, 0); |
| 365 | 361 | if( cwdRelative ) { |
| @@ -1031,10 +1027,11 @@ | ||
| 1031 | 1027 | ** --message-file|-M FILE read the commit comment from given file |
| 1032 | 1028 | ** --nosign do not attempt to sign this commit with gpg |
| 1033 | 1029 | ** --private do not sync changes and their descendants |
| 1034 | 1030 | ** --tag TAG-NAME assign given tag TAG-NAME to the checkin |
| 1035 | 1031 | ** --conflict allow unresolved merge conflicts |
| 1032 | +** --binary-ok do not warn about committing binary files | |
| 1036 | 1033 | ** |
| 1037 | 1034 | ** See also: branch, changes, checkout, extra, sync |
| 1038 | 1035 | */ |
| 1039 | 1036 | void commit_cmd(void){ |
| 1040 | 1037 | int hasChanges; /* True if unsaved changes exist */ |
| @@ -1049,10 +1046,11 @@ | ||
| 1049 | 1046 | int isAMerge = 0; /* True if checking in a merge */ |
| 1050 | 1047 | int forceFlag = 0; /* Force a fork */ |
| 1051 | 1048 | int forceDelta = 0; /* Force a delta-manifest */ |
| 1052 | 1049 | int forceBaseline = 0; /* Force a baseline-manifest */ |
| 1053 | 1050 | int allowConflict = 0; /* Allow unresolve merge conflicts */ |
| 1051 | + int binaryOk = 0; /* The --binary-ok flag */ | |
| 1054 | 1052 | char *zManifestFile; /* Name of the manifest file */ |
| 1055 | 1053 | int useCksum; /* True if checksums should be computed and verified */ |
| 1056 | 1054 | int outputManifest; /* True to output "manifest" and "manifest.uuid" */ |
| 1057 | 1055 | int testRun; /* True for a test run. Debugging only */ |
| 1058 | 1056 | const char *zBranch; /* Create a new branch with this name */ |
| @@ -1086,10 +1084,11 @@ | ||
| 1086 | 1084 | zComment = find_option("comment","m",1); |
| 1087 | 1085 | forceFlag = find_option("force", "f", 0)!=0; |
| 1088 | 1086 | zBranch = find_option("branch","b",1); |
| 1089 | 1087 | zColor = find_option("bgcolor",0,1); |
| 1090 | 1088 | zBrClr = find_option("branchcolor",0,1); |
| 1089 | + binaryOk = find_option("binary-ok",0,0)!=0; | |
| 1091 | 1090 | while( (zTag = find_option("tag",0,1))!=0 ){ |
| 1092 | 1091 | if( zTag[0]==0 ) continue; |
| 1093 | 1092 | azTag = fossil_realloc((void *)azTag, sizeof(char*)*(nTag+2)); |
| 1094 | 1093 | azTag[nTag++] = zTag; |
| 1095 | 1094 | azTag[nTag] = 0; |
| @@ -1295,11 +1294,11 @@ | ||
| 1295 | 1294 | id = db_column_int(&q, 0); |
| 1296 | 1295 | zFullname = db_column_text(&q, 1); |
| 1297 | 1296 | rid = db_column_int(&q, 2); |
| 1298 | 1297 | crnlOk = db_column_int(&q, 3); |
| 1299 | 1298 | chnged = db_column_int(&q, 4); |
| 1300 | - binOk = db_column_int(&q, 5); | |
| 1299 | + binOk = binaryOk || db_column_int(&q, 5); | |
| 1301 | 1300 | |
| 1302 | 1301 | blob_zero(&content); |
| 1303 | 1302 | if( file_wd_islink(zFullname) ){ |
| 1304 | 1303 | /* Instead of file content, put link destination path */ |
| 1305 | 1304 | blob_read_link(&content, zFullname); |
| 1306 | 1305 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -324,11 +324,10 @@ | |
| 324 | ** |
| 325 | ** See also: changes, clean, status |
| 326 | */ |
| 327 | void extra_cmd(void){ |
| 328 | Blob path; |
| 329 | Blob repo; |
| 330 | Stmt q; |
| 331 | int n; |
| 332 | const char *zIgnoreFlag = find_option("ignore",0,1); |
| 333 | unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0; |
| 334 | int cwdRelative = 0; |
| @@ -353,13 +352,10 @@ | |
| 353 | "SELECT x FROM sfile" |
| 354 | " WHERE x NOT IN (%s)" |
| 355 | " ORDER BY 1", |
| 356 | fossil_all_reserved_names() |
| 357 | ); |
| 358 | if( file_tree_name(g.zRepositoryName, &repo, 0) ){ |
| 359 | db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo); |
| 360 | } |
| 361 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 362 | blob_zero(&rewrittenPathname); |
| 363 | while( db_step(&q)==SQLITE_ROW ){ |
| 364 | zDisplayName = zPathname = db_column_text(&q, 0); |
| 365 | if( cwdRelative ) { |
| @@ -1031,10 +1027,11 @@ | |
| 1031 | ** --message-file|-M FILE read the commit comment from given file |
| 1032 | ** --nosign do not attempt to sign this commit with gpg |
| 1033 | ** --private do not sync changes and their descendants |
| 1034 | ** --tag TAG-NAME assign given tag TAG-NAME to the checkin |
| 1035 | ** --conflict allow unresolved merge conflicts |
| 1036 | ** |
| 1037 | ** See also: branch, changes, checkout, extra, sync |
| 1038 | */ |
| 1039 | void commit_cmd(void){ |
| 1040 | int hasChanges; /* True if unsaved changes exist */ |
| @@ -1049,10 +1046,11 @@ | |
| 1049 | int isAMerge = 0; /* True if checking in a merge */ |
| 1050 | int forceFlag = 0; /* Force a fork */ |
| 1051 | int forceDelta = 0; /* Force a delta-manifest */ |
| 1052 | int forceBaseline = 0; /* Force a baseline-manifest */ |
| 1053 | int allowConflict = 0; /* Allow unresolve merge conflicts */ |
| 1054 | char *zManifestFile; /* Name of the manifest file */ |
| 1055 | int useCksum; /* True if checksums should be computed and verified */ |
| 1056 | int outputManifest; /* True to output "manifest" and "manifest.uuid" */ |
| 1057 | int testRun; /* True for a test run. Debugging only */ |
| 1058 | const char *zBranch; /* Create a new branch with this name */ |
| @@ -1086,10 +1084,11 @@ | |
| 1086 | zComment = find_option("comment","m",1); |
| 1087 | forceFlag = find_option("force", "f", 0)!=0; |
| 1088 | zBranch = find_option("branch","b",1); |
| 1089 | zColor = find_option("bgcolor",0,1); |
| 1090 | zBrClr = find_option("branchcolor",0,1); |
| 1091 | while( (zTag = find_option("tag",0,1))!=0 ){ |
| 1092 | if( zTag[0]==0 ) continue; |
| 1093 | azTag = fossil_realloc((void *)azTag, sizeof(char*)*(nTag+2)); |
| 1094 | azTag[nTag++] = zTag; |
| 1095 | azTag[nTag] = 0; |
| @@ -1295,11 +1294,11 @@ | |
| 1295 | id = db_column_int(&q, 0); |
| 1296 | zFullname = db_column_text(&q, 1); |
| 1297 | rid = db_column_int(&q, 2); |
| 1298 | crnlOk = db_column_int(&q, 3); |
| 1299 | chnged = db_column_int(&q, 4); |
| 1300 | binOk = db_column_int(&q, 5); |
| 1301 | |
| 1302 | blob_zero(&content); |
| 1303 | if( file_wd_islink(zFullname) ){ |
| 1304 | /* Instead of file content, put link destination path */ |
| 1305 | blob_read_link(&content, zFullname); |
| 1306 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -324,11 +324,10 @@ | |
| 324 | ** |
| 325 | ** See also: changes, clean, status |
| 326 | */ |
| 327 | void extra_cmd(void){ |
| 328 | Blob path; |
| 329 | Stmt q; |
| 330 | int n; |
| 331 | const char *zIgnoreFlag = find_option("ignore",0,1); |
| 332 | unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0; |
| 333 | int cwdRelative = 0; |
| @@ -353,13 +352,10 @@ | |
| 352 | "SELECT x FROM sfile" |
| 353 | " WHERE x NOT IN (%s)" |
| 354 | " ORDER BY 1", |
| 355 | fossil_all_reserved_names() |
| 356 | ); |
| 357 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 358 | blob_zero(&rewrittenPathname); |
| 359 | while( db_step(&q)==SQLITE_ROW ){ |
| 360 | zDisplayName = zPathname = db_column_text(&q, 0); |
| 361 | if( cwdRelative ) { |
| @@ -1031,10 +1027,11 @@ | |
| 1027 | ** --message-file|-M FILE read the commit comment from given file |
| 1028 | ** --nosign do not attempt to sign this commit with gpg |
| 1029 | ** --private do not sync changes and their descendants |
| 1030 | ** --tag TAG-NAME assign given tag TAG-NAME to the checkin |
| 1031 | ** --conflict allow unresolved merge conflicts |
| 1032 | ** --binary-ok do not warn about committing binary files |
| 1033 | ** |
| 1034 | ** See also: branch, changes, checkout, extra, sync |
| 1035 | */ |
| 1036 | void commit_cmd(void){ |
| 1037 | int hasChanges; /* True if unsaved changes exist */ |
| @@ -1049,10 +1046,11 @@ | |
| 1046 | int isAMerge = 0; /* True if checking in a merge */ |
| 1047 | int forceFlag = 0; /* Force a fork */ |
| 1048 | int forceDelta = 0; /* Force a delta-manifest */ |
| 1049 | int forceBaseline = 0; /* Force a baseline-manifest */ |
| 1050 | int allowConflict = 0; /* Allow unresolve merge conflicts */ |
| 1051 | int binaryOk = 0; /* The --binary-ok flag */ |
| 1052 | char *zManifestFile; /* Name of the manifest file */ |
| 1053 | int useCksum; /* True if checksums should be computed and verified */ |
| 1054 | int outputManifest; /* True to output "manifest" and "manifest.uuid" */ |
| 1055 | int testRun; /* True for a test run. Debugging only */ |
| 1056 | const char *zBranch; /* Create a new branch with this name */ |
| @@ -1086,10 +1084,11 @@ | |
| 1084 | zComment = find_option("comment","m",1); |
| 1085 | forceFlag = find_option("force", "f", 0)!=0; |
| 1086 | zBranch = find_option("branch","b",1); |
| 1087 | zColor = find_option("bgcolor",0,1); |
| 1088 | zBrClr = find_option("branchcolor",0,1); |
| 1089 | binaryOk = find_option("binary-ok",0,0)!=0; |
| 1090 | while( (zTag = find_option("tag",0,1))!=0 ){ |
| 1091 | if( zTag[0]==0 ) continue; |
| 1092 | azTag = fossil_realloc((void *)azTag, sizeof(char*)*(nTag+2)); |
| 1093 | azTag[nTag++] = zTag; |
| 1094 | azTag[nTag] = 0; |
| @@ -1295,11 +1294,11 @@ | |
| 1294 | id = db_column_int(&q, 0); |
| 1295 | zFullname = db_column_text(&q, 1); |
| 1296 | rid = db_column_int(&q, 2); |
| 1297 | crnlOk = db_column_int(&q, 3); |
| 1298 | chnged = db_column_int(&q, 4); |
| 1299 | binOk = binaryOk || db_column_int(&q, 5); |
| 1300 | |
| 1301 | blob_zero(&content); |
| 1302 | if( file_wd_islink(zFullname) ){ |
| 1303 | /* Instead of file content, put link destination path */ |
| 1304 | blob_read_link(&content, zFullname); |
| 1305 |
+4
-5
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -324,11 +324,10 @@ | ||
| 324 | 324 | ** |
| 325 | 325 | ** See also: changes, clean, status |
| 326 | 326 | */ |
| 327 | 327 | void extra_cmd(void){ |
| 328 | 328 | Blob path; |
| 329 | - Blob repo; | |
| 330 | 329 | Stmt q; |
| 331 | 330 | int n; |
| 332 | 331 | const char *zIgnoreFlag = find_option("ignore",0,1); |
| 333 | 332 | unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0; |
| 334 | 333 | int cwdRelative = 0; |
| @@ -353,13 +352,10 @@ | ||
| 353 | 352 | "SELECT x FROM sfile" |
| 354 | 353 | " WHERE x NOT IN (%s)" |
| 355 | 354 | " ORDER BY 1", |
| 356 | 355 | fossil_all_reserved_names() |
| 357 | 356 | ); |
| 358 | - if( file_tree_name(g.zRepositoryName, &repo, 0) ){ | |
| 359 | - db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo); | |
| 360 | - } | |
| 361 | 357 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 362 | 358 | blob_zero(&rewrittenPathname); |
| 363 | 359 | while( db_step(&q)==SQLITE_ROW ){ |
| 364 | 360 | zDisplayName = zPathname = db_column_text(&q, 0); |
| 365 | 361 | if( cwdRelative ) { |
| @@ -1031,10 +1027,11 @@ | ||
| 1031 | 1027 | ** --message-file|-M FILE read the commit comment from given file |
| 1032 | 1028 | ** --nosign do not attempt to sign this commit with gpg |
| 1033 | 1029 | ** --private do not sync changes and their descendants |
| 1034 | 1030 | ** --tag TAG-NAME assign given tag TAG-NAME to the checkin |
| 1035 | 1031 | ** --conflict allow unresolved merge conflicts |
| 1032 | +** --binary-ok do not warn about committing binary files | |
| 1036 | 1033 | ** |
| 1037 | 1034 | ** See also: branch, changes, checkout, extra, sync |
| 1038 | 1035 | */ |
| 1039 | 1036 | void commit_cmd(void){ |
| 1040 | 1037 | int hasChanges; /* True if unsaved changes exist */ |
| @@ -1049,10 +1046,11 @@ | ||
| 1049 | 1046 | int isAMerge = 0; /* True if checking in a merge */ |
| 1050 | 1047 | int forceFlag = 0; /* Force a fork */ |
| 1051 | 1048 | int forceDelta = 0; /* Force a delta-manifest */ |
| 1052 | 1049 | int forceBaseline = 0; /* Force a baseline-manifest */ |
| 1053 | 1050 | int allowConflict = 0; /* Allow unresolve merge conflicts */ |
| 1051 | + int binaryOk = 0; /* The --binary-ok flag */ | |
| 1054 | 1052 | char *zManifestFile; /* Name of the manifest file */ |
| 1055 | 1053 | int useCksum; /* True if checksums should be computed and verified */ |
| 1056 | 1054 | int outputManifest; /* True to output "manifest" and "manifest.uuid" */ |
| 1057 | 1055 | int testRun; /* True for a test run. Debugging only */ |
| 1058 | 1056 | const char *zBranch; /* Create a new branch with this name */ |
| @@ -1086,10 +1084,11 @@ | ||
| 1086 | 1084 | zComment = find_option("comment","m",1); |
| 1087 | 1085 | forceFlag = find_option("force", "f", 0)!=0; |
| 1088 | 1086 | zBranch = find_option("branch","b",1); |
| 1089 | 1087 | zColor = find_option("bgcolor",0,1); |
| 1090 | 1088 | zBrClr = find_option("branchcolor",0,1); |
| 1089 | + binaryOk = find_option("binary-ok",0,0)!=0; | |
| 1091 | 1090 | while( (zTag = find_option("tag",0,1))!=0 ){ |
| 1092 | 1091 | if( zTag[0]==0 ) continue; |
| 1093 | 1092 | azTag = fossil_realloc((void *)azTag, sizeof(char*)*(nTag+2)); |
| 1094 | 1093 | azTag[nTag++] = zTag; |
| 1095 | 1094 | azTag[nTag] = 0; |
| @@ -1295,11 +1294,11 @@ | ||
| 1295 | 1294 | id = db_column_int(&q, 0); |
| 1296 | 1295 | zFullname = db_column_text(&q, 1); |
| 1297 | 1296 | rid = db_column_int(&q, 2); |
| 1298 | 1297 | crnlOk = db_column_int(&q, 3); |
| 1299 | 1298 | chnged = db_column_int(&q, 4); |
| 1300 | - binOk = db_column_int(&q, 5); | |
| 1299 | + binOk = binaryOk || db_column_int(&q, 5); | |
| 1301 | 1300 | |
| 1302 | 1301 | blob_zero(&content); |
| 1303 | 1302 | if( file_wd_islink(zFullname) ){ |
| 1304 | 1303 | /* Instead of file content, put link destination path */ |
| 1305 | 1304 | blob_read_link(&content, zFullname); |
| 1306 | 1305 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -324,11 +324,10 @@ | |
| 324 | ** |
| 325 | ** See also: changes, clean, status |
| 326 | */ |
| 327 | void extra_cmd(void){ |
| 328 | Blob path; |
| 329 | Blob repo; |
| 330 | Stmt q; |
| 331 | int n; |
| 332 | const char *zIgnoreFlag = find_option("ignore",0,1); |
| 333 | unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0; |
| 334 | int cwdRelative = 0; |
| @@ -353,13 +352,10 @@ | |
| 353 | "SELECT x FROM sfile" |
| 354 | " WHERE x NOT IN (%s)" |
| 355 | " ORDER BY 1", |
| 356 | fossil_all_reserved_names() |
| 357 | ); |
| 358 | if( file_tree_name(g.zRepositoryName, &repo, 0) ){ |
| 359 | db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo); |
| 360 | } |
| 361 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 362 | blob_zero(&rewrittenPathname); |
| 363 | while( db_step(&q)==SQLITE_ROW ){ |
| 364 | zDisplayName = zPathname = db_column_text(&q, 0); |
| 365 | if( cwdRelative ) { |
| @@ -1031,10 +1027,11 @@ | |
| 1031 | ** --message-file|-M FILE read the commit comment from given file |
| 1032 | ** --nosign do not attempt to sign this commit with gpg |
| 1033 | ** --private do not sync changes and their descendants |
| 1034 | ** --tag TAG-NAME assign given tag TAG-NAME to the checkin |
| 1035 | ** --conflict allow unresolved merge conflicts |
| 1036 | ** |
| 1037 | ** See also: branch, changes, checkout, extra, sync |
| 1038 | */ |
| 1039 | void commit_cmd(void){ |
| 1040 | int hasChanges; /* True if unsaved changes exist */ |
| @@ -1049,10 +1046,11 @@ | |
| 1049 | int isAMerge = 0; /* True if checking in a merge */ |
| 1050 | int forceFlag = 0; /* Force a fork */ |
| 1051 | int forceDelta = 0; /* Force a delta-manifest */ |
| 1052 | int forceBaseline = 0; /* Force a baseline-manifest */ |
| 1053 | int allowConflict = 0; /* Allow unresolve merge conflicts */ |
| 1054 | char *zManifestFile; /* Name of the manifest file */ |
| 1055 | int useCksum; /* True if checksums should be computed and verified */ |
| 1056 | int outputManifest; /* True to output "manifest" and "manifest.uuid" */ |
| 1057 | int testRun; /* True for a test run. Debugging only */ |
| 1058 | const char *zBranch; /* Create a new branch with this name */ |
| @@ -1086,10 +1084,11 @@ | |
| 1086 | zComment = find_option("comment","m",1); |
| 1087 | forceFlag = find_option("force", "f", 0)!=0; |
| 1088 | zBranch = find_option("branch","b",1); |
| 1089 | zColor = find_option("bgcolor",0,1); |
| 1090 | zBrClr = find_option("branchcolor",0,1); |
| 1091 | while( (zTag = find_option("tag",0,1))!=0 ){ |
| 1092 | if( zTag[0]==0 ) continue; |
| 1093 | azTag = fossil_realloc((void *)azTag, sizeof(char*)*(nTag+2)); |
| 1094 | azTag[nTag++] = zTag; |
| 1095 | azTag[nTag] = 0; |
| @@ -1295,11 +1294,11 @@ | |
| 1295 | id = db_column_int(&q, 0); |
| 1296 | zFullname = db_column_text(&q, 1); |
| 1297 | rid = db_column_int(&q, 2); |
| 1298 | crnlOk = db_column_int(&q, 3); |
| 1299 | chnged = db_column_int(&q, 4); |
| 1300 | binOk = db_column_int(&q, 5); |
| 1301 | |
| 1302 | blob_zero(&content); |
| 1303 | if( file_wd_islink(zFullname) ){ |
| 1304 | /* Instead of file content, put link destination path */ |
| 1305 | blob_read_link(&content, zFullname); |
| 1306 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -324,11 +324,10 @@ | |
| 324 | ** |
| 325 | ** See also: changes, clean, status |
| 326 | */ |
| 327 | void extra_cmd(void){ |
| 328 | Blob path; |
| 329 | Stmt q; |
| 330 | int n; |
| 331 | const char *zIgnoreFlag = find_option("ignore",0,1); |
| 332 | unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0; |
| 333 | int cwdRelative = 0; |
| @@ -353,13 +352,10 @@ | |
| 352 | "SELECT x FROM sfile" |
| 353 | " WHERE x NOT IN (%s)" |
| 354 | " ORDER BY 1", |
| 355 | fossil_all_reserved_names() |
| 356 | ); |
| 357 | db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)"); |
| 358 | blob_zero(&rewrittenPathname); |
| 359 | while( db_step(&q)==SQLITE_ROW ){ |
| 360 | zDisplayName = zPathname = db_column_text(&q, 0); |
| 361 | if( cwdRelative ) { |
| @@ -1031,10 +1027,11 @@ | |
| 1027 | ** --message-file|-M FILE read the commit comment from given file |
| 1028 | ** --nosign do not attempt to sign this commit with gpg |
| 1029 | ** --private do not sync changes and their descendants |
| 1030 | ** --tag TAG-NAME assign given tag TAG-NAME to the checkin |
| 1031 | ** --conflict allow unresolved merge conflicts |
| 1032 | ** --binary-ok do not warn about committing binary files |
| 1033 | ** |
| 1034 | ** See also: branch, changes, checkout, extra, sync |
| 1035 | */ |
| 1036 | void commit_cmd(void){ |
| 1037 | int hasChanges; /* True if unsaved changes exist */ |
| @@ -1049,10 +1046,11 @@ | |
| 1046 | int isAMerge = 0; /* True if checking in a merge */ |
| 1047 | int forceFlag = 0; /* Force a fork */ |
| 1048 | int forceDelta = 0; /* Force a delta-manifest */ |
| 1049 | int forceBaseline = 0; /* Force a baseline-manifest */ |
| 1050 | int allowConflict = 0; /* Allow unresolve merge conflicts */ |
| 1051 | int binaryOk = 0; /* The --binary-ok flag */ |
| 1052 | char *zManifestFile; /* Name of the manifest file */ |
| 1053 | int useCksum; /* True if checksums should be computed and verified */ |
| 1054 | int outputManifest; /* True to output "manifest" and "manifest.uuid" */ |
| 1055 | int testRun; /* True for a test run. Debugging only */ |
| 1056 | const char *zBranch; /* Create a new branch with this name */ |
| @@ -1086,10 +1084,11 @@ | |
| 1084 | zComment = find_option("comment","m",1); |
| 1085 | forceFlag = find_option("force", "f", 0)!=0; |
| 1086 | zBranch = find_option("branch","b",1); |
| 1087 | zColor = find_option("bgcolor",0,1); |
| 1088 | zBrClr = find_option("branchcolor",0,1); |
| 1089 | binaryOk = find_option("binary-ok",0,0)!=0; |
| 1090 | while( (zTag = find_option("tag",0,1))!=0 ){ |
| 1091 | if( zTag[0]==0 ) continue; |
| 1092 | azTag = fossil_realloc((void *)azTag, sizeof(char*)*(nTag+2)); |
| 1093 | azTag[nTag++] = zTag; |
| 1094 | azTag[nTag] = 0; |
| @@ -1295,11 +1294,11 @@ | |
| 1294 | id = db_column_int(&q, 0); |
| 1295 | zFullname = db_column_text(&q, 1); |
| 1296 | rid = db_column_int(&q, 2); |
| 1297 | crnlOk = db_column_int(&q, 3); |
| 1298 | chnged = db_column_int(&q, 4); |
| 1299 | binOk = binaryOk || db_column_int(&q, 5); |
| 1300 | |
| 1301 | blob_zero(&content); |
| 1302 | if( file_wd_islink(zFullname) ){ |
| 1303 | /* Instead of file content, put link destination path */ |
| 1304 | blob_read_link(&content, zFullname); |
| 1305 |
+12
-5
| --- src/http_transport.c | ||
| +++ src/http_transport.c | ||
| @@ -110,10 +110,12 @@ | ||
| 110 | 110 | */ |
| 111 | 111 | const char *zSsh; /* The base SSH command */ |
| 112 | 112 | Blob zCmd; /* The SSH command */ |
| 113 | 113 | char *zHost; /* The host name to contact */ |
| 114 | 114 | char *zIn; /* An input line received back from remote */ |
| 115 | + unsigned iRandom; | |
| 116 | + char zProbe[30]; | |
| 115 | 117 | |
| 116 | 118 | zSsh = db_get("ssh-command", zDefaultSshCmd); |
| 117 | 119 | blob_init(&zCmd, zSsh, -1); |
| 118 | 120 | if( g.urlPort!=g.urlDfltPort ){ |
| 119 | 121 | #ifdef __MINGW32__ |
| @@ -155,18 +157,23 @@ | ||
| 155 | 157 | if( sshPid==0 ){ |
| 156 | 158 | fossil_fatal("cannot start ssh tunnel using [%b]", &zCmd); |
| 157 | 159 | } |
| 158 | 160 | blob_reset(&zCmd); |
| 159 | 161 | |
| 160 | - /* Send an "echo" command to the other side to make sure that the | |
| 162 | + /* Send a couple of "echo" command to the other side to make sure that the | |
| 161 | 163 | ** connection is up and working. |
| 162 | 164 | */ |
| 163 | - fprintf(sshOut, "echo test\n"); | |
| 165 | + fprintf(sshOut, "echo test1\n"); | |
| 166 | + fflush(sshOut); | |
| 167 | + zIn = fossil_malloc(50000); | |
| 168 | + sshin_read(zIn, 50000); | |
| 169 | + sqlite3_randomness(sizeof(iRandom), &iRandom); | |
| 170 | + sqlite3_snprintf(sizeof(zProbe), zProbe, "probe-%08x", iRandom); | |
| 171 | + fprintf(sshOut, "echo %s\n", zProbe); | |
| 164 | 172 | fflush(sshOut); |
| 165 | - zIn = fossil_malloc(16000); | |
| 166 | - sshin_read(zIn, 16000); | |
| 167 | - if( memcmp(zIn, "test", 4)!=0 ){ | |
| 173 | + sshin_read(zIn, 500); | |
| 174 | + if( memcmp(zIn, zProbe, 14)!=0 ){ | |
| 168 | 175 | pclose2(sshIn, sshOut, sshPid); |
| 169 | 176 | fossil_fatal("ssh connection failed: [%s]", zIn); |
| 170 | 177 | } |
| 171 | 178 | fossil_free(zIn); |
| 172 | 179 | } |
| 173 | 180 |
| --- src/http_transport.c | |
| +++ src/http_transport.c | |
| @@ -110,10 +110,12 @@ | |
| 110 | */ |
| 111 | const char *zSsh; /* The base SSH command */ |
| 112 | Blob zCmd; /* The SSH command */ |
| 113 | char *zHost; /* The host name to contact */ |
| 114 | char *zIn; /* An input line received back from remote */ |
| 115 | |
| 116 | zSsh = db_get("ssh-command", zDefaultSshCmd); |
| 117 | blob_init(&zCmd, zSsh, -1); |
| 118 | if( g.urlPort!=g.urlDfltPort ){ |
| 119 | #ifdef __MINGW32__ |
| @@ -155,18 +157,23 @@ | |
| 155 | if( sshPid==0 ){ |
| 156 | fossil_fatal("cannot start ssh tunnel using [%b]", &zCmd); |
| 157 | } |
| 158 | blob_reset(&zCmd); |
| 159 | |
| 160 | /* Send an "echo" command to the other side to make sure that the |
| 161 | ** connection is up and working. |
| 162 | */ |
| 163 | fprintf(sshOut, "echo test\n"); |
| 164 | fflush(sshOut); |
| 165 | zIn = fossil_malloc(16000); |
| 166 | sshin_read(zIn, 16000); |
| 167 | if( memcmp(zIn, "test", 4)!=0 ){ |
| 168 | pclose2(sshIn, sshOut, sshPid); |
| 169 | fossil_fatal("ssh connection failed: [%s]", zIn); |
| 170 | } |
| 171 | fossil_free(zIn); |
| 172 | } |
| 173 |
| --- src/http_transport.c | |
| +++ src/http_transport.c | |
| @@ -110,10 +110,12 @@ | |
| 110 | */ |
| 111 | const char *zSsh; /* The base SSH command */ |
| 112 | Blob zCmd; /* The SSH command */ |
| 113 | char *zHost; /* The host name to contact */ |
| 114 | char *zIn; /* An input line received back from remote */ |
| 115 | unsigned iRandom; |
| 116 | char zProbe[30]; |
| 117 | |
| 118 | zSsh = db_get("ssh-command", zDefaultSshCmd); |
| 119 | blob_init(&zCmd, zSsh, -1); |
| 120 | if( g.urlPort!=g.urlDfltPort ){ |
| 121 | #ifdef __MINGW32__ |
| @@ -155,18 +157,23 @@ | |
| 157 | if( sshPid==0 ){ |
| 158 | fossil_fatal("cannot start ssh tunnel using [%b]", &zCmd); |
| 159 | } |
| 160 | blob_reset(&zCmd); |
| 161 | |
| 162 | /* Send a couple of "echo" command to the other side to make sure that the |
| 163 | ** connection is up and working. |
| 164 | */ |
| 165 | fprintf(sshOut, "echo test1\n"); |
| 166 | fflush(sshOut); |
| 167 | zIn = fossil_malloc(50000); |
| 168 | sshin_read(zIn, 50000); |
| 169 | sqlite3_randomness(sizeof(iRandom), &iRandom); |
| 170 | sqlite3_snprintf(sizeof(zProbe), zProbe, "probe-%08x", iRandom); |
| 171 | fprintf(sshOut, "echo %s\n", zProbe); |
| 172 | fflush(sshOut); |
| 173 | sshin_read(zIn, 500); |
| 174 | if( memcmp(zIn, zProbe, 14)!=0 ){ |
| 175 | pclose2(sshIn, sshOut, sshPid); |
| 176 | fossil_fatal("ssh connection failed: [%s]", zIn); |
| 177 | } |
| 178 | fossil_free(zIn); |
| 179 | } |
| 180 |
+4
-4
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -341,11 +341,11 @@ | ||
| 341 | 341 | if(g.db){ |
| 342 | 342 | db_close(0); |
| 343 | 343 | } |
| 344 | 344 | } |
| 345 | 345 | |
| 346 | -#if defined(_WIN32) && !defined(__MINGW32__) | |
| 346 | +#if defined(_WIN32) | |
| 347 | 347 | /* |
| 348 | 348 | ** Parse the command-line arguments passed to windows. We do this |
| 349 | 349 | ** ourselves to work around bugs in the command-line parsing of MinGW. |
| 350 | 350 | ** It is possible (in theory) to only use this routine when compiling |
| 351 | 351 | ** with MinGW and to use built-in command-line parsing for MSVC and |
| @@ -454,11 +454,11 @@ | ||
| 454 | 454 | } |
| 455 | 455 | argv[argc] = NULL; |
| 456 | 456 | *argcPtr = argc; |
| 457 | 457 | *((WCHAR ***)argvPtr) = argv; |
| 458 | 458 | } |
| 459 | -#endif /* defined(_WIN32) && !defined(__MINGW32__) */ | |
| 459 | +#endif /* defined(_WIN32) */ | |
| 460 | 460 | |
| 461 | 461 | |
| 462 | 462 | /* |
| 463 | 463 | ** Convert all arguments from mbcs (or unicode) to UTF-8. Then |
| 464 | 464 | ** search g.argv for arguments "--args FILENAME". If found, then |
| @@ -478,17 +478,17 @@ | ||
| 478 | 478 | int n; /* Number of bytes in one line */ |
| 479 | 479 | char *z; /* General use string pointer */ |
| 480 | 480 | char **newArgv; /* New expanded g.argv under construction */ |
| 481 | 481 | char const * zFileName; /* input file name */ |
| 482 | 482 | FILE * zInFile; /* input FILE */ |
| 483 | -#if defined(_WIN32) && !defined(__MINGW32__) | |
| 483 | +#if defined(_WIN32) | |
| 484 | 484 | WCHAR buf[MAX_PATH]; |
| 485 | 485 | #endif |
| 486 | 486 | |
| 487 | 487 | g.argc = argc; |
| 488 | 488 | g.argv = argv; |
| 489 | -#if defined(_WIN32) && !defined(__MINGW32__) | |
| 489 | +#if defined(_WIN32) | |
| 490 | 490 | parse_windows_command_line(&g.argc, &g.argv); |
| 491 | 491 | GetModuleFileNameW(NULL, buf, MAX_PATH); |
| 492 | 492 | g.nameOfExe = fossil_unicode_to_utf8(buf); |
| 493 | 493 | for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]); |
| 494 | 494 | #else |
| 495 | 495 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -341,11 +341,11 @@ | |
| 341 | if(g.db){ |
| 342 | db_close(0); |
| 343 | } |
| 344 | } |
| 345 | |
| 346 | #if defined(_WIN32) && !defined(__MINGW32__) |
| 347 | /* |
| 348 | ** Parse the command-line arguments passed to windows. We do this |
| 349 | ** ourselves to work around bugs in the command-line parsing of MinGW. |
| 350 | ** It is possible (in theory) to only use this routine when compiling |
| 351 | ** with MinGW and to use built-in command-line parsing for MSVC and |
| @@ -454,11 +454,11 @@ | |
| 454 | } |
| 455 | argv[argc] = NULL; |
| 456 | *argcPtr = argc; |
| 457 | *((WCHAR ***)argvPtr) = argv; |
| 458 | } |
| 459 | #endif /* defined(_WIN32) && !defined(__MINGW32__) */ |
| 460 | |
| 461 | |
| 462 | /* |
| 463 | ** Convert all arguments from mbcs (or unicode) to UTF-8. Then |
| 464 | ** search g.argv for arguments "--args FILENAME". If found, then |
| @@ -478,17 +478,17 @@ | |
| 478 | int n; /* Number of bytes in one line */ |
| 479 | char *z; /* General use string pointer */ |
| 480 | char **newArgv; /* New expanded g.argv under construction */ |
| 481 | char const * zFileName; /* input file name */ |
| 482 | FILE * zInFile; /* input FILE */ |
| 483 | #if defined(_WIN32) && !defined(__MINGW32__) |
| 484 | WCHAR buf[MAX_PATH]; |
| 485 | #endif |
| 486 | |
| 487 | g.argc = argc; |
| 488 | g.argv = argv; |
| 489 | #if defined(_WIN32) && !defined(__MINGW32__) |
| 490 | parse_windows_command_line(&g.argc, &g.argv); |
| 491 | GetModuleFileNameW(NULL, buf, MAX_PATH); |
| 492 | g.nameOfExe = fossil_unicode_to_utf8(buf); |
| 493 | for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]); |
| 494 | #else |
| 495 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -341,11 +341,11 @@ | |
| 341 | if(g.db){ |
| 342 | db_close(0); |
| 343 | } |
| 344 | } |
| 345 | |
| 346 | #if defined(_WIN32) |
| 347 | /* |
| 348 | ** Parse the command-line arguments passed to windows. We do this |
| 349 | ** ourselves to work around bugs in the command-line parsing of MinGW. |
| 350 | ** It is possible (in theory) to only use this routine when compiling |
| 351 | ** with MinGW and to use built-in command-line parsing for MSVC and |
| @@ -454,11 +454,11 @@ | |
| 454 | } |
| 455 | argv[argc] = NULL; |
| 456 | *argcPtr = argc; |
| 457 | *((WCHAR ***)argvPtr) = argv; |
| 458 | } |
| 459 | #endif /* defined(_WIN32) */ |
| 460 | |
| 461 | |
| 462 | /* |
| 463 | ** Convert all arguments from mbcs (or unicode) to UTF-8. Then |
| 464 | ** search g.argv for arguments "--args FILENAME". If found, then |
| @@ -478,17 +478,17 @@ | |
| 478 | int n; /* Number of bytes in one line */ |
| 479 | char *z; /* General use string pointer */ |
| 480 | char **newArgv; /* New expanded g.argv under construction */ |
| 481 | char const * zFileName; /* input file name */ |
| 482 | FILE * zInFile; /* input FILE */ |
| 483 | #if defined(_WIN32) |
| 484 | WCHAR buf[MAX_PATH]; |
| 485 | #endif |
| 486 | |
| 487 | g.argc = argc; |
| 488 | g.argv = argv; |
| 489 | #if defined(_WIN32) |
| 490 | parse_windows_command_line(&g.argc, &g.argv); |
| 491 | GetModuleFileNameW(NULL, buf, MAX_PATH); |
| 492 | g.nameOfExe = fossil_unicode_to_utf8(buf); |
| 493 | for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]); |
| 494 | #else |
| 495 |
+4
-4
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -341,11 +341,11 @@ | ||
| 341 | 341 | if(g.db){ |
| 342 | 342 | db_close(0); |
| 343 | 343 | } |
| 344 | 344 | } |
| 345 | 345 | |
| 346 | -#if defined(_WIN32) && !defined(__MINGW32__) | |
| 346 | +#if defined(_WIN32) | |
| 347 | 347 | /* |
| 348 | 348 | ** Parse the command-line arguments passed to windows. We do this |
| 349 | 349 | ** ourselves to work around bugs in the command-line parsing of MinGW. |
| 350 | 350 | ** It is possible (in theory) to only use this routine when compiling |
| 351 | 351 | ** with MinGW and to use built-in command-line parsing for MSVC and |
| @@ -454,11 +454,11 @@ | ||
| 454 | 454 | } |
| 455 | 455 | argv[argc] = NULL; |
| 456 | 456 | *argcPtr = argc; |
| 457 | 457 | *((WCHAR ***)argvPtr) = argv; |
| 458 | 458 | } |
| 459 | -#endif /* defined(_WIN32) && !defined(__MINGW32__) */ | |
| 459 | +#endif /* defined(_WIN32) */ | |
| 460 | 460 | |
| 461 | 461 | |
| 462 | 462 | /* |
| 463 | 463 | ** Convert all arguments from mbcs (or unicode) to UTF-8. Then |
| 464 | 464 | ** search g.argv for arguments "--args FILENAME". If found, then |
| @@ -478,17 +478,17 @@ | ||
| 478 | 478 | int n; /* Number of bytes in one line */ |
| 479 | 479 | char *z; /* General use string pointer */ |
| 480 | 480 | char **newArgv; /* New expanded g.argv under construction */ |
| 481 | 481 | char const * zFileName; /* input file name */ |
| 482 | 482 | FILE * zInFile; /* input FILE */ |
| 483 | -#if defined(_WIN32) && !defined(__MINGW32__) | |
| 483 | +#if defined(_WIN32) | |
| 484 | 484 | WCHAR buf[MAX_PATH]; |
| 485 | 485 | #endif |
| 486 | 486 | |
| 487 | 487 | g.argc = argc; |
| 488 | 488 | g.argv = argv; |
| 489 | -#if defined(_WIN32) && !defined(__MINGW32__) | |
| 489 | +#if defined(_WIN32) | |
| 490 | 490 | parse_windows_command_line(&g.argc, &g.argv); |
| 491 | 491 | GetModuleFileNameW(NULL, buf, MAX_PATH); |
| 492 | 492 | g.nameOfExe = fossil_unicode_to_utf8(buf); |
| 493 | 493 | for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]); |
| 494 | 494 | #else |
| 495 | 495 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -341,11 +341,11 @@ | |
| 341 | if(g.db){ |
| 342 | db_close(0); |
| 343 | } |
| 344 | } |
| 345 | |
| 346 | #if defined(_WIN32) && !defined(__MINGW32__) |
| 347 | /* |
| 348 | ** Parse the command-line arguments passed to windows. We do this |
| 349 | ** ourselves to work around bugs in the command-line parsing of MinGW. |
| 350 | ** It is possible (in theory) to only use this routine when compiling |
| 351 | ** with MinGW and to use built-in command-line parsing for MSVC and |
| @@ -454,11 +454,11 @@ | |
| 454 | } |
| 455 | argv[argc] = NULL; |
| 456 | *argcPtr = argc; |
| 457 | *((WCHAR ***)argvPtr) = argv; |
| 458 | } |
| 459 | #endif /* defined(_WIN32) && !defined(__MINGW32__) */ |
| 460 | |
| 461 | |
| 462 | /* |
| 463 | ** Convert all arguments from mbcs (or unicode) to UTF-8. Then |
| 464 | ** search g.argv for arguments "--args FILENAME". If found, then |
| @@ -478,17 +478,17 @@ | |
| 478 | int n; /* Number of bytes in one line */ |
| 479 | char *z; /* General use string pointer */ |
| 480 | char **newArgv; /* New expanded g.argv under construction */ |
| 481 | char const * zFileName; /* input file name */ |
| 482 | FILE * zInFile; /* input FILE */ |
| 483 | #if defined(_WIN32) && !defined(__MINGW32__) |
| 484 | WCHAR buf[MAX_PATH]; |
| 485 | #endif |
| 486 | |
| 487 | g.argc = argc; |
| 488 | g.argv = argv; |
| 489 | #if defined(_WIN32) && !defined(__MINGW32__) |
| 490 | parse_windows_command_line(&g.argc, &g.argv); |
| 491 | GetModuleFileNameW(NULL, buf, MAX_PATH); |
| 492 | g.nameOfExe = fossil_unicode_to_utf8(buf); |
| 493 | for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]); |
| 494 | #else |
| 495 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -341,11 +341,11 @@ | |
| 341 | if(g.db){ |
| 342 | db_close(0); |
| 343 | } |
| 344 | } |
| 345 | |
| 346 | #if defined(_WIN32) |
| 347 | /* |
| 348 | ** Parse the command-line arguments passed to windows. We do this |
| 349 | ** ourselves to work around bugs in the command-line parsing of MinGW. |
| 350 | ** It is possible (in theory) to only use this routine when compiling |
| 351 | ** with MinGW and to use built-in command-line parsing for MSVC and |
| @@ -454,11 +454,11 @@ | |
| 454 | } |
| 455 | argv[argc] = NULL; |
| 456 | *argcPtr = argc; |
| 457 | *((WCHAR ***)argvPtr) = argv; |
| 458 | } |
| 459 | #endif /* defined(_WIN32) */ |
| 460 | |
| 461 | |
| 462 | /* |
| 463 | ** Convert all arguments from mbcs (or unicode) to UTF-8. Then |
| 464 | ** search g.argv for arguments "--args FILENAME". If found, then |
| @@ -478,17 +478,17 @@ | |
| 478 | int n; /* Number of bytes in one line */ |
| 479 | char *z; /* General use string pointer */ |
| 480 | char **newArgv; /* New expanded g.argv under construction */ |
| 481 | char const * zFileName; /* input file name */ |
| 482 | FILE * zInFile; /* input FILE */ |
| 483 | #if defined(_WIN32) |
| 484 | WCHAR buf[MAX_PATH]; |
| 485 | #endif |
| 486 | |
| 487 | g.argc = argc; |
| 488 | g.argv = argv; |
| 489 | #if defined(_WIN32) |
| 490 | parse_windows_command_line(&g.argc, &g.argv); |
| 491 | GetModuleFileNameW(NULL, buf, MAX_PATH); |
| 492 | g.nameOfExe = fossil_unicode_to_utf8(buf); |
| 493 | for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]); |
| 494 | #else |
| 495 |
+32
-23
| --- src/skins.c | ||
| +++ src/skins.c | ||
| @@ -44,10 +44,11 @@ | ||
| 44 | 44 | @ font-size: 2em; |
| 45 | 45 | @ font-weight: bold; |
| 46 | 46 | @ background-color: #707070; |
| 47 | 47 | @ color: #ffffff; |
| 48 | 48 | @ min-width: 200px; |
| 49 | +@ white-space: nowrap; | |
| 49 | 50 | @ } |
| 50 | 51 | @ |
| 51 | 52 | @ /* The page title centered at the top of each page */ |
| 52 | 53 | @ div.title { |
| 53 | 54 | @ display: table-cell; |
| @@ -67,10 +68,11 @@ | ||
| 67 | 68 | @ vertical-align: bottom; |
| 68 | 69 | @ color: #404040; |
| 69 | 70 | @ font-size: 0.8em; |
| 70 | 71 | @ font-weight: bold; |
| 71 | 72 | @ min-width: 200px; |
| 73 | +@ white-space: nowrap; | |
| 72 | 74 | @ } |
| 73 | 75 | @ |
| 74 | 76 | @ /* The header across the top of the page */ |
| 75 | 77 | @ div.header { |
| 76 | 78 | @ display: table; |
| @@ -166,17 +168,17 @@ | ||
| 166 | 168 | @ media="screen"> |
| 167 | 169 | @ </head> |
| 168 | 170 | @ <body> |
| 169 | 171 | @ <div class="header"> |
| 170 | 172 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 171 | -@ <div class="status"><nobr><th1> | |
| 173 | +@ <div class="status"><th1> | |
| 172 | 174 | @ if {[info exists login]} { |
| 173 | 175 | @ puts "Logged in as $login" |
| 174 | 176 | @ } else { |
| 175 | 177 | @ puts "Not logged in" |
| 176 | 178 | @ } |
| 177 | -@ </th1></nobr></div> | |
| 179 | +@ </th1></div> | |
| 178 | 180 | @ </div> |
| 179 | 181 | @ <div class="mainmenu"> |
| 180 | 182 | @ <th1> |
| 181 | 183 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 182 | 184 | @ if {[anycap jor]} { |
| @@ -235,10 +237,11 @@ | ||
| 235 | 237 | @ text-align: center; |
| 236 | 238 | @ vertical-align: bottom; |
| 237 | 239 | @ font-weight: bold; |
| 238 | 240 | @ font-size: 2.5em; |
| 239 | 241 | @ color: #a09048; |
| 242 | +@ white-space: nowrap; | |
| 240 | 243 | @ } |
| 241 | 244 | @ |
| 242 | 245 | @ /* The page title centered at the top of each page */ |
| 243 | 246 | @ div.title { |
| 244 | 247 | @ display: table-cell; |
| @@ -258,10 +261,11 @@ | ||
| 258 | 261 | @ vertical-align: bottom; |
| 259 | 262 | @ color: #a09048; |
| 260 | 263 | @ padding: 5px 5px 0 0; |
| 261 | 264 | @ font-size: 0.8em; |
| 262 | 265 | @ font-weight: bold; |
| 266 | +@ white-space: nowrap; | |
| 263 | 267 | @ } |
| 264 | 268 | @ |
| 265 | 269 | @ /* The header across the top of the page */ |
| 266 | 270 | @ div.header { |
| 267 | 271 | @ display: table; |
| @@ -370,18 +374,18 @@ | ||
| 370 | 374 | @ </head> |
| 371 | 375 | @ <body> |
| 372 | 376 | @ <div class="header"> |
| 373 | 377 | @ <div class="title">$<title></div> |
| 374 | 378 | @ <div class="status"> |
| 375 | -@ <div class="logo"><nobr>$<project_name></nobr></div><br/> | |
| 376 | -@ <nobr><th1> | |
| 379 | +@ <div class="logo">$<project_name></div><br/> | |
| 380 | +@ <th1> | |
| 377 | 381 | @ if {[info exists login]} { |
| 378 | 382 | @ puts "Logged in as $login" |
| 379 | 383 | @ } else { |
| 380 | 384 | @ puts "Not logged in" |
| 381 | 385 | @ } |
| 382 | -@ </th1></nobr></div> | |
| 386 | +@ </th1></div> | |
| 383 | 387 | @ </div> |
| 384 | 388 | @ <div class="mainmenu"> |
| 385 | 389 | @ <th1> |
| 386 | 390 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 387 | 391 | @ if {[anycap jor]} { |
| @@ -448,10 +452,11 @@ | ||
| 448 | 452 | @ display: table-cell; |
| 449 | 453 | @ text-align: left; |
| 450 | 454 | @ vertical-align: bottom; |
| 451 | 455 | @ font-weight: bold; |
| 452 | 456 | @ color: #333; |
| 457 | +@ white-space: nowrap; | |
| 453 | 458 | @ } |
| 454 | 459 | @ |
| 455 | 460 | @ /* The page title centered at the top of each page */ |
| 456 | 461 | @ div.title { |
| 457 | 462 | @ display: table-cell; |
| @@ -471,10 +476,11 @@ | ||
| 471 | 476 | @ vertical-align: bottom; |
| 472 | 477 | @ padding-bottom: 5px; |
| 473 | 478 | @ color: #333; |
| 474 | 479 | @ font-size: 0.8em; |
| 475 | 480 | @ font-weight: bold; |
| 481 | +@ white-space: nowrap; | |
| 476 | 482 | @ } |
| 477 | 483 | @ |
| 478 | 484 | @ /* The header across the top of the page */ |
| 479 | 485 | @ div.header { |
| 480 | 486 | @ margin:10px 0px 10px 0px; |
| @@ -606,20 +612,20 @@ | ||
| 606 | 612 | @ </head> |
| 607 | 613 | @ <body> |
| 608 | 614 | @ <div class="header"> |
| 609 | 615 | @ <div class="logo"> |
| 610 | 616 | @ <img src="$home/logo" alt="logo"> |
| 611 | -@ <br /><nobr>$<project_name></nobr> | |
| 617 | +@ <br />$<project_name> | |
| 612 | 618 | @ </div> |
| 613 | 619 | @ <div class="title">$<title></div> |
| 614 | -@ <div class="status"><nobr><th1> | |
| 620 | +@ <div class="status"><th1> | |
| 615 | 621 | @ if {[info exists login]} { |
| 616 | 622 | @ puts "Logged in as $login" |
| 617 | 623 | @ } else { |
| 618 | 624 | @ puts "Not logged in" |
| 619 | 625 | @ } |
| 620 | -@ </th1></nobr></div> | |
| 626 | +@ </th1></div> | |
| 621 | 627 | @ </div> |
| 622 | 628 | @ <div class="mainmenu"> |
| 623 | 629 | @ <th1> |
| 624 | 630 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 625 | 631 | @ if {[anycap jor]} { |
| @@ -682,10 +688,11 @@ | ||
| 682 | 688 | @ div.logo { |
| 683 | 689 | @ display: table-cell; |
| 684 | 690 | @ text-align: right; |
| 685 | 691 | @ vertical-align: bottom; |
| 686 | 692 | @ font-weight: normal; |
| 693 | +@ white-space: nowrap; | |
| 687 | 694 | @ } |
| 688 | 695 | @ |
| 689 | 696 | @ /* Widths */ |
| 690 | 697 | @ div.header, div.mainmenu, div.submenu, div.content, div.footer { |
| 691 | 698 | @ max-width: 900px; |
| @@ -714,10 +721,11 @@ | ||
| 714 | 721 | @ display: table-cell; |
| 715 | 722 | @ text-align: right; |
| 716 | 723 | @ vertical-align: bottom; |
| 717 | 724 | @ color: #333; |
| 718 | 725 | @ margin-right: -20px; |
| 726 | +@ white-space: nowrap; | |
| 719 | 727 | @ } |
| 720 | 728 | @ |
| 721 | 729 | @ /* The main menu bar that appears at the top of the page beneath |
| 722 | 730 | @ ** the header */ |
| 723 | 731 | @ div.mainmenu { |
| @@ -869,20 +877,20 @@ | ||
| 869 | 877 | @ </head> |
| 870 | 878 | @ <body> |
| 871 | 879 | @ <div class="header"> |
| 872 | 880 | @ <div class="logo"> |
| 873 | 881 | @ <img src="$home/logo" alt="logo"> |
| 874 | -@ <br /><nobr>$<project_name></nobr> | |
| 882 | +@ <br />$<project_name> | |
| 875 | 883 | @ </div> |
| 876 | 884 | @ <div class="title">$<title></div> |
| 877 | -@ <div class="status"><nobr><th1> | |
| 885 | +@ <div class="status"><th1> | |
| 878 | 886 | @ if {[info exists login]} { |
| 879 | 887 | @ puts "Logged in as $login" |
| 880 | 888 | @ } else { |
| 881 | 889 | @ puts "Not logged in" |
| 882 | 890 | @ } |
| 883 | -@ </th1></nobr></div> | |
| 891 | +@ </th1></div> | |
| 884 | 892 | @ </div> |
| 885 | 893 | @ <div class="mainmenu"> |
| 886 | 894 | @ <th1> |
| 887 | 895 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 888 | 896 | @ if {[anycap jor]} { |
| @@ -955,10 +963,11 @@ | ||
| 955 | 963 | @ text-align: center; |
| 956 | 964 | @ vertical-align: bottom; |
| 957 | 965 | @ font-weight: bold; |
| 958 | 966 | @ color: #558195; |
| 959 | 967 | @ min-width: 200px; |
| 968 | +@ white-space: nowrap; | |
| 960 | 969 | @ } |
| 961 | 970 | @ |
| 962 | 971 | @ /* The page title centered at the top of each page */ |
| 963 | 972 | @ div.title { |
| 964 | 973 | @ display: table-cell; |
| @@ -1159,46 +1168,46 @@ | ||
| 1159 | 1168 | @ <a href="$logourl"> |
| 1160 | 1169 | @ <img src="$baseurl/logo" border="0" alt="$project_name"> |
| 1161 | 1170 | @ </a> |
| 1162 | 1171 | @ </div> |
| 1163 | 1172 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 1164 | -@ <div class="status"><nobr><th1> | |
| 1173 | +@ <div class="status"><th1> | |
| 1165 | 1174 | @ if {[info exists login]} { |
| 1166 | 1175 | @ puts "Logged in as $login" |
| 1167 | 1176 | @ } else { |
| 1168 | 1177 | @ puts "Not logged in" |
| 1169 | 1178 | @ } |
| 1170 | -@ </th1></nobr></div> | |
| 1179 | +@ </th1></div> | |
| 1171 | 1180 | @ </div> |
| 1172 | 1181 | @ <div class="mainmenu"> |
| 1173 | 1182 | @ <th1> |
| 1174 | 1183 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 1175 | 1184 | @ if {[anycap jor]} { |
| 1176 | -@ html "<a href=''$home/timeline''>Timeline</a>\n" | |
| 1185 | +@ html "<a href=''timeline''>Timeline</a>\n" | |
| 1177 | 1186 | @ } |
| 1178 | 1187 | @ if {[hascap oh]} { |
| 1179 | -@ html "<a href=''$home/dir?ci=tip''>Files</a>\n" | |
| 1188 | +@ html "<a href=''dir?ci=tip''>Files</a>\n" | |
| 1180 | 1189 | @ } |
| 1181 | 1190 | @ if {[hascap o]} { |
| 1182 | -@ html "<a href=''$home/brlist''>Branches</a>\n" | |
| 1183 | -@ html "<a href=''$home/taglist''>Tags</a>\n" | |
| 1191 | +@ html "<a href=''brlist''>Branches</a>\n" | |
| 1192 | +@ html "<a href=''taglist''>Tags</a>\n" | |
| 1184 | 1193 | @ } |
| 1185 | 1194 | @ if {[hascap r]} { |
| 1186 | -@ html "<a href=''$home/reportlist''>Tickets</a>\n" | |
| 1195 | +@ html "<a href=''reportlist''>Tickets</a>\n" | |
| 1187 | 1196 | @ } |
| 1188 | 1197 | @ if {[hascap j]} { |
| 1189 | -@ html "<a href=''$home/wiki''>Wiki</a>\n" | |
| 1198 | +@ html "<a href=''wiki''>Wiki</a>\n" | |
| 1190 | 1199 | @ } |
| 1191 | 1200 | @ if {[hascap s]} { |
| 1192 | -@ html "<a href=''$home/setup''>Admin</a>\n" | |
| 1201 | +@ html "<a href=''setup''>Admin</a>\n" | |
| 1193 | 1202 | @ } elseif {[hascap a]} { |
| 1194 | -@ html "<a href=''$home/setup_ulist''>Users</a>\n" | |
| 1203 | +@ html "<a href=''setup_ulist''>Users</a>\n" | |
| 1195 | 1204 | @ } |
| 1196 | 1205 | @ if {[info exists login]} { |
| 1197 | -@ html "<a href=''$home/login''>Logout</a>\n" | |
| 1206 | +@ html "<a href=''login''>Logout</a>\n" | |
| 1198 | 1207 | @ } else { |
| 1199 | -@ html "<a href=''$home/login''>Login</a>\n" | |
| 1208 | +@ html "<a href=''login''>Login</a>\n" | |
| 1200 | 1209 | @ } |
| 1201 | 1210 | @ </th1></div> |
| 1202 | 1211 | @ '); |
| 1203 | 1212 | @ REPLACE INTO config(name,mtime,value) |
| 1204 | 1213 | @ VALUES('footer',now(),'<div class="footer"> |
| 1205 | 1214 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -44,10 +44,11 @@ | |
| 44 | @ font-size: 2em; |
| 45 | @ font-weight: bold; |
| 46 | @ background-color: #707070; |
| 47 | @ color: #ffffff; |
| 48 | @ min-width: 200px; |
| 49 | @ } |
| 50 | @ |
| 51 | @ /* The page title centered at the top of each page */ |
| 52 | @ div.title { |
| 53 | @ display: table-cell; |
| @@ -67,10 +68,11 @@ | |
| 67 | @ vertical-align: bottom; |
| 68 | @ color: #404040; |
| 69 | @ font-size: 0.8em; |
| 70 | @ font-weight: bold; |
| 71 | @ min-width: 200px; |
| 72 | @ } |
| 73 | @ |
| 74 | @ /* The header across the top of the page */ |
| 75 | @ div.header { |
| 76 | @ display: table; |
| @@ -166,17 +168,17 @@ | |
| 166 | @ media="screen"> |
| 167 | @ </head> |
| 168 | @ <body> |
| 169 | @ <div class="header"> |
| 170 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 171 | @ <div class="status"><nobr><th1> |
| 172 | @ if {[info exists login]} { |
| 173 | @ puts "Logged in as $login" |
| 174 | @ } else { |
| 175 | @ puts "Not logged in" |
| 176 | @ } |
| 177 | @ </th1></nobr></div> |
| 178 | @ </div> |
| 179 | @ <div class="mainmenu"> |
| 180 | @ <th1> |
| 181 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 182 | @ if {[anycap jor]} { |
| @@ -235,10 +237,11 @@ | |
| 235 | @ text-align: center; |
| 236 | @ vertical-align: bottom; |
| 237 | @ font-weight: bold; |
| 238 | @ font-size: 2.5em; |
| 239 | @ color: #a09048; |
| 240 | @ } |
| 241 | @ |
| 242 | @ /* The page title centered at the top of each page */ |
| 243 | @ div.title { |
| 244 | @ display: table-cell; |
| @@ -258,10 +261,11 @@ | |
| 258 | @ vertical-align: bottom; |
| 259 | @ color: #a09048; |
| 260 | @ padding: 5px 5px 0 0; |
| 261 | @ font-size: 0.8em; |
| 262 | @ font-weight: bold; |
| 263 | @ } |
| 264 | @ |
| 265 | @ /* The header across the top of the page */ |
| 266 | @ div.header { |
| 267 | @ display: table; |
| @@ -370,18 +374,18 @@ | |
| 370 | @ </head> |
| 371 | @ <body> |
| 372 | @ <div class="header"> |
| 373 | @ <div class="title">$<title></div> |
| 374 | @ <div class="status"> |
| 375 | @ <div class="logo"><nobr>$<project_name></nobr></div><br/> |
| 376 | @ <nobr><th1> |
| 377 | @ if {[info exists login]} { |
| 378 | @ puts "Logged in as $login" |
| 379 | @ } else { |
| 380 | @ puts "Not logged in" |
| 381 | @ } |
| 382 | @ </th1></nobr></div> |
| 383 | @ </div> |
| 384 | @ <div class="mainmenu"> |
| 385 | @ <th1> |
| 386 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 387 | @ if {[anycap jor]} { |
| @@ -448,10 +452,11 @@ | |
| 448 | @ display: table-cell; |
| 449 | @ text-align: left; |
| 450 | @ vertical-align: bottom; |
| 451 | @ font-weight: bold; |
| 452 | @ color: #333; |
| 453 | @ } |
| 454 | @ |
| 455 | @ /* The page title centered at the top of each page */ |
| 456 | @ div.title { |
| 457 | @ display: table-cell; |
| @@ -471,10 +476,11 @@ | |
| 471 | @ vertical-align: bottom; |
| 472 | @ padding-bottom: 5px; |
| 473 | @ color: #333; |
| 474 | @ font-size: 0.8em; |
| 475 | @ font-weight: bold; |
| 476 | @ } |
| 477 | @ |
| 478 | @ /* The header across the top of the page */ |
| 479 | @ div.header { |
| 480 | @ margin:10px 0px 10px 0px; |
| @@ -606,20 +612,20 @@ | |
| 606 | @ </head> |
| 607 | @ <body> |
| 608 | @ <div class="header"> |
| 609 | @ <div class="logo"> |
| 610 | @ <img src="$home/logo" alt="logo"> |
| 611 | @ <br /><nobr>$<project_name></nobr> |
| 612 | @ </div> |
| 613 | @ <div class="title">$<title></div> |
| 614 | @ <div class="status"><nobr><th1> |
| 615 | @ if {[info exists login]} { |
| 616 | @ puts "Logged in as $login" |
| 617 | @ } else { |
| 618 | @ puts "Not logged in" |
| 619 | @ } |
| 620 | @ </th1></nobr></div> |
| 621 | @ </div> |
| 622 | @ <div class="mainmenu"> |
| 623 | @ <th1> |
| 624 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 625 | @ if {[anycap jor]} { |
| @@ -682,10 +688,11 @@ | |
| 682 | @ div.logo { |
| 683 | @ display: table-cell; |
| 684 | @ text-align: right; |
| 685 | @ vertical-align: bottom; |
| 686 | @ font-weight: normal; |
| 687 | @ } |
| 688 | @ |
| 689 | @ /* Widths */ |
| 690 | @ div.header, div.mainmenu, div.submenu, div.content, div.footer { |
| 691 | @ max-width: 900px; |
| @@ -714,10 +721,11 @@ | |
| 714 | @ display: table-cell; |
| 715 | @ text-align: right; |
| 716 | @ vertical-align: bottom; |
| 717 | @ color: #333; |
| 718 | @ margin-right: -20px; |
| 719 | @ } |
| 720 | @ |
| 721 | @ /* The main menu bar that appears at the top of the page beneath |
| 722 | @ ** the header */ |
| 723 | @ div.mainmenu { |
| @@ -869,20 +877,20 @@ | |
| 869 | @ </head> |
| 870 | @ <body> |
| 871 | @ <div class="header"> |
| 872 | @ <div class="logo"> |
| 873 | @ <img src="$home/logo" alt="logo"> |
| 874 | @ <br /><nobr>$<project_name></nobr> |
| 875 | @ </div> |
| 876 | @ <div class="title">$<title></div> |
| 877 | @ <div class="status"><nobr><th1> |
| 878 | @ if {[info exists login]} { |
| 879 | @ puts "Logged in as $login" |
| 880 | @ } else { |
| 881 | @ puts "Not logged in" |
| 882 | @ } |
| 883 | @ </th1></nobr></div> |
| 884 | @ </div> |
| 885 | @ <div class="mainmenu"> |
| 886 | @ <th1> |
| 887 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 888 | @ if {[anycap jor]} { |
| @@ -955,10 +963,11 @@ | |
| 955 | @ text-align: center; |
| 956 | @ vertical-align: bottom; |
| 957 | @ font-weight: bold; |
| 958 | @ color: #558195; |
| 959 | @ min-width: 200px; |
| 960 | @ } |
| 961 | @ |
| 962 | @ /* The page title centered at the top of each page */ |
| 963 | @ div.title { |
| 964 | @ display: table-cell; |
| @@ -1159,46 +1168,46 @@ | |
| 1159 | @ <a href="$logourl"> |
| 1160 | @ <img src="$baseurl/logo" border="0" alt="$project_name"> |
| 1161 | @ </a> |
| 1162 | @ </div> |
| 1163 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 1164 | @ <div class="status"><nobr><th1> |
| 1165 | @ if {[info exists login]} { |
| 1166 | @ puts "Logged in as $login" |
| 1167 | @ } else { |
| 1168 | @ puts "Not logged in" |
| 1169 | @ } |
| 1170 | @ </th1></nobr></div> |
| 1171 | @ </div> |
| 1172 | @ <div class="mainmenu"> |
| 1173 | @ <th1> |
| 1174 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 1175 | @ if {[anycap jor]} { |
| 1176 | @ html "<a href=''$home/timeline''>Timeline</a>\n" |
| 1177 | @ } |
| 1178 | @ if {[hascap oh]} { |
| 1179 | @ html "<a href=''$home/dir?ci=tip''>Files</a>\n" |
| 1180 | @ } |
| 1181 | @ if {[hascap o]} { |
| 1182 | @ html "<a href=''$home/brlist''>Branches</a>\n" |
| 1183 | @ html "<a href=''$home/taglist''>Tags</a>\n" |
| 1184 | @ } |
| 1185 | @ if {[hascap r]} { |
| 1186 | @ html "<a href=''$home/reportlist''>Tickets</a>\n" |
| 1187 | @ } |
| 1188 | @ if {[hascap j]} { |
| 1189 | @ html "<a href=''$home/wiki''>Wiki</a>\n" |
| 1190 | @ } |
| 1191 | @ if {[hascap s]} { |
| 1192 | @ html "<a href=''$home/setup''>Admin</a>\n" |
| 1193 | @ } elseif {[hascap a]} { |
| 1194 | @ html "<a href=''$home/setup_ulist''>Users</a>\n" |
| 1195 | @ } |
| 1196 | @ if {[info exists login]} { |
| 1197 | @ html "<a href=''$home/login''>Logout</a>\n" |
| 1198 | @ } else { |
| 1199 | @ html "<a href=''$home/login''>Login</a>\n" |
| 1200 | @ } |
| 1201 | @ </th1></div> |
| 1202 | @ '); |
| 1203 | @ REPLACE INTO config(name,mtime,value) |
| 1204 | @ VALUES('footer',now(),'<div class="footer"> |
| 1205 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -44,10 +44,11 @@ | |
| 44 | @ font-size: 2em; |
| 45 | @ font-weight: bold; |
| 46 | @ background-color: #707070; |
| 47 | @ color: #ffffff; |
| 48 | @ min-width: 200px; |
| 49 | @ white-space: nowrap; |
| 50 | @ } |
| 51 | @ |
| 52 | @ /* The page title centered at the top of each page */ |
| 53 | @ div.title { |
| 54 | @ display: table-cell; |
| @@ -67,10 +68,11 @@ | |
| 68 | @ vertical-align: bottom; |
| 69 | @ color: #404040; |
| 70 | @ font-size: 0.8em; |
| 71 | @ font-weight: bold; |
| 72 | @ min-width: 200px; |
| 73 | @ white-space: nowrap; |
| 74 | @ } |
| 75 | @ |
| 76 | @ /* The header across the top of the page */ |
| 77 | @ div.header { |
| 78 | @ display: table; |
| @@ -166,17 +168,17 @@ | |
| 168 | @ media="screen"> |
| 169 | @ </head> |
| 170 | @ <body> |
| 171 | @ <div class="header"> |
| 172 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 173 | @ <div class="status"><th1> |
| 174 | @ if {[info exists login]} { |
| 175 | @ puts "Logged in as $login" |
| 176 | @ } else { |
| 177 | @ puts "Not logged in" |
| 178 | @ } |
| 179 | @ </th1></div> |
| 180 | @ </div> |
| 181 | @ <div class="mainmenu"> |
| 182 | @ <th1> |
| 183 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 184 | @ if {[anycap jor]} { |
| @@ -235,10 +237,11 @@ | |
| 237 | @ text-align: center; |
| 238 | @ vertical-align: bottom; |
| 239 | @ font-weight: bold; |
| 240 | @ font-size: 2.5em; |
| 241 | @ color: #a09048; |
| 242 | @ white-space: nowrap; |
| 243 | @ } |
| 244 | @ |
| 245 | @ /* The page title centered at the top of each page */ |
| 246 | @ div.title { |
| 247 | @ display: table-cell; |
| @@ -258,10 +261,11 @@ | |
| 261 | @ vertical-align: bottom; |
| 262 | @ color: #a09048; |
| 263 | @ padding: 5px 5px 0 0; |
| 264 | @ font-size: 0.8em; |
| 265 | @ font-weight: bold; |
| 266 | @ white-space: nowrap; |
| 267 | @ } |
| 268 | @ |
| 269 | @ /* The header across the top of the page */ |
| 270 | @ div.header { |
| 271 | @ display: table; |
| @@ -370,18 +374,18 @@ | |
| 374 | @ </head> |
| 375 | @ <body> |
| 376 | @ <div class="header"> |
| 377 | @ <div class="title">$<title></div> |
| 378 | @ <div class="status"> |
| 379 | @ <div class="logo">$<project_name></div><br/> |
| 380 | @ <th1> |
| 381 | @ if {[info exists login]} { |
| 382 | @ puts "Logged in as $login" |
| 383 | @ } else { |
| 384 | @ puts "Not logged in" |
| 385 | @ } |
| 386 | @ </th1></div> |
| 387 | @ </div> |
| 388 | @ <div class="mainmenu"> |
| 389 | @ <th1> |
| 390 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 391 | @ if {[anycap jor]} { |
| @@ -448,10 +452,11 @@ | |
| 452 | @ display: table-cell; |
| 453 | @ text-align: left; |
| 454 | @ vertical-align: bottom; |
| 455 | @ font-weight: bold; |
| 456 | @ color: #333; |
| 457 | @ white-space: nowrap; |
| 458 | @ } |
| 459 | @ |
| 460 | @ /* The page title centered at the top of each page */ |
| 461 | @ div.title { |
| 462 | @ display: table-cell; |
| @@ -471,10 +476,11 @@ | |
| 476 | @ vertical-align: bottom; |
| 477 | @ padding-bottom: 5px; |
| 478 | @ color: #333; |
| 479 | @ font-size: 0.8em; |
| 480 | @ font-weight: bold; |
| 481 | @ white-space: nowrap; |
| 482 | @ } |
| 483 | @ |
| 484 | @ /* The header across the top of the page */ |
| 485 | @ div.header { |
| 486 | @ margin:10px 0px 10px 0px; |
| @@ -606,20 +612,20 @@ | |
| 612 | @ </head> |
| 613 | @ <body> |
| 614 | @ <div class="header"> |
| 615 | @ <div class="logo"> |
| 616 | @ <img src="$home/logo" alt="logo"> |
| 617 | @ <br />$<project_name> |
| 618 | @ </div> |
| 619 | @ <div class="title">$<title></div> |
| 620 | @ <div class="status"><th1> |
| 621 | @ if {[info exists login]} { |
| 622 | @ puts "Logged in as $login" |
| 623 | @ } else { |
| 624 | @ puts "Not logged in" |
| 625 | @ } |
| 626 | @ </th1></div> |
| 627 | @ </div> |
| 628 | @ <div class="mainmenu"> |
| 629 | @ <th1> |
| 630 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 631 | @ if {[anycap jor]} { |
| @@ -682,10 +688,11 @@ | |
| 688 | @ div.logo { |
| 689 | @ display: table-cell; |
| 690 | @ text-align: right; |
| 691 | @ vertical-align: bottom; |
| 692 | @ font-weight: normal; |
| 693 | @ white-space: nowrap; |
| 694 | @ } |
| 695 | @ |
| 696 | @ /* Widths */ |
| 697 | @ div.header, div.mainmenu, div.submenu, div.content, div.footer { |
| 698 | @ max-width: 900px; |
| @@ -714,10 +721,11 @@ | |
| 721 | @ display: table-cell; |
| 722 | @ text-align: right; |
| 723 | @ vertical-align: bottom; |
| 724 | @ color: #333; |
| 725 | @ margin-right: -20px; |
| 726 | @ white-space: nowrap; |
| 727 | @ } |
| 728 | @ |
| 729 | @ /* The main menu bar that appears at the top of the page beneath |
| 730 | @ ** the header */ |
| 731 | @ div.mainmenu { |
| @@ -869,20 +877,20 @@ | |
| 877 | @ </head> |
| 878 | @ <body> |
| 879 | @ <div class="header"> |
| 880 | @ <div class="logo"> |
| 881 | @ <img src="$home/logo" alt="logo"> |
| 882 | @ <br />$<project_name> |
| 883 | @ </div> |
| 884 | @ <div class="title">$<title></div> |
| 885 | @ <div class="status"><th1> |
| 886 | @ if {[info exists login]} { |
| 887 | @ puts "Logged in as $login" |
| 888 | @ } else { |
| 889 | @ puts "Not logged in" |
| 890 | @ } |
| 891 | @ </th1></div> |
| 892 | @ </div> |
| 893 | @ <div class="mainmenu"> |
| 894 | @ <th1> |
| 895 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 896 | @ if {[anycap jor]} { |
| @@ -955,10 +963,11 @@ | |
| 963 | @ text-align: center; |
| 964 | @ vertical-align: bottom; |
| 965 | @ font-weight: bold; |
| 966 | @ color: #558195; |
| 967 | @ min-width: 200px; |
| 968 | @ white-space: nowrap; |
| 969 | @ } |
| 970 | @ |
| 971 | @ /* The page title centered at the top of each page */ |
| 972 | @ div.title { |
| 973 | @ display: table-cell; |
| @@ -1159,46 +1168,46 @@ | |
| 1168 | @ <a href="$logourl"> |
| 1169 | @ <img src="$baseurl/logo" border="0" alt="$project_name"> |
| 1170 | @ </a> |
| 1171 | @ </div> |
| 1172 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 1173 | @ <div class="status"><th1> |
| 1174 | @ if {[info exists login]} { |
| 1175 | @ puts "Logged in as $login" |
| 1176 | @ } else { |
| 1177 | @ puts "Not logged in" |
| 1178 | @ } |
| 1179 | @ </th1></div> |
| 1180 | @ </div> |
| 1181 | @ <div class="mainmenu"> |
| 1182 | @ <th1> |
| 1183 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 1184 | @ if {[anycap jor]} { |
| 1185 | @ html "<a href=''timeline''>Timeline</a>\n" |
| 1186 | @ } |
| 1187 | @ if {[hascap oh]} { |
| 1188 | @ html "<a href=''dir?ci=tip''>Files</a>\n" |
| 1189 | @ } |
| 1190 | @ if {[hascap o]} { |
| 1191 | @ html "<a href=''brlist''>Branches</a>\n" |
| 1192 | @ html "<a href=''taglist''>Tags</a>\n" |
| 1193 | @ } |
| 1194 | @ if {[hascap r]} { |
| 1195 | @ html "<a href=''reportlist''>Tickets</a>\n" |
| 1196 | @ } |
| 1197 | @ if {[hascap j]} { |
| 1198 | @ html "<a href=''wiki''>Wiki</a>\n" |
| 1199 | @ } |
| 1200 | @ if {[hascap s]} { |
| 1201 | @ html "<a href=''setup''>Admin</a>\n" |
| 1202 | @ } elseif {[hascap a]} { |
| 1203 | @ html "<a href=''setup_ulist''>Users</a>\n" |
| 1204 | @ } |
| 1205 | @ if {[info exists login]} { |
| 1206 | @ html "<a href=''login''>Logout</a>\n" |
| 1207 | @ } else { |
| 1208 | @ html "<a href=''login''>Login</a>\n" |
| 1209 | @ } |
| 1210 | @ </th1></div> |
| 1211 | @ '); |
| 1212 | @ REPLACE INTO config(name,mtime,value) |
| 1213 | @ VALUES('footer',now(),'<div class="footer"> |
| 1214 |
+32
-23
| --- src/skins.c | ||
| +++ src/skins.c | ||
| @@ -44,10 +44,11 @@ | ||
| 44 | 44 | @ font-size: 2em; |
| 45 | 45 | @ font-weight: bold; |
| 46 | 46 | @ background-color: #707070; |
| 47 | 47 | @ color: #ffffff; |
| 48 | 48 | @ min-width: 200px; |
| 49 | +@ white-space: nowrap; | |
| 49 | 50 | @ } |
| 50 | 51 | @ |
| 51 | 52 | @ /* The page title centered at the top of each page */ |
| 52 | 53 | @ div.title { |
| 53 | 54 | @ display: table-cell; |
| @@ -67,10 +68,11 @@ | ||
| 67 | 68 | @ vertical-align: bottom; |
| 68 | 69 | @ color: #404040; |
| 69 | 70 | @ font-size: 0.8em; |
| 70 | 71 | @ font-weight: bold; |
| 71 | 72 | @ min-width: 200px; |
| 73 | +@ white-space: nowrap; | |
| 72 | 74 | @ } |
| 73 | 75 | @ |
| 74 | 76 | @ /* The header across the top of the page */ |
| 75 | 77 | @ div.header { |
| 76 | 78 | @ display: table; |
| @@ -166,17 +168,17 @@ | ||
| 166 | 168 | @ media="screen"> |
| 167 | 169 | @ </head> |
| 168 | 170 | @ <body> |
| 169 | 171 | @ <div class="header"> |
| 170 | 172 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 171 | -@ <div class="status"><nobr><th1> | |
| 173 | +@ <div class="status"><th1> | |
| 172 | 174 | @ if {[info exists login]} { |
| 173 | 175 | @ puts "Logged in as $login" |
| 174 | 176 | @ } else { |
| 175 | 177 | @ puts "Not logged in" |
| 176 | 178 | @ } |
| 177 | -@ </th1></nobr></div> | |
| 179 | +@ </th1></div> | |
| 178 | 180 | @ </div> |
| 179 | 181 | @ <div class="mainmenu"> |
| 180 | 182 | @ <th1> |
| 181 | 183 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 182 | 184 | @ if {[anycap jor]} { |
| @@ -235,10 +237,11 @@ | ||
| 235 | 237 | @ text-align: center; |
| 236 | 238 | @ vertical-align: bottom; |
| 237 | 239 | @ font-weight: bold; |
| 238 | 240 | @ font-size: 2.5em; |
| 239 | 241 | @ color: #a09048; |
| 242 | +@ white-space: nowrap; | |
| 240 | 243 | @ } |
| 241 | 244 | @ |
| 242 | 245 | @ /* The page title centered at the top of each page */ |
| 243 | 246 | @ div.title { |
| 244 | 247 | @ display: table-cell; |
| @@ -258,10 +261,11 @@ | ||
| 258 | 261 | @ vertical-align: bottom; |
| 259 | 262 | @ color: #a09048; |
| 260 | 263 | @ padding: 5px 5px 0 0; |
| 261 | 264 | @ font-size: 0.8em; |
| 262 | 265 | @ font-weight: bold; |
| 266 | +@ white-space: nowrap; | |
| 263 | 267 | @ } |
| 264 | 268 | @ |
| 265 | 269 | @ /* The header across the top of the page */ |
| 266 | 270 | @ div.header { |
| 267 | 271 | @ display: table; |
| @@ -370,18 +374,18 @@ | ||
| 370 | 374 | @ </head> |
| 371 | 375 | @ <body> |
| 372 | 376 | @ <div class="header"> |
| 373 | 377 | @ <div class="title">$<title></div> |
| 374 | 378 | @ <div class="status"> |
| 375 | -@ <div class="logo"><nobr>$<project_name></nobr></div><br/> | |
| 376 | -@ <nobr><th1> | |
| 379 | +@ <div class="logo">$<project_name></div><br/> | |
| 380 | +@ <th1> | |
| 377 | 381 | @ if {[info exists login]} { |
| 378 | 382 | @ puts "Logged in as $login" |
| 379 | 383 | @ } else { |
| 380 | 384 | @ puts "Not logged in" |
| 381 | 385 | @ } |
| 382 | -@ </th1></nobr></div> | |
| 386 | +@ </th1></div> | |
| 383 | 387 | @ </div> |
| 384 | 388 | @ <div class="mainmenu"> |
| 385 | 389 | @ <th1> |
| 386 | 390 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 387 | 391 | @ if {[anycap jor]} { |
| @@ -448,10 +452,11 @@ | ||
| 448 | 452 | @ display: table-cell; |
| 449 | 453 | @ text-align: left; |
| 450 | 454 | @ vertical-align: bottom; |
| 451 | 455 | @ font-weight: bold; |
| 452 | 456 | @ color: #333; |
| 457 | +@ white-space: nowrap; | |
| 453 | 458 | @ } |
| 454 | 459 | @ |
| 455 | 460 | @ /* The page title centered at the top of each page */ |
| 456 | 461 | @ div.title { |
| 457 | 462 | @ display: table-cell; |
| @@ -471,10 +476,11 @@ | ||
| 471 | 476 | @ vertical-align: bottom; |
| 472 | 477 | @ padding-bottom: 5px; |
| 473 | 478 | @ color: #333; |
| 474 | 479 | @ font-size: 0.8em; |
| 475 | 480 | @ font-weight: bold; |
| 481 | +@ white-space: nowrap; | |
| 476 | 482 | @ } |
| 477 | 483 | @ |
| 478 | 484 | @ /* The header across the top of the page */ |
| 479 | 485 | @ div.header { |
| 480 | 486 | @ margin:10px 0px 10px 0px; |
| @@ -606,20 +612,20 @@ | ||
| 606 | 612 | @ </head> |
| 607 | 613 | @ <body> |
| 608 | 614 | @ <div class="header"> |
| 609 | 615 | @ <div class="logo"> |
| 610 | 616 | @ <img src="$home/logo" alt="logo"> |
| 611 | -@ <br /><nobr>$<project_name></nobr> | |
| 617 | +@ <br />$<project_name> | |
| 612 | 618 | @ </div> |
| 613 | 619 | @ <div class="title">$<title></div> |
| 614 | -@ <div class="status"><nobr><th1> | |
| 620 | +@ <div class="status"><th1> | |
| 615 | 621 | @ if {[info exists login]} { |
| 616 | 622 | @ puts "Logged in as $login" |
| 617 | 623 | @ } else { |
| 618 | 624 | @ puts "Not logged in" |
| 619 | 625 | @ } |
| 620 | -@ </th1></nobr></div> | |
| 626 | +@ </th1></div> | |
| 621 | 627 | @ </div> |
| 622 | 628 | @ <div class="mainmenu"> |
| 623 | 629 | @ <th1> |
| 624 | 630 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 625 | 631 | @ if {[anycap jor]} { |
| @@ -682,10 +688,11 @@ | ||
| 682 | 688 | @ div.logo { |
| 683 | 689 | @ display: table-cell; |
| 684 | 690 | @ text-align: right; |
| 685 | 691 | @ vertical-align: bottom; |
| 686 | 692 | @ font-weight: normal; |
| 693 | +@ white-space: nowrap; | |
| 687 | 694 | @ } |
| 688 | 695 | @ |
| 689 | 696 | @ /* Widths */ |
| 690 | 697 | @ div.header, div.mainmenu, div.submenu, div.content, div.footer { |
| 691 | 698 | @ max-width: 900px; |
| @@ -714,10 +721,11 @@ | ||
| 714 | 721 | @ display: table-cell; |
| 715 | 722 | @ text-align: right; |
| 716 | 723 | @ vertical-align: bottom; |
| 717 | 724 | @ color: #333; |
| 718 | 725 | @ margin-right: -20px; |
| 726 | +@ white-space: nowrap; | |
| 719 | 727 | @ } |
| 720 | 728 | @ |
| 721 | 729 | @ /* The main menu bar that appears at the top of the page beneath |
| 722 | 730 | @ ** the header */ |
| 723 | 731 | @ div.mainmenu { |
| @@ -869,20 +877,20 @@ | ||
| 869 | 877 | @ </head> |
| 870 | 878 | @ <body> |
| 871 | 879 | @ <div class="header"> |
| 872 | 880 | @ <div class="logo"> |
| 873 | 881 | @ <img src="$home/logo" alt="logo"> |
| 874 | -@ <br /><nobr>$<project_name></nobr> | |
| 882 | +@ <br />$<project_name> | |
| 875 | 883 | @ </div> |
| 876 | 884 | @ <div class="title">$<title></div> |
| 877 | -@ <div class="status"><nobr><th1> | |
| 885 | +@ <div class="status"><th1> | |
| 878 | 886 | @ if {[info exists login]} { |
| 879 | 887 | @ puts "Logged in as $login" |
| 880 | 888 | @ } else { |
| 881 | 889 | @ puts "Not logged in" |
| 882 | 890 | @ } |
| 883 | -@ </th1></nobr></div> | |
| 891 | +@ </th1></div> | |
| 884 | 892 | @ </div> |
| 885 | 893 | @ <div class="mainmenu"> |
| 886 | 894 | @ <th1> |
| 887 | 895 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 888 | 896 | @ if {[anycap jor]} { |
| @@ -955,10 +963,11 @@ | ||
| 955 | 963 | @ text-align: center; |
| 956 | 964 | @ vertical-align: bottom; |
| 957 | 965 | @ font-weight: bold; |
| 958 | 966 | @ color: #558195; |
| 959 | 967 | @ min-width: 200px; |
| 968 | +@ white-space: nowrap; | |
| 960 | 969 | @ } |
| 961 | 970 | @ |
| 962 | 971 | @ /* The page title centered at the top of each page */ |
| 963 | 972 | @ div.title { |
| 964 | 973 | @ display: table-cell; |
| @@ -1159,46 +1168,46 @@ | ||
| 1159 | 1168 | @ <a href="$logourl"> |
| 1160 | 1169 | @ <img src="$baseurl/logo" border="0" alt="$project_name"> |
| 1161 | 1170 | @ </a> |
| 1162 | 1171 | @ </div> |
| 1163 | 1172 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 1164 | -@ <div class="status"><nobr><th1> | |
| 1173 | +@ <div class="status"><th1> | |
| 1165 | 1174 | @ if {[info exists login]} { |
| 1166 | 1175 | @ puts "Logged in as $login" |
| 1167 | 1176 | @ } else { |
| 1168 | 1177 | @ puts "Not logged in" |
| 1169 | 1178 | @ } |
| 1170 | -@ </th1></nobr></div> | |
| 1179 | +@ </th1></div> | |
| 1171 | 1180 | @ </div> |
| 1172 | 1181 | @ <div class="mainmenu"> |
| 1173 | 1182 | @ <th1> |
| 1174 | 1183 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 1175 | 1184 | @ if {[anycap jor]} { |
| 1176 | -@ html "<a href=''$home/timeline''>Timeline</a>\n" | |
| 1185 | +@ html "<a href=''timeline''>Timeline</a>\n" | |
| 1177 | 1186 | @ } |
| 1178 | 1187 | @ if {[hascap oh]} { |
| 1179 | -@ html "<a href=''$home/dir?ci=tip''>Files</a>\n" | |
| 1188 | +@ html "<a href=''dir?ci=tip''>Files</a>\n" | |
| 1180 | 1189 | @ } |
| 1181 | 1190 | @ if {[hascap o]} { |
| 1182 | -@ html "<a href=''$home/brlist''>Branches</a>\n" | |
| 1183 | -@ html "<a href=''$home/taglist''>Tags</a>\n" | |
| 1191 | +@ html "<a href=''brlist''>Branches</a>\n" | |
| 1192 | +@ html "<a href=''taglist''>Tags</a>\n" | |
| 1184 | 1193 | @ } |
| 1185 | 1194 | @ if {[hascap r]} { |
| 1186 | -@ html "<a href=''$home/reportlist''>Tickets</a>\n" | |
| 1195 | +@ html "<a href=''reportlist''>Tickets</a>\n" | |
| 1187 | 1196 | @ } |
| 1188 | 1197 | @ if {[hascap j]} { |
| 1189 | -@ html "<a href=''$home/wiki''>Wiki</a>\n" | |
| 1198 | +@ html "<a href=''wiki''>Wiki</a>\n" | |
| 1190 | 1199 | @ } |
| 1191 | 1200 | @ if {[hascap s]} { |
| 1192 | -@ html "<a href=''$home/setup''>Admin</a>\n" | |
| 1201 | +@ html "<a href=''setup''>Admin</a>\n" | |
| 1193 | 1202 | @ } elseif {[hascap a]} { |
| 1194 | -@ html "<a href=''$home/setup_ulist''>Users</a>\n" | |
| 1203 | +@ html "<a href=''setup_ulist''>Users</a>\n" | |
| 1195 | 1204 | @ } |
| 1196 | 1205 | @ if {[info exists login]} { |
| 1197 | -@ html "<a href=''$home/login''>Logout</a>\n" | |
| 1206 | +@ html "<a href=''login''>Logout</a>\n" | |
| 1198 | 1207 | @ } else { |
| 1199 | -@ html "<a href=''$home/login''>Login</a>\n" | |
| 1208 | +@ html "<a href=''login''>Login</a>\n" | |
| 1200 | 1209 | @ } |
| 1201 | 1210 | @ </th1></div> |
| 1202 | 1211 | @ '); |
| 1203 | 1212 | @ REPLACE INTO config(name,mtime,value) |
| 1204 | 1213 | @ VALUES('footer',now(),'<div class="footer"> |
| 1205 | 1214 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -44,10 +44,11 @@ | |
| 44 | @ font-size: 2em; |
| 45 | @ font-weight: bold; |
| 46 | @ background-color: #707070; |
| 47 | @ color: #ffffff; |
| 48 | @ min-width: 200px; |
| 49 | @ } |
| 50 | @ |
| 51 | @ /* The page title centered at the top of each page */ |
| 52 | @ div.title { |
| 53 | @ display: table-cell; |
| @@ -67,10 +68,11 @@ | |
| 67 | @ vertical-align: bottom; |
| 68 | @ color: #404040; |
| 69 | @ font-size: 0.8em; |
| 70 | @ font-weight: bold; |
| 71 | @ min-width: 200px; |
| 72 | @ } |
| 73 | @ |
| 74 | @ /* The header across the top of the page */ |
| 75 | @ div.header { |
| 76 | @ display: table; |
| @@ -166,17 +168,17 @@ | |
| 166 | @ media="screen"> |
| 167 | @ </head> |
| 168 | @ <body> |
| 169 | @ <div class="header"> |
| 170 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 171 | @ <div class="status"><nobr><th1> |
| 172 | @ if {[info exists login]} { |
| 173 | @ puts "Logged in as $login" |
| 174 | @ } else { |
| 175 | @ puts "Not logged in" |
| 176 | @ } |
| 177 | @ </th1></nobr></div> |
| 178 | @ </div> |
| 179 | @ <div class="mainmenu"> |
| 180 | @ <th1> |
| 181 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 182 | @ if {[anycap jor]} { |
| @@ -235,10 +237,11 @@ | |
| 235 | @ text-align: center; |
| 236 | @ vertical-align: bottom; |
| 237 | @ font-weight: bold; |
| 238 | @ font-size: 2.5em; |
| 239 | @ color: #a09048; |
| 240 | @ } |
| 241 | @ |
| 242 | @ /* The page title centered at the top of each page */ |
| 243 | @ div.title { |
| 244 | @ display: table-cell; |
| @@ -258,10 +261,11 @@ | |
| 258 | @ vertical-align: bottom; |
| 259 | @ color: #a09048; |
| 260 | @ padding: 5px 5px 0 0; |
| 261 | @ font-size: 0.8em; |
| 262 | @ font-weight: bold; |
| 263 | @ } |
| 264 | @ |
| 265 | @ /* The header across the top of the page */ |
| 266 | @ div.header { |
| 267 | @ display: table; |
| @@ -370,18 +374,18 @@ | |
| 370 | @ </head> |
| 371 | @ <body> |
| 372 | @ <div class="header"> |
| 373 | @ <div class="title">$<title></div> |
| 374 | @ <div class="status"> |
| 375 | @ <div class="logo"><nobr>$<project_name></nobr></div><br/> |
| 376 | @ <nobr><th1> |
| 377 | @ if {[info exists login]} { |
| 378 | @ puts "Logged in as $login" |
| 379 | @ } else { |
| 380 | @ puts "Not logged in" |
| 381 | @ } |
| 382 | @ </th1></nobr></div> |
| 383 | @ </div> |
| 384 | @ <div class="mainmenu"> |
| 385 | @ <th1> |
| 386 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 387 | @ if {[anycap jor]} { |
| @@ -448,10 +452,11 @@ | |
| 448 | @ display: table-cell; |
| 449 | @ text-align: left; |
| 450 | @ vertical-align: bottom; |
| 451 | @ font-weight: bold; |
| 452 | @ color: #333; |
| 453 | @ } |
| 454 | @ |
| 455 | @ /* The page title centered at the top of each page */ |
| 456 | @ div.title { |
| 457 | @ display: table-cell; |
| @@ -471,10 +476,11 @@ | |
| 471 | @ vertical-align: bottom; |
| 472 | @ padding-bottom: 5px; |
| 473 | @ color: #333; |
| 474 | @ font-size: 0.8em; |
| 475 | @ font-weight: bold; |
| 476 | @ } |
| 477 | @ |
| 478 | @ /* The header across the top of the page */ |
| 479 | @ div.header { |
| 480 | @ margin:10px 0px 10px 0px; |
| @@ -606,20 +612,20 @@ | |
| 606 | @ </head> |
| 607 | @ <body> |
| 608 | @ <div class="header"> |
| 609 | @ <div class="logo"> |
| 610 | @ <img src="$home/logo" alt="logo"> |
| 611 | @ <br /><nobr>$<project_name></nobr> |
| 612 | @ </div> |
| 613 | @ <div class="title">$<title></div> |
| 614 | @ <div class="status"><nobr><th1> |
| 615 | @ if {[info exists login]} { |
| 616 | @ puts "Logged in as $login" |
| 617 | @ } else { |
| 618 | @ puts "Not logged in" |
| 619 | @ } |
| 620 | @ </th1></nobr></div> |
| 621 | @ </div> |
| 622 | @ <div class="mainmenu"> |
| 623 | @ <th1> |
| 624 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 625 | @ if {[anycap jor]} { |
| @@ -682,10 +688,11 @@ | |
| 682 | @ div.logo { |
| 683 | @ display: table-cell; |
| 684 | @ text-align: right; |
| 685 | @ vertical-align: bottom; |
| 686 | @ font-weight: normal; |
| 687 | @ } |
| 688 | @ |
| 689 | @ /* Widths */ |
| 690 | @ div.header, div.mainmenu, div.submenu, div.content, div.footer { |
| 691 | @ max-width: 900px; |
| @@ -714,10 +721,11 @@ | |
| 714 | @ display: table-cell; |
| 715 | @ text-align: right; |
| 716 | @ vertical-align: bottom; |
| 717 | @ color: #333; |
| 718 | @ margin-right: -20px; |
| 719 | @ } |
| 720 | @ |
| 721 | @ /* The main menu bar that appears at the top of the page beneath |
| 722 | @ ** the header */ |
| 723 | @ div.mainmenu { |
| @@ -869,20 +877,20 @@ | |
| 869 | @ </head> |
| 870 | @ <body> |
| 871 | @ <div class="header"> |
| 872 | @ <div class="logo"> |
| 873 | @ <img src="$home/logo" alt="logo"> |
| 874 | @ <br /><nobr>$<project_name></nobr> |
| 875 | @ </div> |
| 876 | @ <div class="title">$<title></div> |
| 877 | @ <div class="status"><nobr><th1> |
| 878 | @ if {[info exists login]} { |
| 879 | @ puts "Logged in as $login" |
| 880 | @ } else { |
| 881 | @ puts "Not logged in" |
| 882 | @ } |
| 883 | @ </th1></nobr></div> |
| 884 | @ </div> |
| 885 | @ <div class="mainmenu"> |
| 886 | @ <th1> |
| 887 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 888 | @ if {[anycap jor]} { |
| @@ -955,10 +963,11 @@ | |
| 955 | @ text-align: center; |
| 956 | @ vertical-align: bottom; |
| 957 | @ font-weight: bold; |
| 958 | @ color: #558195; |
| 959 | @ min-width: 200px; |
| 960 | @ } |
| 961 | @ |
| 962 | @ /* The page title centered at the top of each page */ |
| 963 | @ div.title { |
| 964 | @ display: table-cell; |
| @@ -1159,46 +1168,46 @@ | |
| 1159 | @ <a href="$logourl"> |
| 1160 | @ <img src="$baseurl/logo" border="0" alt="$project_name"> |
| 1161 | @ </a> |
| 1162 | @ </div> |
| 1163 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 1164 | @ <div class="status"><nobr><th1> |
| 1165 | @ if {[info exists login]} { |
| 1166 | @ puts "Logged in as $login" |
| 1167 | @ } else { |
| 1168 | @ puts "Not logged in" |
| 1169 | @ } |
| 1170 | @ </th1></nobr></div> |
| 1171 | @ </div> |
| 1172 | @ <div class="mainmenu"> |
| 1173 | @ <th1> |
| 1174 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 1175 | @ if {[anycap jor]} { |
| 1176 | @ html "<a href=''$home/timeline''>Timeline</a>\n" |
| 1177 | @ } |
| 1178 | @ if {[hascap oh]} { |
| 1179 | @ html "<a href=''$home/dir?ci=tip''>Files</a>\n" |
| 1180 | @ } |
| 1181 | @ if {[hascap o]} { |
| 1182 | @ html "<a href=''$home/brlist''>Branches</a>\n" |
| 1183 | @ html "<a href=''$home/taglist''>Tags</a>\n" |
| 1184 | @ } |
| 1185 | @ if {[hascap r]} { |
| 1186 | @ html "<a href=''$home/reportlist''>Tickets</a>\n" |
| 1187 | @ } |
| 1188 | @ if {[hascap j]} { |
| 1189 | @ html "<a href=''$home/wiki''>Wiki</a>\n" |
| 1190 | @ } |
| 1191 | @ if {[hascap s]} { |
| 1192 | @ html "<a href=''$home/setup''>Admin</a>\n" |
| 1193 | @ } elseif {[hascap a]} { |
| 1194 | @ html "<a href=''$home/setup_ulist''>Users</a>\n" |
| 1195 | @ } |
| 1196 | @ if {[info exists login]} { |
| 1197 | @ html "<a href=''$home/login''>Logout</a>\n" |
| 1198 | @ } else { |
| 1199 | @ html "<a href=''$home/login''>Login</a>\n" |
| 1200 | @ } |
| 1201 | @ </th1></div> |
| 1202 | @ '); |
| 1203 | @ REPLACE INTO config(name,mtime,value) |
| 1204 | @ VALUES('footer',now(),'<div class="footer"> |
| 1205 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -44,10 +44,11 @@ | |
| 44 | @ font-size: 2em; |
| 45 | @ font-weight: bold; |
| 46 | @ background-color: #707070; |
| 47 | @ color: #ffffff; |
| 48 | @ min-width: 200px; |
| 49 | @ white-space: nowrap; |
| 50 | @ } |
| 51 | @ |
| 52 | @ /* The page title centered at the top of each page */ |
| 53 | @ div.title { |
| 54 | @ display: table-cell; |
| @@ -67,10 +68,11 @@ | |
| 68 | @ vertical-align: bottom; |
| 69 | @ color: #404040; |
| 70 | @ font-size: 0.8em; |
| 71 | @ font-weight: bold; |
| 72 | @ min-width: 200px; |
| 73 | @ white-space: nowrap; |
| 74 | @ } |
| 75 | @ |
| 76 | @ /* The header across the top of the page */ |
| 77 | @ div.header { |
| 78 | @ display: table; |
| @@ -166,17 +168,17 @@ | |
| 168 | @ media="screen"> |
| 169 | @ </head> |
| 170 | @ <body> |
| 171 | @ <div class="header"> |
| 172 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 173 | @ <div class="status"><th1> |
| 174 | @ if {[info exists login]} { |
| 175 | @ puts "Logged in as $login" |
| 176 | @ } else { |
| 177 | @ puts "Not logged in" |
| 178 | @ } |
| 179 | @ </th1></div> |
| 180 | @ </div> |
| 181 | @ <div class="mainmenu"> |
| 182 | @ <th1> |
| 183 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 184 | @ if {[anycap jor]} { |
| @@ -235,10 +237,11 @@ | |
| 237 | @ text-align: center; |
| 238 | @ vertical-align: bottom; |
| 239 | @ font-weight: bold; |
| 240 | @ font-size: 2.5em; |
| 241 | @ color: #a09048; |
| 242 | @ white-space: nowrap; |
| 243 | @ } |
| 244 | @ |
| 245 | @ /* The page title centered at the top of each page */ |
| 246 | @ div.title { |
| 247 | @ display: table-cell; |
| @@ -258,10 +261,11 @@ | |
| 261 | @ vertical-align: bottom; |
| 262 | @ color: #a09048; |
| 263 | @ padding: 5px 5px 0 0; |
| 264 | @ font-size: 0.8em; |
| 265 | @ font-weight: bold; |
| 266 | @ white-space: nowrap; |
| 267 | @ } |
| 268 | @ |
| 269 | @ /* The header across the top of the page */ |
| 270 | @ div.header { |
| 271 | @ display: table; |
| @@ -370,18 +374,18 @@ | |
| 374 | @ </head> |
| 375 | @ <body> |
| 376 | @ <div class="header"> |
| 377 | @ <div class="title">$<title></div> |
| 378 | @ <div class="status"> |
| 379 | @ <div class="logo">$<project_name></div><br/> |
| 380 | @ <th1> |
| 381 | @ if {[info exists login]} { |
| 382 | @ puts "Logged in as $login" |
| 383 | @ } else { |
| 384 | @ puts "Not logged in" |
| 385 | @ } |
| 386 | @ </th1></div> |
| 387 | @ </div> |
| 388 | @ <div class="mainmenu"> |
| 389 | @ <th1> |
| 390 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 391 | @ if {[anycap jor]} { |
| @@ -448,10 +452,11 @@ | |
| 452 | @ display: table-cell; |
| 453 | @ text-align: left; |
| 454 | @ vertical-align: bottom; |
| 455 | @ font-weight: bold; |
| 456 | @ color: #333; |
| 457 | @ white-space: nowrap; |
| 458 | @ } |
| 459 | @ |
| 460 | @ /* The page title centered at the top of each page */ |
| 461 | @ div.title { |
| 462 | @ display: table-cell; |
| @@ -471,10 +476,11 @@ | |
| 476 | @ vertical-align: bottom; |
| 477 | @ padding-bottom: 5px; |
| 478 | @ color: #333; |
| 479 | @ font-size: 0.8em; |
| 480 | @ font-weight: bold; |
| 481 | @ white-space: nowrap; |
| 482 | @ } |
| 483 | @ |
| 484 | @ /* The header across the top of the page */ |
| 485 | @ div.header { |
| 486 | @ margin:10px 0px 10px 0px; |
| @@ -606,20 +612,20 @@ | |
| 612 | @ </head> |
| 613 | @ <body> |
| 614 | @ <div class="header"> |
| 615 | @ <div class="logo"> |
| 616 | @ <img src="$home/logo" alt="logo"> |
| 617 | @ <br />$<project_name> |
| 618 | @ </div> |
| 619 | @ <div class="title">$<title></div> |
| 620 | @ <div class="status"><th1> |
| 621 | @ if {[info exists login]} { |
| 622 | @ puts "Logged in as $login" |
| 623 | @ } else { |
| 624 | @ puts "Not logged in" |
| 625 | @ } |
| 626 | @ </th1></div> |
| 627 | @ </div> |
| 628 | @ <div class="mainmenu"> |
| 629 | @ <th1> |
| 630 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 631 | @ if {[anycap jor]} { |
| @@ -682,10 +688,11 @@ | |
| 688 | @ div.logo { |
| 689 | @ display: table-cell; |
| 690 | @ text-align: right; |
| 691 | @ vertical-align: bottom; |
| 692 | @ font-weight: normal; |
| 693 | @ white-space: nowrap; |
| 694 | @ } |
| 695 | @ |
| 696 | @ /* Widths */ |
| 697 | @ div.header, div.mainmenu, div.submenu, div.content, div.footer { |
| 698 | @ max-width: 900px; |
| @@ -714,10 +721,11 @@ | |
| 721 | @ display: table-cell; |
| 722 | @ text-align: right; |
| 723 | @ vertical-align: bottom; |
| 724 | @ color: #333; |
| 725 | @ margin-right: -20px; |
| 726 | @ white-space: nowrap; |
| 727 | @ } |
| 728 | @ |
| 729 | @ /* The main menu bar that appears at the top of the page beneath |
| 730 | @ ** the header */ |
| 731 | @ div.mainmenu { |
| @@ -869,20 +877,20 @@ | |
| 877 | @ </head> |
| 878 | @ <body> |
| 879 | @ <div class="header"> |
| 880 | @ <div class="logo"> |
| 881 | @ <img src="$home/logo" alt="logo"> |
| 882 | @ <br />$<project_name> |
| 883 | @ </div> |
| 884 | @ <div class="title">$<title></div> |
| 885 | @ <div class="status"><th1> |
| 886 | @ if {[info exists login]} { |
| 887 | @ puts "Logged in as $login" |
| 888 | @ } else { |
| 889 | @ puts "Not logged in" |
| 890 | @ } |
| 891 | @ </th1></div> |
| 892 | @ </div> |
| 893 | @ <div class="mainmenu"> |
| 894 | @ <th1> |
| 895 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 896 | @ if {[anycap jor]} { |
| @@ -955,10 +963,11 @@ | |
| 963 | @ text-align: center; |
| 964 | @ vertical-align: bottom; |
| 965 | @ font-weight: bold; |
| 966 | @ color: #558195; |
| 967 | @ min-width: 200px; |
| 968 | @ white-space: nowrap; |
| 969 | @ } |
| 970 | @ |
| 971 | @ /* The page title centered at the top of each page */ |
| 972 | @ div.title { |
| 973 | @ display: table-cell; |
| @@ -1159,46 +1168,46 @@ | |
| 1168 | @ <a href="$logourl"> |
| 1169 | @ <img src="$baseurl/logo" border="0" alt="$project_name"> |
| 1170 | @ </a> |
| 1171 | @ </div> |
| 1172 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 1173 | @ <div class="status"><th1> |
| 1174 | @ if {[info exists login]} { |
| 1175 | @ puts "Logged in as $login" |
| 1176 | @ } else { |
| 1177 | @ puts "Not logged in" |
| 1178 | @ } |
| 1179 | @ </th1></div> |
| 1180 | @ </div> |
| 1181 | @ <div class="mainmenu"> |
| 1182 | @ <th1> |
| 1183 | @ html "<a href=''$home$index_page''>Home</a>\n" |
| 1184 | @ if {[anycap jor]} { |
| 1185 | @ html "<a href=''timeline''>Timeline</a>\n" |
| 1186 | @ } |
| 1187 | @ if {[hascap oh]} { |
| 1188 | @ html "<a href=''dir?ci=tip''>Files</a>\n" |
| 1189 | @ } |
| 1190 | @ if {[hascap o]} { |
| 1191 | @ html "<a href=''brlist''>Branches</a>\n" |
| 1192 | @ html "<a href=''taglist''>Tags</a>\n" |
| 1193 | @ } |
| 1194 | @ if {[hascap r]} { |
| 1195 | @ html "<a href=''reportlist''>Tickets</a>\n" |
| 1196 | @ } |
| 1197 | @ if {[hascap j]} { |
| 1198 | @ html "<a href=''wiki''>Wiki</a>\n" |
| 1199 | @ } |
| 1200 | @ if {[hascap s]} { |
| 1201 | @ html "<a href=''setup''>Admin</a>\n" |
| 1202 | @ } elseif {[hascap a]} { |
| 1203 | @ html "<a href=''setup_ulist''>Users</a>\n" |
| 1204 | @ } |
| 1205 | @ if {[info exists login]} { |
| 1206 | @ html "<a href=''login''>Logout</a>\n" |
| 1207 | @ } else { |
| 1208 | @ html "<a href=''login''>Login</a>\n" |
| 1209 | @ } |
| 1210 | @ </th1></div> |
| 1211 | @ '); |
| 1212 | @ REPLACE INTO config(name,mtime,value) |
| 1213 | @ VALUES('footer',now(),'<div class="footer"> |
| 1214 |
+84
-12
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -673,11 +673,11 @@ | ||
| 673 | 673 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 674 | 674 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 675 | 675 | */ |
| 676 | 676 | #define SQLITE_VERSION "3.7.15" |
| 677 | 677 | #define SQLITE_VERSION_NUMBER 3007015 |
| 678 | -#define SQLITE_SOURCE_ID "2012-10-30 18:09:46 9dca18f5fea84afbecb314ee1cdfb98430656af3" | |
| 678 | +#define SQLITE_SOURCE_ID "2012-11-09 21:40:02 5a3b07f0f5dfae7eea870303f52f37d6a17f1da2" | |
| 679 | 679 | |
| 680 | 680 | /* |
| 681 | 681 | ** CAPI3REF: Run-Time Library Version Numbers |
| 682 | 682 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 683 | 683 | ** |
| @@ -1038,10 +1038,11 @@ | ||
| 1038 | 1038 | #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) |
| 1039 | 1039 | #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) |
| 1040 | 1040 | #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) |
| 1041 | 1041 | #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) |
| 1042 | 1042 | #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) |
| 1043 | +#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8)) | |
| 1043 | 1044 | #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) |
| 1044 | 1045 | #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) |
| 1045 | 1046 | #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) |
| 1046 | 1047 | #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) |
| 1047 | 1048 | #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) |
| @@ -11008,10 +11009,11 @@ | ||
| 11008 | 11009 | int addrInTop; /* Top of the IN loop */ |
| 11009 | 11010 | } *aInLoop; /* Information about each nested IN operator */ |
| 11010 | 11011 | } in; /* Used when plan.wsFlags&WHERE_IN_ABLE */ |
| 11011 | 11012 | Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */ |
| 11012 | 11013 | } u; |
| 11014 | + double rOptCost; /* "Optimal" cost for this level */ | |
| 11013 | 11015 | |
| 11014 | 11016 | /* The following field is really not part of the current level. But |
| 11015 | 11017 | ** we need a place to cache virtual table index information for each |
| 11016 | 11018 | ** virtual table in the FROM clause and the WhereLevel structure is |
| 11017 | 11019 | ** a convenient place since there is one WhereLevel for each FROM clause |
| @@ -13716,10 +13718,11 @@ | ||
| 13716 | 13718 | int nByte = 0; /* Used to accumulate return value */ |
| 13717 | 13719 | |
| 13718 | 13720 | db->pnBytesFreed = &nByte; |
| 13719 | 13721 | for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){ |
| 13720 | 13722 | sqlite3VdbeClearObject(db, pVdbe); |
| 13723 | + sqlite3DbFree(db, pVdbe); | |
| 13721 | 13724 | } |
| 13722 | 13725 | db->pnBytesFreed = 0; |
| 13723 | 13726 | |
| 13724 | 13727 | *pHighwater = 0; |
| 13725 | 13728 | *pCurrent = nByte; |
| @@ -28219,12 +28222,17 @@ | ||
| 28219 | 28222 | int dirSync /* If true, fsync() directory after deleting file */ |
| 28220 | 28223 | ){ |
| 28221 | 28224 | int rc = SQLITE_OK; |
| 28222 | 28225 | UNUSED_PARAMETER(NotUsed); |
| 28223 | 28226 | SimulateIOError(return SQLITE_IOERR_DELETE); |
| 28224 | - if( osUnlink(zPath)==(-1) && errno!=ENOENT ){ | |
| 28225 | - return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath); | |
| 28227 | + if( osUnlink(zPath)==(-1) ){ | |
| 28228 | + if( errno==ENOENT ){ | |
| 28229 | + rc = SQLITE_IOERR_DELETE_NOENT; | |
| 28230 | + }else{ | |
| 28231 | + rc = unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath); | |
| 28232 | + } | |
| 28233 | + return rc; | |
| 28226 | 28234 | } |
| 28227 | 28235 | #ifndef SQLITE_DISABLE_DIRSYNC |
| 28228 | 28236 | if( (dirSync & 1)!=0 ){ |
| 28229 | 28237 | int fd; |
| 28230 | 28238 | rc = osOpenDirectory(zPath, &fd); |
| @@ -40388,10 +40396,11 @@ | ||
| 40388 | 40396 | |
| 40389 | 40397 | rc = pagerPagecount(pPager, &nPage); |
| 40390 | 40398 | if( rc ) return rc; |
| 40391 | 40399 | if( nPage==0 ){ |
| 40392 | 40400 | rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); |
| 40401 | + if( rc==SQLITE_IOERR_DELETE_NOENT ) rc = SQLITE_OK; | |
| 40393 | 40402 | isWal = 0; |
| 40394 | 40403 | }else{ |
| 40395 | 40404 | rc = sqlite3OsAccess( |
| 40396 | 40405 | pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal |
| 40397 | 40406 | ); |
| @@ -77655,12 +77664,14 @@ | ||
| 77655 | 77664 | */ |
| 77656 | 77665 | assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); |
| 77657 | 77666 | ExprSetIrreducible(pExpr); |
| 77658 | 77667 | pExpr->iAgg = (i16)i; |
| 77659 | 77668 | pExpr->pAggInfo = pAggInfo; |
| 77669 | + return WRC_Prune; | |
| 77670 | + }else{ | |
| 77671 | + return WRC_Continue; | |
| 77660 | 77672 | } |
| 77661 | - return WRC_Prune; | |
| 77662 | 77673 | } |
| 77663 | 77674 | } |
| 77664 | 77675 | return WRC_Continue; |
| 77665 | 77676 | } |
| 77666 | 77677 | static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){ |
| @@ -77668,13 +77679,14 @@ | ||
| 77668 | 77679 | UNUSED_PARAMETER(pSelect); |
| 77669 | 77680 | return WRC_Continue; |
| 77670 | 77681 | } |
| 77671 | 77682 | |
| 77672 | 77683 | /* |
| 77673 | -** Analyze the given expression looking for aggregate functions and | |
| 77674 | -** for variables that need to be added to the pParse->aAgg[] array. | |
| 77675 | -** Make additional entries to the pParse->aAgg[] array as necessary. | |
| 77684 | +** Analyze the pExpr expression looking for aggregate functions and | |
| 77685 | +** for variables that need to be added to AggInfo object that pNC->pAggInfo | |
| 77686 | +** points to. Additional entries are made on the AggInfo object as | |
| 77687 | +** necessary. | |
| 77676 | 77688 | ** |
| 77677 | 77689 | ** This routine should only be called after the expression has been |
| 77678 | 77690 | ** analyzed by sqlite3ResolveExprNames(). |
| 77679 | 77691 | */ |
| 77680 | 77692 | SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){ |
| @@ -85700,10 +85712,59 @@ | ||
| 85700 | 85712 | sqlite3_result_double(context, rVal); |
| 85701 | 85713 | break; |
| 85702 | 85714 | } |
| 85703 | 85715 | } |
| 85704 | 85716 | } |
| 85717 | + | |
| 85718 | +/* | |
| 85719 | +** Implementation of the instr() function. | |
| 85720 | +** | |
| 85721 | +** instr(haystack,needle) finds the first occurrence of needle | |
| 85722 | +** in haystack and returns the number of previous characters plus 1, | |
| 85723 | +** or 0 if needle does not occur within haystack. | |
| 85724 | +** | |
| 85725 | +** If both haystack and needle are BLOBs, then the result is one more than | |
| 85726 | +** the number of bytes in haystack prior to the first occurrence of needle, | |
| 85727 | +** or 0 if needle never occurs in haystack. | |
| 85728 | +*/ | |
| 85729 | +static void instrFunc( | |
| 85730 | + sqlite3_context *context, | |
| 85731 | + int argc, | |
| 85732 | + sqlite3_value **argv | |
| 85733 | +){ | |
| 85734 | + const unsigned char *zHaystack; | |
| 85735 | + const unsigned char *zNeedle; | |
| 85736 | + int nHaystack; | |
| 85737 | + int nNeedle; | |
| 85738 | + int typeHaystack, typeNeedle; | |
| 85739 | + int N = 1; | |
| 85740 | + int isText; | |
| 85741 | + | |
| 85742 | + typeHaystack = sqlite3_value_type(argv[0]); | |
| 85743 | + typeNeedle = sqlite3_value_type(argv[1]); | |
| 85744 | + if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return; | |
| 85745 | + nHaystack = sqlite3_value_bytes(argv[0]); | |
| 85746 | + nNeedle = sqlite3_value_bytes(argv[1]); | |
| 85747 | + if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ | |
| 85748 | + zHaystack = sqlite3_value_blob(argv[0]); | |
| 85749 | + zNeedle = sqlite3_value_blob(argv[1]); | |
| 85750 | + isText = 0; | |
| 85751 | + }else{ | |
| 85752 | + zHaystack = sqlite3_value_text(argv[0]); | |
| 85753 | + zNeedle = sqlite3_value_text(argv[1]); | |
| 85754 | + isText = 1; | |
| 85755 | + } | |
| 85756 | + while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){ | |
| 85757 | + N++; | |
| 85758 | + do{ | |
| 85759 | + nHaystack--; | |
| 85760 | + zHaystack++; | |
| 85761 | + }while( isText && (zHaystack[0]&0xc0)==0x80 ); | |
| 85762 | + } | |
| 85763 | + if( nNeedle>nHaystack ) N = 0; | |
| 85764 | + sqlite3_result_int(context, N); | |
| 85765 | +} | |
| 85705 | 85766 | |
| 85706 | 85767 | /* |
| 85707 | 85768 | ** Implementation of the substr() function. |
| 85708 | 85769 | ** |
| 85709 | 85770 | ** substr(x,p1,p2) returns p2 characters of x[] beginning with p1. |
| @@ -87069,10 +87130,11 @@ | ||
| 87069 | 87130 | FUNCTION(max, -1, 1, 1, minmaxFunc ), |
| 87070 | 87131 | FUNCTION(max, 0, 1, 1, 0 ), |
| 87071 | 87132 | AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ), |
| 87072 | 87133 | FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), |
| 87073 | 87134 | FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), |
| 87135 | + FUNCTION(instr, 2, 0, 0, instrFunc ), | |
| 87074 | 87136 | FUNCTION(substr, 2, 0, 0, substrFunc ), |
| 87075 | 87137 | FUNCTION(substr, 3, 0, 0, substrFunc ), |
| 87076 | 87138 | FUNCTION(abs, 1, 0, 0, absFunc ), |
| 87077 | 87139 | #ifndef SQLITE_OMIT_FLOATING_POINT |
| 87078 | 87140 | FUNCTION(round, 1, 0, 0, roundFunc ), |
| @@ -107298,19 +107360,32 @@ | ||
| 107298 | 107360 | || sWBI.cost.plan.u.pIdx==sWBI.pSrc->pIndex ); |
| 107299 | 107361 | |
| 107300 | 107362 | if( isOptimal && (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){ |
| 107301 | 107363 | notIndexed |= m; |
| 107302 | 107364 | } |
| 107365 | + if( isOptimal ){ | |
| 107366 | + pWInfo->a[j].rOptCost = sWBI.cost.rCost; | |
| 107367 | + }else if( iFrom<nTabList-1 ){ | |
| 107368 | + /* If two or more tables have nearly the same outer loop cost, | |
| 107369 | + ** very different inner loop (optimal) cost, we want to choose | |
| 107370 | + ** for the outer loop that table which benefits the least from | |
| 107371 | + ** being in the inner loop. The following code scales the | |
| 107372 | + ** outer loop cost estimate to accomplish that. */ | |
| 107373 | + WHERETRACE((" scaling cost from %.1f to %.1f\n", | |
| 107374 | + sWBI.cost.rCost, | |
| 107375 | + sWBI.cost.rCost/pWInfo->a[j].rOptCost)); | |
| 107376 | + sWBI.cost.rCost /= pWInfo->a[j].rOptCost; | |
| 107377 | + } | |
| 107303 | 107378 | |
| 107304 | 107379 | /* Conditions under which this table becomes the best so far: |
| 107305 | 107380 | ** |
| 107306 | 107381 | ** (1) The table must not depend on other tables that have not |
| 107307 | 107382 | ** yet run. (In other words, it must not depend on tables |
| 107308 | 107383 | ** in inner loops.) |
| 107309 | 107384 | ** |
| 107310 | - ** (2) A full-table-scan plan cannot supercede indexed plan unless | |
| 107311 | - ** the full-table-scan is an "optimal" plan as defined above. | |
| 107385 | + ** (2) (This rule was removed on 2012-11-09. The scaling of the | |
| 107386 | + ** cost using the optimal scan cost made this rule obsolete.) | |
| 107312 | 107387 | ** |
| 107313 | 107388 | ** (3) All tables have an INDEXED BY clause or this table lacks an |
| 107314 | 107389 | ** INDEXED BY clause or this table uses the specific |
| 107315 | 107390 | ** index specified by its INDEXED BY clause. This rule ensures |
| 107316 | 107391 | ** that a best-so-far is always selected even if an impossible |
| @@ -107321,13 +107396,10 @@ | ||
| 107321 | 107396 | ** |
| 107322 | 107397 | ** (4) The plan cost must be lower than prior plans, where "cost" |
| 107323 | 107398 | ** is defined by the compareCost() function above. |
| 107324 | 107399 | */ |
| 107325 | 107400 | if( (sWBI.cost.used&sWBI.notValid)==0 /* (1) */ |
| 107326 | - && (bestJ<0 || (notIndexed&m)!=0 /* (2) */ | |
| 107327 | - || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 | |
| 107328 | - || (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0) | |
| 107329 | 107401 | && (nUnconstrained==0 || sWBI.pSrc->pIndex==0 /* (3) */ |
| 107330 | 107402 | || NEVER((sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)) |
| 107331 | 107403 | && (bestJ<0 || compareCost(&sWBI.cost, &bestPlan)) /* (4) */ |
| 107332 | 107404 | ){ |
| 107333 | 107405 | WHERETRACE((" === table %d (%s) is best so far\n" |
| 107334 | 107406 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -673,11 +673,11 @@ | |
| 673 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 674 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 675 | */ |
| 676 | #define SQLITE_VERSION "3.7.15" |
| 677 | #define SQLITE_VERSION_NUMBER 3007015 |
| 678 | #define SQLITE_SOURCE_ID "2012-10-30 18:09:46 9dca18f5fea84afbecb314ee1cdfb98430656af3" |
| 679 | |
| 680 | /* |
| 681 | ** CAPI3REF: Run-Time Library Version Numbers |
| 682 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 683 | ** |
| @@ -1038,10 +1038,11 @@ | |
| 1038 | #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) |
| 1039 | #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) |
| 1040 | #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) |
| 1041 | #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) |
| 1042 | #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) |
| 1043 | #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) |
| 1044 | #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) |
| 1045 | #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) |
| 1046 | #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) |
| 1047 | #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) |
| @@ -11008,10 +11009,11 @@ | |
| 11008 | int addrInTop; /* Top of the IN loop */ |
| 11009 | } *aInLoop; /* Information about each nested IN operator */ |
| 11010 | } in; /* Used when plan.wsFlags&WHERE_IN_ABLE */ |
| 11011 | Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */ |
| 11012 | } u; |
| 11013 | |
| 11014 | /* The following field is really not part of the current level. But |
| 11015 | ** we need a place to cache virtual table index information for each |
| 11016 | ** virtual table in the FROM clause and the WhereLevel structure is |
| 11017 | ** a convenient place since there is one WhereLevel for each FROM clause |
| @@ -13716,10 +13718,11 @@ | |
| 13716 | int nByte = 0; /* Used to accumulate return value */ |
| 13717 | |
| 13718 | db->pnBytesFreed = &nByte; |
| 13719 | for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){ |
| 13720 | sqlite3VdbeClearObject(db, pVdbe); |
| 13721 | } |
| 13722 | db->pnBytesFreed = 0; |
| 13723 | |
| 13724 | *pHighwater = 0; |
| 13725 | *pCurrent = nByte; |
| @@ -28219,12 +28222,17 @@ | |
| 28219 | int dirSync /* If true, fsync() directory after deleting file */ |
| 28220 | ){ |
| 28221 | int rc = SQLITE_OK; |
| 28222 | UNUSED_PARAMETER(NotUsed); |
| 28223 | SimulateIOError(return SQLITE_IOERR_DELETE); |
| 28224 | if( osUnlink(zPath)==(-1) && errno!=ENOENT ){ |
| 28225 | return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath); |
| 28226 | } |
| 28227 | #ifndef SQLITE_DISABLE_DIRSYNC |
| 28228 | if( (dirSync & 1)!=0 ){ |
| 28229 | int fd; |
| 28230 | rc = osOpenDirectory(zPath, &fd); |
| @@ -40388,10 +40396,11 @@ | |
| 40388 | |
| 40389 | rc = pagerPagecount(pPager, &nPage); |
| 40390 | if( rc ) return rc; |
| 40391 | if( nPage==0 ){ |
| 40392 | rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); |
| 40393 | isWal = 0; |
| 40394 | }else{ |
| 40395 | rc = sqlite3OsAccess( |
| 40396 | pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal |
| 40397 | ); |
| @@ -77655,12 +77664,14 @@ | |
| 77655 | */ |
| 77656 | assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); |
| 77657 | ExprSetIrreducible(pExpr); |
| 77658 | pExpr->iAgg = (i16)i; |
| 77659 | pExpr->pAggInfo = pAggInfo; |
| 77660 | } |
| 77661 | return WRC_Prune; |
| 77662 | } |
| 77663 | } |
| 77664 | return WRC_Continue; |
| 77665 | } |
| 77666 | static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){ |
| @@ -77668,13 +77679,14 @@ | |
| 77668 | UNUSED_PARAMETER(pSelect); |
| 77669 | return WRC_Continue; |
| 77670 | } |
| 77671 | |
| 77672 | /* |
| 77673 | ** Analyze the given expression looking for aggregate functions and |
| 77674 | ** for variables that need to be added to the pParse->aAgg[] array. |
| 77675 | ** Make additional entries to the pParse->aAgg[] array as necessary. |
| 77676 | ** |
| 77677 | ** This routine should only be called after the expression has been |
| 77678 | ** analyzed by sqlite3ResolveExprNames(). |
| 77679 | */ |
| 77680 | SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){ |
| @@ -85700,10 +85712,59 @@ | |
| 85700 | sqlite3_result_double(context, rVal); |
| 85701 | break; |
| 85702 | } |
| 85703 | } |
| 85704 | } |
| 85705 | |
| 85706 | /* |
| 85707 | ** Implementation of the substr() function. |
| 85708 | ** |
| 85709 | ** substr(x,p1,p2) returns p2 characters of x[] beginning with p1. |
| @@ -87069,10 +87130,11 @@ | |
| 87069 | FUNCTION(max, -1, 1, 1, minmaxFunc ), |
| 87070 | FUNCTION(max, 0, 1, 1, 0 ), |
| 87071 | AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ), |
| 87072 | FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), |
| 87073 | FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), |
| 87074 | FUNCTION(substr, 2, 0, 0, substrFunc ), |
| 87075 | FUNCTION(substr, 3, 0, 0, substrFunc ), |
| 87076 | FUNCTION(abs, 1, 0, 0, absFunc ), |
| 87077 | #ifndef SQLITE_OMIT_FLOATING_POINT |
| 87078 | FUNCTION(round, 1, 0, 0, roundFunc ), |
| @@ -107298,19 +107360,32 @@ | |
| 107298 | || sWBI.cost.plan.u.pIdx==sWBI.pSrc->pIndex ); |
| 107299 | |
| 107300 | if( isOptimal && (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){ |
| 107301 | notIndexed |= m; |
| 107302 | } |
| 107303 | |
| 107304 | /* Conditions under which this table becomes the best so far: |
| 107305 | ** |
| 107306 | ** (1) The table must not depend on other tables that have not |
| 107307 | ** yet run. (In other words, it must not depend on tables |
| 107308 | ** in inner loops.) |
| 107309 | ** |
| 107310 | ** (2) A full-table-scan plan cannot supercede indexed plan unless |
| 107311 | ** the full-table-scan is an "optimal" plan as defined above. |
| 107312 | ** |
| 107313 | ** (3) All tables have an INDEXED BY clause or this table lacks an |
| 107314 | ** INDEXED BY clause or this table uses the specific |
| 107315 | ** index specified by its INDEXED BY clause. This rule ensures |
| 107316 | ** that a best-so-far is always selected even if an impossible |
| @@ -107321,13 +107396,10 @@ | |
| 107321 | ** |
| 107322 | ** (4) The plan cost must be lower than prior plans, where "cost" |
| 107323 | ** is defined by the compareCost() function above. |
| 107324 | */ |
| 107325 | if( (sWBI.cost.used&sWBI.notValid)==0 /* (1) */ |
| 107326 | && (bestJ<0 || (notIndexed&m)!=0 /* (2) */ |
| 107327 | || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 |
| 107328 | || (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0) |
| 107329 | && (nUnconstrained==0 || sWBI.pSrc->pIndex==0 /* (3) */ |
| 107330 | || NEVER((sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)) |
| 107331 | && (bestJ<0 || compareCost(&sWBI.cost, &bestPlan)) /* (4) */ |
| 107332 | ){ |
| 107333 | WHERETRACE((" === table %d (%s) is best so far\n" |
| 107334 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -673,11 +673,11 @@ | |
| 673 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 674 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 675 | */ |
| 676 | #define SQLITE_VERSION "3.7.15" |
| 677 | #define SQLITE_VERSION_NUMBER 3007015 |
| 678 | #define SQLITE_SOURCE_ID "2012-11-09 21:40:02 5a3b07f0f5dfae7eea870303f52f37d6a17f1da2" |
| 679 | |
| 680 | /* |
| 681 | ** CAPI3REF: Run-Time Library Version Numbers |
| 682 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 683 | ** |
| @@ -1038,10 +1038,11 @@ | |
| 1038 | #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) |
| 1039 | #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) |
| 1040 | #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) |
| 1041 | #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) |
| 1042 | #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) |
| 1043 | #define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8)) |
| 1044 | #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) |
| 1045 | #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) |
| 1046 | #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) |
| 1047 | #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) |
| 1048 | #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) |
| @@ -11008,10 +11009,11 @@ | |
| 11009 | int addrInTop; /* Top of the IN loop */ |
| 11010 | } *aInLoop; /* Information about each nested IN operator */ |
| 11011 | } in; /* Used when plan.wsFlags&WHERE_IN_ABLE */ |
| 11012 | Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */ |
| 11013 | } u; |
| 11014 | double rOptCost; /* "Optimal" cost for this level */ |
| 11015 | |
| 11016 | /* The following field is really not part of the current level. But |
| 11017 | ** we need a place to cache virtual table index information for each |
| 11018 | ** virtual table in the FROM clause and the WhereLevel structure is |
| 11019 | ** a convenient place since there is one WhereLevel for each FROM clause |
| @@ -13716,10 +13718,11 @@ | |
| 13718 | int nByte = 0; /* Used to accumulate return value */ |
| 13719 | |
| 13720 | db->pnBytesFreed = &nByte; |
| 13721 | for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){ |
| 13722 | sqlite3VdbeClearObject(db, pVdbe); |
| 13723 | sqlite3DbFree(db, pVdbe); |
| 13724 | } |
| 13725 | db->pnBytesFreed = 0; |
| 13726 | |
| 13727 | *pHighwater = 0; |
| 13728 | *pCurrent = nByte; |
| @@ -28219,12 +28222,17 @@ | |
| 28222 | int dirSync /* If true, fsync() directory after deleting file */ |
| 28223 | ){ |
| 28224 | int rc = SQLITE_OK; |
| 28225 | UNUSED_PARAMETER(NotUsed); |
| 28226 | SimulateIOError(return SQLITE_IOERR_DELETE); |
| 28227 | if( osUnlink(zPath)==(-1) ){ |
| 28228 | if( errno==ENOENT ){ |
| 28229 | rc = SQLITE_IOERR_DELETE_NOENT; |
| 28230 | }else{ |
| 28231 | rc = unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath); |
| 28232 | } |
| 28233 | return rc; |
| 28234 | } |
| 28235 | #ifndef SQLITE_DISABLE_DIRSYNC |
| 28236 | if( (dirSync & 1)!=0 ){ |
| 28237 | int fd; |
| 28238 | rc = osOpenDirectory(zPath, &fd); |
| @@ -40388,10 +40396,11 @@ | |
| 40396 | |
| 40397 | rc = pagerPagecount(pPager, &nPage); |
| 40398 | if( rc ) return rc; |
| 40399 | if( nPage==0 ){ |
| 40400 | rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); |
| 40401 | if( rc==SQLITE_IOERR_DELETE_NOENT ) rc = SQLITE_OK; |
| 40402 | isWal = 0; |
| 40403 | }else{ |
| 40404 | rc = sqlite3OsAccess( |
| 40405 | pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal |
| 40406 | ); |
| @@ -77655,12 +77664,14 @@ | |
| 77664 | */ |
| 77665 | assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) ); |
| 77666 | ExprSetIrreducible(pExpr); |
| 77667 | pExpr->iAgg = (i16)i; |
| 77668 | pExpr->pAggInfo = pAggInfo; |
| 77669 | return WRC_Prune; |
| 77670 | }else{ |
| 77671 | return WRC_Continue; |
| 77672 | } |
| 77673 | } |
| 77674 | } |
| 77675 | return WRC_Continue; |
| 77676 | } |
| 77677 | static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){ |
| @@ -77668,13 +77679,14 @@ | |
| 77679 | UNUSED_PARAMETER(pSelect); |
| 77680 | return WRC_Continue; |
| 77681 | } |
| 77682 | |
| 77683 | /* |
| 77684 | ** Analyze the pExpr expression looking for aggregate functions and |
| 77685 | ** for variables that need to be added to AggInfo object that pNC->pAggInfo |
| 77686 | ** points to. Additional entries are made on the AggInfo object as |
| 77687 | ** necessary. |
| 77688 | ** |
| 77689 | ** This routine should only be called after the expression has been |
| 77690 | ** analyzed by sqlite3ResolveExprNames(). |
| 77691 | */ |
| 77692 | SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){ |
| @@ -85700,10 +85712,59 @@ | |
| 85712 | sqlite3_result_double(context, rVal); |
| 85713 | break; |
| 85714 | } |
| 85715 | } |
| 85716 | } |
| 85717 | |
| 85718 | /* |
| 85719 | ** Implementation of the instr() function. |
| 85720 | ** |
| 85721 | ** instr(haystack,needle) finds the first occurrence of needle |
| 85722 | ** in haystack and returns the number of previous characters plus 1, |
| 85723 | ** or 0 if needle does not occur within haystack. |
| 85724 | ** |
| 85725 | ** If both haystack and needle are BLOBs, then the result is one more than |
| 85726 | ** the number of bytes in haystack prior to the first occurrence of needle, |
| 85727 | ** or 0 if needle never occurs in haystack. |
| 85728 | */ |
| 85729 | static void instrFunc( |
| 85730 | sqlite3_context *context, |
| 85731 | int argc, |
| 85732 | sqlite3_value **argv |
| 85733 | ){ |
| 85734 | const unsigned char *zHaystack; |
| 85735 | const unsigned char *zNeedle; |
| 85736 | int nHaystack; |
| 85737 | int nNeedle; |
| 85738 | int typeHaystack, typeNeedle; |
| 85739 | int N = 1; |
| 85740 | int isText; |
| 85741 | |
| 85742 | typeHaystack = sqlite3_value_type(argv[0]); |
| 85743 | typeNeedle = sqlite3_value_type(argv[1]); |
| 85744 | if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return; |
| 85745 | nHaystack = sqlite3_value_bytes(argv[0]); |
| 85746 | nNeedle = sqlite3_value_bytes(argv[1]); |
| 85747 | if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ |
| 85748 | zHaystack = sqlite3_value_blob(argv[0]); |
| 85749 | zNeedle = sqlite3_value_blob(argv[1]); |
| 85750 | isText = 0; |
| 85751 | }else{ |
| 85752 | zHaystack = sqlite3_value_text(argv[0]); |
| 85753 | zNeedle = sqlite3_value_text(argv[1]); |
| 85754 | isText = 1; |
| 85755 | } |
| 85756 | while( nNeedle<=nHaystack && memcmp(zHaystack, zNeedle, nNeedle)!=0 ){ |
| 85757 | N++; |
| 85758 | do{ |
| 85759 | nHaystack--; |
| 85760 | zHaystack++; |
| 85761 | }while( isText && (zHaystack[0]&0xc0)==0x80 ); |
| 85762 | } |
| 85763 | if( nNeedle>nHaystack ) N = 0; |
| 85764 | sqlite3_result_int(context, N); |
| 85765 | } |
| 85766 | |
| 85767 | /* |
| 85768 | ** Implementation of the substr() function. |
| 85769 | ** |
| 85770 | ** substr(x,p1,p2) returns p2 characters of x[] beginning with p1. |
| @@ -87069,10 +87130,11 @@ | |
| 87130 | FUNCTION(max, -1, 1, 1, minmaxFunc ), |
| 87131 | FUNCTION(max, 0, 1, 1, 0 ), |
| 87132 | AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ), |
| 87133 | FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), |
| 87134 | FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), |
| 87135 | FUNCTION(instr, 2, 0, 0, instrFunc ), |
| 87136 | FUNCTION(substr, 2, 0, 0, substrFunc ), |
| 87137 | FUNCTION(substr, 3, 0, 0, substrFunc ), |
| 87138 | FUNCTION(abs, 1, 0, 0, absFunc ), |
| 87139 | #ifndef SQLITE_OMIT_FLOATING_POINT |
| 87140 | FUNCTION(round, 1, 0, 0, roundFunc ), |
| @@ -107298,19 +107360,32 @@ | |
| 107360 | || sWBI.cost.plan.u.pIdx==sWBI.pSrc->pIndex ); |
| 107361 | |
| 107362 | if( isOptimal && (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){ |
| 107363 | notIndexed |= m; |
| 107364 | } |
| 107365 | if( isOptimal ){ |
| 107366 | pWInfo->a[j].rOptCost = sWBI.cost.rCost; |
| 107367 | }else if( iFrom<nTabList-1 ){ |
| 107368 | /* If two or more tables have nearly the same outer loop cost, |
| 107369 | ** very different inner loop (optimal) cost, we want to choose |
| 107370 | ** for the outer loop that table which benefits the least from |
| 107371 | ** being in the inner loop. The following code scales the |
| 107372 | ** outer loop cost estimate to accomplish that. */ |
| 107373 | WHERETRACE((" scaling cost from %.1f to %.1f\n", |
| 107374 | sWBI.cost.rCost, |
| 107375 | sWBI.cost.rCost/pWInfo->a[j].rOptCost)); |
| 107376 | sWBI.cost.rCost /= pWInfo->a[j].rOptCost; |
| 107377 | } |
| 107378 | |
| 107379 | /* Conditions under which this table becomes the best so far: |
| 107380 | ** |
| 107381 | ** (1) The table must not depend on other tables that have not |
| 107382 | ** yet run. (In other words, it must not depend on tables |
| 107383 | ** in inner loops.) |
| 107384 | ** |
| 107385 | ** (2) (This rule was removed on 2012-11-09. The scaling of the |
| 107386 | ** cost using the optimal scan cost made this rule obsolete.) |
| 107387 | ** |
| 107388 | ** (3) All tables have an INDEXED BY clause or this table lacks an |
| 107389 | ** INDEXED BY clause or this table uses the specific |
| 107390 | ** index specified by its INDEXED BY clause. This rule ensures |
| 107391 | ** that a best-so-far is always selected even if an impossible |
| @@ -107321,13 +107396,10 @@ | |
| 107396 | ** |
| 107397 | ** (4) The plan cost must be lower than prior plans, where "cost" |
| 107398 | ** is defined by the compareCost() function above. |
| 107399 | */ |
| 107400 | if( (sWBI.cost.used&sWBI.notValid)==0 /* (1) */ |
| 107401 | && (nUnconstrained==0 || sWBI.pSrc->pIndex==0 /* (3) */ |
| 107402 | || NEVER((sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)) |
| 107403 | && (bestJ<0 || compareCost(&sWBI.cost, &bestPlan)) /* (4) */ |
| 107404 | ){ |
| 107405 | WHERETRACE((" === table %d (%s) is best so far\n" |
| 107406 |
+2
-1
| --- src/sqlite3.h | ||
| +++ src/sqlite3.h | ||
| @@ -107,11 +107,11 @@ | ||
| 107 | 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | 109 | */ |
| 110 | 110 | #define SQLITE_VERSION "3.7.15" |
| 111 | 111 | #define SQLITE_VERSION_NUMBER 3007015 |
| 112 | -#define SQLITE_SOURCE_ID "2012-10-30 18:09:46 9dca18f5fea84afbecb314ee1cdfb98430656af3" | |
| 112 | +#define SQLITE_SOURCE_ID "2012-11-09 21:40:02 5a3b07f0f5dfae7eea870303f52f37d6a17f1da2" | |
| 113 | 113 | |
| 114 | 114 | /* |
| 115 | 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | 117 | ** |
| @@ -472,10 +472,11 @@ | ||
| 472 | 472 | #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) |
| 473 | 473 | #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) |
| 474 | 474 | #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) |
| 475 | 475 | #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) |
| 476 | 476 | #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) |
| 477 | +#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8)) | |
| 477 | 478 | #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) |
| 478 | 479 | #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) |
| 479 | 480 | #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) |
| 480 | 481 | #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) |
| 481 | 482 | #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) |
| 482 | 483 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -107,11 +107,11 @@ | |
| 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | */ |
| 110 | #define SQLITE_VERSION "3.7.15" |
| 111 | #define SQLITE_VERSION_NUMBER 3007015 |
| 112 | #define SQLITE_SOURCE_ID "2012-10-30 18:09:46 9dca18f5fea84afbecb314ee1cdfb98430656af3" |
| 113 | |
| 114 | /* |
| 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | ** |
| @@ -472,10 +472,11 @@ | |
| 472 | #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) |
| 473 | #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) |
| 474 | #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) |
| 475 | #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) |
| 476 | #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) |
| 477 | #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) |
| 478 | #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) |
| 479 | #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) |
| 480 | #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) |
| 481 | #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) |
| 482 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -107,11 +107,11 @@ | |
| 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | */ |
| 110 | #define SQLITE_VERSION "3.7.15" |
| 111 | #define SQLITE_VERSION_NUMBER 3007015 |
| 112 | #define SQLITE_SOURCE_ID "2012-11-09 21:40:02 5a3b07f0f5dfae7eea870303f52f37d6a17f1da2" |
| 113 | |
| 114 | /* |
| 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | ** |
| @@ -472,10 +472,11 @@ | |
| 472 | #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8)) |
| 473 | #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8)) |
| 474 | #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8)) |
| 475 | #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) |
| 476 | #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8)) |
| 477 | #define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8)) |
| 478 | #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) |
| 479 | #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) |
| 480 | #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8)) |
| 481 | #define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8)) |
| 482 | #define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8)) |
| 483 |
+11
-10
| --- src/style.c | ||
| +++ src/style.c | ||
| @@ -366,34 +366,34 @@ | ||
| 366 | 366 | @ </div> |
| 367 | 367 | @ <div class="mainmenu"> |
| 368 | 368 | @ <th1> |
| 369 | 369 | @ html "<a href='$home$index_page'>Home</a>\n" |
| 370 | 370 | @ if {[anycap jor]} { |
| 371 | -@ html "<a href='$home/timeline'>Timeline</a>\n" | |
| 371 | +@ html "<a href='timeline'>Timeline</a>\n" | |
| 372 | 372 | @ } |
| 373 | 373 | @ if {[hascap oh]} { |
| 374 | -@ html "<a href='$home/dir?ci=tip'>Files</a>\n" | |
| 374 | +@ html "<a href='dir?ci=tip'>Files</a>\n" | |
| 375 | 375 | @ } |
| 376 | 376 | @ if {[hascap o]} { |
| 377 | -@ html "<a href='$home/brlist'>Branches</a>\n" | |
| 378 | -@ html "<a href='$home/taglist'>Tags</a>\n" | |
| 377 | +@ html "<a href='brlist'>Branches</a>\n" | |
| 378 | +@ html "<a href='taglist'>Tags</a>\n" | |
| 379 | 379 | @ } |
| 380 | 380 | @ if {[hascap r]} { |
| 381 | -@ html "<a href='$home/reportlist'>Tickets</a>\n" | |
| 381 | +@ html "<a href='reportlist'>Tickets</a>\n" | |
| 382 | 382 | @ } |
| 383 | 383 | @ if {[hascap j]} { |
| 384 | -@ html "<a href='$home/wiki'>Wiki</a>\n" | |
| 384 | +@ html "<a href='wiki'>Wiki</a>\n" | |
| 385 | 385 | @ } |
| 386 | 386 | @ if {[hascap s]} { |
| 387 | -@ html "<a href='$home/setup'>Admin</a>\n" | |
| 387 | +@ html "<a href='setup'>Admin</a>\n" | |
| 388 | 388 | @ } elseif {[hascap a]} { |
| 389 | -@ html "<a href='$home/setup_ulist'>Users</a>\n" | |
| 389 | +@ html "<a href='setup_ulist'>Users</a>\n" | |
| 390 | 390 | @ } |
| 391 | 391 | @ if {[info exists login]} { |
| 392 | -@ html "<a href='$home/login'>Logout</a>\n" | |
| 392 | +@ html "<a href='login'>Logout</a>\n" | |
| 393 | 393 | @ } else { |
| 394 | -@ html "<a href='$home/login'>Login</a>\n" | |
| 394 | +@ html "<a href='login'>Login</a>\n" | |
| 395 | 395 | @ } |
| 396 | 396 | @ </th1></div> |
| 397 | 397 | ; |
| 398 | 398 | |
| 399 | 399 | /* |
| @@ -428,10 +428,11 @@ | ||
| 428 | 428 | @ text-align: center; |
| 429 | 429 | @ vertical-align: bottom; |
| 430 | 430 | @ font-weight: bold; |
| 431 | 431 | @ color: #558195; |
| 432 | 432 | @ min-width: 200px; |
| 433 | +@ white-space: nowrap; | |
| 433 | 434 | @ } |
| 434 | 435 | @ |
| 435 | 436 | @ /* The page title centered at the top of each page */ |
| 436 | 437 | @ div.title { |
| 437 | 438 | @ display: table-cell; |
| 438 | 439 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -366,34 +366,34 @@ | |
| 366 | @ </div> |
| 367 | @ <div class="mainmenu"> |
| 368 | @ <th1> |
| 369 | @ html "<a href='$home$index_page'>Home</a>\n" |
| 370 | @ if {[anycap jor]} { |
| 371 | @ html "<a href='$home/timeline'>Timeline</a>\n" |
| 372 | @ } |
| 373 | @ if {[hascap oh]} { |
| 374 | @ html "<a href='$home/dir?ci=tip'>Files</a>\n" |
| 375 | @ } |
| 376 | @ if {[hascap o]} { |
| 377 | @ html "<a href='$home/brlist'>Branches</a>\n" |
| 378 | @ html "<a href='$home/taglist'>Tags</a>\n" |
| 379 | @ } |
| 380 | @ if {[hascap r]} { |
| 381 | @ html "<a href='$home/reportlist'>Tickets</a>\n" |
| 382 | @ } |
| 383 | @ if {[hascap j]} { |
| 384 | @ html "<a href='$home/wiki'>Wiki</a>\n" |
| 385 | @ } |
| 386 | @ if {[hascap s]} { |
| 387 | @ html "<a href='$home/setup'>Admin</a>\n" |
| 388 | @ } elseif {[hascap a]} { |
| 389 | @ html "<a href='$home/setup_ulist'>Users</a>\n" |
| 390 | @ } |
| 391 | @ if {[info exists login]} { |
| 392 | @ html "<a href='$home/login'>Logout</a>\n" |
| 393 | @ } else { |
| 394 | @ html "<a href='$home/login'>Login</a>\n" |
| 395 | @ } |
| 396 | @ </th1></div> |
| 397 | ; |
| 398 | |
| 399 | /* |
| @@ -428,10 +428,11 @@ | |
| 428 | @ text-align: center; |
| 429 | @ vertical-align: bottom; |
| 430 | @ font-weight: bold; |
| 431 | @ color: #558195; |
| 432 | @ min-width: 200px; |
| 433 | @ } |
| 434 | @ |
| 435 | @ /* The page title centered at the top of each page */ |
| 436 | @ div.title { |
| 437 | @ display: table-cell; |
| 438 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -366,34 +366,34 @@ | |
| 366 | @ </div> |
| 367 | @ <div class="mainmenu"> |
| 368 | @ <th1> |
| 369 | @ html "<a href='$home$index_page'>Home</a>\n" |
| 370 | @ if {[anycap jor]} { |
| 371 | @ html "<a href='timeline'>Timeline</a>\n" |
| 372 | @ } |
| 373 | @ if {[hascap oh]} { |
| 374 | @ html "<a href='dir?ci=tip'>Files</a>\n" |
| 375 | @ } |
| 376 | @ if {[hascap o]} { |
| 377 | @ html "<a href='brlist'>Branches</a>\n" |
| 378 | @ html "<a href='taglist'>Tags</a>\n" |
| 379 | @ } |
| 380 | @ if {[hascap r]} { |
| 381 | @ html "<a href='reportlist'>Tickets</a>\n" |
| 382 | @ } |
| 383 | @ if {[hascap j]} { |
| 384 | @ html "<a href='wiki'>Wiki</a>\n" |
| 385 | @ } |
| 386 | @ if {[hascap s]} { |
| 387 | @ html "<a href='setup'>Admin</a>\n" |
| 388 | @ } elseif {[hascap a]} { |
| 389 | @ html "<a href='setup_ulist'>Users</a>\n" |
| 390 | @ } |
| 391 | @ if {[info exists login]} { |
| 392 | @ html "<a href='login'>Logout</a>\n" |
| 393 | @ } else { |
| 394 | @ html "<a href='login'>Login</a>\n" |
| 395 | @ } |
| 396 | @ </th1></div> |
| 397 | ; |
| 398 | |
| 399 | /* |
| @@ -428,10 +428,11 @@ | |
| 428 | @ text-align: center; |
| 429 | @ vertical-align: bottom; |
| 430 | @ font-weight: bold; |
| 431 | @ color: #558195; |
| 432 | @ min-width: 200px; |
| 433 | @ white-space: nowrap; |
| 434 | @ } |
| 435 | @ |
| 436 | @ /* The page title centered at the top of each page */ |
| 437 | @ div.title { |
| 438 | @ display: table-cell; |
| 439 |
+11
-10
| --- src/style.c | ||
| +++ src/style.c | ||
| @@ -366,34 +366,34 @@ | ||
| 366 | 366 | @ </div> |
| 367 | 367 | @ <div class="mainmenu"> |
| 368 | 368 | @ <th1> |
| 369 | 369 | @ html "<a href='$home$index_page'>Home</a>\n" |
| 370 | 370 | @ if {[anycap jor]} { |
| 371 | -@ html "<a href='$home/timeline'>Timeline</a>\n" | |
| 371 | +@ html "<a href='timeline'>Timeline</a>\n" | |
| 372 | 372 | @ } |
| 373 | 373 | @ if {[hascap oh]} { |
| 374 | -@ html "<a href='$home/dir?ci=tip'>Files</a>\n" | |
| 374 | +@ html "<a href='dir?ci=tip'>Files</a>\n" | |
| 375 | 375 | @ } |
| 376 | 376 | @ if {[hascap o]} { |
| 377 | -@ html "<a href='$home/brlist'>Branches</a>\n" | |
| 378 | -@ html "<a href='$home/taglist'>Tags</a>\n" | |
| 377 | +@ html "<a href='brlist'>Branches</a>\n" | |
| 378 | +@ html "<a href='taglist'>Tags</a>\n" | |
| 379 | 379 | @ } |
| 380 | 380 | @ if {[hascap r]} { |
| 381 | -@ html "<a href='$home/reportlist'>Tickets</a>\n" | |
| 381 | +@ html "<a href='reportlist'>Tickets</a>\n" | |
| 382 | 382 | @ } |
| 383 | 383 | @ if {[hascap j]} { |
| 384 | -@ html "<a href='$home/wiki'>Wiki</a>\n" | |
| 384 | +@ html "<a href='wiki'>Wiki</a>\n" | |
| 385 | 385 | @ } |
| 386 | 386 | @ if {[hascap s]} { |
| 387 | -@ html "<a href='$home/setup'>Admin</a>\n" | |
| 387 | +@ html "<a href='setup'>Admin</a>\n" | |
| 388 | 388 | @ } elseif {[hascap a]} { |
| 389 | -@ html "<a href='$home/setup_ulist'>Users</a>\n" | |
| 389 | +@ html "<a href='setup_ulist'>Users</a>\n" | |
| 390 | 390 | @ } |
| 391 | 391 | @ if {[info exists login]} { |
| 392 | -@ html "<a href='$home/login'>Logout</a>\n" | |
| 392 | +@ html "<a href='login'>Logout</a>\n" | |
| 393 | 393 | @ } else { |
| 394 | -@ html "<a href='$home/login'>Login</a>\n" | |
| 394 | +@ html "<a href='login'>Login</a>\n" | |
| 395 | 395 | @ } |
| 396 | 396 | @ </th1></div> |
| 397 | 397 | ; |
| 398 | 398 | |
| 399 | 399 | /* |
| @@ -428,10 +428,11 @@ | ||
| 428 | 428 | @ text-align: center; |
| 429 | 429 | @ vertical-align: bottom; |
| 430 | 430 | @ font-weight: bold; |
| 431 | 431 | @ color: #558195; |
| 432 | 432 | @ min-width: 200px; |
| 433 | +@ white-space: nowrap; | |
| 433 | 434 | @ } |
| 434 | 435 | @ |
| 435 | 436 | @ /* The page title centered at the top of each page */ |
| 436 | 437 | @ div.title { |
| 437 | 438 | @ display: table-cell; |
| 438 | 439 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -366,34 +366,34 @@ | |
| 366 | @ </div> |
| 367 | @ <div class="mainmenu"> |
| 368 | @ <th1> |
| 369 | @ html "<a href='$home$index_page'>Home</a>\n" |
| 370 | @ if {[anycap jor]} { |
| 371 | @ html "<a href='$home/timeline'>Timeline</a>\n" |
| 372 | @ } |
| 373 | @ if {[hascap oh]} { |
| 374 | @ html "<a href='$home/dir?ci=tip'>Files</a>\n" |
| 375 | @ } |
| 376 | @ if {[hascap o]} { |
| 377 | @ html "<a href='$home/brlist'>Branches</a>\n" |
| 378 | @ html "<a href='$home/taglist'>Tags</a>\n" |
| 379 | @ } |
| 380 | @ if {[hascap r]} { |
| 381 | @ html "<a href='$home/reportlist'>Tickets</a>\n" |
| 382 | @ } |
| 383 | @ if {[hascap j]} { |
| 384 | @ html "<a href='$home/wiki'>Wiki</a>\n" |
| 385 | @ } |
| 386 | @ if {[hascap s]} { |
| 387 | @ html "<a href='$home/setup'>Admin</a>\n" |
| 388 | @ } elseif {[hascap a]} { |
| 389 | @ html "<a href='$home/setup_ulist'>Users</a>\n" |
| 390 | @ } |
| 391 | @ if {[info exists login]} { |
| 392 | @ html "<a href='$home/login'>Logout</a>\n" |
| 393 | @ } else { |
| 394 | @ html "<a href='$home/login'>Login</a>\n" |
| 395 | @ } |
| 396 | @ </th1></div> |
| 397 | ; |
| 398 | |
| 399 | /* |
| @@ -428,10 +428,11 @@ | |
| 428 | @ text-align: center; |
| 429 | @ vertical-align: bottom; |
| 430 | @ font-weight: bold; |
| 431 | @ color: #558195; |
| 432 | @ min-width: 200px; |
| 433 | @ } |
| 434 | @ |
| 435 | @ /* The page title centered at the top of each page */ |
| 436 | @ div.title { |
| 437 | @ display: table-cell; |
| 438 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -366,34 +366,34 @@ | |
| 366 | @ </div> |
| 367 | @ <div class="mainmenu"> |
| 368 | @ <th1> |
| 369 | @ html "<a href='$home$index_page'>Home</a>\n" |
| 370 | @ if {[anycap jor]} { |
| 371 | @ html "<a href='timeline'>Timeline</a>\n" |
| 372 | @ } |
| 373 | @ if {[hascap oh]} { |
| 374 | @ html "<a href='dir?ci=tip'>Files</a>\n" |
| 375 | @ } |
| 376 | @ if {[hascap o]} { |
| 377 | @ html "<a href='brlist'>Branches</a>\n" |
| 378 | @ html "<a href='taglist'>Tags</a>\n" |
| 379 | @ } |
| 380 | @ if {[hascap r]} { |
| 381 | @ html "<a href='reportlist'>Tickets</a>\n" |
| 382 | @ } |
| 383 | @ if {[hascap j]} { |
| 384 | @ html "<a href='wiki'>Wiki</a>\n" |
| 385 | @ } |
| 386 | @ if {[hascap s]} { |
| 387 | @ html "<a href='setup'>Admin</a>\n" |
| 388 | @ } elseif {[hascap a]} { |
| 389 | @ html "<a href='setup_ulist'>Users</a>\n" |
| 390 | @ } |
| 391 | @ if {[info exists login]} { |
| 392 | @ html "<a href='login'>Logout</a>\n" |
| 393 | @ } else { |
| 394 | @ html "<a href='login'>Login</a>\n" |
| 395 | @ } |
| 396 | @ </th1></div> |
| 397 | ; |
| 398 | |
| 399 | /* |
| @@ -428,10 +428,11 @@ | |
| 428 | @ text-align: center; |
| 429 | @ vertical-align: bottom; |
| 430 | @ font-weight: bold; |
| 431 | @ color: #558195; |
| 432 | @ min-width: 200px; |
| 433 | @ white-space: nowrap; |
| 434 | @ } |
| 435 | @ |
| 436 | @ /* The page title centered at the top of each page */ |
| 437 | @ div.title { |
| 438 | @ display: table-cell; |
| 439 |
+2
-2
| --- src/wysiwyg.c | ||
| +++ src/wysiwyg.c | ||
| @@ -173,17 +173,17 @@ | ||
| 173 | 173 | @ R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P///////// |
| 174 | 174 | @ //////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2Cekk |
| 175 | 175 | @ ErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrT |
| 176 | 176 | @ q/b7/i8fp8PAQA7" /> |
| 177 | 177 | |
| 178 | - @ <img class="intLink" title="Add indentation" | |
| 178 | + @ <img class="intLink" title="Delete indentation" | |
| 179 | 179 | @ onclick="formatDoc('outdent');" |
| 180 | 180 | @ src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P |
| 181 | 181 | @ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMcz |
| 182 | 182 | @ sYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" /> |
| 183 | 183 | |
| 184 | - @ <img class="intLink" title="Delete indentation" | |
| 184 | + @ <img class="intLink" title="Add indentation" | |
| 185 | 185 | @ onclick="formatDoc('indent');" |
| 186 | 186 | @ src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3N |
| 187 | 187 | @ Ha7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650 |
| 188 | 188 | @ B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw=="> |
| 189 | 189 | |
| 190 | 190 |
| --- src/wysiwyg.c | |
| +++ src/wysiwyg.c | |
| @@ -173,17 +173,17 @@ | |
| 173 | @ R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P///////// |
| 174 | @ //////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2Cekk |
| 175 | @ ErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrT |
| 176 | @ q/b7/i8fp8PAQA7" /> |
| 177 | |
| 178 | @ <img class="intLink" title="Add indentation" |
| 179 | @ onclick="formatDoc('outdent');" |
| 180 | @ src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P |
| 181 | @ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMcz |
| 182 | @ sYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" /> |
| 183 | |
| 184 | @ <img class="intLink" title="Delete indentation" |
| 185 | @ onclick="formatDoc('indent');" |
| 186 | @ src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3N |
| 187 | @ Ha7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650 |
| 188 | @ B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw=="> |
| 189 | |
| 190 |
| --- src/wysiwyg.c | |
| +++ src/wysiwyg.c | |
| @@ -173,17 +173,17 @@ | |
| 173 | @ R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P///////// |
| 174 | @ //////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2Cekk |
| 175 | @ ErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrT |
| 176 | @ q/b7/i8fp8PAQA7" /> |
| 177 | |
| 178 | @ <img class="intLink" title="Delete indentation" |
| 179 | @ onclick="formatDoc('outdent');" |
| 180 | @ src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P |
| 181 | @ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMcz |
| 182 | @ sYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" /> |
| 183 | |
| 184 | @ <img class="intLink" title="Add indentation" |
| 185 | @ onclick="formatDoc('indent');" |
| 186 | @ src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3N |
| 187 | @ Ha7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650 |
| 188 | @ B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw=="> |
| 189 | |
| 190 |
+5
-5
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -13,14 +13,14 @@ | ||
| 13 | 13 | # |
| 14 | 14 | |
| 15 | 15 | #### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers. |
| 16 | 16 | # By default, this is an empty string (i.e. use the native compiler). |
| 17 | 17 | # |
| 18 | -PREFIX = | |
| 18 | +# PREFIX = | |
| 19 | 19 | # PREFIX = mingw32- |
| 20 | 20 | # PREFIX = i686-pc-mingw32- |
| 21 | -# PREFIX = i686-w64-mingw32- | |
| 21 | +PREFIX = i686-w64-mingw32- | |
| 22 | 22 | # PREFIX = x86_64-w64-mingw32- |
| 23 | 23 | |
| 24 | 24 | #### The toplevel directory of the source tree. Fossil can be built |
| 25 | 25 | # in a directory that is separate from the source tree. Just change |
| 26 | 26 | # the following to point from the build directory to the src/ folder. |
| @@ -42,19 +42,19 @@ | ||
| 42 | 42 | # |
| 43 | 43 | # FOSSIL_ENABLE_JSON = 1 |
| 44 | 44 | |
| 45 | 45 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 46 | 46 | # |
| 47 | -# FOSSIL_ENABLE_SSL = 1 | |
| 47 | +FOSSIL_ENABLE_SSL = 1 | |
| 48 | 48 | |
| 49 | 49 | #### Enable scripting support via Tcl/Tk |
| 50 | 50 | # |
| 51 | -# FOSSIL_ENABLE_TCL = 1 | |
| 51 | +FOSSIL_ENABLE_TCL = 1 | |
| 52 | 52 | |
| 53 | 53 | #### Load Tcl using the stubs mechanism |
| 54 | 54 | # |
| 55 | -# FOSSIL_ENABLE_TCL_STUBS = 1 | |
| 55 | +FOSSIL_ENABLE_TCL_STUBS = 1 | |
| 56 | 56 | |
| 57 | 57 | #### Use the Tcl source directory instead of the install directory? |
| 58 | 58 | # This is useful when Tcl has been compiled statically with MinGW. |
| 59 | 59 | # |
| 60 | 60 | FOSSIL_TCL_SOURCE = 1 |
| 61 | 61 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -13,14 +13,14 @@ | |
| 13 | # |
| 14 | |
| 15 | #### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers. |
| 16 | # By default, this is an empty string (i.e. use the native compiler). |
| 17 | # |
| 18 | PREFIX = |
| 19 | # PREFIX = mingw32- |
| 20 | # PREFIX = i686-pc-mingw32- |
| 21 | # PREFIX = i686-w64-mingw32- |
| 22 | # PREFIX = x86_64-w64-mingw32- |
| 23 | |
| 24 | #### The toplevel directory of the source tree. Fossil can be built |
| 25 | # in a directory that is separate from the source tree. Just change |
| 26 | # the following to point from the build directory to the src/ folder. |
| @@ -42,19 +42,19 @@ | |
| 42 | # |
| 43 | # FOSSIL_ENABLE_JSON = 1 |
| 44 | |
| 45 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 46 | # |
| 47 | # FOSSIL_ENABLE_SSL = 1 |
| 48 | |
| 49 | #### Enable scripting support via Tcl/Tk |
| 50 | # |
| 51 | # FOSSIL_ENABLE_TCL = 1 |
| 52 | |
| 53 | #### Load Tcl using the stubs mechanism |
| 54 | # |
| 55 | # FOSSIL_ENABLE_TCL_STUBS = 1 |
| 56 | |
| 57 | #### Use the Tcl source directory instead of the install directory? |
| 58 | # This is useful when Tcl has been compiled statically with MinGW. |
| 59 | # |
| 60 | FOSSIL_TCL_SOURCE = 1 |
| 61 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -13,14 +13,14 @@ | |
| 13 | # |
| 14 | |
| 15 | #### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers. |
| 16 | # By default, this is an empty string (i.e. use the native compiler). |
| 17 | # |
| 18 | # PREFIX = |
| 19 | # PREFIX = mingw32- |
| 20 | # PREFIX = i686-pc-mingw32- |
| 21 | PREFIX = i686-w64-mingw32- |
| 22 | # PREFIX = x86_64-w64-mingw32- |
| 23 | |
| 24 | #### The toplevel directory of the source tree. Fossil can be built |
| 25 | # in a directory that is separate from the source tree. Just change |
| 26 | # the following to point from the build directory to the src/ folder. |
| @@ -42,19 +42,19 @@ | |
| 42 | # |
| 43 | # FOSSIL_ENABLE_JSON = 1 |
| 44 | |
| 45 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 46 | # |
| 47 | FOSSIL_ENABLE_SSL = 1 |
| 48 | |
| 49 | #### Enable scripting support via Tcl/Tk |
| 50 | # |
| 51 | FOSSIL_ENABLE_TCL = 1 |
| 52 | |
| 53 | #### Load Tcl using the stubs mechanism |
| 54 | # |
| 55 | FOSSIL_ENABLE_TCL_STUBS = 1 |
| 56 | |
| 57 | #### Use the Tcl source directory instead of the install directory? |
| 58 | # This is useful when Tcl has been compiled statically with MinGW. |
| 59 | # |
| 60 | FOSSIL_TCL_SOURCE = 1 |
| 61 |
+5
-5
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -13,14 +13,14 @@ | ||
| 13 | 13 | # |
| 14 | 14 | |
| 15 | 15 | #### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers. |
| 16 | 16 | # By default, this is an empty string (i.e. use the native compiler). |
| 17 | 17 | # |
| 18 | -PREFIX = | |
| 18 | +# PREFIX = | |
| 19 | 19 | # PREFIX = mingw32- |
| 20 | 20 | # PREFIX = i686-pc-mingw32- |
| 21 | -# PREFIX = i686-w64-mingw32- | |
| 21 | +PREFIX = i686-w64-mingw32- | |
| 22 | 22 | # PREFIX = x86_64-w64-mingw32- |
| 23 | 23 | |
| 24 | 24 | #### The toplevel directory of the source tree. Fossil can be built |
| 25 | 25 | # in a directory that is separate from the source tree. Just change |
| 26 | 26 | # the following to point from the build directory to the src/ folder. |
| @@ -42,19 +42,19 @@ | ||
| 42 | 42 | # |
| 43 | 43 | # FOSSIL_ENABLE_JSON = 1 |
| 44 | 44 | |
| 45 | 45 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 46 | 46 | # |
| 47 | -# FOSSIL_ENABLE_SSL = 1 | |
| 47 | +FOSSIL_ENABLE_SSL = 1 | |
| 48 | 48 | |
| 49 | 49 | #### Enable scripting support via Tcl/Tk |
| 50 | 50 | # |
| 51 | -# FOSSIL_ENABLE_TCL = 1 | |
| 51 | +FOSSIL_ENABLE_TCL = 1 | |
| 52 | 52 | |
| 53 | 53 | #### Load Tcl using the stubs mechanism |
| 54 | 54 | # |
| 55 | -# FOSSIL_ENABLE_TCL_STUBS = 1 | |
| 55 | +FOSSIL_ENABLE_TCL_STUBS = 1 | |
| 56 | 56 | |
| 57 | 57 | #### Use the Tcl source directory instead of the install directory? |
| 58 | 58 | # This is useful when Tcl has been compiled statically with MinGW. |
| 59 | 59 | # |
| 60 | 60 | FOSSIL_TCL_SOURCE = 1 |
| 61 | 61 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -13,14 +13,14 @@ | |
| 13 | # |
| 14 | |
| 15 | #### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers. |
| 16 | # By default, this is an empty string (i.e. use the native compiler). |
| 17 | # |
| 18 | PREFIX = |
| 19 | # PREFIX = mingw32- |
| 20 | # PREFIX = i686-pc-mingw32- |
| 21 | # PREFIX = i686-w64-mingw32- |
| 22 | # PREFIX = x86_64-w64-mingw32- |
| 23 | |
| 24 | #### The toplevel directory of the source tree. Fossil can be built |
| 25 | # in a directory that is separate from the source tree. Just change |
| 26 | # the following to point from the build directory to the src/ folder. |
| @@ -42,19 +42,19 @@ | |
| 42 | # |
| 43 | # FOSSIL_ENABLE_JSON = 1 |
| 44 | |
| 45 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 46 | # |
| 47 | # FOSSIL_ENABLE_SSL = 1 |
| 48 | |
| 49 | #### Enable scripting support via Tcl/Tk |
| 50 | # |
| 51 | # FOSSIL_ENABLE_TCL = 1 |
| 52 | |
| 53 | #### Load Tcl using the stubs mechanism |
| 54 | # |
| 55 | # FOSSIL_ENABLE_TCL_STUBS = 1 |
| 56 | |
| 57 | #### Use the Tcl source directory instead of the install directory? |
| 58 | # This is useful when Tcl has been compiled statically with MinGW. |
| 59 | # |
| 60 | FOSSIL_TCL_SOURCE = 1 |
| 61 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -13,14 +13,14 @@ | |
| 13 | # |
| 14 | |
| 15 | #### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers. |
| 16 | # By default, this is an empty string (i.e. use the native compiler). |
| 17 | # |
| 18 | # PREFIX = |
| 19 | # PREFIX = mingw32- |
| 20 | # PREFIX = i686-pc-mingw32- |
| 21 | PREFIX = i686-w64-mingw32- |
| 22 | # PREFIX = x86_64-w64-mingw32- |
| 23 | |
| 24 | #### The toplevel directory of the source tree. Fossil can be built |
| 25 | # in a directory that is separate from the source tree. Just change |
| 26 | # the following to point from the build directory to the src/ folder. |
| @@ -42,19 +42,19 @@ | |
| 42 | # |
| 43 | # FOSSIL_ENABLE_JSON = 1 |
| 44 | |
| 45 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 46 | # |
| 47 | FOSSIL_ENABLE_SSL = 1 |
| 48 | |
| 49 | #### Enable scripting support via Tcl/Tk |
| 50 | # |
| 51 | FOSSIL_ENABLE_TCL = 1 |
| 52 | |
| 53 | #### Load Tcl using the stubs mechanism |
| 54 | # |
| 55 | FOSSIL_ENABLE_TCL_STUBS = 1 |
| 56 | |
| 57 | #### Use the Tcl source directory instead of the install directory? |
| 58 | # This is useful when Tcl has been compiled statically with MinGW. |
| 59 | # |
| 60 | FOSSIL_TCL_SOURCE = 1 |
| 61 |