Updates 2005-09-14 afternoon.
[git.git] / TODO
diff --git a/TODO b/TODO
index 66c4bd7..f8b7e0e 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,10 +1,57 @@
-What to expect after 0.99.5
+What to expect after 0.99.6
 ===========================
 
 This is written in a form of to-do list for me, so if I say
 "accept patch", it means I do not currently plan to do that
 myself.  People interested in seeing it materialize please take
-a hint.
+a hint.  The latest copy of this document is found at 
+
+    http://kernel.org/git/?p=git/git.git;a=blob;hb=todo;f=TODO
+
+Tool Renames Plan
+-----------------
+
+ - All non-binary commands will lose -script suffix in
+   $(bindir).  The source to git-foo will be either git-foo.sh
+   or git-foo.perl in the source tree, and the documentation
+   will be in Documentation/git-foo.txt.
+
+ - The commands whose names have 'cache' to mean 'index file'
+   will get 'cache' in their names replaced with 'index'. For
+   git-fsck-cache and git-convert-cache, 'cache' will be
+   replaced with 'objects'.
+
+ - The commit walkers will have 'pull' in their names replaced
+   with 'fetch'.  'git-ssh-push' will become 'git-ssh-upload'.
+
+ - We continue to follow the convention to name the C source
+   file that contains the main program of 'git-foo' command
+   'foo.c'.  That means we will have 'fsck-objects.c', for
+   example.
+
+ - At this moment, I am not planning to rename the symbols used
+   in programs, nor any library sources.  "cache.h" will stay
+   "cache.h", so does "read-cache.c".  "struct cache_entry"  and
+   "ce_match_stat()" will keep their names.  We _might_ want to
+   rename them in later rounds but not right now.
+
+ - In 0.99.7, all renamed commands will have symbolic links in
+   $(bindir) so that old names continue to work.  These backward
+   compatible symlinks will not be present in documentation,
+   though.  Especially, the main documentation, git(7) will talk
+   about the new names.  Old environment names defined in
+   gitenv() will also be removed in this release.
+
+   Tentatively we aim to do this on Sep 17th.
+
+ - In 0.99.8, we do not install these backward compatible
+   symbolic links in $(bindir) anymore.  The Makefile will have
+   a target to remove old symlinks from $(DESTDIR)$(bindir) you
+   can run manually to help you clean things up.
+
+   The timeframe for this is around Oct 1st, but I could be
+   talked into delaying the symlink removal if Porcelain people
+   find this schedule too tight.
 
 
 Documentation
@@ -14,41 +61,21 @@ Documentation
   migration and update the cvs-migration documentation.
   Link the documentation from the main git.txt page.
 
-* Link howto docs from the git.txt page. [DONE]
-
-* Update the SubmittingPatches document to add MUA specific
-  hints on how to disable unwanted MIME and flowed-text by
-  collecting past list postings [DONE].
-
 * Accept patches from people who were hit by shiny blue bat to
-  update the SubmittingPatches [ONGOING].
+  update the SubmittingPatches.
 
 * Talk about using rsync just once at the beginning when
   initializing a remote repository so that local packs do not
   need to be expanded.  I personally do not think we need tool
   support for this (but see below about optimized cloning).
 
-* Review the existing docs and see if the repository
-  organization needs to be clarified further [DONE].
-
-* Update tutorial to cover shared repository style a bit more
-  [DONE].
-
 * Maybe update tutorial with a toy project that involves two or
   three developers..
 
-* Document the hooks [DONE].
-
 * Update tutorial to cover setting up repository hooks to do
   common tasks.
 
-* Get help to properly use asciidoc in tutorial [Heck, ended up
-  learning it myself, DONE].
-
-* Maybe justify and demonstrate an Octopus in the tutorial
-  [STILL NEEDSWORK].
-
-* Add Octopus to the glossary [Thanks Johannes, DONE].
+* Accept patches to finish missing docs.
 
 
 Technical (heavier)
@@ -57,15 +84,23 @@ Technical (heavier)
 * Tony Luck reported an unfortunate glitch in the 3-way merge.
   Encourage discussions to come up with a not-so-expensive way
   to catch the kind of ambiguities that led to his misery.
