What's cooking (2014/09 #09)
[alt-git.git] / whats-cooking.txt
blobd8bb6113780bcae2bdc68505798d6b2cec39e1ad
1 To: git@vger.kernel.org
2 Bcc: lwn@lwn.net
3 Subject: What's cooking in git.git (Sep 2014, #09; Tue, 30)
4 X-master-at: 565301e41670825ceedf75220f2918ae76831240
5 X-next-at: b253abbe256c44261d5bb1dbfb99a834c9987b3e
7 What's cooking in git.git (Sep 2014, #09; Tue, 30)
8 --------------------------------------------------
10 Here are the topics that have been cooking.  Commits prefixed with
11 '-' are only in 'pu' (proposed updates) while commits prefixed with
12 '+' are in 'next'.
14 Many fixes on the 'master' has been merged down to 'maint' and the
15 tip of the latter is at v2.1.2 now.  Among the topics that have been
16 cooking in 'next', easier ones have all graduated to 'master'.
18 During the remainder of this cycle, I would like to see these topics
19 to be in 'master' by the end of the 8th week in late October:
21  - ref transaction updates by Ronnie and Jonathan
22  - lockfile updates by Michael
23  - replacement for contrib/workdir by Duy
25 All of them are of rather nontrivial size, and would need to be in
26 'next' for at least a few weeks, which would mean they must be in a
27 good enough shape to go incremental by mid October.  I suspect that
28 we might be cutting it a bit too close for some of them but we'll
29 see.
31     Side note: I am not saying that I will ignore other topics; I am
32     just saying that I care about these three topics because their
33     changes have large impact on the current codebase, and they have
34     big positive impact on the future when done right.  We want to
35     see atomic updates to multiple refs.  We want to see our locks
36     behave sensibly.  We want to see safer way to work with multiple
37     working trees checked out of a single repository.
39     Other topics in flight are of smaller impact that I would not
40     worry too much about and tend to require less brainpower to
41     judge if the design is good, and I'd be happy to see them go
42     through the usual 'pu' to 'next' to 'master' with their own
43     pace, either by the end of this cycle, extending into the next
44     cycle---in that sense I do not care too much about them to
45     single any out.
47 You can find the changes described here in the integration branches
48 of the repositories listed at
50     http://git-blame.blogspot.com/p/git-public-repositories.html
52 --------------------------------------------------
53 [New Topics]
55 * dt/cache-tree-repair (2014-09-30) 1 commit
56  - t0090: avoid passing empty string to printf %d
58  This fixes a topic that has graduated to 'master'.
59  Will merge to 'next'.
61 --------------------------------------------------
62 [Graduated to "master"]
64 * jc/test-lazy-prereq (2014-06-13) 1 commit
65   (merged to 'next' on 2014-09-25 at ed479f3)
66  + tests: drop GIT_*_TIMING_TESTS environment variable support
68  Test-script clean-up.
71 * jt/itimer-autoconf (2014-08-29) 3 commits
72   (merged to 'next' on 2014-09-25 at efd65ba)
73  + autoconf: check for setitimer()
74  + autoconf: check for struct itimerval
75  + git-compat-util.h: add missing semicolon after struct itimerval
76  (this branch is used by jt/timer-settime.)
78  setitmer(2) and related API elements can be configured from
79  Makefile but autoconf did not know about it.
82 * pr/use-default-sigpipe-setting (2014-09-22) 2 commits
83   (merged to 'next' on 2014-09-24 at 2d678ed)
84  + mingw.h: add dummy functions for sigset_t operations
85  + unblock and unignore SIGPIPE
87  We used to get confused when a process called us with SIGPIPE
88  ignored; we do want to die with SIGPIPE when the output is not
89  read by default, and do ignore the signal when appropriate.
92 * sb/merge-recursive-copy-paste-fix (2014-09-23) 2 commits
93   (merged to 'next' on 2014-09-24 at b8dfbef)
94  + merge-recursive: remove stale commented debugging code
95  + merge-recursive: fix copy-paste mistake
97  "git merge-recursive" had a small bug that could have made it
98  mishandle "one side deleted, the other side did not touch it" in a
99  rare corner case, where the other side actually did touch to cause
100  the blob object names to be different but both blobs before and
101  after the change normalize to the same (e.g. correcting mistake to
102  check in a blob with CRLF line endings by replacing it with another
103  blob that records the same contents with LF line endings).
105 --------------------------------------------------
106 [Stalled]
108 * rs/ref-transaction (2014-09-12) 20 commits
109  . remote rm/prune: print a message when writing packed-refs fails
110  . ref_transaction_commit: bail out on failure to remove a ref
111  . lockfile: remove unable_to_lock_error
112  . refs.c: do not permit err == NULL
113  . for-each-ref.c: improve message before aborting on broken ref
114  . refs.c: fix handling of badly named refs
115  . branch -d: avoid repeated symref resolution
116  . refs.c: change resolve_ref_unsafe reading argument to be a flags field
117  . refs.c: make write_ref_sha1 static
118  . fetch.c: change s_update_ref to use a ref transaction
119  . refs.c: ref_transaction_commit: distinguish name conflicts from other errors
120  . refs.c: pass a skip list to name_conflict_fn
121  . refs.c: call lock_ref_sha1_basic directly from commit
122  . refs.c: move the check for valid refname to lock_ref_sha1_basic
123  . rename_ref: don't ask read_ref_full where the ref came from
124  . refs.c: pass the ref log message to _create/delete/update instead of _commit
125  . refs.c: add an err argument to delete_ref_loose
126  . wrapper.c: add a new function unlink_or_msg
127  . wrapper.c: remove/unlink_or_warn: simplify, treat ENOENT as success
128  . mv test: recreate mod/ directory instead of relying on stale copy
130  Rerolled and was asked to wait.  Seems to break HEAD reflog
131  upon "checkout HEAD^0".
133  Expecting another reroll.
136 * tr/remerge-diff (2014-09-08) 8 commits
137  - log --remerge-diff: show what the conflict resolution changed
138  - name-hash: allow dir hashing even when !ignore_case
139  - merge-recursive: allow storing conflict hunks in index
140  - merge_diff_mode: fold all merge diff variants into an enum
141  - combine-diff: do not pass revs->dense_combined_merges redundantly
142  - merge-recursive: -Xindex-only to leave worktree unchanged
143  - merge-recursive: internal flag to avoid touching the worktree
144  - merge-recursive: remove dead conditional in update_stages()
146  "log -p" output learns a new way to let users inspect a merge
147  commit by showing the differences between the automerged result
148  with conflicts the person who recorded the merge would have seen
149  and the final conflict resolution that was recorded in the merge.
151  Waiting for a reroll ($gmane/256591).
154 * hv/submodule-config (2014-06-30) 4 commits
155  - do not die on error of parsing fetchrecursesubmodules option
156  - use new config API for worktree configurations of submodules
157  - extract functions for submodule config set and lookup
158  - implement submodule config cache for lookup of submodule names
160  Kicked back to 'pu' per request ($gmane/255610).
163 * jt/timer-settime (2014-08-29) 6 commits
164  - use timer_settime() for new platforms
165  - autoconf: check for timer_settime()
166  - autoconf: check for struct itimerspec
167  - autoconf: check for struct sigevent
168  - autoconf: check for struct timespec
169  - autoconf: check for timer_t
171  Reviewed, discussed and wanting for a reroll.
174 * jk/pack-bitmap (2014-08-04) 1 commit
175  - pack-bitmap: do not use gcc packed attribute
177  Hold, waiting for Karsten's replacement.
180 * cb/mergetool-difftool (2014-07-21) 2 commits
181  - difftool: don't assume that default sh is sane
182  - mergetool: don't require a work tree for --tool-help
184  Update the way the "difftool --help" shows the help message that is
185  shared with the "mergetool" to reduce one shell dependency.
187  Will be rerolled.
190 * rr/mergetool-temporary-filename-tweak (2014-08-21) 1 commit
191  - Allow the user to change the temporary file name for mergetool
193  Needs rerolling (new paragraph in doc seems to be in a wrong place)
196 * jk/tag-contains (2014-06-30) 8 commits
197  . perf: add tests for tag --contains
198  . tag: use commit_contains
199  . commit: provide a fast multi-tip contains function
200  . string-list: add pos to iterator callback
201  . add functions for memory-efficient bitmaps
202  . paint_down_to_common: use prio_queue
203  . tag: factor out decision to stream tags
204  . tag: allow --sort with -n
206  Expecting a reroll.
209 * ab/add-interactive-show-diff-func-name (2014-05-12) 2 commits
210  - SQUASH??? git-add--interactive: Preserve diff heading when splitting hunks
211  - git-add--interactive: Preserve diff heading when splitting hunks
213  Waiting for a reroll.
216 * jn/gitweb-utf8-in-links (2014-05-27) 1 commit
217  - gitweb: Harden UTF-8 handling in generated links
219  $gmane/250758?
222 * rh/prompt-tests (2014-06-05) 11 commits
223  - t9904: new __git_ps1 tests for Zsh
224  - test-lib: make it possible to override how test code is eval'd
225  - lib-prompt-tests.sh: add variable for string that encodes percent in PS1
226  - lib-prompt-tests.sh: put all tests inside a function
227  - t9903: move prompt tests to a new lib-prompt-tests.sh file
228  - t9903: move PS1 color code variable definitions to lib-bash.sh
229  - t9903: include "Bash" in test names via new $shellname var
230  - t9903: run pc mode tests again with PS1 expansion disabled
231  - t9903: move test name prefix to a separate variable
232  - t9903: put the Bash pc mode prompt test cases in a function
233  - t9903: remove Zsh test from the suite of Bash prompt tests
235  Expecting a reroll to limit the damage to test_eval_; also reported
236  to be broken with older zsh that are still in the field ($gmane/251231).
239 * ss/userdiff-update-csharp-java (2014-06-02) 2 commits
240  - userdiff: support Java try keyword
241  - userdiff: support C# async methods and correct C# keywords
243  Reviews sent; waiting for a response.
246 * bg/rebase-off-of-previous-branch (2014-04-16) 1 commit
247  - git-rebase: print name of rev when using shorthand
249  Teach "git rebase -" to report the concrete name of the branch
250  (i.e. the previous one).
252  But it stops short and does not do the same for "git rebase @{-1}".
253  Expecting a reroll.
256 * jk/makefile (2014-02-05) 16 commits
257  . FIXUP
258  . move LESS/LV pager environment to Makefile
259  . Makefile: teach scripts to include make variables
260  . FIXUP
261  . Makefile: auto-build C strings from make variables
262  . Makefile: drop *_SQ variables
263  . FIXUP
264  . Makefile: add c-quote helper function
265  . Makefile: introduce sq function for shell-quoting
266  . Makefile: always create files via make-var
267  . Makefile: store GIT-* sentinel files in MAKE/
268  . Makefile: prefer printf to echo for GIT-*
269  . Makefile: use tempfile/mv strategy for GIT-*
270  . Makefile: introduce make-var helper function
271  . Makefile: fix git-instaweb dependency on gitweb
272  . Makefile: drop USE_GETTEXT_SCHEME from GIT-CFLAGS
274  Simplify the Makefile rules and macros that exist primarily for
275  quoting purposes, and make it easier to robustly express the
276  dependency rules.
278  Expecting a reroll.
281 * rb/merge-prepare-commit-msg-hook (2014-01-10) 4 commits
282  - merge: drop unused arg from abort_commit method signature
283  - merge: make prepare_to_commit responsible for write_merge_state
284  - t7505: ensure cleanup after hook blocks merge
285  - t7505: add missing &&
287  Expose more merge states (e.g. $GIT_DIR/MERGE_MODE) to hooks that
288  run during "git merge".  The log message stresses too much on one
289  hook, prepare-commit-msg, but it would equally apply to other hooks
290  like post-merge, I think.
292  Waiting for a reroll.
295 * jc/graph-post-root-gap (2013-12-30) 3 commits
296  - WIP: document what we want at the end
297  - graph: remove unused code a bit
298  - graph: stuff the current commit into graph->columns[]
300  This was primarily a RFH ($gmane/239580).
303 * tg/perf-lib-test-perf-cleanup (2013-09-19) 2 commits
304  - perf-lib: add test_perf_cleanup target
305  - perf-lib: split starting the test from the execution
307  Add test_perf_cleanup shell function to the perf suite, that allows
308  the script writers to define a test with a clean-up action.
310  Will hold.
313 * jc/show-branch (2014-03-24) 5 commits
314  - show-branch: use commit slab to represent bitflags of arbitrary width
315  - show-branch.c: remove "all_mask"
316  - show-branch.c: abstract out "flags" operation
317  - show-branch.c: lift all_mask/all_revs to a global static
318  - show-branch.c: update comment style
320  Waiting for the final step to lift the hard-limit before sending it out.
322 --------------------------------------------------
323 [Cooking]
325 * bw/use-write-script-in-tests (2014-09-29) 1 commit
326   (merged to 'next' on 2014-09-29 at be4056e)
327  + t/lib-credential: use write_script
329  Will merge to 'master'.
332 * bw/trace-no-inline-getnanotime (2014-09-29) 1 commit
333  - trace.c: do not mark getnanotime() as "inline"
335  No file-scope static variables in an inlined function, please.
338 * po/everyday-doc (2014-09-29) 3 commits
339  - Make 'git help everyday' work
340  - doc: Makefile regularise OBSOLETE_HTML list building
341  - doc: modernise everyday.txt wording and format in man page style
343  Looks ready for 'next' except for minor nits.
346 * jc/push-cert-hmac-optim (2014-09-25) 2 commits
347  - receive-pack: truncate hmac early and convert only necessary bytes
348  - sha1_to_hex: split out "hex-format n bytes" helper and use it
349  (this branch uses jc/push-cert.)
351  This is "we could do this if we wanted to", not "we measured and it
352  improves performance critical codepath".
354  Will perhaps drop.
357 * je/quiltimport-no-fuzz (2014-09-26) 2 commits
358  - git-quiltimport: flip the default not to allow fuzz
359  - git-quiltimport.sh: allow declining fuzz with --exact option
361  "quiltimport" drove "git apply" always with -C1 option to reduce
362  context of the patch in order to give more chance to somewhat stale
363  patches to apply.  Add an "--exact" option to disable, and also
364  "-C$n" option to customize this behaviour.  The top patch
365  optionally flips the default to "--exact".
367  Waiting for an Ack.
370 * nd/archive-pathspec (2014-09-22) 1 commit
371   (merged to 'next' on 2014-09-25 at 8806f93)
372  + archive: support filtering paths with glob
374  "git archive" learned to filter what gets archived with pathspec.
376  Will merge to 'master'.
379 * so/rebase-doc-fork-point (2014-09-29) 1 commit
380  - Documentation/git-rebase.txt: document when --fork-point is auto-enabled
382  Will merge to 'next'.
385 * sk/tag-contains-wo-recursion (2014-09-23) 1 commit
386  - t7004: give the test a bit more stack space
388  Waiting for an Ack ($gmane/257448).
391 * da/include-compat-util-first-in-c (2014-09-15) 4 commits
392  - SQUASH???
393  - check-headers: add header usage checks for .c files
394  - Makefile: add check-headers target
395  - cleanups: ensure that git-compat-util.h is included first
397  So... what is happening to this topic?  I think the bottom one is a
398  reasonable clean-up without too much churn, but I am not sure about
399  the rest.
402 * mh/lockfile (2014-09-26) 38 commits
403  - hold_locked_index(): move from lockfile.c to read-cache.c
404  - hold_lock_file_for_append(): restore errno before returning
405  - get_locked_file_path(): new function
406  - lockfile.c: rename static functions
407  - lockfile: rename LOCK_NODEREF to LOCK_NO_DEREF
408  - commit_lock_file_to(): refactor a helper out of commit_lock_file()
409  - trim_last_path_component(): replace last_path_elm()
410  - resolve_symlink(): take a strbuf parameter
411  - resolve_symlink(): use a strbuf for internal scratch space
412  - lockfile: change lock_file::filename into a strbuf
413  - commit_lock_file(): use a strbuf to manage temporary space
414  - try_merge_strategy(): use a statically-allocated lock_file object
415  - try_merge_strategy(): remove redundant lock_file allocation
416  - struct lock_file: declare some fields volatile
417  - lockfile: avoid transitory invalid states
418  - git_config_set_multivar_in_file(): avoid call to rollback_lock_file()
419  - dump_marks(): remove a redundant call to rollback_lock_file()
420  - api-lockfile: document edge cases
421  - commit_lock_file(): rollback lock file on failure to rename
422  - close_lock_file(): if close fails, roll back
423  - commit_lock_file(): die() if called for unlocked lockfile object
424  - commit_lock_file(): inline temporary variable
425  - remove_lock_file(): call rollback_lock_file()
426  - lock_file(): exit early if lockfile cannot be opened
427  - write_packed_entry_fn(): convert cb_data into a (const int *)
428  - prepare_index(): declare return value to be (const char *)
429  - delete_ref_loose(): don't muck around in the lock_file's filename
430  - cache.h: define constants LOCK_SUFFIX and LOCK_SUFFIX_LEN
431  - lockfile.c: document the various states of lock_file objects
432  - lock_file(): always initialize and register lock_file object
433  - hold_lock_file_for_append(): release lock on errors
434  - lockfile: unlock file if lockfile permissions cannot be adjusted
435  - rollback_lock_file(): set fd to -1
436  - rollback_lock_file(): exit early if lock is not active
437  - rollback_lock_file(): do not clear filename redundantly
438  - close_lock_file(): exit (successfully) if file is already closed
439  - api-lockfile: revise and expand the documentation
440  - unable_to_lock_die(): rename function from unable_to_lock_index_die()
442  Rerolled, reviews in progress.
444  Interacts with jk/write-packed-refs-via-stdio topic that has recently
445  graduated in an unfortunate way.
448 * nd/multiple-work-trees (2014-09-27) 32 commits
449  - t2025: add a test to make sure grafts is working from a linked checkout
450  - checkout: don't require a work tree when checking out into a new one
451  - git_path(): keep "info/sparse-checkout" per work-tree
452  - count-objects: report unused files in $GIT_DIR/worktrees/...
453  - gc: support prune --worktrees
454  - gc: factor out gc.pruneexpire parsing code
455  - gc: style change -- no SP before closing parenthesis
456  - checkout: clean up half-prepared directories in --to mode
457  - checkout: reject if the branch is already checked out elsewhere
458  - prune: strategies for linked checkouts
459  - checkout: support checking out into a new working directory
460  - use new wrapper write_file() for simple file writing
461  - wrapper.c: wrapper to open a file, fprintf then close
462  - setup.c: support multi-checkout repo setup
463  - setup.c: detect $GIT_COMMON_DIR check_repository_format_gently()
464  - setup.c: convert check_repository_format_gently to use strbuf
465  - setup.c: detect $GIT_COMMON_DIR in is_git_directory()
466  - setup.c: convert is_git_directory() to use strbuf
467  - git-stash: avoid hardcoding $GIT_DIR/logs/....
468  - *.sh: avoid hardcoding $GIT_DIR/hooks/...
469  - git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects
470  - $GIT_COMMON_DIR: a new environment variable
471  - commit: use SEQ_DIR instead of hardcoding "sequencer"
472  - fast-import: use git_path() for accessing .git dir instead of get_git_dir()
473  - reflog: avoid constructing .lock path with git_path
474  - *.sh: respect $GIT_INDEX_FILE
475  - git_path(): be aware of file relocation in $GIT_DIR
476  - path.c: group git_path(), git_pathdup() and strbuf_git_path() together
477  - path.c: rename vsnpath() to do_git_path()
478  - git_snpath(): retire and replace with strbuf_git_path()
479  - path.c: make get_pathname() call sites return const char *
480  - path.c: make get_pathname() return strbuf instead of static buffer
482  A replacement for contrib/workdir/git-new-workdir that does not
483  rely on symbolic links and make sharing of objects and refs safer
484  by making the borrowee and borrowers aware of each other.
486  Will merge to 'next'.
489 * cc/interpret-trailers (2014-09-22) 11 commits
490  - Documentation: add documentation for 'git interpret-trailers'
491  - trailer: add tests for commands in config file
492  - trailer: execute command from 'trailer.<name>.command'
493  - trailer: add tests for "git interpret-trailers"
494  - trailer: add interpret-trailers command
495  - trailer: put all the processing together and print
496  - trailer: parse trailers from file or stdin
497  - trailer: process command line trailer arguments
498  - trailer: read and process config information
499  - trailer: process trailers from input message and arguments
500  - trailer: add data structures and basic functions
502  A new filter to programatically edit the tail end of the commit log
503  messages.
505  Discussion on the topic with Michael Tsirkin who wants to utilize
506  this machinery is going on.  Finally a real functionality review
507  that is very much welcomed.
510 * sp/stream-clean-filter (2014-09-22) 7 commits
511   (merged to 'next' on 2014-09-29 at 47fc36d)
512  + sha1_file: don't convert off_t to size_t too early to avoid potential die()
513  + convert: stream from fd to required clean filter to reduce used address space
514  + copy_fd(): do not close the input file descriptor
515  + mmap_limit: introduce GIT_MMAP_LIMIT to allow testing expected mmap size
516  + memory_limit: use git_env_ulong() to parse GIT_ALLOC_LIMIT
517  + config.c: add git_env_ulong() to parse environment variable
518  + convert: drop arguments other than 'path' from would_convert_to_git()
520  When running a required clean filter, we do not have to mmap the
521  original before feeding the filter.  Instead, stream the file
522  contents directly to the filter and process its output.
524  Will merge to 'master'.
527 * jc/push-cert (2014-09-25) 24 commits
528   (merged to 'next' on 2014-09-25 at 3eb1d69)
529  + receive-pack::hmac_sha1(): copy the entire SHA-1 hash out
530   (merged to 'next' on 2014-09-24 at a99f5d8)
531  + signed push: allow stale nonce in stateless mode
532  + signed push: teach smart-HTTP to pass "git push --signed" around
533  + signed push: fortify against replay attacks
534  + signed push: add "pushee" header to push certificate
535  + signed push: remove duplicated protocol info
536  + send-pack: send feature request on push-cert packet
537  + receive-pack: GPG-validate push certificates
538  + push: the beginning of "git push --signed"
539  + pack-protocol doc: typofix for PKT-LINE
540  + gpg-interface: move parse_signature() to where it should be
541  + gpg-interface: move parse_gpg_output() to where it should be
542  + send-pack: clarify that cmds_sent is a boolean
543  + send-pack: refactor inspecting and resetting status and sending commands
544  + send-pack: rename "new_refs" to "need_pack_data"
545  + receive-pack: factor out capability string generation
546  + send-pack: factor out capability string generation
547  + send-pack: always send capabilities
548  + send-pack: refactor decision to send update per ref
549  + send-pack: move REF_STATUS_REJECT_NODELETE logic a bit higher
550  + receive-pack: factor out queueing of command
551  + receive-pack: do not reuse old_sha1[] for other things
552  + receive-pack: parse feature request a bit earlier
553  + receive-pack: do not overallocate command structure
554  (this branch is used by jc/push-cert-hmac-optim.)
556  Allow "git push" request to be signed, so that it can be verified and
557  audited, using the GPG signature of the person who pushed, that the
558  tips of branches at a public repository really point the commits
559  the pusher wanted to, without having to "trust" the server.
561  Will merge to 'master'.
564 * mt/patch-id-stable (2014-06-10) 1 commit
565  - patch-id: change default to stable
567  Teaches "git patch-id" to compute the patch ID that does not change
568  when the files in a single patch is reordered. As this new algorithm
569  is backward incompatible, the last bit to flip it to be the default
570  is left out of 'master' for now.
572  Nobody seems to be jumping up & down requesting this last step,
573  which makes the result somewhat backward incompatible.
574  Will perhaps drop.