Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch drh-brthday-2021 Excluding Merge-Ins
This is equivalent to a diff from fb39f02b77 to fd0521e130
2021-04-08
| ||
14:14 | Set eol time. ... (Leaf check-in: fd0521e130 user: rene tags: drh-brthday-2021 (unpublished)) | |
06:33 | Timely amendment to main() documentation. ... (check-in: c1471aa040 user: jamsek tags: drh-brthday-2021 (unpublished)) | |
2021-03-27
| ||
16:04 | /chat: removed the unused/unnecessary jump-to-top/bottom buttons. ... (check-in: a044fea785 user: stephan tags: trunk) | |
03:51 | Minor doc addition. ... (check-in: e9438affc3 user: stephan tags: drh-brthday-2021 (unpublished)) | |
2021-03-26
| ||
20:28 | Darkmode skin ticket page style improvements from [forum:/forumpost/f7f89e2cdb | forum post f7f89e2cdb]. ... (check-in: fb39f02b77 user: stephan tags: trunk) | |
20:16 | Append to the list of [/doc/trunk/www/changes.wiki#v2_15|changes in v2.15] an item about [/help?cmd=/whistory|/whistory]. ... (check-in: 920b7079f2 user: george tags: trunk) | |
Changes to README.md.
|
Changes to VERSION.
|
Changes to compat/tcl-8.6/generic/tcl.h.
︙ | |||
49 50 51 52 53 54 55 | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | - - + + - - + + + + + + + + + + + + + + + + + + + + + + | * macosx/Tcl.xcode/default.pbxuser (not patchlevel) 1 LOC * macosx/Tcl-Common.xcconfig (not patchlevel) 1 LOC * win/README (not patchlevel) (sections 0 and 2) * unix/tcl.spec (1 LOC patch) * tools/tcl.hpj.in (not patchlevel, for windows installer) */ |
︙ | |||
625 626 627 628 629 630 631 | 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 | - + - + - + - + - | /* * Structures filled in by Tcl_RegExpInfo. Note that all offset values are * relative to the start of the match string, not the beginning of the entire * string. */ typedef struct Tcl_RegExpIndices { |
︙ | |||
806 807 808 809 810 811 812 | 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 | - + - + | /* * One of the following structures exists for each object in the Tcl system. * An object stores a value as either a string, some internal representation, * or both. */ typedef struct Tcl_Obj { |
︙ | |||
986 987 988 989 990 991 992 | 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 | - + - + | * macros Tcl_DStringValue and Tcl_DStringLength. */ #define TCL_DSTRING_STATIC_SIZE 200 typedef struct Tcl_DString { char *string; /* Points to beginning of string: either * staticSpace below or a malloced array. */ |
︙ | |||
1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 | 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 | + + + + - + | #define TCL_LINK_WIDE_UINT 14 #define TCL_LINK_READ_ONLY 0x80 /* *---------------------------------------------------------------------------- * Forward declarations of Tcl_HashTable and related types. */ #ifndef TCL_HASH_TYPE # define TCL_HASH_TYPE size_t #endif typedef struct Tcl_HashKeyType Tcl_HashKeyType; typedef struct Tcl_HashTable Tcl_HashTable; typedef struct Tcl_HashEntry Tcl_HashEntry; |
︙ | |||
1183 1184 1185 1186 1187 1188 1189 | 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 | - - + - - - - - - - - + | * should access any of these fields directly; use the macros defined below. */ struct Tcl_HashEntry { Tcl_HashEntry *nextPtr; /* Pointer to next entry in this hash bucket, * or NULL for end of chain. */ Tcl_HashTable *tablePtr; /* Pointer to table containing entry. */ |
︙ | |||
1280 1281 1282 1283 1284 1285 1286 | 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 | - + - + - + + - - + | struct Tcl_HashTable { Tcl_HashEntry **buckets; /* Pointer to bucket array. Each element * points to first entry in bucket's hash * chain, or NULL. */ Tcl_HashEntry *staticBuckets[TCL_SMALL_HASH_TABLE]; /* Bucket array used for small tables (to * avoid mallocs and frees). */ |
︙ | |||
1351 1352 1353 1354 1355 1356 1357 | 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 | - - + + | * dictionaries. These fields should not be accessed by code outside * tclDictObj.c */ typedef struct { void *next; /* Search position for underlying hash * table. */ |
︙ | |||
1728 1729 1730 1731 1732 1733 1734 | 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 | - + | * Not all entries need be non-NULL; any which are NULL are simply ignored. * However, a complete filesystem should provide all of these functions. The * explanations in the structure show the importance of each function. */ typedef struct Tcl_Filesystem { const char *typeName; /* The name of the filesystem. */ |
︙ | |||
1918 1919 1920 1921 1922 1923 1924 | 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 | - - + + | * token. */ typedef struct Tcl_Token { int type; /* Type of token, such as TCL_TOKEN_WORD; see * below for valid types. */ const char *start; /* First character in token. */ |
︙ | |||
2033 2034 2035 2036 2037 2038 2039 | 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 | - + | */ #define NUM_STATIC_TOKENS 20 typedef struct Tcl_Parse { const char *commentStart; /* Pointer to # that begins the first of one * or more comments preceding the command. */ |
︙ | |||
2378 2379 2380 2381 2382 2383 2384 | 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 | - + - + | * The following constant is used to test for older versions of Tcl in the * stubs tables. * * Jan Nijtman's plus patch uses 0xFCA1BACF, so we need to pick a different * value since the stubs tables don't match. */ |
︙ | |||
2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 | 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 | + + + + + - + + | # define Tcl_DumpActiveMemory(x) # undef Tcl_ValidateAllMemory # define Tcl_ValidateAllMemory(x,y) #endif /* !TCL_MEM_DEBUG */ #ifdef TCL_MEM_DEBUG # undef Tcl_IncrRefCount # define Tcl_IncrRefCount(objPtr) \ Tcl_DbIncrRefCount(objPtr, __FILE__, __LINE__) # undef Tcl_DecrRefCount # define Tcl_DecrRefCount(objPtr) \ Tcl_DbDecrRefCount(objPtr, __FILE__, __LINE__) # undef Tcl_IsShared # define Tcl_IsShared(objPtr) \ Tcl_DbIsShared(objPtr, __FILE__, __LINE__) #else # undef Tcl_IncrRefCount # define Tcl_IncrRefCount(objPtr) \ ++(objPtr)->refCount /* * Use do/while0 idiom for optimum correctness without compiler warnings. * http://c2.com/cgi/wiki?TrivialDoWhileLoop */ # undef Tcl_DecrRefCount # define Tcl_DecrRefCount(objPtr) \ do { \ Tcl_Obj *_objPtr = (objPtr); \ |
︙ |
Changes to compat/tcl-8.6/generic/tclDecls.h.
︙ | |||
119 120 121 122 123 124 125 | 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | - + | const char *file, int line); /* 26 */ EXTERN Tcl_Obj * Tcl_DbNewLongObj(long longValue, const char *file, int line); /* 27 */ EXTERN Tcl_Obj * Tcl_DbNewObj(const char *file, int line); /* 28 */ |
︙ | |||
197 198 199 200 201 202 203 | 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | - + | /* 53 */ EXTERN Tcl_Obj * Tcl_NewListObj(int objc, Tcl_Obj *const objv[]); /* 54 */ EXTERN Tcl_Obj * Tcl_NewLongObj(long longValue); /* 55 */ EXTERN Tcl_Obj * Tcl_NewObj(void); /* 56 */ |
︙ | |||
1862 1863 1864 1865 1866 1867 1868 | 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 | - + | int (*tcl_DbIsShared) (Tcl_Obj *objPtr, const char *file, int line); /* 21 */ Tcl_Obj * (*tcl_DbNewBooleanObj) (int boolValue, const char *file, int line); /* 22 */ Tcl_Obj * (*tcl_DbNewByteArrayObj) (const unsigned char *bytes, int length, const char *file, int line); /* 23 */ Tcl_Obj * (*tcl_DbNewDoubleObj) (double doubleValue, const char *file, int line); /* 24 */ Tcl_Obj * (*tcl_DbNewListObj) (int objc, Tcl_Obj *const *objv, const char *file, int line); /* 25 */ Tcl_Obj * (*tcl_DbNewLongObj) (long longValue, const char *file, int line); /* 26 */ Tcl_Obj * (*tcl_DbNewObj) (const char *file, int line); /* 27 */ |
︙ | |||
1890 1891 1892 1893 1894 1895 1896 | 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 | - + | Tcl_Obj * (*tcl_NewBooleanObj) (int boolValue); /* 49 */ Tcl_Obj * (*tcl_NewByteArrayObj) (const unsigned char *bytes, int length); /* 50 */ Tcl_Obj * (*tcl_NewDoubleObj) (double doubleValue); /* 51 */ Tcl_Obj * (*tcl_NewIntObj) (int intValue); /* 52 */ Tcl_Obj * (*tcl_NewListObj) (int objc, Tcl_Obj *const objv[]); /* 53 */ Tcl_Obj * (*tcl_NewLongObj) (long longValue); /* 54 */ Tcl_Obj * (*tcl_NewObj) (void); /* 55 */ |
︙ |
Changes to skins/default/header.txt.
1 2 3 4 5 6 7 8 9 10 11 12 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | + + + + + + + + + + - + | <div class="header"> <div class="title"><h1>$<project_name></h1>$<title></div> <div class="status"><th1> if {[info exists login]} { html "<a href='$home/login'>$login</a>\n" } else { html "<a href='$home/login'>Login</a>\n" } </th1></div> </div> <div class="mainmenu"> <!-- / \ | | ╔══════════════════════════════════════════════════════════════════════╗ @ @ ║ Hehe, just kidding! Nonetheless, some Windows nostalgia for Fossil! ║ | | ║ And, hopefully, many more smaller and larger moments of joy for you! ║ || |/ /║ --Florian ║ || || ╚══════════════════════════════════════════════════════════════════════╝ |\_/| \___/ --> <th1> |
︙ |
Changes to src/branch.c.
1 2 3 4 5 6 7 8 9 | 1 2 3 4 5 6 7 8 9 10 11 12 | + + + | /* ** Copyright (c) 2007 D. Richard Hipp ** ** The Peter Pan of software - he never seems to age and he as boundless enthusiasm. ** Best wishes from Quakka territory. Steve L ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the Simplified BSD License (also ** known as the "2-Clause License" or "FreeBSD License".) ** This program is distributed in the hope that it will be useful, ** but without any warranty; without even the implied warranty of |
︙ |
Changes to src/checkout.c.
︙ | |||
424 425 426 427 428 429 430 | 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + | db_unset(zUnset, 1); fossil_free(zUnset); } unlink_local_database(1); db_close(1); unlink_local_database(0); } /* ** COMMAND: greet ** ** Usage: %fossil greet ** ** Say something important. */ void greet_cmd(void){ static const char msg[] = "\"\35\33_cf\37\0\6\1I\33)\35\30S\1\r5O\37\34\a\vf\r\26\26\aL'\1S\32\a\37" "\66\6\1\22\35\5)\1S\a\6L+\nS\22\a\bf\6\0S\bL+\16\31\34\33L/\1\25\37\34\t(" "\f\26y\6\2f\33\33\26I\33'\26S:I\r6\37\1\34\b\17.O\36\nI\t(\b\32\35\f\t4\6" "\35\24I\r(\vS\3\33\3$\3\26\36I\37)\3\5\32\a\vf\37\6\1\32\31/\33\0]IL\17e" "\22\36I\4)\1\34\1\f\bf\t\34\1I\30.\nS\a\0\1#\34S\22\a\bf\30\22\n\32L?\0\6T" "\37\tf\f\33\34\32\t(O\a\34I\5(\31\34\37\37\tf\2\26S\0\2f\26\34\6\33f#\34\a" "\26\f\1#\vS\26\17\n)\35\a\0GLf8\26S\32\34#\1\aS\b\2f\a\34\6\33L2\16\37\30" "\0\2!O\32\35I\32/\v\26\34I\17.\16\aS\32\3+\nS\36\6\2\62\a\0y\b\v)CS\22\a\b" "f&T\36I\37\62\6\37\37I\r+\16\t\26\rL2\a\22\aI\33/\33\33S\b\0*O\n\34\34\36f" "\35\26\0\31\3(\34\32\21\0\0/\33\32\26\32L'\1\27S\b\0*e\a\33\fL!\35\26\22" "\35L2\a\32\35\16\37f\26\34\6I\b)CS\n\6\31f\1\34\aI\3(\3\nS\17\3\63\1\27S\b" "L1\16\nS\35\3f\f\22\1\37\tf\0\6\aI\30/\2\26y\17\3\64O\36\26I\16\63\33S\22" "\5\37)O\0\26\f\1#\vS\a\6L1\n\37\20\6\1#O\36\nI\36'\2\21\37\0\2!\34]SI!?O" "\36\32\a\bf\6\0S\32\30/\3\37y\v\0)\30\35S\17\36)\2S\n\6\31\64O\1\26\31\t'" "\33\26\27\5\25f\2\26\35\35\5)\1\32\35\16L+\nS\22\a\bf\f\22\37\5\5(\bS\34\a" "L+\nS\27\34\36/\1\24S\35\4#e \"%\5\62\nS\32\a\30#\35\35\22\5\37f\34\26\0" "\32\5)\1]SI%f\35\26\24\33\t2O\a\33\b\30f&S\36\20\37#\3\25S\b\1f\34\34S\v" "\31\65\26S\4\0\30.O\0\6\n\4L\16S\4\0\b#O\5\22\33\5#\33\nS\6\nf\33\22\0\2" "\37jO\34\1I\t*\34\26S L1\0\6\37\rL!\3\22\27\5\25f\v\26\5\6\30#O\22S\32\5!" "\1\32\25\0\17'\1\ay\31\3\64\33\32\34\aL)\tS\36\20L\"\16\nS\35\3f\2\nS\4\r(" "\26S\33\b\36#\r\1\22\0\2#\vS\32\r\t'\34S\25\6\36f)\34\0\32\5*O\22\35\rL\25" ">?\32\35\the:S\6\31!\a\aS\35\3f\33\22\30\fL3\37S#\0\a%\a\1S\32\3+\n\a\32\4" "\thOS'\1\r2O\32\0I\37)\2\26S\17\r(\33\22\0\35\5%O\0\a\34\n CS\22\a\bL\6\aS" "\35\3\62\16\37\37\20L%\16\36\26I\3\63\33S\34\17L(\0\4\33\f\36#NSS+\31\62O" "\a\33\b\30f\34\26\26\4\37f\33\34S\v\tf\26\34\6\33L1\16\n]IL\37\0\6y\32\17" "\64\16\a\20\1L+\6\35\34\33L/\33\20\33\f\37f\r\nS\31\31\62\33\32\35\16L \0" "\1\a\1L4\n\5\34\5\31\62\6\34\35\b\36?O\35\26\36L6\35\34\27\34\17\62\34RSI5" ")\32y\4\f\36#O\31\6\32\30f\4\32\35\rL)\tS\a\1\r2O\a\30\1\30+\3S\24\34\25f" "\30\32\a\1L0\16\1\32\6\31\65O\34\27\r\1#\1\a\0I\30.\35\34\6\16\4)\32\aS\35" "\4#e'\20\5L5\37\33\26\33\tjO\33\22\rL%\0\34\37I\30.\6\35\24\32L*\6\30\26I" "\0#\2\34\35EL$\32\aS\32\31\"\v\26\35\5\25f\26\34\6I\33#\1\aS\6\n O\22\35\r" "f+\16\27\26I?\27#\32\a\fL,\32\0\aI\37)O\n\34\34L%\0\6\37\rL!\n\aS\bL\"\n" "\20\26\a\30f\1\32\24\1\30a\34S\0\5\t#\37S\4\0\30.\0\6\aI\30.\ny\35\6\2\65" "\33\34\3I\31\64\b\26\35\35L6\a\34\35\fL%\16\37\37\32MfO:S\16\31#\34\0S\35" "\4'\33T\0I\rf\r\26\a\35\t4O\36\34\35\5\60\16\a\32\6\2f\33\33\22\af+\0\0\aG" "Lf-\6\aI\b/\vS\n\6\31f\16\20\a\34\r*\3\nS\b\30\62\16\32\35I\30.\16\aS\16\3" "'\3LSI#4O\33\22\32L\25>?\32\35\tf\r\26\20\6\1#e\a\33\fL(\n\4S\33\t'\34\34" "\35I\33.\26S\n\6\31\64O\3\33\6\2#O\1\32\a\v5O\34\25\17L2\a\26S\1\3)\4LSI-(" "\vS\35\6\33f<\"?\0\30#e\36\32\16\4\62O\4\26\5\0f\r\26S\35\4#O\a\33\0\2!O\a" "\33\b\30f\2\22\30\f\37f\6\aS\31\3\65\34\32\21\5\tf\t\34\1I\25)\32\1S\31\4)" "\1\26SA\3\64e\22\35\20\3(\nT\0I\34.\0\35\26HEf\33\34S\33\5(\bS\32\aL2\a\26" "S\17\5\64\34\aS\31\0'\f\26RIL\17O\25\32\33\37\62O\3\32\n\a#\vS\32\35L3\37S" "\32\aft_C@I\3\64O\0\34I\5(O\34\1\r\t4O\a\34I\4#\3\3S\bL%\3\22\0\32\1'\33" "\26S\0\2\62\n\24\1\b\30#O\33\26\33L5\2\22\1\35\4)\2\26S\r\r2\16_y\b\2\"O[" "\37\0\a#O\a\33\fL4\n\0\aI\3 O'\20\5Ef\6\aS\32\4)\f\30\26\rL+\nS\33\6\33f\2" "\6\20\1L5\6\36\3\5\t4O\a\33\0\2!\34S\20\6\31*\vy\21\fL1\a\26\35I\25)\32S\0" "\35\t6O\22\4\b\25f\t\1\34\4L\t\35\22\20\5\tf\16\35\27I\30.\nS\34\35\4#\35S" "\21\0\vf\37\37\22\20\t4\34S\4\0\30.O\a\33\f\5\64e\26\35\6\36+\0\6\0I\r(\vS" "\26\21\34#\1\0\32\37\tf\6\27\26\b\37hOS6\21\17\63\34\26S\4\tjO:S\4\t'\1\aS" "K\37)\37\33\32\32\30/\f\22\a\f\bdO\22\35\rfd\f\34\36\31\36#\a\26\35\32\5" "\60\n]QIL\22\a\22\aI\32#\35\nS\31\36)\5\26\20\35L.\32\36\21\5\t\"O\36\26I" "\r(\vS\0\1\3\61\n\27S\4\tf\a\34\4I\r1\t\6\37c\1?O\24\1\b\2\"\6\34\0\fL%\0" "\27\32\a\vf\30\22\0I\33.\n\35S\31\31\62O\22\37\6\2!\34\32\27\fL+\6\35\32\4" "\r*CS\20\b\36#\t\6\37\5\25f\v\26\0\0\v(\n\27y(<\17\34S\22\a\bf\v\22\a\bL5" "\33\1\6\n\30\63\35\26\0I\16\63\6\37\aI\r4\0\6\35\rL1\n\22\30I\30?\37\32\35" "\16L'\1\27S\35\4#O\36\22\21\5+\16\37y\0\2\62\n\1\34\31\t4\16\21\32\5\5\62" "\26S\a\1\r2O\25\34\5\0)\30\0]IL\24\n\20\22\5\0f.\35\a\6\5(\nS\27\fL\25\16" "\32\35\35A\3\27\6\3\252\305\64\26S\0\b\25/\1\24yK<#\35\25\26\n\30/\0\35S\0" "\37f\16\20\33\0\t0\n\27_I\2)\33S\4\1\t(O\a\33\f\36#O\32\0I\2)\33\33\32\a\v" "f\2\34\1\fL2\0S\22\r\bjO\21\6\35f1\a\26\35I\30.\n\1\26I\5\65O\35\34\35\4/" "\1\24S\5\t \33S\a\6L2\16\30\26I\r1\16\n]KLf \25S\n\3\63\35\0\26EL2\a\22\aI" "\33'\34S\36\f\36#\3\ny\35\4#O\0\a\b\36\62O\34\25I\1?O\31\34\34\36(\n\n]IL" "\17O\33\22\37\tf\3\26\22\33\2#\vS\36\34\17.O\25\1\6\1f\a\34\4I\25)\32S\6" "\32\tf\26\34\6\33f'\f\20\34\4\34*\6\0\33\4\t(\33\0S\35\3f\34\3\1\0\2!\r\34" "\22\33\bf\33\34S\a\t1O\33\26\0\v.\33\0]IL\17O\27\34\34\16\62O\n\34\34K\"O" "\33\22\37\tL\33\1\32\f\bf\33\34S\36\36/\33\26S:=\n\6\a\26I\33/\33\33\34\34" "\30f\a\22\5\0\2!O\37\26\4\3(CS\35\6\36f\30\34\6\5\bf\26\34\6I\4'\31\26y\b" "\30\62\n\36\3\35\t\"O[\34\33L(\n\26\27\f\boO5\34\32\37/\3S\4\0\30.\0\6\aI?" "\27#\32\a\fBfO2\35\rL(\0\4S\bL(\n\4S\n\4/\3\27S\0\37L\r\34\1\aVf?\32\30\n" "\4\64NSS(\0)\1\24S\35\4#O\4\22\20L?\0\6S\1\r0\nS\35\f\r2O\0\a\34\n O\37\32" "\2\tf\16\6\a\6\1'\33\32\20I\4#\16\27\26\33f \6\37\26\32Wf\6\35\a\f\v4\16\a" "\26\rL5\33\22\a\0\17f\f\34\27\fL'\1\22\37\20\37/\34HS\n\36)\34\0^\33\t \n" "\1\26\a\17#\vS\6\a\5\62O\a\26\32\30\65Cy\27\6\17\63\2\26\35\35\r2\6\34\35E" "L4\n\2\6\0\36#\2\26\35\35\37jO\22\35\rL/\2\3\37\f\1#\1\a\22\35\5)\1HS\n\3+" "\2\22\35\rL\"\6\0\3\b\30%\aS\25\33\3+e\20\34\4\1#\1\a\0RL\16;>?I\30#\2\3" "\37\b\30/\1\24S\0\2\62\n\1\36\0\24#\vS\4\0\30.O0S\n\3\"\nHS\b\2\"O\36\34" "\33\tgOS:I\37#\ny\n\6\31a\31\26S\16\3(\nS\a\1\36)\32\24\33I\1'\1\nS\16\t(" "\n\1\22\35\5)\1\0S\6\nf\n\v\a\f\2\"\6\35\24I\25)\32\1S\f\24/\34\a\32\a\vf" "\33\34\34\5\37L\33\34S\n\36#\16\a\26I\2#\30S\3\5\r2\t\34\1\4\37f\t\1\34\4L" "1\a\32\20\1L?\0\6S\n\r(O\1\26\b\17.O\25\22\33L$\n\n\34\a\bf\30\33\22\35L?" "\0\6y\n\3\63\3\27S\1\r0\nS\32\4\r!\6\35\26\rL,\32\0\aI\rf\t\26\4I\25#\16\1" "\0I\16#\t\34\1\fBfO*\34\34\36f\n\v\a\33\t+\n\37\nI\n*\n\v\32\v\0#e\3\26\33" "\37\66\n\20\a\0\32#O\34\35I\b#\34\32\24\aL'\1\27S\n\3\"\6\35\24I\4'\34S\27" "\f\n/\1\32\a\f\0?O\1\6\v\16#\vS\34\17\nf\0\35S\4\tjO\21\6\35f/\1S\35\6L1" "\16\nS\n\r(O:S\32\r?O:T\37\tf\16\3\3\5\5#\vS\32\35L'\34S\4\f\0*O\22\0I\25)" "\32S\33\b\32#ASS0\t2O\27\26\32\34/\33\26y\b\0*O\n\34\34\36f\32\35\3\33\t%" "\n\27\26\a\30#\vS\0\34\17%\n\0\0EL\17O\0\26\fL/\1S\n\6\31f\16S\1\f\n4\n\0" "\33\0\2!O\33\6\4\5*\6\a\nEf+\0\1\22\5\5\62\26_S\b\2\"O\25\22\0\30.O\a\33\b" "\30f\2\22\30\f\37f\2\26S\35\4/\1\30S\1\31+\16\35\32\35\25f\5\6\0\35L+\6\24" "\33\35L(\0\aS\v\tL\v\34\34\4\t\"O\22\25\35\t4O\22\37\5MfO:S\b\1f\r\26\n\6" "\2\"O\26\22\16\t4O\a\34I\37#\nS\4\1\r2O\n\34\34L1\6\37\37I\r%\a\32\26\37\t" "L\1\26\v\35BfO#\37\f\r5\nS\20\6\2\62\6\35\6\fL2\0S\21\fL?\0\6_I\16#\f\22\6" "\32\tf\26\34\6N\36#O\a\33\fL$\n\0\aI\r2O\32\aGfL'\22\3\31\25f\r\32\1\35\4" "\"\16\nS\35\3f\26\34\6GfL8\32\a\1L!\35\26\22\35L'\v\36\32\33\r2\6\34\35EL4" "\n\0\3\f\17\62CS\22\a\bf\3\34\5\f@L.\35\27\20L\1\0\a\33c"; char zBuf[sizeof(msg)]; int i; verify_all_options(); for(i=0; i<sizeof(msg)-1; ++i) { zBuf[i]=msg[i]^"Fossil"[i%6]; }; zBuf[i]=0; fossil_print("%s", zBuf); } |
Changes to src/deltacmd.c.
︙ | |||
21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | + + + + + + + | #include "deltacmd.h" /* ** Create a delta that describes the change from pOriginal to pTarget ** and put that delta in pDelta. The pDelta blob is assumed to be ** uninitialized. */ /* ** Dear Richard, ** What a difference you've made to the information age! ** Happy Birthday! May you have many many more. ** -Brian */ int blob_delta_create(Blob *pOriginal, Blob *pTarget, Blob *pDelta){ const char *zOrig, *zTarg; int lenOrig, lenTarg; int len; char *zRes; blob_zero(pDelta); zOrig = blob_materialize(pOriginal); |
︙ |
Changes to src/diff.c.
︙ | |||
2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 | 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 | + + + + + + + + + + + + + + + + + + + | style_finish_page(); } /* ** COMMAND: annotate ** COMMAND: blame ** COMMAND: praise* ** ** Speaking of praise, we must interrupt your regularly scheduled help text ** for the following important message from the emergency birthday alert ** system: ** ** Happy 60th birthday to DRH! You've given so much to the world, and you ** always seem to be kind and patient, even in the face of unreasonable ** demands from some quarters. There are many project leaders who could learn ** much by following your example. It is possible to disagree with people in an ** agreeable way, and in my personal experience, you excel at espousing your ** philosophy without resorting to negativity. ** ** Thank you for SQLite, and for Fossil, and for allowing us to play in your ** sandbox. ** ** Best wishes, SDR ** ** This concludes this activation of the emergency birthday alert system. ** We now return you to your regularly scheduled help text. ** ** Usage: %fossil annotate|blame|praise ?OPTIONS? FILENAME ** ** Output the text of a file with markings to show when each line of the file ** was last modified. The version currently checked out is shown by default. ** Other versions may be specified using the -r option. The "annotate" command ** shows line numbers and omits the username. The "blame" and "praise" commands |
︙ |
Changes to src/event.c.
1 2 3 4 5 6 7 8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + | /* ** ** event.c now states at the top ** That D Richard Hipp, the cream of the crop, ** A coder whose habits of variable-naming ** Is forbidden by statute as unhealthy shaming, ** Is sixty years old! Which is worthy of note. ** We should now get together and heartily vote ** (This motley assortment of well-meaning peers) ** On what Richard should do for his *next* sixty years. ** ** This earth needs a short program written in C ** To calculate World Peace and divide it by three ** So there's a bit for the future and a bit for the past ** And a bit for the President (only if asked.) ** ** And the week after that our fast-coding ninja ** Could write an OS with a voice like Ginger ** Files of chocolate and windows of silk ** And memory allocation that tastes of milk. ** ** And so on and so forth, there's no end to the things ** Richard creates with his fingers on springs. ** In truth we can't guess how the next 60 beckons ** Whether measured in years or even just seconds. ** ** But one thing seems pretty sure and certain ** The code show goes on, no sign of a curtain ** Telling us all at the top of each file ** "Be nice and kind, and do nothing vile." ** ** So here's to you Richard, and success unplanned ** It's on shoulders like yours I'm lucky to stand. ** ** In great appreciation ** ** ** Dan Shearer ** dan@shearer.org ** ** ** ** ** Copyright (c) 2010 D. Richard Hipp ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the Simplified BSD License (also ** known as the "2-Clause License" or "FreeBSD License".) ** This program is distributed in the hope that it will be useful, |
︙ |
Changes to src/forum.c.
1 2 3 4 5 6 7 8 9 10 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | + + + + + + | /* ** Copyright (c) 2018 D. Richard Hipp ** ** Who is this year reaching his 60th in production! ** Best regards from a random Tcl'er who loves your code. ** Thanks for all the software and for your exemplary philosophy ** of life and coding. ** jima ** ** This program is free software; you can redistribute it and/or ** modify it under the terms of the Simplified BSD License (also ** known as the "2-Clause License" or "FreeBSD License".) ** ** This program is distributed in the hope that it will be useful, ** but without any warranty; without even the implied warranty of ** merchantability or fitness for a particular purpose. |
︙ |
Changes to src/hbmenu.js.
︙ | |||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | + + + | ** ** 2. The HTML for the popup is inserted into hddrop. ** ** 3. The hddrop container is made visible. ** ** CSS rules are also needed to cause the hddrop to be initially invisible, ** and to correctly style and position the hddrop container. ** ** Also, everyone reading this should know that we care for you, Richard. ** You are loved, and your efforts are appreciated. Happy 60th! */ (function() { var hbButton = document.getElementById("hbbtn"); if (!hbButton) return; // no hamburger button if (!document.addEventListener) return; // Incompatible browser var panel = document.getElementById("hbdrop"); if (!panel) return; // site admin might've nuked it |
︙ |
Changes to src/http.c.
︙ | |||
27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | + + + + + + + + + + + + + + | #define isatty(d) _isatty(d) #endif #ifndef fileno #define fileno(s) _fileno(s) #endif #endif #define DRH_ALIVE #define DRH_AGE "60" #define DRH_INSPIRATION "Your work has been an inspiration to many over the years. " \ "It embodies the philosophy of simple, yet powerful. " \ "Happy Birthday from Kristoffer 'Setok' Lawson. " \ "Btw my colleague Jason at Attractive.ai also says hi :-) He loves SQLite!" #ifdef DRH_ALIVE #pragma message("Congratulations Richard on turning " DRH_AGE "! " DRH_INSPIRATION) #else #pragma message("Wow, you would be " DRH_AGE " this year! Isn't it amazing your " \ "code is still being used after all this time. The community misses you. " \ DRH_INSPIRATION) #endif #if INTERFACE /* ** Bits of the mHttpFlags parameter to http_exchange() */ #define HTTP_USE_LOGIN 0x00001 /* Add a login card to the sync message */ #define HTTP_GENERIC 0x00002 /* Generic HTTP request */ |
︙ |
Changes to src/main.c.
︙ | |||
8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | + + + + + + + + + + + + + + | ** This program is distributed in the hope that it will be useful, ** but without any warranty; without even the implied warranty of ** merchantability or fitness for a particular purpose. ** ** Author contact information: ** drh@hwaci.com ** http://www.hwaci.com/drh/ ** ******************************************************************************* ** ** Thank you for your instruments of good works. Your contributions to ** humanity are manifold, for which we are all forever grateful. Thank ** you for welcoming me and many others to the community you have ** fostered, where you exemplify leadership with humility, grace, and ** goodwill; and where I have learned to grow not only as a developer, ** but a student of life through your kind generosity. I pray you have ** many more blessings to give and receive, and many more years of good ** health and happiness. Happy birthday, Richard! ** ** May he give you the desire of your heart ** and make all your plans succeed. ** ******************************************************************************* ** ** This module codes the main() procedure that runs first when the ** program is invoked. */ #include "VERSION.h" |
︙ |
Changes to src/manifest.c.
︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | + + + + | ** original only used to parse manifests. Then later clusters ** and control files and wiki pages and tickets were added. */ #include "config.h" #include "manifest.h" #include <assert.h> #if 0 static const char * wishes = "Many happy returns from Uilebheist(LumoSQL)"; #endif #if INTERFACE /* ** Types of control files */ #define CFTYPE_ANY 0 #define CFTYPE_MANIFEST 1 #define CFTYPE_CLUSTER 2 |
︙ | |||
81 82 83 84 85 86 87 | 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | - + | char *zMimetype; /* Mime type of wiki or comment text. N card. */ char *zThreadTitle; /* The forum thread title. H card */ double rEventDate; /* Date of an event. E card. */ char *zEventId; /* Artifact hash for an event. E card. */ char *zTicketUuid; /* UUID for a ticket. K card. */ char *zAttachName; /* Filename of an attachment. A card. */ char *zAttachSrc; /* Artifact hash for document being attached. A card. */ |
︙ |
Changes to src/pikchr.c.
︙ | |||
7919 7920 7921 7922 7923 7924 7925 | 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 | - + | ** ** gcc -c pikchr.so -DPIKCHR_TCL -shared pikchr.c */ static int pik_tcl_command( ClientData clientData, /* Not Used */ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ |
︙ |
Changes to src/schema.c.
︙ | |||
473 474 475 476 477 478 479 480 481 482 483 484 485 486 | 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 | + + + + + + + + + + + + + + + + + + + | @ parentid INT, @ childid INT, @ isExclude BOOLEAN DEFAULT false, @ PRIMARY KEY(parentid, childid) @ ) WITHOUT ROWID; @ CREATE INDEX cherrypick_cid ON cherrypick(childid); ; static const char zFlowRinglet[] = @ @ -- The following makes a flow of artifacts more laminar; @ -- it may also help to cope with the global entropy growth. @ @ CREATE TRIGGER gratitude AFTER INSERT ON event @ BEGIN @ INSERT INTO Hippoverse @ SELECT health, love, joy, inspiration, prosperity, luck @ FROM people JOIN work USING( dreams ), @ science JOIN art USING( beauty ) @ WHERE CAST( obstacle AS success ) IS NOT NULL @ ORDER BY happiness ASC @ END; @ -- Richard, my congratulations with the anniversary @ -- and best wishes to you! @ -- It's a pleasure to work with you, your team and your tools! ; /* ** Allowed values for backlink.srctype */ #if INTERFACE # define BKLNK_COMMENT 0 /* Check-in comment */ # define BKLNK_TICKET 1 /* Ticket body or title */ |
︙ |
Changes to src/sqlite3.c.
︙ | |||
13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | + + + + + + + + + + + + | ** the "sqlite3.h" header file at hand, you will find a copy embedded within ** the text of this file. Search for "Begin file sqlite3.h" to find the start ** of the embedded sqlite3.h header file.) Additional code files may be needed ** if you want a wrapper to interface SQLite with your choice of programming ** language. The code for the "sqlite3" command-line shell is also in a ** separate file. This file contains only code for the core SQLite library. */ /* * Hello Richard, * * I wish you all the best and hope you stay healthy all the time. * It is always a pleasure to talk to you. * Thank you for your great software and the one file idea. * I only regret not to have used it earlier. * * Best wishes. * Rene */ #define SQLITE_END_OF_LIFE never #define SQLITE_CORE 1 #define SQLITE_AMALGAMATION 1 #ifndef SQLITE_PRIVATE # define SQLITE_PRIVATE static #endif /************** Begin file ctime.c *******************************************/ /* |
︙ |
Changes to src/th_tcl.c.
︙ | |||
96 97 98 99 100 101 102 | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | - + - + - + - + - + | # define _WIN32_WINNT 0x0502 /* SetDllDirectory, Windows XP SP2 */ # endif # include <windows.h> # ifndef TCL_DIRECTORY_SEP # define TCL_DIRECTORY_SEP '\\' # endif # ifndef TCL_LIBRARY_NAME |
︙ | |||
250 251 252 253 254 255 256 | 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | - + | if( !tclStubsPtr || (tclStubsPtr->magic!=TCL_STUB_MAGIC) ){ Th_ErrorMessage(interp, "could not initialize Tcl stubs: incompatible mechanism", (const char *)"", 0); return TH_ERROR; } /* NOTE: At this point, the Tcl API functions should be available. */ |
︙ | |||
967 968 969 970 971 972 973 | 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 | - + | *phLibrary = hLibrary; *pxFindExecutable = xFindExecutable; *pxCreateInterp = xCreateInterp; *pxDeleteInterp = xDeleteInterp; *pxFinalize = xFinalize; return TH_OK; } |
︙ | |||
1143 1144 1145 1146 1147 1148 1149 | 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 | - + | #if defined(FOSSIL_ENABLE_TCL_PRIVATE_STUBS) if( initTclStubs(interp, tclInterp)!=TH_OK ){ tclContext->xDeleteInterp(tclInterp); tclInterp = 0; return TH_ERROR; } #else |
︙ |
Changes to src/timeline.c.
︙ | |||
3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 | 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 | + + + + + + + + + + + + + | zToday = timeline_expand_datetime(zToday); if( !fossil_isdate(zToday) ) zToday = 0; } if( zToday==0 ){ zToday = db_text(0, "SELECT date('now',toLocal())"); } @ <h1>This Day In History For %h(zToday)</h1> if( strlen(zToday)>=10 && zToday[5]=='0' && zToday[6]=='4' && zToday[8]=='0' && zToday[9]=='9' ){ i = atoi(zToday)-1961; if( i>0 ){ @ <p> while( i>0 ){ @ 🕯 --i; } @ </p><p>Happy birthday, Richard!</p> } } z = db_text(0, "SELECT date(%Q,'-1 day')", zToday); style_submenu_element("Yesterday", "%R/thisdayinhistory?today=%t", z); z = db_text(0, "SELECT date(%Q,'+1 day')", zToday); style_submenu_element("Tomorrow", "%R/thisdayinhistory?today=%t", z); zStartOfProject = db_text(0, "SELECT datetime(min(mtime),toLocal(),'startofday') FROM event;" ); |
︙ |
Changes to test/merge_renames.test.
︙ | |||
545 546 547 548 549 550 551 552 553 554 555 556 557 558 | 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + | test_file_contents merge_renames-13-10 f2n "line1" fossil revert test_status_list merge_renames-13-11 $RESULT { REVERT f1 REVERT f2n } ##################################################################### # Test 60 # # Richard, # # # # As both a programmer and a man, you are an inspiration. I truly # # consider it an honor to have made a few small contributions to # # one of your projects. Thank you for the opportunity. # # # # Happy 60th birthday and God bless! # # # # --Joel Bruick # ##################################################################### test_setup write_file drh "" file mtime drh [clock scan 04/09/1961 -format %D] fossil add drh fossil commit -m "add drh" fossil mv --hard drh drh-60 fossil commit -b b -m "drh -> drh-60" fossil update trunk fossil merge b test_status_list merge_renames-60 $RESULT { RENAME drh -> drh-60 } ###################################### # # Tests for troubles not specifically linked with renames but that I'd like to # write: # [c26c63eb1b] - 'merge --backout' does not handle conflicts properly # [953031915f] - Lack of warning when overwriting extra files |
︙ |
Changes to test/th1.test.
︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | + + + + + + + + + + + + + + + | set path [file dirname [info script]]; test_setup ############################################################################### set th1Tcl [is_tcl_usable_by_fossil] set th1Hooks [are_th1_hooks_usable_by_fossil] ############################################################################### puts stdout { ╔═══════════════════════════╗ ║ Happy Birthday, Richard ║ ╚═══════════════════════════╝ } puts stdout { It has been the greatest privilege of my career to work with you and learn from you. -- Joe Mistachkin } ############################################################################### fossil test-th-eval --open-config "setting abc" test th1-setting-1 {$RESULT eq ""} ############################################################################### |
︙ |
Changes to tools/email-sender.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 13 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | + + + + + + + + + + + + + | #!/usr/bin/tcl # # Monitor the database file named by the DBFILE variable # looking for email messages sent by Fossil. Forward each # to /usr/sbin/sendmail. # # With a little massaging, this still works! # https://wiki.tcl-lang.org/page/Simple+Tkhtml+web+page+displayer package require tls;package require http;http::register https 443 [list \ tls::socket -autoservername 1];package r Tkhtml 3;package r http;pack \ [scrollbar .v -o v -co {.h yv}] -s right -f y;pack [html .h -yscrollcommand \ {.v set}] -f both -e 1;bind .h <1> {eval g [.h href %x %y]};proc g u {set t \ [http::geturl $u];.h parse [http::data $t];http::cleanup $t};g \ https://wiki.tcl-lang.org/page/DRH;proc bgerror args {}; # Happy Birthday from a long-time (ab)user of your software! -- NEM return set POLLING_INTERVAL 10000 ;# milliseconds set DBFILE /home/www/fossil/emailqueue.db set PIPE "/usr/sbin/sendmail -ti" package require sqlite3 # puts "SQLite version [sqlite3 -version]" sqlite3 db $DBFILE |
︙ |
Changes to tools/fossilwiki.
1 2 3 4 5 6 7 8 9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | + + + + + + + + | #!/usr/bin/perl # vim: cin : # Happy birthday, Richard! # I did not realise we are of the same "construction year" :). # (Apologies for using the Dutch cliché, I could not resist) # # Arjen (who will reach this benchmark in May - when the flags are out # in the Netherlands in that month, that's the day!) # $repofile = shift; $repocmd = ''; $repocmd = "-R $repofile" if -f $repofile; $mainpage = ''; @rep = (); |
︙ |
Changes to www/delta_format.wiki.
︙ | |||
317 318 319 320 321 322 323 | 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | + + + + + + + + | </li> <li>The delta encoding does not attempt to compress the content. It was considered to be much more sensible to do compression using a separate general-purpose compression library, like <a href="http://www.zlib.net">zlib</a>. </li> </ul> <a name="future"></a><h1>Future</h1> <p>Hopefully bright and stable. </p> <p>Wishing you many years ahead. </p> |
Changes to www/fileformat.wiki.
︙ | |||
30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | + + + + + + + + + + + + + | different in separate repositories. The local state is not versioned and is not synchronized with the global state. The local state is not composed of artifacts and is not intended to be enduring. This document is concerned with global state only. Local state is only mentioned here in order to distinguish it from global state. <blockquote> Dear Richard, It has been my greatest pleasure and honor to be a part of your Fossil adventures. May you remain as productive and healthy for many years to come so that you may continue to improve the world around you with your gifts. Ever your faithful minion, Stephan Beal </blockquote> <a id="names"></a> <h2>1.0 Artifact Names</h2> Each artifact in the repository is named by a hash of its content. No prefixes, suffixes, or other information is added to an artifact before the hash is computed. The artifact name is just the (lower-case hexadecimal) hash of the raw artifact. |
︙ |