Fossil SCM
Merge trunk. Make sure that "fossil forget" and "fossil rename" are unaffected by any setting. (I'm not sure this is the way to go .....)
Commit
0701c1a3f5b583e3fc11add5a90728b49b8b12a3
Parent
17eb0bdcc4afb0f…
18 files changed
+9
-5
+9
-5
+1
-1
+8
-6
+3
-3
+5
-1
+1
-1
+38
-10
+5
-5
+5
-5
+1
-1
+9
-9
+3
-3
+5
-1
+6
+6
+1
-1
+3
+9
-5
| --- src/add.c | ||
| +++ src/add.c | ||
| @@ -413,14 +413,14 @@ | ||
| 413 | 413 | } |
| 414 | 414 | } |
| 415 | 415 | |
| 416 | 416 | /* |
| 417 | 417 | ** COMMAND: rm |
| 418 | -** COMMAND: delete* | |
| 418 | +** COMMAND: delete | |
| 419 | +** COMMAND: forget* | |
| 419 | 420 | ** |
| 420 | -** Usage: %fossil rm FILE1 ?FILE2 ...? | |
| 421 | -** or: %fossil delete FILE1 ?FILE2 ...? | |
| 421 | +** Usage: %fossil rm|delete|forget FILE1 ?FILE2 ...? | |
| 422 | 422 | ** |
| 423 | 423 | ** Remove one or more files or directories from the repository. |
| 424 | 424 | ** |
| 425 | 425 | ** This command does NOT remove the files from disk. It just marks the |
| 426 | 426 | ** files as no longer being part of the project. In other words, future |
| @@ -451,11 +451,13 @@ | ||
| 451 | 451 | /* We should be done with options.. */ |
| 452 | 452 | verify_all_options(); |
| 453 | 453 | |
| 454 | 454 | db_must_be_within_tree(); |
| 455 | 455 | db_begin_transaction(); |
| 456 | - if( zMetadataOnly ){ | |
| 456 | + if(g.argv[1][0]=='f'){ | |
| 457 | + removeFiles = 0; | |
| 458 | + }else if( zMetadataOnly ){ | |
| 457 | 459 | removeFiles = is_false(zMetadataOnly); |
| 458 | 460 | }else{ |
| 459 | 461 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 460 | 462 | removeFiles = db_get_boolean("remove-files",0); |
| 461 | 463 | #else |
| @@ -814,11 +816,13 @@ | ||
| 814 | 816 | if( g.argc<4 ){ |
| 815 | 817 | usage("OLDNAME NEWNAME"); |
| 816 | 818 | } |
| 817 | 819 | zDest = g.argv[g.argc-1]; |
| 818 | 820 | db_begin_transaction(); |
| 819 | - if( zMetadataOnly ){ | |
| 821 | + if(g.argv[1][0]=='r'){ | |
| 822 | + moveFiles = 0; | |
| 823 | + }else if( zMetadataOnly ){ | |
| 820 | 824 | moveFiles = is_false(zMetadataOnly); |
| 821 | 825 | }else{ |
| 822 | 826 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 823 | 827 | moveFiles = db_get_boolean("move-files",0); |
| 824 | 828 | #else |
| 825 | 829 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -413,14 +413,14 @@ | |
| 413 | } |
| 414 | } |
| 415 | |
| 416 | /* |
| 417 | ** COMMAND: rm |
| 418 | ** COMMAND: delete* |
| 419 | ** |
| 420 | ** Usage: %fossil rm FILE1 ?FILE2 ...? |
| 421 | ** or: %fossil delete FILE1 ?FILE2 ...? |
| 422 | ** |
| 423 | ** Remove one or more files or directories from the repository. |
| 424 | ** |
| 425 | ** This command does NOT remove the files from disk. It just marks the |
| 426 | ** files as no longer being part of the project. In other words, future |
| @@ -451,11 +451,13 @@ | |
| 451 | /* We should be done with options.. */ |
| 452 | verify_all_options(); |
| 453 | |
| 454 | db_must_be_within_tree(); |
| 455 | db_begin_transaction(); |
| 456 | if( zMetadataOnly ){ |
| 457 | removeFiles = is_false(zMetadataOnly); |
| 458 | }else{ |
| 459 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 460 | removeFiles = db_get_boolean("remove-files",0); |
| 461 | #else |
| @@ -814,11 +816,13 @@ | |
| 814 | if( g.argc<4 ){ |
| 815 | usage("OLDNAME NEWNAME"); |
| 816 | } |
| 817 | zDest = g.argv[g.argc-1]; |
| 818 | db_begin_transaction(); |
| 819 | if( zMetadataOnly ){ |
| 820 | moveFiles = is_false(zMetadataOnly); |
| 821 | }else{ |
| 822 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 823 | moveFiles = db_get_boolean("move-files",0); |
| 824 | #else |
| 825 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -413,14 +413,14 @@ | |
| 413 | } |
| 414 | } |
| 415 | |
| 416 | /* |
| 417 | ** COMMAND: rm |
| 418 | ** COMMAND: delete |
| 419 | ** COMMAND: forget* |
| 420 | ** |
| 421 | ** Usage: %fossil rm|delete|forget FILE1 ?FILE2 ...? |
| 422 | ** |
| 423 | ** Remove one or more files or directories from the repository. |
| 424 | ** |
| 425 | ** This command does NOT remove the files from disk. It just marks the |
| 426 | ** files as no longer being part of the project. In other words, future |
| @@ -451,11 +451,13 @@ | |
| 451 | /* We should be done with options.. */ |
| 452 | verify_all_options(); |
| 453 | |
| 454 | db_must_be_within_tree(); |
| 455 | db_begin_transaction(); |
| 456 | if(g.argv[1][0]=='f'){ |
| 457 | removeFiles = 0; |
| 458 | }else if( zMetadataOnly ){ |
| 459 | removeFiles = is_false(zMetadataOnly); |
| 460 | }else{ |
| 461 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 462 | removeFiles = db_get_boolean("remove-files",0); |
| 463 | #else |
| @@ -814,11 +816,13 @@ | |
| 816 | if( g.argc<4 ){ |
| 817 | usage("OLDNAME NEWNAME"); |
| 818 | } |
| 819 | zDest = g.argv[g.argc-1]; |
| 820 | db_begin_transaction(); |
| 821 | if(g.argv[1][0]=='r'){ |
| 822 | moveFiles = 0; |
| 823 | }else if( zMetadataOnly ){ |
| 824 | moveFiles = is_false(zMetadataOnly); |
| 825 | }else{ |
| 826 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 827 | moveFiles = db_get_boolean("move-files",0); |
| 828 | #else |
| 829 |
+9
-5
| --- src/add.c | ||
| +++ src/add.c | ||
| @@ -413,14 +413,14 @@ | ||
| 413 | 413 | } |
| 414 | 414 | } |
| 415 | 415 | |
| 416 | 416 | /* |
| 417 | 417 | ** COMMAND: rm |
| 418 | -** COMMAND: delete* | |
| 418 | +** COMMAND: delete | |
| 419 | +** COMMAND: forget* | |
| 419 | 420 | ** |
| 420 | -** Usage: %fossil rm FILE1 ?FILE2 ...? | |
| 421 | -** or: %fossil delete FILE1 ?FILE2 ...? | |
| 421 | +** Usage: %fossil rm|delete|forget FILE1 ?FILE2 ...? | |
| 422 | 422 | ** |
| 423 | 423 | ** Remove one or more files or directories from the repository. |
| 424 | 424 | ** |
| 425 | 425 | ** This command does NOT remove the files from disk. It just marks the |
| 426 | 426 | ** files as no longer being part of the project. In other words, future |
| @@ -451,11 +451,13 @@ | ||
| 451 | 451 | /* We should be done with options.. */ |
| 452 | 452 | verify_all_options(); |
| 453 | 453 | |
| 454 | 454 | db_must_be_within_tree(); |
| 455 | 455 | db_begin_transaction(); |
| 456 | - if( zMetadataOnly ){ | |
| 456 | + if(g.argv[1][0]=='f'){ | |
| 457 | + removeFiles = 0; | |
| 458 | + }else if( zMetadataOnly ){ | |
| 457 | 459 | removeFiles = is_false(zMetadataOnly); |
| 458 | 460 | }else{ |
| 459 | 461 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 460 | 462 | removeFiles = db_get_boolean("remove-files",0); |
| 461 | 463 | #else |
| @@ -814,11 +816,13 @@ | ||
| 814 | 816 | if( g.argc<4 ){ |
| 815 | 817 | usage("OLDNAME NEWNAME"); |
| 816 | 818 | } |
| 817 | 819 | zDest = g.argv[g.argc-1]; |
| 818 | 820 | db_begin_transaction(); |
| 819 | - if( zMetadataOnly ){ | |
| 821 | + if(g.argv[1][0]=='r'){ | |
| 822 | + moveFiles = 0; | |
| 823 | + }else if( zMetadataOnly ){ | |
| 820 | 824 | moveFiles = is_false(zMetadataOnly); |
| 821 | 825 | }else{ |
| 822 | 826 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 823 | 827 | moveFiles = db_get_boolean("move-files",0); |
| 824 | 828 | #else |
| 825 | 829 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -413,14 +413,14 @@ | |
| 413 | } |
| 414 | } |
| 415 | |
| 416 | /* |
| 417 | ** COMMAND: rm |
| 418 | ** COMMAND: delete* |
| 419 | ** |
| 420 | ** Usage: %fossil rm FILE1 ?FILE2 ...? |
| 421 | ** or: %fossil delete FILE1 ?FILE2 ...? |
| 422 | ** |
| 423 | ** Remove one or more files or directories from the repository. |
| 424 | ** |
| 425 | ** This command does NOT remove the files from disk. It just marks the |
| 426 | ** files as no longer being part of the project. In other words, future |
| @@ -451,11 +451,13 @@ | |
| 451 | /* We should be done with options.. */ |
| 452 | verify_all_options(); |
| 453 | |
| 454 | db_must_be_within_tree(); |
| 455 | db_begin_transaction(); |
| 456 | if( zMetadataOnly ){ |
| 457 | removeFiles = is_false(zMetadataOnly); |
| 458 | }else{ |
| 459 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 460 | removeFiles = db_get_boolean("remove-files",0); |
| 461 | #else |
| @@ -814,11 +816,13 @@ | |
| 814 | if( g.argc<4 ){ |
| 815 | usage("OLDNAME NEWNAME"); |
| 816 | } |
| 817 | zDest = g.argv[g.argc-1]; |
| 818 | db_begin_transaction(); |
| 819 | if( zMetadataOnly ){ |
| 820 | moveFiles = is_false(zMetadataOnly); |
| 821 | }else{ |
| 822 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 823 | moveFiles = db_get_boolean("move-files",0); |
| 824 | #else |
| 825 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -413,14 +413,14 @@ | |
| 413 | } |
| 414 | } |
| 415 | |
| 416 | /* |
| 417 | ** COMMAND: rm |
| 418 | ** COMMAND: delete |
| 419 | ** COMMAND: forget* |
| 420 | ** |
| 421 | ** Usage: %fossil rm|delete|forget FILE1 ?FILE2 ...? |
| 422 | ** |
| 423 | ** Remove one or more files or directories from the repository. |
| 424 | ** |
| 425 | ** This command does NOT remove the files from disk. It just marks the |
| 426 | ** files as no longer being part of the project. In other words, future |
| @@ -451,11 +451,13 @@ | |
| 451 | /* We should be done with options.. */ |
| 452 | verify_all_options(); |
| 453 | |
| 454 | db_must_be_within_tree(); |
| 455 | db_begin_transaction(); |
| 456 | if(g.argv[1][0]=='f'){ |
| 457 | removeFiles = 0; |
| 458 | }else if( zMetadataOnly ){ |
| 459 | removeFiles = is_false(zMetadataOnly); |
| 460 | }else{ |
| 461 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 462 | removeFiles = db_get_boolean("remove-files",0); |
| 463 | #else |
| @@ -814,11 +816,13 @@ | |
| 816 | if( g.argc<4 ){ |
| 817 | usage("OLDNAME NEWNAME"); |
| 818 | } |
| 819 | zDest = g.argv[g.argc-1]; |
| 820 | db_begin_transaction(); |
| 821 | if(g.argv[1][0]=='r'){ |
| 822 | moveFiles = 0; |
| 823 | }else if( zMetadataOnly ){ |
| 824 | moveFiles = is_false(zMetadataOnly); |
| 825 | }else{ |
| 826 | #if FOSSIL_ENABLE_LEGACY_MV_RM |
| 827 | moveFiles = db_get_boolean("move-files",0); |
| 828 | #else |
| 829 |
+1
-1
| --- src/branch.c | ||
| +++ src/branch.c | ||
| @@ -159,11 +159,11 @@ | ||
| 159 | 159 | fossil_fatal("%s\n", g.zErrMsg); |
| 160 | 160 | } |
| 161 | 161 | assert( blob_is_reset(&branch) ); |
| 162 | 162 | content_deltify(rootid, brid, 0); |
| 163 | 163 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", brid); |
| 164 | - fossil_print("New branch: %S\n", zUuid); | |
| 164 | + fossil_print("New branch: %s\n", zUuid); | |
| 165 | 165 | if( g.argc==3 ){ |
| 166 | 166 | fossil_print( |
| 167 | 167 | "\n" |
| 168 | 168 | "Note: the local check-out has not been updated to the new\n" |
| 169 | 169 | " branch. To begin working on the new branch, do this:\n" |
| 170 | 170 |
| --- src/branch.c | |
| +++ src/branch.c | |
| @@ -159,11 +159,11 @@ | |
| 159 | fossil_fatal("%s\n", g.zErrMsg); |
| 160 | } |
| 161 | assert( blob_is_reset(&branch) ); |
| 162 | content_deltify(rootid, brid, 0); |
| 163 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", brid); |
| 164 | fossil_print("New branch: %S\n", zUuid); |
| 165 | if( g.argc==3 ){ |
| 166 | fossil_print( |
| 167 | "\n" |
| 168 | "Note: the local check-out has not been updated to the new\n" |
| 169 | " branch. To begin working on the new branch, do this:\n" |
| 170 |
| --- src/branch.c | |
| +++ src/branch.c | |
| @@ -159,11 +159,11 @@ | |
| 159 | fossil_fatal("%s\n", g.zErrMsg); |
| 160 | } |
| 161 | assert( blob_is_reset(&branch) ); |
| 162 | content_deltify(rootid, brid, 0); |
| 163 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", brid); |
| 164 | fossil_print("New branch: %s\n", zUuid); |
| 165 | if( g.argc==3 ){ |
| 166 | fossil_print( |
| 167 | "\n" |
| 168 | "Note: the local check-out has not been updated to the new\n" |
| 169 | " branch. To begin working on the new branch, do this:\n" |
| 170 |
+8
-6
| --- src/bundle.c | ||
| +++ src/bundle.c | ||
| @@ -28,11 +28,11 @@ | ||
| 28 | 28 | ** If an integer, then the corresponding blobid is the delta basis. |
| 29 | 29 | ** If a text string, then that string is a SHA1 hash for the delta |
| 30 | 30 | ** basis, which is presumably in the master repository. If NULL, then |
| 31 | 31 | ** data contains contain without delta compression. |
| 32 | 32 | */ |
| 33 | -static const char zBundleInit[] = | |
| 33 | +static const char zBundleInit[] = | |
| 34 | 34 | @ CREATE TABLE IF NOT EXISTS "%w".bconfig( |
| 35 | 35 | @ bcname TEXT, |
| 36 | 36 | @ bcvalue ANY |
| 37 | 37 | @ ); |
| 38 | 38 | @ CREATE TABLE IF NOT EXISTS "%w".bblob( |
| @@ -155,11 +155,11 @@ | ||
| 155 | 155 | int i; |
| 156 | 156 | Stmt q; |
| 157 | 157 | |
| 158 | 158 | verify_all_options(); |
| 159 | 159 | bundle_attach_file(g.argv[3], "b1", 1); |
| 160 | - db_prepare(&q, | |
| 160 | + db_prepare(&q, | |
| 161 | 161 | "INSERT INTO bblob(blobid, uuid, sz, delta, data, notes) " |
| 162 | 162 | "VALUES(NULL, $uuid, $sz, NULL, $data, $filename)"); |
| 163 | 163 | db_begin_transaction(); |
| 164 | 164 | for(i=4; i<g.argc; i++){ |
| 165 | 165 | int sz; |
| @@ -188,11 +188,11 @@ | ||
| 188 | 188 | ** instance of BRANCHNAME |
| 189 | 189 | ** --from TAG1 [--to TAG2] Check-in TAG1 and all primary descendants |
| 190 | 190 | ** up to and including TAG2 |
| 191 | 191 | ** --checkin TAG Check-in TAG only |
| 192 | 192 | ** |
| 193 | -** Store the RIDs for all applicable check-ins in the zTab table that | |
| 193 | +** Store the RIDs for all applicable check-ins in the zTab table that | |
| 194 | 194 | ** should already exist. Invoke fossil_fatal() if any kind of error is |
| 195 | 195 | ** seen. |
| 196 | 196 | */ |
| 197 | 197 | void subtree_from_arguments(const char *zTab){ |
| 198 | 198 | const char *zBr; |
| @@ -431,11 +431,11 @@ | ||
| 431 | 431 | if( bag_find(&busy, iSrc) ){ |
| 432 | 432 | fossil_fatal("delta loop while uncompressing bundle artifacts"); |
| 433 | 433 | } |
| 434 | 434 | bag_insert(&busy, iSrc); |
| 435 | 435 | } |
| 436 | - db_prepare(&q, | |
| 436 | + db_prepare(&q, | |
| 437 | 437 | "SELECT uuid, data, bblob.delta, bix.blobid" |
| 438 | 438 | " FROM bix, bblob" |
| 439 | 439 | " WHERE bix.delta=%d" |
| 440 | 440 | " AND bix.blobid=bblob.blobid;", |
| 441 | 441 | iSrc |
| @@ -623,11 +623,11 @@ | ||
| 623 | 623 | ); |
| 624 | 624 | manifest_crosslink_begin(); |
| 625 | 625 | bundle_import_elements(0, 0, isPriv); |
| 626 | 626 | manifest_crosslink_end(0); |
| 627 | 627 | describe_artifacts_to_stdout("IN got", "Imported content:"); |
| 628 | - db_end_transaction(0); | |
| 628 | + db_end_transaction(0); | |
| 629 | 629 | } |
| 630 | 630 | |
| 631 | 631 | /* fossil bundle purge BUNDLE |
| 632 | 632 | ** |
| 633 | 633 | ** Try to undo a prior "bundle import BUNDLE". |
| @@ -769,11 +769,11 @@ | ||
| 769 | 769 | ** |
| 770 | 770 | ** List the contents of BUNDLE on standard output |
| 771 | 771 | ** |
| 772 | 772 | ** fossil bundle purge BUNDLE |
| 773 | 773 | ** |
| 774 | -** Remove from the repository all files that are used exclusively | |
| 774 | +** Remove from the repository all files that are used exclusively | |
| 775 | 775 | ** by check-ins in BUNDLE. This has the effect of undoing a |
| 776 | 776 | ** "fossil bundle import". |
| 777 | 777 | ** |
| 778 | 778 | ** SUMMARY: |
| 779 | 779 | ** fossil bundle append BUNDLE FILE... Add files to BUNDLE |
| @@ -786,10 +786,12 @@ | ||
| 786 | 786 | ** fossil bundle import BUNDLE ?OPTIONS? Import a bundle |
| 787 | 787 | ** --publish Publish the import |
| 788 | 788 | ** --force Cross-repo import |
| 789 | 789 | ** fossil bundle ls BUNDLE List content of a bundle |
| 790 | 790 | ** fossil bundle purge BUNDLE Undo an import |
| 791 | +** | |
| 792 | +** See also: publish | |
| 791 | 793 | */ |
| 792 | 794 | void bundle_cmd(void){ |
| 793 | 795 | const char *zSubcmd; |
| 794 | 796 | int n; |
| 795 | 797 | if( g.argc<4 ) usage("SUBCOMMAND BUNDLE ?OPTIONS?"); |
| 796 | 798 |
| --- src/bundle.c | |
| +++ src/bundle.c | |
| @@ -28,11 +28,11 @@ | |
| 28 | ** If an integer, then the corresponding blobid is the delta basis. |
| 29 | ** If a text string, then that string is a SHA1 hash for the delta |
| 30 | ** basis, which is presumably in the master repository. If NULL, then |
| 31 | ** data contains contain without delta compression. |
| 32 | */ |
| 33 | static const char zBundleInit[] = |
| 34 | @ CREATE TABLE IF NOT EXISTS "%w".bconfig( |
| 35 | @ bcname TEXT, |
| 36 | @ bcvalue ANY |
| 37 | @ ); |
| 38 | @ CREATE TABLE IF NOT EXISTS "%w".bblob( |
| @@ -155,11 +155,11 @@ | |
| 155 | int i; |
| 156 | Stmt q; |
| 157 | |
| 158 | verify_all_options(); |
| 159 | bundle_attach_file(g.argv[3], "b1", 1); |
| 160 | db_prepare(&q, |
| 161 | "INSERT INTO bblob(blobid, uuid, sz, delta, data, notes) " |
| 162 | "VALUES(NULL, $uuid, $sz, NULL, $data, $filename)"); |
| 163 | db_begin_transaction(); |
| 164 | for(i=4; i<g.argc; i++){ |
| 165 | int sz; |
| @@ -188,11 +188,11 @@ | |
| 188 | ** instance of BRANCHNAME |
| 189 | ** --from TAG1 [--to TAG2] Check-in TAG1 and all primary descendants |
| 190 | ** up to and including TAG2 |
| 191 | ** --checkin TAG Check-in TAG only |
| 192 | ** |
| 193 | ** Store the RIDs for all applicable check-ins in the zTab table that |
| 194 | ** should already exist. Invoke fossil_fatal() if any kind of error is |
| 195 | ** seen. |
| 196 | */ |
| 197 | void subtree_from_arguments(const char *zTab){ |
| 198 | const char *zBr; |
| @@ -431,11 +431,11 @@ | |
| 431 | if( bag_find(&busy, iSrc) ){ |
| 432 | fossil_fatal("delta loop while uncompressing bundle artifacts"); |
| 433 | } |
| 434 | bag_insert(&busy, iSrc); |
| 435 | } |
| 436 | db_prepare(&q, |
| 437 | "SELECT uuid, data, bblob.delta, bix.blobid" |
| 438 | " FROM bix, bblob" |
| 439 | " WHERE bix.delta=%d" |
| 440 | " AND bix.blobid=bblob.blobid;", |
| 441 | iSrc |
| @@ -623,11 +623,11 @@ | |
| 623 | ); |
| 624 | manifest_crosslink_begin(); |
| 625 | bundle_import_elements(0, 0, isPriv); |
| 626 | manifest_crosslink_end(0); |
| 627 | describe_artifacts_to_stdout("IN got", "Imported content:"); |
| 628 | db_end_transaction(0); |
| 629 | } |
| 630 | |
| 631 | /* fossil bundle purge BUNDLE |
| 632 | ** |
| 633 | ** Try to undo a prior "bundle import BUNDLE". |
| @@ -769,11 +769,11 @@ | |
| 769 | ** |
| 770 | ** List the contents of BUNDLE on standard output |
| 771 | ** |
| 772 | ** fossil bundle purge BUNDLE |
| 773 | ** |
| 774 | ** Remove from the repository all files that are used exclusively |
| 775 | ** by check-ins in BUNDLE. This has the effect of undoing a |
| 776 | ** "fossil bundle import". |
| 777 | ** |
| 778 | ** SUMMARY: |
| 779 | ** fossil bundle append BUNDLE FILE... Add files to BUNDLE |
| @@ -786,10 +786,12 @@ | |
| 786 | ** fossil bundle import BUNDLE ?OPTIONS? Import a bundle |
| 787 | ** --publish Publish the import |
| 788 | ** --force Cross-repo import |
| 789 | ** fossil bundle ls BUNDLE List content of a bundle |
| 790 | ** fossil bundle purge BUNDLE Undo an import |
| 791 | */ |
| 792 | void bundle_cmd(void){ |
| 793 | const char *zSubcmd; |
| 794 | int n; |
| 795 | if( g.argc<4 ) usage("SUBCOMMAND BUNDLE ?OPTIONS?"); |
| 796 |
| --- src/bundle.c | |
| +++ src/bundle.c | |
| @@ -28,11 +28,11 @@ | |
| 28 | ** If an integer, then the corresponding blobid is the delta basis. |
| 29 | ** If a text string, then that string is a SHA1 hash for the delta |
| 30 | ** basis, which is presumably in the master repository. If NULL, then |
| 31 | ** data contains contain without delta compression. |
| 32 | */ |
| 33 | static const char zBundleInit[] = |
| 34 | @ CREATE TABLE IF NOT EXISTS "%w".bconfig( |
| 35 | @ bcname TEXT, |
| 36 | @ bcvalue ANY |
| 37 | @ ); |
| 38 | @ CREATE TABLE IF NOT EXISTS "%w".bblob( |
| @@ -155,11 +155,11 @@ | |
| 155 | int i; |
| 156 | Stmt q; |
| 157 | |
| 158 | verify_all_options(); |
| 159 | bundle_attach_file(g.argv[3], "b1", 1); |
| 160 | db_prepare(&q, |
| 161 | "INSERT INTO bblob(blobid, uuid, sz, delta, data, notes) " |
| 162 | "VALUES(NULL, $uuid, $sz, NULL, $data, $filename)"); |
| 163 | db_begin_transaction(); |
| 164 | for(i=4; i<g.argc; i++){ |
| 165 | int sz; |
| @@ -188,11 +188,11 @@ | |
| 188 | ** instance of BRANCHNAME |
| 189 | ** --from TAG1 [--to TAG2] Check-in TAG1 and all primary descendants |
| 190 | ** up to and including TAG2 |
| 191 | ** --checkin TAG Check-in TAG only |
| 192 | ** |
| 193 | ** Store the RIDs for all applicable check-ins in the zTab table that |
| 194 | ** should already exist. Invoke fossil_fatal() if any kind of error is |
| 195 | ** seen. |
| 196 | */ |
| 197 | void subtree_from_arguments(const char *zTab){ |
| 198 | const char *zBr; |
| @@ -431,11 +431,11 @@ | |
| 431 | if( bag_find(&busy, iSrc) ){ |
| 432 | fossil_fatal("delta loop while uncompressing bundle artifacts"); |
| 433 | } |
| 434 | bag_insert(&busy, iSrc); |
| 435 | } |
| 436 | db_prepare(&q, |
| 437 | "SELECT uuid, data, bblob.delta, bix.blobid" |
| 438 | " FROM bix, bblob" |
| 439 | " WHERE bix.delta=%d" |
| 440 | " AND bix.blobid=bblob.blobid;", |
| 441 | iSrc |
| @@ -623,11 +623,11 @@ | |
| 623 | ); |
| 624 | manifest_crosslink_begin(); |
| 625 | bundle_import_elements(0, 0, isPriv); |
| 626 | manifest_crosslink_end(0); |
| 627 | describe_artifacts_to_stdout("IN got", "Imported content:"); |
| 628 | db_end_transaction(0); |
| 629 | } |
| 630 | |
| 631 | /* fossil bundle purge BUNDLE |
| 632 | ** |
| 633 | ** Try to undo a prior "bundle import BUNDLE". |
| @@ -769,11 +769,11 @@ | |
| 769 | ** |
| 770 | ** List the contents of BUNDLE on standard output |
| 771 | ** |
| 772 | ** fossil bundle purge BUNDLE |
| 773 | ** |
| 774 | ** Remove from the repository all files that are used exclusively |
| 775 | ** by check-ins in BUNDLE. This has the effect of undoing a |
| 776 | ** "fossil bundle import". |
| 777 | ** |
| 778 | ** SUMMARY: |
| 779 | ** fossil bundle append BUNDLE FILE... Add files to BUNDLE |
| @@ -786,10 +786,12 @@ | |
| 786 | ** fossil bundle import BUNDLE ?OPTIONS? Import a bundle |
| 787 | ** --publish Publish the import |
| 788 | ** --force Cross-repo import |
| 789 | ** fossil bundle ls BUNDLE List content of a bundle |
| 790 | ** fossil bundle purge BUNDLE Undo an import |
| 791 | ** |
| 792 | ** See also: publish |
| 793 | */ |
| 794 | void bundle_cmd(void){ |
| 795 | const char *zSubcmd; |
| 796 | int n; |
| 797 | if( g.argc<4 ) usage("SUBCOMMAND BUNDLE ?OPTIONS?"); |
| 798 |
+3
-3
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -1936,18 +1936,18 @@ | ||
| 1936 | 1936 | db_prepare(&q, "SELECT uuid,merge FROM vmerge JOIN blob ON merge=rid" |
| 1937 | 1937 | " WHERE id=-4"); |
| 1938 | 1938 | while( db_step(&q)==SQLITE_ROW ){ |
| 1939 | 1939 | const char *zIntegrateUuid = db_column_text(&q, 0); |
| 1940 | 1940 | if( is_a_leaf(db_column_int(&q, 1)) ){ |
| 1941 | - fossil_print("Closed: %S\n", zIntegrateUuid); | |
| 1941 | + fossil_print("Closed: %s\n", zIntegrateUuid); | |
| 1942 | 1942 | }else{ |
| 1943 | - fossil_print("Not_Closed: %S (not a leaf any more)\n", zIntegrateUuid); | |
| 1943 | + fossil_print("Not_Closed: %s (not a leaf any more)\n", zIntegrateUuid); | |
| 1944 | 1944 | } |
| 1945 | 1945 | } |
| 1946 | 1946 | db_finalize(&q); |
| 1947 | 1947 | |
| 1948 | - fossil_print("New_Version: %S\n", zUuid); | |
| 1948 | + fossil_print("New_Version: %s\n", zUuid); | |
| 1949 | 1949 | if( outputManifest ){ |
| 1950 | 1950 | zManifestFile = mprintf("%smanifest.uuid", g.zLocalRoot); |
| 1951 | 1951 | blob_zero(&muuid); |
| 1952 | 1952 | blob_appendf(&muuid, "%s\n", zUuid); |
| 1953 | 1953 | blob_write_to_file(&muuid, zManifestFile); |
| 1954 | 1954 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -1936,18 +1936,18 @@ | |
| 1936 | db_prepare(&q, "SELECT uuid,merge FROM vmerge JOIN blob ON merge=rid" |
| 1937 | " WHERE id=-4"); |
| 1938 | while( db_step(&q)==SQLITE_ROW ){ |
| 1939 | const char *zIntegrateUuid = db_column_text(&q, 0); |
| 1940 | if( is_a_leaf(db_column_int(&q, 1)) ){ |
| 1941 | fossil_print("Closed: %S\n", zIntegrateUuid); |
| 1942 | }else{ |
| 1943 | fossil_print("Not_Closed: %S (not a leaf any more)\n", zIntegrateUuid); |
| 1944 | } |
| 1945 | } |
| 1946 | db_finalize(&q); |
| 1947 | |
| 1948 | fossil_print("New_Version: %S\n", zUuid); |
| 1949 | if( outputManifest ){ |
| 1950 | zManifestFile = mprintf("%smanifest.uuid", g.zLocalRoot); |
| 1951 | blob_zero(&muuid); |
| 1952 | blob_appendf(&muuid, "%s\n", zUuid); |
| 1953 | blob_write_to_file(&muuid, zManifestFile); |
| 1954 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -1936,18 +1936,18 @@ | |
| 1936 | db_prepare(&q, "SELECT uuid,merge FROM vmerge JOIN blob ON merge=rid" |
| 1937 | " WHERE id=-4"); |
| 1938 | while( db_step(&q)==SQLITE_ROW ){ |
| 1939 | const char *zIntegrateUuid = db_column_text(&q, 0); |
| 1940 | if( is_a_leaf(db_column_int(&q, 1)) ){ |
| 1941 | fossil_print("Closed: %s\n", zIntegrateUuid); |
| 1942 | }else{ |
| 1943 | fossil_print("Not_Closed: %s (not a leaf any more)\n", zIntegrateUuid); |
| 1944 | } |
| 1945 | } |
| 1946 | db_finalize(&q); |
| 1947 | |
| 1948 | fossil_print("New_Version: %s\n", zUuid); |
| 1949 | if( outputManifest ){ |
| 1950 | zManifestFile = mprintf("%smanifest.uuid", g.zLocalRoot); |
| 1951 | blob_zero(&muuid); |
| 1952 | blob_appendf(&muuid, "%s\n", zUuid); |
| 1953 | blob_write_to_file(&muuid, zManifestFile); |
| 1954 |
+5
-1
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -43,11 +43,12 @@ | ||
| 43 | 43 | ** Options: |
| 44 | 44 | ** -b|--brief display a brief (one line / revision) summary |
| 45 | 45 | ** --case-sensitive B Enable or disable case-sensitive filenames. B is a |
| 46 | 46 | ** boolean: "yes", "no", "true", "false", etc. |
| 47 | 47 | ** -l|--log select log mode (the default) |
| 48 | -** -n|--limit N display the first N changes. N=0 means no limit. | |
| 48 | +** -n|--limit N Display the first N changes (default unlimited). | |
| 49 | +** N<=0 means no limit. | |
| 49 | 50 | ** --offset P skip P changes |
| 50 | 51 | ** -p|--print select print mode |
| 51 | 52 | ** -r|--revision R print the given revision (or ckout, if none is given) |
| 52 | 53 | ** to stdout (only in print mode) |
| 53 | 54 | ** -s|--status select status mode (print a status indicator for FILE) |
| @@ -155,10 +156,13 @@ | ||
| 155 | 156 | zWidth = find_option("width","W",1); |
| 156 | 157 | iLimit = zLimit ? atoi(zLimit) : -1; |
| 157 | 158 | zOffset = find_option("offset",0,1); |
| 158 | 159 | iOffset = zOffset ? atoi(zOffset) : 0; |
| 159 | 160 | iBrief = (find_option("brief","b",0) == 0); |
| 161 | + if( iLimit==0 ){ | |
| 162 | + iLimit = -1; | |
| 163 | + } | |
| 160 | 164 | if( zWidth ){ |
| 161 | 165 | iWidth = atoi(zWidth); |
| 162 | 166 | if( (iWidth!=0) && (iWidth<=22) ){ |
| 163 | 167 | fossil_fatal("-W|--width value must be >22 or 0"); |
| 164 | 168 | } |
| 165 | 169 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -43,11 +43,12 @@ | |
| 43 | ** Options: |
| 44 | ** -b|--brief display a brief (one line / revision) summary |
| 45 | ** --case-sensitive B Enable or disable case-sensitive filenames. B is a |
| 46 | ** boolean: "yes", "no", "true", "false", etc. |
| 47 | ** -l|--log select log mode (the default) |
| 48 | ** -n|--limit N display the first N changes. N=0 means no limit. |
| 49 | ** --offset P skip P changes |
| 50 | ** -p|--print select print mode |
| 51 | ** -r|--revision R print the given revision (or ckout, if none is given) |
| 52 | ** to stdout (only in print mode) |
| 53 | ** -s|--status select status mode (print a status indicator for FILE) |
| @@ -155,10 +156,13 @@ | |
| 155 | zWidth = find_option("width","W",1); |
| 156 | iLimit = zLimit ? atoi(zLimit) : -1; |
| 157 | zOffset = find_option("offset",0,1); |
| 158 | iOffset = zOffset ? atoi(zOffset) : 0; |
| 159 | iBrief = (find_option("brief","b",0) == 0); |
| 160 | if( zWidth ){ |
| 161 | iWidth = atoi(zWidth); |
| 162 | if( (iWidth!=0) && (iWidth<=22) ){ |
| 163 | fossil_fatal("-W|--width value must be >22 or 0"); |
| 164 | } |
| 165 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -43,11 +43,12 @@ | |
| 43 | ** Options: |
| 44 | ** -b|--brief display a brief (one line / revision) summary |
| 45 | ** --case-sensitive B Enable or disable case-sensitive filenames. B is a |
| 46 | ** boolean: "yes", "no", "true", "false", etc. |
| 47 | ** -l|--log select log mode (the default) |
| 48 | ** -n|--limit N Display the first N changes (default unlimited). |
| 49 | ** N<=0 means no limit. |
| 50 | ** --offset P skip P changes |
| 51 | ** -p|--print select print mode |
| 52 | ** -r|--revision R print the given revision (or ckout, if none is given) |
| 53 | ** to stdout (only in print mode) |
| 54 | ** -s|--status select status mode (print a status indicator for FILE) |
| @@ -155,10 +156,13 @@ | |
| 156 | zWidth = find_option("width","W",1); |
| 157 | iLimit = zLimit ? atoi(zLimit) : -1; |
| 158 | zOffset = find_option("offset",0,1); |
| 159 | iOffset = zOffset ? atoi(zOffset) : 0; |
| 160 | iBrief = (find_option("brief","b",0) == 0); |
| 161 | if( iLimit==0 ){ |
| 162 | iLimit = -1; |
| 163 | } |
| 164 | if( zWidth ){ |
| 165 | iWidth = atoi(zWidth); |
| 166 | if( (iWidth!=0) && (iWidth<=22) ){ |
| 167 | fossil_fatal("-W|--width value must be >22 or 0"); |
| 168 | } |
| 169 |
+1
-1
| --- src/foci.c | ||
| +++ src/foci.c | ||
| @@ -24,11 +24,11 @@ | ||
| 24 | 24 | ** |
| 25 | 25 | ** CREATE VIRTUAL TABLE temp.foci USING files_of_checkin; |
| 26 | 26 | ** -- ^^^^--- important! |
| 27 | 27 | ** SELECT * FROM foci WHERE checkinID=symbolic_name_to_rid('trunk'); |
| 28 | 28 | ** |
| 29 | -** The symbolic_name_to_rid('trunk') function finds the BLOB.RID value | |
| 29 | +** The symbolic_name_to_rid('trunk') function finds the BLOB.RID value | |
| 30 | 30 | ** corresponding to the 'trunk' tag. Then the files_of_checkin virtual table |
| 31 | 31 | ** decodes the manifest defined by that BLOB and returns all files described |
| 32 | 32 | ** by that manifest. The "schema" for the temp.foci table is: |
| 33 | 33 | ** |
| 34 | 34 | ** CREATE TABLE files_of_checkin( |
| 35 | 35 |
| --- src/foci.c | |
| +++ src/foci.c | |
| @@ -24,11 +24,11 @@ | |
| 24 | ** |
| 25 | ** CREATE VIRTUAL TABLE temp.foci USING files_of_checkin; |
| 26 | ** -- ^^^^--- important! |
| 27 | ** SELECT * FROM foci WHERE checkinID=symbolic_name_to_rid('trunk'); |
| 28 | ** |
| 29 | ** The symbolic_name_to_rid('trunk') function finds the BLOB.RID value |
| 30 | ** corresponding to the 'trunk' tag. Then the files_of_checkin virtual table |
| 31 | ** decodes the manifest defined by that BLOB and returns all files described |
| 32 | ** by that manifest. The "schema" for the temp.foci table is: |
| 33 | ** |
| 34 | ** CREATE TABLE files_of_checkin( |
| 35 |
| --- src/foci.c | |
| +++ src/foci.c | |
| @@ -24,11 +24,11 @@ | |
| 24 | ** |
| 25 | ** CREATE VIRTUAL TABLE temp.foci USING files_of_checkin; |
| 26 | ** -- ^^^^--- important! |
| 27 | ** SELECT * FROM foci WHERE checkinID=symbolic_name_to_rid('trunk'); |
| 28 | ** |
| 29 | ** The symbolic_name_to_rid('trunk') function finds the BLOB.RID value |
| 30 | ** corresponding to the 'trunk' tag. Then the files_of_checkin virtual table |
| 31 | ** decodes the manifest defined by that BLOB and returns all files described |
| 32 | ** by that manifest. The "schema" for the temp.foci table is: |
| 33 | ** |
| 34 | ** CREATE TABLE files_of_checkin( |
| 35 |
+38
-10
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -1701,35 +1701,62 @@ | ||
| 1701 | 1701 | ** file. This routine appends that text to the HTTP reply with line numbering. |
| 1702 | 1702 | ** |
| 1703 | 1703 | ** zLn is the ?ln= parameter for the HTTP query. If there is an argument, |
| 1704 | 1704 | ** then highlight that line number and scroll to it once the page loads. |
| 1705 | 1705 | ** If there are two line numbers, highlight the range of lines. |
| 1706 | +** Multiple ranges can be highlighed by adding additional line numbers | |
| 1707 | +** separated by a non-digit character (also not one of [-,.]). | |
| 1706 | 1708 | */ |
| 1707 | 1709 | void output_text_with_line_numbers( |
| 1708 | 1710 | const char *z, |
| 1709 | 1711 | const char *zLn |
| 1710 | 1712 | ){ |
| 1711 | 1713 | int iStart, iEnd; /* Start and end of region to highlight */ |
| 1712 | 1714 | int n = 0; /* Current line number */ |
| 1713 | - int i; /* Loop index */ | |
| 1715 | + int i = 0; /* Loop index */ | |
| 1714 | 1716 | int iTop = 0; /* Scroll so that this line is on top of screen. */ |
| 1717 | + Stmt q; | |
| 1715 | 1718 | |
| 1716 | 1719 | iStart = iEnd = atoi(zLn); |
| 1720 | + db_multi_exec( | |
| 1721 | + "CREATE TEMP TABLE lnos(iStart INTEGER PRIMARY KEY, iEnd INTEGER)"); | |
| 1717 | 1722 | if( iStart>0 ){ |
| 1718 | - for(i=0; fossil_isdigit(zLn[i]); i++){} | |
| 1719 | - if( zLn[i]==',' || zLn[i]=='-' || zLn[i]=='.' ){ | |
| 1720 | - i++; | |
| 1721 | - while( zLn[i]=='.' ){ i++; } | |
| 1722 | - iEnd = atoi(&zLn[i]); | |
| 1723 | - } | |
| 1724 | - if( iEnd<iStart ) iEnd = iStart; | |
| 1723 | + do{ | |
| 1724 | + while( fossil_isdigit(zLn[i]) ) i++; | |
| 1725 | + if( zLn[i]==',' || zLn[i]=='-' || zLn[i]=='.' ){ | |
| 1726 | + i++; | |
| 1727 | + while( zLn[i]=='.' ){ i++; } | |
| 1728 | + iEnd = atoi(&zLn[i]); | |
| 1729 | + while( fossil_isdigit(zLn[i]) ) i++; | |
| 1730 | + } | |
| 1731 | + while( fossil_isdigit(zLn[i]) ) i++; | |
| 1732 | + if( iEnd<iStart ) iEnd = iStart; | |
| 1733 | + db_multi_exec( | |
| 1734 | + "INSERT OR REPLACE INTO lnos VALUES(%d,%d)", iStart, iEnd | |
| 1735 | + ); | |
| 1736 | + iStart = iEnd = atoi(&zLn[i++]); | |
| 1737 | + }while( zLn[i] && iStart && iEnd ); | |
| 1738 | + } | |
| 1739 | + db_prepare(&q, "SELECT min(iStart), iEnd FROM lnos"); | |
| 1740 | + if( db_step(&q)==SQLITE_ROW ){ | |
| 1741 | + iStart = db_column_int(&q, 0); | |
| 1742 | + iEnd = db_column_int(&q, 1); | |
| 1725 | 1743 | iTop = iStart - 15 + (iEnd-iStart)/4; |
| 1726 | 1744 | if( iTop>iStart - 2 ) iTop = iStart-2; |
| 1727 | 1745 | } |
| 1746 | + db_finalize(&q); | |
| 1728 | 1747 | @ <pre> |
| 1729 | 1748 | while( z[0] ){ |
| 1730 | 1749 | n++; |
| 1750 | + db_prepare(&q, | |
| 1751 | + "SELECT min(iStart), max(iEnd) FROM lnos" | |
| 1752 | + " WHERE iStart <= %d AND iEnd >= %d", n, n); | |
| 1753 | + if( db_step(&q)==SQLITE_ROW ){ | |
| 1754 | + iStart = db_column_int(&q, 0); | |
| 1755 | + iEnd = db_column_int(&q, 1); | |
| 1756 | + } | |
| 1757 | + db_finalize(&q); | |
| 1731 | 1758 | for(i=0; z[i] && z[i]!='\n'; i++){} |
| 1732 | 1759 | if( n==iTop ) cgi_append_content("<span id=\"topln\">", -1); |
| 1733 | 1760 | if( n==iStart ){ |
| 1734 | 1761 | cgi_append_content("<div class=\"selectedText\">",-1); |
| 1735 | 1762 | } |
| @@ -1737,19 +1764,19 @@ | ||
| 1737 | 1764 | if( i>0 ){ |
| 1738 | 1765 | char *zHtml = htmlize(z, i); |
| 1739 | 1766 | cgi_append_content(zHtml, -1); |
| 1740 | 1767 | fossil_free(zHtml); |
| 1741 | 1768 | } |
| 1742 | - if( n==iStart-15 ) cgi_append_content("</span>", -1); | |
| 1769 | + if( n==iTop ) cgi_append_content("</span>", -1); | |
| 1743 | 1770 | if( n==iEnd ) cgi_append_content("</div>", -1); |
| 1744 | 1771 | else cgi_append_content("\n", 1); |
| 1745 | 1772 | z += i; |
| 1746 | 1773 | if( z[0]=='\n' ) z++; |
| 1747 | 1774 | } |
| 1748 | 1775 | if( n<iEnd ) cgi_printf("</div>"); |
| 1749 | 1776 | @ </pre> |
| 1750 | - if( iStart ){ | |
| 1777 | + if( db_int(0, "SELECT EXISTS(SELECT 1 FROM lnos)") ){ | |
| 1751 | 1778 | @ <script>gebi('topln').scrollIntoView(true);</script> |
| 1752 | 1779 | } |
| 1753 | 1780 | } |
| 1754 | 1781 | |
| 1755 | 1782 | |
| @@ -1764,10 +1791,11 @@ | ||
| 1764 | 1791 | ** Additional query parameters: |
| 1765 | 1792 | ** |
| 1766 | 1793 | ** ln - show line numbers |
| 1767 | 1794 | ** ln=N - highlight line number N |
| 1768 | 1795 | ** ln=M-N - highlight lines M through N inclusive |
| 1796 | +** ln=M-N+Y-Z - higllight lines M through N and Y through Z (inclusive) | |
| 1769 | 1797 | ** verbose - show more detail in the description |
| 1770 | 1798 | ** |
| 1771 | 1799 | ** The /artifact page show the complete content of a file |
| 1772 | 1800 | ** identified by SHA1HASH as preformatted text. The |
| 1773 | 1801 | ** /whatis page shows only a description of the file. |
| 1774 | 1802 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -1701,35 +1701,62 @@ | |
| 1701 | ** file. This routine appends that text to the HTTP reply with line numbering. |
| 1702 | ** |
| 1703 | ** zLn is the ?ln= parameter for the HTTP query. If there is an argument, |
| 1704 | ** then highlight that line number and scroll to it once the page loads. |
| 1705 | ** If there are two line numbers, highlight the range of lines. |
| 1706 | */ |
| 1707 | void output_text_with_line_numbers( |
| 1708 | const char *z, |
| 1709 | const char *zLn |
| 1710 | ){ |
| 1711 | int iStart, iEnd; /* Start and end of region to highlight */ |
| 1712 | int n = 0; /* Current line number */ |
| 1713 | int i; /* Loop index */ |
| 1714 | int iTop = 0; /* Scroll so that this line is on top of screen. */ |
| 1715 | |
| 1716 | iStart = iEnd = atoi(zLn); |
| 1717 | if( iStart>0 ){ |
| 1718 | for(i=0; fossil_isdigit(zLn[i]); i++){} |
| 1719 | if( zLn[i]==',' || zLn[i]=='-' || zLn[i]=='.' ){ |
| 1720 | i++; |
| 1721 | while( zLn[i]=='.' ){ i++; } |
| 1722 | iEnd = atoi(&zLn[i]); |
| 1723 | } |
| 1724 | if( iEnd<iStart ) iEnd = iStart; |
| 1725 | iTop = iStart - 15 + (iEnd-iStart)/4; |
| 1726 | if( iTop>iStart - 2 ) iTop = iStart-2; |
| 1727 | } |
| 1728 | @ <pre> |
| 1729 | while( z[0] ){ |
| 1730 | n++; |
| 1731 | for(i=0; z[i] && z[i]!='\n'; i++){} |
| 1732 | if( n==iTop ) cgi_append_content("<span id=\"topln\">", -1); |
| 1733 | if( n==iStart ){ |
| 1734 | cgi_append_content("<div class=\"selectedText\">",-1); |
| 1735 | } |
| @@ -1737,19 +1764,19 @@ | |
| 1737 | if( i>0 ){ |
| 1738 | char *zHtml = htmlize(z, i); |
| 1739 | cgi_append_content(zHtml, -1); |
| 1740 | fossil_free(zHtml); |
| 1741 | } |
| 1742 | if( n==iStart-15 ) cgi_append_content("</span>", -1); |
| 1743 | if( n==iEnd ) cgi_append_content("</div>", -1); |
| 1744 | else cgi_append_content("\n", 1); |
| 1745 | z += i; |
| 1746 | if( z[0]=='\n' ) z++; |
| 1747 | } |
| 1748 | if( n<iEnd ) cgi_printf("</div>"); |
| 1749 | @ </pre> |
| 1750 | if( iStart ){ |
| 1751 | @ <script>gebi('topln').scrollIntoView(true);</script> |
| 1752 | } |
| 1753 | } |
| 1754 | |
| 1755 | |
| @@ -1764,10 +1791,11 @@ | |
| 1764 | ** Additional query parameters: |
| 1765 | ** |
| 1766 | ** ln - show line numbers |
| 1767 | ** ln=N - highlight line number N |
| 1768 | ** ln=M-N - highlight lines M through N inclusive |
| 1769 | ** verbose - show more detail in the description |
| 1770 | ** |
| 1771 | ** The /artifact page show the complete content of a file |
| 1772 | ** identified by SHA1HASH as preformatted text. The |
| 1773 | ** /whatis page shows only a description of the file. |
| 1774 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -1701,35 +1701,62 @@ | |
| 1701 | ** file. This routine appends that text to the HTTP reply with line numbering. |
| 1702 | ** |
| 1703 | ** zLn is the ?ln= parameter for the HTTP query. If there is an argument, |
| 1704 | ** then highlight that line number and scroll to it once the page loads. |
| 1705 | ** If there are two line numbers, highlight the range of lines. |
| 1706 | ** Multiple ranges can be highlighed by adding additional line numbers |
| 1707 | ** separated by a non-digit character (also not one of [-,.]). |
| 1708 | */ |
| 1709 | void output_text_with_line_numbers( |
| 1710 | const char *z, |
| 1711 | const char *zLn |
| 1712 | ){ |
| 1713 | int iStart, iEnd; /* Start and end of region to highlight */ |
| 1714 | int n = 0; /* Current line number */ |
| 1715 | int i = 0; /* Loop index */ |
| 1716 | int iTop = 0; /* Scroll so that this line is on top of screen. */ |
| 1717 | Stmt q; |
| 1718 | |
| 1719 | iStart = iEnd = atoi(zLn); |
| 1720 | db_multi_exec( |
| 1721 | "CREATE TEMP TABLE lnos(iStart INTEGER PRIMARY KEY, iEnd INTEGER)"); |
| 1722 | if( iStart>0 ){ |
| 1723 | do{ |
| 1724 | while( fossil_isdigit(zLn[i]) ) i++; |
| 1725 | if( zLn[i]==',' || zLn[i]=='-' || zLn[i]=='.' ){ |
| 1726 | i++; |
| 1727 | while( zLn[i]=='.' ){ i++; } |
| 1728 | iEnd = atoi(&zLn[i]); |
| 1729 | while( fossil_isdigit(zLn[i]) ) i++; |
| 1730 | } |
| 1731 | while( fossil_isdigit(zLn[i]) ) i++; |
| 1732 | if( iEnd<iStart ) iEnd = iStart; |
| 1733 | db_multi_exec( |
| 1734 | "INSERT OR REPLACE INTO lnos VALUES(%d,%d)", iStart, iEnd |
| 1735 | ); |
| 1736 | iStart = iEnd = atoi(&zLn[i++]); |
| 1737 | }while( zLn[i] && iStart && iEnd ); |
| 1738 | } |
| 1739 | db_prepare(&q, "SELECT min(iStart), iEnd FROM lnos"); |
| 1740 | if( db_step(&q)==SQLITE_ROW ){ |
| 1741 | iStart = db_column_int(&q, 0); |
| 1742 | iEnd = db_column_int(&q, 1); |
| 1743 | iTop = iStart - 15 + (iEnd-iStart)/4; |
| 1744 | if( iTop>iStart - 2 ) iTop = iStart-2; |
| 1745 | } |
| 1746 | db_finalize(&q); |
| 1747 | @ <pre> |
| 1748 | while( z[0] ){ |
| 1749 | n++; |
| 1750 | db_prepare(&q, |
| 1751 | "SELECT min(iStart), max(iEnd) FROM lnos" |
| 1752 | " WHERE iStart <= %d AND iEnd >= %d", n, n); |
| 1753 | if( db_step(&q)==SQLITE_ROW ){ |
| 1754 | iStart = db_column_int(&q, 0); |
| 1755 | iEnd = db_column_int(&q, 1); |
| 1756 | } |
| 1757 | db_finalize(&q); |
| 1758 | for(i=0; z[i] && z[i]!='\n'; i++){} |
| 1759 | if( n==iTop ) cgi_append_content("<span id=\"topln\">", -1); |
| 1760 | if( n==iStart ){ |
| 1761 | cgi_append_content("<div class=\"selectedText\">",-1); |
| 1762 | } |
| @@ -1737,19 +1764,19 @@ | |
| 1764 | if( i>0 ){ |
| 1765 | char *zHtml = htmlize(z, i); |
| 1766 | cgi_append_content(zHtml, -1); |
| 1767 | fossil_free(zHtml); |
| 1768 | } |
| 1769 | if( n==iTop ) cgi_append_content("</span>", -1); |
| 1770 | if( n==iEnd ) cgi_append_content("</div>", -1); |
| 1771 | else cgi_append_content("\n", 1); |
| 1772 | z += i; |
| 1773 | if( z[0]=='\n' ) z++; |
| 1774 | } |
| 1775 | if( n<iEnd ) cgi_printf("</div>"); |
| 1776 | @ </pre> |
| 1777 | if( db_int(0, "SELECT EXISTS(SELECT 1 FROM lnos)") ){ |
| 1778 | @ <script>gebi('topln').scrollIntoView(true);</script> |
| 1779 | } |
| 1780 | } |
| 1781 | |
| 1782 | |
| @@ -1764,10 +1791,11 @@ | |
| 1791 | ** Additional query parameters: |
| 1792 | ** |
| 1793 | ** ln - show line numbers |
| 1794 | ** ln=N - highlight line number N |
| 1795 | ** ln=M-N - highlight lines M through N inclusive |
| 1796 | ** ln=M-N+Y-Z - higllight lines M through N and Y through Z (inclusive) |
| 1797 | ** verbose - show more detail in the description |
| 1798 | ** |
| 1799 | ** The /artifact page show the complete content of a file |
| 1800 | ** identified by SHA1HASH as preformatted text. The |
| 1801 | ** /whatis page shows only a description of the file. |
| 1802 |
+5
-5
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -1050,20 +1050,20 @@ | ||
| 1050 | 1050 | |
| 1051 | 1051 | /* |
| 1052 | 1052 | ** COMMAND: help |
| 1053 | 1053 | ** |
| 1054 | 1054 | ** Usage: %fossil help COMMAND |
| 1055 | -** or: %fossil COMMAND -help | |
| 1055 | +** or: %fossil COMMAND --help | |
| 1056 | 1056 | ** |
| 1057 | 1057 | ** Display information on how to use COMMAND. To display a list of |
| 1058 | 1058 | ** available commands one of: |
| 1059 | 1059 | ** |
| 1060 | 1060 | ** %fossil help Show common commands |
| 1061 | -** %fossil help --a|-all Show both common and auxiliary commands | |
| 1062 | -** %fossil help --t|-test Show test commands only | |
| 1063 | -** %fossil help --x|-aux Show auxiliary commands only | |
| 1064 | -** %fossil help --w|-www Show list of WWW pages | |
| 1061 | +** %fossil help -a|--all Show both common and auxiliary commands | |
| 1062 | +** %fossil help -t|--test Show test commands only | |
| 1063 | +** %fossil help -x|--aux Show auxiliary commands only | |
| 1064 | +** %fossil help -w|--www Show list of WWW pages | |
| 1065 | 1065 | */ |
| 1066 | 1066 | void help_cmd(void){ |
| 1067 | 1067 | int rc, idx, isPage = 0; |
| 1068 | 1068 | const char *z; |
| 1069 | 1069 | const char *zCmdOrPage; |
| 1070 | 1070 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1050,20 +1050,20 @@ | |
| 1050 | |
| 1051 | /* |
| 1052 | ** COMMAND: help |
| 1053 | ** |
| 1054 | ** Usage: %fossil help COMMAND |
| 1055 | ** or: %fossil COMMAND -help |
| 1056 | ** |
| 1057 | ** Display information on how to use COMMAND. To display a list of |
| 1058 | ** available commands one of: |
| 1059 | ** |
| 1060 | ** %fossil help Show common commands |
| 1061 | ** %fossil help --a|-all Show both common and auxiliary commands |
| 1062 | ** %fossil help --t|-test Show test commands only |
| 1063 | ** %fossil help --x|-aux Show auxiliary commands only |
| 1064 | ** %fossil help --w|-www Show list of WWW pages |
| 1065 | */ |
| 1066 | void help_cmd(void){ |
| 1067 | int rc, idx, isPage = 0; |
| 1068 | const char *z; |
| 1069 | const char *zCmdOrPage; |
| 1070 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1050,20 +1050,20 @@ | |
| 1050 | |
| 1051 | /* |
| 1052 | ** COMMAND: help |
| 1053 | ** |
| 1054 | ** Usage: %fossil help COMMAND |
| 1055 | ** or: %fossil COMMAND --help |
| 1056 | ** |
| 1057 | ** Display information on how to use COMMAND. To display a list of |
| 1058 | ** available commands one of: |
| 1059 | ** |
| 1060 | ** %fossil help Show common commands |
| 1061 | ** %fossil help -a|--all Show both common and auxiliary commands |
| 1062 | ** %fossil help -t|--test Show test commands only |
| 1063 | ** %fossil help -x|--aux Show auxiliary commands only |
| 1064 | ** %fossil help -w|--www Show list of WWW pages |
| 1065 | */ |
| 1066 | void help_cmd(void){ |
| 1067 | int rc, idx, isPage = 0; |
| 1068 | const char *z; |
| 1069 | const char *zCmdOrPage; |
| 1070 |
+5
-5
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -1050,20 +1050,20 @@ | ||
| 1050 | 1050 | |
| 1051 | 1051 | /* |
| 1052 | 1052 | ** COMMAND: help |
| 1053 | 1053 | ** |
| 1054 | 1054 | ** Usage: %fossil help COMMAND |
| 1055 | -** or: %fossil COMMAND -help | |
| 1055 | +** or: %fossil COMMAND --help | |
| 1056 | 1056 | ** |
| 1057 | 1057 | ** Display information on how to use COMMAND. To display a list of |
| 1058 | 1058 | ** available commands one of: |
| 1059 | 1059 | ** |
| 1060 | 1060 | ** %fossil help Show common commands |
| 1061 | -** %fossil help --a|-all Show both common and auxiliary commands | |
| 1062 | -** %fossil help --t|-test Show test commands only | |
| 1063 | -** %fossil help --x|-aux Show auxiliary commands only | |
| 1064 | -** %fossil help --w|-www Show list of WWW pages | |
| 1061 | +** %fossil help -a|--all Show both common and auxiliary commands | |
| 1062 | +** %fossil help -t|--test Show test commands only | |
| 1063 | +** %fossil help -x|--aux Show auxiliary commands only | |
| 1064 | +** %fossil help -w|--www Show list of WWW pages | |
| 1065 | 1065 | */ |
| 1066 | 1066 | void help_cmd(void){ |
| 1067 | 1067 | int rc, idx, isPage = 0; |
| 1068 | 1068 | const char *z; |
| 1069 | 1069 | const char *zCmdOrPage; |
| 1070 | 1070 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1050,20 +1050,20 @@ | |
| 1050 | |
| 1051 | /* |
| 1052 | ** COMMAND: help |
| 1053 | ** |
| 1054 | ** Usage: %fossil help COMMAND |
| 1055 | ** or: %fossil COMMAND -help |
| 1056 | ** |
| 1057 | ** Display information on how to use COMMAND. To display a list of |
| 1058 | ** available commands one of: |
| 1059 | ** |
| 1060 | ** %fossil help Show common commands |
| 1061 | ** %fossil help --a|-all Show both common and auxiliary commands |
| 1062 | ** %fossil help --t|-test Show test commands only |
| 1063 | ** %fossil help --x|-aux Show auxiliary commands only |
| 1064 | ** %fossil help --w|-www Show list of WWW pages |
| 1065 | */ |
| 1066 | void help_cmd(void){ |
| 1067 | int rc, idx, isPage = 0; |
| 1068 | const char *z; |
| 1069 | const char *zCmdOrPage; |
| 1070 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1050,20 +1050,20 @@ | |
| 1050 | |
| 1051 | /* |
| 1052 | ** COMMAND: help |
| 1053 | ** |
| 1054 | ** Usage: %fossil help COMMAND |
| 1055 | ** or: %fossil COMMAND --help |
| 1056 | ** |
| 1057 | ** Display information on how to use COMMAND. To display a list of |
| 1058 | ** available commands one of: |
| 1059 | ** |
| 1060 | ** %fossil help Show common commands |
| 1061 | ** %fossil help -a|--all Show both common and auxiliary commands |
| 1062 | ** %fossil help -t|--test Show test commands only |
| 1063 | ** %fossil help -x|--aux Show auxiliary commands only |
| 1064 | ** %fossil help -w|--www Show list of WWW pages |
| 1065 | */ |
| 1066 | void help_cmd(void){ |
| 1067 | int rc, idx, isPage = 0; |
| 1068 | const char *z; |
| 1069 | const char *zCmdOrPage; |
| 1070 |
+1
-1
| --- src/publish.c | ||
| +++ src/publish.c | ||
| @@ -99,11 +99,11 @@ | ||
| 99 | 99 | if( bTest ){ |
| 100 | 100 | /* If the --test option is used, then do not actually publish any |
| 101 | 101 | ** artifacts. Instead, just list the artifact information on standard |
| 102 | 102 | ** output. The --test option is useful for verifying correct operation |
| 103 | 103 | ** of the logic that figures out which artifacts to publish, such as |
| 104 | - ** the find_checkin_associates() routine | |
| 104 | + ** the find_checkin_associates() routine | |
| 105 | 105 | */ |
| 106 | 106 | describe_artifacts_to_stdout("IN ok", 0); |
| 107 | 107 | }else{ |
| 108 | 108 | /* Standard behavior is simply to remove the published documents from |
| 109 | 109 | ** the PRIVATE table */ |
| 110 | 110 |
| --- src/publish.c | |
| +++ src/publish.c | |
| @@ -99,11 +99,11 @@ | |
| 99 | if( bTest ){ |
| 100 | /* If the --test option is used, then do not actually publish any |
| 101 | ** artifacts. Instead, just list the artifact information on standard |
| 102 | ** output. The --test option is useful for verifying correct operation |
| 103 | ** of the logic that figures out which artifacts to publish, such as |
| 104 | ** the find_checkin_associates() routine |
| 105 | */ |
| 106 | describe_artifacts_to_stdout("IN ok", 0); |
| 107 | }else{ |
| 108 | /* Standard behavior is simply to remove the published documents from |
| 109 | ** the PRIVATE table */ |
| 110 |
| --- src/publish.c | |
| +++ src/publish.c | |
| @@ -99,11 +99,11 @@ | |
| 99 | if( bTest ){ |
| 100 | /* If the --test option is used, then do not actually publish any |
| 101 | ** artifacts. Instead, just list the artifact information on standard |
| 102 | ** output. The --test option is useful for verifying correct operation |
| 103 | ** of the logic that figures out which artifacts to publish, such as |
| 104 | ** the find_checkin_associates() routine |
| 105 | */ |
| 106 | describe_artifacts_to_stdout("IN ok", 0); |
| 107 | }else{ |
| 108 | /* Standard behavior is simply to remove the published documents from |
| 109 | ** the PRIVATE table */ |
| 110 |
+9
-9
| --- src/purge.c | ||
| +++ src/purge.c | ||
| @@ -28,25 +28,25 @@ | ||
| 28 | 28 | ** |
| 29 | 29 | ** The purgeevent table contains one entry for each purge event. For each |
| 30 | 30 | ** purge event, multiple artifacts might have been removed. Each removed |
| 31 | 31 | ** artifact is stored as an entry in the purgeitem table. |
| 32 | 32 | ** |
| 33 | -** The purgeevent and purgeitem tables are not synced, even by the | |
| 34 | -** "fossil config" command. They exist only as a backup in case of a | |
| 33 | +** The purgeevent and purgeitem tables are not synced, even by the | |
| 34 | +** "fossil config" command. They exist only as a backup in case of a | |
| 35 | 35 | ** mistaken purge or for content recovery in case there is a bug in the |
| 36 | 36 | ** purge command. |
| 37 | 37 | */ |
| 38 | -static const char zPurgeInit[] = | |
| 38 | +static const char zPurgeInit[] = | |
| 39 | 39 | @ CREATE TABLE IF NOT EXISTS "%w".purgeevent( |
| 40 | 40 | @ peid INTEGER PRIMARY KEY, -- Unique ID for the purge event |
| 41 | 41 | @ ctime DATETIME, -- When purge occurred. Seconds since 1970. |
| 42 | 42 | @ pnotes TEXT -- Human-readable notes about the purge event |
| 43 | 43 | @ ); |
| 44 | 44 | @ CREATE TABLE IF NOT EXISTS "%w".purgeitem( |
| 45 | 45 | @ piid INTEGER PRIMARY KEY, -- ID for the purge item |
| 46 | 46 | @ peid INTEGER REFERENCES purgeevent ON DELETE CASCADE, -- Purge event |
| 47 | -@ orid INTEGER, -- Original RID before purged | |
| 47 | +@ orid INTEGER, -- Original RID before purged | |
| 48 | 48 | @ uuid TEXT NOT NULL, -- SHA1 hash of the purged artifact |
| 49 | 49 | @ srcid INTEGER, -- Basis purgeitem for delta compression |
| 50 | 50 | @ isPrivate BOOLEAN, -- True if artifact was originally private |
| 51 | 51 | @ sz INT NOT NULL, -- Uncompressed size of the purged artifact |
| 52 | 52 | @ desc TEXT, -- Brief description of this artifact |
| @@ -122,11 +122,11 @@ | ||
| 122 | 122 | db_finalize(&q); |
| 123 | 123 | |
| 124 | 124 | /* Construct the graveyard and copy the artifacts to be purged into the |
| 125 | 125 | ** graveyard */ |
| 126 | 126 | if( moveToGraveyard ){ |
| 127 | - db_multi_exec(zPurgeInit /*works-like:"%w%w"*/, | |
| 127 | + db_multi_exec(zPurgeInit /*works-like:"%w%w"*/, | |
| 128 | 128 | db_name("repository"), db_name("repository")); |
| 129 | 129 | db_multi_exec( |
| 130 | 130 | "INSERT INTO purgeevent(ctime,pnotes) VALUES(now(),%Q)", zNote |
| 131 | 131 | ); |
| 132 | 132 | peid = db_last_insert_rowid(); |
| @@ -193,11 +193,11 @@ | ||
| 193 | 193 | db_end_transaction(0); |
| 194 | 194 | return peid; |
| 195 | 195 | } |
| 196 | 196 | |
| 197 | 197 | /* |
| 198 | -** The TEMP table named zTab contains RIDs for a set of check-ins. | |
| 198 | +** The TEMP table named zTab contains RIDs for a set of check-ins. | |
| 199 | 199 | ** |
| 200 | 200 | ** Check to see if any check-in in zTab is a baseline manifest for some |
| 201 | 201 | ** delta manifest that is not in zTab. Return true if zTab contains a |
| 202 | 202 | ** baseline for a delta that is not in zTab. |
| 203 | 203 | ** |
| @@ -275,11 +275,11 @@ | ||
| 275 | 275 | " WHERE srcid IN \"%w_tags\"" |
| 276 | 276 | " AND rid NOT IN \"%w\")", |
| 277 | 277 | zTab, zTab, zTab |
| 278 | 278 | ); |
| 279 | 279 | } |
| 280 | - | |
| 280 | + | |
| 281 | 281 | /* Transfer the extra artifacts into zTab */ |
| 282 | 282 | db_multi_exec( |
| 283 | 283 | "INSERT OR IGNORE INTO \"%w\" SELECT fid FROM \"%w_files\";" |
| 284 | 284 | "INSERT OR IGNORE INTO \"%w\" SELECT tid FROM \"%w_tags\";" |
| 285 | 285 | "DROP TABLE \"%w_files\";" |
| @@ -377,11 +377,11 @@ | ||
| 377 | 377 | if( bag_find(&busy, iSrc) ){ |
| 378 | 378 | fossil_fatal("delta loop while uncompressing purged artifacts"); |
| 379 | 379 | } |
| 380 | 380 | bag_insert(&busy, iSrc); |
| 381 | 381 | } |
| 382 | - db_prepare(&q, | |
| 382 | + db_prepare(&q, | |
| 383 | 383 | "SELECT uuid, data, isPrivate, ix.piid" |
| 384 | 384 | " FROM ix, purgeitem" |
| 385 | 385 | " WHERE ix.srcid=%d" |
| 386 | 386 | " AND ix.piid=purgeitem.piid;", |
| 387 | 387 | iSrc |
| @@ -436,11 +436,11 @@ | ||
| 436 | 436 | ** standard output. |
| 437 | 437 | ** |
| 438 | 438 | ** fossil purge ?checkins? TAGS... ?OPTIONS? |
| 439 | 439 | ** |
| 440 | 440 | ** Move the check-ins identified by TAGS and all of their descendants |
| 441 | -** out of the repository and into the graveyard. The "checkins" | |
| 441 | +** out of the repository and into the graveyard. The "checkins" | |
| 442 | 442 | ** subcommand keyword is option and can be omitted as long as TAGS |
| 443 | 443 | ** does not conflict with any other subcommand. |
| 444 | 444 | ** |
| 445 | 445 | ** If a TAGS includes a branch name then it means all the check-ins |
| 446 | 446 | ** on the most recent occurrance of that branch. |
| 447 | 447 |
| --- src/purge.c | |
| +++ src/purge.c | |
| @@ -28,25 +28,25 @@ | |
| 28 | ** |
| 29 | ** The purgeevent table contains one entry for each purge event. For each |
| 30 | ** purge event, multiple artifacts might have been removed. Each removed |
| 31 | ** artifact is stored as an entry in the purgeitem table. |
| 32 | ** |
| 33 | ** The purgeevent and purgeitem tables are not synced, even by the |
| 34 | ** "fossil config" command. They exist only as a backup in case of a |
| 35 | ** mistaken purge or for content recovery in case there is a bug in the |
| 36 | ** purge command. |
| 37 | */ |
| 38 | static const char zPurgeInit[] = |
| 39 | @ CREATE TABLE IF NOT EXISTS "%w".purgeevent( |
| 40 | @ peid INTEGER PRIMARY KEY, -- Unique ID for the purge event |
| 41 | @ ctime DATETIME, -- When purge occurred. Seconds since 1970. |
| 42 | @ pnotes TEXT -- Human-readable notes about the purge event |
| 43 | @ ); |
| 44 | @ CREATE TABLE IF NOT EXISTS "%w".purgeitem( |
| 45 | @ piid INTEGER PRIMARY KEY, -- ID for the purge item |
| 46 | @ peid INTEGER REFERENCES purgeevent ON DELETE CASCADE, -- Purge event |
| 47 | @ orid INTEGER, -- Original RID before purged |
| 48 | @ uuid TEXT NOT NULL, -- SHA1 hash of the purged artifact |
| 49 | @ srcid INTEGER, -- Basis purgeitem for delta compression |
| 50 | @ isPrivate BOOLEAN, -- True if artifact was originally private |
| 51 | @ sz INT NOT NULL, -- Uncompressed size of the purged artifact |
| 52 | @ desc TEXT, -- Brief description of this artifact |
| @@ -122,11 +122,11 @@ | |
| 122 | db_finalize(&q); |
| 123 | |
| 124 | /* Construct the graveyard and copy the artifacts to be purged into the |
| 125 | ** graveyard */ |
| 126 | if( moveToGraveyard ){ |
| 127 | db_multi_exec(zPurgeInit /*works-like:"%w%w"*/, |
| 128 | db_name("repository"), db_name("repository")); |
| 129 | db_multi_exec( |
| 130 | "INSERT INTO purgeevent(ctime,pnotes) VALUES(now(),%Q)", zNote |
| 131 | ); |
| 132 | peid = db_last_insert_rowid(); |
| @@ -193,11 +193,11 @@ | |
| 193 | db_end_transaction(0); |
| 194 | return peid; |
| 195 | } |
| 196 | |
| 197 | /* |
| 198 | ** The TEMP table named zTab contains RIDs for a set of check-ins. |
| 199 | ** |
| 200 | ** Check to see if any check-in in zTab is a baseline manifest for some |
| 201 | ** delta manifest that is not in zTab. Return true if zTab contains a |
| 202 | ** baseline for a delta that is not in zTab. |
| 203 | ** |
| @@ -275,11 +275,11 @@ | |
| 275 | " WHERE srcid IN \"%w_tags\"" |
| 276 | " AND rid NOT IN \"%w\")", |
| 277 | zTab, zTab, zTab |
| 278 | ); |
| 279 | } |
| 280 | |
| 281 | /* Transfer the extra artifacts into zTab */ |
| 282 | db_multi_exec( |
| 283 | "INSERT OR IGNORE INTO \"%w\" SELECT fid FROM \"%w_files\";" |
| 284 | "INSERT OR IGNORE INTO \"%w\" SELECT tid FROM \"%w_tags\";" |
| 285 | "DROP TABLE \"%w_files\";" |
| @@ -377,11 +377,11 @@ | |
| 377 | if( bag_find(&busy, iSrc) ){ |
| 378 | fossil_fatal("delta loop while uncompressing purged artifacts"); |
| 379 | } |
| 380 | bag_insert(&busy, iSrc); |
| 381 | } |
| 382 | db_prepare(&q, |
| 383 | "SELECT uuid, data, isPrivate, ix.piid" |
| 384 | " FROM ix, purgeitem" |
| 385 | " WHERE ix.srcid=%d" |
| 386 | " AND ix.piid=purgeitem.piid;", |
| 387 | iSrc |
| @@ -436,11 +436,11 @@ | |
| 436 | ** standard output. |
| 437 | ** |
| 438 | ** fossil purge ?checkins? TAGS... ?OPTIONS? |
| 439 | ** |
| 440 | ** Move the check-ins identified by TAGS and all of their descendants |
| 441 | ** out of the repository and into the graveyard. The "checkins" |
| 442 | ** subcommand keyword is option and can be omitted as long as TAGS |
| 443 | ** does not conflict with any other subcommand. |
| 444 | ** |
| 445 | ** If a TAGS includes a branch name then it means all the check-ins |
| 446 | ** on the most recent occurrance of that branch. |
| 447 |
| --- src/purge.c | |
| +++ src/purge.c | |
| @@ -28,25 +28,25 @@ | |
| 28 | ** |
| 29 | ** The purgeevent table contains one entry for each purge event. For each |
| 30 | ** purge event, multiple artifacts might have been removed. Each removed |
| 31 | ** artifact is stored as an entry in the purgeitem table. |
| 32 | ** |
| 33 | ** The purgeevent and purgeitem tables are not synced, even by the |
| 34 | ** "fossil config" command. They exist only as a backup in case of a |
| 35 | ** mistaken purge or for content recovery in case there is a bug in the |
| 36 | ** purge command. |
| 37 | */ |
| 38 | static const char zPurgeInit[] = |
| 39 | @ CREATE TABLE IF NOT EXISTS "%w".purgeevent( |
| 40 | @ peid INTEGER PRIMARY KEY, -- Unique ID for the purge event |
| 41 | @ ctime DATETIME, -- When purge occurred. Seconds since 1970. |
| 42 | @ pnotes TEXT -- Human-readable notes about the purge event |
| 43 | @ ); |
| 44 | @ CREATE TABLE IF NOT EXISTS "%w".purgeitem( |
| 45 | @ piid INTEGER PRIMARY KEY, -- ID for the purge item |
| 46 | @ peid INTEGER REFERENCES purgeevent ON DELETE CASCADE, -- Purge event |
| 47 | @ orid INTEGER, -- Original RID before purged |
| 48 | @ uuid TEXT NOT NULL, -- SHA1 hash of the purged artifact |
| 49 | @ srcid INTEGER, -- Basis purgeitem for delta compression |
| 50 | @ isPrivate BOOLEAN, -- True if artifact was originally private |
| 51 | @ sz INT NOT NULL, -- Uncompressed size of the purged artifact |
| 52 | @ desc TEXT, -- Brief description of this artifact |
| @@ -122,11 +122,11 @@ | |
| 122 | db_finalize(&q); |
| 123 | |
| 124 | /* Construct the graveyard and copy the artifacts to be purged into the |
| 125 | ** graveyard */ |
| 126 | if( moveToGraveyard ){ |
| 127 | db_multi_exec(zPurgeInit /*works-like:"%w%w"*/, |
| 128 | db_name("repository"), db_name("repository")); |
| 129 | db_multi_exec( |
| 130 | "INSERT INTO purgeevent(ctime,pnotes) VALUES(now(),%Q)", zNote |
| 131 | ); |
| 132 | peid = db_last_insert_rowid(); |
| @@ -193,11 +193,11 @@ | |
| 193 | db_end_transaction(0); |
| 194 | return peid; |
| 195 | } |
| 196 | |
| 197 | /* |
| 198 | ** The TEMP table named zTab contains RIDs for a set of check-ins. |
| 199 | ** |
| 200 | ** Check to see if any check-in in zTab is a baseline manifest for some |
| 201 | ** delta manifest that is not in zTab. Return true if zTab contains a |
| 202 | ** baseline for a delta that is not in zTab. |
| 203 | ** |
| @@ -275,11 +275,11 @@ | |
| 275 | " WHERE srcid IN \"%w_tags\"" |
| 276 | " AND rid NOT IN \"%w\")", |
| 277 | zTab, zTab, zTab |
| 278 | ); |
| 279 | } |
| 280 | |
| 281 | /* Transfer the extra artifacts into zTab */ |
| 282 | db_multi_exec( |
| 283 | "INSERT OR IGNORE INTO \"%w\" SELECT fid FROM \"%w_files\";" |
| 284 | "INSERT OR IGNORE INTO \"%w\" SELECT tid FROM \"%w_tags\";" |
| 285 | "DROP TABLE \"%w_files\";" |
| @@ -377,11 +377,11 @@ | |
| 377 | if( bag_find(&busy, iSrc) ){ |
| 378 | fossil_fatal("delta loop while uncompressing purged artifacts"); |
| 379 | } |
| 380 | bag_insert(&busy, iSrc); |
| 381 | } |
| 382 | db_prepare(&q, |
| 383 | "SELECT uuid, data, isPrivate, ix.piid" |
| 384 | " FROM ix, purgeitem" |
| 385 | " WHERE ix.srcid=%d" |
| 386 | " AND ix.piid=purgeitem.piid;", |
| 387 | iSrc |
| @@ -436,11 +436,11 @@ | |
| 436 | ** standard output. |
| 437 | ** |
| 438 | ** fossil purge ?checkins? TAGS... ?OPTIONS? |
| 439 | ** |
| 440 | ** Move the check-ins identified by TAGS and all of their descendants |
| 441 | ** out of the repository and into the graveyard. The "checkins" |
| 442 | ** subcommand keyword is option and can be omitted as long as TAGS |
| 443 | ** does not conflict with any other subcommand. |
| 444 | ** |
| 445 | ** If a TAGS includes a branch name then it means all the check-ins |
| 446 | ** on the most recent occurrance of that branch. |
| 447 |
+3
-3
| --- src/search.c | ||
| +++ src/search.c | ||
| @@ -729,11 +729,11 @@ | ||
| 729 | 729 | |
| 730 | 730 | /* |
| 731 | 731 | ** Number of significant bits in a u32 |
| 732 | 732 | */ |
| 733 | 733 | static int nbits(u32 x){ |
| 734 | - int n = 0; | |
| 734 | + int n = 0; | |
| 735 | 735 | while( x ){ n++; x >>= 1; } |
| 736 | 736 | return n; |
| 737 | 737 | } |
| 738 | 738 | |
| 739 | 739 | /* |
| @@ -1251,11 +1251,11 @@ | ||
| 1251 | 1251 | } |
| 1252 | 1252 | } |
| 1253 | 1253 | } |
| 1254 | 1254 | |
| 1255 | 1255 | /* |
| 1256 | -** This routine is a wrapper around search_stext(). | |
| 1256 | +** This routine is a wrapper around search_stext(). | |
| 1257 | 1257 | ** |
| 1258 | 1258 | ** This routine looks up the search text, stores it in an internal |
| 1259 | 1259 | ** buffer, and returns a pointer to the text. Subsequent requests |
| 1260 | 1260 | ** for the same document return the same pointer. The returned pointer |
| 1261 | 1261 | ** is valid until the next invocation of this routine. Call this routine |
| @@ -1693,11 +1693,11 @@ | ||
| 1693 | 1693 | } |
| 1694 | 1694 | if( iCmd==5 ){ |
| 1695 | 1695 | if( g.argc<4 ) usage("porter ON/OFF"); |
| 1696 | 1696 | db_set_int("search-stemmer", is_truth(g.argv[3]), 0); |
| 1697 | 1697 | } |
| 1698 | - | |
| 1698 | + | |
| 1699 | 1699 | |
| 1700 | 1700 | /* destroy or rebuild the index, if requested */ |
| 1701 | 1701 | if( iAction>=1 ){ |
| 1702 | 1702 | search_drop_index(); |
| 1703 | 1703 | } |
| 1704 | 1704 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -729,11 +729,11 @@ | |
| 729 | |
| 730 | /* |
| 731 | ** Number of significant bits in a u32 |
| 732 | */ |
| 733 | static int nbits(u32 x){ |
| 734 | int n = 0; |
| 735 | while( x ){ n++; x >>= 1; } |
| 736 | return n; |
| 737 | } |
| 738 | |
| 739 | /* |
| @@ -1251,11 +1251,11 @@ | |
| 1251 | } |
| 1252 | } |
| 1253 | } |
| 1254 | |
| 1255 | /* |
| 1256 | ** This routine is a wrapper around search_stext(). |
| 1257 | ** |
| 1258 | ** This routine looks up the search text, stores it in an internal |
| 1259 | ** buffer, and returns a pointer to the text. Subsequent requests |
| 1260 | ** for the same document return the same pointer. The returned pointer |
| 1261 | ** is valid until the next invocation of this routine. Call this routine |
| @@ -1693,11 +1693,11 @@ | |
| 1693 | } |
| 1694 | if( iCmd==5 ){ |
| 1695 | if( g.argc<4 ) usage("porter ON/OFF"); |
| 1696 | db_set_int("search-stemmer", is_truth(g.argv[3]), 0); |
| 1697 | } |
| 1698 | |
| 1699 | |
| 1700 | /* destroy or rebuild the index, if requested */ |
| 1701 | if( iAction>=1 ){ |
| 1702 | search_drop_index(); |
| 1703 | } |
| 1704 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -729,11 +729,11 @@ | |
| 729 | |
| 730 | /* |
| 731 | ** Number of significant bits in a u32 |
| 732 | */ |
| 733 | static int nbits(u32 x){ |
| 734 | int n = 0; |
| 735 | while( x ){ n++; x >>= 1; } |
| 736 | return n; |
| 737 | } |
| 738 | |
| 739 | /* |
| @@ -1251,11 +1251,11 @@ | |
| 1251 | } |
| 1252 | } |
| 1253 | } |
| 1254 | |
| 1255 | /* |
| 1256 | ** This routine is a wrapper around search_stext(). |
| 1257 | ** |
| 1258 | ** This routine looks up the search text, stores it in an internal |
| 1259 | ** buffer, and returns a pointer to the text. Subsequent requests |
| 1260 | ** for the same document return the same pointer. The returned pointer |
| 1261 | ** is valid until the next invocation of this routine. Call this routine |
| @@ -1693,11 +1693,11 @@ | |
| 1693 | } |
| 1694 | if( iCmd==5 ){ |
| 1695 | if( g.argc<4 ) usage("porter ON/OFF"); |
| 1696 | db_set_int("search-stemmer", is_truth(g.argv[3]), 0); |
| 1697 | } |
| 1698 | |
| 1699 | |
| 1700 | /* destroy or rebuild the index, if requested */ |
| 1701 | if( iAction>=1 ){ |
| 1702 | search_drop_index(); |
| 1703 | } |
| 1704 |
+5
-1
| --- src/style.c | ||
| +++ src/style.c | ||
| @@ -823,11 +823,11 @@ | ||
| 823 | 823 | @ white-space: nowrap; |
| 824 | 824 | }, |
| 825 | 825 | { "ul.browser li.file", |
| 826 | 826 | "List element in the 'flat-view' file browser for a file", |
| 827 | 827 | " background-image: url(data:image/gif;base64,R0lGODlhEAAQAJEAAP" |
| 828 | - "\\/\\/\\/yEhIf\\/\\/\\/wAAACH5BAEHAAIALAAAAAAQABAAAAIvlIKpxqcfm" | |
| 828 | + "\\/\\/\\/yEhIf\\/\\/\\/wAAACH5BAEHAAIALAAAAAAQABAAAAIvlIKpxqcfm" | |
| 829 | 829 | "gOUvoaqDSCxrEEfF14GqFXImJZsu73wepJzVMNxrtNTj3NATMKhpwAAOw==);\n" |
| 830 | 830 | " background-repeat: no-repeat;\n" |
| 831 | 831 | " background-position: 0px center;\n" |
| 832 | 832 | " padding-left: 20px;\n" |
| 833 | 833 | " padding-top: 2px;\n" |
| @@ -1108,10 +1108,14 @@ | ||
| 1108 | 1108 | { "ul.filelist", |
| 1109 | 1109 | "List of files in a timeline", |
| 1110 | 1110 | @ margin-top: 3px; |
| 1111 | 1111 | @ line-height: 100%; |
| 1112 | 1112 | }, |
| 1113 | + { "ul.filelist li", | |
| 1114 | + "List of files in a timeline", | |
| 1115 | + @ padding-top: 1px; | |
| 1116 | + }, | |
| 1113 | 1117 | { "table.sbsdiffcols", |
| 1114 | 1118 | "side-by-side diff display (column-based)", |
| 1115 | 1119 | @ width: 90%; |
| 1116 | 1120 | @ border-spacing: 0; |
| 1117 | 1121 | @ font-size: xx-small; |
| 1118 | 1122 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -823,11 +823,11 @@ | |
| 823 | @ white-space: nowrap; |
| 824 | }, |
| 825 | { "ul.browser li.file", |
| 826 | "List element in the 'flat-view' file browser for a file", |
| 827 | " background-image: url(data:image/gif;base64,R0lGODlhEAAQAJEAAP" |
| 828 | "\\/\\/\\/yEhIf\\/\\/\\/wAAACH5BAEHAAIALAAAAAAQABAAAAIvlIKpxqcfm" |
| 829 | "gOUvoaqDSCxrEEfF14GqFXImJZsu73wepJzVMNxrtNTj3NATMKhpwAAOw==);\n" |
| 830 | " background-repeat: no-repeat;\n" |
| 831 | " background-position: 0px center;\n" |
| 832 | " padding-left: 20px;\n" |
| 833 | " padding-top: 2px;\n" |
| @@ -1108,10 +1108,14 @@ | |
| 1108 | { "ul.filelist", |
| 1109 | "List of files in a timeline", |
| 1110 | @ margin-top: 3px; |
| 1111 | @ line-height: 100%; |
| 1112 | }, |
| 1113 | { "table.sbsdiffcols", |
| 1114 | "side-by-side diff display (column-based)", |
| 1115 | @ width: 90%; |
| 1116 | @ border-spacing: 0; |
| 1117 | @ font-size: xx-small; |
| 1118 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -823,11 +823,11 @@ | |
| 823 | @ white-space: nowrap; |
| 824 | }, |
| 825 | { "ul.browser li.file", |
| 826 | "List element in the 'flat-view' file browser for a file", |
| 827 | " background-image: url(data:image/gif;base64,R0lGODlhEAAQAJEAAP" |
| 828 | "\\/\\/\\/yEhIf\\/\\/\\/wAAACH5BAEHAAIALAAAAAAQABAAAAIvlIKpxqcfm" |
| 829 | "gOUvoaqDSCxrEEfF14GqFXImJZsu73wepJzVMNxrtNTj3NATMKhpwAAOw==);\n" |
| 830 | " background-repeat: no-repeat;\n" |
| 831 | " background-position: 0px center;\n" |
| 832 | " padding-left: 20px;\n" |
| 833 | " padding-top: 2px;\n" |
| @@ -1108,10 +1108,14 @@ | |
| 1108 | { "ul.filelist", |
| 1109 | "List of files in a timeline", |
| 1110 | @ margin-top: 3px; |
| 1111 | @ line-height: 100%; |
| 1112 | }, |
| 1113 | { "ul.filelist li", |
| 1114 | "List of files in a timeline", |
| 1115 | @ padding-top: 1px; |
| 1116 | }, |
| 1117 | { "table.sbsdiffcols", |
| 1118 | "side-by-side diff display (column-based)", |
| 1119 | @ width: 90%; |
| 1120 | @ border-spacing: 0; |
| 1121 | @ font-size: xx-small; |
| 1122 |
+6
| --- src/th_main.c | ||
| +++ src/th_main.c | ||
| @@ -514,10 +514,11 @@ | ||
| 514 | 514 | ** "useTclStubs" = USE_TCL_STUBS |
| 515 | 515 | ** "tclStubs" = FOSSIL_ENABLE_TCL_STUBS |
| 516 | 516 | ** "tclPrivateStubs" = FOSSIL_ENABLE_TCL_PRIVATE_STUBS |
| 517 | 517 | ** "json" = FOSSIL_ENABLE_JSON |
| 518 | 518 | ** "markdown" = FOSSIL_ENABLE_MARKDOWN |
| 519 | +** "unicodeCmdLine" = !BROKEN_MINGW_CMDLINE | |
| 519 | 520 | ** |
| 520 | 521 | */ |
| 521 | 522 | static int hasfeatureCmd( |
| 522 | 523 | Th_Interp *interp, |
| 523 | 524 | void *p, |
| @@ -576,10 +577,15 @@ | ||
| 576 | 577 | #endif |
| 577 | 578 | #if defined(FOSSIL_ENABLE_JSON) |
| 578 | 579 | else if( 0 == fossil_strnicmp( zArg, "json\0", 5 ) ){ |
| 579 | 580 | rc = 1; |
| 580 | 581 | } |
| 582 | +#endif | |
| 583 | +#if !defined(BROKEN_MINGW_CMDLINE) | |
| 584 | + else if( 0 == fossil_strnicmp( zArg, "unicodeCmdLine\0", 15 ) ){ | |
| 585 | + rc = 1; | |
| 586 | + } | |
| 581 | 587 | #endif |
| 582 | 588 | else if( 0 == fossil_strnicmp( zArg, "markdown\0", 9 ) ){ |
| 583 | 589 | rc = 1; |
| 584 | 590 | } |
| 585 | 591 | if( g.thTrace ){ |
| 586 | 592 |
| --- src/th_main.c | |
| +++ src/th_main.c | |
| @@ -514,10 +514,11 @@ | |
| 514 | ** "useTclStubs" = USE_TCL_STUBS |
| 515 | ** "tclStubs" = FOSSIL_ENABLE_TCL_STUBS |
| 516 | ** "tclPrivateStubs" = FOSSIL_ENABLE_TCL_PRIVATE_STUBS |
| 517 | ** "json" = FOSSIL_ENABLE_JSON |
| 518 | ** "markdown" = FOSSIL_ENABLE_MARKDOWN |
| 519 | ** |
| 520 | */ |
| 521 | static int hasfeatureCmd( |
| 522 | Th_Interp *interp, |
| 523 | void *p, |
| @@ -576,10 +577,15 @@ | |
| 576 | #endif |
| 577 | #if defined(FOSSIL_ENABLE_JSON) |
| 578 | else if( 0 == fossil_strnicmp( zArg, "json\0", 5 ) ){ |
| 579 | rc = 1; |
| 580 | } |
| 581 | #endif |
| 582 | else if( 0 == fossil_strnicmp( zArg, "markdown\0", 9 ) ){ |
| 583 | rc = 1; |
| 584 | } |
| 585 | if( g.thTrace ){ |
| 586 |
| --- src/th_main.c | |
| +++ src/th_main.c | |
| @@ -514,10 +514,11 @@ | |
| 514 | ** "useTclStubs" = USE_TCL_STUBS |
| 515 | ** "tclStubs" = FOSSIL_ENABLE_TCL_STUBS |
| 516 | ** "tclPrivateStubs" = FOSSIL_ENABLE_TCL_PRIVATE_STUBS |
| 517 | ** "json" = FOSSIL_ENABLE_JSON |
| 518 | ** "markdown" = FOSSIL_ENABLE_MARKDOWN |
| 519 | ** "unicodeCmdLine" = !BROKEN_MINGW_CMDLINE |
| 520 | ** |
| 521 | */ |
| 522 | static int hasfeatureCmd( |
| 523 | Th_Interp *interp, |
| 524 | void *p, |
| @@ -576,10 +577,15 @@ | |
| 577 | #endif |
| 578 | #if defined(FOSSIL_ENABLE_JSON) |
| 579 | else if( 0 == fossil_strnicmp( zArg, "json\0", 5 ) ){ |
| 580 | rc = 1; |
| 581 | } |
| 582 | #endif |
| 583 | #if !defined(BROKEN_MINGW_CMDLINE) |
| 584 | else if( 0 == fossil_strnicmp( zArg, "unicodeCmdLine\0", 15 ) ){ |
| 585 | rc = 1; |
| 586 | } |
| 587 | #endif |
| 588 | else if( 0 == fossil_strnicmp( zArg, "markdown\0", 9 ) ){ |
| 589 | rc = 1; |
| 590 | } |
| 591 | if( g.thTrace ){ |
| 592 |
+6
| --- src/th_main.c | ||
| +++ src/th_main.c | ||
| @@ -514,10 +514,11 @@ | ||
| 514 | 514 | ** "useTclStubs" = USE_TCL_STUBS |
| 515 | 515 | ** "tclStubs" = FOSSIL_ENABLE_TCL_STUBS |
| 516 | 516 | ** "tclPrivateStubs" = FOSSIL_ENABLE_TCL_PRIVATE_STUBS |
| 517 | 517 | ** "json" = FOSSIL_ENABLE_JSON |
| 518 | 518 | ** "markdown" = FOSSIL_ENABLE_MARKDOWN |
| 519 | +** "unicodeCmdLine" = !BROKEN_MINGW_CMDLINE | |
| 519 | 520 | ** |
| 520 | 521 | */ |
| 521 | 522 | static int hasfeatureCmd( |
| 522 | 523 | Th_Interp *interp, |
| 523 | 524 | void *p, |
| @@ -576,10 +577,15 @@ | ||
| 576 | 577 | #endif |
| 577 | 578 | #if defined(FOSSIL_ENABLE_JSON) |
| 578 | 579 | else if( 0 == fossil_strnicmp( zArg, "json\0", 5 ) ){ |
| 579 | 580 | rc = 1; |
| 580 | 581 | } |
| 582 | +#endif | |
| 583 | +#if !defined(BROKEN_MINGW_CMDLINE) | |
| 584 | + else if( 0 == fossil_strnicmp( zArg, "unicodeCmdLine\0", 15 ) ){ | |
| 585 | + rc = 1; | |
| 586 | + } | |
| 581 | 587 | #endif |
| 582 | 588 | else if( 0 == fossil_strnicmp( zArg, "markdown\0", 9 ) ){ |
| 583 | 589 | rc = 1; |
| 584 | 590 | } |
| 585 | 591 | if( g.thTrace ){ |
| 586 | 592 |
| --- src/th_main.c | |
| +++ src/th_main.c | |
| @@ -514,10 +514,11 @@ | |
| 514 | ** "useTclStubs" = USE_TCL_STUBS |
| 515 | ** "tclStubs" = FOSSIL_ENABLE_TCL_STUBS |
| 516 | ** "tclPrivateStubs" = FOSSIL_ENABLE_TCL_PRIVATE_STUBS |
| 517 | ** "json" = FOSSIL_ENABLE_JSON |
| 518 | ** "markdown" = FOSSIL_ENABLE_MARKDOWN |
| 519 | ** |
| 520 | */ |
| 521 | static int hasfeatureCmd( |
| 522 | Th_Interp *interp, |
| 523 | void *p, |
| @@ -576,10 +577,15 @@ | |
| 576 | #endif |
| 577 | #if defined(FOSSIL_ENABLE_JSON) |
| 578 | else if( 0 == fossil_strnicmp( zArg, "json\0", 5 ) ){ |
| 579 | rc = 1; |
| 580 | } |
| 581 | #endif |
| 582 | else if( 0 == fossil_strnicmp( zArg, "markdown\0", 9 ) ){ |
| 583 | rc = 1; |
| 584 | } |
| 585 | if( g.thTrace ){ |
| 586 |
| --- src/th_main.c | |
| +++ src/th_main.c | |
| @@ -514,10 +514,11 @@ | |
| 514 | ** "useTclStubs" = USE_TCL_STUBS |
| 515 | ** "tclStubs" = FOSSIL_ENABLE_TCL_STUBS |
| 516 | ** "tclPrivateStubs" = FOSSIL_ENABLE_TCL_PRIVATE_STUBS |
| 517 | ** "json" = FOSSIL_ENABLE_JSON |
| 518 | ** "markdown" = FOSSIL_ENABLE_MARKDOWN |
| 519 | ** "unicodeCmdLine" = !BROKEN_MINGW_CMDLINE |
| 520 | ** |
| 521 | */ |
| 522 | static int hasfeatureCmd( |
| 523 | Th_Interp *interp, |
| 524 | void *p, |
| @@ -576,10 +577,15 @@ | |
| 577 | #endif |
| 578 | #if defined(FOSSIL_ENABLE_JSON) |
| 579 | else if( 0 == fossil_strnicmp( zArg, "json\0", 5 ) ){ |
| 580 | rc = 1; |
| 581 | } |
| 582 | #endif |
| 583 | #if !defined(BROKEN_MINGW_CMDLINE) |
| 584 | else if( 0 == fossil_strnicmp( zArg, "unicodeCmdLine\0", 15 ) ){ |
| 585 | rc = 1; |
| 586 | } |
| 587 | #endif |
| 588 | else if( 0 == fossil_strnicmp( zArg, "markdown\0", 9 ) ){ |
| 589 | rc = 1; |
| 590 | } |
| 591 | if( g.thTrace ){ |
| 592 |
+1
-1
| --- www/index.wiki | ||
| +++ www/index.wiki | ||
| @@ -14,11 +14,11 @@ | ||
| 14 | 14 | <li> [./hints.wiki | Tip & Hints] |
| 15 | 15 | <li> [./permutedindex.html | Documentation Index] |
| 16 | 16 | <li> [http://www.fossil-scm.org/schimpf-book/home | Jim Schimpf's book] |
| 17 | 17 | <li> Mailing list |
| 18 | 18 | <ul> |
| 19 | - <li> [http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | sign-up] | |
| 19 | + <li> [http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/fossil-users | sign-up] | |
| 20 | 20 | <li> [http://www.mail-archive.com/[email protected] | archives] |
| 21 | 21 | </ul> |
| 22 | 22 | </ul> |
| 23 | 23 | <center><img src="fossil3.gif"></center> |
| 24 | 24 | </div> |
| 25 | 25 |
| --- www/index.wiki | |
| +++ www/index.wiki | |
| @@ -14,11 +14,11 @@ | |
| 14 | <li> [./hints.wiki | Tip & Hints] |
| 15 | <li> [./permutedindex.html | Documentation Index] |
| 16 | <li> [http://www.fossil-scm.org/schimpf-book/home | Jim Schimpf's book] |
| 17 | <li> Mailing list |
| 18 | <ul> |
| 19 | <li> [http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | sign-up] |
| 20 | <li> [http://www.mail-archive.com/[email protected] | archives] |
| 21 | </ul> |
| 22 | </ul> |
| 23 | <center><img src="fossil3.gif"></center> |
| 24 | </div> |
| 25 |
| --- www/index.wiki | |
| +++ www/index.wiki | |
| @@ -14,11 +14,11 @@ | |
| 14 | <li> [./hints.wiki | Tip & Hints] |
| 15 | <li> [./permutedindex.html | Documentation Index] |
| 16 | <li> [http://www.fossil-scm.org/schimpf-book/home | Jim Schimpf's book] |
| 17 | <li> Mailing list |
| 18 | <ul> |
| 19 | <li> [http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/fossil-users | sign-up] |
| 20 | <li> [http://www.mail-archive.com/[email protected] | archives] |
| 21 | </ul> |
| 22 | </ul> |
| 23 | <center><img src="fossil3.gif"></center> |
| 24 | </div> |
| 25 |
| --- www/tech_overview.wiki | ||
| +++ www/tech_overview.wiki | ||
| @@ -130,10 +130,13 @@ | ||
| 130 | 130 | located in the user's home directory. On Windows, the configuration |
| 131 | 131 | database is named "_fossil" (using an underscore as the first character |
| 132 | 132 | instead of a dot) and is located in the directory specified by the |
| 133 | 133 | LOCALAPPDATA, APPDATA, or HOMEPATH environment variables, in that order. |
| 134 | 134 | |
| 135 | +You can override this default location by defining the environment | |
| 136 | +variable FOSSIL_HOME pointing to an appropriate (writable) directory. | |
| 137 | + | |
| 135 | 138 | <h3>2.2 Repository Databases</h3> |
| 136 | 139 | |
| 137 | 140 | The repository database is the file that is commonly referred to as |
| 138 | 141 | "the repository". This is because the repository database contains, |
| 139 | 142 | among other things, the complete revision, ticket, and wiki history for |
| 140 | 143 |
| --- www/tech_overview.wiki | |
| +++ www/tech_overview.wiki | |
| @@ -130,10 +130,13 @@ | |
| 130 | located in the user's home directory. On Windows, the configuration |
| 131 | database is named "_fossil" (using an underscore as the first character |
| 132 | instead of a dot) and is located in the directory specified by the |
| 133 | LOCALAPPDATA, APPDATA, or HOMEPATH environment variables, in that order. |
| 134 | |
| 135 | <h3>2.2 Repository Databases</h3> |
| 136 | |
| 137 | The repository database is the file that is commonly referred to as |
| 138 | "the repository". This is because the repository database contains, |
| 139 | among other things, the complete revision, ticket, and wiki history for |
| 140 |
| --- www/tech_overview.wiki | |
| +++ www/tech_overview.wiki | |
| @@ -130,10 +130,13 @@ | |
| 130 | located in the user's home directory. On Windows, the configuration |
| 131 | database is named "_fossil" (using an underscore as the first character |
| 132 | instead of a dot) and is located in the directory specified by the |
| 133 | LOCALAPPDATA, APPDATA, or HOMEPATH environment variables, in that order. |
| 134 | |
| 135 | You can override this default location by defining the environment |
| 136 | variable FOSSIL_HOME pointing to an appropriate (writable) directory. |
| 137 | |
| 138 | <h3>2.2 Repository Databases</h3> |
| 139 | |
| 140 | The repository database is the file that is commonly referred to as |
| 141 | "the repository". This is because the repository database contains, |
| 142 | among other things, the complete revision, ticket, and wiki history for |
| 143 |