Fossil SCM

Merge updates from trunk.

mistachkin 2014-08-28 05:54 UTC optFor130 merge
Commit 629891a7759e31449d3367c150a6fb39fef13f63
--- Makefile.classic
+++ Makefile.classic
@@ -25,11 +25,11 @@
2525
#### The suffix to add to final executable file. When cross-compiling
2626
# to windows, make this ".exe". Otherwise leave it blank.
2727
#
2828
E =
2929
30
-#### C Compile and options for use in building executables that
30
+#### C Compile and options for use in building executables that
3131
# will run on the target platform. This is usually the same
3232
# as BCC, unless you are cross-compiling. This C compiler builds
3333
# the finished binary for fossil. The BCC compiler above is used
3434
# for building intermediate code-generator tools.
3535
#
3636
--- Makefile.classic
+++ Makefile.classic
@@ -25,11 +25,11 @@
25 #### The suffix to add to final executable file. When cross-compiling
26 # to windows, make this ".exe". Otherwise leave it blank.
27 #
28 E =
29
30 #### C Compile and options for use in building executables that
31 # will run on the target platform. This is usually the same
32 # as BCC, unless you are cross-compiling. This C compiler builds
33 # the finished binary for fossil. The BCC compiler above is used
34 # for building intermediate code-generator tools.
35 #
36
--- Makefile.classic
+++ Makefile.classic
@@ -25,11 +25,11 @@
25 #### The suffix to add to final executable file. When cross-compiling
26 # to windows, make this ".exe". Otherwise leave it blank.
27 #
28 E =
29
30 #### C Compile and options for use in building executables that
31 # will run on the target platform. This is usually the same
32 # as BCC, unless you are cross-compiling. This C compiler builds
33 # the finished binary for fossil. The BCC compiler above is used
34 # for building intermediate code-generator tools.
35 #
36
+2 -2
--- auto.def
+++ auto.def
@@ -2,11 +2,11 @@
22
33
use cc cc-lib
44
55
options {
66
with-openssl:path|auto|none
7
- => {Look for openssl in the given path, or auto or none}
7
+ => {Look for OpenSSL in the given path, or auto or none}
88
with-zlib:path => {Look for zlib in the given path}
99
with-th1-hooks=0 => {Enable TH1 hooks for commands and web pages}
1010
with-tcl:path => {Enable Tcl integration, with Tcl in the specified path}
1111
with-tcl-stubs=0 => {Enable Tcl integration via stubs library mechanism}
1212
with-tcl-private-stubs=0
@@ -161,11 +161,11 @@
161161
define-append EXTRA_CFLAGS $cflags
162162
define-append EXTRA_LDFLAGS $tclconfig(TCL_LD_FLAGS)
163163
define FOSSIL_ENABLE_TCL
164164
}
165165
166
-# Helper for openssl checking
166
+# Helper for OpenSSL checking
167167
proc check-for-openssl {msg {cflags {}}} {
168168
msg-checking "Checking for $msg..."
169169
set rc 0
170170
msg-quiet cc-with [list -cflags $cflags -libs {-lssl -lcrypto}] {
171171
if {[cc-check-includes openssl/ssl.h] && [cc-check-functions SSL_new]} {
172172
--- auto.def
+++ auto.def
@@ -2,11 +2,11 @@
2
3 use cc cc-lib
4
5 options {
6 with-openssl:path|auto|none
7 => {Look for openssl in the given path, or auto or none}
8 with-zlib:path => {Look for zlib in the given path}
9 with-th1-hooks=0 => {Enable TH1 hooks for commands and web pages}
10 with-tcl:path => {Enable Tcl integration, with Tcl in the specified path}
11 with-tcl-stubs=0 => {Enable Tcl integration via stubs library mechanism}
12 with-tcl-private-stubs=0
@@ -161,11 +161,11 @@
161 define-append EXTRA_CFLAGS $cflags
162 define-append EXTRA_LDFLAGS $tclconfig(TCL_LD_FLAGS)
163 define FOSSIL_ENABLE_TCL
164 }
165
166 # Helper for openssl checking
167 proc check-for-openssl {msg {cflags {}}} {
168 msg-checking "Checking for $msg..."
169 set rc 0
170 msg-quiet cc-with [list -cflags $cflags -libs {-lssl -lcrypto}] {
171 if {[cc-check-includes openssl/ssl.h] && [cc-check-functions SSL_new]} {
172
--- auto.def
+++ auto.def
@@ -2,11 +2,11 @@
2
3 use cc cc-lib
4
5 options {
6 with-openssl:path|auto|none
7 => {Look for OpenSSL in the given path, or auto or none}
8 with-zlib:path => {Look for zlib in the given path}
9 with-th1-hooks=0 => {Enable TH1 hooks for commands and web pages}
10 with-tcl:path => {Enable Tcl integration, with Tcl in the specified path}
11 with-tcl-stubs=0 => {Enable Tcl integration via stubs library mechanism}
12 with-tcl-private-stubs=0
@@ -161,11 +161,11 @@
161 define-append EXTRA_CFLAGS $cflags
162 define-append EXTRA_LDFLAGS $tclconfig(TCL_LD_FLAGS)
163 define FOSSIL_ENABLE_TCL
164 }
165
166 # Helper for OpenSSL checking
167 proc check-for-openssl {msg {cflags {}}} {
168 msg-checking "Checking for $msg..."
169 set rc 0
170 msg-quiet cc-with [list -cflags $cflags -libs {-lssl -lcrypto}] {
171 if {[cc-check-includes openssl/ssl.h] && [cc-check-functions SSL_new]} {
172
+10 -3
--- src/attach.c
+++ src/attach.c
@@ -365,10 +365,12 @@
365365
int modPending; /* True if awaiting moderation */
366366
const char *zModAction; /* Moderation action or NULL */
367367
int isModerator; /* TRUE if user is the moderator */
368368
const char *zMime; /* MIME Type */
369369
Blob attach; /* Content of the attachment */
370
+ int fShowContent = 0;
371
+ const char *zLn = P("ln");
370372
371373
login_check_credentials();
372374
if( !g.perm.RdTkt && !g.perm.RdWiki ){ login_needed(); return; }
373375
rid = name_to_rid_www("name");
374376
if( rid==0 ){ fossil_redirect_home(); }
@@ -391,10 +393,12 @@
391393
zTarget = pAttach->zAttachTarget;
392394
zSrc = pAttach->zAttachSrc;
393395
ridSrc = db_int(0,"SELECT rid FROM blob WHERE uuid='%s'", zSrc);
394396
zName = pAttach->zAttachName;
395397
zDesc = pAttach->zComment;
398
+ zMime = mimetype_from_name(zName);
399
+ fShowContent = zMime ? strncmp(zMime,"text/", 5)==0 : 0;
396400
if( validate16(zTarget, strlen(zTarget))
397401
&& db_exists("SELECT 1 FROM ticket WHERE tkt_uuid='%s'", zTarget)
398402
){
399403
zTktUuid = zTarget;
400404
if( !g.perm.RdTkt ){ login_needed(); return; }
@@ -464,10 +468,15 @@
464468
moderation_approve(rid);
465469
}
466470
}
467471
style_header("Attachment Details");
468472
style_submenu_element("Raw", "Raw", "%R/artifact/%s", zUuid);
473
+ if(fShowContent){
474
+ style_submenu_element("Line Numbers", "Line Numbers",
475
+ "%R/ainfo/%s%s",zUuid,
476
+ ((zLn&&*zLn) ? "" : "?ln=0"));
477
+ }
469478
470479
@ <div class="section">Overview</div>
471480
@ <p><table class="label-value">
472481
@ <tr><th>Artifact&nbsp;ID:</th>
473482
@ <td>%z(href("%R/artifact/%s",zUuid))%s(zUuid)</a>
@@ -494,11 +503,10 @@
494503
@ <td>%z(href("%R/artifact/%s",zSrc))%s(zSrc)</a>
495504
if( g.perm.Setup ){
496505
@ (%d(ridSrc))
497506
}
498507
@ <tr><th>Filename:</th><td>%h(zName)</td></tr>
499
- zMime = mimetype_from_name(zName);
500508
if( g.perm.Setup ){
501509
@ <tr><th>MIME-Type:</th><td>%h(zMime)</td></tr>
502510
}
503511
@ <tr><th valign="top">Description:</th><td valign="top">%h(zDesc)</td></tr>
504512
@ </table>
@@ -517,13 +525,12 @@
517525
}
518526
519527
@ <div class="section">Content Appended</div>
520528
@ <blockquote>
521529
blob_zero(&attach);
522
- if( zMime==0 || strncmp(zMime,"text/", 5)==0 ){
530
+ if( fShowContent ){
523531
const char *z;
524
- const char *zLn = P("ln");
525532
content_get(ridSrc, &attach);
526533
blob_to_utf8_no_bom(&attach, 0);
527534
z = blob_str(&attach);
528535
if( zLn ){
529536
output_text_with_line_numbers(z, zLn);
530537
--- src/attach.c
+++ src/attach.c
@@ -365,10 +365,12 @@
365 int modPending; /* True if awaiting moderation */
366 const char *zModAction; /* Moderation action or NULL */
367 int isModerator; /* TRUE if user is the moderator */
368 const char *zMime; /* MIME Type */
369 Blob attach; /* Content of the attachment */
 
 
370
371 login_check_credentials();
372 if( !g.perm.RdTkt && !g.perm.RdWiki ){ login_needed(); return; }
373 rid = name_to_rid_www("name");
374 if( rid==0 ){ fossil_redirect_home(); }
@@ -391,10 +393,12 @@
391 zTarget = pAttach->zAttachTarget;
392 zSrc = pAttach->zAttachSrc;
393 ridSrc = db_int(0,"SELECT rid FROM blob WHERE uuid='%s'", zSrc);
394 zName = pAttach->zAttachName;
395 zDesc = pAttach->zComment;
 
 
396 if( validate16(zTarget, strlen(zTarget))
397 && db_exists("SELECT 1 FROM ticket WHERE tkt_uuid='%s'", zTarget)
398 ){
399 zTktUuid = zTarget;
400 if( !g.perm.RdTkt ){ login_needed(); return; }
@@ -464,10 +468,15 @@
464 moderation_approve(rid);
465 }
466 }
467 style_header("Attachment Details");
468 style_submenu_element("Raw", "Raw", "%R/artifact/%s", zUuid);
 
 
 
 
 
469
470 @ <div class="section">Overview</div>
471 @ <p><table class="label-value">
472 @ <tr><th>Artifact&nbsp;ID:</th>
473 @ <td>%z(href("%R/artifact/%s",zUuid))%s(zUuid)</a>
@@ -494,11 +503,10 @@
494 @ <td>%z(href("%R/artifact/%s",zSrc))%s(zSrc)</a>
495 if( g.perm.Setup ){
496 @ (%d(ridSrc))
497 }
498 @ <tr><th>Filename:</th><td>%h(zName)</td></tr>
499 zMime = mimetype_from_name(zName);
500 if( g.perm.Setup ){
501 @ <tr><th>MIME-Type:</th><td>%h(zMime)</td></tr>
502 }
503 @ <tr><th valign="top">Description:</th><td valign="top">%h(zDesc)</td></tr>
504 @ </table>
@@ -517,13 +525,12 @@
517 }
518
519 @ <div class="section">Content Appended</div>
520 @ <blockquote>
521 blob_zero(&attach);
522 if( zMime==0 || strncmp(zMime,"text/", 5)==0 ){
523 const char *z;
524 const char *zLn = P("ln");
525 content_get(ridSrc, &attach);
526 blob_to_utf8_no_bom(&attach, 0);
527 z = blob_str(&attach);
528 if( zLn ){
529 output_text_with_line_numbers(z, zLn);
530
--- src/attach.c
+++ src/attach.c
@@ -365,10 +365,12 @@
365 int modPending; /* True if awaiting moderation */
366 const char *zModAction; /* Moderation action or NULL */
367 int isModerator; /* TRUE if user is the moderator */
368 const char *zMime; /* MIME Type */
369 Blob attach; /* Content of the attachment */
370 int fShowContent = 0;
371 const char *zLn = P("ln");
372
373 login_check_credentials();
374 if( !g.perm.RdTkt && !g.perm.RdWiki ){ login_needed(); return; }
375 rid = name_to_rid_www("name");
376 if( rid==0 ){ fossil_redirect_home(); }
@@ -391,10 +393,12 @@
393 zTarget = pAttach->zAttachTarget;
394 zSrc = pAttach->zAttachSrc;
395 ridSrc = db_int(0,"SELECT rid FROM blob WHERE uuid='%s'", zSrc);
396 zName = pAttach->zAttachName;
397 zDesc = pAttach->zComment;
398 zMime = mimetype_from_name(zName);
399 fShowContent = zMime ? strncmp(zMime,"text/", 5)==0 : 0;
400 if( validate16(zTarget, strlen(zTarget))
401 && db_exists("SELECT 1 FROM ticket WHERE tkt_uuid='%s'", zTarget)
402 ){
403 zTktUuid = zTarget;
404 if( !g.perm.RdTkt ){ login_needed(); return; }
@@ -464,10 +468,15 @@
468 moderation_approve(rid);
469 }
470 }
471 style_header("Attachment Details");
472 style_submenu_element("Raw", "Raw", "%R/artifact/%s", zUuid);
473 if(fShowContent){
474 style_submenu_element("Line Numbers", "Line Numbers",
475 "%R/ainfo/%s%s",zUuid,
476 ((zLn&&*zLn) ? "" : "?ln=0"));
477 }
478
479 @ <div class="section">Overview</div>
480 @ <p><table class="label-value">
481 @ <tr><th>Artifact&nbsp;ID:</th>
482 @ <td>%z(href("%R/artifact/%s",zUuid))%s(zUuid)</a>
@@ -494,11 +503,10 @@
503 @ <td>%z(href("%R/artifact/%s",zSrc))%s(zSrc)</a>
504 if( g.perm.Setup ){
505 @ (%d(ridSrc))
506 }
507 @ <tr><th>Filename:</th><td>%h(zName)</td></tr>
 
508 if( g.perm.Setup ){
509 @ <tr><th>MIME-Type:</th><td>%h(zMime)</td></tr>
510 }
511 @ <tr><th valign="top">Description:</th><td valign="top">%h(zDesc)</td></tr>
512 @ </table>
@@ -517,13 +525,12 @@
525 }
526
527 @ <div class="section">Content Appended</div>
528 @ <blockquote>
529 blob_zero(&attach);
530 if( fShowContent ){
531 const char *z;
 
532 content_get(ridSrc, &attach);
533 blob_to_utf8_no_bom(&attach, 0);
534 z = blob_str(&attach);
535 if( zLn ){
536 output_text_with_line_numbers(z, zLn);
537
+2 -2
--- src/browse.c
+++ src/browse.c
@@ -732,11 +732,11 @@
732732
** temporary table named "fileage" that contains the file-id for each
733733
** files, the pathname, the check-in where the file was added, and the
734734
** mtime on that checkin. If zGlob and *zGlob then only files matching
735735
** the given glob are computed.
736736
*/
737
-int compute_fileage(int vid, char const * zGlob){
737
+int compute_fileage(int vid, const char* zGlob){
738738
Manifest *pManifest;
739739
ManifestFile *pFile;
740740
int nFile = 0;
741741
double vmtime;
742742
Stmt ins;
@@ -815,11 +815,11 @@
815815
*/
816816
void fileage_page(void){
817817
int rid;
818818
const char *zName;
819819
char *zBaseTime;
820
- char const * zGlob;
820
+ const char *zGlob;
821821
Stmt q;
822822
double baseTime;
823823
int lastMid = -1;
824824
login_check_credentials();
825825
if( !g.perm.Read ){ login_needed(); return; }
826826
--- src/browse.c
+++ src/browse.c
@@ -732,11 +732,11 @@
732 ** temporary table named "fileage" that contains the file-id for each
733 ** files, the pathname, the check-in where the file was added, and the
734 ** mtime on that checkin. If zGlob and *zGlob then only files matching
735 ** the given glob are computed.
736 */
737 int compute_fileage(int vid, char const * zGlob){
738 Manifest *pManifest;
739 ManifestFile *pFile;
740 int nFile = 0;
741 double vmtime;
742 Stmt ins;
@@ -815,11 +815,11 @@
815 */
816 void fileage_page(void){
817 int rid;
818 const char *zName;
819 char *zBaseTime;
820 char const * zGlob;
821 Stmt q;
822 double baseTime;
823 int lastMid = -1;
824 login_check_credentials();
825 if( !g.perm.Read ){ login_needed(); return; }
826
--- src/browse.c
+++ src/browse.c
@@ -732,11 +732,11 @@
732 ** temporary table named "fileage" that contains the file-id for each
733 ** files, the pathname, the check-in where the file was added, and the
734 ** mtime on that checkin. If zGlob and *zGlob then only files matching
735 ** the given glob are computed.
736 */
737 int compute_fileage(int vid, const char* zGlob){
738 Manifest *pManifest;
739 ManifestFile *pFile;
740 int nFile = 0;
741 double vmtime;
742 Stmt ins;
@@ -815,11 +815,11 @@
815 */
816 void fileage_page(void){
817 int rid;
818 const char *zName;
819 char *zBaseTime;
820 const char *zGlob;
821 Stmt q;
822 double baseTime;
823 int lastMid = -1;
824 login_check_credentials();
825 if( !g.perm.Read ){ login_needed(); return; }
826
+1 -1
--- src/cache.c
+++ src/cache.c
@@ -346,11 +346,11 @@
346346
" ORDER BY tm DESC"
347347
);
348348
if( pStmt ){
349349
@ <ol>
350350
while( sqlite3_step(pStmt)==SQLITE_ROW ){
351
- const char *zName = sqlite3_column_text(pStmt,0);
351
+ const unsigned char *zName = sqlite3_column_text(pStmt,0);
352352
@ <li><p>%z(href("%R/cacheget?key=%T",zName))%h(zName)</a><br>
353353
@ size: %s(sqlite3_column_text(pStmt,1))
354354
@ hit-count: %d(sqlite3_column_int(pStmt,2))
355355
@ last-access: %s(sqlite3_column_text(pStmt,3))</p></li>
356356
}
357357
--- src/cache.c
+++ src/cache.c
@@ -346,11 +346,11 @@
346 " ORDER BY tm DESC"
347 );
348 if( pStmt ){
349 @ <ol>
350 while( sqlite3_step(pStmt)==SQLITE_ROW ){
351 const char *zName = sqlite3_column_text(pStmt,0);
352 @ <li><p>%z(href("%R/cacheget?key=%T",zName))%h(zName)</a><br>
353 @ size: %s(sqlite3_column_text(pStmt,1))
354 @ hit-count: %d(sqlite3_column_int(pStmt,2))
355 @ last-access: %s(sqlite3_column_text(pStmt,3))</p></li>
356 }
357
--- src/cache.c
+++ src/cache.c
@@ -346,11 +346,11 @@
346 " ORDER BY tm DESC"
347 );
348 if( pStmt ){
349 @ <ol>
350 while( sqlite3_step(pStmt)==SQLITE_ROW ){
351 const unsigned char *zName = sqlite3_column_text(pStmt,0);
352 @ <li><p>%z(href("%R/cacheget?key=%T",zName))%h(zName)</a><br>
353 @ size: %s(sqlite3_column_text(pStmt,1))
354 @ hit-count: %d(sqlite3_column_int(pStmt,2))
355 @ last-access: %s(sqlite3_column_text(pStmt,3))</p></li>
356 }
357
+1 -1
--- src/captcha.c
+++ src/captcha.c
@@ -448,11 +448,11 @@
448448
/*
449449
** Translate a captcha seed value into the captcha password string.
450450
** The returned string is static and overwritten on each call to
451451
** this function.
452452
*/
453
-char const *captcha_decode(unsigned int seed){
453
+const char *captcha_decode(unsigned int seed){
454454
const char *zSecret;
455455
const char *z;
456456
Blob b;
457457
static char zRes[20];
458458
459459
--- src/captcha.c
+++ src/captcha.c
@@ -448,11 +448,11 @@
448 /*
449 ** Translate a captcha seed value into the captcha password string.
450 ** The returned string is static and overwritten on each call to
451 ** this function.
452 */
453 char const *captcha_decode(unsigned int seed){
454 const char *zSecret;
455 const char *z;
456 Blob b;
457 static char zRes[20];
458
459
--- src/captcha.c
+++ src/captcha.c
@@ -448,11 +448,11 @@
448 /*
449 ** Translate a captcha seed value into the captcha password string.
450 ** The returned string is static and overwritten on each call to
451 ** this function.
452 */
453 const char *captcha_decode(unsigned int seed){
454 const char *zSecret;
455 const char *z;
456 Blob b;
457 static char zRes[20];
458
459
+2 -2
--- src/import.c
+++ src/import.c
@@ -214,12 +214,12 @@
214214
215215
/*
216216
** Compare two strings for sorting.
217217
*/
218218
static int string_cmp(const void *pLeft, const void *pRight){
219
- const char *zLeft = *(char const **)pLeft;
220
- const char *zRight = *(char const **)pRight;
219
+ const char *zLeft = *(const char **)pLeft;
220
+ const char *zRight = *(const char **)pRight;
221221
return fossil_strcmp(zLeft, zRight);
222222
}
223223
224224
/* Forward reference */
225225
static void import_prior_files(void);
226226
--- src/import.c
+++ src/import.c
@@ -214,12 +214,12 @@
214
215 /*
216 ** Compare two strings for sorting.
217 */
218 static int string_cmp(const void *pLeft, const void *pRight){
219 const char *zLeft = *(char const **)pLeft;
220 const char *zRight = *(char const **)pRight;
221 return fossil_strcmp(zLeft, zRight);
222 }
223
224 /* Forward reference */
225 static void import_prior_files(void);
226
--- src/import.c
+++ src/import.c
@@ -214,12 +214,12 @@
214
215 /*
216 ** Compare two strings for sorting.
217 */
218 static int string_cmp(const void *pLeft, const void *pRight){
219 const char *zLeft = *(const char **)pLeft;
220 const char *zRight = *(const char **)pRight;
221 return fossil_strcmp(zLeft, zRight);
222 }
223
224 /* Forward reference */
225 static void import_prior_files(void);
226
+107 -59
--- src/info.c
+++ src/info.c
@@ -197,11 +197,11 @@
197197
i64 fsize;
198198
int verboseFlag = find_option("verbose","v",0)!=0;
199199
if( !verboseFlag ){
200200
verboseFlag = find_option("detail","l",0)!=0; /* deprecated */
201201
}
202
-
202
+
203203
/* We should be done with options.. */
204204
verify_all_options();
205205
206206
if( g.argc==3 && (fsize = file_size(g.argv[2]))>0 && (fsize&0x1ff)==0 ){
207207
db_open_config(0);
@@ -1065,28 +1065,28 @@
10651065
cmp = -1;
10661066
}else{
10671067
cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName);
10681068
}
10691069
if( cmp<0 ){
1070
- if(!zGlob || strglob(zGlob, pFileFrom->zName)){
1070
+ if( !zGlob || sqlite3_strglob(zGlob, pFileFrom->zName)==0 ){
10711071
append_file_change_line(pFileFrom->zName,
10721072
pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0);
10731073
}
10741074
pFileFrom = manifest_file_next(pFrom, 0);
10751075
}else if( cmp>0 ){
1076
- if(!zGlob || strglob(zGlob, pFileTo->zName)){
1076
+ if( !zGlob || sqlite3_strglob(zGlob, pFileTo->zName)==0 ){
10771077
append_file_change_line(pFileTo->zName,
10781078
0, pFileTo->zUuid, 0, diffFlags, pRe,
10791079
manifest_file_mperm(pFileTo));
10801080
}
10811081
pFileTo = manifest_file_next(pTo, 0);
10821082
}else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){
10831083
pFileFrom = manifest_file_next(pFrom, 0);
10841084
pFileTo = manifest_file_next(pTo, 0);
10851085
}else{
1086
- if(!zGlob || (strglob(zGlob, pFileFrom->zName)
1087
- || strglob(zGlob, pFileTo->zName))){
1086
+ if(!zGlob || (sqlite3_strglob(zGlob, pFileFrom->zName)==0
1087
+ || sqlite3_strglob(zGlob, pFileTo->zName)==0) ){
10881088
append_file_change_line(pFileFrom->zName,
10891089
pFileFrom->zUuid,
10901090
pFileTo->zUuid, 0, diffFlags, pRe,
10911091
manifest_file_mperm(pFileTo));
10921092
}
@@ -1111,10 +1111,16 @@
11111111
#define OBJTYPE_ATTACHMENT 0x0010
11121112
#define OBJTYPE_EVENT 0x0020
11131113
#define OBJTYPE_TAG 0x0040
11141114
#define OBJTYPE_SYMLINK 0x0080
11151115
#define OBJTYPE_EXE 0x0100
1116
+
1117
+/*
1118
+** Possible flags for the second parameter to
1119
+** object_description()
1120
+*/
1121
+#define OBJDESC_DETAIL 0x0001 /* more detail */
11161122
#endif
11171123
11181124
/*
11191125
** Write a description of an object to the www reply.
11201126
**
@@ -1130,19 +1136,19 @@
11301136
** * date of check-in
11311137
** * Comment & user
11321138
*/
11331139
int object_description(
11341140
int rid, /* The artifact ID */
1135
- int linkToView, /* Add viewer link if true */
1141
+ u32 objdescFlags, /* Flags to control display */
11361142
Blob *pDownloadName /* Fill with an appropriate download name */
11371143
){
11381144
Stmt q;
11391145
int cnt = 0;
11401146
int nWiki = 0;
11411147
int objType = 0;
11421148
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1143
-
1149
+ int showDetail = (objdescFlags & OBJDESC_DETAIL)!=0;
11441150
char *prevName = 0;
11451151
11461152
db_prepare(&q,
11471153
"SELECT filename.name, datetime(event.mtime),"
11481154
" coalesce(event.ecomment,event.comment),"
@@ -1166,11 +1172,19 @@
11661172
const char *zCom = db_column_text(&q, 2);
11671173
const char *zUser = db_column_text(&q, 3);
11681174
const char *zVers = db_column_text(&q, 4);
11691175
int mPerm = db_column_int(&q, 5);
11701176
const char *zBr = db_column_text(&q, 6);
1171
- if( !prevName || fossil_strcmp(zName, prevName) ) {
1177
+ int sameFilename = prevName!=0 && fossil_strcmp(zName,prevName)==0;
1178
+ if( sameFilename && !showDetail ){
1179
+ if( cnt==1 ){
1180
+ @ %z(href("%R/whatis/%s",zUuid))[more...]</a>
1181
+ }
1182
+ cnt++;
1183
+ continue;
1184
+ }
1185
+ if( !sameFilename ){
11721186
if( prevName ) {
11731187
@ </ul>
11741188
}
11751189
if( mPerm==PERM_LNK ){
11761190
@ <li>Symbolic link
@@ -1181,21 +1195,30 @@
11811195
}else{
11821196
@ <li>File
11831197
}
11841198
objType |= OBJTYPE_CONTENT;
11851199
@ %z(href("%R/finfo?name=%T",zName))%h(zName)</a>
1186
- @ <ul>
1200
+ if( showDetail ){
1201
+ @ <ul>
1202
+ }
11871203
prevName = fossil_strdup(zName);
11881204
}
1189
- @ <li>
1190
- hyperlink_to_date(zDate,"");
1191
- @ - part of checkin
1192
- hyperlink_to_uuid(zVers);
1205
+ if( showDetail ){
1206
+ @ <li>
1207
+ hyperlink_to_date(zDate,"");
1208
+ @ &mdash; part of check-in
1209
+ hyperlink_to_uuid(zVers);
1210
+ }else{
1211
+ @ &mdash; part of checkin
1212
+ hyperlink_to_uuid(zVers);
1213
+ @ at
1214
+ hyperlink_to_date(zDate,"");
1215
+ }
11931216
if( zBr && zBr[0] ){
11941217
@ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
11951218
}
1196
- @ - %!w(zCom) (user:
1219
+ @ &mdash; %!w(zCom) (user:
11971220
hyperlink_to_user(zUser,zDate,")");
11981221
if( g.perm.Hyperlink ){
11991222
@ %z(href("%R/finfo?name=%T&ci=%s",zName,zVers))[ancestry]</a>
12001223
@ %z(href("%R/annotate?filename=%T&checkin=%s",zName,zVers))
12011224
@ [annotate]</a>
@@ -1205,11 +1228,11 @@
12051228
cnt++;
12061229
if( pDownloadName && blob_size(pDownloadName)==0 ){
12071230
blob_append(pDownloadName, zName, -1);
12081231
}
12091232
}
1210
- if( prevName ){
1233
+ if( prevName && showDetail ){
12111234
@ </ul>
12121235
}
12131236
@ </ul>
12141237
free(prevName);
12151238
db_finalize(&q);
@@ -1333,12 +1356,10 @@
13331356
if( cnt==0 ){
13341357
@ Control artifact.
13351358
if( pDownloadName && blob_size(pDownloadName)==0 ){
13361359
blob_appendf(pDownloadName, "%.10s.txt", zUuid);
13371360
}
1338
- }else if( linkToView && g.perm.Hyperlink ){
1339
- @ %z(href("%R/artifact/%s",zUuid))[view]</a>
13401361
}
13411362
return objType;
13421363
}
13431364
13441365
@@ -1347,10 +1368,14 @@
13471368
** URL: fdiff?v1=UUID&v2=UUID&patch&sbs=BOOLEAN&regex=REGEX
13481369
**
13491370
** Two arguments, v1 and v2, identify the files to be diffed. Show the
13501371
** difference between the two artifacts. Show diff side by side unless sbs
13511372
** is 0. Generate plaintext if "patch" is present.
1373
+**
1374
+** Additional parameters:
1375
+**
1376
+** verbose Show more detail when describing artifacts
13521377
*/
13531378
void diff_page(void){
13541379
int v1, v2;
13551380
int isPatch;
13561381
int sideBySide;
@@ -1358,18 +1383,20 @@
13581383
char *zV2;
13591384
const char *zRe;
13601385
const char *zW; /* URL param for ignoring whitespace */
13611386
ReCompiled *pRe = 0;
13621387
u64 diffFlags;
1388
+ u32 objdescFlags = 0;
13631389
13641390
login_check_credentials();
13651391
if( !g.perm.Read ){ login_needed(); return; }
13661392
v1 = name_to_rid_www("v1");
13671393
v2 = name_to_rid_www("v2");
13681394
if( v1==0 || v2==0 ) fossil_redirect_home();
13691395
zRe = P("regex");
13701396
if( zRe ) re_compile(&pRe, zRe, 0);
1397
+ if( P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL;
13711398
isPatch = P("patch")!=0;
13721399
if( isPatch ){
13731400
Blob c1, c2, *pOut;
13741401
pOut = cgi_output_blob();
13751402
cgi_set_content_type("text/plain");
@@ -1415,13 +1442,13 @@
14151442
@ %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a> To
14161443
@ %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>.</h2>
14171444
}else{
14181445
@ <h2>Differences From
14191446
@ Artifact %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a>:</h2>
1420
- object_description(v1, 0, 0);
1447
+ object_description(v1, objdescFlags, 0);
14211448
@ <h2>To Artifact %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>:</h2>
1422
- object_description(v2, 0, 0);
1449
+ object_description(v2, objdescFlags, 0);
14231450
}
14241451
if( pRe ){
14251452
@ <b>Only differences that match regular expression "%h(zRe)"
14261453
@ are shown.</b>
14271454
}
@@ -1527,16 +1554,21 @@
15271554
** WEBPAGE: hexdump
15281555
** URL: /hexdump?name=ARTIFACTID
15291556
**
15301557
** Show the complete content of a file identified by ARTIFACTID
15311558
** as preformatted text.
1559
+**
1560
+** Other parameters:
1561
+**
1562
+** verbose Show more detail when describing the object
15321563
*/
15331564
void hexdump_page(void){
15341565
int rid;
15351566
Blob content;
15361567
Blob downloadName;
15371568
char *zUuid;
1569
+ u32 objdescFlags = 0;
15381570
15391571
rid = name_to_rid_www("name");
15401572
login_check_credentials();
15411573
if( !g.perm.Read ){ login_needed(); return; }
15421574
if( rid==0 ) fossil_redirect_home();
@@ -1556,11 +1588,12 @@
15561588
@ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
15571589
}else{
15581590
@ <h2>Artifact %s(zUuid):</h2>
15591591
}
15601592
blob_zero(&downloadName);
1561
- object_description(rid, 0, &downloadName);
1593
+ if( P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL;
1594
+ object_description(rid, objdescFlags, &downloadName);
15621595
style_submenu_element("Download", "Download",
15631596
"%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
15641597
@ <hr />
15651598
content_get(rid, &content);
15661599
@ <blockquote><pre>
@@ -1681,22 +1714,27 @@
16811714
}
16821715
}
16831716
16841717
16851718
/*
1719
+** WEBPAGE: whatis
16861720
** WEBPAGE: artifact
1687
-** URL: /artifact/ARTIFACTID
1721
+**
1722
+** URL: /artifact/SHA1HASH
16881723
** URL: /artifact?ci=CHECKIN&filename=PATH
1724
+** URL: /whatis/SHA1HASH
16891725
**
16901726
** Additional query parameters:
16911727
**
16921728
** ln - show line numbers
16931729
** ln=N - highlight line number N
16941730
** ln=M-N - highlight lines M through N inclusive
1731
+** verbose - show more detail in the description
16951732
**
1696
-** Show the complete content of a file identified by ARTIFACTID
1697
-** as preformatted text.
1733
+** The /artifact page show the complete content of a file
1734
+** identified by SHA1HASH as preformatted text. The
1735
+** /whatis page shows only a description of the file.
16981736
*/
16991737
void artifact_page(void){
17001738
int rid = 0;
17011739
Blob content;
17021740
const char *zMime;
@@ -1704,10 +1742,13 @@
17041742
int renderAsWiki = 0;
17051743
int renderAsHtml = 0;
17061744
int objType;
17071745
int asText;
17081746
const char *zUuid;
1747
+ u32 objdescFlags = 0;
1748
+ int descOnly = fossil_strcmp(g.zPath,"whatis")==0;
1749
+ const char *zLn = P("ln");
17091750
17101751
if( P("ci") && P("filename") ){
17111752
rid = artifact_from_ci_and_filename_www();
17121753
}
17131754
if( rid==0 ){
@@ -1725,19 +1766,20 @@
17251766
}else{
17261767
style_submenu_element("Shun","Shun", "%s/shun?shun=%s#addshun",
17271768
g.zTop, zUuid);
17281769
}
17291770
}
1730
- style_header("Artifact Content");
1771
+ if( descOnly || P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL;
1772
+ style_header(descOnly ? "Artifact Description" : "Artifact Content");
17311773
zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
17321774
if( g.perm.Setup ){
17331775
@ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
17341776
}else{
17351777
@ <h2>Artifact %s(zUuid):</h2>
17361778
}
17371779
blob_zero(&downloadName);
1738
- objType = object_description(rid, 0, &downloadName);
1780
+ objType = object_description(rid, objdescFlags, &downloadName);
17391781
style_submenu_element("Download", "Download",
17401782
"%R/raw/%T?name=%s", blob_str(&downloadName), zUuid);
17411783
if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
17421784
style_submenu_element("Checkins Using", "Checkins Using",
17431785
"%R/timeline?n=200&uf=%s",zUuid);
@@ -1767,44 +1809,50 @@
17671809
}
17681810
}
17691811
if( (objType & (OBJTYPE_WIKI|OBJTYPE_TICKET))!=0 ){
17701812
style_submenu_element("Parsed", "Parsed", "%R/info/%s", zUuid);
17711813
}
1772
- @ <hr />
1773
- content_get(rid, &content);
1774
- if( renderAsWiki ){
1775
- wiki_render_by_mimetype(&content, zMime);
1776
- }else if( renderAsHtml ){
1777
- @ <iframe src="%R/raw/%T(blob_str(&downloadName))?name=%s(zUuid)"
1778
- @ width="100%%" frameborder="0" marginwidth="0" marginheight="0"
1779
- @ sandbox="allow-same-origin"
1780
- @ onload="this.height = this.contentDocument.documentElement.scrollHeight;">
1781
- @ </iframe>
1782
- }else{
1783
- style_submenu_element("Hex","Hex", "%s/hexdump?name=%s", g.zTop, zUuid);
1784
- blob_to_utf8_no_bom(&content, 0);
1785
- zMime = mimetype_from_content(&content);
1786
- @ <blockquote>
1787
- if( zMime==0 ){
1788
- const char *zLn = P("ln");
1789
- const char *z;
1790
- z = blob_str(&content);
1791
- if( zLn ){
1792
- output_text_with_line_numbers(z, zLn);
1793
- }else{
1794
- @ <pre>
1795
- @ %h(z)
1796
- @ </pre>
1797
- }
1798
- }else if( strncmp(zMime, "image/", 6)==0 ){
1799
- @ <img src="%R/raw/%s(zUuid)?m=%s(zMime)" />
1800
- style_submenu_element("Image", "Image",
1801
- "%R/raw/%s?m=%s", zUuid, zMime);
1802
- }else{
1803
- @ <i>(file is %d(blob_size(&content)) bytes of binary data)</i>
1804
- }
1805
- @ </blockquote>
1814
+ if( descOnly ){
1815
+ style_submenu_element("Content", "Content", "%R/artifact/%s", zUuid);
1816
+ }else{
1817
+ style_submenu_element("Line Numbers", "Line Numbers",
1818
+ "%R/info/%s%s",zUuid,
1819
+ ((zLn&&*zLn) ? "" : "?ln=0"));
1820
+ @ <hr />
1821
+ content_get(rid, &content);
1822
+ if( renderAsWiki ){
1823
+ wiki_render_by_mimetype(&content, zMime);
1824
+ }else if( renderAsHtml ){
1825
+ @ <iframe src="%R/raw/%T(blob_str(&downloadName))?name=%s(zUuid)"
1826
+ @ width="100%%" frameborder="0" marginwidth="0" marginheight="0"
1827
+ @ sandbox="allow-same-origin"
1828
+ @ onload="this.height = this.contentDocument.documentElement.scrollHeight;">
1829
+ @ </iframe>
1830
+ }else{
1831
+ style_submenu_element("Hex","Hex", "%s/hexdump?name=%s", g.zTop, zUuid);
1832
+ blob_to_utf8_no_bom(&content, 0);
1833
+ zMime = mimetype_from_content(&content);
1834
+ @ <blockquote>
1835
+ if( zMime==0 ){
1836
+ const char *z;
1837
+ z = blob_str(&content);
1838
+ if( zLn ){
1839
+ output_text_with_line_numbers(z, zLn);
1840
+ }else{
1841
+ @ <pre>
1842
+ @ %h(z)
1843
+ @ </pre>
1844
+ }
1845
+ }else if( strncmp(zMime, "image/", 6)==0 ){
1846
+ @ <img src="%R/raw/%s(zUuid)?m=%s(zMime)" />
1847
+ style_submenu_element("Image", "Image",
1848
+ "%R/raw/%s?m=%s", zUuid, zMime);
1849
+ }else{
1850
+ @ <i>(file is %d(blob_size(&content)) bytes of binary data)</i>
1851
+ }
1852
+ @ </blockquote>
1853
+ }
18061854
}
18071855
style_footer();
18081856
}
18091857
18101858
/*
18111859
--- src/info.c
+++ src/info.c
@@ -197,11 +197,11 @@
197 i64 fsize;
198 int verboseFlag = find_option("verbose","v",0)!=0;
199 if( !verboseFlag ){
200 verboseFlag = find_option("detail","l",0)!=0; /* deprecated */
201 }
202
203 /* We should be done with options.. */
204 verify_all_options();
205
206 if( g.argc==3 && (fsize = file_size(g.argv[2]))>0 && (fsize&0x1ff)==0 ){
207 db_open_config(0);
@@ -1065,28 +1065,28 @@
1065 cmp = -1;
1066 }else{
1067 cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName);
1068 }
1069 if( cmp<0 ){
1070 if(!zGlob || strglob(zGlob, pFileFrom->zName)){
1071 append_file_change_line(pFileFrom->zName,
1072 pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0);
1073 }
1074 pFileFrom = manifest_file_next(pFrom, 0);
1075 }else if( cmp>0 ){
1076 if(!zGlob || strglob(zGlob, pFileTo->zName)){
1077 append_file_change_line(pFileTo->zName,
1078 0, pFileTo->zUuid, 0, diffFlags, pRe,
1079 manifest_file_mperm(pFileTo));
1080 }
1081 pFileTo = manifest_file_next(pTo, 0);
1082 }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){
1083 pFileFrom = manifest_file_next(pFrom, 0);
1084 pFileTo = manifest_file_next(pTo, 0);
1085 }else{
1086 if(!zGlob || (strglob(zGlob, pFileFrom->zName)
1087 || strglob(zGlob, pFileTo->zName))){
1088 append_file_change_line(pFileFrom->zName,
1089 pFileFrom->zUuid,
1090 pFileTo->zUuid, 0, diffFlags, pRe,
1091 manifest_file_mperm(pFileTo));
1092 }
@@ -1111,10 +1111,16 @@
1111 #define OBJTYPE_ATTACHMENT 0x0010
1112 #define OBJTYPE_EVENT 0x0020
1113 #define OBJTYPE_TAG 0x0040
1114 #define OBJTYPE_SYMLINK 0x0080
1115 #define OBJTYPE_EXE 0x0100
 
 
 
 
 
 
1116 #endif
1117
1118 /*
1119 ** Write a description of an object to the www reply.
1120 **
@@ -1130,19 +1136,19 @@
1130 ** * date of check-in
1131 ** * Comment & user
1132 */
1133 int object_description(
1134 int rid, /* The artifact ID */
1135 int linkToView, /* Add viewer link if true */
1136 Blob *pDownloadName /* Fill with an appropriate download name */
1137 ){
1138 Stmt q;
1139 int cnt = 0;
1140 int nWiki = 0;
1141 int objType = 0;
1142 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1143
1144 char *prevName = 0;
1145
1146 db_prepare(&q,
1147 "SELECT filename.name, datetime(event.mtime),"
1148 " coalesce(event.ecomment,event.comment),"
@@ -1166,11 +1172,19 @@
1166 const char *zCom = db_column_text(&q, 2);
1167 const char *zUser = db_column_text(&q, 3);
1168 const char *zVers = db_column_text(&q, 4);
1169 int mPerm = db_column_int(&q, 5);
1170 const char *zBr = db_column_text(&q, 6);
1171 if( !prevName || fossil_strcmp(zName, prevName) ) {
 
 
 
 
 
 
 
 
1172 if( prevName ) {
1173 @ </ul>
1174 }
1175 if( mPerm==PERM_LNK ){
1176 @ <li>Symbolic link
@@ -1181,21 +1195,30 @@
1181 }else{
1182 @ <li>File
1183 }
1184 objType |= OBJTYPE_CONTENT;
1185 @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a>
1186 @ <ul>
 
 
1187 prevName = fossil_strdup(zName);
1188 }
1189 @ <li>
1190 hyperlink_to_date(zDate,"");
1191 @ - part of checkin
1192 hyperlink_to_uuid(zVers);
 
 
 
 
 
 
 
1193 if( zBr && zBr[0] ){
1194 @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
1195 }
1196 @ - %!w(zCom) (user:
1197 hyperlink_to_user(zUser,zDate,")");
1198 if( g.perm.Hyperlink ){
1199 @ %z(href("%R/finfo?name=%T&ci=%s",zName,zVers))[ancestry]</a>
1200 @ %z(href("%R/annotate?filename=%T&checkin=%s",zName,zVers))
1201 @ [annotate]</a>
@@ -1205,11 +1228,11 @@
1205 cnt++;
1206 if( pDownloadName && blob_size(pDownloadName)==0 ){
1207 blob_append(pDownloadName, zName, -1);
1208 }
1209 }
1210 if( prevName ){
1211 @ </ul>
1212 }
1213 @ </ul>
1214 free(prevName);
1215 db_finalize(&q);
@@ -1333,12 +1356,10 @@
1333 if( cnt==0 ){
1334 @ Control artifact.
1335 if( pDownloadName && blob_size(pDownloadName)==0 ){
1336 blob_appendf(pDownloadName, "%.10s.txt", zUuid);
1337 }
1338 }else if( linkToView && g.perm.Hyperlink ){
1339 @ %z(href("%R/artifact/%s",zUuid))[view]</a>
1340 }
1341 return objType;
1342 }
1343
1344
@@ -1347,10 +1368,14 @@
1347 ** URL: fdiff?v1=UUID&v2=UUID&patch&sbs=BOOLEAN&regex=REGEX
1348 **
1349 ** Two arguments, v1 and v2, identify the files to be diffed. Show the
1350 ** difference between the two artifacts. Show diff side by side unless sbs
1351 ** is 0. Generate plaintext if "patch" is present.
 
 
 
 
1352 */
1353 void diff_page(void){
1354 int v1, v2;
1355 int isPatch;
1356 int sideBySide;
@@ -1358,18 +1383,20 @@
1358 char *zV2;
1359 const char *zRe;
1360 const char *zW; /* URL param for ignoring whitespace */
1361 ReCompiled *pRe = 0;
1362 u64 diffFlags;
 
1363
1364 login_check_credentials();
1365 if( !g.perm.Read ){ login_needed(); return; }
1366 v1 = name_to_rid_www("v1");
1367 v2 = name_to_rid_www("v2");
1368 if( v1==0 || v2==0 ) fossil_redirect_home();
1369 zRe = P("regex");
1370 if( zRe ) re_compile(&pRe, zRe, 0);
 
1371 isPatch = P("patch")!=0;
1372 if( isPatch ){
1373 Blob c1, c2, *pOut;
1374 pOut = cgi_output_blob();
1375 cgi_set_content_type("text/plain");
@@ -1415,13 +1442,13 @@
1415 @ %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a> To
1416 @ %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>.</h2>
1417 }else{
1418 @ <h2>Differences From
1419 @ Artifact %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a>:</h2>
1420 object_description(v1, 0, 0);
1421 @ <h2>To Artifact %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>:</h2>
1422 object_description(v2, 0, 0);
1423 }
1424 if( pRe ){
1425 @ <b>Only differences that match regular expression "%h(zRe)"
1426 @ are shown.</b>
1427 }
@@ -1527,16 +1554,21 @@
1527 ** WEBPAGE: hexdump
1528 ** URL: /hexdump?name=ARTIFACTID
1529 **
1530 ** Show the complete content of a file identified by ARTIFACTID
1531 ** as preformatted text.
 
 
 
 
1532 */
1533 void hexdump_page(void){
1534 int rid;
1535 Blob content;
1536 Blob downloadName;
1537 char *zUuid;
 
1538
1539 rid = name_to_rid_www("name");
1540 login_check_credentials();
1541 if( !g.perm.Read ){ login_needed(); return; }
1542 if( rid==0 ) fossil_redirect_home();
@@ -1556,11 +1588,12 @@
1556 @ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
1557 }else{
1558 @ <h2>Artifact %s(zUuid):</h2>
1559 }
1560 blob_zero(&downloadName);
1561 object_description(rid, 0, &downloadName);
 
1562 style_submenu_element("Download", "Download",
1563 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1564 @ <hr />
1565 content_get(rid, &content);
1566 @ <blockquote><pre>
@@ -1681,22 +1714,27 @@
1681 }
1682 }
1683
1684
1685 /*
 
1686 ** WEBPAGE: artifact
1687 ** URL: /artifact/ARTIFACTID
 
1688 ** URL: /artifact?ci=CHECKIN&filename=PATH
 
1689 **
1690 ** Additional query parameters:
1691 **
1692 ** ln - show line numbers
1693 ** ln=N - highlight line number N
1694 ** ln=M-N - highlight lines M through N inclusive
 
1695 **
1696 ** Show the complete content of a file identified by ARTIFACTID
1697 ** as preformatted text.
 
1698 */
1699 void artifact_page(void){
1700 int rid = 0;
1701 Blob content;
1702 const char *zMime;
@@ -1704,10 +1742,13 @@
1704 int renderAsWiki = 0;
1705 int renderAsHtml = 0;
1706 int objType;
1707 int asText;
1708 const char *zUuid;
 
 
 
1709
1710 if( P("ci") && P("filename") ){
1711 rid = artifact_from_ci_and_filename_www();
1712 }
1713 if( rid==0 ){
@@ -1725,19 +1766,20 @@
1725 }else{
1726 style_submenu_element("Shun","Shun", "%s/shun?shun=%s#addshun",
1727 g.zTop, zUuid);
1728 }
1729 }
1730 style_header("Artifact Content");
 
1731 zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
1732 if( g.perm.Setup ){
1733 @ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
1734 }else{
1735 @ <h2>Artifact %s(zUuid):</h2>
1736 }
1737 blob_zero(&downloadName);
1738 objType = object_description(rid, 0, &downloadName);
1739 style_submenu_element("Download", "Download",
1740 "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid);
1741 if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
1742 style_submenu_element("Checkins Using", "Checkins Using",
1743 "%R/timeline?n=200&uf=%s",zUuid);
@@ -1767,44 +1809,50 @@
1767 }
1768 }
1769 if( (objType & (OBJTYPE_WIKI|OBJTYPE_TICKET))!=0 ){
1770 style_submenu_element("Parsed", "Parsed", "%R/info/%s", zUuid);
1771 }
1772 @ <hr />
1773 content_get(rid, &content);
1774 if( renderAsWiki ){
1775 wiki_render_by_mimetype(&content, zMime);
1776 }else if( renderAsHtml ){
1777 @ <iframe src="%R/raw/%T(blob_str(&downloadName))?name=%s(zUuid)"
1778 @ width="100%%" frameborder="0" marginwidth="0" marginheight="0"
1779 @ sandbox="allow-same-origin"
1780 @ onload="this.height = this.contentDocument.documentElement.scrollHeight;">
1781 @ </iframe>
1782 }else{
1783 style_submenu_element("Hex","Hex", "%s/hexdump?name=%s", g.zTop, zUuid);
1784 blob_to_utf8_no_bom(&content, 0);
1785 zMime = mimetype_from_content(&content);
1786 @ <blockquote>
1787 if( zMime==0 ){
1788 const char *zLn = P("ln");
1789 const char *z;
1790 z = blob_str(&content);
1791 if( zLn ){
1792 output_text_with_line_numbers(z, zLn);
1793 }else{
1794 @ <pre>
1795 @ %h(z)
1796 @ </pre>
1797 }
1798 }else if( strncmp(zMime, "image/", 6)==0 ){
1799 @ <img src="%R/raw/%s(zUuid)?m=%s(zMime)" />
1800 style_submenu_element("Image", "Image",
1801 "%R/raw/%s?m=%s", zUuid, zMime);
1802 }else{
1803 @ <i>(file is %d(blob_size(&content)) bytes of binary data)</i>
1804 }
1805 @ </blockquote>
 
 
 
 
 
 
1806 }
1807 style_footer();
1808 }
1809
1810 /*
1811
--- src/info.c
+++ src/info.c
@@ -197,11 +197,11 @@
197 i64 fsize;
198 int verboseFlag = find_option("verbose","v",0)!=0;
199 if( !verboseFlag ){
200 verboseFlag = find_option("detail","l",0)!=0; /* deprecated */
201 }
202
203 /* We should be done with options.. */
204 verify_all_options();
205
206 if( g.argc==3 && (fsize = file_size(g.argv[2]))>0 && (fsize&0x1ff)==0 ){
207 db_open_config(0);
@@ -1065,28 +1065,28 @@
1065 cmp = -1;
1066 }else{
1067 cmp = fossil_strcmp(pFileFrom->zName, pFileTo->zName);
1068 }
1069 if( cmp<0 ){
1070 if( !zGlob || sqlite3_strglob(zGlob, pFileFrom->zName)==0 ){
1071 append_file_change_line(pFileFrom->zName,
1072 pFileFrom->zUuid, 0, 0, diffFlags, pRe, 0);
1073 }
1074 pFileFrom = manifest_file_next(pFrom, 0);
1075 }else if( cmp>0 ){
1076 if( !zGlob || sqlite3_strglob(zGlob, pFileTo->zName)==0 ){
1077 append_file_change_line(pFileTo->zName,
1078 0, pFileTo->zUuid, 0, diffFlags, pRe,
1079 manifest_file_mperm(pFileTo));
1080 }
1081 pFileTo = manifest_file_next(pTo, 0);
1082 }else if( fossil_strcmp(pFileFrom->zUuid, pFileTo->zUuid)==0 ){
1083 pFileFrom = manifest_file_next(pFrom, 0);
1084 pFileTo = manifest_file_next(pTo, 0);
1085 }else{
1086 if(!zGlob || (sqlite3_strglob(zGlob, pFileFrom->zName)==0
1087 || sqlite3_strglob(zGlob, pFileTo->zName)==0) ){
1088 append_file_change_line(pFileFrom->zName,
1089 pFileFrom->zUuid,
1090 pFileTo->zUuid, 0, diffFlags, pRe,
1091 manifest_file_mperm(pFileTo));
1092 }
@@ -1111,10 +1111,16 @@
1111 #define OBJTYPE_ATTACHMENT 0x0010
1112 #define OBJTYPE_EVENT 0x0020
1113 #define OBJTYPE_TAG 0x0040
1114 #define OBJTYPE_SYMLINK 0x0080
1115 #define OBJTYPE_EXE 0x0100
1116
1117 /*
1118 ** Possible flags for the second parameter to
1119 ** object_description()
1120 */
1121 #define OBJDESC_DETAIL 0x0001 /* more detail */
1122 #endif
1123
1124 /*
1125 ** Write a description of an object to the www reply.
1126 **
@@ -1130,19 +1136,19 @@
1136 ** * date of check-in
1137 ** * Comment & user
1138 */
1139 int object_description(
1140 int rid, /* The artifact ID */
1141 u32 objdescFlags, /* Flags to control display */
1142 Blob *pDownloadName /* Fill with an appropriate download name */
1143 ){
1144 Stmt q;
1145 int cnt = 0;
1146 int nWiki = 0;
1147 int objType = 0;
1148 char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1149 int showDetail = (objdescFlags & OBJDESC_DETAIL)!=0;
1150 char *prevName = 0;
1151
1152 db_prepare(&q,
1153 "SELECT filename.name, datetime(event.mtime),"
1154 " coalesce(event.ecomment,event.comment),"
@@ -1166,11 +1172,19 @@
1172 const char *zCom = db_column_text(&q, 2);
1173 const char *zUser = db_column_text(&q, 3);
1174 const char *zVers = db_column_text(&q, 4);
1175 int mPerm = db_column_int(&q, 5);
1176 const char *zBr = db_column_text(&q, 6);
1177 int sameFilename = prevName!=0 && fossil_strcmp(zName,prevName)==0;
1178 if( sameFilename && !showDetail ){
1179 if( cnt==1 ){
1180 @ %z(href("%R/whatis/%s",zUuid))[more...]</a>
1181 }
1182 cnt++;
1183 continue;
1184 }
1185 if( !sameFilename ){
1186 if( prevName ) {
1187 @ </ul>
1188 }
1189 if( mPerm==PERM_LNK ){
1190 @ <li>Symbolic link
@@ -1181,21 +1195,30 @@
1195 }else{
1196 @ <li>File
1197 }
1198 objType |= OBJTYPE_CONTENT;
1199 @ %z(href("%R/finfo?name=%T",zName))%h(zName)</a>
1200 if( showDetail ){
1201 @ <ul>
1202 }
1203 prevName = fossil_strdup(zName);
1204 }
1205 if( showDetail ){
1206 @ <li>
1207 hyperlink_to_date(zDate,"");
1208 @ &mdash; part of check-in
1209 hyperlink_to_uuid(zVers);
1210 }else{
1211 @ &mdash; part of checkin
1212 hyperlink_to_uuid(zVers);
1213 @ at
1214 hyperlink_to_date(zDate,"");
1215 }
1216 if( zBr && zBr[0] ){
1217 @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
1218 }
1219 @ &mdash; %!w(zCom) (user:
1220 hyperlink_to_user(zUser,zDate,")");
1221 if( g.perm.Hyperlink ){
1222 @ %z(href("%R/finfo?name=%T&ci=%s",zName,zVers))[ancestry]</a>
1223 @ %z(href("%R/annotate?filename=%T&checkin=%s",zName,zVers))
1224 @ [annotate]</a>
@@ -1205,11 +1228,11 @@
1228 cnt++;
1229 if( pDownloadName && blob_size(pDownloadName)==0 ){
1230 blob_append(pDownloadName, zName, -1);
1231 }
1232 }
1233 if( prevName && showDetail ){
1234 @ </ul>
1235 }
1236 @ </ul>
1237 free(prevName);
1238 db_finalize(&q);
@@ -1333,12 +1356,10 @@
1356 if( cnt==0 ){
1357 @ Control artifact.
1358 if( pDownloadName && blob_size(pDownloadName)==0 ){
1359 blob_appendf(pDownloadName, "%.10s.txt", zUuid);
1360 }
 
 
1361 }
1362 return objType;
1363 }
1364
1365
@@ -1347,10 +1368,14 @@
1368 ** URL: fdiff?v1=UUID&v2=UUID&patch&sbs=BOOLEAN&regex=REGEX
1369 **
1370 ** Two arguments, v1 and v2, identify the files to be diffed. Show the
1371 ** difference between the two artifacts. Show diff side by side unless sbs
1372 ** is 0. Generate plaintext if "patch" is present.
1373 **
1374 ** Additional parameters:
1375 **
1376 ** verbose Show more detail when describing artifacts
1377 */
1378 void diff_page(void){
1379 int v1, v2;
1380 int isPatch;
1381 int sideBySide;
@@ -1358,18 +1383,20 @@
1383 char *zV2;
1384 const char *zRe;
1385 const char *zW; /* URL param for ignoring whitespace */
1386 ReCompiled *pRe = 0;
1387 u64 diffFlags;
1388 u32 objdescFlags = 0;
1389
1390 login_check_credentials();
1391 if( !g.perm.Read ){ login_needed(); return; }
1392 v1 = name_to_rid_www("v1");
1393 v2 = name_to_rid_www("v2");
1394 if( v1==0 || v2==0 ) fossil_redirect_home();
1395 zRe = P("regex");
1396 if( zRe ) re_compile(&pRe, zRe, 0);
1397 if( P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL;
1398 isPatch = P("patch")!=0;
1399 if( isPatch ){
1400 Blob c1, c2, *pOut;
1401 pOut = cgi_output_blob();
1402 cgi_set_content_type("text/plain");
@@ -1415,13 +1442,13 @@
1442 @ %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a> To
1443 @ %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>.</h2>
1444 }else{
1445 @ <h2>Differences From
1446 @ Artifact %z(href("%R/artifact/%s",zV1))[%S(zV1)]</a>:</h2>
1447 object_description(v1, objdescFlags, 0);
1448 @ <h2>To Artifact %z(href("%R/artifact/%s",zV2))[%S(zV2)]</a>:</h2>
1449 object_description(v2, objdescFlags, 0);
1450 }
1451 if( pRe ){
1452 @ <b>Only differences that match regular expression "%h(zRe)"
1453 @ are shown.</b>
1454 }
@@ -1527,16 +1554,21 @@
1554 ** WEBPAGE: hexdump
1555 ** URL: /hexdump?name=ARTIFACTID
1556 **
1557 ** Show the complete content of a file identified by ARTIFACTID
1558 ** as preformatted text.
1559 **
1560 ** Other parameters:
1561 **
1562 ** verbose Show more detail when describing the object
1563 */
1564 void hexdump_page(void){
1565 int rid;
1566 Blob content;
1567 Blob downloadName;
1568 char *zUuid;
1569 u32 objdescFlags = 0;
1570
1571 rid = name_to_rid_www("name");
1572 login_check_credentials();
1573 if( !g.perm.Read ){ login_needed(); return; }
1574 if( rid==0 ) fossil_redirect_home();
@@ -1556,11 +1588,12 @@
1588 @ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
1589 }else{
1590 @ <h2>Artifact %s(zUuid):</h2>
1591 }
1592 blob_zero(&downloadName);
1593 if( P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL;
1594 object_description(rid, objdescFlags, &downloadName);
1595 style_submenu_element("Download", "Download",
1596 "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid);
1597 @ <hr />
1598 content_get(rid, &content);
1599 @ <blockquote><pre>
@@ -1681,22 +1714,27 @@
1714 }
1715 }
1716
1717
1718 /*
1719 ** WEBPAGE: whatis
1720 ** WEBPAGE: artifact
1721 **
1722 ** URL: /artifact/SHA1HASH
1723 ** URL: /artifact?ci=CHECKIN&filename=PATH
1724 ** URL: /whatis/SHA1HASH
1725 **
1726 ** Additional query parameters:
1727 **
1728 ** ln - show line numbers
1729 ** ln=N - highlight line number N
1730 ** ln=M-N - highlight lines M through N inclusive
1731 ** verbose - show more detail in the description
1732 **
1733 ** The /artifact page show the complete content of a file
1734 ** identified by SHA1HASH as preformatted text. The
1735 ** /whatis page shows only a description of the file.
1736 */
1737 void artifact_page(void){
1738 int rid = 0;
1739 Blob content;
1740 const char *zMime;
@@ -1704,10 +1742,13 @@
1742 int renderAsWiki = 0;
1743 int renderAsHtml = 0;
1744 int objType;
1745 int asText;
1746 const char *zUuid;
1747 u32 objdescFlags = 0;
1748 int descOnly = fossil_strcmp(g.zPath,"whatis")==0;
1749 const char *zLn = P("ln");
1750
1751 if( P("ci") && P("filename") ){
1752 rid = artifact_from_ci_and_filename_www();
1753 }
1754 if( rid==0 ){
@@ -1725,19 +1766,20 @@
1766 }else{
1767 style_submenu_element("Shun","Shun", "%s/shun?shun=%s#addshun",
1768 g.zTop, zUuid);
1769 }
1770 }
1771 if( descOnly || P("verbose")!=0 ) objdescFlags |= OBJDESC_DETAIL;
1772 style_header(descOnly ? "Artifact Description" : "Artifact Content");
1773 zUuid = db_text("?", "SELECT uuid FROM blob WHERE rid=%d", rid);
1774 if( g.perm.Setup ){
1775 @ <h2>Artifact %s(zUuid) (%d(rid)):</h2>
1776 }else{
1777 @ <h2>Artifact %s(zUuid):</h2>
1778 }
1779 blob_zero(&downloadName);
1780 objType = object_description(rid, objdescFlags, &downloadName);
1781 style_submenu_element("Download", "Download",
1782 "%R/raw/%T?name=%s", blob_str(&downloadName), zUuid);
1783 if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
1784 style_submenu_element("Checkins Using", "Checkins Using",
1785 "%R/timeline?n=200&uf=%s",zUuid);
@@ -1767,44 +1809,50 @@
1809 }
1810 }
1811 if( (objType & (OBJTYPE_WIKI|OBJTYPE_TICKET))!=0 ){
1812 style_submenu_element("Parsed", "Parsed", "%R/info/%s", zUuid);
1813 }
1814 if( descOnly ){
1815 style_submenu_element("Content", "Content", "%R/artifact/%s", zUuid);
1816 }else{
1817 style_submenu_element("Line Numbers", "Line Numbers",
1818 "%R/info/%s%s",zUuid,
1819 ((zLn&&*zLn) ? "" : "?ln=0"));
1820 @ <hr />
1821 content_get(rid, &content);
1822 if( renderAsWiki ){
1823 wiki_render_by_mimetype(&content, zMime);
1824 }else if( renderAsHtml ){
1825 @ <iframe src="%R/raw/%T(blob_str(&downloadName))?name=%s(zUuid)"
1826 @ width="100%%" frameborder="0" marginwidth="0" marginheight="0"
1827 @ sandbox="allow-same-origin"
1828 @ onload="this.height = this.contentDocument.documentElement.scrollHeight;">
1829 @ </iframe>
1830 }else{
1831 style_submenu_element("Hex","Hex", "%s/hexdump?name=%s", g.zTop, zUuid);
1832 blob_to_utf8_no_bom(&content, 0);
1833 zMime = mimetype_from_content(&content);
1834 @ <blockquote>
1835 if( zMime==0 ){
1836 const char *z;
1837 z = blob_str(&content);
1838 if( zLn ){
1839 output_text_with_line_numbers(z, zLn);
1840 }else{
1841 @ <pre>
1842 @ %h(z)
1843 @ </pre>
1844 }
1845 }else if( strncmp(zMime, "image/", 6)==0 ){
1846 @ <img src="%R/raw/%s(zUuid)?m=%s(zMime)" />
1847 style_submenu_element("Image", "Image",
1848 "%R/raw/%s?m=%s", zUuid, zMime);
1849 }else{
1850 @ <i>(file is %d(blob_size(&content)) bytes of binary data)</i>
1851 }
1852 @ </blockquote>
1853 }
1854 }
1855 style_footer();
1856 }
1857
1858 /*
1859
+4 -4
--- src/main.c
+++ src/main.c
@@ -940,11 +940,11 @@
940940
void version_cmd(void){
941941
int verboseFlag = 0;
942942
943943
fossil_print("This is fossil version %s\n", get_version());
944944
verboseFlag = find_option("verbose","v",0)!=0;
945
-
945
+
946946
/* We should be done with options.. */
947947
verify_all_options();
948948
949949
if(!verboseFlag){
950950
return;
@@ -1429,11 +1429,11 @@
14291429
continue;
14301430
}
14311431
if( pFileGlob!=0
14321432
&& file_isfile(zRepo)
14331433
&& glob_match(pFileGlob, zRepo)
1434
- && strglob("*.fossil*",zRepo)==0
1434
+ && sqlite3_strglob("*.fossil*",zRepo)!=0
14351435
&& (zMimetype = mimetype_from_name(zRepo))!=0
14361436
&& strcmp(zMimetype, "application/x-fossil-artifact")!=0
14371437
){
14381438
Blob content;
14391439
blob_read_from_file(&content, zRepo);
@@ -1935,11 +1935,11 @@
19351935
if( zAltBase ) set_base_url(zAltBase);
19361936
if( find_option("https",0,0)!=0 ) cgi_replace_parameter("HTTPS","on");
19371937
zHost = find_option("host", 0, 1);
19381938
if( zHost ) cgi_replace_parameter("HTTP_HOST",zHost);
19391939
g.cgiOutput = 1;
1940
-
1940
+
19411941
/* We should be done with options.. */
19421942
verify_all_options();
19431943
19441944
if( g.argc!=2 && g.argc!=3 && g.argc!=6 ){
19451945
fossil_fatal("no repository specified");
@@ -2125,11 +2125,11 @@
21252125
set_base_url(zAltBase);
21262126
}
21272127
if( find_option("localhost", 0, 0)!=0 ){
21282128
flags |= HTTP_SERVER_LOCALHOST;
21292129
}
2130
-
2130
+
21312131
/* We should be done with options.. */
21322132
verify_all_options();
21332133
21342134
if( g.argc!=2 && g.argc!=3 ) usage("?REPOSITORY?");
21352135
isUiCmd = g.argv[1][0]=='u';
21362136
--- src/main.c
+++ src/main.c
@@ -940,11 +940,11 @@
940 void version_cmd(void){
941 int verboseFlag = 0;
942
943 fossil_print("This is fossil version %s\n", get_version());
944 verboseFlag = find_option("verbose","v",0)!=0;
945
946 /* We should be done with options.. */
947 verify_all_options();
948
949 if(!verboseFlag){
950 return;
@@ -1429,11 +1429,11 @@
1429 continue;
1430 }
1431 if( pFileGlob!=0
1432 && file_isfile(zRepo)
1433 && glob_match(pFileGlob, zRepo)
1434 && strglob("*.fossil*",zRepo)==0
1435 && (zMimetype = mimetype_from_name(zRepo))!=0
1436 && strcmp(zMimetype, "application/x-fossil-artifact")!=0
1437 ){
1438 Blob content;
1439 blob_read_from_file(&content, zRepo);
@@ -1935,11 +1935,11 @@
1935 if( zAltBase ) set_base_url(zAltBase);
1936 if( find_option("https",0,0)!=0 ) cgi_replace_parameter("HTTPS","on");
1937 zHost = find_option("host", 0, 1);
1938 if( zHost ) cgi_replace_parameter("HTTP_HOST",zHost);
1939 g.cgiOutput = 1;
1940
1941 /* We should be done with options.. */
1942 verify_all_options();
1943
1944 if( g.argc!=2 && g.argc!=3 && g.argc!=6 ){
1945 fossil_fatal("no repository specified");
@@ -2125,11 +2125,11 @@
2125 set_base_url(zAltBase);
2126 }
2127 if( find_option("localhost", 0, 0)!=0 ){
2128 flags |= HTTP_SERVER_LOCALHOST;
2129 }
2130
2131 /* We should be done with options.. */
2132 verify_all_options();
2133
2134 if( g.argc!=2 && g.argc!=3 ) usage("?REPOSITORY?");
2135 isUiCmd = g.argv[1][0]=='u';
2136
--- src/main.c
+++ src/main.c
@@ -940,11 +940,11 @@
940 void version_cmd(void){
941 int verboseFlag = 0;
942
943 fossil_print("This is fossil version %s\n", get_version());
944 verboseFlag = find_option("verbose","v",0)!=0;
945
946 /* We should be done with options.. */
947 verify_all_options();
948
949 if(!verboseFlag){
950 return;
@@ -1429,11 +1429,11 @@
1429 continue;
1430 }
1431 if( pFileGlob!=0
1432 && file_isfile(zRepo)
1433 && glob_match(pFileGlob, zRepo)
1434 && sqlite3_strglob("*.fossil*",zRepo)!=0
1435 && (zMimetype = mimetype_from_name(zRepo))!=0
1436 && strcmp(zMimetype, "application/x-fossil-artifact")!=0
1437 ){
1438 Blob content;
1439 blob_read_from_file(&content, zRepo);
@@ -1935,11 +1935,11 @@
1935 if( zAltBase ) set_base_url(zAltBase);
1936 if( find_option("https",0,0)!=0 ) cgi_replace_parameter("HTTPS","on");
1937 zHost = find_option("host", 0, 1);
1938 if( zHost ) cgi_replace_parameter("HTTP_HOST",zHost);
1939 g.cgiOutput = 1;
1940
1941 /* We should be done with options.. */
1942 verify_all_options();
1943
1944 if( g.argc!=2 && g.argc!=3 && g.argc!=6 ){
1945 fossil_fatal("no repository specified");
@@ -2125,11 +2125,11 @@
2125 set_base_url(zAltBase);
2126 }
2127 if( find_option("localhost", 0, 0)!=0 ){
2128 flags |= HTTP_SERVER_LOCALHOST;
2129 }
2130
2131 /* We should be done with options.. */
2132 verify_all_options();
2133
2134 if( g.argc!=2 && g.argc!=3 ) usage("?REPOSITORY?");
2135 isUiCmd = g.argv[1][0]=='u';
2136
+3 -3
--- src/main.mk
+++ src/main.mk
@@ -403,11 +403,11 @@
403403
404404
# The USE_SYSTEM_SQLITE variable may be undefined, set to 0, or set
405405
# to 1. If it is set to 1, then there is no need to build or link
406406
# the sqlite3.o object. Instead, the system sqlite will be linked
407407
# using -lsqlite3.
408
-SQLITE3_OBJ.1 =
408
+SQLITE3_OBJ.1 =
409409
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
410410
SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
411411
412412
EXTRAOBJ = $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) $(OBJDIR)/shell.o $(OBJDIR)/th.o $(OBJDIR)/th_lang.o $(OBJDIR)/th_tcl.o $(OBJDIR)/cson_amalgamation.o
413413
@@ -415,14 +415,14 @@
415415
$(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
416416
417417
# This rule prevents make from using its default rules to try build
418418
# an executable named "manifest" out of the file named "manifest.c"
419419
#
420
-$(SRCDIR)/../manifest:
420
+$(SRCDIR)/../manifest:
421421
# noop
422422
423
-clean:
423
+clean:
424424
rm -rf $(OBJDIR)/* $(APPNAME)
425425
426426
427427
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
428428
$(OBJDIR)/mkindex $(TRANS_SRC) >$@
429429
--- src/main.mk
+++ src/main.mk
@@ -403,11 +403,11 @@
403
404 # The USE_SYSTEM_SQLITE variable may be undefined, set to 0, or set
405 # to 1. If it is set to 1, then there is no need to build or link
406 # the sqlite3.o object. Instead, the system sqlite will be linked
407 # using -lsqlite3.
408 SQLITE3_OBJ.1 =
409 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
410 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
411
412 EXTRAOBJ = $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) $(OBJDIR)/shell.o $(OBJDIR)/th.o $(OBJDIR)/th_lang.o $(OBJDIR)/th_tcl.o $(OBJDIR)/cson_amalgamation.o
413
@@ -415,14 +415,14 @@
415 $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
416
417 # This rule prevents make from using its default rules to try build
418 # an executable named "manifest" out of the file named "manifest.c"
419 #
420 $(SRCDIR)/../manifest:
421 # noop
422
423 clean:
424 rm -rf $(OBJDIR)/* $(APPNAME)
425
426
427 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
428 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
429
--- src/main.mk
+++ src/main.mk
@@ -403,11 +403,11 @@
403
404 # The USE_SYSTEM_SQLITE variable may be undefined, set to 0, or set
405 # to 1. If it is set to 1, then there is no need to build or link
406 # the sqlite3.o object. Instead, the system sqlite will be linked
407 # using -lsqlite3.
408 SQLITE3_OBJ.1 =
409 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
410 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
411
412 EXTRAOBJ = $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) $(OBJDIR)/shell.o $(OBJDIR)/th.o $(OBJDIR)/th_lang.o $(OBJDIR)/th_tcl.o $(OBJDIR)/cson_amalgamation.o
413
@@ -415,14 +415,14 @@
415 $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
416
417 # This rule prevents make from using its default rules to try build
418 # an executable named "manifest" out of the file named "manifest.c"
419 #
420 $(SRCDIR)/../manifest:
421 # noop
422
423 clean:
424 rm -rf $(OBJDIR)/* $(APPNAME)
425
426
427 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
428 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
429
+51 -25
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -268,11 +268,11 @@
268268
269269
# The USE_SYSTEM_SQLITE variable may be undefined, set to 0, or set
270270
# to 1. If it is set to 1, then there is no need to build or link
271271
# the sqlite3.o object. Instead, the system sqlite will be linked
272272
# using -lsqlite3.
273
-SQLITE3_OBJ.1 =
273
+SQLITE3_OBJ.1 =
274274
SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
275275
SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
276276
277277
EXTRAOBJ = \
278278
$(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) \
@@ -286,14 +286,14 @@
286286
$(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
287287
288288
# This rule prevents make from using its default rules to try build
289289
# an executable named "manifest" out of the file named "manifest.c"
290290
#
291
-$(SRCDIR)/../manifest:
291
+$(SRCDIR)/../manifest:
292292
# noop
293293
294
-clean:
294
+clean:
295295
rm -rf $(OBJDIR)/* $(APPNAME)
296296
297297
}]
298298
299299
set mhargs {}
@@ -580,25 +580,30 @@
580580
#### We add the -static option here so that we can build a static
581581
# executable that will run in a chroot jail.
582582
#
583583
LIB = -static
584584
585
-# MinGW: If available, use the Unicode capable runtime startup code.
585
+#### MinGW: If available, use the Unicode capable runtime startup code.
586
+#
586587
ifndef MINGW_IS_32BIT_ONLY
587588
LIB += -municode
588589
endif
589590
591
+#### SQLite: If enabled, use the system SQLite library.
592
+#
590593
ifdef USE_SYSTEM_SQLITE
591594
LIB += -lsqlite3
592595
endif
593596
594
-# OpenSSL: Add the necessary libraries required, if enabled.
597
+#### OpenSSL: Add the necessary libraries required, if enabled.
598
+#
595599
ifdef FOSSIL_ENABLE_SSL
596600
LIB += -lssl -lcrypto -lgdi32
597601
endif
598602
599
-# Tcl: Add the necessary libraries required, if enabled.
603
+#### Tcl: Add the necessary libraries required, if enabled.
604
+#
600605
ifdef FOSSIL_ENABLE_TCL
601606
LIB += $(LIBTCL)
602607
endif
603608
604609
#### Extra arguments for linking the finished binary. Fossil needs
@@ -921,11 +926,11 @@
921926
APPNAME = $(OBJDIR)\fossil$(E)
922927
923928
all: $(APPNAME)
924929
925930
$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OBJDIR)\link
926
- cd $(OBJDIR)
931
+ cd $(OBJDIR)
927932
$(DMDIR)\bin\link @link
928933
929934
$(OBJDIR)\fossil.res: $B\win\fossil.rc
930935
$(RC) $(RCFLAGS) -o$@ $**
931936
@@ -970,11 +975,11 @@
970975
cp $@ $@
971976
972977
VERSION.h : version$E $B\manifest.uuid $B\manifest $B\VERSION
973978
+$** > $@
974979
975
-page_index.h: mkindex$E $(SRC)
980
+page_index.h: mkindex$E $(SRC)
976981
+$** > $@
977982
978983
clean:
979984
-del $(OBJDIR)\*.obj
980985
-del *.obj *_.c *.h *.map
@@ -1033,17 +1038,19 @@
10331038
#
10341039
# This file is automatically generated. Instead of editing this
10351040
# file, edit "makemake.tcl" then run "tclsh makemake.tcl"
10361041
# to regenerate this file.
10371042
#
1038
-B = ..
1039
-SRCDIR = $B\src
1040
-OBJDIR = .
1041
-OX = .
1042
-O = .obj
1043
-E = .exe
1044
-P = .pdb
1043
+B = ..
1044
+SRCDIR = $B\src
1045
+OBJDIR = .
1046
+OX = .
1047
+O = .obj
1048
+E = .exe
1049
+P = .pdb
1050
+PERLDIR =
1051
+PERL = perl.exe
10451052
10461053
# Uncomment to enable debug symbols
10471054
# DEBUG = 1
10481055
10491056
# Uncomment to enable JSON API
@@ -1057,12 +1064,13 @@
10571064
10581065
# Uncomment to enable Tcl support
10591066
# FOSSIL_ENABLE_TCL = 1
10601067
10611068
!ifdef FOSSIL_ENABLE_SSL
1062
-SSLINCDIR = $(B)\compat\openssl-1.0.1i\include
1063
-SSLLIBDIR = $(B)\compat\openssl-1.0.1i\out32
1069
+SSLDIR = $(B)\compat\openssl-1.0.1i
1070
+SSLINCDIR = $(SSLDIR)\include
1071
+SSLLIBDIR = $(SSLDIR)\out32
10641072
SSLLIB = ssleay32.lib libeay32.lib user32.lib gdi32.lib
10651073
!endif
10661074
10671075
!ifdef FOSSIL_ENABLE_TCL
10681076
TCLDIR = $(B)\compat\tcl-8.6
@@ -1158,21 +1166,39 @@
11581166
writeln -nonewline "\$(OX)\\$s\$O"; incr i
11591167
}
11601168
writeln " \\"
11611169
writeln -nonewline " \$(OX)\\fossil.res\n\n"
11621170
writeln {
1163
-APPNAME = $(OX)\fossil$(E)
1164
-PDBNAME = $(OX)\fossil$(P)
1171
+APPNAME = $(OX)\fossil$(E)
1172
+PDBNAME = $(OX)\fossil$(P)
1173
+APPTARGETS =
11651174
11661175
all: $(OX) $(APPNAME)
11671176
11681177
zlib:
11691178
@echo Building zlib from "$(ZLIBDIR)"...
1170
- @pushd "$(ZLIBDIR)" && nmake /f win32\Makefile.msc $(ZLIB) && popd
1179
+ @pushd "$(ZLIBDIR)" && $(MAKE) /f win32\Makefile.msc $(ZLIB) && popd
1180
+
1181
+!ifdef FOSSIL_ENABLE_SSL
1182
+openssl:
1183
+ @echo Building OpenSSL from "$(SSLDIR)"...
1184
+!if "$(PERLDIR)" != ""
1185
+ @set PATH=$(PERLDIR);$(PATH)
1186
+!endif
1187
+ @pushd "$(SSLDIR)" && $(PERL) Configure VC-WIN32 no-asm && popd
1188
+ @pushd "$(SSLDIR)" && call ms\do_ms.bat && popd
1189
+ @pushd "$(SSLDIR)" && $(MAKE) /f ms\nt.mak all && popd
1190
+!endif
1191
+
1192
+APPTARGETS = $(APPTARGETS) zlib
1193
+
1194
+!ifdef FOSSIL_ENABLE_SSL
1195
+APPTARGETS = $(APPTARGETS) openssl
1196
+!endif
11711197
1172
-$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts zlib
1173
- cd $(OX)
1198
+$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts $(APPTARGETS)
1199
+ cd $(OX)
11741200
link $(LDFLAGS) /OUT:$@ $(LIBDIR) Wsetargv.obj fossil.res @linkopts
11751201
11761202
$(OX)\linkopts: $B\win\Makefile.msc}
11771203
set redir {>}
11781204
foreach s [lsort [concat $src $AdditionalObj]] {
@@ -1215,11 +1241,11 @@
12151241
VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
12161242
$** > $@
12171243
$(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
12181244
$(TCC) /Fo$@ /c $**
12191245
1220
-page_index.h: mkindex$E $(SRC)
1246
+page_index.h: mkindex$E $(SRC)
12211247
$** > $@
12221248
12231249
clean:
12241250
-del $(OX)\*.obj
12251251
-del *.obj
@@ -1333,13 +1359,13 @@
13331359
# and
13341360
# PellesC 6.00.4
13351361
# gmake 3.80
13361362
# zlib sources 1.2.5
13371363
# Windows 7 Home Premium
1338
-#
1364
+#
13391365
1340
-#
1366
+#
13411367
PellesCDir=c:\Programme\PellesC
13421368
13431369
# Select between 32/64 bit code, default is 32 bit
13441370
#TARGETVERSION=64
13451371
13461372
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -268,11 +268,11 @@
268
269 # The USE_SYSTEM_SQLITE variable may be undefined, set to 0, or set
270 # to 1. If it is set to 1, then there is no need to build or link
271 # the sqlite3.o object. Instead, the system sqlite will be linked
272 # using -lsqlite3.
273 SQLITE3_OBJ.1 =
274 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
275 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
276
277 EXTRAOBJ = \
278 $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) \
@@ -286,14 +286,14 @@
286 $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
287
288 # This rule prevents make from using its default rules to try build
289 # an executable named "manifest" out of the file named "manifest.c"
290 #
291 $(SRCDIR)/../manifest:
292 # noop
293
294 clean:
295 rm -rf $(OBJDIR)/* $(APPNAME)
296
297 }]
298
299 set mhargs {}
@@ -580,25 +580,30 @@
580 #### We add the -static option here so that we can build a static
581 # executable that will run in a chroot jail.
582 #
583 LIB = -static
584
585 # MinGW: If available, use the Unicode capable runtime startup code.
 
586 ifndef MINGW_IS_32BIT_ONLY
587 LIB += -municode
588 endif
589
 
 
590 ifdef USE_SYSTEM_SQLITE
591 LIB += -lsqlite3
592 endif
593
594 # OpenSSL: Add the necessary libraries required, if enabled.
 
595 ifdef FOSSIL_ENABLE_SSL
596 LIB += -lssl -lcrypto -lgdi32
597 endif
598
599 # Tcl: Add the necessary libraries required, if enabled.
 
600 ifdef FOSSIL_ENABLE_TCL
601 LIB += $(LIBTCL)
602 endif
603
604 #### Extra arguments for linking the finished binary. Fossil needs
@@ -921,11 +926,11 @@
921 APPNAME = $(OBJDIR)\fossil$(E)
922
923 all: $(APPNAME)
924
925 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OBJDIR)\link
926 cd $(OBJDIR)
927 $(DMDIR)\bin\link @link
928
929 $(OBJDIR)\fossil.res: $B\win\fossil.rc
930 $(RC) $(RCFLAGS) -o$@ $**
931
@@ -970,11 +975,11 @@
970 cp $@ $@
971
972 VERSION.h : version$E $B\manifest.uuid $B\manifest $B\VERSION
973 +$** > $@
974
975 page_index.h: mkindex$E $(SRC)
976 +$** > $@
977
978 clean:
979 -del $(OBJDIR)\*.obj
980 -del *.obj *_.c *.h *.map
@@ -1033,17 +1038,19 @@
1033 #
1034 # This file is automatically generated. Instead of editing this
1035 # file, edit "makemake.tcl" then run "tclsh makemake.tcl"
1036 # to regenerate this file.
1037 #
1038 B = ..
1039 SRCDIR = $B\src
1040 OBJDIR = .
1041 OX = .
1042 O = .obj
1043 E = .exe
1044 P = .pdb
 
 
1045
1046 # Uncomment to enable debug symbols
1047 # DEBUG = 1
1048
1049 # Uncomment to enable JSON API
@@ -1057,12 +1064,13 @@
1057
1058 # Uncomment to enable Tcl support
1059 # FOSSIL_ENABLE_TCL = 1
1060
1061 !ifdef FOSSIL_ENABLE_SSL
1062 SSLINCDIR = $(B)\compat\openssl-1.0.1i\include
1063 SSLLIBDIR = $(B)\compat\openssl-1.0.1i\out32
 
1064 SSLLIB = ssleay32.lib libeay32.lib user32.lib gdi32.lib
1065 !endif
1066
1067 !ifdef FOSSIL_ENABLE_TCL
1068 TCLDIR = $(B)\compat\tcl-8.6
@@ -1158,21 +1166,39 @@
1158 writeln -nonewline "\$(OX)\\$s\$O"; incr i
1159 }
1160 writeln " \\"
1161 writeln -nonewline " \$(OX)\\fossil.res\n\n"
1162 writeln {
1163 APPNAME = $(OX)\fossil$(E)
1164 PDBNAME = $(OX)\fossil$(P)
 
1165
1166 all: $(OX) $(APPNAME)
1167
1168 zlib:
1169 @echo Building zlib from "$(ZLIBDIR)"...
1170 @pushd "$(ZLIBDIR)" && nmake /f win32\Makefile.msc $(ZLIB) && popd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1171
1172 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts zlib
1173 cd $(OX)
1174 link $(LDFLAGS) /OUT:$@ $(LIBDIR) Wsetargv.obj fossil.res @linkopts
1175
1176 $(OX)\linkopts: $B\win\Makefile.msc}
1177 set redir {>}
1178 foreach s [lsort [concat $src $AdditionalObj]] {
@@ -1215,11 +1241,11 @@
1215 VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
1216 $** > $@
1217 $(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
1218 $(TCC) /Fo$@ /c $**
1219
1220 page_index.h: mkindex$E $(SRC)
1221 $** > $@
1222
1223 clean:
1224 -del $(OX)\*.obj
1225 -del *.obj
@@ -1333,13 +1359,13 @@
1333 # and
1334 # PellesC 6.00.4
1335 # gmake 3.80
1336 # zlib sources 1.2.5
1337 # Windows 7 Home Premium
1338 #
1339
1340 #
1341 PellesCDir=c:\Programme\PellesC
1342
1343 # Select between 32/64 bit code, default is 32 bit
1344 #TARGETVERSION=64
1345
1346
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -268,11 +268,11 @@
268
269 # The USE_SYSTEM_SQLITE variable may be undefined, set to 0, or set
270 # to 1. If it is set to 1, then there is no need to build or link
271 # the sqlite3.o object. Instead, the system sqlite will be linked
272 # using -lsqlite3.
273 SQLITE3_OBJ.1 =
274 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o
275 SQLITE3_OBJ. = $(SQLITE3_OBJ.0)
276
277 EXTRAOBJ = \
278 $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) \
@@ -286,14 +286,14 @@
286 $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB)
287
288 # This rule prevents make from using its default rules to try build
289 # an executable named "manifest" out of the file named "manifest.c"
290 #
291 $(SRCDIR)/../manifest:
292 # noop
293
294 clean:
295 rm -rf $(OBJDIR)/* $(APPNAME)
296
297 }]
298
299 set mhargs {}
@@ -580,25 +580,30 @@
580 #### We add the -static option here so that we can build a static
581 # executable that will run in a chroot jail.
582 #
583 LIB = -static
584
585 #### MinGW: If available, use the Unicode capable runtime startup code.
586 #
587 ifndef MINGW_IS_32BIT_ONLY
588 LIB += -municode
589 endif
590
591 #### SQLite: If enabled, use the system SQLite library.
592 #
593 ifdef USE_SYSTEM_SQLITE
594 LIB += -lsqlite3
595 endif
596
597 #### OpenSSL: Add the necessary libraries required, if enabled.
598 #
599 ifdef FOSSIL_ENABLE_SSL
600 LIB += -lssl -lcrypto -lgdi32
601 endif
602
603 #### Tcl: Add the necessary libraries required, if enabled.
604 #
605 ifdef FOSSIL_ENABLE_TCL
606 LIB += $(LIBTCL)
607 endif
608
609 #### Extra arguments for linking the finished binary. Fossil needs
@@ -921,11 +926,11 @@
926 APPNAME = $(OBJDIR)\fossil$(E)
927
928 all: $(APPNAME)
929
930 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OBJDIR)\link
931 cd $(OBJDIR)
932 $(DMDIR)\bin\link @link
933
934 $(OBJDIR)\fossil.res: $B\win\fossil.rc
935 $(RC) $(RCFLAGS) -o$@ $**
936
@@ -970,11 +975,11 @@
975 cp $@ $@
976
977 VERSION.h : version$E $B\manifest.uuid $B\manifest $B\VERSION
978 +$** > $@
979
980 page_index.h: mkindex$E $(SRC)
981 +$** > $@
982
983 clean:
984 -del $(OBJDIR)\*.obj
985 -del *.obj *_.c *.h *.map
@@ -1033,17 +1038,19 @@
1038 #
1039 # This file is automatically generated. Instead of editing this
1040 # file, edit "makemake.tcl" then run "tclsh makemake.tcl"
1041 # to regenerate this file.
1042 #
1043 B = ..
1044 SRCDIR = $B\src
1045 OBJDIR = .
1046 OX = .
1047 O = .obj
1048 E = .exe
1049 P = .pdb
1050 PERLDIR =
1051 PERL = perl.exe
1052
1053 # Uncomment to enable debug symbols
1054 # DEBUG = 1
1055
1056 # Uncomment to enable JSON API
@@ -1057,12 +1064,13 @@
1064
1065 # Uncomment to enable Tcl support
1066 # FOSSIL_ENABLE_TCL = 1
1067
1068 !ifdef FOSSIL_ENABLE_SSL
1069 SSLDIR = $(B)\compat\openssl-1.0.1i
1070 SSLINCDIR = $(SSLDIR)\include
1071 SSLLIBDIR = $(SSLDIR)\out32
1072 SSLLIB = ssleay32.lib libeay32.lib user32.lib gdi32.lib
1073 !endif
1074
1075 !ifdef FOSSIL_ENABLE_TCL
1076 TCLDIR = $(B)\compat\tcl-8.6
@@ -1158,21 +1166,39 @@
1166 writeln -nonewline "\$(OX)\\$s\$O"; incr i
1167 }
1168 writeln " \\"
1169 writeln -nonewline " \$(OX)\\fossil.res\n\n"
1170 writeln {
1171 APPNAME = $(OX)\fossil$(E)
1172 PDBNAME = $(OX)\fossil$(P)
1173 APPTARGETS =
1174
1175 all: $(OX) $(APPNAME)
1176
1177 zlib:
1178 @echo Building zlib from "$(ZLIBDIR)"...
1179 @pushd "$(ZLIBDIR)" && $(MAKE) /f win32\Makefile.msc $(ZLIB) && popd
1180
1181 !ifdef FOSSIL_ENABLE_SSL
1182 openssl:
1183 @echo Building OpenSSL from "$(SSLDIR)"...
1184 !if "$(PERLDIR)" != ""
1185 @set PATH=$(PERLDIR);$(PATH)
1186 !endif
1187 @pushd "$(SSLDIR)" && $(PERL) Configure VC-WIN32 no-asm && popd
1188 @pushd "$(SSLDIR)" && call ms\do_ms.bat && popd
1189 @pushd "$(SSLDIR)" && $(MAKE) /f ms\nt.mak all && popd
1190 !endif
1191
1192 APPTARGETS = $(APPTARGETS) zlib
1193
1194 !ifdef FOSSIL_ENABLE_SSL
1195 APPTARGETS = $(APPTARGETS) openssl
1196 !endif
1197
1198 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts $(APPTARGETS)
1199 cd $(OX)
1200 link $(LDFLAGS) /OUT:$@ $(LIBDIR) Wsetargv.obj fossil.res @linkopts
1201
1202 $(OX)\linkopts: $B\win\Makefile.msc}
1203 set redir {>}
1204 foreach s [lsort [concat $src $AdditionalObj]] {
@@ -1215,11 +1241,11 @@
1241 VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
1242 $** > $@
1243 $(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
1244 $(TCC) /Fo$@ /c $**
1245
1246 page_index.h: mkindex$E $(SRC)
1247 $** > $@
1248
1249 clean:
1250 -del $(OX)\*.obj
1251 -del *.obj
@@ -1333,13 +1359,13 @@
1359 # and
1360 # PellesC 6.00.4
1361 # gmake 3.80
1362 # zlib sources 1.2.5
1363 # Windows 7 Home Premium
1364 #
1365
1366 #
1367 PellesCDir=c:\Programme\PellesC
1368
1369 # Select between 32/64 bit code, default is 32 bit
1370 #TARGETVERSION=64
1371
1372
+2 -2
--- src/manifest.c
+++ src/manifest.c
@@ -1920,12 +1920,12 @@
19201920
db_multi_exec("INSERT OR IGNORE INTO pending_tkt VALUES(%Q)",
19211921
p->zTicketUuid);
19221922
}
19231923
if( p->type==CFTYPE_ATTACHMENT ){
19241924
char *zComment = 0;
1925
- char const isAdd = (p->zAttachSrc && p->zAttachSrc[0]) ? 1 : 0;
1926
- char const attachToType = fossil_is_uuid(p->zAttachTarget)
1925
+ const char isAdd = (p->zAttachSrc && p->zAttachSrc[0]) ? 1 : 0;
1926
+ const char attachToType = fossil_is_uuid(p->zAttachTarget)
19271927
? 't' /* attach to ticket */
19281928
: 'w' /* attach to wiki page */;
19291929
db_multi_exec(
19301930
"INSERT INTO attachment(attachid, mtime, src, target,"
19311931
"filename, comment, user)"
19321932
--- src/manifest.c
+++ src/manifest.c
@@ -1920,12 +1920,12 @@
1920 db_multi_exec("INSERT OR IGNORE INTO pending_tkt VALUES(%Q)",
1921 p->zTicketUuid);
1922 }
1923 if( p->type==CFTYPE_ATTACHMENT ){
1924 char *zComment = 0;
1925 char const isAdd = (p->zAttachSrc && p->zAttachSrc[0]) ? 1 : 0;
1926 char const attachToType = fossil_is_uuid(p->zAttachTarget)
1927 ? 't' /* attach to ticket */
1928 : 'w' /* attach to wiki page */;
1929 db_multi_exec(
1930 "INSERT INTO attachment(attachid, mtime, src, target,"
1931 "filename, comment, user)"
1932
--- src/manifest.c
+++ src/manifest.c
@@ -1920,12 +1920,12 @@
1920 db_multi_exec("INSERT OR IGNORE INTO pending_tkt VALUES(%Q)",
1921 p->zTicketUuid);
1922 }
1923 if( p->type==CFTYPE_ATTACHMENT ){
1924 char *zComment = 0;
1925 const char isAdd = (p->zAttachSrc && p->zAttachSrc[0]) ? 1 : 0;
1926 const char attachToType = fossil_is_uuid(p->zAttachTarget)
1927 ? 't' /* attach to ticket */
1928 : 'w' /* attach to wiki page */;
1929 db_multi_exec(
1930 "INSERT INTO attachment(attachid, mtime, src, target,"
1931 "filename, comment, user)"
1932
+1 -1
--- src/name.c
+++ src/name.c
@@ -309,11 +309,11 @@
309309
** zName does not resolve, 0 is returned. If it is ambiguous, a
310310
** negative value is returned. On success the rid is returned and
311311
** pUuid (if it is not NULL) is set to the a newly-allocated string,
312312
** the full UUID, which must eventually be free()d by the caller.
313313
*/
314
-int name_to_uuid2(char const *zName, const char *zType, char **pUuid){
314
+int name_to_uuid2(const char *zName, const char *zType, char **pUuid){
315315
int rid = symbolic_name_to_rid(zName, zType);
316316
if((rid>0) && pUuid){
317317
*pUuid = db_text(NULL, "SELECT uuid FROM blob WHERE rid=%d", rid);
318318
}
319319
return rid;
320320
--- src/name.c
+++ src/name.c
@@ -309,11 +309,11 @@
309 ** zName does not resolve, 0 is returned. If it is ambiguous, a
310 ** negative value is returned. On success the rid is returned and
311 ** pUuid (if it is not NULL) is set to the a newly-allocated string,
312 ** the full UUID, which must eventually be free()d by the caller.
313 */
314 int name_to_uuid2(char const *zName, const char *zType, char **pUuid){
315 int rid = symbolic_name_to_rid(zName, zType);
316 if((rid>0) && pUuid){
317 *pUuid = db_text(NULL, "SELECT uuid FROM blob WHERE rid=%d", rid);
318 }
319 return rid;
320
--- src/name.c
+++ src/name.c
@@ -309,11 +309,11 @@
309 ** zName does not resolve, 0 is returned. If it is ambiguous, a
310 ** negative value is returned. On success the rid is returned and
311 ** pUuid (if it is not NULL) is set to the a newly-allocated string,
312 ** the full UUID, which must eventually be free()d by the caller.
313 */
314 int name_to_uuid2(const char *zName, const char *zType, char **pUuid){
315 int rid = symbolic_name_to_rid(zName, zType);
316 if((rid>0) && pUuid){
317 *pUuid = db_text(NULL, "SELECT uuid FROM blob WHERE rid=%d", rid);
318 }
319 return rid;
320
+1 -1
--- src/search.c
+++ src/search.c
@@ -191,11 +191,11 @@
191191
Stmt q;
192192
int iBest;
193193
char fAll = NULL != find_option("all", "a", 0); /* If set, do not lop
194194
off the end of the
195195
results. */
196
- char const * zLimit = find_option("limit","n",1);
196
+ const char *zLimit = find_option("limit","n",1);
197197
const char *zWidth = find_option("width","W",1);
198198
int nLimit = zLimit ? atoi(zLimit) : -1000; /* Max number of matching
199199
lines/entries to list */
200200
int width;
201201
if( zWidth ){
202202
--- src/search.c
+++ src/search.c
@@ -191,11 +191,11 @@
191 Stmt q;
192 int iBest;
193 char fAll = NULL != find_option("all", "a", 0); /* If set, do not lop
194 off the end of the
195 results. */
196 char const * zLimit = find_option("limit","n",1);
197 const char *zWidth = find_option("width","W",1);
198 int nLimit = zLimit ? atoi(zLimit) : -1000; /* Max number of matching
199 lines/entries to list */
200 int width;
201 if( zWidth ){
202
--- src/search.c
+++ src/search.c
@@ -191,11 +191,11 @@
191 Stmt q;
192 int iBest;
193 char fAll = NULL != find_option("all", "a", 0); /* If set, do not lop
194 off the end of the
195 results. */
196 const char *zLimit = find_option("limit","n",1);
197 const char *zWidth = find_option("width","W",1);
198 int nLimit = zLimit ? atoi(zLimit) : -1000; /* Max number of matching
199 lines/entries to list */
200 int width;
201 if( zWidth ){
202
+10 -5
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -222,11 +222,11 @@
222222
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
223223
** [sqlite_version()] and [sqlite_source_id()].
224224
*/
225225
#define SQLITE_VERSION "3.8.6"
226226
#define SQLITE_VERSION_NUMBER 3008006
227
-#define SQLITE_SOURCE_ID "2014-08-12 16:13:37 6715991296886c2a02b9a285a1e61189ad1f79c0"
227
+#define SQLITE_SOURCE_ID "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
228228
229229
/*
230230
** CAPI3REF: Run-Time Library Version Numbers
231231
** KEYWORDS: sqlite3_version, sqlite3_sourceid
232232
**
@@ -30152,11 +30152,15 @@
3015230152
){
3015330153
int rc = SQLITE_OK;
3015430154
UNUSED_PARAMETER(NotUsed);
3015530155
SimulateIOError(return SQLITE_IOERR_DELETE);
3015630156
if( osUnlink(zPath)==(-1) ){
30157
- if( errno==ENOENT ){
30157
+ if( errno==ENOENT
30158
+#if OS_VXWORKS
30159
+ || errno==0x380003
30160
+#endif
30161
+ ){
3015830162
rc = SQLITE_IOERR_DELETE_NOENT;
3015930163
}else{
3016030164
rc = unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
3016130165
}
3016230166
return rc;
@@ -57274,11 +57278,12 @@
5727457278
int nSkip = (iChild ? 4 : 0);
5727557279
5727657280
if( *pRC ) return;
5727757281
5727857282
assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
57279
- assert( pPage->nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=10921 );
57283
+ assert( MX_CELL(pPage->pBt)<=10921 );
57284
+ assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB );
5728057285
assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) );
5728157286
assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) );
5728257287
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
5728357288
/* The cell should normally be sized correctly. However, when moving a
5728457289
** malformed cell from a leaf page to an interior page, if the cell size
@@ -71515,11 +71520,11 @@
7151571520
** Reposition cursor P1 so that it points to the smallest entry that
7151671521
** is greater than the key value. If there are no records greater than
7151771522
** the key and P2 is not zero, then jump to P2.
7151871523
**
7151971524
** This opcode leaves the cursor configured to move in forward order,
71520
-** from the begining toward the end. In other words, the cursor is
71525
+** from the beginning toward the end. In other words, the cursor is
7152171526
** configured to use Next, not Prev.
7152271527
**
7152371528
** See also: Found, NotFound, SeekLt, SeekGe, SeekLe
7152471529
*/
7152571530
/* Opcode: SeekLT P1 P2 P3 P4 *
@@ -72532,11 +72537,11 @@
7253272537
** If the table or index is empty and P2>0, then jump immediately to P2.
7253372538
** If P2 is 0 or if the table or index is not empty, fall through
7253472539
** to the following instruction.
7253572540
**
7253672541
** This opcode leaves the cursor configured to move in forward order,
72537
-** from the begining toward the end. In other words, the cursor is
72542
+** from the beginning toward the end. In other words, the cursor is
7253872543
** configured to use Next, not Prev.
7253972544
*/
7254072545
case OP_Rewind: { /* jump */
7254172546
VdbeCursor *pC;
7254272547
BtCursor *pCrsr;
7254372548
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -222,11 +222,11 @@
222 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
223 ** [sqlite_version()] and [sqlite_source_id()].
224 */
225 #define SQLITE_VERSION "3.8.6"
226 #define SQLITE_VERSION_NUMBER 3008006
227 #define SQLITE_SOURCE_ID "2014-08-12 16:13:37 6715991296886c2a02b9a285a1e61189ad1f79c0"
228
229 /*
230 ** CAPI3REF: Run-Time Library Version Numbers
231 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
232 **
@@ -30152,11 +30152,15 @@
30152 ){
30153 int rc = SQLITE_OK;
30154 UNUSED_PARAMETER(NotUsed);
30155 SimulateIOError(return SQLITE_IOERR_DELETE);
30156 if( osUnlink(zPath)==(-1) ){
30157 if( errno==ENOENT ){
 
 
 
 
30158 rc = SQLITE_IOERR_DELETE_NOENT;
30159 }else{
30160 rc = unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
30161 }
30162 return rc;
@@ -57274,11 +57278,12 @@
57274 int nSkip = (iChild ? 4 : 0);
57275
57276 if( *pRC ) return;
57277
57278 assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
57279 assert( pPage->nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=10921 );
 
57280 assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) );
57281 assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) );
57282 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
57283 /* The cell should normally be sized correctly. However, when moving a
57284 ** malformed cell from a leaf page to an interior page, if the cell size
@@ -71515,11 +71520,11 @@
71515 ** Reposition cursor P1 so that it points to the smallest entry that
71516 ** is greater than the key value. If there are no records greater than
71517 ** the key and P2 is not zero, then jump to P2.
71518 **
71519 ** This opcode leaves the cursor configured to move in forward order,
71520 ** from the begining toward the end. In other words, the cursor is
71521 ** configured to use Next, not Prev.
71522 **
71523 ** See also: Found, NotFound, SeekLt, SeekGe, SeekLe
71524 */
71525 /* Opcode: SeekLT P1 P2 P3 P4 *
@@ -72532,11 +72537,11 @@
72532 ** If the table or index is empty and P2>0, then jump immediately to P2.
72533 ** If P2 is 0 or if the table or index is not empty, fall through
72534 ** to the following instruction.
72535 **
72536 ** This opcode leaves the cursor configured to move in forward order,
72537 ** from the begining toward the end. In other words, the cursor is
72538 ** configured to use Next, not Prev.
72539 */
72540 case OP_Rewind: { /* jump */
72541 VdbeCursor *pC;
72542 BtCursor *pCrsr;
72543
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -222,11 +222,11 @@
222 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
223 ** [sqlite_version()] and [sqlite_source_id()].
224 */
225 #define SQLITE_VERSION "3.8.6"
226 #define SQLITE_VERSION_NUMBER 3008006
227 #define SQLITE_SOURCE_ID "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
228
229 /*
230 ** CAPI3REF: Run-Time Library Version Numbers
231 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
232 **
@@ -30152,11 +30152,15 @@
30152 ){
30153 int rc = SQLITE_OK;
30154 UNUSED_PARAMETER(NotUsed);
30155 SimulateIOError(return SQLITE_IOERR_DELETE);
30156 if( osUnlink(zPath)==(-1) ){
30157 if( errno==ENOENT
30158 #if OS_VXWORKS
30159 || errno==0x380003
30160 #endif
30161 ){
30162 rc = SQLITE_IOERR_DELETE_NOENT;
30163 }else{
30164 rc = unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
30165 }
30166 return rc;
@@ -57274,11 +57278,12 @@
57278 int nSkip = (iChild ? 4 : 0);
57279
57280 if( *pRC ) return;
57281
57282 assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
57283 assert( MX_CELL(pPage->pBt)<=10921 );
57284 assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB );
57285 assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) );
57286 assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) );
57287 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
57288 /* The cell should normally be sized correctly. However, when moving a
57289 ** malformed cell from a leaf page to an interior page, if the cell size
@@ -71515,11 +71520,11 @@
71520 ** Reposition cursor P1 so that it points to the smallest entry that
71521 ** is greater than the key value. If there are no records greater than
71522 ** the key and P2 is not zero, then jump to P2.
71523 **
71524 ** This opcode leaves the cursor configured to move in forward order,
71525 ** from the beginning toward the end. In other words, the cursor is
71526 ** configured to use Next, not Prev.
71527 **
71528 ** See also: Found, NotFound, SeekLt, SeekGe, SeekLe
71529 */
71530 /* Opcode: SeekLT P1 P2 P3 P4 *
@@ -72532,11 +72537,11 @@
72537 ** If the table or index is empty and P2>0, then jump immediately to P2.
72538 ** If P2 is 0 or if the table or index is not empty, fall through
72539 ** to the following instruction.
72540 **
72541 ** This opcode leaves the cursor configured to move in forward order,
72542 ** from the beginning toward the end. In other words, the cursor is
72543 ** configured to use Next, not Prev.
72544 */
72545 case OP_Rewind: { /* jump */
72546 VdbeCursor *pC;
72547 BtCursor *pCrsr;
72548
+1 -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.8.6"
111111
#define SQLITE_VERSION_NUMBER 3008006
112
-#define SQLITE_SOURCE_ID "2014-08-12 16:13:37 6715991296886c2a02b9a285a1e61189ad1f79c0"
112
+#define SQLITE_SOURCE_ID "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
113113
114114
/*
115115
** CAPI3REF: Run-Time Library Version Numbers
116116
** KEYWORDS: sqlite3_version, sqlite3_sourceid
117117
**
118118
--- 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.8.6"
111 #define SQLITE_VERSION_NUMBER 3008006
112 #define SQLITE_SOURCE_ID "2014-08-12 16:13:37 6715991296886c2a02b9a285a1e61189ad1f79c0"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
118
--- 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.8.6"
111 #define SQLITE_VERSION_NUMBER 3008006
112 #define SQLITE_SOURCE_ID "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
118
+6 -6
--- src/style.c
+++ src/style.c
@@ -388,11 +388,11 @@
388388
}
389389
style_ad_unit();
390390
@ <div class="content">
391391
cgi_destination(CGI_BODY);
392392
393
- if (sideboxUsed) {
393
+ if( sideboxUsed ){
394394
/* Put the footer at the bottom of the page.
395395
** the additional clear/both is needed to extend the content
396396
** part to the end of an optional sidebox.
397397
*/
398398
@ <div class="endContent"></div>
@@ -657,13 +657,13 @@
657657
/* The following table contains bits of default CSS that must
658658
** be included if they are not found in the application-defined
659659
** CSS.
660660
*/
661661
const struct strctCssDefaults {
662
- char const * const elementClass; /* Name of element needed */
663
- char const * const comment; /* Comment text */
664
- char const * const value; /* CSS text */
662
+ const char *elementClass; /* Name of element needed */
663
+ const char *comment; /* Comment text */
664
+ const char *value; /* CSS text */
665665
} cssDefaultList[] = {
666666
{ "",
667667
"",
668668
zDefaultCSS
669669
},
@@ -1208,12 +1208,12 @@
12081208
** Append all of the default CSS to the CGI output.
12091209
*/
12101210
void cgi_append_default_css(void) {
12111211
int i;
12121212
1213
- for (i=0;cssDefaultList[i].elementClass;i++){
1214
- if (cssDefaultList[i].elementClass[0]){
1213
+ for( i=0; cssDefaultList[i].elementClass; i++ ){
1214
+ if( cssDefaultList[i].elementClass[0] ){
12151215
cgi_printf("/* %s */\n%s {\n%s\n}\n\n",
12161216
cssDefaultList[i].comment,
12171217
cssDefaultList[i].elementClass,
12181218
cssDefaultList[i].value
12191219
);
12201220
--- src/style.c
+++ src/style.c
@@ -388,11 +388,11 @@
388 }
389 style_ad_unit();
390 @ <div class="content">
391 cgi_destination(CGI_BODY);
392
393 if (sideboxUsed) {
394 /* Put the footer at the bottom of the page.
395 ** the additional clear/both is needed to extend the content
396 ** part to the end of an optional sidebox.
397 */
398 @ <div class="endContent"></div>
@@ -657,13 +657,13 @@
657 /* The following table contains bits of default CSS that must
658 ** be included if they are not found in the application-defined
659 ** CSS.
660 */
661 const struct strctCssDefaults {
662 char const * const elementClass; /* Name of element needed */
663 char const * const comment; /* Comment text */
664 char const * const value; /* CSS text */
665 } cssDefaultList[] = {
666 { "",
667 "",
668 zDefaultCSS
669 },
@@ -1208,12 +1208,12 @@
1208 ** Append all of the default CSS to the CGI output.
1209 */
1210 void cgi_append_default_css(void) {
1211 int i;
1212
1213 for (i=0;cssDefaultList[i].elementClass;i++){
1214 if (cssDefaultList[i].elementClass[0]){
1215 cgi_printf("/* %s */\n%s {\n%s\n}\n\n",
1216 cssDefaultList[i].comment,
1217 cssDefaultList[i].elementClass,
1218 cssDefaultList[i].value
1219 );
1220
--- src/style.c
+++ src/style.c
@@ -388,11 +388,11 @@
388 }
389 style_ad_unit();
390 @ <div class="content">
391 cgi_destination(CGI_BODY);
392
393 if( sideboxUsed ){
394 /* Put the footer at the bottom of the page.
395 ** the additional clear/both is needed to extend the content
396 ** part to the end of an optional sidebox.
397 */
398 @ <div class="endContent"></div>
@@ -657,13 +657,13 @@
657 /* The following table contains bits of default CSS that must
658 ** be included if they are not found in the application-defined
659 ** CSS.
660 */
661 const struct strctCssDefaults {
662 const char *elementClass; /* Name of element needed */
663 const char *comment; /* Comment text */
664 const char *value; /* CSS text */
665 } cssDefaultList[] = {
666 { "",
667 "",
668 zDefaultCSS
669 },
@@ -1208,12 +1208,12 @@
1208 ** Append all of the default CSS to the CGI output.
1209 */
1210 void cgi_append_default_css(void) {
1211 int i;
1212
1213 for( i=0; cssDefaultList[i].elementClass; i++ ){
1214 if( cssDefaultList[i].elementClass[0] ){
1215 cgi_printf("/* %s */\n%s {\n%s\n}\n\n",
1216 cssDefaultList[i].comment,
1217 cssDefaultList[i].elementClass,
1218 cssDefaultList[i].value
1219 );
1220
+2 -2
--- src/tag.c
+++ src/tag.c
@@ -354,11 +354,11 @@
354354
**
355355
** List all objects that use TAGNAME. TYPE can be "ci" for
356356
** checkins or "e" for events. The limit option limits the number
357357
** of results to the given value.
358358
**
359
-** %fossil tag list ?--raw? ?CHECK-IN?
359
+** %fossil tag list|ls ?--raw? ?CHECK-IN?
360360
**
361361
** List all tags, or if CHECK-IN is supplied, list
362362
** all tags and their values for CHECK-IN.
363363
**
364364
** The option --raw allows the manipulation of all types of tags
@@ -475,11 +475,11 @@
475475
db_finalize(&q);
476476
}
477477
}
478478
}else
479479
480
- if( strncmp(g.argv[2],"list",n)==0 ){
480
+ if(( strncmp(g.argv[2],"list",n)==0 )||( strncmp(g.argv[2],"ls",n)==0 )){
481481
Stmt q;
482482
if( g.argc==3 ){
483483
db_prepare(&q,
484484
"SELECT tagname FROM tag"
485485
" WHERE EXISTS(SELECT 1 FROM tagxref"
486486
487487
ADDED test/merge6.test
--- src/tag.c
+++ src/tag.c
@@ -354,11 +354,11 @@
354 **
355 ** List all objects that use TAGNAME. TYPE can be "ci" for
356 ** checkins or "e" for events. The limit option limits the number
357 ** of results to the given value.
358 **
359 ** %fossil tag list ?--raw? ?CHECK-IN?
360 **
361 ** List all tags, or if CHECK-IN is supplied, list
362 ** all tags and their values for CHECK-IN.
363 **
364 ** The option --raw allows the manipulation of all types of tags
@@ -475,11 +475,11 @@
475 db_finalize(&q);
476 }
477 }
478 }else
479
480 if( strncmp(g.argv[2],"list",n)==0 ){
481 Stmt q;
482 if( g.argc==3 ){
483 db_prepare(&q,
484 "SELECT tagname FROM tag"
485 " WHERE EXISTS(SELECT 1 FROM tagxref"
486
487 DDED test/merge6.test
--- src/tag.c
+++ src/tag.c
@@ -354,11 +354,11 @@
354 **
355 ** List all objects that use TAGNAME. TYPE can be "ci" for
356 ** checkins or "e" for events. The limit option limits the number
357 ** of results to the given value.
358 **
359 ** %fossil tag list|ls ?--raw? ?CHECK-IN?
360 **
361 ** List all tags, or if CHECK-IN is supplied, list
362 ** all tags and their values for CHECK-IN.
363 **
364 ** The option --raw allows the manipulation of all types of tags
@@ -475,11 +475,11 @@
475 db_finalize(&q);
476 }
477 }
478 }else
479
480 if(( strncmp(g.argv[2],"list",n)==0 )||( strncmp(g.argv[2],"ls",n)==0 )){
481 Stmt q;
482 if( g.argc==3 ){
483 db_prepare(&q,
484 "SELECT tagname FROM tag"
485 " WHERE EXISTS(SELECT 1 FROM tagxref"
486
487 DDED test/merge6.test
--- a/test/merge6.test
+++ b/test/merge6.test
@@ -0,0 +1,59 @@
1
+#
2
+# Copyright (c) 2014 D. Richard Hipp
3
+#
4
+# This program is free software; you can redistribute it and/or
5
+# modify it under the terms of the Simplified BSD License (also
6
+# known as the "2-Clause License" or "FreeBSD License".)
7
+#
8
+# This program is distributed in the hope that it will be useful,
9
+# but without any warranty; without even the implied warranty of
10
+# merchantability or fitness for a particular purpose.
11
+#
12
+# Author contact information:
13
+# [email protected]
14
+# http://www.hwaci.com/drh/
15
+#
16
+############################################################################
17
+#
18
+# Tests of the "merge" command
19
+#
20
+
21
+####################################################################
22
+# TEST 1: Handle multiple merges each with one or more ADDED files #
23
+###########################################repo_init###############
24
+
25
+test_setup
26
+fossil ls
27
+
28
+test merge_multi-0 {[string map [list \r\_multi-0 {[normalize_result] eq {}}
29
+
30
+write_file f1 "f1 line"
31
+fossil add f1
32
+fossil string map [list \r\_multi-1 {[normalize_result] eq {f1}}
33
+
34
+fossil update trunk
35
+write_file f2 "f2 line"
36
+fossil add f2
37
+fossil commit -m "branch for file f2" -b branch_for_f2
38
+fossistring map [list \r\] eq {f1
39
+f2}}
40
+
41
+fossil update trunk
42
+write_file f3 "f3 line"
43
+write_file f4 "f4 line"
44
+fossil add f3
45
+fossil add f4
46
+fossil commit -m "branch for files f3 and f4" -b branch_for_f3_f4
47
+fossil ls
48
+
49
+test merge_multi-3 {[string map [list \r\_multi-3 {[normalize_result] eq {f1
50
+f3
51
+f4}}
52
+
53
+fossil update trunk
54
+fossil merge branch_for_f2
55
+fossil merge branch_for_f3_f4
56
+fossil commit -m "new trunk files f2, string map [list \r\n \n] [string trim $RESULT]] eq {f1
57
+f2
58
+f3
59
+f4}}
--- a/test/merge6.test
+++ b/test/merge6.test
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/test/merge6.test
+++ b/test/merge6.test
@@ -0,0 +1,59 @@
1 #
2 # Copyright (c) 2014 D. Richard Hipp
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the Simplified BSD License (also
6 # known as the "2-Clause License" or "FreeBSD License".)
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but without any warranty; without even the implied warranty of
10 # merchantability or fitness for a particular purpose.
11 #
12 # Author contact information:
13 # [email protected]
14 # http://www.hwaci.com/drh/
15 #
16 ############################################################################
17 #
18 # Tests of the "merge" command
19 #
20
21 ####################################################################
22 # TEST 1: Handle multiple merges each with one or more ADDED files #
23 ###########################################repo_init###############
24
25 test_setup
26 fossil ls
27
28 test merge_multi-0 {[string map [list \r\_multi-0 {[normalize_result] eq {}}
29
30 write_file f1 "f1 line"
31 fossil add f1
32 fossil string map [list \r\_multi-1 {[normalize_result] eq {f1}}
33
34 fossil update trunk
35 write_file f2 "f2 line"
36 fossil add f2
37 fossil commit -m "branch for file f2" -b branch_for_f2
38 fossistring map [list \r\] eq {f1
39 f2}}
40
41 fossil update trunk
42 write_file f3 "f3 line"
43 write_file f4 "f4 line"
44 fossil add f3
45 fossil add f4
46 fossil commit -m "branch for files f3 and f4" -b branch_for_f3_f4
47 fossil ls
48
49 test merge_multi-3 {[string map [list \r\_multi-3 {[normalize_result] eq {f1
50 f3
51 f4}}
52
53 fossil update trunk
54 fossil merge branch_for_f2
55 fossil merge branch_for_f3_f4
56 fossil commit -m "new trunk files f2, string map [list \r\n \n] [string trim $RESULT]] eq {f1
57 f2
58 f3
59 f4}}
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -30,13 +30,13 @@
3030
# and
3131
# PellesC 6.00.4
3232
# gmake 3.80
3333
# zlib sources 1.2.5
3434
# Windows 7 Home Premium
35
-#
35
+#
3636
37
-#
37
+#
3838
PellesCDir=c:\Programme\PellesC
3939
4040
# Select between 32/64 bit code, default is 32 bit
4141
#TARGETVERSION=64
4242
4343
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -30,13 +30,13 @@
30 # and
31 # PellesC 6.00.4
32 # gmake 3.80
33 # zlib sources 1.2.5
34 # Windows 7 Home Premium
35 #
36
37 #
38 PellesCDir=c:\Programme\PellesC
39
40 # Select between 32/64 bit code, default is 32 bit
41 #TARGETVERSION=64
42
43
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -30,13 +30,13 @@
30 # and
31 # PellesC 6.00.4
32 # gmake 3.80
33 # zlib sources 1.2.5
34 # Windows 7 Home Premium
35 #
36
37 #
38 PellesCDir=c:\Programme\PellesC
39
40 # Select between 32/64 bit code, default is 32 bit
41 #TARGETVERSION=64
42
43
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -41,11 +41,11 @@
4141
APPNAME = $(OBJDIR)\fossil$(E)
4242
4343
all: $(APPNAME)
4444
4545
$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OBJDIR)\link
46
- cd $(OBJDIR)
46
+ cd $(OBJDIR)
4747
$(DMDIR)\bin\link @link
4848
4949
$(OBJDIR)\fossil.res: $B\win\fossil.rc
5050
$(RC) $(RCFLAGS) -o$@ $**
5151
@@ -85,11 +85,11 @@
8585
cp $@ $@
8686
8787
VERSION.h : version$E $B\manifest.uuid $B\manifest $B\VERSION
8888
+$** > $@
8989
90
-page_index.h: mkindex$E $(SRC)
90
+page_index.h: mkindex$E $(SRC)
9191
+$** > $@
9292
9393
clean:
9494
-del $(OBJDIR)\*.obj
9595
-del *.obj *_.c *.h *.map
9696
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -41,11 +41,11 @@
41 APPNAME = $(OBJDIR)\fossil$(E)
42
43 all: $(APPNAME)
44
45 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OBJDIR)\link
46 cd $(OBJDIR)
47 $(DMDIR)\bin\link @link
48
49 $(OBJDIR)\fossil.res: $B\win\fossil.rc
50 $(RC) $(RCFLAGS) -o$@ $**
51
@@ -85,11 +85,11 @@
85 cp $@ $@
86
87 VERSION.h : version$E $B\manifest.uuid $B\manifest $B\VERSION
88 +$** > $@
89
90 page_index.h: mkindex$E $(SRC)
91 +$** > $@
92
93 clean:
94 -del $(OBJDIR)\*.obj
95 -del *.obj *_.c *.h *.map
96
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -41,11 +41,11 @@
41 APPNAME = $(OBJDIR)\fossil$(E)
42
43 all: $(APPNAME)
44
45 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OBJDIR)\link
46 cd $(OBJDIR)
47 $(DMDIR)\bin\link @link
48
49 $(OBJDIR)\fossil.res: $B\win\fossil.rc
50 $(RC) $(RCFLAGS) -o$@ $**
51
@@ -85,11 +85,11 @@
85 cp $@ $@
86
87 VERSION.h : version$E $B\manifest.uuid $B\manifest $B\VERSION
88 +$** > $@
89
90 page_index.h: mkindex$E $(SRC)
91 +$** > $@
92
93 clean:
94 -del $(OBJDIR)\*.obj
95 -del *.obj *_.c *.h *.map
96
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -216,25 +216,30 @@
216216
#### We add the -static option here so that we can build a static
217217
# executable that will run in a chroot jail.
218218
#
219219
LIB = -static
220220
221
-# MinGW: If available, use the Unicode capable runtime startup code.
221
+#### MinGW: If available, use the Unicode capable runtime startup code.
222
+#
222223
ifndef MINGW_IS_32BIT_ONLY
223224
LIB += -municode
224225
endif
225226
227
+#### SQLite: If enabled, use the system SQLite library.
228
+#
226229
ifdef USE_SYSTEM_SQLITE
227230
LIB += -lsqlite3
228231
endif
229232
230
-# OpenSSL: Add the necessary libraries required, if enabled.
233
+#### OpenSSL: Add the necessary libraries required, if enabled.
234
+#
231235
ifdef FOSSIL_ENABLE_SSL
232236
LIB += -lssl -lcrypto -lgdi32
233237
endif
234238
235
-# Tcl: Add the necessary libraries required, if enabled.
239
+#### Tcl: Add the necessary libraries required, if enabled.
240
+#
236241
ifdef FOSSIL_ENABLE_TCL
237242
LIB += $(LIBTCL)
238243
endif
239244
240245
#### Extra arguments for linking the finished binary. Fossil needs
241246
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -216,25 +216,30 @@
216 #### We add the -static option here so that we can build a static
217 # executable that will run in a chroot jail.
218 #
219 LIB = -static
220
221 # MinGW: If available, use the Unicode capable runtime startup code.
 
222 ifndef MINGW_IS_32BIT_ONLY
223 LIB += -municode
224 endif
225
 
 
226 ifdef USE_SYSTEM_SQLITE
227 LIB += -lsqlite3
228 endif
229
230 # OpenSSL: Add the necessary libraries required, if enabled.
 
231 ifdef FOSSIL_ENABLE_SSL
232 LIB += -lssl -lcrypto -lgdi32
233 endif
234
235 # Tcl: Add the necessary libraries required, if enabled.
 
236 ifdef FOSSIL_ENABLE_TCL
237 LIB += $(LIBTCL)
238 endif
239
240 #### Extra arguments for linking the finished binary. Fossil needs
241
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -216,25 +216,30 @@
216 #### We add the -static option here so that we can build a static
217 # executable that will run in a chroot jail.
218 #
219 LIB = -static
220
221 #### MinGW: If available, use the Unicode capable runtime startup code.
222 #
223 ifndef MINGW_IS_32BIT_ONLY
224 LIB += -municode
225 endif
226
227 #### SQLite: If enabled, use the system SQLite library.
228 #
229 ifdef USE_SYSTEM_SQLITE
230 LIB += -lsqlite3
231 endif
232
233 #### OpenSSL: Add the necessary libraries required, if enabled.
234 #
235 ifdef FOSSIL_ENABLE_SSL
236 LIB += -lssl -lcrypto -lgdi32
237 endif
238
239 #### Tcl: Add the necessary libraries required, if enabled.
240 #
241 ifdef FOSSIL_ENABLE_TCL
242 LIB += $(LIBTCL)
243 endif
244
245 #### Extra arguments for linking the finished binary. Fossil needs
246
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -216,25 +216,30 @@
216216
#### We add the -static option here so that we can build a static
217217
# executable that will run in a chroot jail.
218218
#
219219
LIB = -static
220220
221
-# MinGW: If available, use the Unicode capable runtime startup code.
221
+#### MinGW: If available, use the Unicode capable runtime startup code.
222
+#
222223
ifndef MINGW_IS_32BIT_ONLY
223224
LIB += -municode
224225
endif
225226
227
+#### SQLite: If enabled, use the system SQLite library.
228
+#
226229
ifdef USE_SYSTEM_SQLITE
227230
LIB += -lsqlite3
228231
endif
229232
230
-# OpenSSL: Add the necessary libraries required, if enabled.
233
+#### OpenSSL: Add the necessary libraries required, if enabled.
234
+#
231235
ifdef FOSSIL_ENABLE_SSL
232236
LIB += -lssl -lcrypto -lgdi32
233237
endif
234238
235
-# Tcl: Add the necessary libraries required, if enabled.
239
+#### Tcl: Add the necessary libraries required, if enabled.
240
+#
236241
ifdef FOSSIL_ENABLE_TCL
237242
LIB += $(LIBTCL)
238243
endif
239244
240245
#### Extra arguments for linking the finished binary. Fossil needs
241246
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -216,25 +216,30 @@
216 #### We add the -static option here so that we can build a static
217 # executable that will run in a chroot jail.
218 #
219 LIB = -static
220
221 # MinGW: If available, use the Unicode capable runtime startup code.
 
222 ifndef MINGW_IS_32BIT_ONLY
223 LIB += -municode
224 endif
225
 
 
226 ifdef USE_SYSTEM_SQLITE
227 LIB += -lsqlite3
228 endif
229
230 # OpenSSL: Add the necessary libraries required, if enabled.
 
231 ifdef FOSSIL_ENABLE_SSL
232 LIB += -lssl -lcrypto -lgdi32
233 endif
234
235 # Tcl: Add the necessary libraries required, if enabled.
 
236 ifdef FOSSIL_ENABLE_TCL
237 LIB += $(LIBTCL)
238 endif
239
240 #### Extra arguments for linking the finished binary. Fossil needs
241
--- win/Makefile.mingw.mistachkin
+++ win/Makefile.mingw.mistachkin
@@ -216,25 +216,30 @@
216 #### We add the -static option here so that we can build a static
217 # executable that will run in a chroot jail.
218 #
219 LIB = -static
220
221 #### MinGW: If available, use the Unicode capable runtime startup code.
222 #
223 ifndef MINGW_IS_32BIT_ONLY
224 LIB += -municode
225 endif
226
227 #### SQLite: If enabled, use the system SQLite library.
228 #
229 ifdef USE_SYSTEM_SQLITE
230 LIB += -lsqlite3
231 endif
232
233 #### OpenSSL: Add the necessary libraries required, if enabled.
234 #
235 ifdef FOSSIL_ENABLE_SSL
236 LIB += -lssl -lcrypto -lgdi32
237 endif
238
239 #### Tcl: Add the necessary libraries required, if enabled.
240 #
241 ifdef FOSSIL_ENABLE_TCL
242 LIB += $(LIBTCL)
243 endif
244
245 #### Extra arguments for linking the finished binary. Fossil needs
246
+36 -15
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -5,17 +5,19 @@
55
#
66
# This file is automatically generated. Instead of editing this
77
# file, edit "makemake.tcl" then run "tclsh makemake.tcl"
88
# to regenerate this file.
99
#
10
-B = ..
11
-SRCDIR = $B\src
12
-OBJDIR = .
13
-OX = .
14
-O = .obj
15
-E = .exe
16
-P = .pdb
10
+B = ..
11
+SRCDIR = $B\src
12
+OBJDIR = .
13
+OX = .
14
+O = .obj
15
+E = .exe
16
+P = .pdb
17
+PERLDIR =
18
+PERL = perl.exe
1719
1820
# Uncomment to enable debug symbols
1921
# DEBUG = 1
2022
2123
# Uncomment to enable JSON API
@@ -29,12 +31,13 @@
2931
3032
# Uncomment to enable Tcl support
3133
# FOSSIL_ENABLE_TCL = 1
3234
3335
!ifdef FOSSIL_ENABLE_SSL
34
-SSLINCDIR = $(B)\compat\openssl-1.0.1i\include
35
-SSLLIBDIR = $(B)\compat\openssl-1.0.1i\out32
36
+SSLDIR = $(B)\compat\openssl-1.0.1i
37
+SSLINCDIR = $(SSLDIR)\include
38
+SSLLIBDIR = $(SSLDIR)\out32
3639
SSLLIB = ssleay32.lib libeay32.lib user32.lib gdi32.lib
3740
!endif
3841
3942
!ifdef FOSSIL_ENABLE_TCL
4043
TCLDIR = $(B)\compat\tcl-8.6
@@ -349,21 +352,39 @@
349352
$(OX)\xfersetup$O \
350353
$(OX)\zip$O \
351354
$(OX)\fossil.res
352355
353356
354
-APPNAME = $(OX)\fossil$(E)
355
-PDBNAME = $(OX)\fossil$(P)
357
+APPNAME = $(OX)\fossil$(E)
358
+PDBNAME = $(OX)\fossil$(P)
359
+APPTARGETS =
356360
357361
all: $(OX) $(APPNAME)
358362
359363
zlib:
360364
@echo Building zlib from "$(ZLIBDIR)"...
361
- @pushd "$(ZLIBDIR)" && nmake /f win32\Makefile.msc $(ZLIB) && popd
365
+ @pushd "$(ZLIBDIR)" && $(MAKE) /f win32\Makefile.msc $(ZLIB) && popd
362366
363
-$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts zlib
364
- cd $(OX)
367
+!ifdef FOSSIL_ENABLE_SSL
368
+openssl:
369
+ @echo Building OpenSSL from "$(SSLDIR)"...
370
+!if "$(PERLDIR)" != ""
371
+ @set PATH=$(PERLDIR);$(PATH)
372
+!endif
373
+ @pushd "$(SSLDIR)" && $(PERL) Configure VC-WIN32 no-asm && popd
374
+ @pushd "$(SSLDIR)" && call ms\do_ms.bat && popd
375
+ @pushd "$(SSLDIR)" && $(MAKE) /f ms\nt.mak all && popd
376
+!endif
377
+
378
+APPTARGETS = $(APPTARGETS) zlib
379
+
380
+!ifdef FOSSIL_ENABLE_SSL
381
+APPTARGETS = $(APPTARGETS) openssl
382
+!endif
383
+
384
+$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts $(APPTARGETS)
385
+ cd $(OX)
365386
link $(LDFLAGS) /OUT:$@ $(LIBDIR) Wsetargv.obj fossil.res @linkopts
366387
367388
$(OX)\linkopts: $B\win\Makefile.msc
368389
echo $(OX)\add.obj > $@
369390
echo $(OX)\allrepo.obj >> $@
@@ -517,11 +538,11 @@
517538
VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
518539
$** > $@
519540
$(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
520541
$(TCC) /Fo$@ /c $**
521542
522
-page_index.h: mkindex$E $(SRC)
543
+page_index.h: mkindex$E $(SRC)
523544
$** > $@
524545
525546
clean:
526547
-del $(OX)\*.obj
527548
-del *.obj
528549
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -5,17 +5,19 @@
5 #
6 # This file is automatically generated. Instead of editing this
7 # file, edit "makemake.tcl" then run "tclsh makemake.tcl"
8 # to regenerate this file.
9 #
10 B = ..
11 SRCDIR = $B\src
12 OBJDIR = .
13 OX = .
14 O = .obj
15 E = .exe
16 P = .pdb
 
 
17
18 # Uncomment to enable debug symbols
19 # DEBUG = 1
20
21 # Uncomment to enable JSON API
@@ -29,12 +31,13 @@
29
30 # Uncomment to enable Tcl support
31 # FOSSIL_ENABLE_TCL = 1
32
33 !ifdef FOSSIL_ENABLE_SSL
34 SSLINCDIR = $(B)\compat\openssl-1.0.1i\include
35 SSLLIBDIR = $(B)\compat\openssl-1.0.1i\out32
 
36 SSLLIB = ssleay32.lib libeay32.lib user32.lib gdi32.lib
37 !endif
38
39 !ifdef FOSSIL_ENABLE_TCL
40 TCLDIR = $(B)\compat\tcl-8.6
@@ -349,21 +352,39 @@
349 $(OX)\xfersetup$O \
350 $(OX)\zip$O \
351 $(OX)\fossil.res
352
353
354 APPNAME = $(OX)\fossil$(E)
355 PDBNAME = $(OX)\fossil$(P)
 
356
357 all: $(OX) $(APPNAME)
358
359 zlib:
360 @echo Building zlib from "$(ZLIBDIR)"...
361 @pushd "$(ZLIBDIR)" && nmake /f win32\Makefile.msc $(ZLIB) && popd
362
363 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts zlib
364 cd $(OX)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
365 link $(LDFLAGS) /OUT:$@ $(LIBDIR) Wsetargv.obj fossil.res @linkopts
366
367 $(OX)\linkopts: $B\win\Makefile.msc
368 echo $(OX)\add.obj > $@
369 echo $(OX)\allrepo.obj >> $@
@@ -517,11 +538,11 @@
517 VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
518 $** > $@
519 $(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
520 $(TCC) /Fo$@ /c $**
521
522 page_index.h: mkindex$E $(SRC)
523 $** > $@
524
525 clean:
526 -del $(OX)\*.obj
527 -del *.obj
528
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -5,17 +5,19 @@
5 #
6 # This file is automatically generated. Instead of editing this
7 # file, edit "makemake.tcl" then run "tclsh makemake.tcl"
8 # to regenerate this file.
9 #
10 B = ..
11 SRCDIR = $B\src
12 OBJDIR = .
13 OX = .
14 O = .obj
15 E = .exe
16 P = .pdb
17 PERLDIR =
18 PERL = perl.exe
19
20 # Uncomment to enable debug symbols
21 # DEBUG = 1
22
23 # Uncomment to enable JSON API
@@ -29,12 +31,13 @@
31
32 # Uncomment to enable Tcl support
33 # FOSSIL_ENABLE_TCL = 1
34
35 !ifdef FOSSIL_ENABLE_SSL
36 SSLDIR = $(B)\compat\openssl-1.0.1i
37 SSLINCDIR = $(SSLDIR)\include
38 SSLLIBDIR = $(SSLDIR)\out32
39 SSLLIB = ssleay32.lib libeay32.lib user32.lib gdi32.lib
40 !endif
41
42 !ifdef FOSSIL_ENABLE_TCL
43 TCLDIR = $(B)\compat\tcl-8.6
@@ -349,21 +352,39 @@
352 $(OX)\xfersetup$O \
353 $(OX)\zip$O \
354 $(OX)\fossil.res
355
356
357 APPNAME = $(OX)\fossil$(E)
358 PDBNAME = $(OX)\fossil$(P)
359 APPTARGETS =
360
361 all: $(OX) $(APPNAME)
362
363 zlib:
364 @echo Building zlib from "$(ZLIBDIR)"...
365 @pushd "$(ZLIBDIR)" && $(MAKE) /f win32\Makefile.msc $(ZLIB) && popd
366
367 !ifdef FOSSIL_ENABLE_SSL
368 openssl:
369 @echo Building OpenSSL from "$(SSLDIR)"...
370 !if "$(PERLDIR)" != ""
371 @set PATH=$(PERLDIR);$(PATH)
372 !endif
373 @pushd "$(SSLDIR)" && $(PERL) Configure VC-WIN32 no-asm && popd
374 @pushd "$(SSLDIR)" && call ms\do_ms.bat && popd
375 @pushd "$(SSLDIR)" && $(MAKE) /f ms\nt.mak all && popd
376 !endif
377
378 APPTARGETS = $(APPTARGETS) zlib
379
380 !ifdef FOSSIL_ENABLE_SSL
381 APPTARGETS = $(APPTARGETS) openssl
382 !endif
383
384 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts $(APPTARGETS)
385 cd $(OX)
386 link $(LDFLAGS) /OUT:$@ $(LIBDIR) Wsetargv.obj fossil.res @linkopts
387
388 $(OX)\linkopts: $B\win\Makefile.msc
389 echo $(OX)\add.obj > $@
390 echo $(OX)\allrepo.obj >> $@
@@ -517,11 +538,11 @@
538 VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
539 $** > $@
540 $(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
541 $(TCC) /Fo$@ /c $**
542
543 page_index.h: mkindex$E $(SRC)
544 $** > $@
545
546 clean:
547 -del $(OX)\*.obj
548 -del *.obj
549
+3 -3
--- win/fossil.rc
+++ win/fossil.rc
@@ -105,11 +105,11 @@
105105
#endif /* defined(FOSSIL_ENABLE_SSL) */
106106
#if defined(FOSSIL_ENABLE_TH1_HOOKS)
107107
VALUE "Th1Hooks", "Yes\0"
108108
#else
109109
VALUE "Th1Hooks", "No\0"
110
-#endif
110
+#endif /* defined(FOSSIL_ENABLE_TH1_HOOKS) */
111111
#if defined(FOSSIL_ENABLE_TCL)
112112
VALUE "TclEnabled", "Yes, Tcl " TCL_PATCH_LEVEL "\0"
113113
#if defined(USE_TCL_STUBS)
114114
VALUE "UseTclStubsEnabled", "Yes\0"
115115
#else
@@ -142,12 +142,12 @@
142142
* This embedded manifest is needed for Windows 8.1.
143143
*/
144144
145145
#ifndef RT_MANIFEST
146146
#define RT_MANIFEST 24
147
-#endif
147
+#endif /* RT_MANIFEST */
148148
149149
#ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
150150
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
151
-#endif
151
+#endif /* CREATEPROCESS_MANIFEST_RESOURCE_ID */
152152
153153
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "fossil.exe.manifest"
154154
--- win/fossil.rc
+++ win/fossil.rc
@@ -105,11 +105,11 @@
105 #endif /* defined(FOSSIL_ENABLE_SSL) */
106 #if defined(FOSSIL_ENABLE_TH1_HOOKS)
107 VALUE "Th1Hooks", "Yes\0"
108 #else
109 VALUE "Th1Hooks", "No\0"
110 #endif
111 #if defined(FOSSIL_ENABLE_TCL)
112 VALUE "TclEnabled", "Yes, Tcl " TCL_PATCH_LEVEL "\0"
113 #if defined(USE_TCL_STUBS)
114 VALUE "UseTclStubsEnabled", "Yes\0"
115 #else
@@ -142,12 +142,12 @@
142 * This embedded manifest is needed for Windows 8.1.
143 */
144
145 #ifndef RT_MANIFEST
146 #define RT_MANIFEST 24
147 #endif
148
149 #ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
150 #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
151 #endif
152
153 CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "fossil.exe.manifest"
154
--- win/fossil.rc
+++ win/fossil.rc
@@ -105,11 +105,11 @@
105 #endif /* defined(FOSSIL_ENABLE_SSL) */
106 #if defined(FOSSIL_ENABLE_TH1_HOOKS)
107 VALUE "Th1Hooks", "Yes\0"
108 #else
109 VALUE "Th1Hooks", "No\0"
110 #endif /* defined(FOSSIL_ENABLE_TH1_HOOKS) */
111 #if defined(FOSSIL_ENABLE_TCL)
112 VALUE "TclEnabled", "Yes, Tcl " TCL_PATCH_LEVEL "\0"
113 #if defined(USE_TCL_STUBS)
114 VALUE "UseTclStubsEnabled", "Yes\0"
115 #else
@@ -142,12 +142,12 @@
142 * This embedded manifest is needed for Windows 8.1.
143 */
144
145 #ifndef RT_MANIFEST
146 #define RT_MANIFEST 24
147 #endif /* RT_MANIFEST */
148
149 #ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
150 #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
151 #endif /* CREATEPROCESS_MANIFEST_RESOURCE_ID */
152
153 CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "fossil.exe.manifest"
154
+18 -4
--- www/build.wiki
+++ www/build.wiki
@@ -112,15 +112,29 @@
112112
"<b>make -f win/Makefile.mingw</b>". On a Windows box you will
113113
need either Cygwin or Msys as build environment. On Cygwin, Linux
114114
or Darwin you may want to make minor edits to win/Makefile.mingw
115115
to configure the cross-compile environment.
116116
117
-<li><p><i>MSVC</i> → Use the msc makefile. First
117
+<li><p><i>MSVC</i> → Use the MSVC makefile. First
118118
change to the "win/" subdirectory ("<b>cd win</b>") then run
119
-"<b>nmake /f Makefile.msc</b>". Alternatively, the batch file
120
-"<b>win\buildmsvc.bat</b>" may be used and it will attempt to
121
-detect and use the latest installed version of MSVC.
119
+"<b>nmake /f Makefile.msc</b>".<br><br>Alternatively, the batch
120
+file "<b>win\buildmsvc.bat</b>" may be used and it will attempt to
121
+detect and use the latest installed version of MSVC.<br><br>To enable
122
+the optional <a href="https://www.openssl.org/">OpenSSL</a> support,
123
+first <a href="https://www.openssl.org/source/">download the official
124
+source code for OpenSSL</a> and extract it to an appropriately named
125
+"<b>openssl-X.Y.ZA</b>" subdirectory within the local
126
+[/tree?ci=trunk&name=compat | compat] directory (e.g.
127
+"<b>compat/openssl-1.0.1i</b>"), then make sure that some recent
128
+<a href="http://www.perl.org/">Perl</a> binaries are installed locally,
129
+and finally run one of the following commands:
130
+<blockquote><pre>
131
+nmake /f Makefile.msc FOSSIL_ENABLE_SSL=1 PERLDIR=C:\full\path\to\Perl\bin
132
+</pre></blockquote>
133
+<blockquote><pre>
134
+buildmsvc.bat FOSSIL_ENABLE_SSL=1 PERLDIR=C:\full\path\to\Perl\bin
135
+</pre></blockquote>
122136
123137
<li><p><i>Cygwin</i> → The same as other unix-like systems. It is
124138
recommended to configure using: "<b>configure --disable-internal-sqlite</b>",
125139
making sure you have the "libsqlite3-devel" , "zlib-devel" and
126140
"openssl-devel" packages installed first.
127141
--- www/build.wiki
+++ www/build.wiki
@@ -112,15 +112,29 @@
112 "<b>make -f win/Makefile.mingw</b>". On a Windows box you will
113 need either Cygwin or Msys as build environment. On Cygwin, Linux
114 or Darwin you may want to make minor edits to win/Makefile.mingw
115 to configure the cross-compile environment.
116
117 <li><p><i>MSVC</i> → Use the msc makefile. First
118 change to the "win/" subdirectory ("<b>cd win</b>") then run
119 "<b>nmake /f Makefile.msc</b>". Alternatively, the batch file
120 "<b>win\buildmsvc.bat</b>" may be used and it will attempt to
121 detect and use the latest installed version of MSVC.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
123 <li><p><i>Cygwin</i> → The same as other unix-like systems. It is
124 recommended to configure using: "<b>configure --disable-internal-sqlite</b>",
125 making sure you have the "libsqlite3-devel" , "zlib-devel" and
126 "openssl-devel" packages installed first.
127
--- www/build.wiki
+++ www/build.wiki
@@ -112,15 +112,29 @@
112 "<b>make -f win/Makefile.mingw</b>". On a Windows box you will
113 need either Cygwin or Msys as build environment. On Cygwin, Linux
114 or Darwin you may want to make minor edits to win/Makefile.mingw
115 to configure the cross-compile environment.
116
117 <li><p><i>MSVC</i> → Use the MSVC makefile. First
118 change to the "win/" subdirectory ("<b>cd win</b>") then run
119 "<b>nmake /f Makefile.msc</b>".<br><br>Alternatively, the batch
120 file "<b>win\buildmsvc.bat</b>" may be used and it will attempt to
121 detect and use the latest installed version of MSVC.<br><br>To enable
122 the optional <a href="https://www.openssl.org/">OpenSSL</a> support,
123 first <a href="https://www.openssl.org/source/">download the official
124 source code for OpenSSL</a> and extract it to an appropriately named
125 "<b>openssl-X.Y.ZA</b>" subdirectory within the local
126 [/tree?ci=trunk&name=compat | compat] directory (e.g.
127 "<b>compat/openssl-1.0.1i</b>"), then make sure that some recent
128 <a href="http://www.perl.org/">Perl</a> binaries are installed locally,
129 and finally run one of the following commands:
130 <blockquote><pre>
131 nmake /f Makefile.msc FOSSIL_ENABLE_SSL=1 PERLDIR=C:\full\path\to\Perl\bin
132 </pre></blockquote>
133 <blockquote><pre>
134 buildmsvc.bat FOSSIL_ENABLE_SSL=1 PERLDIR=C:\full\path\to\Perl\bin
135 </pre></blockquote>
136
137 <li><p><i>Cygwin</i> → The same as other unix-like systems. It is
138 recommended to configure using: "<b>configure --disable-internal-sqlite</b>",
139 making sure you have the "libsqlite3-devel" , "zlib-devel" and
140 "openssl-devel" packages installed first.
141
--- www/changes.wiki
+++ www/changes.wiki
@@ -20,10 +20,12 @@
2020
* Let [/help?cmd=new|fossil new] no longer create an initial empty commit
2121
by default. The first commit after checking out an empty repository will
2222
become the initial commit. (NOT PLANNED FOR 1.30, BUT DONE TO EXPOSE
2323
[/help?cmd=new|fossil new --empty] TO MORE FIELD TESTING BEFORE
2424
MAKING ANY DECISION ON IT!)
25
+ * Added a line-number toggle option to the [/help?cmd=/info|/info]
26
+ and [/help?cmd=/artifact|/artifact] pages.
2527
2628
<h2>Changes For Version 1.29 (2014-06-12)</h2>
2729
* Add the ability to display content, diffs and annotations for UTF16
2830
text files in the web interface.
2931
* Add the "SaveAs..." and "Invert" buttons
3032
--- www/changes.wiki
+++ www/changes.wiki
@@ -20,10 +20,12 @@
20 * Let [/help?cmd=new|fossil new] no longer create an initial empty commit
21 by default. The first commit after checking out an empty repository will
22 become the initial commit. (NOT PLANNED FOR 1.30, BUT DONE TO EXPOSE
23 [/help?cmd=new|fossil new --empty] TO MORE FIELD TESTING BEFORE
24 MAKING ANY DECISION ON IT!)
 
 
25
26 <h2>Changes For Version 1.29 (2014-06-12)</h2>
27 * Add the ability to display content, diffs and annotations for UTF16
28 text files in the web interface.
29 * Add the "SaveAs..." and "Invert" buttons
30
--- www/changes.wiki
+++ www/changes.wiki
@@ -20,10 +20,12 @@
20 * Let [/help?cmd=new|fossil new] no longer create an initial empty commit
21 by default. The first commit after checking out an empty repository will
22 become the initial commit. (NOT PLANNED FOR 1.30, BUT DONE TO EXPOSE
23 [/help?cmd=new|fossil new --empty] TO MORE FIELD TESTING BEFORE
24 MAKING ANY DECISION ON IT!)
25 * Added a line-number toggle option to the [/help?cmd=/info|/info]
26 and [/help?cmd=/artifact|/artifact] pages.
27
28 <h2>Changes For Version 1.29 (2014-06-12)</h2>
29 * Add the ability to display content, diffs and annotations for UTF16
30 text files in the web interface.
31 * Add the "SaveAs..." and "Invert" buttons
32

Keyboard Shortcuts

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