Introduce an easier to follow "next" branch.
[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 What to expect from now on
10 ==========================
11
12 This is written in a form of to-do list for me, so if I say
13 "accept patch", it means I do not currently plan to do that
14 myself.  People interested in seeing it materialize please take
15 a hint.  Also whatever I marked "Perhaps" do not have to happen
16 if ever -- only if somebody cares enough and submits a clean
17 patch, perhaps ;-).
18
19
20 Documentation
21 -------------
22
23 * No pending issues at the moment.  "Revamp Tutorial" initiative
24   by Bruce Fields ongoing and things are looking better.
25
26
27 Design issues
28 -------------
29
30 * Rehash "git commit" with various parameters to be more
31   intuitive without breaking traditinal users too much.  We need
32   to phase this in, especially if we are going to change "git
33   commit" to imply the current "git commit -a" behaviour.
34
35 * "intent to add" index entries.
36
37 * Plug-in file-level merges.  On the other hand, we may not even
38   need this; just tell people to run "xxdiff -U" on the working
39   tree files.
40
41 * Doing a merge in a separate directory.
42
43 * Make 'format-patch' take revision limiters similar to
44   rev-list.  For example:
45
46                A                   C
47         ....---x---o---o---x---o---o
48                           /
49                          /
50                         /
51         ....---x---o---o
52                B
53
54   we should be able to format commits 'o', without duplicates,
55   by:
56
57         $ git format-patch ^A ^B C
58
59   Currently the closest approximation is
60
61         $ git format-patch A..C B..C
62
63   which results in the last two commits including C formatted
64   twice.
65
66
67 Technical (heavier)
68 -------------------
69
70 * Libification.  There are many places "run once" mentality is
71   ingrained in the management of basic data structures, which
72   need to be fixed.  [Matthias Urlichs is already working on
73   this: <pan.2005.10.03.20.48.52.132570@smurf.noris.de>]
74
75 * Maybe a pack optimizer.
76
77   Given a set of objects and a set of refs (probably a handful
78   branch heads and point release tags), find a set of packs to
79   allow reasonably minimum download for all of these classes of
80   people: (1) somebody cloning the repository from scratch, (2)
81   somebody who tends to follow the master branch head reasonably
82   closely, (3) somebody who tends to follow only the point
83   releases.
84
85   This needs a matching smart on the dumb protocol downloader.
86
87 * Maybe an Emacs VC backend.
88
89 * Look at libified GNU diff CVS seems to use, or libxdiff.
90   [Daniel has his own diff tool almost ready to start
91   integrating and testing]
92
93
94 Technical (milder)
95 ------------------
96
97 * Subprojects.  I think the "bind commit" approach has been
98   outlined at sufficiently detailed level.  Maybe find time to
99   actually start prototyping it?
100
101   <7vacdzkww3.fsf@assigned-by-dhcp.cox.net>
102
103 * Shallow clones.
104
105 * Mark entries as "assume unchanged" in the index.
106   New option to update-index to set or drop the bit is needed.
107
108   - update-index --no-stat paths...
109   - update-index --with-stat paths...
110
111   Also a config item '[core] trust_stat = false' would enable
112   this automatically:
113
114   - "update-index" with or without --add would mark the path
115     after registering.  Should we make the working tree file
116     read-only at this point?
117
118   - checkout-index -u would mark the path and makes the working
119     tree file read-only.
120
121   Impacts to various commands:
122
123   - update-index --refresh would ignore them.
124
125   - diff-files would say unchanged.
126
127   - diff-index without --cached acts the same way as diff-index
128     --cached.
129
130 * Decide what to do about rebase applied to merged head.  One
131   extreme is to allow rebase if "rev-list ours..theirs" gives
132   anything.  This loosens the current merge-base based approach.
133   The other extreme is to refuse rebase if "rev-list
134   theirs..ours" contains any merge commit, which was discussed
135   on the list.
136
137   <43CC695E.2020506@codeweavers.com>
138
139 * Decide what the right thing to do upon an empty merge commit,
140   when both branches happen to have obtained the same set of
141   changes through different history.  Not recording such keeps
142   the history simpler, and the next merge would soon create a
143   true merge commit anyway, but this does not feel quite right.
144
145   <20060114021800.4688.qmail@web31803.mail.mud.yahoo.com>
146
147 * Perhaps a smarter HTTP anonymous download via CGI.
148
149 * Prepare to enable "always use symbolic refs for HEAD" patch.
150   We need a timeline to force Porcelains to get ready.  All the
151   major ones should be ready now.
152
153 * diff stopping at the first output; qgit wants to know if this
154   tree has any A or D from the other tree and nothing else.
155   Would help internal tree-diff in rev-list as well.
156
157 * daemon --strict-symlink.
158
159 * daemon --no-user-dir, to make ~user still work with
160   --base-path.  They ought to be independent.
161
162 * daemon --base-path does not apply automatically to whitelist
163   somehow feels wrong.  If somebody cares enough, accept
164   patches.
165
166 * Perhaps detect cloning request in upload-pack and cache the
167   result for next cloning request until any of our refs change.
168
169 * Perhaps accept patch to optionally allow '--fuzz' in
170   'git-apply'.  am/applymbox is _not_ the place to do it.
171
172 * Allow 'git apply' to accept GNU diff 2.7 output that forgets
173   to say '\No newline' if both input ends with incomplete
174   lines.
175
176 * Perhaps deal with "Files differ" (binary diff) in non C
177   locales.
178
179 * Maybe grok PGP signed text/plain in applymbox as well.
180
181 * Output full path in the "git-rev-list --objects" output, not
182   just the basename, and see the improved clustering results in
183   better packing [Tried, but did not work out well].
184
185
186 Technical (trivial)
187 -------------------
188
189 * Use parent info in 'diff-tree --stdin'.
190
191 * git-proxy should be spawned with sh -c 'command' $1 $2.
192
193 * test scripts for the relative directory path stuff.
194
195 * In a freshly created empty repository, `git fetch foo:bar`
196   works OK, but `git checkout bar` afterwards does not (missing
197   `.git/HEAD`).
198
199 \f
200 Local Variables:
201 mode: text
202 End: