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