What's cooking (2008/07 #02)
[git/dscho.git] / whats-cooking.txt
blob93ca0b044a100eb55fd8e638b1a05cb8b4286ac5
1 Subject: What's cooking in git.git (Jul 2008, issue #02; Sun, 06)
3 What's cooking in git.git (Jul 2008, issue #02; Sun, 06)
4 --------------------------------------------------------
6 Here are the topics that have been cooking.  Commits prefixed
7 with '-' are only in 'pu' while commits prefixed with '+' are
8 in 'next'.
10 The topics list the commits in reverse chronological order.  The topics
11 meant to be applied to the maintenance series have "maint-" in their
12 names.
14 It already is beginning to become clear what 1.6.0 will look like.  Wha=
15 t's
16 already in 'next' all are well intentioned (I do not guarantee they are
17 already bug-free --- that is what cooking them in 'next' is for) and ar=
19 good set of feature enhancements.  Bigger changes will be:
21  * Port for MinGW.
23  * With the default Makefile settings, most of the programs will be
24    installed outside your $PATH, except for "git", "gitk", "git-gui" an=
26    some server side programs that need to be accessible for technical
27    reasons.  Invoking a git subcommand as "git-xyzzy" from the command
28    line has been deprecated since early 2006 (and officially announced =
30    1.5.4 release notes); use of them from your scripts after adding
31    output from "git --exec-path" to the $PATH will still be supported i=
33    1.6.0, but users are again strongly encouraged to adjust their
34    scripts to use "git xyzzy" form, as we will stop installing
35    "git-xyzzy" hardlinks for built-in commands in later releases.
37  * git-merge will be rewritten in C.
39  * default pack and idx versions will be updated as scheduled for some
40    time ago.
42  * GIT_CONFIG, which was only documented as affecting "git config", but
43    actually affected all git commands, now only affects "git config".
44    GIT_LOCAL_CONFIG, also only documented as affecting "git config" and
45    not different from GIT_CONFIG in a useful way, is removed.
47 ----------------------------------------------------------------
48 [New Topics]
50 * js/maint-daemon-syslog (Thu Jul 3 16:27:24 2008 +0100) 1 commit
51  - [PARKED improvement suggested not rolled in] git daemon: avoid
52    calling syslog() from a signal handler
54 This will eventually appear in 'maint'; currently parked on 'pu', thoug=
57 * jc/report-tracking (Sun Jul 6 02:54:56 2008 -0700) 5 commits
58  - branch -r -v: do not spit out garbage
59  + stat_tracking_info(): clear object flags used during counting
60  + git-branch -v: show the remote tracking statistics
61  + git-status: show the remote tracking statistics
62  + Refactor "tracking statistics" code used by "git checkout"
64 Makes the "your branch is ahead of the tracked one by N commits" logic =
65 and
66 messages available to other commands; status and branch are updated.
68 * sg/stash-k-i (Fri Jun 27 16:37:15 2008 +0200) 1 commit
69  - stash: introduce 'stash save --keep-index' option
71 One weakness of our "partial commit" workflow support used to be that t=
73 user can incrementally build what is to be committed in the index but t=
74 hat
75 state cannot be tested as a whole in the working tree.  This allows you=
76  to
77 temporarily stash the remaining changes in the working tree so that the
78 index state before running "stash save --keep-index" can be seen in the
79 working tree to be tested and then committed.  A recommended workflow t=
81 use after that commit is made needs to be documented (and support needs=
82  to
83 be added if necessary).
85 * tr/add-i-e (Thu Jul 3 00:00:00 2008 +0200) 3 commits
86  + git-add--interactive: manual hunk editing mode
87  + git-add--interactive: remove hunk coalescing
88  + git-add--interactive: replace hunk recounting with apply --recount
90 Adds 'e/dit' action to interactive add command.
92 * am/stash-branch (Thu Jul 3 11:46:05 2008 +0530) 1 commit
93  + Implement "git stash branch <newbranch> <stash>"
95 Creates a new branch out of the stashed state, after returning from the
96 interrupt that forced you to create the stash in the first place.
98 * jc/grafts (Wed Jul 2 17:14:12 2008 -0700) 1 commit
99  - Ignore graft during object transfer [broken wrt shallow clones]
101 Cloning or fetching from a repository from grafts did not send objects
102 that are hidden by grafts, but the commits in the resulting repository =
104 need these to pass fsck.  This fixes object transfer to ignore grafts.
106 Another fix is needed to git-prune so that it ignores grafts but treats
107 commits that are mentioned in grafts as reachable.
109 * jk/pager-config (Thu Jul 3 07:46:57 2008 -0400) 1 commit
110  - Allow per-command pager config
112 ----------------------------------------------------------------
113 [Will merge to master soon]
115 * js/import-zip (Mon Jun 30 19:50:44 2008 +0100) 1 commit
116  + Add another fast-import example, this time for .zip files
118 * js/apply-root (Wed Jul 2 15:28:22 2008 -0700) 2 commits
119  + apply --root: thinkofix.
120  + Teach "git apply" to prepend a prefix with "--root=3D<root>"
122 * db/no-git-config (Mon Jun 30 03:37:47 2008 -0400) 1 commit
123  + Only use GIT_CONFIG in "git config", not other programs
125 * jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits
126  + Make default expiration period of reflog used for stash infinite
127  + Per-ref reflog expiry configuration
129 As 1.6.0 will be a good time to make backward incompatible changes, the
130 tip commit makes the default expiry period of stash 'never', unless you
131 configure them to expire explicitly using gc.refs/stash.* variables.
132 Needs consensus, but I am guessing that enough people would want stash
133 that does not expire.
135 * dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
136  + Eliminate an unnecessary chdir("..")
137  + Add support for GIT_CEILING_DIRECTORIES
138  + Fold test-absolute-path into test-path-utils
139  + Implement normalize_absolute_path
141 This still feels "because we can", not "because we need to", but it cam=
143 from somebody who had the need to, and I do not think it hurts people
144 without the environment variable set.
146 * jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits
147  + rerere.autoupdate
148  + t4200: fix rerere test
149  + rerere: remove dubious "tail_optimization"
150  + git-rerere: detect unparsable conflicts
151  + rerere: rerere_created_at() and has_resolution() abstraction
153 A new configuration will allow paths that have been resolved cleanly by
154 rerere to be updated in the index automatically.
156 To me, this is "because we can", but was something requested by Ingo, s=
158 presumably some people may feel it useful in their workflow.
160 ----------------------------------------------------------------
161 [Actively Cooking]
163 * mv/merge-in-c (Tue Jul 1 04:37:50 2008 +0200) 15 commits
164  - [REJECT -- over-abuse of path-list] Build in merge
165  + Fix t7601-merge-pull-config.sh on AIX
166  + git-commit-tree: make it usable from other builtins
167  + Add new test case to ensure git-merge prepends the custom merge
168    message
169  + Add new test case to ensure git-merge reduces octopus parents when
170    possible
171  + Introduce reduce_heads()
172  + Introduce get_merge_bases_many()
173  + Add new test to ensure git-merge handles more than 25 refs.
174  + Introduce get_octopus_merge_bases() in commit.c
175  + git-fmt-merge-msg: make it usable from other builtins
176  + Move read_cache_unmerged() to read-cache.c
177  + Add new test to ensure git-merge handles pull.twohead and
178    pull.octopus
179  + Move parse-options's skip_prefix() to git-compat-util.h
180  + Move commit_list_count() to commit.c
181  + Move split_cmdline() to alias.c
183 The last one is still not quite there, I am afraid.
185 ----------------------------------------------------------------
186 [Graduated to "master"]
188 * j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits
189  + compat/pread.c: Add a forward declaration to fix a warning
190  + Windows: Fix ntohl() related warnings about printf formatting
191  + Windows: TMP and TEMP environment variables specify a temporary
192    directory.
193  + Windows: Make 'git help -a' work.
194  + Windows: Work around an oddity when a pipe with no reader is
195    written to.
196  + Windows: Make the pager work.
197  + When installing, be prepared that template_dir may be relative.
198  + Windows: Use a relative default template_dir and ETC_GITCONFIG
199  + Windows: Compute the fallback for exec_path from the program
200    invocation.
201  + Turn builtin_exec_path into a function.
202  + Windows: Use a customized struct stat that also has the st_blocks
203    member.
204  + Windows: Add a custom implementation for utime().
205  + Windows: Add a new lstat and fstat implementation based on Win32
206    API.
207  + Windows: Implement a custom spawnve().
208  + Windows: Implement wrappers for gethostbyname(), socket(), and
209    connect().
210  + Windows: Work around incompatible sort and find.
211  + Windows: Implement asynchronous functions as threads.
212  + Windows: Disambiguate DOS style paths from SSH URLs.
213  + Windows: A rudimentary poll() emulation.
214  + Windows: Implement start_command().
215  + Windows: A pipe() replacement whose ends are not inherited to
216    children.
217  + Windows: Wrap execve so that shell scripts can be invoked.
218  + Windows: Implement setitimer() and sigaction().
219  + Windows: Fix PRIuMAX definition.
220  + Windows: Implement gettimeofday().
221  + Make my_mktime() public and rename it to tm_to_time_t()
222  + Windows: Work around misbehaved rename().
223  + Windows: always chmod(, 0666) before unlink().
224  + Windows: A minimal implemention of getpwuid().
225  + Windows: Implement a wrapper of the open() function.
226  + Windows: Strip ".exe" from the program name.
227  + Windows: Handle absolute paths in
228    safe_create_leading_directories().
229  + Windows: Treat Windows style path names.
230  + setup.c: Prepare for Windows directory separators.
231  + Windows: Use the Windows style PATH separator ';'.
232  + Add target architecture MinGW.
233  + Compile some programs only conditionally.
234  + Add compat/regex.[ch] and compat/fnmatch.[ch].
236 ----------------------------------------------------------------
237 [On Hold]
239 * sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
240  + merge: remove deprecated summary and diffstat options and config
241    variables
243 This was previously in "will be in master soon" category, but it turns =
245 that the synonyms to the ones this one deletes are fairly new invention
246 that happend in 1.5.6 timeframe, and we cannot do this just yet.  Perha=
248 in 1.7.0.
250 * jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits
251  + Revert "Make clients ask for "git program" over ssh and local
252    transport"
253  + Make clients ask for "git program" over ssh and local transport
255 This is the "botched" one.  Will be resurrected during 1.7.0 or 1.8.0
256 timeframe.
258 * jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
259  - diff: enable "too large a rename" warning when -M/-C is explicitly
260    asked for
262 This would be the right thing to do for command line use, but gitk will=
263  be
264 hit due to tcl/tk's limitation, so I am holding this back for now.
266 ----------------------------------------------------------------
267 [Stalled/Needs more work]
269 * ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits
270  - Migrate git-blame to parse-option partially.
271  + parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.
272  + parse-opt: fake short strings for callers to believe in.
273  + parse-opt: do not print errors on unknown options, return -2
274    intead.
275  + parse-opt: create parse_options_step.
276  + parse-opt: Export a non NORETURN usage dumper.
277  + parse-opt: have parse_options_{start,end}.
279 I recall Pierre said something about cleaning up the last one when he
280 finds time, but other than that vague recollection, I lost track of thi=
282 series.  I am tempted to fork a few topics off of the pen=C3=BAltimo on=
283 e to
284 convert a few more commands as examples and merge the result to 'next'.
286 * jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
287  - blame: show "previous" information in --porcelain/--incremental
288    format
289  - git-blame: refactor code to emit "porcelain format" output
290  + git-blame --reverse
291  + builtin-blame.c: allow more than 16 parents
292  + builtin-blame.c: move prepare_final() into a separate function.
293  + rev-list --children
294  + revision traversal: --children option
296 The blame that finds where each line in the original lines moved to.  T=
298 may help a GSoC project that wants to gather statistical overview of th=
300 history.  The final presentation may need tweaking (see the log message=
301  of
302 the commit ""git-blame --reverse" on the series).
304 The tip two commits are for peeling to see what's behind the blamed
305 commit, which we should be able to separate out into an independent top=
307 from the rest.
309 * jc/merge-theirs (Mon Jun 30 22:18:57 2008 -0700) 5 commits
310  + Make "subtree" part more orthogonal to the rest of merge-
311    recursive.
312  + Teach git-pull to pass -X<option> to git-merge
313  + Teach git-merge to pass -X<option> to the backend strategy module
314  + git-merge-recursive-{ours,theirs}
315  + git-merge-file --ours, --theirs
317 Punting a merge by discarding your own work in conflicting parts but st=
319 salvaging the parts that are cleanly automerged.  It is likely that thi=
321 will result in nonsense mishmash, but somehow often people want this, s=
323 here they are.  The interface to the backends is updated so that you ca=
325 say "git merge -Xours -Xsubtree=3Dfoo/bar/baz -s recursive other" now.
327 The -X<option> part may change, Dscho mentions that a single-letter -X
328 that take stuck option is against syntax rules, and I think he's right.
330 This is more "because we can", not "because we need to".