/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
325 by Martin Pool
- more revfile design notes
1
.. -*- mode: indented-text; compile-command: "make -C doc" -*- 
321 by Martin Pool
doc: revfile storage and related things
2
3
4
*******************
5
Things to do in bzr
6
*******************
7
287 by Martin Pool
- todo: plugins
8
293 by Martin Pool
- todos
9
See also various low-level TODOs in the source code.  Try looking in
284 by Martin Pool
- more TODO items
10
the list archive or on gmane.org for previous discussion of these
293 by Martin Pool
- todos
11
issues.
12
13
These are classified by approximate size: an hour or less, a day or
14
less, and several days or more.
15
282 by Martin Pool
- move all TODO items into ./TODO
16
17
Small things
18
------------
19
850 by Martin Pool
- Merge merge updates from aaron
20
* Merge should ignore the destination's working directory, otherwise
21
  we get an error about the statcache when pulling from a remote
22
  branch.
23
282 by Martin Pool
- move all TODO items into ./TODO
24
* Add of a file that was present in the base revision should put back
25
  the previous file-id.
26
27
* Handle diff of files which do not have a trailing newline; probably
28
  requires patching difflib to get it exactly right, or otherwise
29
  calling out to GNU diff.
30
289 by Martin Pool
todo
31
* -r option should take a revision-id as well as a revno.
32
322 by Martin Pool
- update todo list
33
* ``bzr info`` should count only people with distinct email addresses as
290 by Martin Pool
todo
34
  different committers.  (Or perhaps only distinct userids?)
35
322 by Martin Pool
- update todo list
36
* On Windows, command-line arguments should be `glob-expanded`__,
293 by Martin Pool
- todos
37
  because the shell doesn't do this.  However, there are probably some
38
  commands where this shouldn't be done, such as 'bzr ignore', because
39
  we want to accept globs.
40
329 by Martin Pool
- refactor command functions into command classes
41
* ``bzr ignore`` command that just adds a line to the ``.bzrignore`` file
42
  and makes it versioned.  Fix this to break symlinks.
295 by Martin Pool
todo
43
312 by Martin Pool
todo
44
* Any useful sanity checks in 'bzr ignore'?  Perhaps give a warning if
45
  they try to add a single file which is already versioned, or if they
46
  add a pattern which already exists, or if it looks like they gave an
47
  unquoted glob.
310 by Martin Pool
- new 'bzr ignored' command!
48
325 by Martin Pool
- more revfile design notes
49
__ http://mail.python.org/pipermail/python-list/2001-April/037847.html
50
327 by Martin Pool
todo
51
* Separate read and write version checks?
325 by Martin Pool
- more revfile design notes
52
405 by Martin Pool
todo
53
* ``bzr status DIR`` should give status on all files under that
54
  directory.
55
484 by Martin Pool
todo
56
* ``bzr log DIR`` should give changes to any files within DIR.
57
329 by Martin Pool
- refactor command functions into command classes
58
* ``bzr inventory -r REV`` and perhaps unify this with ``bzr ls``,
59
  giving options to display ids, types, etc.
60
341 by Martin Pool
todo
61
* Split BzrError into various more specific subclasses for different
62
  errors people might want to catch.
326 by Martin Pool
todo
63
393 by Martin Pool
todo: export to tarball
64
* If the export destination ends in '.tar', '.tar.gz', etc then create
65
  a tarball instead of a directory.  (Need to actually make a
66
  temporary directory and then tar that up.)
67
68
  http://www.gelato.unsw.edu.au/archives/git/0504/2194.html
395 by Martin Pool
- fix error raised from invalid InventoryEntry name
69
  
414 by Martin Pool
todo
70
* RemoteBranch could maintain a cache either in memory or on disk.  We
71
  know more than an external cache might about which files are
72
  immutable and which can vary.  On the other hand, it's much simpler
73
  to just use an external proxy cache.
74
586 by Martin Pool
todo
75
  Perhaps ~/.bzr/http-cache.  Baz has a fairly simple cache under
76
  ~/.arch-cache, containing revision information encoded almost as a
77
  bunch of archives.  Perhaps we could simply store full paths.
78
487 by Martin Pool
todo
79
* Maybe also store directories in the statcache so that we can quickly
80
  identify that they still exist.
81
570 by Martin Pool
doc
82
* Diff should show timestamps; for files from the working directory we
83
  can use the file itself; for files from a revision we should use the
84
  commit time of the revision.
85
593 by Martin Pool
todo
86
* Perhaps split command infrastructure from the actual command
87
  definitions.
88
89
* Cleaner support for negative boolean options like --no-recurse.
90
603 by Martin Pool
doc
91
* Statcache should possibly map all file paths to / separators
92
642 by Martin Pool
- notes on patches for Windows
93
* quotefn doubles all backslashes on Windows; this is probably not the
94
  best thing to do.  What would be a better way to safely represent
95
  filenames?  Perhaps we could doublequote things containing spaces,
96
  on the principle that filenames containing quotes are unlikely?
97
  Nice for humans; less good for machine parsing.
98
99
* Patches should probably use only forward slashes, even on Windows,
100
  otherwise Unix patch can't apply them. (?) 
101
665 by Martin Pool
todo
102
* Branch.update_revisions() inefficiently fetches revisions from the
103
  remote server twice; once to find out what text and inventory they
104
  need and then again to actually get the thing.  This is a bit
105
  inefficient. 
106
107
  One complicating factor here is that we don't really want to have
108
  revisions present in the revision-store until all their constituent
109
  parts are also stored.
110
111
  The basic problem is that RemoteBranch.get_revision() and similar
112
  methods return object, but what we really want is the raw XML, which
113
  can be popped into our own store.  That needs to be refactored.
691 by Martin Pool
todo
114
115
* ``bzr status FOO`` where foo is ignored should say so.
724 by Martin Pool
- todo: bzr mkdir
116
117
* ``bzr mkdir A...`` should just create and add A.
818 by Martin Pool
- Clear pending-merge list when committing.
118
119
* Guard against repeatedly merging any particular patch.
665 by Martin Pool
todo
120
  
121
414 by Martin Pool
todo
122
282 by Martin Pool
- move all TODO items into ./TODO
123
Medium things
124
-------------
125
126
* Merge revert patch.
127
329 by Martin Pool
- refactor command functions into command classes
128
* ``bzr mv`` that does either rename or move as in Unix.
282 by Martin Pool
- move all TODO items into ./TODO
129
478 by Martin Pool
- put back support for running diff or status on
130
* More efficient diff of only selected files.  We should be able to
131
  just get the id for the selected files, look up their location and
132
  diff just those files.  No need to traverse the entire inventories.
282 by Martin Pool
- move all TODO items into ./TODO
133
479 by Martin Pool
todo
134
* ``bzr status DIR`` or ``bzr diff DIR`` should report on all changes
135
  under that directory.
136
282 by Martin Pool
- move all TODO items into ./TODO
137
* Fix up Inventory objects to represent root object as an entry.
138
552 by Martin Pool
- update todo list
139
* Don't convert entire entry from ElementTree to an object when it is
140
  read in, but rather wait until the program actually wants to know
141
  about that node.
282 by Martin Pool
- move all TODO items into ./TODO
142
143
* Extract changes from one revision to the next to a text form
144
  suitable for transmission over email.
145
146
* More test cases.
147
491 by Martin Pool
- Selective commit!
148
  - Selected-file commit
149
150
  - Impossible selected-file commit: adding things in non-versioned
151
    directories, crossing renames, etc.
152
282 by Martin Pool
- move all TODO items into ./TODO
153
* Write a reproducible benchmark, perhaps importing various kernel versions.
154
155
* Directly import diffs!  It seems a bit redundant to need to rescan
156
  the directory to work out what files diff added/deleted/changed when
157
  all the information is there in the diff in the first place.
158
  Getting the exact behaviour for added/deleted subdirectories etc
159
  might be hard.
160
161
  At the very least we could run diffstat over the diff, or perhaps
162
  read the status output from patch.  Just knowing which files might
163
  be modified would be enough to guide the add and commit.
164
  
165
  Given this we might be able to import patches at 1/second or better.
166
167
* Get branch over http.
168
169
* Pull pure updates over http.
170
171
* revfile compression.
172
173
* Split inventory into per-directory files.
174
284 by Martin Pool
- more TODO items
175
* Fix ignore file parsing:
176
177
  - fnmatch is not the same as unix patterns
178
179
  - perhaps add extended globs from rsh/rsync
180
181
  - perhaps a pattern that matches only directories or non-directories
182
312 by Martin Pool
todo
183
* Consider using Python logging library as well as/instead of
184
  bzrlib.trace.
185
334 by Martin Pool
doc
186
* Commands should give some progress indication by default.
187
188
  - But quieten this with ``--silent``.
189
312 by Martin Pool
todo
190
* Change to using gettext message localization.
282 by Martin Pool
- move all TODO items into ./TODO
191
315 by Martin Pool
todo
192
* Make a clearer separation between internal and external bzrlib
193
  interfaces.  Make internal interfaces use protected names.  Write at
194
  least some documentation for those APIs, probably as docstrings.
195
196
  Consider using ZopeInterface definitions for the external interface;
197
  I think these are already used in PyBaz.  They allow automatic
198
  checking of the interface but may be unfamiliar to general Python
321 by Martin Pool
doc: revfile storage and related things
199
  developers, so I'm not really keen.
315 by Martin Pool
todo
200
201
* Commands to dump out all command help into a manpage or HTML file or
202
  whatever.
203
326 by Martin Pool
todo
204
* Handle symlinks in the working directory; at the very least it
205
  should be possible for them to be present and ignored/unknown
206
  without causing assertion failures. 
207
208
  Eventually symlinks should be versioned.
209
329 by Martin Pool
- refactor command functions into command classes
210
* Allow init in a subdirectory to create a nested repository, but only
211
  if the subdirectory is not already versioned.   Perhaps also require
212
  a ``--nested`` to protect against confusion.
213
214
* Branch names? 
215
339 by Martin Pool
many more diffs
216
* More test framework:
217
218
  - Class that describes the state of a working tree so we can just
219
    assert it's equal.
220
342 by Martin Pool
todo
221
* There are too many methods on Branch() that really manipulate the
346 by Martin Pool
todo
222
  WorkingTree.  They should be moved across.  
223
224
  Also there are some methods which are duplicated on Tree and
225
  Inventory objects, and it should be made more clear which ones are
226
  proxies and which ones behave differently, and how.
342 by Martin Pool
todo
227
361 by Martin Pool
todo
228
* Try using XSLT to add some formatting to REST-generated HTML.  Or
229
  maybe write a small Python program that specifies a header and foot
230
  for the pages and calls into the docutils libraries.
231
366 by Martin Pool
todo
232
* --format=xml for log, status and other commands.
329 by Martin Pool
- refactor command functions into command classes
233
370 by Martin Pool
todo
234
* Attempting to explicitly add a file that's already added should give
235
  a warning; however there should be no warning for directories (since
236
  we scan for new children) or files encountered in a directory that's
237
  being scanned.
329 by Martin Pool
- refactor command functions into command classes
238
377 by Martin Pool
- todo notes on inventory
239
* Better handling of possible collisions on case-losing filesystems;
240
  make sure a single file does not get added twice under different
241
  names.
242
243
* Clean up XML inventory:
244
245
  - Use nesting rather than parent_id pointers.
246
247
  - Hold the ElementTree in memory in the Inventory object and work
248
    directly on that, rather than converting into Python objects every
453 by Martin Pool
- Split WorkingTree into its own file
249
    time it is read in.  Probably still exposoe it through some kind of
377 by Martin Pool
- todo notes on inventory
250
    object interface though, but perhaps that should just be a proxy
251
    for the elements.
252
253
  - Less special cases for the root directory. 
254
388 by Martin Pool
doc
255
* Perhaps inventories should remember the revision in which each file
256
  was last changed, as well as its current state?  This is a bit
257
  redundant but might often be interested to know.
258
442 by Martin Pool
todo
259
* stat cache should perhaps only stat files as necessary, rather than
260
  doing them all up-front.  On the other hand, that disallows the
261
  opimization of stating them in inode order.
262
451 by Martin Pool
todo
263
* It'd be nice to pipeline multiple HTTP requests.  Often we can
264
  predict what will be wanted in future: all revisions, or all texts
265
  in a particular revision, etc.  
266
267
  urlgrabber's docs say they are working on batched downloads; we
268
  could perhaps ride on that or just create a background thread (ew).
269
459 by Martin Pool
- diff now uses stat-cache -- much faster
270
* Paranoid mode where we never trust SHA-1 matches.
271
502 by Martin Pool
todo
272
* Don't commit if there are no changes unless forced.
273
522 by Martin Pool
todo
274
* --dry-run mode for commit?  (Or maybe just run with
275
  check-command=false?)
