Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Documented several special-case rules for certain cards as footnotes in the fileformat.wiki card summary table. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
a3bfeb85213895eb4b5f53b2af5e9e79 |
| User & Date: | stephan 2021-02-22 06:48:46.373 |
Context
|
2021-02-22
| ||
| 12:23 | Added a missing 'return this'. check-in: 4ce90f0170 user: stephan tags: trunk | |
| 06:48 | Documented several special-case rules for certain cards as footnotes in the fileformat.wiki card summary table. check-in: a3bfeb8521 user: stephan tags: trunk | |
| 04:35 | As a safety precaution against changes made in [ecb705359a] and [b8c1d429cb], content_deltify() now explicitly checks whether its main input RID refers to a phantom and skips further work if it is. check-in: 188ffef23d user: stephan tags: trunk | |
Changes
Changes to www/fileformat.wiki.
| ︙ | ︙ | |||
30 31 32 33 34 35 36 | 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. | | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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. <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. |
| ︙ | ︙ | |||
52 53 54 55 56 57 58 | artifact, however, all references to other artifacts must be the complete hash. Prior to Fossil version 2.0, all names were formed from the SHA1 hash of the artifact. The key innovation in Fossil 2.0 was adding support for alternative hash algorithms. | | | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | artifact, however, all references to other artifacts must be the complete hash. Prior to Fossil version 2.0, all names were formed from the SHA1 hash of the artifact. The key innovation in Fossil 2.0 was adding support for alternative hash algorithms. <a id="structural"></a> <h2>2.0 Structural Artifacts</h2> A structural artifact is an artifact with a particular format that is used to define the relationships between other artifacts in the repository. Fossil recognizes the following kinds of structural artifacts: |
| ︙ | ︙ | |||
98 99 100 101 102 103 104 | is an implementation detail and might change in a future release. For the purpose of this article "file format" means the format of the artifacts, not how the artifacts are stored on disk. It is the artifact format that is intended to be enduring. The specifics of how artifacts are stored on disk, though stable, is not intended to live as long as the artifact format. | | | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | is an implementation detail and might change in a future release. For the purpose of this article "file format" means the format of the artifacts, not how the artifacts are stored on disk. It is the artifact format that is intended to be enduring. The specifics of how artifacts are stored on disk, though stable, is not intended to live as long as the artifact format. <a id="manifest"></a> <h3>2.1 The Manifest</h3> A manifest defines a check-in. A manifest contains a list of artifacts for each file in the project and the corresponding filenames, as well as information such as parent check-ins, the username of the programmer who created the check-in, the date and time when |
| ︙ | ︙ | |||
254 255 256 257 258 259 260 | clear-signing prefix. The <b>Z</b> card is a sanity check to prove that the manifest is well-formed and consistent. A sample manifest from Fossil itself can be seen [/artifact/28987096ac | here]. | | | 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | clear-signing prefix. The <b>Z</b> card is a sanity check to prove that the manifest is well-formed and consistent. A sample manifest from Fossil itself can be seen [/artifact/28987096ac | here]. <a id="cluster"></a> <h3>2.2 Clusters</h3> A cluster is an artifact that declares the existence of other artifacts. Clusters are used during repository synchronization to help reduce network traffic. As such, clusters are an optimization and may be removed from a repository without loss or damage to the underlying project code. |
| ︙ | ︙ | |||
280 281 282 283 284 285 286 | the <b>Z</b> card of a manifest. The argument to the <b>Z</b> card is the lower-case hexadecimal representation of the MD5 checksum of all prior cards in the cluster. The <b>Z</b> card is required. An example cluster from Fossil can be seen [/artifact/d03dbdd73a2a8 | here]. | | | 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | the <b>Z</b> card of a manifest. The argument to the <b>Z</b> card is the lower-case hexadecimal representation of the MD5 checksum of all prior cards in the cluster. The <b>Z</b> card is required. An example cluster from Fossil can be seen [/artifact/d03dbdd73a2a8 | here]. <a id="ctrl"></a> <h3>2.3 Control Artifacts</h3> Control artifacts are used to assign properties to other artifacts within the repository. Allowed cards in a control artifact are as follows: <blockquote> |
| ︙ | ︙ | |||
334 335 336 337 338 339 340 | The <b>U</b> card is the name of the user that created the control artifact. The <b>Z</b> card is the usual required artifact checksum. An example control artifacts can be seen [/info/9d302ccda8 | here]. | | | 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 | The <b>U</b> card is the name of the user that created the control artifact. The <b>Z</b> card is the usual required artifact checksum. An example control artifacts can be seen [/info/9d302ccda8 | here]. <a id="wikichng"></a> <h3>2.4 Wiki Pages</h3> A wiki artifact defines a single version of a single wiki page. Wiki artifacts accept the following card types: |
| ︙ | ︙ | |||
378 379 380 381 382 383 384 | of user George Krivov and is not currently used or generated by the implementation. Older versions of Fossil will reject a wiki-page artifact that includes a <b>C</b> card. An example wiki artifact can be seen [/artifact?name=7b2f5fd0e0&txt=1 | here]. | | | 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | of user George Krivov and is not currently used or generated by the implementation. Older versions of Fossil will reject a wiki-page artifact that includes a <b>C</b> card. An example wiki artifact can be seen [/artifact?name=7b2f5fd0e0&txt=1 | here]. <a id="tktchng"></a> <h3>2.5 Ticket Changes</h3> A ticket-change artifact represents a change to a trouble ticket. The following cards are allowed on a ticket change artifact: <blockquote> <b>D</b> <i>time-and-date-stamp</i><br /> |
| ︙ | ︙ | |||
424 425 426 427 428 429 430 | on the <b>J</b> card replaces any previous value of the field. The field name and value are both encoded using the character escapes defined for the <b>C</b> card of a manifest. An example ticket-change artifact can be seen [/artifact/91f1ec6af053 | here]. | | | 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 | on the <b>J</b> card replaces any previous value of the field. The field name and value are both encoded using the character escapes defined for the <b>C</b> card of a manifest. An example ticket-change artifact can be seen [/artifact/91f1ec6af053 | here]. <a id="attachment"></a> <h3>2.6 Attachments</h3> An attachment artifact associates some other artifact that is the attachment (the source artifact) with a ticket or wiki page or technical note to which the attachment is connected (the target artifact). The following cards are allowed on an attachment artifact: |
| ︙ | ︙ | |||
466 467 468 469 470 471 472 | A single <b>U</b> card gives the name of the user who added the attachment. If an attachment is added anonymously, then the <b>U</b> card may be omitted. The <b>Z</b> card is the usual checksum over the rest of the attachment artifact. The <b>Z</b> card is required. | | | 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 | A single <b>U</b> card gives the name of the user who added the attachment. If an attachment is added anonymously, then the <b>U</b> card may be omitted. The <b>Z</b> card is the usual checksum over the rest of the attachment artifact. The <b>Z</b> card is required. <a id="event"></a> <h3>2.7 Technical Notes</h3> A technical note or "technote" artifact (formerly known as an "event" artifact) associates a timeline comment and a page of text (similar to a wiki page) with a point in time. Technotes can be used to record project milestones, release notes, blog entries, process checkpoints, or news articles. |
| ︙ | ︙ | |||
534 535 536 537 538 539 540 | A single <b>W</b> card provides wiki text for the document associated with the technote. The format of the <b>W</b> card is exactly the same as for a [#wikichng | wiki artifact]. The <b>Z</b> card is the required checksum over the rest of the artifact. | | | 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 | A single <b>W</b> card provides wiki text for the document associated with the technote. The format of the <b>W</b> card is exactly the same as for a [#wikichng | wiki artifact]. The <b>Z</b> card is the required checksum over the rest of the artifact. <a id="forum"></a> <h3>2.8 Forum Posts</h3> Forum posts are intended as a mechanism for users and developers to discuss a project. Forum posts are like messages on a mailing list. The following cards are allowed on an forum post artifact: |
| ︙ | ︙ | |||
609 610 611 612 613 614 615 | A single <b>W</b> card provides wiki text for the forum post. The format of the <b>W</b> card is exactly the same as for a [#wikichng | wiki artifact]. The <b>Z</b> card is the required checksum over the rest of the artifact. | | | 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 | A single <b>W</b> card provides wiki text for the forum post. The format of the <b>W</b> card is exactly the same as for a [#wikichng | wiki artifact]. The <b>Z</b> card is the required checksum over the rest of the artifact. <a id="summary"></a> <h2>3.0 Card Summary</h2> The following table summarizes the various kinds of cards that appear on Fossil artifacts. A blank entry means that combination of card and artifact is not legal. A number or range of numbers indicates the number of times a card may (or must) appear in the corresponding artifact type. e.g. a value of 1 indicates a required unique card and 1+ indicates that one |
| ︙ | ︙ | |||
720 721 722 723 724 725 726 | <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> | | | | 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 | <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td align=center><b>0-1</b><sup><nowiki>[4]</nowiki></sup></td> </tr> <tr> <td><b>I</b> <i>in-reply-to</i></td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td align=center><b>0-1</b><sup><nowiki>[4]</nowiki></sup></td> </tr> <tr> <td><b>J</b> <i>name</i> ?<i>value</i>?</td> <td> </td> <td> </td> <td> </td> <td> </td> |
| ︙ | ︙ | |||
797 798 799 800 801 802 803 | <td align=center><b>0-1</b></td> <td> </td> <td> </td> <td align=center><b>0-1</b></td> <td> </td> <td> </td> <td align=center><b>0-1</b></td> | | | 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 | <td align=center><b>0-1</b></td> <td> </td> <td> </td> <td align=center><b>0-1</b></td> <td> </td> <td> </td> <td align=center><b>0-1</b></td> <td align=center><b>0-1</b><sup><nowiki>[5]</nowiki></sup></td> </tr> <tr> <td><b>Q</b> (<b>+</b>|<b>-</b>)<i>uuid</i> ?<i>uuid</i>?</td> <td align=center><b>0+</b></td> <td> </td> <td> </td> <td> </td> |
| ︙ | ︙ | |||
821 822 823 824 825 826 827 | <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <tr> | | | | | 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 | <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <tr> <td><b>T</b> (<b>+</b>|<b>*</b>|<b>-</b>)<i>tagname</i> <i>uuid</i> ?<i>value</i>?<sup><nowiki>[1]</nowiki></sup></td> <td align=center><b>0+</b></td> <td> </td> <td align=center><b>1+</b><sup><nowiki>[2]</nowiki></sup></td> <td> </td> <td> </td> <td> </td> <td align=center><b>0+</b><sup><nowiki>[3]</nowiki></sup></td> <td> </td> </tr> <tr> <td><b>U</b> <i>username</i></td> <td align=center><b>1</b></td> <td> </td> <td align=center><b>1</b></td> |
| ︙ | ︙ | |||
866 867 868 869 870 871 872 873 | <td align=center><b>1</b></td> <td align=center><b>1</b></td> <td align=center><b>1</b></td> <td align=center><b>1</b></td> </tr> </table> | > > > > > > > > > > > > > > > > | | | 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 | <td align=center><b>1</b></td> <td align=center><b>1</b></td> <td align=center><b>1</b></td> <td align=center><b>1</b></td> </tr> </table> Footnotes: 1) T-card names may not be made up of only hexadecimal characters, as they would be indistinguishable from a hash prefix. 2) Tags in [#ctrl | Control Artifacts] may not be self-referential. i.e. they may not start with <tt>*</tt>. 3) Tags in [#event | Technotes] must be self-referential. i.e. they must start with <tt>*</tt>. 4) [#forum | Forum Posts] must have either one H-card or one I-card, not both. 5) [#forum | Forum Post] P-cards must have only a single parent hash. i.e. they may not have merge parents. <a id="addenda"></a> <h2>4.0 Addenda</h2> This section contains additional information which may be useful when implementing algorithms described above. <a id="outofordercards"></a> <h3>4.1 Relaxed Card Ordering Due To An Historical Bug</h3> All cards of a structural artifact should be in lexicographical order. The Fossil implementation verifies this and rejects any structural artifact which has out-of-order cards. Futhermore, when Fossil is generating new structural artifacts, it runs the generated artifact through the parser to confirm that all cards really are in the correct |
| ︙ | ︙ |