339552e5bf0ac76a05e84c08a9892130dedadec7
[git.git] / TODO
1 The GIT To-Do File
2 ==================
3
4   The latest copy of this document is found at 
5
6     http://kernel.org/git/?p=git/git.git;a=blob;hb=todo;f=TODO
7
8
9 Tool Renames Plan
10 =================
11
12  - In 0.99.8, we still install the backward compatible symbolic
13    links in $(bindir).  These will however be removed before 1.0
14    happens.
15
16    git-ssh-push and git-ssh-pull pair is not going away within
17    this timeframe, if ever.  Each of these old-name commands
18    continues to invoke its old-name counterpart on the other
19    end.
20
21
22 What to expect after 0.99.8
23 ===========================
24
25 This is written in a form of to-do list for me, so if I say
26 "accept patch", it means I do not currently plan to do that
27 myself.  People interested in seeing it materialize please take
28 a hint.  Also whatever I marked "Perhaps" do not have to happen
29 if ever -- only if somebody cares enough and submits a clean
30 patch, perhaps ;-).
31
32
33 Documentation
34 -------------
35
36 * Document the ref naming restrictions [DONE].
37
38 * David Ho's report suggests whatchanged documentation should
39   mention -m as "commonly used options".  Steal Linus'
40   response [DONE].
41
42 * Help Jon Loeliger to find place in the documentation to place
43   his drawing.
44
45 * Accept patches from people who actually have done CVS
46   migration and update the cvs-migration documentation.
47   Link the documentation from the main git.txt page.
48
49 * Talk about using rsync just once at the beginning when
50   initializing a remote repository so that local packs do not
51   need to be expanded.  I personally do not think we need tool
52   support for this (but see below about optimized cloning).
53
54 * Maybe update tutorial with a toy project that involves two or
55   three developers..
56
57 * Update tutorial to cover setting up repository hooks to do
58   common tasks.
59
60 * Do we still have missing docs?  If so accept patches to finish
61   them.
62
63 * Accept patches to talk about "Whoops, it broke.  What's
64   next?".
65
66 * Accept patches to make formatted tables in asciidoc to work
67   well in both html and man pages (see git-diff(1)).
68
69
70 Technical (heavier)
71 -------------------
72
73 * We might want to optimize cloning with GIT native transport
74   not to explode the pack, and store it in objects/pack instead.
75   We would need a tool to generate an idx file out of a pack
76   file for this.  Also this itself may turn out to be a bad
77   idea, making the set of packs in repositories everybody has
78   different from each other. [DONE; git-index-pack by Sergey,
79   tweaking clone by me]
80
81 * Git daemon, when deployed at kernel.org, might turn out to be
82   quite a burden, since it needs to generate customized packs
83   every time a new request comes in.  It may be worthwhile to
84   precompute some packs for popular sets of heads downloaders
85   have and serve that, even if that could give more than the
86   client asks for in some cases.  We will know about this soon
87   enough [Deployed and fixes and enhancement continuing].
88
89 * Libification.  There are many places "run once" mentality is
90   ingrained in the management of basic data structures, which
91   need to be fixed.  [Matthias Urlichs is already working on
92   this: <pan.2005.10.03.20.48.52.132570@smurf.noris.de>; Post
93   1.0].
94
95 * Maybe a pack optimizer.
96
97   Given a set of objects and a set of refs (probably a handful
98   branch heads and point release tags), find a set of packs to
99   allow reasonably minimum download for all of these classes of
100   people: (1) somebody cloning the repository from scratch, (2)
101   somebody who tends to follow the master branch head reasonably
102   closely, (3) somebody who tends to follow only the point
103   releases.
104
105 * Maybe an Emacs VC backend.
106
107 * 'git split-projects'?  This requires updated 'git-rev-list' to
108   skip irrelevant commits.
109   Message-ID: <Pine.LNX.4.63.0509221617300.23242@iabervon.org>
110
111 * Look at libified GNU diff CVS seems to use, or libxdiff.
112   [Daniel has his own diff tool almost ready to start
113   integrating and testing; Post 1.0]
114
115 * Accept patches to fetch multiple objects by HTTP in parallel.
116   [DONE]
117
118 * Plug-in file-level merges [Post 1.0].
119
120 * Per-repository configuration mechanism [DONE by Linus].
121
122
123 Technical (milder)
124 ------------------
125
126 * Merlyn reports trouble with http fetch.
127
128 * Maybe look at Cogito and see if I can help Pasky to adjust to
129   the later core features?  Zack Brown's "cg-seek leaving empty
130   directories" problem is a good example of this.
131
132 * Perhaps detect cloning request in upload-pack and cache the
133   result for next cloning request until any of our refs change.
134
135 * Perhaps accept more "want"s in upload-pack and do something
136   intelligent about it.
137
138 * Perhaps send less "want"s from fetch-pack [DONE by JS].
139
140 * Look at svn importer Smurf has.  There is a small cvsimport
141   update in his tree as well [DONE].
142
143 * Decide the notation of "peeling the onion" operator, and
144   implement it in sha1_name.c.  Perhaps postfix "^{}" to mean
145   "peel and expect anything", "^{blob}" to mean "peel and barf
146   unless blob".  The current "^0" becomes shorthand for
147   "^{commit}". [DONE]
148
149 * Quote the URL so that libcurl's metecharacter mechanism would
150   not kick in [DONE].
151
152 * Review the Makefile variables and exporting rules for them,
153   while looking at prefix passing by Kai Ruemmler [DONE].
154
155 * Review the 'sparse object database' change by Linus and move
156   the first phase of it to the "master" branch [DONE].
157
158 * Decide on mmap().  I am inclined to just stick to mmap
159   replacement by Johannes Schindelin and do nothing else right
160   now, except perhaps drop the writing-back support [DONE].
161
162 * Revisit Santi's patch to move commit temorary files out of the
163   working tree toplevel [DONE].
164
165 * More generally, review the use of temporary files again.
166   Assuming writable $GIT_DIR is more acceptable, but the
167   working tree toplevel may not be in a rare usage pattern.
168
169 * Encourage concrete proposals to commit log message templates
170   we discussed some time ago.
171
172 * Accept patches to cause "read-tree -u" delete a directory when
173   it makes it empty [DONE].
174
175 * Perhaps accept patches to do undo/redo.
176
177 * Perhaps accept patch to optionally allow '--fuzz' in
178   'git-apply'.
179
180 * Allow 'git apply' to accept GNU diff 2.7 output that forgets
181   to say '\No newline' if both input ends with incomplete
182   lines.
183
184 * What to do with TABs and LFs in pathnames without breaking GNU
185   patch?  [DONE -- go with GNU patch extension proposed by Paul].
186
187 * Adjust apply.c to proposed GNU patch extension that quotes \n
188   and \t in C style, inside "". [DONE]
189
190 * Adjust diff.c to the same. [DONE]
191
192 * Maybe grok PGP signed text/plain in applymbox as well.
193
194 * Perhaps a tool to revert a single file to pre-modification
195   state?  People with BK background know this operation as
196   'clean'.  'git checkout [-f] ent [path...]' was suggested by
197   Matthias Urlichs which sounds a natural extention to what the
198   command currently does [DONE with a prodding by Linus].
199
200 * Enhance "git repack" to not always use --all; this would be
201   handy if the repository contains wagging heads like "pu" in
202   git.git repository.
203
204 * Internally split the project into non-doc and doc parts; add
205   an extra root for the doc part and merge from it; move the
206   internal doc source to a separate repository, like the +Meta
207   repository; experiment if this results in a reasonable
208   workflow, and document it in howto form if it does.
209
210   The point is to make it possible to fork that part off to
211   somebody else; then I do not have to maintain Documentation
212   directory myself anymore, just like I simply slurp the latest
213   gitk from Paul and not worry about it ;-).
214
215 * Make rebase restartable; instead of skipping what cannot be
216   automatically forward ported, leave the conflicts in the work
217   tree, have the user resolve it, and then restart from where it
218   left off [mechanism mostly done].
219
220 * Output full path in the "git-rev-list --objects" output, not
221   just the basename, and see the improved clustering results in
222   better packing [Tried, but did not work out well].
223
224 * Updated git-changes-script Jeff Garzik needs [Inquiry for
225   external spec sent out with a quick hack.  Will know if that
226   is what he needs hopefully soon].
227
228 * An mechanism to ignore filesystem mode bits altogether [DONE].
229
230
231 Technical (trivial)
232 -------------------
233
234 * Peter Hagervall's sparse fix [DONE].
235
236 * Alex Riesen reported that hooks are in effect in tests.
237   Should fix [DONE].
238
239 * Disallow [\001-\040\177] byte values from ref names.  Also we
240   need to disallow ':' (used in refspec), '^' and '~' (postfix
241   "peel the onion" operators), and '..' ("ref1..ref2" notation
242   becomes ambiguous otherwise) [DONE].
243
244 * Update fetch-pack and clone-pack to ignore funny refs from the
245   other end, while making sure peek-remote does not discard them.
246   [DONE]
247
248 * Update upload-pack to send tag^{}.  This would hopefully help
249   Pasky's automated tag tracking, and also Martin's findtags.
250   [DONE]
251
252 * Adjust update-index to quoted --index-info [DONE].
253
254 * Prepare apply.c changes for maint branch (0.99.8e) [READY].
255
256 * Perhaps show ^{commit}, ^{tree} instead of ^{} from ls-remote?
257
258 * Re-adjust maint branch for the above if we did so.
259
260 * short SHA1 naming is not enforcing uniqueness.  Should fix [DONE].
261
262 * 'git repack' can be DOSed.  Should fix [DONE].
263
264 * Stop installing the old-name symlinks [POSTPONED, but before 1.0].
265
266 * 'git merge-projects'?
267
268   Subject: Re: Merges without bases
269   References: <1125004228.4110.20.camel@localhost.localdomain>
270   Date: Thu, 25 Aug 2005 15:26:36 -0700
271   Message-ID: <7vvf1tps9v.fsf@assigned-by-dhcp.cox.net>
272
273 * 'git lost-and-found'?  Link dangling commits found by
274   fsck-objects under $GIT_DIR/refs/lost-found/.  Then
275   show-branch or gitk can be used to find any lost commit. [A
276   feeler patch sent out. Very underwhelming response X-<.]
277
278   Do not name it /lost+found/; that would probably confuse
279   things that mistake it a mount point (not our code but
280   somebody else's).
281
282 * Add simple globbing rules to git-show-branch so that I can
283   say 'git show-branch --heads "ko-*"' (ko-master, ko-pu, and
284   ko-rc are in refs/tags/).
285
286 * We would want test scripts for the relative directory path
287   stuff Linus has been working on.  So far, the following
288   commands should be usable with relative directory paths:
289
290     git-update-index
291     git-ls-files
292     git-diff-files
293     git-diff-index
294     git-diff-tree
295     git-rev-list
296     git-rev-parse
297
298 * In a freashly created empty repository, `git fetch foo:bar`
299   works OK, but `git checkout bar` afterwards does not (missing
300   `.git/HEAD`).
301
302 \f
303 Local Variables:
304 mode: text
305 End: