Fossil SCM

merge trunk

jan.nijtmans 2012-11-12 13:12 UTC convert_before_commit merge
Commit b1beeb77ee0f0d9979ca6d22384a01387728470b
+36 -4
--- src/add.c
+++ src/add.c
@@ -60,22 +60,39 @@
6060
static const char *const azManifest[] = {
6161
"manifest",
6262
"manifest.uuid",
6363
};
6464
65
+ /*
66
+ ** Names of repository files, if they exist in the checkout.
67
+ */
68
+ static const char *azRepo[4] = { 0, 0, 0, 0 };
69
+
6570
/* Cached setting "manifest" */
6671
static int cachedManifest = -1;
6772
6873
if( cachedManifest == -1 ){
74
+ Blob repo;
6975
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
+ }
7084
}
7185
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);
7692
}
93
+ if( N<count(azRepo) ) return azRepo[N];
7794
return 0;
7895
}
7996
8097
/*
8198
** Return a list of all reserved filenames as an SQL list.
@@ -93,10 +110,25 @@
93110
}
94111
zAll = blob_str(&x);
95112
}
96113
return zAll;
97114
}
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
+}
98130
99131
/*
100132
** Add a single file named zName to the VFILE table with vid.
101133
**
102134
** Omit any file whose name is pOmit.
103135
--- 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 @@
324324
**
325325
** See also: changes, clean, status
326326
*/
327327
void extra_cmd(void){
328328
Blob path;
329
- Blob repo;
330329
Stmt q;
331330
int n;
332331
const char *zIgnoreFlag = find_option("ignore",0,1);
333332
unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0;
334333
int cwdRelative = 0;
@@ -353,13 +352,10 @@
353352
"SELECT x FROM sfile"
354353
" WHERE x NOT IN (%s)"
355354
" ORDER BY 1",
356355
fossil_all_reserved_names()
357356
);
358
- if( file_tree_name(g.zRepositoryName, &repo, 0) ){
359
- db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
360
- }
361357
db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)");
362358
blob_zero(&rewrittenPathname);
363359
while( db_step(&q)==SQLITE_ROW ){
364360
zDisplayName = zPathname = db_column_text(&q, 0);
365361
if( cwdRelative ) {
@@ -1031,10 +1027,11 @@
10311027
** --message-file|-M FILE read the commit comment from given file
10321028
** --nosign do not attempt to sign this commit with gpg
10331029
** --private do not sync changes and their descendants
10341030
** --tag TAG-NAME assign given tag TAG-NAME to the checkin
10351031
** --conflict allow unresolved merge conflicts
1032
+** --binary-ok do not warn about committing binary files
10361033
**
10371034
** See also: branch, changes, checkout, extra, sync
10381035
*/
10391036
void commit_cmd(void){
10401037
int hasChanges; /* True if unsaved changes exist */
@@ -1049,10 +1046,11 @@
10491046
int isAMerge = 0; /* True if checking in a merge */
10501047
int forceFlag = 0; /* Force a fork */
10511048
int forceDelta = 0; /* Force a delta-manifest */
10521049
int forceBaseline = 0; /* Force a baseline-manifest */
10531050
int allowConflict = 0; /* Allow unresolve merge conflicts */
1051
+ int binaryOk = 0; /* The --binary-ok flag */
10541052
char *zManifestFile; /* Name of the manifest file */
10551053
int useCksum; /* True if checksums should be computed and verified */
10561054
int outputManifest; /* True to output "manifest" and "manifest.uuid" */
10571055
int testRun; /* True for a test run. Debugging only */
10581056
const char *zBranch; /* Create a new branch with this name */
@@ -1086,10 +1084,11 @@
10861084
zComment = find_option("comment","m",1);
10871085
forceFlag = find_option("force", "f", 0)!=0;
10881086
zBranch = find_option("branch","b",1);
10891087
zColor = find_option("bgcolor",0,1);
10901088
zBrClr = find_option("branchcolor",0,1);
1089
+ binaryOk = find_option("binary-ok",0,0)!=0;
10911090
while( (zTag = find_option("tag",0,1))!=0 ){
10921091
if( zTag[0]==0 ) continue;
10931092
azTag = fossil_realloc((void *)azTag, sizeof(char*)*(nTag+2));
10941093
azTag[nTag++] = zTag;
10951094
azTag[nTag] = 0;
@@ -1295,11 +1294,11 @@
12951294
id = db_column_int(&q, 0);
12961295
zFullname = db_column_text(&q, 1);
12971296
rid = db_column_int(&q, 2);
12981297
crnlOk = db_column_int(&q, 3);
12991298
chnged = db_column_int(&q, 4);
1300
- binOk = db_column_int(&q, 5);
1299
+ binOk = binaryOk || db_column_int(&q, 5);
13011300
13021301
blob_zero(&content);
13031302
if( file_wd_islink(zFullname) ){
13041303
/* Instead of file content, put link destination path */
13051304
blob_read_link(&content, zFullname);
13061305
--- 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 @@
324324
**
325325
** See also: changes, clean, status
326326
*/
327327
void extra_cmd(void){
328328
Blob path;
329
- Blob repo;
330329
Stmt q;
331330
int n;
332331
const char *zIgnoreFlag = find_option("ignore",0,1);
333332
unsigned scanFlags = find_option("dotfiles",0,0)!=0 ? SCAN_ALL : 0;
334333
int cwdRelative = 0;
@@ -353,13 +352,10 @@
353352
"SELECT x FROM sfile"
354353
" WHERE x NOT IN (%s)"
355354
" ORDER BY 1",
356355
fossil_all_reserved_names()
357356
);
358
- if( file_tree_name(g.zRepositoryName, &repo, 0) ){
359
- db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
360
- }
361357
db_multi_exec("DELETE FROM sfile WHERE x IN (SELECT pathname FROM vfile)");
362358
blob_zero(&rewrittenPathname);
363359
while( db_step(&q)==SQLITE_ROW ){
364360
zDisplayName = zPathname = db_column_text(&q, 0);
365361
if( cwdRelative ) {
@@ -1031,10 +1027,11 @@
10311027
** --message-file|-M FILE read the commit comment from given file
10321028
** --nosign do not attempt to sign this commit with gpg
10331029
** --private do not sync changes and their descendants
10341030
** --tag TAG-NAME assign given tag TAG-NAME to the checkin
10351031
** --conflict allow unresolved merge conflicts
1032
+** --binary-ok do not warn about committing binary files
10361033
**
10371034
** See also: branch, changes, checkout, extra, sync
10381035
*/
10391036
void commit_cmd(void){
10401037
int hasChanges; /* True if unsaved changes exist */
@@ -1049,10 +1046,11 @@
10491046
int isAMerge = 0; /* True if checking in a merge */
10501047
int forceFlag = 0; /* Force a fork */
10511048
int forceDelta = 0; /* Force a delta-manifest */
10521049
int forceBaseline = 0; /* Force a baseline-manifest */
10531050
int allowConflict = 0; /* Allow unresolve merge conflicts */
1051
+ int binaryOk = 0; /* The --binary-ok flag */
10541052
char *zManifestFile; /* Name of the manifest file */
10551053
int useCksum; /* True if checksums should be computed and verified */
10561054
int outputManifest; /* True to output "manifest" and "manifest.uuid" */
10571055
int testRun; /* True for a test run. Debugging only */
10581056
const char *zBranch; /* Create a new branch with this name */
@@ -1086,10 +1084,11 @@
10861084
zComment = find_option("comment","m",1);
10871085
forceFlag = find_option("force", "f", 0)!=0;
10881086
zBranch = find_option("branch","b",1);
10891087
zColor = find_option("bgcolor",0,1);
10901088
zBrClr = find_option("branchcolor",0,1);
1089
+ binaryOk = find_option("binary-ok",0,0)!=0;
10911090
while( (zTag = find_option("tag",0,1))!=0 ){
10921091
if( zTag[0]==0 ) continue;
10931092
azTag = fossil_realloc((void *)azTag, sizeof(char*)*(nTag+2));
10941093
azTag[nTag++] = zTag;
10951094
azTag[nTag] = 0;
@@ -1295,11 +1294,11 @@
12951294
id = db_column_int(&q, 0);
12961295
zFullname = db_column_text(&q, 1);
12971296
rid = db_column_int(&q, 2);
12981297
crnlOk = db_column_int(&q, 3);
12991298
chnged = db_column_int(&q, 4);
1300
- binOk = db_column_int(&q, 5);
1299
+ binOk = binaryOk || db_column_int(&q, 5);
13011300
13021301
blob_zero(&content);
13031302
if( file_wd_islink(zFullname) ){
13041303
/* Instead of file content, put link destination path */
13051304
blob_read_link(&content, zFullname);
13061305
--- 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
--- src/http_transport.c
+++ src/http_transport.c
@@ -110,10 +110,12 @@
110110
*/
111111
const char *zSsh; /* The base SSH command */
112112
Blob zCmd; /* The SSH command */
113113
char *zHost; /* The host name to contact */
114114
char *zIn; /* An input line received back from remote */
115
+ unsigned iRandom;
116
+ char zProbe[30];
115117
116118
zSsh = db_get("ssh-command", zDefaultSshCmd);
117119
blob_init(&zCmd, zSsh, -1);
118120
if( g.urlPort!=g.urlDfltPort ){
119121
#ifdef __MINGW32__
@@ -155,18 +157,23 @@
155157
if( sshPid==0 ){
156158
fossil_fatal("cannot start ssh tunnel using [%b]", &zCmd);
157159
}
158160
blob_reset(&zCmd);
159161
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
161163
** connection is up and working.
162164
*/
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);
164172
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 ){
168175
pclose2(sshIn, sshOut, sshPid);
169176
fossil_fatal("ssh connection failed: [%s]", zIn);
170177
}
171178
fossil_free(zIn);
172179
}
173180
--- 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 @@
341341
if(g.db){
342342
db_close(0);
343343
}
344344
}
345345
346
-#if defined(_WIN32) && !defined(__MINGW32__)
346
+#if defined(_WIN32)
347347
/*
348348
** Parse the command-line arguments passed to windows. We do this
349349
** ourselves to work around bugs in the command-line parsing of MinGW.
350350
** It is possible (in theory) to only use this routine when compiling
351351
** with MinGW and to use built-in command-line parsing for MSVC and
@@ -454,11 +454,11 @@
454454
}
455455
argv[argc] = NULL;
456456
*argcPtr = argc;
457457
*((WCHAR ***)argvPtr) = argv;
458458
}
459
-#endif /* defined(_WIN32) && !defined(__MINGW32__) */
459
+#endif /* defined(_WIN32) */
460460
461461
462462
/*
463463
** Convert all arguments from mbcs (or unicode) to UTF-8. Then
464464
** search g.argv for arguments "--args FILENAME". If found, then
@@ -478,17 +478,17 @@
478478
int n; /* Number of bytes in one line */
479479
char *z; /* General use string pointer */
480480
char **newArgv; /* New expanded g.argv under construction */
481481
char const * zFileName; /* input file name */
482482
FILE * zInFile; /* input FILE */
483
-#if defined(_WIN32) && !defined(__MINGW32__)
483
+#if defined(_WIN32)
484484
WCHAR buf[MAX_PATH];
485485
#endif
486486
487487
g.argc = argc;
488488
g.argv = argv;
489
-#if defined(_WIN32) && !defined(__MINGW32__)
489
+#if defined(_WIN32)
490490
parse_windows_command_line(&g.argc, &g.argv);
491491
GetModuleFileNameW(NULL, buf, MAX_PATH);
492492
g.nameOfExe = fossil_unicode_to_utf8(buf);
493493
for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]);
494494
#else
495495
--- 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 @@
341341
if(g.db){
342342
db_close(0);
343343
}
344344
}
345345
346
-#if defined(_WIN32) && !defined(__MINGW32__)
346
+#if defined(_WIN32)
347347
/*
348348
** Parse the command-line arguments passed to windows. We do this
349349
** ourselves to work around bugs in the command-line parsing of MinGW.
350350
** It is possible (in theory) to only use this routine when compiling
351351
** with MinGW and to use built-in command-line parsing for MSVC and
@@ -454,11 +454,11 @@
454454
}
455455
argv[argc] = NULL;
456456
*argcPtr = argc;
457457
*((WCHAR ***)argvPtr) = argv;
458458
}
459
-#endif /* defined(_WIN32) && !defined(__MINGW32__) */
459
+#endif /* defined(_WIN32) */
460460
461461
462462
/*
463463
** Convert all arguments from mbcs (or unicode) to UTF-8. Then
464464
** search g.argv for arguments "--args FILENAME". If found, then
@@ -478,17 +478,17 @@
478478
int n; /* Number of bytes in one line */
479479
char *z; /* General use string pointer */
480480
char **newArgv; /* New expanded g.argv under construction */
481481
char const * zFileName; /* input file name */
482482
FILE * zInFile; /* input FILE */
483
-#if defined(_WIN32) && !defined(__MINGW32__)
483
+#if defined(_WIN32)
484484
WCHAR buf[MAX_PATH];
485485
#endif
486486
487487
g.argc = argc;
488488
g.argv = argv;
489
-#if defined(_WIN32) && !defined(__MINGW32__)
489
+#if defined(_WIN32)
490490
parse_windows_command_line(&g.argc, &g.argv);
491491
GetModuleFileNameW(NULL, buf, MAX_PATH);
492492
g.nameOfExe = fossil_unicode_to_utf8(buf);
493493
for(i=0; i<g.argc; i++) g.argv[i] = fossil_unicode_to_utf8(g.argv[i]);
494494
#else
495495
--- 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 @@
4444
@ font-size: 2em;
4545
@ font-weight: bold;
4646
@ background-color: #707070;
4747
@ color: #ffffff;
4848
@ min-width: 200px;
49
+@ white-space: nowrap;
4950
@ }
5051
@
5152
@ /* The page title centered at the top of each page */
5253
@ div.title {
5354
@ display: table-cell;
@@ -67,10 +68,11 @@
6768
@ vertical-align: bottom;
6869
@ color: #404040;
6970
@ font-size: 0.8em;
7071
@ font-weight: bold;
7172
@ min-width: 200px;
73
+@ white-space: nowrap;
7274
@ }
7375
@
7476
@ /* The header across the top of the page */
7577
@ div.header {
7678
@ display: table;
@@ -166,17 +168,17 @@
166168
@ media="screen">
167169
@ </head>
168170
@ <body>
169171
@ <div class="header">
170172
@ <div class="title"><small>$<project_name></small><br />$<title></div>
171
-@ <div class="status"><nobr><th1>
173
+@ <div class="status"><th1>
172174
@ if {[info exists login]} {
173175
@ puts "Logged in as $login"
174176
@ } else {
175177
@ puts "Not logged in"
176178
@ }
177
-@ </th1></nobr></div>
179
+@ </th1></div>
178180
@ </div>
179181
@ <div class="mainmenu">
180182
@ <th1>
181183
@ html "<a href=''$home$index_page''>Home</a>\n"
182184
@ if {[anycap jor]} {
@@ -235,10 +237,11 @@
235237
@ text-align: center;
236238
@ vertical-align: bottom;
237239
@ font-weight: bold;
238240
@ font-size: 2.5em;
239241
@ color: #a09048;
242
+@ white-space: nowrap;
240243
@ }
241244
@
242245
@ /* The page title centered at the top of each page */
243246
@ div.title {
244247
@ display: table-cell;
@@ -258,10 +261,11 @@
258261
@ vertical-align: bottom;
259262
@ color: #a09048;
260263
@ padding: 5px 5px 0 0;
261264
@ font-size: 0.8em;
262265
@ font-weight: bold;
266
+@ white-space: nowrap;
263267
@ }
264268
@
265269
@ /* The header across the top of the page */
266270
@ div.header {
267271
@ display: table;
@@ -370,18 +374,18 @@
370374
@ </head>
371375
@ <body>
372376
@ <div class="header">
373377
@ <div class="title">$<title></div>
374378
@ <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>
377381
@ if {[info exists login]} {
378382
@ puts "Logged in as $login"
379383
@ } else {
380384
@ puts "Not logged in"
381385
@ }
382
-@ </th1></nobr></div>
386
+@ </th1></div>
383387
@ </div>
384388
@ <div class="mainmenu">
385389
@ <th1>
386390
@ html "<a href=''$home$index_page''>Home</a>\n"
387391
@ if {[anycap jor]} {
@@ -448,10 +452,11 @@
448452
@ display: table-cell;
449453
@ text-align: left;
450454
@ vertical-align: bottom;
451455
@ font-weight: bold;
452456
@ color: #333;
457
+@ white-space: nowrap;
453458
@ }
454459
@
455460
@ /* The page title centered at the top of each page */
456461
@ div.title {
457462
@ display: table-cell;
@@ -471,10 +476,11 @@
471476
@ vertical-align: bottom;
472477
@ padding-bottom: 5px;
473478
@ color: #333;
474479
@ font-size: 0.8em;
475480
@ font-weight: bold;
481
+@ white-space: nowrap;
476482
@ }
477483
@
478484
@ /* The header across the top of the page */
479485
@ div.header {
480486
@ margin:10px 0px 10px 0px;
@@ -606,20 +612,20 @@
606612
@ </head>
607613
@ <body>
608614
@ <div class="header">
609615
@ <div class="logo">
610616
@ <img src="$home/logo" alt="logo">
611
-@ <br /><nobr>$<project_name></nobr>
617
+@ <br />$<project_name>
612618
@ </div>
613619
@ <div class="title">$<title></div>
614
-@ <div class="status"><nobr><th1>
620
+@ <div class="status"><th1>
615621
@ if {[info exists login]} {
616622
@ puts "Logged in as $login"
617623
@ } else {
618624
@ puts "Not logged in"
619625
@ }
620
-@ </th1></nobr></div>
626
+@ </th1></div>
621627
@ </div>
622628
@ <div class="mainmenu">
623629
@ <th1>
624630
@ html "<a href=''$home$index_page''>Home</a>\n"
625631
@ if {[anycap jor]} {
@@ -682,10 +688,11 @@
682688
@ div.logo {
683689
@ display: table-cell;
684690
@ text-align: right;
685691
@ vertical-align: bottom;
686692
@ font-weight: normal;
693
+@ white-space: nowrap;
687694
@ }
688695
@
689696
@ /* Widths */
690697
@ div.header, div.mainmenu, div.submenu, div.content, div.footer {
691698
@ max-width: 900px;
@@ -714,10 +721,11 @@
714721
@ display: table-cell;
715722
@ text-align: right;
716723
@ vertical-align: bottom;
717724
@ color: #333;
718725
@ margin-right: -20px;
726
+@ white-space: nowrap;
719727
@ }
720728
@
721729
@ /* The main menu bar that appears at the top of the page beneath
722730
@ ** the header */
723731
@ div.mainmenu {
@@ -869,20 +877,20 @@
869877
@ </head>
870878
@ <body>
871879
@ <div class="header">
872880
@ <div class="logo">
873881
@ <img src="$home/logo" alt="logo">
874
-@ <br /><nobr>$<project_name></nobr>
882
+@ <br />$<project_name>
875883
@ </div>
876884
@ <div class="title">$<title></div>
877
-@ <div class="status"><nobr><th1>
885
+@ <div class="status"><th1>
878886
@ if {[info exists login]} {
879887
@ puts "Logged in as $login"
880888
@ } else {
881889
@ puts "Not logged in"
882890
@ }
883
-@ </th1></nobr></div>
891
+@ </th1></div>
884892
@ </div>
885893
@ <div class="mainmenu">
886894
@ <th1>
887895
@ html "<a href=''$home$index_page''>Home</a>\n"
888896
@ if {[anycap jor]} {
@@ -955,10 +963,11 @@
955963
@ text-align: center;
956964
@ vertical-align: bottom;
957965
@ font-weight: bold;
958966
@ color: #558195;
959967
@ min-width: 200px;
968
+@ white-space: nowrap;
960969
@ }
961970
@
962971
@ /* The page title centered at the top of each page */
963972
@ div.title {
964973
@ display: table-cell;
@@ -1159,46 +1168,46 @@
11591168
@ <a href="$logourl">
11601169
@ <img src="$baseurl/logo" border="0" alt="$project_name">
11611170
@ </a>
11621171
@ </div>
11631172
@ <div class="title"><small>$<project_name></small><br />$<title></div>
1164
-@ <div class="status"><nobr><th1>
1173
+@ <div class="status"><th1>
11651174
@ if {[info exists login]} {
11661175
@ puts "Logged in as $login"
11671176
@ } else {
11681177
@ puts "Not logged in"
11691178
@ }
1170
-@ </th1></nobr></div>
1179
+@ </th1></div>
11711180
@ </div>
11721181
@ <div class="mainmenu">
11731182
@ <th1>
11741183
@ html "<a href=''$home$index_page''>Home</a>\n"
11751184
@ if {[anycap jor]} {
1176
-@ html "<a href=''$home/timeline''>Timeline</a>\n"
1185
+@ html "<a href=''timeline''>Timeline</a>\n"
11771186
@ }
11781187
@ if {[hascap oh]} {
1179
-@ html "<a href=''$home/dir?ci=tip''>Files</a>\n"
1188
+@ html "<a href=''dir?ci=tip''>Files</a>\n"
11801189
@ }
11811190
@ 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"
11841193
@ }
11851194
@ if {[hascap r]} {
1186
-@ html "<a href=''$home/reportlist''>Tickets</a>\n"
1195
+@ html "<a href=''reportlist''>Tickets</a>\n"
11871196
@ }
11881197
@ if {[hascap j]} {
1189
-@ html "<a href=''$home/wiki''>Wiki</a>\n"
1198
+@ html "<a href=''wiki''>Wiki</a>\n"
11901199
@ }
11911200
@ if {[hascap s]} {
1192
-@ html "<a href=''$home/setup''>Admin</a>\n"
1201
+@ html "<a href=''setup''>Admin</a>\n"
11931202
@ } elseif {[hascap a]} {
1194
-@ html "<a href=''$home/setup_ulist''>Users</a>\n"
1203
+@ html "<a href=''setup_ulist''>Users</a>\n"
11951204
@ }
11961205
@ if {[info exists login]} {
1197
-@ html "<a href=''$home/login''>Logout</a>\n"
1206
+@ html "<a href=''login''>Logout</a>\n"
11981207
@ } else {
1199
-@ html "<a href=''$home/login''>Login</a>\n"
1208
+@ html "<a href=''login''>Login</a>\n"
12001209
@ }
12011210
@ </th1></div>
12021211
@ ');
12031212
@ REPLACE INTO config(name,mtime,value)
12041213
@ VALUES('footer',now(),'<div class="footer">
12051214
--- 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 @@
4444
@ font-size: 2em;
4545
@ font-weight: bold;
4646
@ background-color: #707070;
4747
@ color: #ffffff;
4848
@ min-width: 200px;
49
+@ white-space: nowrap;
4950
@ }
5051
@
5152
@ /* The page title centered at the top of each page */
5253
@ div.title {
5354
@ display: table-cell;
@@ -67,10 +68,11 @@
6768
@ vertical-align: bottom;
6869
@ color: #404040;
6970
@ font-size: 0.8em;
7071
@ font-weight: bold;
7172
@ min-width: 200px;
73
+@ white-space: nowrap;
7274
@ }
7375
@
7476
@ /* The header across the top of the page */
7577
@ div.header {
7678
@ display: table;
@@ -166,17 +168,17 @@
166168
@ media="screen">
167169
@ </head>
168170
@ <body>
169171
@ <div class="header">
170172
@ <div class="title"><small>$<project_name></small><br />$<title></div>
171
-@ <div class="status"><nobr><th1>
173
+@ <div class="status"><th1>
172174
@ if {[info exists login]} {
173175
@ puts "Logged in as $login"
174176
@ } else {
175177
@ puts "Not logged in"
176178
@ }
177
-@ </th1></nobr></div>
179
+@ </th1></div>
178180
@ </div>
179181
@ <div class="mainmenu">
180182
@ <th1>
181183
@ html "<a href=''$home$index_page''>Home</a>\n"
182184
@ if {[anycap jor]} {
@@ -235,10 +237,11 @@
235237
@ text-align: center;
236238
@ vertical-align: bottom;
237239
@ font-weight: bold;
238240
@ font-size: 2.5em;
239241
@ color: #a09048;
242
+@ white-space: nowrap;
240243
@ }
241244
@
242245
@ /* The page title centered at the top of each page */
243246
@ div.title {
244247
@ display: table-cell;
@@ -258,10 +261,11 @@
258261
@ vertical-align: bottom;
259262
@ color: #a09048;
260263
@ padding: 5px 5px 0 0;
261264
@ font-size: 0.8em;
262265
@ font-weight: bold;
266
+@ white-space: nowrap;
263267
@ }
264268
@
265269
@ /* The header across the top of the page */
266270
@ div.header {
267271
@ display: table;
@@ -370,18 +374,18 @@
370374
@ </head>
371375
@ <body>
372376
@ <div class="header">
373377
@ <div class="title">$<title></div>
374378
@ <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>
377381
@ if {[info exists login]} {
378382
@ puts "Logged in as $login"
379383
@ } else {
380384
@ puts "Not logged in"
381385
@ }
382
-@ </th1></nobr></div>
386
+@ </th1></div>
383387
@ </div>
384388
@ <div class="mainmenu">
385389
@ <th1>
386390
@ html "<a href=''$home$index_page''>Home</a>\n"
387391
@ if {[anycap jor]} {
@@ -448,10 +452,11 @@
448452
@ display: table-cell;
449453
@ text-align: left;
450454
@ vertical-align: bottom;
451455
@ font-weight: bold;
452456
@ color: #333;
457
+@ white-space: nowrap;
453458
@ }
454459
@
455460
@ /* The page title centered at the top of each page */
456461
@ div.title {
457462
@ display: table-cell;
@@ -471,10 +476,11 @@
471476
@ vertical-align: bottom;
472477
@ padding-bottom: 5px;
473478
@ color: #333;
474479
@ font-size: 0.8em;
475480
@ font-weight: bold;
481
+@ white-space: nowrap;
476482
@ }
477483
@
478484
@ /* The header across the top of the page */
479485
@ div.header {
480486
@ margin:10px 0px 10px 0px;
@@ -606,20 +612,20 @@
606612
@ </head>
607613
@ <body>
608614
@ <div class="header">
609615
@ <div class="logo">
610616
@ <img src="$home/logo" alt="logo">
611
-@ <br /><nobr>$<project_name></nobr>
617
+@ <br />$<project_name>
612618
@ </div>
613619
@ <div class="title">$<title></div>
614
-@ <div class="status"><nobr><th1>
620
+@ <div class="status"><th1>
615621
@ if {[info exists login]} {
616622
@ puts "Logged in as $login"
617623
@ } else {
618624
@ puts "Not logged in"
619625
@ }
620
-@ </th1></nobr></div>
626
+@ </th1></div>
621627
@ </div>
622628
@ <div class="mainmenu">
623629
@ <th1>
624630
@ html "<a href=''$home$index_page''>Home</a>\n"
625631
@ if {[anycap jor]} {
@@ -682,10 +688,11 @@
682688
@ div.logo {
683689
@ display: table-cell;
684690
@ text-align: right;
685691
@ vertical-align: bottom;
686692
@ font-weight: normal;
693
+@ white-space: nowrap;
687694
@ }
688695
@
689696
@ /* Widths */
690697
@ div.header, div.mainmenu, div.submenu, div.content, div.footer {
691698
@ max-width: 900px;
@@ -714,10 +721,11 @@
714721
@ display: table-cell;
715722
@ text-align: right;
716723
@ vertical-align: bottom;
717724
@ color: #333;
718725
@ margin-right: -20px;
726
+@ white-space: nowrap;
719727
@ }
720728
@
721729
@ /* The main menu bar that appears at the top of the page beneath
722730
@ ** the header */
723731
@ div.mainmenu {
@@ -869,20 +877,20 @@
869877
@ </head>
870878
@ <body>
871879
@ <div class="header">
872880
@ <div class="logo">
873881
@ <img src="$home/logo" alt="logo">
874
-@ <br /><nobr>$<project_name></nobr>
882
+@ <br />$<project_name>
875883
@ </div>
876884
@ <div class="title">$<title></div>
877
-@ <div class="status"><nobr><th1>
885
+@ <div class="status"><th1>
878886
@ if {[info exists login]} {
879887
@ puts "Logged in as $login"
880888
@ } else {
881889
@ puts "Not logged in"
882890
@ }
883
-@ </th1></nobr></div>
891
+@ </th1></div>
884892
@ </div>
885893
@ <div class="mainmenu">
886894
@ <th1>
887895
@ html "<a href=''$home$index_page''>Home</a>\n"
888896
@ if {[anycap jor]} {
@@ -955,10 +963,11 @@
955963
@ text-align: center;
956964
@ vertical-align: bottom;
957965
@ font-weight: bold;
958966
@ color: #558195;
959967
@ min-width: 200px;
968
+@ white-space: nowrap;
960969
@ }
961970
@
962971
@ /* The page title centered at the top of each page */
963972
@ div.title {
964973
@ display: table-cell;
@@ -1159,46 +1168,46 @@
11591168
@ <a href="$logourl">
11601169
@ <img src="$baseurl/logo" border="0" alt="$project_name">
11611170
@ </a>
11621171
@ </div>
11631172
@ <div class="title"><small>$<project_name></small><br />$<title></div>
1164
-@ <div class="status"><nobr><th1>
1173
+@ <div class="status"><th1>
11651174
@ if {[info exists login]} {
11661175
@ puts "Logged in as $login"
11671176
@ } else {
11681177
@ puts "Not logged in"
11691178
@ }
1170
-@ </th1></nobr></div>
1179
+@ </th1></div>
11711180
@ </div>
11721181
@ <div class="mainmenu">
11731182
@ <th1>
11741183
@ html "<a href=''$home$index_page''>Home</a>\n"
11751184
@ if {[anycap jor]} {
1176
-@ html "<a href=''$home/timeline''>Timeline</a>\n"
1185
+@ html "<a href=''timeline''>Timeline</a>\n"
11771186
@ }
11781187
@ if {[hascap oh]} {
1179
-@ html "<a href=''$home/dir?ci=tip''>Files</a>\n"
1188
+@ html "<a href=''dir?ci=tip''>Files</a>\n"
11801189
@ }
11811190
@ 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"
11841193
@ }
11851194
@ if {[hascap r]} {
1186
-@ html "<a href=''$home/reportlist''>Tickets</a>\n"
1195
+@ html "<a href=''reportlist''>Tickets</a>\n"
11871196
@ }
11881197
@ if {[hascap j]} {
1189
-@ html "<a href=''$home/wiki''>Wiki</a>\n"
1198
+@ html "<a href=''wiki''>Wiki</a>\n"
11901199
@ }
11911200
@ if {[hascap s]} {
1192
-@ html "<a href=''$home/setup''>Admin</a>\n"
1201
+@ html "<a href=''setup''>Admin</a>\n"
11931202
@ } elseif {[hascap a]} {
1194
-@ html "<a href=''$home/setup_ulist''>Users</a>\n"
1203
+@ html "<a href=''setup_ulist''>Users</a>\n"
11951204
@ }
11961205
@ if {[info exists login]} {
1197
-@ html "<a href=''$home/login''>Logout</a>\n"
1206
+@ html "<a href=''login''>Logout</a>\n"
11981207
@ } else {
1199
-@ html "<a href=''$home/login''>Login</a>\n"
1208
+@ html "<a href=''login''>Login</a>\n"
12001209
@ }
12011210
@ </th1></div>
12021211
@ ');
12031212
@ REPLACE INTO config(name,mtime,value)
12041213
@ VALUES('footer',now(),'<div class="footer">
12051214
--- 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 @@
673673
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
674674
** [sqlite_version()] and [sqlite_source_id()].
675675
*/
676676
#define SQLITE_VERSION "3.7.15"
677677
#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"
679679
680680
/*
681681
** CAPI3REF: Run-Time Library Version Numbers
682682
** KEYWORDS: sqlite3_version, sqlite3_sourceid
683683
**
@@ -1038,10 +1038,11 @@
10381038
#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
10391039
#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
10401040
#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
10411041
#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
10421042
#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
1043
+#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8))
10431044
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
10441045
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
10451046
#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
10461047
#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
10471048
#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
@@ -11008,10 +11009,11 @@
1100811009
int addrInTop; /* Top of the IN loop */
1100911010
} *aInLoop; /* Information about each nested IN operator */
1101011011
} in; /* Used when plan.wsFlags&WHERE_IN_ABLE */
1101111012
Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */
1101211013
} u;
11014
+ double rOptCost; /* "Optimal" cost for this level */
1101311015
1101411016
/* The following field is really not part of the current level. But
1101511017
** we need a place to cache virtual table index information for each
1101611018
** virtual table in the FROM clause and the WhereLevel structure is
1101711019
** a convenient place since there is one WhereLevel for each FROM clause
@@ -13716,10 +13718,11 @@
1371613718
int nByte = 0; /* Used to accumulate return value */
1371713719
1371813720
db->pnBytesFreed = &nByte;
1371913721
for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
1372013722
sqlite3VdbeClearObject(db, pVdbe);
13723
+ sqlite3DbFree(db, pVdbe);
1372113724
}
1372213725
db->pnBytesFreed = 0;
1372313726
1372413727
*pHighwater = 0;
1372513728
*pCurrent = nByte;
@@ -28219,12 +28222,17 @@
2821928222
int dirSync /* If true, fsync() directory after deleting file */
2822028223
){
2822128224
int rc = SQLITE_OK;
2822228225
UNUSED_PARAMETER(NotUsed);
2822328226
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;
2822628234
}
2822728235
#ifndef SQLITE_DISABLE_DIRSYNC
2822828236
if( (dirSync & 1)!=0 ){
2822928237
int fd;
2823028238
rc = osOpenDirectory(zPath, &fd);
@@ -40388,10 +40396,11 @@
4038840396
4038940397
rc = pagerPagecount(pPager, &nPage);
4039040398
if( rc ) return rc;
4039140399
if( nPage==0 ){
4039240400
rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
40401
+ if( rc==SQLITE_IOERR_DELETE_NOENT ) rc = SQLITE_OK;
4039340402
isWal = 0;
4039440403
}else{
4039540404
rc = sqlite3OsAccess(
4039640405
pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal
4039740406
);
@@ -77655,12 +77664,14 @@
7765577664
*/
7765677665
assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
7765777666
ExprSetIrreducible(pExpr);
7765877667
pExpr->iAgg = (i16)i;
7765977668
pExpr->pAggInfo = pAggInfo;
77669
+ return WRC_Prune;
77670
+ }else{
77671
+ return WRC_Continue;
7766077672
}
77661
- return WRC_Prune;
7766277673
}
7766377674
}
7766477675
return WRC_Continue;
7766577676
}
7766677677
static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
@@ -77668,13 +77679,14 @@
7766877679
UNUSED_PARAMETER(pSelect);
7766977680
return WRC_Continue;
7767077681
}
7767177682
7767277683
/*
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.
7767677688
**
7767777689
** This routine should only be called after the expression has been
7767877690
** analyzed by sqlite3ResolveExprNames().
7767977691
*/
7768077692
SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
@@ -85700,10 +85712,59 @@
8570085712
sqlite3_result_double(context, rVal);
8570185713
break;
8570285714
}
8570385715
}
8570485716
}
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
+}
8570585766
8570685767
/*
8570785768
** Implementation of the substr() function.
8570885769
**
8570985770
** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
@@ -87069,10 +87130,11 @@
8706987130
FUNCTION(max, -1, 1, 1, minmaxFunc ),
8707087131
FUNCTION(max, 0, 1, 1, 0 ),
8707187132
AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
8707287133
FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
8707387134
FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
87135
+ FUNCTION(instr, 2, 0, 0, instrFunc ),
8707487136
FUNCTION(substr, 2, 0, 0, substrFunc ),
8707587137
FUNCTION(substr, 3, 0, 0, substrFunc ),
8707687138
FUNCTION(abs, 1, 0, 0, absFunc ),
8707787139
#ifndef SQLITE_OMIT_FLOATING_POINT
8707887140
FUNCTION(round, 1, 0, 0, roundFunc ),
@@ -107298,19 +107360,32 @@
107298107360
|| sWBI.cost.plan.u.pIdx==sWBI.pSrc->pIndex );
107299107361
107300107362
if( isOptimal && (sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){
107301107363
notIndexed |= m;
107302107364
}
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
+ }
107303107378
107304107379
/* Conditions under which this table becomes the best so far:
107305107380
**
107306107381
** (1) The table must not depend on other tables that have not
107307107382
** yet run. (In other words, it must not depend on tables
107308107383
** in inner loops.)
107309107384
**
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.)
107312107387
**
107313107388
** (3) All tables have an INDEXED BY clause or this table lacks an
107314107389
** INDEXED BY clause or this table uses the specific
107315107390
** index specified by its INDEXED BY clause. This rule ensures
107316107391
** that a best-so-far is always selected even if an impossible
@@ -107321,13 +107396,10 @@
107321107396
**
107322107397
** (4) The plan cost must be lower than prior plans, where "cost"
107323107398
** is defined by the compareCost() function above.
107324107399
*/
107325107400
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)
107329107401
&& (nUnconstrained==0 || sWBI.pSrc->pIndex==0 /* (3) */
107330107402
|| NEVER((sWBI.cost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
107331107403
&& (bestJ<0 || compareCost(&sWBI.cost, &bestPlan)) /* (4) */
107332107404
){
107333107405
WHERETRACE((" === table %d (%s) is best so far\n"
107334107406
--- 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 @@
107107
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108108
** [sqlite_version()] and [sqlite_source_id()].
109109
*/
110110
#define SQLITE_VERSION "3.7.15"
111111
#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"
113113
114114
/*
115115
** CAPI3REF: Run-Time Library Version Numbers
116116
** KEYWORDS: sqlite3_version, sqlite3_sourceid
117117
**
@@ -472,10 +472,11 @@
472472
#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
473473
#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
474474
#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
475475
#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
476476
#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
477
+#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23<<8))
477478
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
478479
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
479480
#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
480481
#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2<<8))
481482
#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3<<8))
482483
--- 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 @@
366366
@ </div>
367367
@ <div class="mainmenu">
368368
@ <th1>
369369
@ html "<a href='$home$index_page'>Home</a>\n"
370370
@ if {[anycap jor]} {
371
-@ html "<a href='$home/timeline'>Timeline</a>\n"
371
+@ html "<a href='timeline'>Timeline</a>\n"
372372
@ }
373373
@ if {[hascap oh]} {
374
-@ html "<a href='$home/dir?ci=tip'>Files</a>\n"
374
+@ html "<a href='dir?ci=tip'>Files</a>\n"
375375
@ }
376376
@ 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"
379379
@ }
380380
@ if {[hascap r]} {
381
-@ html "<a href='$home/reportlist'>Tickets</a>\n"
381
+@ html "<a href='reportlist'>Tickets</a>\n"
382382
@ }
383383
@ if {[hascap j]} {
384
-@ html "<a href='$home/wiki'>Wiki</a>\n"
384
+@ html "<a href='wiki'>Wiki</a>\n"
385385
@ }
386386
@ if {[hascap s]} {
387
-@ html "<a href='$home/setup'>Admin</a>\n"
387
+@ html "<a href='setup'>Admin</a>\n"
388388
@ } elseif {[hascap a]} {
389
-@ html "<a href='$home/setup_ulist'>Users</a>\n"
389
+@ html "<a href='setup_ulist'>Users</a>\n"
390390
@ }
391391
@ if {[info exists login]} {
392
-@ html "<a href='$home/login'>Logout</a>\n"
392
+@ html "<a href='login'>Logout</a>\n"
393393
@ } else {
394
-@ html "<a href='$home/login'>Login</a>\n"
394
+@ html "<a href='login'>Login</a>\n"
395395
@ }
396396
@ </th1></div>
397397
;
398398
399399
/*
@@ -428,10 +428,11 @@
428428
@ text-align: center;
429429
@ vertical-align: bottom;
430430
@ font-weight: bold;
431431
@ color: #558195;
432432
@ min-width: 200px;
433
+@ white-space: nowrap;
433434
@ }
434435
@
435436
@ /* The page title centered at the top of each page */
436437
@ div.title {
437438
@ display: table-cell;
438439
--- 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 @@
366366
@ </div>
367367
@ <div class="mainmenu">
368368
@ <th1>
369369
@ html "<a href='$home$index_page'>Home</a>\n"
370370
@ if {[anycap jor]} {
371
-@ html "<a href='$home/timeline'>Timeline</a>\n"
371
+@ html "<a href='timeline'>Timeline</a>\n"
372372
@ }
373373
@ if {[hascap oh]} {
374
-@ html "<a href='$home/dir?ci=tip'>Files</a>\n"
374
+@ html "<a href='dir?ci=tip'>Files</a>\n"
375375
@ }
376376
@ 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"
379379
@ }
380380
@ if {[hascap r]} {
381
-@ html "<a href='$home/reportlist'>Tickets</a>\n"
381
+@ html "<a href='reportlist'>Tickets</a>\n"
382382
@ }
383383
@ if {[hascap j]} {
384
-@ html "<a href='$home/wiki'>Wiki</a>\n"
384
+@ html "<a href='wiki'>Wiki</a>\n"
385385
@ }
386386
@ if {[hascap s]} {
387
-@ html "<a href='$home/setup'>Admin</a>\n"
387
+@ html "<a href='setup'>Admin</a>\n"
388388
@ } elseif {[hascap a]} {
389
-@ html "<a href='$home/setup_ulist'>Users</a>\n"
389
+@ html "<a href='setup_ulist'>Users</a>\n"
390390
@ }
391391
@ if {[info exists login]} {
392
-@ html "<a href='$home/login'>Logout</a>\n"
392
+@ html "<a href='login'>Logout</a>\n"
393393
@ } else {
394
-@ html "<a href='$home/login'>Login</a>\n"
394
+@ html "<a href='login'>Login</a>\n"
395395
@ }
396396
@ </th1></div>
397397
;
398398
399399
/*
@@ -428,10 +428,11 @@
428428
@ text-align: center;
429429
@ vertical-align: bottom;
430430
@ font-weight: bold;
431431
@ color: #558195;
432432
@ min-width: 200px;
433
+@ white-space: nowrap;
433434
@ }
434435
@
435436
@ /* The page title centered at the top of each page */
436437
@ div.title {
437438
@ display: table-cell;
438439
--- 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 @@
173173
@ R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P/////////
174174
@ //////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2Cekk
175175
@ ErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrT
176176
@ q/b7/i8fp8PAQA7" />
177177
178
- @ <img class="intLink" title="Add indentation"
178
+ @ <img class="intLink" title="Delete indentation"
179179
@ onclick="formatDoc('outdent');"
180180
@ src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P
181181
@ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMcz
182182
@ sYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" />
183183
184
- @ <img class="intLink" title="Delete indentation"
184
+ @ <img class="intLink" title="Add indentation"
185185
@ onclick="formatDoc('indent');"
186186
@ src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3N
187187
@ Ha7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650
188188
@ B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw==">
189189
190190
--- 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
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -13,14 +13,14 @@
1313
#
1414
1515
#### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers.
1616
# By default, this is an empty string (i.e. use the native compiler).
1717
#
18
-PREFIX =
18
+# PREFIX =
1919
# PREFIX = mingw32-
2020
# PREFIX = i686-pc-mingw32-
21
-# PREFIX = i686-w64-mingw32-
21
+PREFIX = i686-w64-mingw32-
2222
# PREFIX = x86_64-w64-mingw32-
2323
2424
#### The toplevel directory of the source tree. Fossil can be built
2525
# in a directory that is separate from the source tree. Just change
2626
# the following to point from the build directory to the src/ folder.
@@ -42,19 +42,19 @@
4242
#
4343
# FOSSIL_ENABLE_JSON = 1
4444
4545
#### Enable HTTPS support via OpenSSL (links to libssl and libcrypto)
4646
#
47
-# FOSSIL_ENABLE_SSL = 1
47
+FOSSIL_ENABLE_SSL = 1
4848
4949
#### Enable scripting support via Tcl/Tk
5050
#
51
-# FOSSIL_ENABLE_TCL = 1
51
+FOSSIL_ENABLE_TCL = 1
5252
5353
#### Load Tcl using the stubs mechanism
5454
#
55
-# FOSSIL_ENABLE_TCL_STUBS = 1
55
+FOSSIL_ENABLE_TCL_STUBS = 1
5656
5757
#### Use the Tcl source directory instead of the install directory?
5858
# This is useful when Tcl has been compiled statically with MinGW.
5959
#
6060
FOSSIL_TCL_SOURCE = 1
6161
--- 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
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -13,14 +13,14 @@
1313
#
1414
1515
#### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers.
1616
# By default, this is an empty string (i.e. use the native compiler).
1717
#
18
-PREFIX =
18
+# PREFIX =
1919
# PREFIX = mingw32-
2020
# PREFIX = i686-pc-mingw32-
21
-# PREFIX = i686-w64-mingw32-
21
+PREFIX = i686-w64-mingw32-
2222
# PREFIX = x86_64-w64-mingw32-
2323
2424
#### The toplevel directory of the source tree. Fossil can be built
2525
# in a directory that is separate from the source tree. Just change
2626
# the following to point from the build directory to the src/ folder.
@@ -42,19 +42,19 @@
4242
#
4343
# FOSSIL_ENABLE_JSON = 1
4444
4545
#### Enable HTTPS support via OpenSSL (links to libssl and libcrypto)
4646
#
47
-# FOSSIL_ENABLE_SSL = 1
47
+FOSSIL_ENABLE_SSL = 1
4848
4949
#### Enable scripting support via Tcl/Tk
5050
#
51
-# FOSSIL_ENABLE_TCL = 1
51
+FOSSIL_ENABLE_TCL = 1
5252
5353
#### Load Tcl using the stubs mechanism
5454
#
55
-# FOSSIL_ENABLE_TCL_STUBS = 1
55
+FOSSIL_ENABLE_TCL_STUBS = 1
5656
5757
#### Use the Tcl source directory instead of the install directory?
5858
# This is useful when Tcl has been compiled statically with MinGW.
5959
#
6060
FOSSIL_TCL_SOURCE = 1
6161
--- 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

Keyboard Shortcuts

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