Really prepare for 0.99.7
[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  - All non-binary commands will lose -script suffix in
13    $(bindir).  The source to git-foo will be either git-foo.sh
14    or git-foo.perl in the source tree, and the documentation
15    will be in Documentation/git-foo.txt.
16
17  - The commands whose names have 'cache' to mean 'index file'
18    will get 'cache' in their names replaced with 'index'. For
19    git-fsck-cache and git-convert-cache, 'cache' will be
20    replaced with 'objects'.
21
22  - The commit walkers will have 'pull' in their names replaced
23    with 'fetch'.  'git-ssh-push' will become 'git-ssh-upload'.
24
25  - We continue to follow the convention to name the C source
26    file that contains the main program of 'git-foo' command
27    'foo.c'.  That means we will have 'fsck-objects.c', for
28    example.
29
30  - At this moment, I am not planning to rename the symbols used
31    in programs, nor any library sources.  "cache.h" will stay
32    "cache.h", so does "read-cache.c".  "struct cache_entry"  and
33    "ce_match_stat()" will keep their names.  We _might_ want to
34    rename them in later rounds but not right now.
35
36  - In 0.99.7, all renamed commands will have symbolic links in
37    $(bindir) so that old names continue to work.  These backward
38    compatible names will not appear in documentation.  The main
39    documentation, git(7) will talk about the new names but would
40    mention their old names as historical notes.  Old environment
41    names defined in gitenv() will also be removed in this release.
42
43  - In 0.99.8, we do not install these backward compatible
44    symbolic links in $(bindir) anymore.  The Makefile will have
45    a target to remove old symlinks from $(DESTDIR)$(bindir) you
46    can run manually to help you clean things up.
47
48    The timeframe for this is around Oct 1st, but I could be
49    talked into delaying the symlink removal if Porcelain people
50    find this schedule too tight.
51
52
53 What to expect after 0.99.7
54 ===========================
55
56 This is written in a form of to-do list for me, so if I say
57 "accept patch", it means I do not currently plan to do that
58 myself.  People interested in seeing it materialize please take
59 a hint.
60
61
62 Documentation
63 -------------
64
65 * Accept patches from people who actually have done CVS
66   migration and update the cvs-migration documentation.
67   Link the documentation from the main git.txt page.
68
69 * Accept patches from people who were hit by shiny blue bat to
70   update the SubmittingPatches.
71
72 * Talk about using rsync just once at the beginning when
73   initializing a remote repository so that local packs do not
74   need to be expanded.  I personally do not think we need tool
75   support for this (but see below about optimized cloning).
76
77 * Maybe update tutorial with a toy project that involves two or
78   three developers..
79
80 * Update tutorial to cover setting up repository hooks to do
81   common tasks.
82
83 * Accept patches to finish missing docs.
84
85
86 Technical (heavier)
87 -------------------
88
89 * Tony Luck reported an unfortunate glitch in the 3-way merge.
90   Encourage discussions to come up with a not-so-expensive way
91   to catch the kind of ambiguities that led to his misery.
92   [Deathmatch between Daniel's and Fredrik's ongoing.]
93
94 * HPA has two projects, klibc and klibc-kbuild, that have large
95   set of overlapping files in different paths (i.e. one has many
96   renames from the other).  There currently is no way for git to
97   help keep these two trees in sync, merging criss-cross between
98   them.  The merge logic should be able to take advantage of
99   rename/copy detection smarts git-diff-* family has.  Linus,
100   me, and Daniel outlined a smarter merge strategy for this.
101   Try them out.
102
103 * We might want to optimize cloning with GIT native transport
104   not to explode the pack, and store it in objects/pack instead.
105   We would need a tool to generate an idx file out of a pack
106   file for this.  Also this itself may turn out to be a bad
107   idea, making the set of packs in repositories everybody has
108   different from each other.
109
110 * Libification.  There are many places "run once" mentality is
111   ingrained in the management of basic data structures, which
112   need to be fixed.
113
114 * Maybe a pack optimizer.
115
116 * Maybe an Emacs VC backend.
117
118
119 Technical (milder)
120 ------------------
121
122 * The recent commit walker safety patch may be too cautious and
123   appears to take forever when cloning.  This may even be
124   infinitely looping in the code lifted from the old rev-list --
125   needs to be taken a look at [DONE INITIAL CUT].
126
127 * Encourage concrete proposals to commit log message templates
128   we discussed some time ago.
129
130 * Accept patches for more portability.
131
132   * strcasestr() in mailinfo.  We may need compat/strcasestr.c;
133     this is bugging OpenBSD folks.
134
135 * Accept patches to cause "read-tree -u" delete a directory when
136   it makes it empty.
137
138 * Perhaps accept patches to introduce the concept of "patch flow
139   expressed as ref mappings" Josef has been advocating about.
140
141 * Perhaps accept patches to do undo/redo.
142
143 * Perhaps accept patch to optionally allow '--fuzz' in
144   'git-apply'.
145
146 * Allow 'git apply' to accept GNU diff 2.7 output that forgets
147   to say '\No newline' if both input ends with incomplete
148   lines.
149
150 * Maybe grok PGP signed text/plain in applymbox as well.
151
152 * Perhaps a tool to revert a single file to pre-modification
153   state?  git-cat-file blob `git-ls-files | grep foo` >foo or
154   git-cat-file blob `git-ls-tree HEAD foo` >foo?  What should
155   the command be called?  git-revert is taken so is
156   git-checkout.
157
158 * Enhance "git repack" to not always use --all; this would be
159   handy if the repository contains wagging heads like "pu" in
160   git.git repository.
161
162 * Internally split the project into non-doc and doc parts; add
163   an extra root for the doc part and merge from it; move the
164   internal doc source to a separate repository, like the +Meta
165   repository; experiment if this results in a reasonable
166   workflow, and document it in howto form if it does.
167
168 * Make rebase restartable; instead of skipping what cannot be
169   automatically forward ported, leave the conflicts in the work
170   tree, have the user resolve it, and then restart from where it
171   left off.
172
173 * Output full path in the "git-rev-list --objects" output, not
174   just the basename, and see the improved clustering results in
175   better packing [Tried, but did not work out well].
176
177 * Remove obsolete commands [READY].
178
179 * Option to limit rename detection for more than N paths [READY].
180
181 * Option to show only status and name from diff [READY].
182
183
184 Technical (trivial)
185 -------------------
186
187 * 'git add --recursive'?
188
189 * 'git merge-projects'?
190
191 * 'git lost-and-found'?  Link dangling commits found by
192   fsck-objects under $GIT_DIR/refs/lost-found/.  Then
193   show-branch or gitk can be used to find any lost commit. [A
194   feeler patch sent out. Very underwhelming response X-<.]
195
196   Do not name it /lost+found/; that would probably confuse
197   things that mistake it a mount point (not our code but
198   somebody else's).
199
200 * Add simple globbing rules to git-show-branch so that I can
201   say 'git show-branch --heads "ko-*"' (ko-master, ko-pu, and
202   ko-rc are in refs/tags/).
203
204 * We would want test scripts for the relative directory path
205   stuff Linus has been working on.  So far, the following
206   commands should be usable with relative directory paths:
207
208     git-update-index
209     git-ls-files
210     git-diff-files
211     git-diff-index
212     git-diff-tree
213     git-rev-list
214     git-rev-parse
215
216 * In a freashly created empty repository, `git fetch foo:bar`
217   works OK, but `git checkout bar` afterwards does not (missing
218   `.git/HEAD`).
219
220 \f
221 Local Variables:
222 mode: text
223 End: