resolve cache experiments.
[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 * Take the updated tutorial by Bruce Fields very seriously.  It
24   is a quite good initiative.
25
26
27 Design issues
28 -------------
29
30 * Plug-in file-level merges.  On the other hand, we may not even
31   need this; just tell people to run "xxdiff -U" on the working
32   tree files.
33
34 * Doing a merge in a separate directory.
35
36 * Subprojects.  I think the "bind commit" approach has been
37   outlined at sufficiently detailed level.  Maybe find time to
38   actually start prototyping it?
39
40   <7vacdzkww3.fsf@assigned-by-dhcp.cox.net>
41
42 * Make 'format-patch' take revision limiters similar to
43   rev-list.  For example:
44
45                A                   C
46         ....---x---o---o---x---o---o
47                           /
48                          /
49                         /
50         ....---x---o---o
51                B
52
53   we should be able to format commits 'o', without duplicates,
54   by:
55
56         $ git format-patch ^A ^B C
57
58   Currently the closest approximation is
59
60         $ git format-patch A..C B..C
61
62   which results in the last two commits including C formatted
63   twice.
64
65
66 Technical (heavier)
67 -------------------
68
69 * Libification.  There are many places "run once" mentality is
70   ingrained in the management of basic data structures, which
71   need to be fixed.  [Matthias Urlichs is already working on
72   this: <pan.2005.10.03.20.48.52.132570@smurf.noris.de>]
73
74 * Maybe a pack optimizer.
75
76   Given a set of objects and a set of refs (probably a handful
77   branch heads and point release tags), find a set of packs to
78   allow reasonably minimum download for all of these classes of
79   people: (1) somebody cloning the repository from scratch, (2)
80   somebody who tends to follow the master branch head reasonably
81   closely, (3) somebody who tends to follow only the point
82   releases.
83
84   This needs a matching smart on the dumb protocol downloader.
85
86 * Maybe an Emacs VC backend.
87
88 * Look at libified GNU diff CVS seems to use, or libxdiff.
89   [Daniel has his own diff tool almost ready to start
90   integrating and testing]
91
92
93 Technical (milder)
94 ------------------
95
96 * Decide what to do about rebase applied to merged head.  One
97   extreme is to allow rebase if "rev-list ours..theirs" gives
98   anything.  This loosens the current merge-base based approach.
99   The other extreme is to refuse rebase if "rev-list
100   theirs..ours" contains any merge commit, which was discussed
101   on the list.
102
103   <43CC695E.2020506@codeweavers.com>
104
105 * Decide what the right thing to do upon an empty merge commit,
106   when both branches happen to have obtained the same set of
107   changes through different history.  Not recording such keeps
108   the history simpler, and the next merge would soon create a
109   true merge commit anyway, but does not feel quite right.
110
111   <20060114021800.4688.qmail@web31803.mail.mud.yahoo.com>
112
113 * Perhaps a smarter HTTP anonymous download via CGI.
114
115 * Prepare to enable "always use symbolic refs for HEAD" patch.
116   We need a timeline to force Porcelains to get ready.  All the
117   major ones should be ready now.
118
119 * Prepare to enable "most of the things are installed in
120   GIT_EXEC_PATH not in bindir".  I do not plan to set bindir !=
121   gitexecdir myself in the main Makefile I ship, but distos
122   should be able to choose to do so.
123
124 * Forbid/ignore pack names that do not conform to the convention
125   sha1_pack_name() assumes and reject in check_packed_git_idx()
126   [In "pu"]
127
128 * Any Porcelain-ish we forgot or punted to make usable from
129   subdirectory?  I think the last pass caught everything and
130   what are remaining are whole-tree or whole repository
131   operations.
132
133 * diff stopping at the first output; qgit wants to know if this
134   tree has any A or D from the other tree and nothing else.
135   Would help internal tree-diff in rev-list as well.
136
137 * daemon --strict-symlink.
138
139 * daemon --no-user-dir, to make ~user still work with
140   --base-path.  They ought to be independent.
141
142 * daemon --base-path does not apply automatically to whitelist
143   somehow feels wrong.  If somebody cares enough, accept
144   patches.
145
146 * Perhaps detect cloning request in upload-pack and cache the
147   result for next cloning request until any of our refs change.
148
149 * Perhaps accept patch to optionally allow '--fuzz' in
150   'git-apply'.  am/applymbox is _not_ the place to do it.
151
152 * Allow 'git apply' to accept GNU diff 2.7 output that forgets
153   to say '\No newline' if both input ends with incomplete
154   lines.
155
156 * Perhaps deal with "Files differ" (binary diff) in non C
157   locales.
158
159 * Maybe grok PGP signed text/plain in applymbox as well.
160
161 * Output full path in the "git-rev-list --objects" output, not
162   just the basename, and see the improved clustering results in
163   better packing [Tried, but did not work out well].
164
165
166 Technical (trivial)
167 -------------------
168
169 * s/naked/bare/g.
170
171 * git-proxy should be spawned with sh -c 'command' $1 $2.
172
173 * test scripts for the relative directory path stuff.
174
175 * In a freshly created empty repository, `git fetch foo:bar`
176   works OK, but `git checkout bar` afterwards does not (missing
177   `.git/HEAD`).
178
179 \f
180 Local Variables:
181 mode: text
182 End: