1 To: git@vger.kernel.org
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
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
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
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 --------------------------------------------------
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'.
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
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 --------------------------------------------------
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.
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
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
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}".
256 * jk/makefile (2014-02-05) 16 commits
258 . move LESS/LV pager environment to Makefile
259 . Makefile: teach scripts to include make variables
261 . Makefile: auto-build C strings from make variables
262 . Makefile: drop *_SQ variables
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
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.
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 --------------------------------------------------
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".
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".
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
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
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
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.