-  [Daniel's patch looks quite promising.]
+  [Deathmatch between Daniel's and Fredrik's ongoing.]
 
 * HPA has two projects, klibc and klibc-kbuild, that have large
   set of overlapping files in different paths (i.e. one has many
   renames from the other).  There currently is no way for git to
   help keep these two trees in sync, merging criss-cross between
   them.  The merge logic should be able to take advantage of
-  rename/copy detection smarts git-diff-* family has [Discussion
-  ongoing].
+  rename/copy detection smarts git-diff-* family has.  Linus,
+  me, and Daniel outlined a smarter merge strategy for this.
+  Try them out.
+
+* To make it easier to experiment with different merge
+  strategies, make git-merge driver that will run merge backends
+  for the best merge [DONE].
+
+* Sort out the mess objects/info/alternates introduces on the
+  client end.  Both rsync and commit walkers are broken.
 
 * We might want to optimize cloning with GIT native transport
   not to explode the pack, and store it in objects/pack instead.
@@ -74,10 +109,7 @@ Technical (heavier)
   idea, making the set of packs in repositories everybody has
   different from each other.
 
-* Maybe a pack optimizer.  I am not convinced that packing all
-  objects into a single pack and removing all the existing panck
-  is the right way to go, since that would work against people
-  who already have those packs.
+* Maybe a pack optimizer.
 
 * Maybe an Emacs VC backend.
 
@@ -85,42 +117,38 @@ Technical (heavier)
 Technical (milder)
 ------------------
 
-* When the branch head pointed by $GIT_DIR/HEAD changes while
-  the index file and working tree are looking the other way
-  (e.g. somebody pushed into your repository, or you ran "git
-  fetch" to update the ref your working tree is on), "git
-  checkout" without -f gets confused.  Figure out a good way to
-  handle this. [DONE]
+* Define semantics for relative pathnames in objects/info/alternates.
+  Either relative to 'objects', or relative to the top of project tree
+  ;the latter is consistent with GIT_ALTERNATE_OBJECT_DIRECTORIES.
+  Perhaps would end up doing the former because we would want to be
+  consistent between a naked repository and a repository with working
+  tree [DONE].
 
-* We still have the same issue with "git fetch".  Fetching into
-  the branch one is on _may_ need to do the same thing as
-  fetching into anonymous head and then do the resolve.  At
-  least it needs a warning. [DONE]
-
-* "git commit -m" should work for initial commits and perhaps
-  merge commits as well.  Warning about merge is still a good
-  thing to do, while -m is useful in scripted non-interactive
-  use, so we need to be careful. [DONE]
+* Tool renames.  Give fixup patch for at least Cogito and StGIT
+  [DONE].
 
-* Encourage concrete proposals to commit log message templates
-  we discussed some time ago.
+* Have Daniel's read-tree graduate from "pu" after plugging
+  leaks [DONE].
 
-* Test apply.c patches from Robert Fitzsmons and have them
-  graduate to "master" branch [IN PROGRESS].
+* Implement a merge backend using Daniel's read-tree [DONE].
 
-* Test read-tree reorganization patches from Daniel and have
-  them graduate to "master" branch [TESTED].
+* Rename 'git-merge-resolve' to 'git-merge-stupid' and
+  'git-merge-multibase' to 'git-merge-resolve'; the former is
+  for historical curiosity and comparison purposes only and not
+  to be used in real applications so remove it from the default
+  strategies list [DONE].
 
-* Bug Ryan and work with him to update send-email easier to use.
-  [Ryan's patch pushed into "master".  Will see how well it is
-  accepted.]
+* Accept Fredrik merge after renaming it (I want to name the
+  driver 'git merge').  Suggest where to place *.py stuff --
+  probably in $(share)/git-core/ and add Makefile entry for
+  installation [DONE].
 
-* Look at portability fixes from Jason Riedy
+* Encourage concrete proposals to commit log message templates
+  we discussed some time ago.
 
-    http://www.cs.berkeley.edu/~ejr/gits/git.git#portable 
+* Bug Martin for archimport script documentation [DONE].
 
-  [Applied.  Burned by one of them and backed out, but otherwise
-  looks OK.]
+* More portability [IN PROGRESS].
 
 * Accept patches to cause "read-tree -u" delete a directory when
   it makes it empty.
@@ -130,8 +158,8 @@ Technical (milder)
 
 * Perhaps accept patches to do undo/redo.
 
-* MIMEified applymbox to grok B and Q encodings in headers and
-  turn them into UTF-8; unwrap QP; explode multipart. [DONE]
+* Perhaps accept patch to optionally allow '--fuzz' in
+  'git-apply'.
 
 * Maybe grok PGP signed text/plain in applymbox as well.
 
@@ -141,79 +169,73 @@ Technical (milder)
   the command be called?  git-revert is taken so is
   git-checkout.
 
-* "git cherry-pick" that applies the patch an existing commit
-  introduces in its ancestry chain, possibly using the 3-way
-  merge machinery. [DONE]
-
-* Update rebase using the cherry-pick command. [DONE]
-
-* Redo "git revert" using 3-way merge machinery. [DONE]
-
 * A tool to detect, show and prune already merged topic
   branches.
 
-* Set up an automated documentation rebuilding procedure at
-  kernel.org, using update hook mechanism. [DONE]
+* "Lost and Found"; link dangling commits found by fsck-objects
+  under $GIT_DIR/refs/lost-found/.  Then show-branch or gitk can
+  be used to find any lost commit.
 
-* Describe automated documentation rebuilding in a howto form
-  [DONE].
+  Do not name it /lost+found/; that would probably confuse
+  things that mistake it a mount point (not our code but
+  somebody else's).
 
 * Enhance "git repack" to not always use --all; this would be
   handy if the repository contains wagging heads like "pu" in
   git.git repository.
 
-* Accept and apply "git repack --all" patch, except the part
-  that removes the existing packs. [DONE]
-
 * Internally split the project into non-doc and doc parts; add
   an extra root for the doc part and merge from it; move the
   internal doc source to a separate repository, like the +Meta
   repository; experiment if this results in a reasonable
   workflow, and document it in howto form if it does.
 
-* Add names to all nodes in show-branch [DONE].
-
 * Option to limit rename detection for more than N paths.
 
-* Tool renames. [Discussion almost concluded, scheduled to
-  happen 0.99.7 with backward compatibility links, removing them
-  in 0.99.8.]
+* Marking copy seems to be broken when A,B => B,C rename
+  happens; we incorrectly say B stays, which makes the new B
+  copy of old A, not rename [DONE].
+
+* Make rebase restartable; instead of skipping what cannot be
+  automatically forward ported, leave the conflicts in the work
+  tree, have the user resolve it, and then restart from where it
+  left off.
+
+* Output full path in the "git-rev-list --objects" output, not
+  just the basename, and see the improved clustering results in
+  better packing [Tried, but did not work out well].
 
 
 Technical (trivial)
 -------------------
 
-* Look at and merge Debian fixes from Tommi [Done].
+* Deal with CDPATH [DONE].
 
-* Perhaps "git branch -d" to delete a branch.
+* Teach 'git format-patch' about 'git cherry' [DONE].
 
-* Remove "git clone-dumb-http" [DONE].
+* Make 'git bisect' easier to use by logging the earlier
+  good/bad choices and make it replayable [DONE].
+
+* Perhaps "git branch -d" to delete a branch.  We probably need
+  some way to say "delete this branch because everything in this
+  should be merged in the master branch" and refuse the removal
+  if it is not true.
 
 * We would want test scripts for the relative directory path
   stuff Linus has been working on.  So far, the following
   commands should be usable with relative directory paths:
 
-    update-cache
-    ls-files
-    diff-files
-    diff-cache
-    diff-tree
-    rev-list
-    rev-parse
-
-
-Initial repository Gotchas
---------------------------
-
-* `git fetch foo:bar` works OK, but `git checkout bar`
-  afterwards does not (missing `.git/HEAD`).
-  
-* `git commit -s` did not add signoff for initial commit [DONE].
-
-* `git status` does not work well when missing `.git/HEAD` [DONE].
-
-* `git log` either; git-log-script uses die which does not exist
-  [DONE].
+    git-update-index
+    git-ls-files
+    git-diff-files
+    git-diff-index
+    git-diff-tree
+    git-rev-list
+    git-rev-parse
+
+* In a freashly created empty repository, `git fetch foo:bar`
+  works OK, but `git checkout bar` afterwards does not (missing
+  `.git/HEAD`).
 
 \f
 Local Variables: