Fossil SCM
Further design changes to hierarchical manifests. Still no actual code.
Commit
47aa92824027e7740ceca498a442308e8e462351
Parent
7576a0f1b979662…
1 file changed
+52
-74
+52
-74
| --- www/fileformat.wiki | ||
| +++ www/fileformat.wiki | ||
| @@ -111,10 +111,11 @@ | ||
| 111 | 111 | <blockquote> |
| 112 | 112 | <b>B</b> <i>baseline-manifest</i><br> |
| 113 | 113 | <b>C</b> <i>checkin-comment</i><br> |
| 114 | 114 | <b>D</b> <i>time-and-date-stamp</i><br> |
| 115 | 115 | <b>F</b> <i>filename</i> ?<i>SHA1-hash</i>? ?<i>permissions</i>? ?<i>old-name</i>?<br> |
| 116 | +<b>G</b> <i>SHA1-hash</i><br> | |
| 116 | 117 | <b>N</b> <i>mimetype</i><br> |
| 117 | 118 | <b>P</b> <i>SHA1-hash</i>+<br> |
| 118 | 119 | <b>Q</b> (<b>+</b>|<b>-</b>)<i>SHA1-hash</i> ?<i>SHA1-hash</i>?<br> |
| 119 | 120 | <b>R</b> <i>repository-checksum</i><br> |
| 120 | 121 | <b>T</b> (<b>+</b>|<b>-</b>|<b>*</b>)<i>tag-name</i> <b>*</b> ?<i>value</i>?<br> |
| @@ -153,58 +154,49 @@ | ||
| 153 | 154 | <blockquote> |
| 154 | 155 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><br> |
| 155 | 156 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><b>.</b><i>SSS</i> |
| 156 | 157 | </blockquote> |
| 157 | 158 | |
| 158 | -A manifest has zero or more F-cards. Each F-card identifies a file or | |
| 159 | -subdirectory | |
| 159 | +A manifest has zero or more F-cards. Each F-card identifies a file | |
| 160 | 160 | that is part of the check-in. There are one, two, three, or four |
| 161 | 161 | arguments. The first argument is the pathname of the file or |
| 162 | 162 | subdirectory in the |
| 163 | 163 | check-in relative to the root of the project file hierarchy. No ".." |
| 164 | 164 | or "." directories are allowed within the filename. Space characters |
| 165 | 165 | are escaped as in C-card comment text. Backslash characters and |
| 166 | 166 | newlines are not allowed within filenames. The directory separator |
| 167 | 167 | character is a forward slash (ASCII 0x2F). The second argument to the |
| 168 | 168 | F-card is the full 40-character lower-case hexadecimal SHA1 hash of |
| 169 | -the content artifact, or of the [#directory|directory artifact] if | |
| 170 | -the "d" permission is present. The second argument is required for baseline | |
| 169 | +the content artifact. The second argument is required for baseline | |
| 171 | 170 | manifests but is optional for delta manifests. When the second |
| 172 | 171 | argument to the F-card is omitted, it means that the file has been |
| 173 | 172 | deleted relative to the baseline (files removed in baseline manifests |
| 174 | 173 | versions are <em>not</em> added as F-cards). The optional 3rd argument |
| 175 | -defines any special access permissions associated with the file. This | |
| 176 | -can be defined as "x" to mean that the file is executable or "l" | |
| 177 | -(small letter ell) to mean a symlink or "d" to mean the entry describes | |
| 178 | -a subdirectory rather than a file. All files and subdirectories | |
| 179 | -are always readable and writable. This can be expressed by "w" | |
| 174 | +defines any special access permissions associated with the file. | |
| 175 | +In a manifest, the permission string may contain | |
| 176 | +an "x" to mean that the file is executable or "l" | |
| 177 | +(small letter ell) to mean the file is a symlink. | |
| 178 | +All files are always readable and writable. This can be expressed by "w" | |
| 180 | 179 | permission if desired but the "w" permission is optional and is ignored |
| 181 | 180 | by Fossil. The file format might be extended with new permission |
| 182 | 181 | letters in the future. The optional 4th argument is the name of the |
| 183 | 182 | same file as it existed in the parent check-in. If the name of the |
| 184 | 183 | file is unchanged from its parent, then the 4th argument is omitted. |
| 185 | 184 | |
| 186 | -Manifests may be either flat or hierarchical. A flat manifest lists | |
| 187 | -all files in the check-in, including all files in subdirectories. A | |
| 188 | -flat manifest may not include F-cards with the "d" permission. An | |
| 189 | -heirarchical manifest only lists the files or subdirectories at the | |
| 190 | -top-level of the check-in. An heirarchical manifest may not include | |
| 191 | -an F-card entries that have a directory separator character ("/"). | |
| 192 | -An heirarchical manifest may not be a delta-manifest (it may not have | |
| 193 | -a B-card) nor may it be used as a baseline-manifest by some other | |
| 194 | -delta-manifest. Hierarchical manifests | |
| 195 | -are only recognized by Fossil versions 1.35 and later. Repositories | |
| 196 | -that contain hierarchical manifests will cause problems for earlier | |
| 197 | -versions of Fossil. | |
| 198 | - | |
| 199 | -When an F-card refers to a subdirectory (that is to say, when the | |
| 200 | -F-card is part of an hierarchical manifest and contains the "d" | |
| 201 | -permission) then the referenced directory artifact must be a | |
| 202 | -[#directory|well-formed directory artifact] that contains a | |
| 203 | -G-card that exactly matches the name of the subdirectory as assigned | |
| 204 | -by the F-card. If these conditions are not met, then the artifact is | |
| 205 | -not a valid manifest. | |
| 185 | +A G-card is an alternative way of specifying the files of a check-in. | |
| 186 | +A single manifest may have many F-cards or a single G-card, but not | |
| 187 | +both. A manifest containing F-cards is called a "flat manifest" and | |
| 188 | +a manifest that contains a G-card is called an "hierarchical manifest". | |
| 189 | + | |
| 190 | +A G-card contains a single argument which is the SHA1 hash of a | |
| 191 | +[#directory|directory artifact] that defines the files and directories | |
| 192 | +at the top-level of the check-in. That directory artifact may contain | |
| 193 | +F-cards with the "d" permission that reference other subdirectories | |
| 194 | +in check-in file hierarchy. | |
| 195 | + | |
| 196 | +A G-card may not be used in a delta manifest. No delta manifest may | |
| 197 | +refer to an hierarchical manifest as its baseline. | |
| 206 | 198 | |
| 207 | 199 | A manifest has zero or one P-cards. Most manifests have one P-card. |
| 208 | 200 | The P-card has a varying number of arguments that |
| 209 | 201 | defines other manifests from which the current manifest |
| 210 | 202 | is derived. Each argument is an 40-character lowercase |
| @@ -281,30 +273,29 @@ | ||
| 281 | 273 | A directory artifact describes the files and subdirectories within a |
| 282 | 274 | single directory of an hierarchical manifest. Directory artifacts |
| 283 | 275 | are only recognized by Fossil version 1.35 and later (circa 2015-12-23). |
| 284 | 276 | |
| 285 | 277 | Directory artifacts contain zero or more F-cards and exactly one Z-card, |
| 286 | -in the same format as a manifest. A directory artifact also contains | |
| 287 | -exactly one G-card with a single argument that is the pathname | |
| 288 | -of the directory relative to the root of the repository. | |
| 289 | -The format of the directory name in a G-card is | |
| 290 | -the same as the format of a filename in an F-card. | |
| 291 | - | |
| 292 | -The F-cards in a directory artifact may not contain directory separator | |
| 293 | -characters. The content of subdirectories must be expressed using | |
| 294 | -additional directory artifacts referenced by F-cards with the "d" | |
| 295 | -permission. All F-cards in a directory artifact must contain at least | |
| 296 | -two arguments. | |
| 297 | - | |
| 298 | -When an F-card X of directory artifact Y refers to | |
| 299 | -subdirectory Z (that is to say, when F-card X contains | |
| 300 | -the "d" permission and the second argument on X is the SHA1 | |
| 301 | -hash of directory artifact Z) then the G-card of Z must | |
| 302 | -be the concatenation of the G-card on artifact Y, the | |
| 303 | -directory separator character "/" and the first argument to | |
| 304 | -the F-card X. Otherwise, the artifact Y is not a valid | |
| 305 | -directory artifact. | |
| 278 | +in the same format as a manifest. | |
| 279 | + | |
| 280 | +The F-cards of a directory artifact are slightly different from the F-cards | |
| 281 | +in a [#manifest|manifest artifact]. | |
| 282 | + | |
| 283 | +<ul> | |
| 284 | +<li>F-cards in a directory artifact may not have directory separator | |
| 285 | +characters in their filename. The F-cards of a directory specify only | |
| 286 | +the files and subdirectories in that directory. | |
| 287 | +<li>F-cards in a directory artifact may use the "d" permission character | |
| 288 | +to indicate that the entry refers to a subdirectory. In that case, the | |
| 289 | +SHA1 hash on the second argument refers to another directory artifact, | |
| 290 | +not to a content artifact. | |
| 291 | +<li>F-cards in a directory artifact must have at last two arguments. | |
| 292 | +</ul> | |
| 293 | + | |
| 294 | +The Z-card in a directory artifact is required and has the same format as | |
| 295 | +it does in all other special artifacts. Directory artifacts may not be | |
| 296 | +PGP-clearsigned. | |
| 306 | 297 | |
| 307 | 298 | <a name="cluster"></a> |
| 308 | 299 | <h3>1.3 Clusters Artifacts</h3> |
| 309 | 300 | |
| 310 | 301 | A cluster is an artifact that declares the existence of other artifacts. |
| @@ -615,31 +606,18 @@ | ||
| 615 | 606 | <td align=center><b>1</b></td> |
| 616 | 607 | <td> </td> |
| 617 | 608 | </tr> |
| 618 | 609 | <tr> |
| 619 | 610 | <td><b>B</b> <i>baseline</i></td> |
| 620 | -<td align=center><b>0-1*</b></td> | |
| 621 | -<td> </td> | |
| 622 | -<td> </td> | |
| 623 | -<td> </td> | |
| 624 | -<td> </td> | |
| 625 | -<td> </td> | |
| 626 | -<td> </td> | |
| 627 | -<td> </td> | |
| 628 | -</tr> | |
| 629 | -<tr><td> </td><td colspan='8'>* = Required for delta manifests, | |
| 630 | -Disallowed for hierarchical manifests.</td></tr> | |
| 631 | -<tr> | |
| 632 | -<td><b>C</b> <i>comment-text</i></td> | |
| 633 | -<td align=center><b>1</b></td> | |
| 634 | -<td> </td> | |
| 635 | -<td> </td> | |
| 636 | -<td> </td> | |
| 637 | -<td> </td> | |
| 638 | -<td> </td> | |
| 639 | -<td align=center><b>0-1</b></td> | |
| 640 | -<td align=center><b>0-1</b></td> | |
| 611 | +<td align=center><b>0-1</b></td> | |
| 612 | +<td> </td> | |
| 613 | +<td> </td> | |
| 614 | +<td> </td> | |
| 615 | +<td> </td> | |
| 616 | +<td> </td> | |
| 617 | +<td> </td> | |
| 618 | +<td> </td> | |
| 641 | 619 | </tr> |
| 642 | 620 | <tr> |
| 643 | 621 | <td><b>D</b> <i>date-time-stamp</i></td> |
| 644 | 622 | <td align=center><b>1</b></td> |
| 645 | 623 | <td> </td> |
| @@ -671,13 +649,13 @@ | ||
| 671 | 649 | <td> </td> |
| 672 | 650 | <td> </td> |
| 673 | 651 | <td> </td> |
| 674 | 652 | </tr> |
| 675 | 653 | <tr> |
| 676 | -<td><b>G</b> <i>fileame</i> | |
| 654 | +<td><b>G</b> <i>SHA1-hash</i> | |
| 655 | +<td align=center><b>0-1</b></td> | |
| 677 | 656 | <td> </td> |
| 678 | -<td align=center><b>1</b></td> | |
| 679 | 657 | <td> </td> |
| 680 | 658 | <td> </td> |
| 681 | 659 | <td> </td> |
| 682 | 660 | <td> </td> |
| 683 | 661 | <td> </td> |
| @@ -870,12 +848,12 @@ | ||
| 870 | 848 | is not a storage space issue. Fossil was originally designed |
| 871 | 849 | specifically to support the SQLite project, and as SQLite has fewer |
| 872 | 850 | than 2000 files on any give version, a flat baseline manifest design |
| 873 | 851 | worked well there and was simple to implement. |
| 874 | 852 | |
| 875 | -However, some project (ex: NetBSD) contain a huge number of files in | |
| 876 | -every version, and even though the manifests compressed will using | |
| 853 | +However, some other projects (ex: NetBSD) contain a huge number of files in | |
| 854 | +every check-in, and even though the manifests compressed will using | |
| 877 | 855 | delta-compression, many CPU cycles had to be spent to decompress those |
| 878 | 856 | manifests. To help make Fossil more efficient for large projects like |
| 879 | 857 | NetBSD, the concept of a delta-manifest was added. This helped a lot |
| 880 | 858 | but was not a perfect solution. |
| 881 | 859 | |
| 882 | 860 |
| --- www/fileformat.wiki | |
| +++ www/fileformat.wiki | |
| @@ -111,10 +111,11 @@ | |
| 111 | <blockquote> |
| 112 | <b>B</b> <i>baseline-manifest</i><br> |
| 113 | <b>C</b> <i>checkin-comment</i><br> |
| 114 | <b>D</b> <i>time-and-date-stamp</i><br> |
| 115 | <b>F</b> <i>filename</i> ?<i>SHA1-hash</i>? ?<i>permissions</i>? ?<i>old-name</i>?<br> |
| 116 | <b>N</b> <i>mimetype</i><br> |
| 117 | <b>P</b> <i>SHA1-hash</i>+<br> |
| 118 | <b>Q</b> (<b>+</b>|<b>-</b>)<i>SHA1-hash</i> ?<i>SHA1-hash</i>?<br> |
| 119 | <b>R</b> <i>repository-checksum</i><br> |
| 120 | <b>T</b> (<b>+</b>|<b>-</b>|<b>*</b>)<i>tag-name</i> <b>*</b> ?<i>value</i>?<br> |
| @@ -153,58 +154,49 @@ | |
| 153 | <blockquote> |
| 154 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><br> |
| 155 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><b>.</b><i>SSS</i> |
| 156 | </blockquote> |
| 157 | |
| 158 | A manifest has zero or more F-cards. Each F-card identifies a file or |
| 159 | subdirectory |
| 160 | that is part of the check-in. There are one, two, three, or four |
| 161 | arguments. The first argument is the pathname of the file or |
| 162 | subdirectory in the |
| 163 | check-in relative to the root of the project file hierarchy. No ".." |
| 164 | or "." directories are allowed within the filename. Space characters |
| 165 | are escaped as in C-card comment text. Backslash characters and |
| 166 | newlines are not allowed within filenames. The directory separator |
| 167 | character is a forward slash (ASCII 0x2F). The second argument to the |
| 168 | F-card is the full 40-character lower-case hexadecimal SHA1 hash of |
| 169 | the content artifact, or of the [#directory|directory artifact] if |
| 170 | the "d" permission is present. The second argument is required for baseline |
| 171 | manifests but is optional for delta manifests. When the second |
| 172 | argument to the F-card is omitted, it means that the file has been |
| 173 | deleted relative to the baseline (files removed in baseline manifests |
| 174 | versions are <em>not</em> added as F-cards). The optional 3rd argument |
| 175 | defines any special access permissions associated with the file. This |
| 176 | can be defined as "x" to mean that the file is executable or "l" |
| 177 | (small letter ell) to mean a symlink or "d" to mean the entry describes |
| 178 | a subdirectory rather than a file. All files and subdirectories |
| 179 | are always readable and writable. This can be expressed by "w" |
| 180 | permission if desired but the "w" permission is optional and is ignored |
| 181 | by Fossil. The file format might be extended with new permission |
| 182 | letters in the future. The optional 4th argument is the name of the |
| 183 | same file as it existed in the parent check-in. If the name of the |
| 184 | file is unchanged from its parent, then the 4th argument is omitted. |
| 185 | |
| 186 | Manifests may be either flat or hierarchical. A flat manifest lists |
| 187 | all files in the check-in, including all files in subdirectories. A |
| 188 | flat manifest may not include F-cards with the "d" permission. An |
| 189 | heirarchical manifest only lists the files or subdirectories at the |
| 190 | top-level of the check-in. An heirarchical manifest may not include |
| 191 | an F-card entries that have a directory separator character ("/"). |
| 192 | An heirarchical manifest may not be a delta-manifest (it may not have |
| 193 | a B-card) nor may it be used as a baseline-manifest by some other |
| 194 | delta-manifest. Hierarchical manifests |
| 195 | are only recognized by Fossil versions 1.35 and later. Repositories |
| 196 | that contain hierarchical manifests will cause problems for earlier |
| 197 | versions of Fossil. |
| 198 | |
| 199 | When an F-card refers to a subdirectory (that is to say, when the |
| 200 | F-card is part of an hierarchical manifest and contains the "d" |
| 201 | permission) then the referenced directory artifact must be a |
| 202 | [#directory|well-formed directory artifact] that contains a |
| 203 | G-card that exactly matches the name of the subdirectory as assigned |
| 204 | by the F-card. If these conditions are not met, then the artifact is |
| 205 | not a valid manifest. |
| 206 | |
| 207 | A manifest has zero or one P-cards. Most manifests have one P-card. |
| 208 | The P-card has a varying number of arguments that |
| 209 | defines other manifests from which the current manifest |
| 210 | is derived. Each argument is an 40-character lowercase |
| @@ -281,30 +273,29 @@ | |
| 281 | A directory artifact describes the files and subdirectories within a |
| 282 | single directory of an hierarchical manifest. Directory artifacts |
| 283 | are only recognized by Fossil version 1.35 and later (circa 2015-12-23). |
| 284 | |
| 285 | Directory artifacts contain zero or more F-cards and exactly one Z-card, |
| 286 | in the same format as a manifest. A directory artifact also contains |
| 287 | exactly one G-card with a single argument that is the pathname |
| 288 | of the directory relative to the root of the repository. |
| 289 | The format of the directory name in a G-card is |
| 290 | the same as the format of a filename in an F-card. |
| 291 | |
| 292 | The F-cards in a directory artifact may not contain directory separator |
| 293 | characters. The content of subdirectories must be expressed using |
| 294 | additional directory artifacts referenced by F-cards with the "d" |
| 295 | permission. All F-cards in a directory artifact must contain at least |
| 296 | two arguments. |
| 297 | |
| 298 | When an F-card X of directory artifact Y refers to |
| 299 | subdirectory Z (that is to say, when F-card X contains |
| 300 | the "d" permission and the second argument on X is the SHA1 |
| 301 | hash of directory artifact Z) then the G-card of Z must |
| 302 | be the concatenation of the G-card on artifact Y, the |
| 303 | directory separator character "/" and the first argument to |
| 304 | the F-card X. Otherwise, the artifact Y is not a valid |
| 305 | directory artifact. |
| 306 | |
| 307 | <a name="cluster"></a> |
| 308 | <h3>1.3 Clusters Artifacts</h3> |
| 309 | |
| 310 | A cluster is an artifact that declares the existence of other artifacts. |
| @@ -615,31 +606,18 @@ | |
| 615 | <td align=center><b>1</b></td> |
| 616 | <td> </td> |
| 617 | </tr> |
| 618 | <tr> |
| 619 | <td><b>B</b> <i>baseline</i></td> |
| 620 | <td align=center><b>0-1*</b></td> |
| 621 | <td> </td> |
| 622 | <td> </td> |
| 623 | <td> </td> |
| 624 | <td> </td> |
| 625 | <td> </td> |
| 626 | <td> </td> |
| 627 | <td> </td> |
| 628 | </tr> |
| 629 | <tr><td> </td><td colspan='8'>* = Required for delta manifests, |
| 630 | Disallowed for hierarchical manifests.</td></tr> |
| 631 | <tr> |
| 632 | <td><b>C</b> <i>comment-text</i></td> |
| 633 | <td align=center><b>1</b></td> |
| 634 | <td> </td> |
| 635 | <td> </td> |
| 636 | <td> </td> |
| 637 | <td> </td> |
| 638 | <td> </td> |
| 639 | <td align=center><b>0-1</b></td> |
| 640 | <td align=center><b>0-1</b></td> |
| 641 | </tr> |
| 642 | <tr> |
| 643 | <td><b>D</b> <i>date-time-stamp</i></td> |
| 644 | <td align=center><b>1</b></td> |
| 645 | <td> </td> |
| @@ -671,13 +649,13 @@ | |
| 671 | <td> </td> |
| 672 | <td> </td> |
| 673 | <td> </td> |
| 674 | </tr> |
| 675 | <tr> |
| 676 | <td><b>G</b> <i>fileame</i> |
| 677 | <td> </td> |
| 678 | <td align=center><b>1</b></td> |
| 679 | <td> </td> |
| 680 | <td> </td> |
| 681 | <td> </td> |
| 682 | <td> </td> |
| 683 | <td> </td> |
| @@ -870,12 +848,12 @@ | |
| 870 | is not a storage space issue. Fossil was originally designed |
| 871 | specifically to support the SQLite project, and as SQLite has fewer |
| 872 | than 2000 files on any give version, a flat baseline manifest design |
| 873 | worked well there and was simple to implement. |
| 874 | |
| 875 | However, some project (ex: NetBSD) contain a huge number of files in |
| 876 | every version, and even though the manifests compressed will using |
| 877 | delta-compression, many CPU cycles had to be spent to decompress those |
| 878 | manifests. To help make Fossil more efficient for large projects like |
| 879 | NetBSD, the concept of a delta-manifest was added. This helped a lot |
| 880 | but was not a perfect solution. |
| 881 | |
| 882 |
| --- www/fileformat.wiki | |
| +++ www/fileformat.wiki | |
| @@ -111,10 +111,11 @@ | |
| 111 | <blockquote> |
| 112 | <b>B</b> <i>baseline-manifest</i><br> |
| 113 | <b>C</b> <i>checkin-comment</i><br> |
| 114 | <b>D</b> <i>time-and-date-stamp</i><br> |
| 115 | <b>F</b> <i>filename</i> ?<i>SHA1-hash</i>? ?<i>permissions</i>? ?<i>old-name</i>?<br> |
| 116 | <b>G</b> <i>SHA1-hash</i><br> |
| 117 | <b>N</b> <i>mimetype</i><br> |
| 118 | <b>P</b> <i>SHA1-hash</i>+<br> |
| 119 | <b>Q</b> (<b>+</b>|<b>-</b>)<i>SHA1-hash</i> ?<i>SHA1-hash</i>?<br> |
| 120 | <b>R</b> <i>repository-checksum</i><br> |
| 121 | <b>T</b> (<b>+</b>|<b>-</b>|<b>*</b>)<i>tag-name</i> <b>*</b> ?<i>value</i>?<br> |
| @@ -153,58 +154,49 @@ | |
| 154 | <blockquote> |
| 155 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><br> |
| 156 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><b>.</b><i>SSS</i> |
| 157 | </blockquote> |
| 158 | |
| 159 | A manifest has zero or more F-cards. Each F-card identifies a file |
| 160 | that is part of the check-in. There are one, two, three, or four |
| 161 | arguments. The first argument is the pathname of the file or |
| 162 | subdirectory in the |
| 163 | check-in relative to the root of the project file hierarchy. No ".." |
| 164 | or "." directories are allowed within the filename. Space characters |
| 165 | are escaped as in C-card comment text. Backslash characters and |
| 166 | newlines are not allowed within filenames. The directory separator |
| 167 | character is a forward slash (ASCII 0x2F). The second argument to the |
| 168 | F-card is the full 40-character lower-case hexadecimal SHA1 hash of |
| 169 | the content artifact. The second argument is required for baseline |
| 170 | manifests but is optional for delta manifests. When the second |
| 171 | argument to the F-card is omitted, it means that the file has been |
| 172 | deleted relative to the baseline (files removed in baseline manifests |
| 173 | versions are <em>not</em> added as F-cards). The optional 3rd argument |
| 174 | defines any special access permissions associated with the file. |
| 175 | In a manifest, the permission string may contain |
| 176 | an "x" to mean that the file is executable or "l" |
| 177 | (small letter ell) to mean the file is a symlink. |
| 178 | All files are always readable and writable. This can be expressed by "w" |
| 179 | permission if desired but the "w" permission is optional and is ignored |
| 180 | by Fossil. The file format might be extended with new permission |
| 181 | letters in the future. The optional 4th argument is the name of the |
| 182 | same file as it existed in the parent check-in. If the name of the |
| 183 | file is unchanged from its parent, then the 4th argument is omitted. |
| 184 | |
| 185 | A G-card is an alternative way of specifying the files of a check-in. |
| 186 | A single manifest may have many F-cards or a single G-card, but not |
| 187 | both. A manifest containing F-cards is called a "flat manifest" and |
| 188 | a manifest that contains a G-card is called an "hierarchical manifest". |
| 189 | |
| 190 | A G-card contains a single argument which is the SHA1 hash of a |
| 191 | [#directory|directory artifact] that defines the files and directories |
| 192 | at the top-level of the check-in. That directory artifact may contain |
| 193 | F-cards with the "d" permission that reference other subdirectories |
| 194 | in check-in file hierarchy. |
| 195 | |
| 196 | A G-card may not be used in a delta manifest. No delta manifest may |
| 197 | refer to an hierarchical manifest as its baseline. |
| 198 | |
| 199 | A manifest has zero or one P-cards. Most manifests have one P-card. |
| 200 | The P-card has a varying number of arguments that |
| 201 | defines other manifests from which the current manifest |
| 202 | is derived. Each argument is an 40-character lowercase |
| @@ -281,30 +273,29 @@ | |
| 273 | A directory artifact describes the files and subdirectories within a |
| 274 | single directory of an hierarchical manifest. Directory artifacts |
| 275 | are only recognized by Fossil version 1.35 and later (circa 2015-12-23). |
| 276 | |
| 277 | Directory artifacts contain zero or more F-cards and exactly one Z-card, |
| 278 | in the same format as a manifest. |
| 279 | |
| 280 | The F-cards of a directory artifact are slightly different from the F-cards |
| 281 | in a [#manifest|manifest artifact]. |
| 282 | |
| 283 | <ul> |
| 284 | <li>F-cards in a directory artifact may not have directory separator |
| 285 | characters in their filename. The F-cards of a directory specify only |
| 286 | the files and subdirectories in that directory. |
| 287 | <li>F-cards in a directory artifact may use the "d" permission character |
| 288 | to indicate that the entry refers to a subdirectory. In that case, the |
| 289 | SHA1 hash on the second argument refers to another directory artifact, |
| 290 | not to a content artifact. |
| 291 | <li>F-cards in a directory artifact must have at last two arguments. |
| 292 | </ul> |
| 293 | |
| 294 | The Z-card in a directory artifact is required and has the same format as |
| 295 | it does in all other special artifacts. Directory artifacts may not be |
| 296 | PGP-clearsigned. |
| 297 | |
| 298 | <a name="cluster"></a> |
| 299 | <h3>1.3 Clusters Artifacts</h3> |
| 300 | |
| 301 | A cluster is an artifact that declares the existence of other artifacts. |
| @@ -615,31 +606,18 @@ | |
| 606 | <td align=center><b>1</b></td> |
| 607 | <td> </td> |
| 608 | </tr> |
| 609 | <tr> |
| 610 | <td><b>B</b> <i>baseline</i></td> |
| 611 | <td align=center><b>0-1</b></td> |
| 612 | <td> </td> |
| 613 | <td> </td> |
| 614 | <td> </td> |
| 615 | <td> </td> |
| 616 | <td> </td> |
| 617 | <td> </td> |
| 618 | <td> </td> |
| 619 | </tr> |
| 620 | <tr> |
| 621 | <td><b>D</b> <i>date-time-stamp</i></td> |
| 622 | <td align=center><b>1</b></td> |
| 623 | <td> </td> |
| @@ -671,13 +649,13 @@ | |
| 649 | <td> </td> |
| 650 | <td> </td> |
| 651 | <td> </td> |
| 652 | </tr> |
| 653 | <tr> |
| 654 | <td><b>G</b> <i>SHA1-hash</i> |
| 655 | <td align=center><b>0-1</b></td> |
| 656 | <td> </td> |
| 657 | <td> </td> |
| 658 | <td> </td> |
| 659 | <td> </td> |
| 660 | <td> </td> |
| 661 | <td> </td> |
| @@ -870,12 +848,12 @@ | |
| 848 | is not a storage space issue. Fossil was originally designed |
| 849 | specifically to support the SQLite project, and as SQLite has fewer |
| 850 | than 2000 files on any give version, a flat baseline manifest design |
| 851 | worked well there and was simple to implement. |
| 852 | |
| 853 | However, some other projects (ex: NetBSD) contain a huge number of files in |
| 854 | every check-in, and even though the manifests compressed will using |
| 855 | delta-compression, many CPU cycles had to be spent to decompress those |
| 856 | manifests. To help make Fossil more efficient for large projects like |
| 857 | NetBSD, the concept of a delta-manifest was added. This helped a lot |
| 858 | but was not a perfect solution. |
| 859 | |
| 860 |