Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_fs_base/notes/structure view on Meta::CPAN
- (1) E exists in both ANCESTOR and B, and refers to the same
node revision. Replace E with A's node revision. ***
- (1) E exists in both ANCESTOR and A, and refers to the same
node revision.
- (1) E exists in both ANCESTOR and B, and refers to the same
node revision. Nothing has happened to ANCESTOR/E, so no
change is necessary.
*** == something actually happens
Non-Historical Properties
[[Yes, do tell.]]
UUIDs: Universally Unique Identifiers
Every filesystem has a UUID. This is represented as record #1 in the
`uuids' table.
Layers
In previous structurings of the code, I had trouble keeping track of
exactly who has implemented which promises, based on which other
promises from whom.
I hope the arrangement below will help me keep things straight, and
make the code more reliable. The files are arranged in order from
low-level to high-level: each file depends only on services provided
by the files before it.
skel.c, id.c, dbt.c, convert-size.c
Low-level utility functions.
fs_skels.c Routines for marshaling between skels and native FS types.
fs.c Creating and destroying filesystem objects.
err.c Error handling.
nodes-table.c, txn-table.c, rev-table.c, reps-table.c, strings-table.c
Create and open particular database tables.
Responsible for intra-record consistency.
node-rev.c Creating, reading, and writing node revisions.
Responsible for deciding what gets deltified when.
reps-strings.c
Retrieval and storage of represented strings.
This will handle delta-based storage,
dag.c Operations on the DAG filesystem. "DAG" because the
interface exposes the filesystem's sharing structure.
Enforce inter-record consistency.
tree.c Operations on the tree filesystem. This layer is
built on top of dag.c, but transparently distinguishes
virtual copies, making the underlying DAG look like a
real tree. This makes incomplete transactions behave
like ordinary mutable filesystems.
delta.c Computing deltas.
Appendix: Filesystem structure summary
======================================
Berkeley DB tables
------------------
"nodes" : btree(ID -> NODE-REVISION, "next-key" -> NODE-ID)
"revisions" : recno(REVISION)
"transactions" : btree(TXN -> TRANSACTION, "next-key" -> TXN)
"changes" : btree(TXN -> CHANGE)
"copies" : btree(CPY -> COPY, "next-key" -> CPY)
"strings" : btree(STR -> STRING, "next-key" -> STR)
"representations" : btree(REP -> REPRESENTATION, "next-key" -> REP)
"uuids" : recno(UUID)
"locks" : btree(TOKEN -> LOCK)
"lock-tokens" : btree(PATH -> TOKEN)
"node-origins" : btree(NODE-ID -> ID)
"checksum-reps" : btree(SHA1SUM -> REP, "next-key" -> number-36)
"miscellaneous" : btree(STRING -> STRING)
Syntactic elements
------------------
Table keys:
ID ::= NODE-REV-ID ;
TXN ::= number-36 ;
CPY ::= number-36 ;
STR ::= number-36 ;
REP ::= number-36 ;
TOKEN ::= uuid ;
Property lists:
PROPLIST ::= (PROP ...) ;
PROP ::= atom atom ;
Filesystem revisions:
REVISION ::= ("revision" TXN) ;
Transactions:
TRANSACTION ::= UNFINISHED-TXN | COMMITTED-TXN | DEAD-TXN
UNFINISHED-TXN ::= ("transaction" ROOT-ID BASE-ID PROPLIST COPIES) ;
COMMITTED-TXN ::= ("committed" ROOT-ID REV PROPLIST COPIES) ;
DEAD-TXN ::= ("dead" ROOT-ID BASE-ID PROPLIST COPIES) ;
ROOT-ID ::= NODE-REV-ID ;
BASE-ID ::= NODE-REV-ID ;
COPIES ::= (CPY ...) ;
( run in 1.587 second using v1.01-cache-2.11-cpan-39bf76dae61 )