502 by Martin Pool
todo
276
277
* Generally, be a bit more verbose unless --silent is specified.
278
522 by Martin Pool
todo
279
* Function that finds all changes to files under a given directory;
280
  perhaps log should use this if a directory is given.
281
548 by Martin Pool
- Write statcache using \u style encoding to avoid
282
* XML attributes might have trouble with filenames containing \n and
283
  \r.  Do we really want to support this?  I think perhaps not.
284
574 by Martin Pool
todo
285
* Remember execute bits, so that exports will work OK.
286
579 by Martin Pool
todo
287
* Unify smart_add and plain Branch.add(); perhaps smart_add should
288
  just build a list of files to add and pass that to the regular add
289
  function.
290
604 by Martin Pool
doc
291
* Function to list a directory, saying in which revision each file was
292
  last modified.  Useful for web and gui interfaces, and slow to
293
  compute one file at a time.
294
609 by Martin Pool
- cleanup test code
295
* unittest is standard, but the results are kind of ugly; would be
296
  nice to make it cleaner.
297
627 by Martin Pool
todo
298
* Check locking is correct during merge-related operations.
299
629 by Martin Pool
todo
300
* Perhaps attempts to get locks should timeout after some period of
301
  time, or at least display a progress message.
302
702 by Martin Pool
todo: bzr upgrade
303
* Split out upgrade functionality from check command into a separate
304
  ``bzr upgrade``.
305
738 by Martin Pool
- default plugin dir is ~/.bzr.conf/plugins
306
* Don't pass around command classes but rather pass objects.  This'd
307
  make it cleaner to construct objects wrapping external commands.
308
818 by Martin Pool
- Clear pending-merge list when committing.
309
* Track all merged-in revisions in a versioned add-only metafile.
310
315 by Martin Pool
todo
311
282 by Martin Pool
- move all TODO items into ./TODO
312
Large things
313
------------
314
321 by Martin Pool
doc: revfile storage and related things
315
* Generate annotations from current file relative to previous
316
  annotations.
317
318
  - Is it necessary to store any kind of annotation where data was
319
    deleted?
320
325 by Martin Pool
- more revfile design notes
321
* Update revfile_ format and make it active:
321 by Martin Pool
doc: revfile storage and related things
322
323
  - Texts should be identified by something keyed on the revision, not
324
    an individual text-id.  This is much more useful for annotate I
325
    think; we want to map back to the revision that last changed it.
326
327
  - Access revfile revisions through the Tree/Store classes.
328
329
  - Check them from check commands.
330
331
  - Store annotations.
332
325 by Martin Pool
- more revfile design notes
333
.. _revfile: revfile.html
334
294 by Martin Pool
todo
335
* Hooks for pre-commit, post-commit, etc.
336
337
  Consider the security implications; probably should not enable hooks
338
  for remotely-fetched branches by default.
339
340
* Pre-commit check.  If this hook is defined, it needs to be handled
341
  specially: create a temporary directory containing the tree as it
342
  will be after the commit.  This means excluding any ignored/unknown
343
  files, and respecting selective commits.  Run the pre-commit check
344
  (e.g. compile and run test suite) in there.
345
519 by Martin Pool
- todo: discussion of pre-commit tests
346
  Possibly this should be done by splitting the commit function into
347
  several parts (under a single interface).  It is already rather
348
  large.  Decomposition:
349
350
   - find tree modifications and prepare in-memory inventory
351
352
   - export that inventory to a temporary directory
353
354
   - run the test in that temporary directory
355
356
   - if that succeeded, continue to actually finish the commit
357
358
  What should be done with the text of modified files while this is
359
  underway?  I don't think we want to count on holding them in memory
360
  and we can't trust the working files to stay in one place so I
361
  suppose we need to move them into the text store, or otherwise into
362
  a temporary directory.
363
364
  If the commit does not actually complete, we would rather the
365
  content was not left behind in the stores.  
366
282 by Martin Pool
- move all TODO items into ./TODO
367
* Web interface
368
369
* GUI (maybe in Python GTK+?)
370
284 by Martin Pool
- more TODO items
371
* C library interface
321 by Martin Pool
doc: revfile storage and related things
372
373
* Expansion of $Id$ keywords within working files.  Perhaps do this in
374
  exports first as a simpler case because then we don't need to deal
375
  with removing the tags on the way back in.
376
329 by Martin Pool
- refactor command functions into command classes
377
* ``bzr find``