Artifact c4c7a9be7e5e2e1c939909b215817c6163365c49
File www/pop.html part of check-in [b110d77c36] - Website updates. by drh on 2007-08-09 01:08:19.
Principles Of Operation
This page attempts to define the foundational principals upon which Fossil is built.
A project consists of source files, wiki pages, and trouble tickets. All historical copies of all these entities are saved. The project maintains an audit trail.
A project resides in one or more repositories. Each repository is administered and operates independently of the others.
Each repository has both global and local state. The global state is common to all repositories (or at least has the potential to be shared in common when the repositories are fully synchronized). The local state for each repository is private to that repository. The global state represents the content of the project. The local state identifies the authorized users and access policies for a particular repository.
The global state of a repository is an unordered collection of files. Each file is named by its SHA1 hash encoded in hexadecimal. In many contexts, the name can be abbreviated to a unique prefix. A five- or six-character prefix usually suffices to uniquely identify a file.
Because files are named by their SHA1 hash, all files are immutable. Any change to the content of a file also changes the hash that forms the files name, thus creating a new file. Both the old original version of the file and the new change are preserved under different names.
It is theoretically possible for two files with different content to share the same hash. But finding two such files is so incredibly difficult and unlikely that we consider it to be an impossibility.
The signature of a file is the SHA1 hash of the file itself, exactly as it appears on disk. No prefix or meta-information about the file is added before computing the hash. So you can always find the SHA1 signature of a file by using the "sha1sum" command-line utility.
The files that comprise the global state of a repository are the complete global state of that repository. The SQLite database that holds the repository contains additional information about linkages between files, but all of that added information can be discarded and reconstructed by rescanning the content files.
Two repositories for the same project can synchronize their global states simply by sharing files. The local state of repositories is not normally synchronized or shared.
Every repository has a special file at the top-level named "manifest" which is an index of all other files in the system. The manifest is automatically created and maintained by the system.
The file formats used by Fossil are all very simple so that with access to the original content files, one can easily reconstruct the content of a baseline without the need for any special tools or software.