~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/overview.txt

Merge cleanup into first-try

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 
5
5
This document describes the key classes and concepts within Bazaar.  It is
6
6
intended to be useful to people working on the Bazaar codebase, or to
7
 
people writing plugins.
 
7
people writing plugins.  People writing plugins may also like to read the 
 
8
guide to `Integrating with Bazaar <integrating.html>`_ for some specific
 
9
recipes.
8
10
 
9
11
If you have any questions, or if something seems to be incorrect, unclear
10
12
or missing, please talk to us in ``irc://irc.freenode.net/#bzr``, or write
11
 
to the Bazaar mailing list.  To propose a correction or addition to this
12
 
document, send a merge request or new text to the mailing list.
13
 
 
14
 
The current version of this document is available in the file
15
 
``doc/developers/overview.txt`` in the source tree, and available online
16
 
within the developer documentation, <http://doc.bazaar-vcs.org/developers/>.
17
 
 
18
 
 
19
 
Essential Domain Classes
20
 
########################
21
 
 
22
 
The core domain objects within the bazaar model are:
23
 
 
24
 
* Transport
25
 
 
26
 
* Branch
27
 
 
28
 
* Repository
29
 
 
30
 
* WorkingTree
31
 
 
32
 
Transports are explained below. See http://bazaar-vcs.org/Classes/
33
 
for an introduction to the other key classes.
 
13
to the Bazaar mailing list.  
 
14
 
 
15
 
 
16
Core classes
 
17
############
34
18
 
35
19
Transport
36
 
#########
 
20
=========
37
21
 
38
22
The ``Transport`` layer handles access to local or remote directories.
39
23
Each Transport object acts as a logical connection to a particular
46
30
Python file I/O mechanisms.
47
31
 
48
32
Filenames vs URLs
49
 
=================
 
33
-----------------
50
34
 
51
35
Transports work in terms of URLs.  Take note that URLs are by definition
52
36
only ASCII - the decision of how to encode a Unicode string into a URL
83
67
is also in the form of URL components.
84
68
 
85
69
 
 
70
WorkingTree
 
71
===========
 
72
 
 
73
A workingtree is a special type of Tree that's associated with a working
 
74
directory on disk, where the user can directly modify the files. 
 
75
 
 
76
Responsibilities:
 
77
 
 
78
 * Maintaining a WorkingTree on disk at a file path.
 
79
 * Maintaining the basis inventory (the inventory of the last commit done)
 
80
 * Maintaining the working inventory.
 
81
 * Maintaining the pending merges list.
 
82
 * Maintaining the stat cache.
 
83
 * Maintaining the last revision the working tree was updated to.
 
84
 * Knows where its Branch is located.
 
85
 
 
86
Dependencies:
 
87
 
 
88
 * a Branch
 
89
 * an MutableInventory
 
90
 * local access to the working tree
 
91
 
 
92
Branch
 
93
======
 
94
 
 
95
A Branch is a key user concept - its a single line of history that one or
 
96
more people have been committing to. 
 
97
 
 
98
A Branch is responsible for:
 
99
 
 
100
 * Holding user preferences that are set in a Branch.
 
101
 * Holding the 'tip': the last revision to be committed to this Branch. (And the revno of that revision.)
 
102
 * Knowing how to open the Repository that holds its history.
 
103
 * Allowing write locks to be taken out to prevent concurrent alterations to the branch.
 
104
 
 
105
Depends on:
 
106
 * URL access to its base directory.
 
107
 * A Transport to access its files.
 
108
 * A Repository to hold its history.
 
109
 
86
110
Repository
87
 
##########
 
111
==========
88
112
 
89
113
Repositories store committed history: file texts, revisions, inventories,
90
 
and graph relationships between them.
 
114
and graph relationships between them.  A repository holds a bag of
 
115
revision data that can be pointed to by various branches:
 
116
 
 
117
 * Maintains storage of various history data at a URL:
 
118
   * Revisions (Must have a matching inventory)
 
119
   * Digital Signatures
 
120
   * Inventories for each Revision. (Must have all the file texts available).
 
121
   * File texts
 
122
 
 
123
 * Synchronizes concurrent access to the repository by different
 
124
   processes.  (Most repository implementations use a physical 
 
125
   mutex only for a short period, and effectively support multiple readers
 
126
   and writers.)
91
127
 
92
128
Stacked Repositories
93
 
====================
 
129
--------------------
94
130
 
95
131
A repository can be configured to refer to a list of "fallback"
96
132
repositories.  If a particular revision is not present in the original