/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
3441.6.1 by Martin Pool
Start a design principles document
1
========================
6803.1.1 by Jelmer Vernooij
Bunch of developer docs changes:
2
Breezy Design Principles
3441.6.1 by Martin Pool
Start a design principles document
3
========================
4
6803.1.1 by Jelmer Vernooij
Bunch of developer docs changes:
5
We have learned or adopted a few general principles for code in Breezy.
3441.6.1 by Martin Pool
Start a design principles document
6
Generally we will try to follow them in future, either for consistency or
3441.6.2 by Martin Pool
Note about branch.conf being a .bzr file you can edit.
7
because they've been proven to work well, or both.  
8
9
We may need to depart from these principles in particular special cases,
10
or modify them as we learn more, or we might be diverging for them for no
11
very good reason but just because of bugs.  If in doubt, ask.  
3441.6.1 by Martin Pool
Start a design principles document
12
6803.1.1 by Jelmer Vernooij
Bunch of developer docs changes:
13
See also: `Breezy Developer Document Catalog <index.html>`_.
3441.6.1 by Martin Pool
Start a design principles document
14
15
16
Testing
17
-------
18
19
Untested code is broken code.
20
21
So if a function is removed from the normal flow of execution (perhaps
22
because a new default format was introduced) we have to make sure we can
23
still execute and test the old code -- or remove it altogether.
24
25
26
27
Data formats
28
------------
29
30
Fixing code once it's released is easy; fixing a problematic data format
31
once people have started using it is more difficult.  We should document
32
and review formats separately from the code that implements them.
33
34
Data formats should have clear format markers that allow us to support new
35
formats in future.  It should be easy to read the format without reading
36
the whole object.
37
38
The format marker should be a string understandable by a user that names
6803.1.1 by Jelmer Vernooij
Bunch of developer docs changes:
39
the format and gives the Breezy release that introduced it.  If the Breezy
3441.6.1 by Martin Pool
Start a design principles document
40
program doesn't understand that format, it can at least show that format
41
marker to the user.
42
43
Once we mark a format as supported, we'll continue supporting it for
44
several future releases, and support upgrading from it
45
forever.
46
47
Once we've released a format, we normally don't change it.  Adding new
48
optional elements can cause problems when older clients don't understand
49
those changes, or don't propagate them properly.
50
51
We clearly distinguish internal files from user files.  Files inside
6803.1.1 by Jelmer Vernooij
Bunch of developer docs changes:
52
``.bzr/`` are only written to by Breezy and we discourage users from editing
53
them.  Within Breezy, code addressing the abstract interface of the Branch,
54
ControlDir, etc shouldn't know where or how the internal files are stored.  If
3441.6.1 by Martin Pool
Start a design principles document
55
anything else is written in there, it won't be propagated when pushing or
3441.6.2 by Martin Pool
Note about branch.conf being a .bzr file you can edit.
56
pulling, and won't be converted when upgrading.  (This is not quite true
57
though; there is a ``branch.conf``.)
3441.6.1 by Martin Pool
Start a design principles document
58
59
User files within the tree, by contrast, we always store and return
6803.1.1 by Jelmer Vernooij
Bunch of developer docs changes:
60
verbatim.  It's OK for Breezy to read and act on these files (as we do
61
with ``.bzrignore``), and to update them (as ``brz ignore`` does), but
3441.6.1 by Martin Pool
Start a design principles document
62
they remain clearly user files and can be directly edited.