Subject: Re: [RFH] hackday and GSoC topic suggestions

From: Thomas Rast <[email-masked]>
Date: Sat, 08 Feb 2014 20:03:02 +0100

Jeff King <[email-masked]> writes:

> Below is a list of features / bugs that I am taking to the hackday.

I have the list below at

  https://github.com/trast/git/wiki/Todo-items

(started at git-merge last year).  I did a quick triage, but don't take
my word for it.  Perhaps it's not too late for your hackathon yet ;-)

Some items may have been fixed by other people when I wasn't looking, so
first check if the problem still exists.  The ones I knew are done I
moved to the bottom.

Easy:

* Add -p 'e' when it fails to apply should offer an obvious way of
  starting from the original hunk (not the broken one) or both

* filter-branch should apply {tree,index}-filter to HEAD and complain if
  it's not invariant (cf. BFG)

* git-config should follow symlinks when rewriting the file, so as to
  avoid replacing a symlink at ~/.gitconfig with the actual contents

* git-send-email should complain when given an option --cc= (i.e., --cc
  with empty argument) instead of silently not using any address
  there. It's easy to accidentally cause this in combination with
  $()-expanding a script that searches for the address by name when
  there are no matches. Note that the cccmd feature should not error if
  it doesn't come up with anything!

Medium difficulty:  
  
* LC_CTYPE=C to work around an old issue in glibc that has since been
  fixed (ask jrn). We should autodetect if we still need the fix, and
  otherwise avoid it; it causes trouble with localized messages

* rebase -i --exec should be able to work elsewhere so you can continue
  doing useful work

* git-send-email could build smarter reference lists if it had
  strategies to fetch the in-reply-to email. One obvious, and very
  useful for git and linux, strategy to do so would be to append the
  References header of the mail obtained from
  http://mid.gmane.org/$in_reply_to (follow the 403 and then append /raw
  to get the headers).

* git-svn should have a diff subcommand, to match svn's output for
  feeding into tools that need the precise format with 'Index:' lines

* Resurrect the move of config var descriptions onto the separate pages
  for commands

Hard or unknown difficulty:
 
* Add -p 's' followed by 'e' fails to apply even a no-op edit if the
  context is small

* git-bisect appears to test a linear number of merge bases, thus
  ruining its usually log(n) complexity, in cases involving 'git bisect
  good origin/next', 'git bisect bad origin/pu', in git.git

* I have a script git-pie which runs 'perl -i -pe' as follows:

        #!/bin/sh
        
        cmd=$1
        shift
        
        git ls-files -z "$@" |
        xargs -0 perl -i -pe "$cmd"

  The prompt display (__git_ps1) in the prompt immediately after using
  'git pie ...' always shows that there are no uncommitted changes, even
  if that is not correct. Hitting RET again yields a correct status.

Already underway or done (only here so people don't say "but you dropped
this from the wiki list"):

* In-core merge: a clean merge should be able to work fully in memory,
  esp. without any worktree

* For the issue of "what did the evil merge do", should try to flatten
  out the conflicted merge (i.e. mechanically re-merge, and scrap the
  conflicted state in favor of conflict hunks in stage 0) and diff that
  against the merge result. if that works out, store the tree as a note
  somewhere for caching; git-notes should be able to handle that

  * For the last point: need a way of storing trees as
    notes. Technically the notes infrastructure does not require things
    to be blobs, but in practice all the frontends we have error out, or
    do worse things, when handed a tree as a note.

* ./t0000-foo.sh --valgrind should be able to: a) run only a single
  specific test under valgrind, using the normal git for the rest; and
  b) parallelize over (a) so as to speed up a complete ./t0000-foo.sh
  --valgrind run

-- 
Thomas Rast
[email-masked]