Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Reverted 'a SQLite' to 'an SQLite' on advice. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | bv-corrections01 |
| Files: | files | file ages | folders |
| SHA3-256: |
b0d7fb4ad40d6cc3eab8a0cf60a29bf9 |
| User & Date: | brickviking 2024-10-30 11:05:10.396 |
Context
|
2024-10-31
| ||
| 02:16 | Merge from trunk check-in: c8967e64dd user: brickviking tags: bv-corrections01 | |
|
2024-10-30
| ||
| 21:25 | Merge from bv-corrections01 check-in: c0654b13ff user: brickviking tags: trunk | |
| 11:05 | Reverted 'a SQLite' to 'an SQLite' on advice. check-in: b0d7fb4ad4 user: brickviking tags: bv-corrections01 | |
| 10:52 | Canonicalize use of SQLite where it makes sense instead of sqlite. Also changed from 'an sqlite' to 'a SQLite', perhaps incorrectly. check-in: b9079597a4 user: brickviking tags: bv-corrections01 | |
Changes
Changes to www/alerts.md.
| ︙ | ︙ | |||
309 310 311 312 313 314 315 | <a id="advanced"></a> ## Advanced Email Setups Fossil offers several methods of sending email: 1. Pipe the email message text into a command. | | | 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 | <a id="advanced"></a> ## Advanced Email Setups Fossil offers several methods of sending email: 1. Pipe the email message text into a command. 2. Store email messages as entries in an SQLite database. 3. Store email messages as individual files in a directory. 4. Send emails to an SMTP relay. 5. Send emails directly to the recipients via SMTP. This wide range of options allows Fossil to talk to pretty much any SMTP setup. |
| ︙ | ︙ | |||
388 389 390 391 392 393 394 | The self-hosting Fossil repository at <https://fossil-scm.org/> currently uses this method rather than [the pipe method](#pipe) because it is running inside of a restrictive [chroot jail][cj] which is unable to hand off messages to the local MTA directly. When you configure a Fossil server this way, it adds outgoing email | | | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | The self-hosting Fossil repository at <https://fossil-scm.org/> currently uses this method rather than [the pipe method](#pipe) because it is running inside of a restrictive [chroot jail][cj] which is unable to hand off messages to the local MTA directly. When you configure a Fossil server this way, it adds outgoing email messages to an SQLite database file. A separate daemon process can then extract those messages for further disposition. Fossil includes a copy of [the daemon](/file/tools/email-sender.tcl) used on `fossil-scm.org`: it is just a short Tcl script that continuously monitors this database for new messages and hands any that it finds off to a local MTA using the same [pipe to MTA protocol](#pipe) as above. |
| ︙ | ︙ |
Changes to www/caps/ref.html.
| ︙ | ︙ | |||
250 251 252 253 254 255 256 |
<th>TktFmt</th>
<td>
Create new ticket report formats. Note that although this allows
the user to provide SQL code to be run in the server’s context,
and this capability is given to the untrusted “anonymous” user
category by default, this is a safe capability to give to users
because it is internally restricted to read-only queries on the
| | | 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 |
<th>TktFmt</th>
<td>
Create new ticket report formats. Note that although this allows
the user to provide SQL code to be run in the server’s context,
and this capability is given to the untrusted “anonymous” user
category by default, this is a safe capability to give to users
because it is internally restricted to read-only queries on the
tickets table only. (This restriction is done with an SQLite
authorization hook, not by any method so weak as SQL text
filtering.) Mnemonic: new <b>t</b>icket report.
</td>
</tr>
<tr id="u">
<th>u</th>
|
| ︙ | ︙ |
Changes to www/fossil-is-not-relational.md.
| ︙ | ︙ | |||
129 130 131 132 133 134 135 | any given artifact into the data store, the timestamp of each such change, the inheritance tree of checkins, and many other pieces of metadata. - Raw file content of versioned files. These data are external to artifacts, which refer to them by their hashes. How they are stored is not the concern of the data model, but (spoiler alert!) Fossil | | | 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | any given artifact into the data store, the timestamp of each such change, the inheritance tree of checkins, and many other pieces of metadata. - Raw file content of versioned files. These data are external to artifacts, which refer to them by their hashes. How they are stored is not the concern of the data model, but (spoiler alert!) Fossil stores them in an SQLite database, one record per distinct hash, in its `blob` table (which we will cover more very soon). Non-SCM-relevant state includes: - Fossil's list of users and their metadata (permissions, email address, etc.). Artifacts themselves reference users only by their user names. Artifacts neither care whether, nor guarantee that, user |
| ︙ | ︙ |
Changes to www/fossil-v-git.wiki.
| ︙ | ︙ | |||
594 595 596 597 598 599 600 | <h3 id="checkouts">2.6 One vs. Many Check-outs per Repository</h3> Because Git commingles the repository data with the initial checkout of that repository, the default mode of operation in Git is to stick to that single work/repo tree, even when that's a shortsighted way of working. | | | 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 | <h3 id="checkouts">2.6 One vs. Many Check-outs per Repository</h3> Because Git commingles the repository data with the initial checkout of that repository, the default mode of operation in Git is to stick to that single work/repo tree, even when that's a shortsighted way of working. Fossil doesn't work that way. A Fossil repository is an SQLite database file which is normally stored outside the working checkout directory. You can [/help?cmd=open | open] a Fossil repository any number of times into any number of working directories. A common usage pattern is to have one working directory per active working branch, so that switching branches is done with a <tt>cd</tt> command rather than by checking out the branches successively in a single working directory. |
| ︙ | ︙ |
Changes to www/gitusers.md.
| ︙ | ︙ | |||
54 55 56 57 58 59 60 | underneath your working directory. This difference shows up in several separate places when it comes to moving from Git to Fossil. #### <a id="cwork" name="scw"></a> Checkout Workflows | | | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | underneath your working directory. This difference shows up in several separate places when it comes to moving from Git to Fossil. #### <a id="cwork" name="scw"></a> Checkout Workflows A Fossil repository is an SQLite database storing the entire history of a project. It is not normally stored inside the working tree. A Fossil working tree — [also called a check-out](./glossary.md#check-out) — is a directory that contains a snapshot of your project that you are currently working on, extracted for you from the repository database file by the `fossil` program. There are ways to |
| ︙ | ︙ | |||
146 147 148 149 150 151 152 | destructive!) This Fossil command does not remove the managed files, and unless you give the `--force` option, it won’t let you close the check-out with uncommitted changes to those managed files. The `close` command also refuses to run without `--force` when you have certain other precious per-checkout data that Fossil stores in the | | | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | destructive!) This Fossil command does not remove the managed files, and unless you give the `--force` option, it won’t let you close the check-out with uncommitted changes to those managed files. The `close` command also refuses to run without `--force` when you have certain other precious per-checkout data that Fossil stores in the `.fslckout` file at the root of a check-out directory. This is an SQLite database that keeps track of local state such as what version you have checked out, the contents of the [stash] for that working directory, the [undo] buffers, per-checkout [settings][set], and so forth. The stash and undo buffers are considered precious uncommitted changes, so you have to force Fossil to discard these as part of closing the check-out. |
| ︙ | ︙ |
Changes to www/glossary.md.
| ︙ | ︙ | |||
346 347 348 349 350 351 352 |
(Contrast the Cygwin and WSL Fossil binaries, which use POSIX file
naming rules.)
* In the same way that one cannot extract files from a zip archive
without having a copy of that zip file, one cannot make check-outs
without access to the repository file or a clone thereof.
| | | 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 |
(Contrast the Cygwin and WSL Fossil binaries, which use POSIX file
naming rules.)
* In the same way that one cannot extract files from a zip archive
without having a copy of that zip file, one cannot make check-outs
without access to the repository file or a clone thereof.
* Because a Fossil repository is an SQLite database file, the same
rules for avoiding data corruption apply to it. In particular, it is
[nearly a hard requirement][h2cflp] that the repository clone be on
the same machine as the one where you make check-outs and the
subsequent check-ins.
That said, the relative locations of the repo and the check-out
within the local file system are arbitrary. The repository may be
|
| ︙ | ︙ |
Changes to www/history.md.
| ︙ | ︙ | |||
51 52 53 54 55 56 57 | [325]: https://sqlite.org/src/timeline?a=19700101&n1=10 [330]: https://sqlite.org/src/timeline?c=20030101&n1=10&nd At about this same time, the [Monotone][335] system appeared. Monotone was one of the first distributed version control systems. As far as this author is aware, Monotone was the first VCS to make use of | | | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | [325]: https://sqlite.org/src/timeline?a=19700101&n1=10 [330]: https://sqlite.org/src/timeline?c=20030101&n1=10&nd At about this same time, the [Monotone][335] system appeared. Monotone was one of the first distributed version control systems. As far as this author is aware, Monotone was the first VCS to make use of SHA1 to identify artifacts. Monotone stored its content in an SQLite database, which is what brought it to the attention of the SQLite architect. These design choices were a major source of inspiration for Fossil. [335]: https://www.monotone.ca/ Beginning around 2005, the need for a better version control system for SQLite began to become evident. The SQLite architect looked |
| ︙ | ︙ |
Changes to www/index.wiki.
| ︙ | ︙ | |||
74 75 76 77 78 79 80 |
which helps to keep projects moving
forward by reducing the amount of needless
[./branching.wiki | forking and merging] often
associated with distributed projects.
7. <b>Robust & Reliable</b> —
Fossil stores content using an [./fileformat.wiki | enduring file format]
| | | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
which helps to keep projects moving
forward by reducing the amount of needless
[./branching.wiki | forking and merging] often
associated with distributed projects.
7. <b>Robust & Reliable</b> —
Fossil stores content using an [./fileformat.wiki | enduring file format]
in an SQLite database so that transactions are
atomic even if interrupted by a power loss or system crash.
Automatic [./selfcheck.wiki | self-checks] verify that all aspects of
the repository are consistent prior to each commit.
8. <b>Free and Open-Source</b> — [../COPYRIGHT-BSD2.txt|2-clause BSD license].
<hr>
|
| ︙ | ︙ |
Changes to www/patchcmd.md.
| ︙ | ︙ | |||
79 80 81 82 83 84 85 | fi ``` ## Implementation Details The "fossil patch create" command records all of the local, uncommitted | | | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | fi ``` ## Implementation Details The "fossil patch create" command records all of the local, uncommitted changes in an SQLite database file. If the argument to "fossil patch create" is a filename, then the patch-file database is written into that file. If the argument is "-" then the database is written on standard output. The "fossil patch apply" command reads the patch-file database and applies it to the local check-out. If a filename is given as an argument, then the database is read from that file. If the argument is "-" then the database is read from standard input. |
| ︙ | ︙ |
Changes to www/theory1.wiki.
| ︙ | ︙ | |||
43 44 45 46 47 48 49 | thus immutable. Artifacts can be added to the database but not removed (if we ignore the exceptional case of [./shunning.wiki | shunning].) Repositories synchronize by computing the union of their artifact sets. SQL and relation theory play no role in any of this. SQL enters the picture only in the implementation details. The current | | | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | thus immutable. Artifacts can be added to the database but not removed (if we ignore the exceptional case of [./shunning.wiki | shunning].) Repositories synchronize by computing the union of their artifact sets. SQL and relation theory play no role in any of this. SQL enters the picture only in the implementation details. The current implementation of Fossil stores each artifact as a BLOB in an SQLite database. The current implementation also parses up each control artifact as it arrives and stores the information discovered from that parse in various other SQLite tables to facilitate rapid generation of reports such as timelines, file histories, file lists, branch lists, and so forth. Note that all of this additional information is derived from the artifacts. The artifacts are canonical. The relational tables serve only as a cache. |
| ︙ | ︙ |