{"thread":{"id":"42835","subject":"What's cooking in git.git (Jul 2016, #05; Wed, 13)","startedAt":"2016-07-13T16:59:53Z","lastAt":"2016-07-18T16:08:22Z","messageCount":21,"participants":["Junio C Hamano","Stefan Beller","Duy Nguyen","Jeff King","Johannes Schindelin","Lars Schneider","Eric Wong","Eric Sunshine"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"291363","messageId":"xmqqy4551nph.fsf@gitster.mtv.corp.google.com","threadId":"42835","inReplyTo":null,"subject":"What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-07-13T16:56:26Z","receivedAt":"2016-07-13T16:59:53Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Here are the topics that have been cooking.  Commits prefixed with\n'-' are only in 'pu' (proposed updates) while commits prefixed with\n'+' are in 'next'.  The ones marked with '.' do not appear in any of\nthe integration branches, but I am still holding onto them.\n\nIt turns out that v2.9.1 had tests that weren't even meant to pass\non platforms with 32-bit time_t/unsigned long, but did not properly\nexclude them.  A fix nas been prepared and I expect we'll cut v2.9.2\nwith only that change relative to v2.9.1 soonish.\n\nYou can find the changes described here in the integration branches\nof the repositories listed at\n\n    http://git-blame.blogspot.com/p/git-public-repositories.html\n\n--------------------------------------------------\n[New Topics]\n\n* js/t0006-for-v2.9.2 (2016-07-12) 1 commit\n - t0006: skip \"far in the future\" test when unsigned long is not long enough\n\n A test merged to v2.9.1 forgot that the feature it was testing\n would not work on a platform with 32-bit time_t/unsigned long and\n reported breakage.  Skip the tests that cannot run correctly on\n such platforms.\n\n Waiting for an Ack; will fast-track down to 'maint' to cut v2.9.2.\n\n\n* js/am-3-merge-recursive-direct (2016-07-12) 21 commits\n - merge-recursive: flush output buffer even when erroring out\n - merge_trees(): ensure that the output buffer is released after calling it\n - merge-recursive: offer an option to retain the output in 'obuf'\n - merge-recursive: write the commit title in one go\n - merge-recursive: flush output buffer before printing error messages\n - am -3: use merge_recursive() directly again\n - merge-recursive: switch to returning errors instead of dying\n - merge-recursive: handle return values indicating errors\n - merge-recursive: allow write_tree_from_memory() to error out\n - merge-recursive: avoid returning a wholesale struct\n - merge_recursive: abort properly upon errors\n - prepare the builtins for a libified merge_recursive()\n - merge-recursive: clarify code in was_tracked()\n - die(_(\"BUG\")): avoid translating bug messages\n - die(\"bug\"): report bugs consistently\n - t5520: verify that `git pull --rebase` shows the advice when failing\n - Merge branch 'jh/clean-smudge-annex' into HEAD\n - Merge branch 'bc/cocci' into js/am-3-merge-recursive-direct\n - Merge branch 'js/am-call-theirs-theirs-in-fallback-3way' into js/am-3-merge-recursive-direct\n - Merge branch 'cc/apply-am' into js/am-3-merge-recursive-direct\n - Merge branch 'va/i18n-even-more' into js/am-3-merge-recursive-direct\n (this branch uses bc/cocci, cc/apply-am, jh/clean-smudge-annex, js/am-call-theirs-theirs-in-fallback-3way and va/i18n-even-more.)\n\n \"git am -3\" calls \"git merge-recursive\" when it needs to fall back\n to a three-way merge; this call has been turned into an internal\n subroutine call instead of spawning a separate subprocess.\n\n Will need to wait for all the topics this depends on graduate to 'master'.\n\n\n* ls/travis-enable-httpd-tests (2016-07-12) 1 commit\n - travis-ci: enable web server tests t55xx on Linux\n\n Allow http daemon tests in Travis CI tests.\n\n\n* nd/cache-tree-ita (2016-07-12) 4 commits\n - cache-tree: do not generate empty trees as a result of all i-t-a subentries\n - cache-tree.c: fix i-t-a entry skipping directory updates sometimes\n - test-lib.sh: introduce and use $_EMPTY_BLOB\n - test-lib.sh: introduce and use $_EMPTY_TREE\n\n \"git add -N dir/file && git write-tree\" produced an incorrect tree\n when there are other paths in the same directory that sorts after\n \"file\".\n\n Looked mostly OK.  Further review comments are welcome.\n\n\n* nd/pack-ofs-4gb-limit (2016-07-13) 7 commits\n - fsck: use streaming interface for large blobs in pack\n - pack-objects: do not truncate result in-pack object size on 32-bit systems\n - index-pack: correct \"offset\" type in unpack_entry_data()\n - index-pack: report correct bad object offsets even if they are large\n - index-pack: correct \"len\" type in unpack_data()\n - sha1_file.c: use type off_t* for object_info->disk_sizep\n - pack-objects: pass length to check_pack_crc() without truncation\n\n \"git pack-objects\" and \"git index-pack\" mostly operate with off_t\n when talking about the offset of objects in a packfile, but there\n were a handful of places that used \"unsigned long\" to hold that\n value, leading to an unintended truncation.\n\n Will merge to 'next'.\n\n\n* sb/push-options (2016-07-12) 5 commits\n - add a test for push options\n - push: accept push options\n - SQUASH???\n - receive-pack: implement advertising and receiving push options\n - push options: {pre,post}-receive hook learns about push options\n\n \"git push\" learned to accept and pass extra options to the\n receiving end so that hooks can read and react to them.\n\n Discussion continues, expecting a further reroll.\n ($gmane/299156)\n\n\n* ew/http-walker (2016-07-12) 3 commits\n - http-walker: reduce O(n) ops with doubly-linked list\n - http: avoid disconnecting on 404s for loose objects\n - http-walker: remove unused parameter from fetch_object\n\n Optimize dumb http transport on the client side.\n\n\n* nd/log-decorate-color-head-arrow (2016-07-12) 1 commit\n - log: decorate HEAD -> branch with the same color for arrow and HEAD\n\n An entry \"git log --decorate\" for the tip of the current branch is\n shown as \"HEAD -> name\" (where \"name\" is the name of the branch);\n paint the arrow in the same color as \"HEAD\", not in the color for\n commits.\n\n Comments?  Personally I find it more-or-less \"Meh\".\n\n\n* rs/rm-strbuf-optim (2016-07-12) 1 commit\n - rm: reuse strbuf for all remove_dir_recursively() calls\n\n The use of strbuf in \"git rm\" to build filename to remove was a bit\n suboptimal, which has been fixed.\n\n Will merge to 'next'.\n\n\n* rs/worktree-use-strbuf-absolute-path (2016-07-12) 1 commit\n - worktree: use strbuf_add_absolute_path() directly\n\n Code simplification.\n\n Will merge to 'next'.\n\n--------------------------------------------------\n[Stalled]\n\n* cc/apply-am (2016-06-28) 41 commits\n - apply: use error_errno() where possible\n - builtin/am: use apply api in run_apply()\n - apply: change error_routine when be_silent is set\n - usage: add get_error_routine() and get_warn_routine()\n - usage: add set_warn_routine()\n - apply: don't print on stdout when be_silent is set\n - apply: make 'be_silent' incompatible with 'apply_verbosely'\n - apply: add 'be_silent' variable to 'struct apply_state'\n - write_or_die: use warning() instead of fprintf(stderr, ...)\n - environment: add set_index_file()\n - apply: make some parsing functions static again\n - apply: move libified code from builtin/apply.c to apply.{c,h}\n - apply: rename and move opt constants to apply.h\n - builtin/apply: rename option parsing functions\n - builtin/apply: make create_one_file() return -1 on error\n - builtin/apply: make try_create_file() return -1 on error\n - builtin/apply: make write_out_results() return -1 on error\n - builtin/apply: make write_out_one_result() return -1 on error\n - builtin/apply: make create_file() return -1 on error\n - builtin/apply: make add_index_file() return -1 on error\n - builtin/apply: make add_conflicted_stages_file() return -1 on error\n - builtin/apply: make remove_file() return -1 on error\n - builtin/apply: make build_fake_ancestor() return -1 on error\n - builtin/apply: change die_on_unsafe_path() to check_unsafe_path()\n - builtin/apply: make gitdiff_*() return -1 on error\n - builtin/apply: make gitdiff_*() return 1 at end of header\n - builtin/apply: make parse_traditional_patch() return -1 on error\n - builtin/apply: make apply_all_patches() return 128 or 1 on error\n - builtin/apply: move check_apply_state() to apply.c\n - builtin/apply: make check_apply_state() return -1 instead of die()ing\n - apply: make init_apply_state() return -1 instead of exit()ing\n - builtin/apply: move init_apply_state() to apply.c\n - builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing\n - builtin/apply: make parse_whitespace_option() return -1 instead of die()ing\n - builtin/apply: make parse_single_patch() return -1 on error\n - builtin/apply: make parse_chunk() return a negative integer on error\n - builtin/apply: make find_header() return -128 instead of die()ing\n - builtin/apply: read_patch_file() return -1 instead of die()ing\n - builtin/apply: make apply_patch() return -1 or -128 instead of die()ing\n - apply: move 'struct apply_state' to apply.h\n - apply: make some names more specific\n (this branch is used by jh/clean-smudge-annex and js/am-3-merge-recursive-direct.)\n\n \"git am\" has been taught to make an internal call to \"git apply\"'s\n innards without spawning the latter as a separate process.\n\n Needs review.\n\n\n* tb/convert-peek-in-index (2016-07-07) 3 commits\n . correct ce_compare_data() in a middle of a merge\n . read-cache: factor out get_sha1_from_index() helper\n - convert: unify the \"auto\" handling of CRLF\n (this branch is tangled with jc/renormalize-merge-kill-safer-crlf.)\n\n Tentatively replaced with jc/renormalize-merge-kill-safer-crlf\n\n\n* sb/bisect (2016-04-15) 22 commits\n - SQUASH???\n - bisect: get back halfway shortcut\n - bisect: compute best bisection in compute_relevant_weights()\n - bisect: use a bottom-up traversal to find relevant weights\n - bisect: prepare for different algorithms based on find_all\n - bisect: rename count_distance() to compute_weight()\n - bisect: make total number of commits global\n - bisect: introduce distance_direction()\n - bisect: extract get_distance() function from code duplication\n - bisect: use commit instead of commit list as arguments when appropriate\n - bisect: replace clear_distance() by unique markers\n - bisect: use struct node_data array instead of int array\n - bisect: get rid of recursion in count_distance()\n - bisect: make algorithm behavior independent of DEBUG_BISECT\n - bisect: make bisect compile if DEBUG_BISECT is set\n - bisect: plug the biggest memory leak\n - bisect: add test for the bisect algorithm\n - t6030: generalize test to not rely on current implementation\n - t: use test_cmp_rev() where appropriate\n - t/test-lib-functions.sh: generalize test_cmp_rev\n - bisect: allow 'bisect run' if no good commit is known\n - bisect: write about `bisect next` in documentation\n\n The internal algorithm used in \"git bisect\" to find the next commit\n to check has been optimized greatly.\n\n Expecting a reroll.\n ($gmane/291163)\n\n\n* sg/completion-updates (2016-02-28) 21 commits\n . completion: cache the path to the repository\n . completion: extract repository discovery from __gitdir()\n . completion: don't guard git executions with __gitdir()\n . completion: consolidate silencing errors from git commands\n . completion: don't use __gitdir() for git commands\n . completion: respect 'git -C <path>'\n . completion: fix completion after 'git -C <path>'\n . completion: don't offer commands when 'git --opt' needs an argument\n . rev-parse: add '--absolute-git-dir' option\n . completion: list short refs from a remote given as a URL\n . completion: don't list 'HEAD' when trying refs completion outside of a repo\n . completion: list refs from remote when remote's name matches a directory\n . completion: respect 'git --git-dir=<path>' when listing remote refs\n . completion: fix most spots not respecting 'git --git-dir=<path>'\n . completion: ensure that the repository path given on the command line exists\n . completion tests: add tests for the __git_refs() helper function\n . completion tests: check __gitdir()'s output in the error cases\n . completion tests: consolidate getting path of current working directory\n . completion tests: make the $cur variable local to the test helper functions\n . completion tests: don't add test cruft to the test repository\n . completion: improve __git_refs()'s in-code documentation\n\n Will be rerolled.\n ($gmane/287839)\n\n\n* ec/annotate-deleted (2015-11-20) 1 commit\n - annotate: skip checking working tree if a revision is provided\n\n Usability fix for annotate-specific \"<file> <rev>\" syntax with deleted\n files.\n\n Waiting for review.\n\n\n* dk/gc-more-wo-pack (2016-01-13) 4 commits\n - gc: clean garbage .bitmap files from pack dir\n - t5304: ensure non-garbage files are not deleted\n - t5304: test .bitmap garbage files\n - prepare_packed_git(): find more garbage\n\n Follow-on to dk/gc-idx-wo-pack topic, to clean up stale\n .bitmap and .keep files.\n\n Waiting for a reroll.\n ($gmane/284368).\n\n\n* jc/diff-b-m (2015-02-23) 5 commits\n . WIPWIP\n . WIP: diff-b-m\n - diffcore-rename: allow easier debugging\n - diffcore-rename.c: add locate_rename_src()\n - diffcore-break: allow debugging\n\n \"git diff -B -M\" produced incorrect patch when the postimage of a\n completely rewritten file is similar to the preimage of a removed\n file; such a resulting file must not be expressed as a rename from\n other place.\n\n The fix in this patch is broken, unfortunately.\n Will discard.\n\n--------------------------------------------------\n[Cooking]\n\n* jh/clean-smudge-annex (2016-07-12) 9 commits\n - use smudgeToFile filter in recursive merge\n - use smudgeToFile filter in git am\n - better recovery from failure of smudgeToFile filter\n - warn on unusable smudgeToFile/cleanFromFile config\n - use smudgeToFile in git checkout etc\n - use cleanFromFile in git add\n - add smudgeToFile and cleanFromFile filter configs\n - clarify %f documentation\n - Merge branch 'cc/apply-am' into jh/clean-smudge-annex\n (this branch is used by js/am-3-merge-recursive-direct; uses cc/apply-am.)\n\n The interface to \"clean/smudge\" filters require Git to feed the\n whole contents via pipe, which is suboptimal for some applications.\n \"cleanFromFile/smudgeToFile\" commands are the moral equilvalents\n for these filters but they interact with the files on the\n filesystem directly.\n\n Will need to wait for all the topics this depends on graduate to 'master'.\n\n\n* js/ignore-space-at-eol (2016-07-11) 2 commits\n - diff: fix a double off-by-one with --ignore-space-at-eol\n - diff: demonstrate a bug with --patience and --ignore-space-at-eol\n\n An age old bug that caused \"git diff --ignore-space-at-eol\"\n misbehave has been fixed.\n\n Will merge to 'next'.\n\n\n* js/rebase-i-tests (2016-07-07) 3 commits\n - rebase -i: we allow extra spaces after fixup!/squash!\n - rebase -i: demonstrate a bug with --autosquash\n - t3404: add a test for the --gpg-sign option\n\n A few tests that specifically target \"git rebase -i\" have been\n added.\n\n Will merge to 'next'.\n\n\n* jc/renormalize-merge-kill-safer-crlf (2016-07-12) 2 commits\n - merge: avoid \"safer crlf\" during recording of merge results\n - convert: unify the \"auto\" handling of CRLF\n (this branch is tangled with tb/convert-peek-in-index.)\n\n \"git merge\" with renormalization did not work well with\n merge-recursive, due to \"safer crlf\" conversion kicking in when it\n shouldn't.\n\n Will merge to 'next', but extra set of eyes are appreciated.\n\n\n* rs/help-c-source-with-gitattributes (2016-07-07) 1 commit\n  (merged to 'next' on 2016-07-11 at b90b7d0)\n + .gitattributes: set file type for C files\n\n The .c/.h sources are marked as such in our .gitattributes file so\n that \"git diff -W\" and friends would work better.\n\n Will merge to 'master'.\n\n\n* rs/notes-merge-no-toctou (2016-07-07) 1 commit\n - notes-merge: use O_EXCL to avoid overwriting existing files\n\n \"git notes merge\" had a code to see if a path exists (and fails if\n it does) and then open the path for writing (when it doesn't).\n Replace it with open with O_EXCL.\n\n Will merge to 'next'.\n\n\n* rw/make-needs-librt (2016-07-11) 2 commits\n - config.mak.uname: define NEEDS_LIBRT under Linux, for now\n - Makefile: add NEEDS_LIBRT to optionally link with librt\n\n Makefile assumed that -lrt is always available on platforms that\n want to use clock_gettime() and CLOCK_MONOTONIC, which is not a\n case for recent Mac OS X.  The necessary symbols are often found in\n libc on many modern systems and having -lrt on the command line, as\n long as the library exists, had no effect, but when the platform\n removes librt.a that is a different matter--having -lrt will break\n the linkage.\n\n This change could be seen as a regression for those who do need to\n specify -lrt, as they now specifically ask for NEEDS_LIBRT when\n building. Hopefully they are in the minority these days.\n\n Will merge to 'next'.\n\n\n* jk/printf-format (2016-07-08) 3 commits\n  (merged to 'next' on 2016-07-11 at 731eafb)\n + commit.c: remove print_commit_list()\n + avoid using sha1_to_hex output as printf format\n + walker: let walker_say take arbitrary formats\n\n Code clean-up to avoid using a variable string that compilers may\n feel untrustable as printf-style format given to write_file()\n helper function.\n\n Will merge to 'master'.\n\n\n* jk/write-file (2016-07-08) 9 commits\n  (merged to 'next' on 2016-07-11 at f51b449)\n + branch: use write_file_buf instead of write_file\n + use write_file_buf where applicable\n + write_file: add format attribute\n + write_file: add pointer+len variant\n + write_file: use xopen\n + write_file: drop \"gently\" form\n + branch: use non-gentle write_file for branch description\n + am: ignore return value of write_file()\n + config: fix bogus fd check when setting up default config\n\n General code clean-up around a helper function to write a\n single-liner to a file.\n\n Will merge to 'master'.\n\n While it is textually independent, jk/printf-format needs to be\n merged before this one.\n\n\n* js/am-call-theirs-theirs-in-fallback-3way (2016-07-08) 1 commit\n  (merged to 'next' on 2016-07-11 at abae4bc)\n + am: counteract gender bias\n (this branch is used by js/am-3-merge-recursive-direct.)\n\n One part of \"git am\" had an oddball helper function that called\n stuff from outside \"his\" as opposed to calling what we have \"ours\",\n which was not gender-neutral and also inconsistent with the rest of\n the system where outside stuff is usuall called \"theirs\" in\n contrast to \"ours\".\n\n Will merge to 'master'.\n\n\n* ak/lazy-prereq-mktemp (2016-07-06) 1 commit\n  (merged to 'next' on 2016-07-11 at 66a9384)\n + t7610: test for mktemp before test execution\n\n A test that unconditionally used \"mktemp\" learned that the command\n is not necessarily available everywhere.\n\n Will merge to 'master'.\n\n\n* jk/difftool-in-subdir (2016-07-06) 1 commit\n - difftool: fix argument handling in subdirs\n\n \"git difftool <paths>...\" started in a subdirectory failed to\n interpret the paths relative to that directory, which has been\n fixed.\n\n Favourably reviewed with some questions and a request for new tests.\n ($gmane/299319)\n\n\n* nd/test-helpers (2016-07-11) 3 commits\n - t/test-lib.sh: fix running tests with --valgrind\n - Makefile: use VCSSVN_LIB to refer to svn library\n - Makefile: drop extra dependencies for test helpers\n\n Build clean-up.\n\n Will merge to 'next'.\n\n\n* dk/blame-move-no-reason-for-1-line-context (2016-05-29) 1 commit\n  (merged to 'next' on 2016-07-06 at 087490c)\n + blame: require 0 context lines while finding moved lines with -M\n\n \"git blame -M\" missed a single line that was moved within the file.\n\n We may want to squash a test or two to this commit.  Volunteers?\n\n\n* jk/common-main (2016-07-06) 1 commit\n  (merged to 'next' on 2016-07-11 at 1c2228a)\n + Merge branch 'jk/common-main-2.8' into jk/common-main\n (this branch uses jk/common-main-2.8.)\n\n Prepare jk/commin-main-2.8 topic to be mergeable to 2.9 and later.\n\n Will merge to 'master'.\n\n\n* jk/common-main-2.8 (2016-07-06) 6 commits\n + mingw: declare main()'s argv as const\n + common-main: call git_setup_gettext()\n + common-main: call restore_sigpipe_to_default()\n + common-main: call sanitize_stdfds()\n + common-main: call git_extract_argv0_path()\n + add an extra level of indirection to main()\n (this branch is used by jk/common-main.)\n\n There are certain house-keeping tasks that need to be performed at\n the very beginning of any Git program, and programs that are not\n built-in commands had to do them exactly the same way as \"git\"\n potty does.  It was easy to make mistakes in one-off standalone\n programs (like test helpers).  A common \"main()\" function that\n calls cmd_main() of individual program has been introduced to\n make it harder to make mistakes.\n\n\n* nd/ita-cleanup (2016-07-01) 3 commits\n  (merged to 'next' on 2016-07-06 at f15aeba)\n + grep: fix grepping for \"intent to add\" files\n + t7810-grep.sh: fix a whitespace inconsistency\n + t7810-grep.sh: fix duplicated test name\n\n Git does not know what the contents in the index should be for a\n path added with \"git add -N\" yet, so \"git grep --cached\" should not\n show hits (or show lack of hits, with -L) in such a path.  But we\n did by mistake, which has been corrected.\n\n Will merge to 'master'.\n\n\n* dp/autoconf-curl-ssl (2016-06-28) 1 commit\n - ./configure.ac: detect SSL in libcurl using curl-config\n\n The ./configure script generated from configure.ac was taught how\n to detect support of SSL by libcurl better.\n\n Needs review.\n\n\n* js/sign-empty-commit-fix (2016-06-29) 1 commit\n  (merged to 'next' on 2016-07-06 at 448da1b)\n + commit -S: avoid invalid pointer with empty message\n\n \"git commit --amend --allow-empty-message -S\" for a commit without\n any message body could have misidentified where the header of the\n commit object ends.\n\n Will merge to 'master'.\n\n\n* js/t3404-grammo-fix (2016-06-29) 1 commit\n  (merged to 'next' on 2016-07-06 at 4378654)\n + t3404: fix a grammo (commands are ran -> commands are run)\n\n Grammofix.\n\n Will merge to 'master'.\n\n\n* ls/p4-tmp-refs (2016-07-08) 1 commit\n  (merged to 'next' on 2016-07-11 at 4af2d93)\n + git-p4: place temporary refs used for branch import under refs/git-p4-tmp\n\n \"git p4\" used a location outside $GIT_DIR/refs/ to place its\n temporary branches, which has been moved to refs/git-p4-tmp/.\n\n Will merge to 'master'.\n\n\n* jc/pull-rebase-ff (2016-06-29) 1 commit\n -   pull: fast-forward \"pull --rebase=true\"\n\n \"git pull --rebase\", when there is no new commits on our side since\n we forked from the upstream, should be able to fast-forward without\n invoking \"git rebase\", but it didn't.\n\n Needs a real log message and a few tests.\n\n\n* ps/rebase-i-auto-unstash-upon-abort (2016-06-29) 1 commit\n  (merged to 'next' on 2016-07-06 at 0fdcedb)\n + rebase -i: restore autostash on abort\n\n \"git rebase -i --autostash\" did not restore the auto-stashed change\n when the operation was aborted.\n\n Will merge to 'master'.\n\n\n* dg/subtree-rebase-test (2016-06-28) 1 commit\n  (merged to 'next' on 2016-07-06 at 4dec1ad)\n + contrib/subtree: Add a test for subtree rebase that loses commits\n\n This is just a test to specify the desired behaviour that currently\n is not available.\n\n Will merge to 'master'.\n\n\n* jk/test-match-signal (2016-07-06) 4 commits\n  (merged to 'next' on 2016-07-11 at 54e1462)\n + t/lib-git-daemon: use test_match_signal\n + test_must_fail: use test_match_signal\n + t0005: use test_match_signal as appropriate\n + tests: factor portable signal check out of t0005\n\n The test framework learned a new helper test_match_signal to check\n an exit code from getting killed by an expected signal.\n\n Will merge to 'master'.\n\n\n* ah/unpack-trees-advice-messages (2016-06-27) 1 commit\n  (merged to 'next' on 2016-07-06 at 4254fc2)\n + unpack-trees: fix English grammar in do-this-before-that messages\n\n Grammofix.\n\n Will merge to 'master'.\n\n\n* ew/gc-auto-pack-limit-fix (2016-06-27) 1 commit\n  (merged to 'next' on 2016-07-06 at aa023d3)\n + gc: fix off-by-one error with gc.autoPackLimit\n\n \"gc.autoPackLimit\" when set to 1 should not trigger a repacking\n when there is only one pack, but the code counted poorly and did\n so.\n\n Will merge to 'master'.\n\n\n* nd/connect-ssh-command-config (2016-07-06) 1 commit\n  (merged to 'next' on 2016-07-06 at 6eac316)\n + connect: read $GIT_SSH_COMMAND from config file\n\n A new configuration variable core.sshCommand to specify what value\n for GIT_SSH_COMMAND to use per repository.\n\n Will merge to 'master'.\n\n\n* nd/doc-new-command (2016-06-27) 1 commit\n  (merged to 'next' on 2016-07-06 at 1404b64)\n + new-command.txt: correct the command description file\n\n Typofix in a doc.\n\n Will merge to 'master'.\n\n\n* po/range-doc (2016-07-01) 3 commits\n - doc: give headings for the two and three dot notations\n - doc: show the actual left, right, and boundary marks\n - doc: use 'symmetric difference' consistently\n\n Clarify various ways to specify the \"revision ranges\" in the\n documentation.\n\n Will hold.\n\n There is another one that tries to clarify r1..r2 excludes r1\n itself, which is not queued here waiting for the conclusion of a\n review discussion.  Otherwise looked good.\n\n\n* sb/submodule-parallel-fetch (2016-07-11) 3 commits\n  (merged to 'next' on 2016-07-11 at 4983ded)\n + hoist out handle_nonblock function for xread and xwrite\n  (merged to 'next' on 2016-07-06 at de5fd35)\n + xwrite: poll on non-blocking FDs\n + xread: retry after poll on EAGAIN/EWOULDBLOCK\n\n Fix a recently introduced codepaths that are involved in parallel\n submodule operations, which gave up on reading too early, and\n could have wasted CPU while attempting to write under a corner case\n condition.\n\n Will merge to 'master'.\n\n\n* mm/doc-tt (2016-06-28) 7 commits\n  (merged to 'next' on 2016-07-06 at a8c74bd)\n + doc: typeset HEAD and variants as literal\n + CodingGuidelines: formatting HEAD in documentation\n + doc: typeset long options with argument as literal\n + doc: typeset '--' as literal\n + doc: typeset long command-line options as literal\n + doc: typeset short command-line options as literal\n + Documentation/git-mv.txt: fix whitespace indentation\n\n More mark-up updates to typeset strings that are expected to\n literally typed by the end user in fixed-width font.\n\n Will merge to 'master'.\n\n\n* nd/fetch-ref-summary (2016-07-06) 5 commits\n  (merged to 'next' on 2016-07-11 at 379df9f)\n + fetch: reduce duplicate in ref update status lines with placeholder\n + fetch: align all \"remote -> local\" output\n + fetch: change flag code for displaying tag update and deleted ref\n + fetch: refactor ref update status formatting code\n + git-fetch.txt: document fetch output\n\n Improve the look of the way \"git fetch\" reports what happened to\n each ref that was fetched.\n\n Will merge to 'master'.\n\n\n* ex/deprecate-empty-pathspec-as-match-all (2016-06-22) 1 commit\n - pathspec: warn on empty strings as pathspec\n\n An empty string used as a pathspec element has always meant\n 'everything matches', but it is too easy to write a script that\n finds a path to remove in $path and run 'git rm \"$paht\"', which\n ends up removing everything.  Start warning about this use of an\n empty string used for 'everything matches' and ask users to use a\n more explicit '.' for that instead.\n\n The hope is that existing users will not mind this change, and\n eventually the warning can be turned into a hard error, upgrading\n the deprecation into removal of this (mis)feature.\n\n Will merge to 'next'.\n\n\n* nd/icase (2016-07-01) 12 commits\n  (merged to 'next' on 2016-07-11 at a00d080)\n + grep.c: reuse \"icase\" variable\n + diffcore-pickaxe: support case insensitive match on non-ascii\n + diffcore-pickaxe: Add regcomp_or_die()\n + grep/pcre: support utf-8\n + gettext: add is_utf8_locale()\n + grep/pcre: prepare locale-dependent tables for icase matching\n + grep: rewrite an if/else condition to avoid duplicate expression\n + grep/icase: avoid kwsset when -F is specified\n + grep/icase: avoid kwsset on literal non-ascii strings\n + test-regex: expose full regcomp() to the command line\n + test-regex: isolate the bug test code\n + grep: break down an \"if\" stmt in preparation for next changes\n\n \"git grep -i\" has been taught to fold case in non-ascii locales\n correctly.\n\n Will merge to 'master'.\n\n\n* mh/ref-store (2016-06-20) 38 commits\n - refs: implement iteration over only per-worktree refs\n - refs: make lock generic\n - refs: add method to rename refs\n - refs: add methods to init refs db\n - refs: make delete_refs() virtual\n - refs: add method for initial ref transaction commit\n - refs: add methods for reflog\n - refs: add method iterator_begin\n - files_ref_iterator_begin(): take a ref_store argument\n - split_symref_update(): add a files_ref_store argument\n - lock_ref_sha1_basic(): add a files_ref_store argument\n - lock_ref_for_update(): add a files_ref_store argument\n - commit_ref_update(): add a files_ref_store argument\n - lock_raw_ref(): add a files_ref_store argument\n - repack_without_refs(): add a files_ref_store argument\n - refs: make peel_ref() virtual\n - refs: make create_symref() virtual\n - refs: make pack_refs() virtual\n - refs: make verify_refname_available() virtual\n - refs: make read_raw_ref() virtual\n - resolve_gitlink_ref(): rename path parameter to submodule\n - resolve_gitlink_ref(): avoid memory allocation in many cases\n - resolve_gitlink_ref(): implement using resolve_ref_recursively()\n - resolve_ref_recursively(): new function\n - read_raw_ref(): take a (struct ref_store *) argument\n - resolve_gitlink_packed_ref(): remove function\n - resolve_packed_ref(): rename function from resolve_missing_loose_ref()\n - refs: reorder definitions\n - refs: add a transaction_commit() method\n - {lock,commit,rollback}_packed_refs(): add files_ref_store arguments\n - resolve_missing_loose_ref(): add a files_ref_store argument\n - get_packed_ref(): add a files_ref_store argument\n - add_packed_ref(): add a files_ref_store argument\n - refs: create a base class \"ref_store\" for files_ref_store\n - refs: add a backend method structure\n - refs: rename struct ref_cache to files_ref_store\n - rename_ref_available(): add docstring\n - resolve_gitlink_ref(): eliminate temporary variable\n (this branch uses mh/ref-iterators and mh/split-under-lock; is tangled with mh/update-ref-errors.)\n\n The ref-store abstraction was introduced to the refs API so that we\n can plug in different backends to store references.\n\n Needs a fixup.\n ($gmane/298137)\n\n\n* mh/update-ref-errors (2016-06-20) 6 commits\n - lock_ref_for_update(): avoid a symref resolution\n - lock_ref_for_update(): make error handling more uniform\n - t1404: add more tests of update-ref error handling\n - t1404: document function test_update_rejected\n - t1404: remove \"prefix\" argument to test_update_rejected\n - t1404: rename file to t1404-update-ref-errors.sh\n (this branch uses mh/split-under-lock; is tangled with mh/ref-iterators and mh/ref-store.)\n\n Error handling in the codepaths that updates refs has been\n improved.\n\n Will merge to 'next'.\n\n\n* js/log-to-diffopt-file (2016-07-11) 12 commits\n - mingw: fix the shortlog --output=<file> test\n  (merged to 'next' on 2016-07-06 at 39e7a5f)\n + diff: do not color output when --color=auto and --output=<file> is given\n + t4211: ensure that log respects --output=<file>\n + shortlog: respect the --output=<file> setting\n + format-patch: use stdout directly\n + format-patch: avoid freopen()\n + format-patch: explicitly switch off color when writing to files\n + shortlog: support outputting to streams other than stdout\n + graph: respect the diffopt.file setting\n + line-log: respect diffopt's configured output file stream\n + log-tree: respect diffopt's configured output file stream\n + log: prepare log/log-tree to reuse the diffopt.close_file attribute\n\n The commands in the \"log/diff\" family had an FILE* pointer in the\n data structure they pass around for a long time, but some codepaths\n used to always write to the standard output.  As a preparatory step\n to make \"git format-patch\" available to the internal callers, these\n codepaths have been updated to consistently write into that FILE*\n instead.\n\n Will merge to 'master'.\n\n\n* bc/cocci (2016-06-28) 11 commits\n  (merged to 'next' on 2016-07-06 at f2e8e2a)\n + diff: convert prep_temp_blob() to struct object_id\n + merge-recursive: convert merge_recursive_generic() to object_id\n + merge-recursive: convert leaf functions to use struct object_id\n + merge-recursive: convert struct merge_file_info to object_id\n + merge-recursive: convert struct stage_data to use object_id\n + diff: rename struct diff_filespec's sha1_valid member\n + diff: convert struct diff_filespec to struct object_id\n + coccinelle: apply object_id Coccinelle transformations\n + coccinelle: convert hashcpy() with null_sha1 to hashclr()\n + contrib/coccinelle: add basic Coccinelle transforms\n + hex: add oid_to_hex_r()\n (this branch is used by js/am-3-merge-recursive-direct.)\n\n Conversion from unsigned char sha1[20] to struct object_id\n continues.\n\n Will merge to 'master'.\n\n\n* jk/big-and-future-archive-tar (2016-07-01) 5 commits\n  (merged to 'next' on 2016-07-06 at 89f3835)\n + archive-tar: drop return value\n + archive-tar: write extended headers for far-future mtime\n + archive-tar: write extended headers for file sizes >= 8GB\n + t5000: test tar files that overflow ustar headers\n + t9300: factor out portable \"head -c\" replacement\n\n \"git archive\" learned to handle files that are larger than 8GB and\n commits far in the future than expressible by the traditional US-TAR\n format.\n\n Will merge to 'master'.\n\n\n* lf/recv-sideband-cleanup (2016-07-06) 2 commits\n  (merged to 'next' on 2016-07-06 at d527bcb)\n + sideband.c: small optimization of strbuf usage\n + sideband.c: refactor recv_sideband()\n\n Code simplification.\n\n Will merge to 'master'.\n\n\n* jc/blame-reverse (2016-06-14) 2 commits\n - blame: dwim \"blame --reverse OLD\" as \"blame --reverse OLD..\"\n - blame: improve diagnosis for \"--reverse NEW\"\n\n It is a common mistake to say \"git blame --reverse OLD path\",\n expecting that the command line is dwimmed as if asking how lines\n in path in an old revision OLD have survived up to the current\n commit.\n\n Any supporters?  Otherwise will drop.\n\n\n* nd/shallow-deepen (2016-06-13) 27 commits\n - fetch, upload-pack: --deepen=N extends shallow boundary by N commits\n - upload-pack: add get_reachable_list()\n - upload-pack: split check_unreachable() in two, prep for get_reachable_list()\n - t5500, t5539: tests for shallow depth excluding a ref\n - clone: define shallow clone boundary with --shallow-exclude\n - fetch: define shallow boundary with --shallow-exclude\n - upload-pack: support define shallow boundary by excluding revisions\n - refs: add expand_ref()\n - t5500, t5539: tests for shallow depth since a specific date\n - clone: define shallow clone boundary based on time with --shallow-since\n - fetch: define shallow boundary with --shallow-since\n - upload-pack: add deepen-since to cut shallow repos based on time\n - shallow.c: implement a generic shallow boundary finder based on rev-list\n - fetch-pack: use a separate flag for fetch in deepening mode\n - fetch-pack.c: mark strings for translating\n - fetch-pack: use a common function for verbose printing\n - fetch-pack: use skip_prefix() instead of starts_with()\n - upload-pack: move rev-list code out of check_non_tip()\n - upload-pack: make check_non_tip() clean things up on error\n - upload-pack: tighten number parsing at \"deepen\" lines\n - upload-pack: use skip_prefix() instead of starts_with()\n - upload-pack: move \"unshallow\" sending code out of deepen()\n - upload-pack: remove unused variable \"backup\"\n - upload-pack: move \"shallow\" sending code out of deepen()\n - upload-pack: move shallow deepen code out of receive_needs()\n - transport-helper.c: refactor set_helper_option()\n - remote-curl.c: convert fetch_git() to use argv_array\n\n The existing \"git fetch --depth=<n>\" option was hard to use\n correctly when making the history of an existing shallow clone\n deeper.  A new option, \"--deepen=<n>\", has been added to make this\n easier to use.  \"git clone\" also learned \"--shallow-since=<date>\"\n and \"--shallow-exclude=<tag>\" options to make it easier to specify\n \"I am interested only in the recent N months worth of history\" and\n \"Give me only the history since that version\".\n\n Needs review.\n\n Rerolled.  What this topic attempts to achieve is worthwhile, I\n would think.\n\n\n* jc/attr-more (2016-06-09) 8 commits\n - attr.c: outline the future plans by heavily commenting\n - attr.c: always pass check[] to collect_some_attrs()\n - attr.c: introduce empty_attr_check_elems()\n - attr.c: correct ugly hack for git_all_attrs()\n - attr.c: rename a local variable check\n - fixup! d5ad6c13\n - attr.c: pass struct git_attr_check down the callchain\n - attr.c: add push_stack() helper\n (this branch uses jc/attr; is tangled with sb/pathspec-label and sb/submodule-default-paths.)\n\n The beginning of long and tortuous journey to clean-up attribute\n subsystem implementation.\n\n Needs to be redone.\n\n\n* mh/ref-iterators (2016-06-20) 13 commits\n - for_each_reflog(): reimplement using iterators\n - dir_iterator: new API for iterating over a directory tree\n - for_each_reflog(): don't abort for bad references\n - do_for_each_ref(): reimplement using reference iteration\n - refs: introduce an iterator interface\n - ref_resolves_to_object(): new function\n - entry_resolves_to_object(): rename function from ref_resolves_to_object()\n - get_ref_cache(): only create an instance if there is a submodule\n - remote rm: handle symbolic refs correctly\n - delete_refs(): add a flags argument\n - refs: use name \"prefix\" consistently\n - do_for_each_ref(): move docstring to the header file\n - refs: remove unnecessary \"extern\" keywords\n (this branch is used by mh/ref-store; uses mh/split-under-lock; is tangled with mh/update-ref-errors.)\n\n The API to iterate over all the refs (i.e. for_each_ref(), etc.)\n has been revamped.\n\n Will merge to 'next'.\n\n\n* mh/connect (2016-06-06) 10 commits\n - connect: [host:port] is legacy for ssh\n - connect: move ssh command line preparation to a separate function\n - connect: actively reject git:// urls with a user part\n - connect: change the --diag-url output to separate user and host\n - connect: make parse_connect_url() return the user part of the url as a separate value\n - connect: group CONNECT_DIAG_URL handling code\n - connect: make parse_connect_url() return separated host and port\n - connect: re-derive a host:port string from the separate host and port variables\n - connect: call get_host_and_port() earlier\n - connect: document why we sometimes call get_port after get_host_and_port\n\n Rewrite Git-URL parsing routine (hopefully) without changing any\n behaviour.\n\n Comments?\n\n\n* va/i18n-even-more (2016-07-01) 39 commits\n  (merged to 'next' on 2016-07-01 at fa5e50e3)\n + t5541: become resilient to GETTEXT_POISON\n  (merged to 'next' on 2016-06-28 at 5919dfa)\n + i18n: branch: mark comment when editing branch description for translation\n + i18n: unmark die messages for translation\n + i18n: submodule: escape shell variables inside eval_gettext\n + i18n: submodule: join strings marked for translation\n + i18n: init-db: join message pieces\n + i18n: remote: allow translations to reorder message\n + i18n: remote: mark URL fallback text for translation\n + i18n: standardise messages\n + i18n: sequencer: add period to error message\n + i18n: merge: change command option help to lowercase\n + i18n: merge: mark messages for translation\n + i18n: notes: mark options for translation\n + i18n: notes: mark strings for translation\n + i18n: transport-helper.c: change N_() call to _()\n + i18n: bisect: mark strings for translation\n + t5523: use test_i18ngrep for negation\n + t4153: fix negated test_i18ngrep call\n + t9003: become resilient to GETTEXT_POISON\n + tests: unpack-trees: update to use test_i18n* functions\n + tests: use test_i18n* functions to suppress false positives\n + i18n: setup: mark strings for translation\n + i18n: rebase-interactive: mark comments of squash for translation\n + i18n: rebase-interactive: mark here-doc strings for translation\n + i18n: rebase-interactive: mark strings for translation\n + i18n: git-sh-setup.sh: mark strings for translation\n + t6030: update to use test_i18ncmp\n + i18n: bisect: simplify error message for i18n\n + i18n: rebase: mark placeholder for translation\n + i18n: rebase: fix marked string to use eval_gettext variant\n + merge-octopus: use die shell function from git-sh-setup.sh\n + i18n: merge-octopus: mark messages for translation\n + i18n: sequencer: mark string for translation\n + i18n: sequencer: mark entire sentences for translation\n + i18n: transport: mark strings for translation\n + i18n: advice: internationalize message for conflicts\n + i18n: advice: mark string about detached head for translation\n + i18n: builtin/remote.c: fix mark for translation\n + Merge branch 'jc/t2300-setup' into HEAD\n (this branch is used by js/am-3-merge-recursive-direct.)\n\n More markings of messages for i18n, with updates to various tests\n to pass GETTEXT_POISON tests.\n\n One patch from the original submission dropped due to conflicts\n with jk/upload-pack-hook, which is still in flux.\n\n Will merge to 'master'.\n\n\n* nd/worktree-lock (2016-07-08) 6 commits\n - worktree.c: find_worktree() search by path suffix\n - worktree: add \"unlock\" command\n - worktree: add \"lock\" command\n - worktree.c: add is_worktree_locked()\n - worktree.c: add is_main_worktree()\n - worktree.c: add find_worktree()\n\n \"git worktree prune\" protected worktrees that are marked as\n \"locked\" by creating a file in a known location.  \"git worktree\"\n command learned a dedicated command pair to create and remoev such\n a file, so that the users do not have to do this with editor.\n\n Will merge to 'next'.\n\n\n* sb/submodule-default-paths (2016-06-20) 5 commits\n - completion: clone can recurse into submodules\n - clone: add --init-submodule=<pathspec> switch\n - submodule update: add `--init-default-path` switch\n - Merge branch 'sb/pathspec-label' into sb/submodule-default-paths\n - Merge branch 'jc/attr' into sb/submodule-default-paths\n (this branch uses jc/attr and sb/pathspec-label; is tangled with jc/attr-more.)\n\n Allow specifying the set of submodules the user is interested in on\n the command line of \"git clone\" that clones the superproject.\n\n\n* jc/attr (2016-05-25) 18 commits\n - attr: support quoting pathname patterns in C style\n - attr: expose validity check for attribute names\n - attr: add counted string version of git_attr()\n - attr: add counted string version of git_check_attr()\n - attr: retire git_check_attrs() API\n - attr: convert git_check_attrs() callers to use the new API\n - attr: convert git_all_attrs() to use \"struct git_attr_check\"\n - attr: (re)introduce git_check_attr() and struct git_attr_check\n - attr: rename function and struct related to checking attributes\n - attr.c: plug small leak in parse_attr_line()\n - attr.c: tighten constness around \"git_attr\" structure\n - attr.c: simplify macroexpand_one()\n - attr.c: mark where #if DEBUG ends more clearly\n - attr.c: complete a sentence in a comment\n - attr.c: explain the lack of attr-name syntax check in parse_attr()\n - attr.c: update a stale comment on \"struct match_attr\"\n - attr.c: use strchrnul() to scan for one line\n - commit.c: use strchrnul() to scan for one line\n (this branch is used by jc/attr-more, sb/pathspec-label and sb/submodule-default-paths.)\n\n The attributes API has been updated so that it can later be\n optimized using the knowledge of which attributes are queried.\n\n I wanted to polish this topic further to make the attribute\n subsystem thread-ready, but because other topics depend on this\n topic and they do not (yet) need it to be thread-ready, let's merge\n this early part together with the dependent topics to 'next', and\n back-burner the threading enhancement to another day.\n\n\n* pb/bisect (2016-07-12) 9 commits\n - bisect--helper: `bisect_write` shell function in C\n - bisect--helper: `is_expected_rev` & `check_expected_revs` shell function in C\n - bisect--helper: `bisect_reset` shell function in C\n - wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()\n - t6030: explicitly test for bisection cleanup\n - bisect--helper: `bisect_clean_state` shell function in C\n - bisect--helper: `write_terms` shell function in C\n - bisect: rewrite `check_term_format` shell function in C\n - bisect--helper: use OPT_CMDMODE instead of OPT_BOOL\n\n GSoC \"bisect\" topic.\n\n\n* sb/pathspec-label (2016-06-03) 6 commits\n - pathspec: disable preload-index when attribute pathspec magic is in use\n - pathspec: allow escaped query values\n - pathspec: allow querying for attributes\n - pathspec: move prefix check out of the inner loop\n - pathspec: move long magic parsing out of prefix_pathspec\n - Documentation: fix a typo\n (this branch is used by sb/submodule-default-paths; uses jc/attr; is tangled with jc/attr-more.)\n\n The pathspec mechanism learned \":(attr:X)$pattern\" pathspec magic\n to limit paths that match $pattern further by attribute settings.\n The preload-index mechanism is disabled when the new pathspec magic\n is in use (at least for now), because the attribute subsystem is\n not thread-ready.\n\n\n* mh/split-under-lock (2016-06-13) 33 commits\n - lock_ref_sha1_basic(): only handle REF_NODEREF mode\n - commit_ref_update(): remove the flags parameter\n - lock_ref_for_update(): don't resolve symrefs\n - lock_ref_for_update(): don't re-read non-symbolic references\n - refs: resolve symbolic refs first\n - ref_transaction_update(): check refname_is_safe() at a minimum\n - unlock_ref(): move definition higher in the file\n - lock_ref_for_update(): new function\n - add_update(): initialize the whole ref_update\n - verify_refname_available(): adjust constness in declaration\n - refs: don't dereference on rename\n - refs: allow log-only updates\n - delete_branches(): use resolve_refdup()\n - ref_transaction_commit(): correctly report close_ref() failure\n - ref_transaction_create(): disallow recursive pruning\n - refs: make error messages more consistent\n - lock_ref_sha1_basic(): remove unneeded local variable\n - read_raw_ref(): move docstring to header file\n - read_raw_ref(): improve docstring\n - read_raw_ref(): rename symref argument to referent\n - read_raw_ref(): clear *type at start of function\n - read_raw_ref(): rename flags argument to type\n - ref_transaction_commit(): remove local variables n and updates\n - rename_ref(): remove unneeded local variable\n - commit_ref_update(): write error message to *err, not stderr\n - refname_is_safe(): insist that the refname already be normalized\n - refname_is_safe(): don't allow the empty string\n - refname_is_safe(): use skip_prefix()\n - remove_dir_recursively(): add docstring\n - safe_create_leading_directories(): improve docstring\n - read_raw_ref(): don't get confused by an empty directory\n - commit_ref(): if there is an empty dir in the way, delete it\n - t1404: demonstrate a bug resolving references\n (this branch is used by mh/ref-iterators, mh/ref-store and mh/update-ref-errors.)\n\n Further preparatory work on the refs API before the pluggable\n backend series can land.\n\n Will merge to 'next'.\n\n\n* kn/ref-filter-branch-list (2016-05-17) 17 commits\n - branch: implement '--format' option\n - branch: use ref-filter printing APIs\n - branch, tag: use porcelain output\n - ref-filter: allow porcelain to translate messages in the output\n - ref-filter: add `:dir` and `:base` options for ref printing atoms\n - ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()\n - ref-filter: introduce symref_atom_parser() and refname_atom_parser()\n - ref-filter: introduce refname_atom_parser_internal()\n - ref-filter: make \"%(symref)\" atom work with the ':short' modifier\n - ref-filter: add support for %(upstream:track,nobracket)\n - ref-filter: make %(upstream:track) prints \"[gone]\" for invalid upstreams\n - ref-filter: introduce format_ref_array_item()\n - ref-filter: move get_head_description() from branch.c\n - ref-filter: modify \"%(objectname:short)\" to take length\n - ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)\n - ref-filter: include reference to 'used_atom' within 'atom_value'\n - ref-filter: implement %(if), %(then), and %(else) atoms\n\n The code to list branches in \"git branch\" has been consolidated\n with the more generic ref-filter API.\n\n Rerolled.\n This also really needs review.\n\n\n* dt/index-helper (2016-07-06) 21 commits\n - index-helper: indexhelper.exitAfter config\n - trace: measure where the time is spent in the index-heavy operations\n - index-helper: optionally automatically run\n - index-helper: autorun mode\n - index-helper: don't run if already running\n - index-helper: kill mode\n - watchman: add a config option to enable the extension\n - unpack-trees: preserve index extensions\n - update-index: enable/disable watchman support\n - index-helper: use watchman to avoid refreshing index with lstat()\n - watchman: support watchman to reduce index refresh cost\n - read-cache: add watchman 'WAMA' extension\n - index-helper: log warnings\n - index-helper: add --detach\n - daemonize(): set a flag before exiting the main process\n - index-helper: add --strict\n - index-helper: new daemon for caching index and related stuff\n - unix-socket.c: add stub implementation when unix sockets are not supported\n - pkt-line: add gentle version of packet_write\n - read-cache: allow to keep mmap'd memory after reading\n - read-cache.c: fix constness of verify_hdr()\n\n A new \"index-helper\" daemon has been introduced to give newly\n spawned Git process a quicker access to the data in the index, and\n optionally interface with the watchman daemon to further reduce the\n refresh cost.\n\n Will merge to 'next'.\n\n Is everybody happy with this version?\n At v14.\n\n\n* jc/bundle (2016-03-03) 6 commits\n - index-pack: --clone-bundle option\n - Merge branch 'jc/index-pack' into jc/bundle\n - bundle v3: the beginning\n - bundle: keep a copy of bundle file name in the in-core bundle header\n - bundle: plug resource leak\n - bundle doc: 'verify' is not about verifying the bundle\n\n The beginning of \"split bundle\", which could be one of the\n ingredients to allow \"git clone\" traffic off of the core server\n network to CDN.\n\n While I think it would make it easier for people to experiment and\n build on if the topic is merged to 'next', I am at the same time a\n bit reluctant to merge an unproven new topic that introduces a new\n file format, which we may end up having to support til the end of\n time.  Comments?\n\n\n* jc/merge-drop-old-syntax (2015-04-29) 1 commit\n - merge: drop 'git merge <message> HEAD <commit>' syntax\n\n Stop supporting \"git merge <message> HEAD <commit>\" syntax that has\n been deprecated since October 2007, and issues a deprecation\n warning message since v2.5.0.\n\n It has been reported that git-gui still uses the deprecated syntax,\n which needs to be fixed before this final step can proceed.\n ($gmane/282594)\n\n--------------------------------------------------\n[Discarded]\n\n* ew/svn-bad-ref (2016-07-06) 1 commit\n . git-svn: warn instead of dying when commit data is missing\n\n Pulled directly from upstream hence discarded.\n"},{"id":"291366","messageId":"CAGZ79kY7pWUG7Q0fDhieHCBCpR5RCongzHth6DWOJaEkcGqMEA@mail.gmail.com","threadId":"42835","inReplyTo":"xmqqy4551nph.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Stefan Beller","fromEmail":"sbeller@google.com","sentAt":"2016-07-13T17:27:44Z","receivedAt":"2016-07-13T17:31:51Z","isPatch":false,"sender":{"key":"stefanbeller@gmail.com","avatar":"https://avatars.githubusercontent.com/u/455868?v=4"},"body":"> * sb/push-options (2016-07-12) 5 commits\n>  - add a test for push options\n>  - push: accept push options\n>  - SQUASH???\n\nSquash? I do not find a squashable commit in what you pushed,\ndo you intend to squash the first 2 patches instead?\n\n>  - receive-pack: implement advertising and receiving push options\n>  - push options: {pre,post}-receive hook learns about push options\n>\n>  \"git push\" learned to accept and pass extra options to the\n>  receiving end so that hooks can read and react to them.\n>\n>  Discussion continues, expecting a further reroll.\n>  ($gmane/299156)\n\nYeah there were some late comments, so I did not reroll right away.\nI think Shawns proposal to have a receive.maxCommandBytes is a\ngood way for an overall upper bound, but how does it stop us from\ngoing forward with this series? It seems like a good series to implement\non top of this?\n\n(We also have no code for limiting the number of refs pushed, so I\ndo not quite understand why this DoS paranoia comes up with this\nseries all of a sudden.)\n"},{"id":"291367","messageId":"xmqqpoqh1m0o.fsf@gitster.mtv.corp.google.com","threadId":"42835","inReplyTo":"CAGZ79kY7pWUG7Q0fDhieHCBCpR5RCongzHth6DWOJaEkcGqMEA@mail.gmail.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-07-13T17:32:55Z","receivedAt":"2016-07-13T17:38:52Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Stefan Beller <sbeller@google.com> writes:\n\n>> * sb/push-options (2016-07-12) 5 commits\n>>  - add a test for push options\n>>  - push: accept push options\n>>  - SQUASH???\n>\n> Squash? I do not find a squashable commit in what you pushed,\n> do you intend to squash the first 2 patches instead?\n\n$ git log --oneline --first-parent master..pu | grep push-options\nf8e50d4 Merge branch 'sb/push-options' into pu\n$ git log --oneline master..f8e50d4^2\nd6fd535 add a test for push options\nef00034 push: accept push options\n6c5282d SQUASH???\ned0c716 receive-pack: implement advertising and receiving push options\nf7c760f push options: {pre,post}-receive hook learns about push options\n$ git show 6c5282d\ncommit 6c5282d7c5b50f362aaee2059c0253ab17b4fcd3\nAuthor: Junio C Hamano <gitster@pobox.com>\nDate:   Tue Jul 12 14:54:58 2016 -0700\n\n    SQUASH???\n\ndiff --git a/builtin/receive-pack.c b/builtin/receive-pack.c\nindex 754db6e..4d8041a 100644\n--- a/builtin/receive-pack.c\n+++ b/builtin/receive-pack.c\n@@ -1503,8 +1503,6 @@ static struct string_list *read_push_options(void)\n {\n \tint i;\n \tstruct string_list *ret = xmalloc(sizeof(*ret));\n-\tstring_list_init(ret, 1);\n-\n \t/* NEEDSWORK: expose the limitations to be configurable. */\n \tint max_options = 32;\n \n@@ -1518,6 +1516,7 @@ static struct string_list *read_push_options(void)\n \t */\n \tint max_size = 1024;\n \n+\tstring_list_init(ret, 1);\n \tfor (i = 0; i < max_options; i++) {\n \t\tchar *line;\n \t\tint len;\n\ni.e. compilation fix for decl-after-stmt.\n\n>>  - receive-pack: implement advertising and receiving push options\n>>  - push options: {pre,post}-receive hook learns about push options\n>>\n>>  \"git push\" learned to accept and pass extra options to the\n>>  receiving end so that hooks can read and react to them.\n>>\n>>  Discussion continues, expecting a further reroll.\n>>  ($gmane/299156)\n>\n> Yeah there were some late comments, so I did not reroll right away.\n> I think Shawns proposal to have a receive.maxCommandBytes is a\n> good way for an overall upper bound, but how does it stop us from\n> going forward with this series?\n\nIf we were to do maxcommandbytes, then max_options would become\nirrelevant, no?\n"},{"id":"291369","messageId":"CACsJy8CVJr6-9CnyrOU4UoPPGu6Ovn_=-2YKeqC8Lp_rVnh5fg@mail.gmail.com","threadId":"42835","inReplyTo":"xmqqy4551nph.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Duy Nguyen","fromEmail":"pclouds@gmail.com","sentAt":"2016-07-13T17:40:40Z","receivedAt":"2016-07-13T17:43:44Z","isPatch":false,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Wed, Jul 13, 2016 at 6:56 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> * nd/pack-ofs-4gb-limit (2016-07-13) 7 commits\n>  - fsck: use streaming interface for large blobs in pack\n>  - pack-objects: do not truncate result in-pack object size on 32-bit systems\n>  - index-pack: correct \"offset\" type in unpack_entry_data()\n>  - index-pack: report correct bad object offsets even if they are large\n>  - index-pack: correct \"len\" type in unpack_data()\n>  - sha1_file.c: use type off_t* for object_info->disk_sizep\n>  - pack-objects: pass length to check_pack_crc() without truncation\n>\n>  \"git pack-objects\" and \"git index-pack\" mostly operate with off_t\n>  when talking about the offset of objects in a packfile, but there\n>  were a handful of places that used \"unsigned long\" to hold that\n>  value, leading to an unintended truncation.\n\nOn the subject of truncation, there is something else I should note.\nThe field sd_size in struct stat_data is 32 bits, so large files will\noverflow it too, regardless of platforms. I did not do anything\nbecause I checked and double checked and was pretty sure we did not\nuse it for anything meaningful (as a file size). To us, it's just\nanother random number, like st_ino, that we check to detect if a file\nhas changed.\n\nIt's probably just an oversight (it comes from the very first \"the\ninformation manager from hell\" commit). But it's not worth changing\nindex format now to extend it to 64 bits, I think. So it's ok, no\nworry about it, but we should probably make clear that this is not\ntrue file size, and don't anybody ever use it as such. Maybe rename it\nto \"size_hash\" or something.\n-- \nDuy\n"},{"id":"291370","messageId":"xmqqh9bt1ldy.fsf@gitster.mtv.corp.google.com","threadId":"42835","inReplyTo":"CACsJy8CVJr6-9CnyrOU4UoPPGu6Ovn_=-2YKeqC8Lp_rVnh5fg@mail.gmail.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-07-13T17:46:33Z","receivedAt":"2016-07-13T17:47:46Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Duy Nguyen <pclouds@gmail.com> writes:\n\n> On the subject of truncation, there is something else I should note.\n> The field sd_size in struct stat_data is 32 bits, so large files will\n> overflow it too, regardless of platforms. I did not do anything\n> because I checked and double checked and was pretty sure we did not\n> use it for anything meaningful (as a file size). To us, it's just\n> another random number, like st_ino, that we check to detect if a file\n> has changed.\n\nYes, the comparison to flip DATA_CHANGED bit near the end of\nmatch_stat_data() has a cast for that exact reason.  It might\ndeserve a comment there.\n"},{"id":"291371","messageId":"CAGZ79kYUMX7wewo2QEWQGU9sGR76XjrKJ3uJxpLnyWoZeZ6WXA@mail.gmail.com","threadId":"42835","inReplyTo":"xmqqpoqh1m0o.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Stefan Beller","fromEmail":"sbeller@google.com","sentAt":"2016-07-13T17:52:59Z","receivedAt":"2016-07-13T17:53:57Z","isPatch":false,"sender":{"key":"stefanbeller@gmail.com","avatar":"https://avatars.githubusercontent.com/u/455868?v=4"},"body":"On Wed, Jul 13, 2016 at 10:32 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> Stefan Beller <sbeller@google.com> writes:\n>\n>>> * sb/push-options (2016-07-12) 5 commits\n>>>  - add a test for push options\n>>>  - push: accept push options\n>>>  - SQUASH???\n>>\n>> Squash? I do not find a squashable commit in what you pushed,\n>> do you intend to squash the first 2 patches instead?\n\nOh I pulled a few minutes before you sent this email, and forgot\nthat you likely have pushed again when sending this email. :/\nThanks!\n\n>> Yeah there were some late comments, so I did not reroll right away.\n>> I think Shawns proposal to have a receive.maxCommandBytes is a\n>> good way for an overall upper bound, but how does it stop us from\n>> going forward with this series?\n>\n> If we were to do maxcommandbytes, then max_options would become\n> irrelevant, no?\n\nMaybe?\n\nI do not know what kind of safety measures we want in place here, and\nif we want to go for overlapping things?\n\nCurrently there are none at all in your upstream code, although you cannot\npush arbitrary large things to either Shawns or Peffs $Dayjob servers, so\nI wonder if we want to either agree on one format or on many overlapping\nthings, as some different hosts may perceive different things as DoS threats,\nso they can fine tune as they want?\n\nIn the Gerrit world, you have a ref per code review, such that it is easy to\nhave 50k refs or more, similar to the repo Jeff pointed out [1], that has 40k\ntags (and getting a new tag every 2 hours apparently).\n\nSo I could understand if different services care about the different loads\n(refs vs push options) differently (one would want to allow unlimited refs\npushing for mirroring such repos as pointed out above, while another\none might care about the total load of the server for a single rogue user)\n\nThanks,\nStefan\n\n[1] https://github.com/JetBrains/intellij-community\n"},{"id":"291374","messageId":"CAPc5daU1eD5DVqO0A9LZ=UyZMOoO2RfHk8Lm48Oy0-26q+1Lhg@mail.gmail.com","threadId":"42835","inReplyTo":"CAGZ79kYUMX7wewo2QEWQGU9sGR76XjrKJ3uJxpLnyWoZeZ6WXA@mail.gmail.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-07-13T17:55:23Z","receivedAt":"2016-07-13T17:56:06Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"On Wed, Jul 13, 2016 at 10:52 AM, Stefan Beller <sbeller@google.com> wrote:\n> On Wed, Jul 13, 2016 at 10:32 AM, Junio C Hamano <gitster@pobox.com> wrote:\n>> Stefan Beller <sbeller@google.com> writes:\n>>\n>>>> * sb/push-options (2016-07-12) 5 commits\n>>>>  - add a test for push options\n>>>>  - push: accept push options\n>>>>  - SQUASH???\n>>>\n>>> Squash? I do not find a squashable commit in what you pushed,\n>>> do you intend to squash the first 2 patches instead?\n>\n> Oh I pulled a few minutes before you sent this email, and forgot\n> that you likely have pushed again when sending this email. :/\n\nThere were no multiple pushes involved.\n\nI prepare what is to be pushed out, update the what's cooking report,\npush and then send out the what's cooking report (which also is on\nthe 'todo' branch).\n\nBut there is this thing called propagation delay ;-)\n"},{"id":"291395","messageId":"xmqqinw9yxdu.fsf@gitster.mtv.corp.google.com","threadId":"42835","inReplyTo":"CAGZ79kYUMX7wewo2QEWQGU9sGR76XjrKJ3uJxpLnyWoZeZ6WXA@mail.gmail.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-07-13T22:41:01Z","receivedAt":"2016-07-13T22:41:11Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Stefan Beller <sbeller@google.com> writes:\n\n>>> I think Shawns proposal to have a receive.maxCommandBytes is a\n>>> good way for an overall upper bound, but how does it stop us from\n>>> going forward with this series?\n>>\n>> If we were to do maxcommandbytes, then max_options would become\n>> irrelevant, no?\n>\n> Maybe?\n>\n> I do not know what kind of safety measures we want in place here, and\n> if we want to go for overlapping things?\n>\n> Currently there are none at all in your upstream code, although you cannot\n> push arbitrary large things to either Shawns or Peffs $Dayjob servers, so\n> I wonder if we want to either agree on one format or on many overlapping\n> things, as some different hosts may perceive different things as DoS threats,\n> so they can fine tune as they want?\n\nI think those extra knobs can come later.  If we are not going to\nlimit with max_options in the end, however, wouldn't it be more\nnatural for the initial iteration without any configuration not to\nhave hard-coded max_options at all?\n\nAs to the \"SQUASH???\" compilation fix, I can squash it to the one\nimmediately below it locally; I didn't do so in today's pushout, as\nit was still unclear if you are already working on a reroll (in\nwhich case anything I would do would be a wasted effort).\n\n\n"},{"id":"291396","messageId":"20160713224256.GA8980@sigill.intra.peff.net","threadId":"42835","inReplyTo":"xmqqinw9yxdu.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-07-13T22:42:56Z","receivedAt":"2016-07-13T22:43:08Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Wed, Jul 13, 2016 at 03:41:01PM -0700, Junio C Hamano wrote:\n\n> Stefan Beller <sbeller@google.com> writes:\n> \n> >>> I think Shawns proposal to have a receive.maxCommandBytes is a\n> >>> good way for an overall upper bound, but how does it stop us from\n> >>> going forward with this series?\n> >>\n> >> If we were to do maxcommandbytes, then max_options would become\n> >> irrelevant, no?\n> >\n> > Maybe?\n> >\n> > I do not know what kind of safety measures we want in place here, and\n> > if we want to go for overlapping things?\n> >\n> > Currently there are none at all in your upstream code, although you cannot\n> > push arbitrary large things to either Shawns or Peffs $Dayjob servers, so\n> > I wonder if we want to either agree on one format or on many overlapping\n> > things, as some different hosts may perceive different things as DoS threats,\n> > so they can fine tune as they want?\n> \n> I think those extra knobs can come later.  If we are not going to\n> limit with max_options in the end, however, wouldn't it be more\n> natural for the initial iteration without any configuration not to\n> have hard-coded max_options at all?\n\nYeah, I am OK with adding restrictive knobs later as a separate topic.\nAs Stefan notes, upstream does not have the other knobs anyway, and IIRC\nthe push-options feature is not even enabled by default.\n\n-Peff\n"},{"id":"291411","messageId":"alpine.DEB.2.20.1607141454500.6426@virtualbox","threadId":"42835","inReplyTo":"xmqqy4551nph.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2016-07-14T12:59:30Z","receivedAt":"2016-07-14T12:59:43Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Wed, 13 Jul 2016, Junio C Hamano wrote:\n\n> * js/t0006-for-v2.9.2 (2016-07-12) 1 commit\n>  - t0006: skip \"far in the future\" test when unsigned long is not long enough\n> \n>  A test merged to v2.9.1 forgot that the feature it was testing\n>  would not work on a platform with 32-bit time_t/unsigned long and\n>  reported breakage.  Skip the tests that cannot run correctly on\n>  such platforms.\n> \n>  Waiting for an Ack; will fast-track down to 'maint' to cut v2.9.2.\n\nIf you are waiting for my okay, then go ahead and wait no more.\n\nI still do not like the current form of the patch, even if it was\nessentially my work, but I have bigger fish to fry: I am chasing down two\nother regressions on `master`, I have to move that `git status -vvp` topic\nalong, and I have to get the index-helper to run on Windows. Before even\ncoming back to the \"unsigned long -> time_t\" patch series.\n\nSo in this case, \"it works\" has to be good enough for me, I guess.\n\nCiao,\nDscho\n"},{"id":"291412","messageId":"alpine.DEB.2.20.1607141505160.6426@virtualbox","threadId":"42835","inReplyTo":"xmqqy4551nph.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2016-07-14T13:15:13Z","receivedAt":"2016-07-14T13:15:41Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Wed, 13 Jul 2016, Junio C Hamano wrote:\n\n> * jc/renormalize-merge-kill-safer-crlf (2016-07-12) 2 commits\n>  - merge: avoid \"safer crlf\" during recording of merge results\n\nI like the verbose commit message, it really makes it easier to understand\nthe issue as well as the solution. As to the diff:\n\n+       ret = add_cache_entry(ce, options);\n+       if (refresh) {\n\nShould we really refresh, even if ret < 0?\n\n+               struct cache_entry *nce;\n+\n+               nce = refresh_cache_entry(ce, CE_MATCH_REFRESH | CE_MATCH_IGNORE_MISSING);\n\nThis line is overly long, but there is a *lot* of precedent for that in\nmerge-recursive.c, unfortunately. So this is just a remark, not an\nobjection.\n\n>  - convert: unify the \"auto\" handling of CRLF\n\nI *think* this is a good thing to do. And I also have to admit that the\nonly thing I can say about that test matrix in t0027 (both pre- and\npost-image) is that it is visually mesmerizing. So I cannot even say\nwhether those changes make sense to me because I cannot wrap my head\naround the changes in the tests.\n\nCiao,\nDscho\n"},{"id":"291413","messageId":"alpine.DEB.2.20.1607141542250.6426@virtualbox","threadId":"42835","inReplyTo":"xmqqy4551nph.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2016-07-14T13:46:27Z","receivedAt":"2016-07-14T13:46:44Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Wed, 13 Jul 2016, Junio C Hamano wrote:\n\n> * dt/index-helper (2016-07-06) 21 commits\n>  - index-helper: indexhelper.exitAfter config\n>  - trace: measure where the time is spent in the index-heavy operations\n>  - index-helper: optionally automatically run\n>  - index-helper: autorun mode\n>  - index-helper: don't run if already running\n>  - index-helper: kill mode\n>  - watchman: add a config option to enable the extension\n>  - unpack-trees: preserve index extensions\n>  - update-index: enable/disable watchman support\n>  - index-helper: use watchman to avoid refreshing index with lstat()\n>  - watchman: support watchman to reduce index refresh cost\n>  - read-cache: add watchman 'WAMA' extension\n>  - index-helper: log warnings\n>  - index-helper: add --detach\n>  - daemonize(): set a flag before exiting the main process\n>  - index-helper: add --strict\n>  - index-helper: new daemon for caching index and related stuff\n>  - unix-socket.c: add stub implementation when unix sockets are not supported\n>  - pkt-line: add gentle version of packet_write\n>  - read-cache: allow to keep mmap'd memory after reading\n>  - read-cache.c: fix constness of verify_hdr()\n> \n>  A new \"index-helper\" daemon has been introduced to give newly\n>  spawned Git process a quicker access to the data in the index, and\n>  optionally interface with the watchman daemon to further reduce the\n>  refresh cost.\n> \n>  Will merge to 'next'.\n> \n>  Is everybody happy with this version?\n>  At v14.\n\nI am trying to get back to working on the Windows support for this. I had\nsomething that compiled but did not quite manage to do the IPC on Monday\nevening, and have been scrambling with too much other stuff preventing me\nfrom getting back to that.\n\nThe reason I mention this is: I wanted to get it working first just to be\nable to determine whether there are possible improvements to the design\nthat would make things much easier to port to non-Unix-sockets-capable\nsystems.\n\nOh, and v14 has a bug that I reported already:\nhttp://article.gmane.org/gmane.comp.version-control.git/298949\n\nCiao,\nDscho\n"},{"id":"291424","messageId":"xmqqzipkrzp2.fsf@gitster.mtv.corp.google.com","threadId":"42835","inReplyTo":"alpine.DEB.2.20.1607141505160.6426@virtualbox","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-07-14T15:45:13Z","receivedAt":"2016-07-14T15:45:22Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> +       ret = add_cache_entry(ce, options);\n> +       if (refresh) {\n>\n> Should we really refresh, even if ret < 0?\n\nAs we stopped calling make_cache_entry() with REFRESH flag on, we\ncan change this not to refresh if we want to, and I think we can\nskip refresh without compromising correctness.  But I'd prefer to\nsee that change as a separate \"optimization\" step---after all, the\noriginal before this change unconditionally refreshed before even\ncalling add_cache_entry() and knowing the result of it.\n\n> +               struct cache_entry *nce;\n> +\n> +               nce = refresh_cache_entry(ce, CE_MATCH_REFRESH | CE_MATCH_IGNORE_MISSING);\n>\n> This line is overly long, but there is a *lot* of precedent for that in\n> merge-recursive.c, unfortunately. So this is just a remark, not an\n> objection.\n\nYes, I had the same objection to the original codebase while I was\ntouching it.\n\nThanks.\n"},{"id":"291426","messageId":"xmqqvb08rzjv.fsf@gitster.mtv.corp.google.com","threadId":"42835","inReplyTo":"alpine.DEB.2.20.1607141542250.6426@virtualbox","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-07-14T15:48:20Z","receivedAt":"2016-07-14T15:48:28Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> Oh, and v14 has a bug that I reported already:\n> http://article.gmane.org/gmane.comp.version-control.git/298949\n\nThese two lines are the most helpful kind of response to \"What's\ncooking\" report.  Highly appreciated.\n\nThe value of the report to me primarily is to make sure other people\ncan _stop_ me from merging things prematurely.\n\nThanks.\n"},{"id":"291604","messageId":"FB76544F-16F7-45CA-9649-FD62EE44B0DE@gmail.com","threadId":"42835","inReplyTo":"xmqqy4551nph.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-07-16T20:54:39Z","receivedAt":"2016-07-16T20:54:46Z","isPatch":false,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 13 Jul 2016, at 18:56, Junio C Hamano <gitster@pobox.com> wrote:\n> \n...\n> \n> * ew/http-walker (2016-07-12) 3 commits\n> - http-walker: reduce O(n) ops with doubly-linked list\n> - http: avoid disconnecting on 404s for loose objects\n> - http-walker: remove unused parameter from fetch_object\n> \n> Optimize dumb http transport on the client side.\n\nIt looks like as if this topic breaks the OS X build because \nit defines LIST_HEAD. LIST_HEAD is already defined in \n/usr/include/sys/queue.h. \nSee: https://travis-ci.org/git/git/jobs/145121761\n\n- Lars\n"},{"id":"291605","messageId":"20160716210454.GA7849@starla","threadId":"42835","inReplyTo":"FB76544F-16F7-45CA-9649-FD62EE44B0DE@gmail.com","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Eric Wong","fromEmail":"e@80x24.org","sentAt":"2016-07-16T21:04:54Z","receivedAt":"2016-07-16T21:05:02Z","isPatch":false,"sender":{"key":"e@80x24.org","avatar":null},"body":"Lars Schneider <larsxschneider@gmail.com> wrote:\n> > On 13 Jul 2016, at 18:56, Junio C Hamano <gitster@pobox.com> wrote:\n> > * ew/http-walker (2016-07-12) 3 commits\n> > - http-walker: reduce O(n) ops with doubly-linked list\n> > - http: avoid disconnecting on 404s for loose objects\n> > - http-walker: remove unused parameter from fetch_object\n> > \n> > Optimize dumb http transport on the client side.\n> \n> It looks like as if this topic breaks the OS X build because \n> it defines LIST_HEAD. LIST_HEAD is already defined in \n> /usr/include/sys/queue.h. \n\nOops, I suppose GIT_LIST_HEAD is an acceptable name?\n(looks a bit like a refname, though...).\n\nOr maybe CDS_LIST_HEAD (since I originally took it from the cds\nnamespace under urcu)\n\nI also wonder where we use sys/queue.h, since I use\nLIST_HEAD from ccan/list/list.h in a different project\nwithout conflicts...\n\n> See: https://travis-ci.org/git/git/jobs/145121761\n\nIs there a way to get plain-text logs?  No JavaScript, here.\nThanks.\n"},{"id":"291609","messageId":"644FFEA8-3A08-418B-A29C-C45CE5F4D264@gmail.com","threadId":"42835","inReplyTo":"20160716210454.GA7849@starla","subject":"Re: What's cooking in git.git (Jul 2016, #05; Wed, 13)","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-07-16T22:04:50Z","receivedAt":"2016-07-16T22:04:58Z","isPatch":false,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 16 Jul 2016, at 23:04, Eric Wong <e@80x24.org> wrote:\n> \n> Lars Schneider <larsxschneider@gmail.com> wrote:\n>>> On 13 Jul 2016, at 18:56, Junio C Hamano <gitster@pobox.com> wrote:\n>>> * ew/http-walker (2016-07-12) 3 commits\n>>> - http-walker: reduce O(n) ops with doubly-linked list\n>>> - http: avoid disconnecting on 404s for loose objects\n>>> - http-walker: remove unused parameter from fetch_object\n>>> \n>>> Optimize dumb http transport on the client side.\n>> \n>> It looks like as if this topic breaks the OS X build because \n>> it defines LIST_HEAD. LIST_HEAD is already defined in \n>> /usr/include/sys/queue.h. \n> \n> Oops, I suppose GIT_LIST_HEAD is an acceptable name?\n> (looks a bit like a refname, though...).\n> \n> Or maybe CDS_LIST_HEAD (since I originally took it from the cds\n> namespace under urcu)\n> \n> I also wonder where we use sys/queue.h, since I use\n> LIST_HEAD from ccan/list/list.h in a different project\n> without conflicts...\n> \n>> See: https://travis-ci.org/git/git/jobs/145121761\n> \n> Is there a way to get plain-text logs?  No JavaScript, here.\n> Thanks.\n\nHere you go:\nhttps://api.travis-ci.org/jobs/145121761/log.txt?deansi=true\n\n- Lars\n\n\n"},{"id":"291610","messageId":"20160717002533.GA14200@whir","threadId":"42835","inReplyTo":"20160716210454.GA7849@starla","subject":"[PATCH] list: avoid incompatibility with *BSD sys/queue.h","fromName":"Eric Wong","fromEmail":"e@80x24.org","sentAt":"2016-07-17T00:25:34Z","receivedAt":"2016-07-17T00:25:41Z","isPatch":true,"sender":{"key":"e@80x24.org","avatar":null},"body":"Eric Wong <e@80x24.org> wrote:\n> Lars Schneider <larsxschneider@gmail.com> wrote:\n> > It looks like as if this topic breaks the OS X build because \n> > it defines LIST_HEAD. LIST_HEAD is already defined in \n> > /usr/include/sys/queue.h. \n> \n> Oops, I suppose GIT_LIST_HEAD is an acceptable name?\n> (looks a bit like a refname, though...).\n> \n> Or maybe CDS_LIST_HEAD (since I originally took it from the cds\n> namespace under urcu)\n\nNaming things is hard; I think it's better to just undef an\nexisting LIST_HEAD, instead, since it's unlikely we'd ever use\nsys/queue.h from *BSD.  (sys/queue.h is branchier, and IMHO\nsys/queue.h macros are uglier than list_entry (container_of))\n\n> I also wonder where we use sys/queue.h, since I use\n> LIST_HEAD from ccan/list/list.h in a different project\n> without conflicts...\n\nStill wondering... Checking sys/mman.h in an old FreeBSD source\ntree I had lying around reveals \"#include <sys/queue.h>\" is\nguarded by \"#if defined(_KERNEL)\", so it mman.h wouldn't pull\nit in for userspace builds...\n\n-----8<------\nSubject: [PATCH] list: avoid incompatibility with *BSD sys/queue.h\n\nSomehow, the OS X build pulls in sys/queue.h and causes\nconflicts with the LIST_HEAD macro, here.\n\nref: http://mid.gmane.org/FB76544F-16F7-45CA-9649-FD62EE44B0DE@gmail.com\n\nReported-by: Lars Schneider <larsxschneider@gmail.com>\nSigned-off-by: Eric Wong <e@80x24.org>\n---\n list.h | 2 ++\n 1 file changed, 2 insertions(+)\n\ndiff --git a/list.h b/list.h\nindex f65edce..a226a87 100644\n--- a/list.h\n+++ b/list.h\n@@ -36,6 +36,8 @@ struct list_head {\n \tstruct list_head *next, *prev;\n };\n \n+/* avoid conflicts with BSD-only sys/queue.h */\n+#undef LIST_HEAD\n /* Define a variable with the head and tail of the list. */\n #define LIST_HEAD(name) \\\n \tstruct list_head name = { &(name), &(name) }\n-- \nEW\n"},{"id":"291613","messageId":"CAPig+cRvhbKwr=QJAyp=sYLLGDx-B2EHovHpn8Z1701stQMi1g@mail.gmail.com","threadId":"42835","inReplyTo":"20160717002533.GA14200@whir","subject":"Re: [PATCH] list: avoid incompatibility with *BSD sys/queue.h","fromName":"Eric Sunshine","fromEmail":"sunshine@sunshineco.com","sentAt":"2016-07-17T05:58:49Z","receivedAt":"2016-07-17T05:58:58Z","isPatch":true,"sender":{"key":"sunshine@sunshineco.com","avatar":"https://avatars.githubusercontent.com/u/163641?v=4"},"body":"On Sat, Jul 16, 2016 at 8:25 PM, Eric Wong <e@80x24.org> wrote:\n> Eric Wong <e@80x24.org> wrote:\n>> I also wonder where we use sys/queue.h, since I use\n>> LIST_HEAD from ccan/list/list.h in a different project\n>> without conflicts...\n>\n> Still wondering... Checking sys/mman.h in an old FreeBSD source\n> tree I had lying around reveals \"#include <sys/queue.h>\" is\n> guarded by \"#if defined(_KERNEL)\", so it mman.h wouldn't pull\n> it in for userspace builds...\n\nIt's pulled in like this:\n\n    git-compat-util.h ->\n    sys/sysctl.h ->\n    sys/ucred.h ->\n    sys/queue.h\n\nVery reminiscent of [1].\n\n[1]: http://git.661346.n2.nabble.com/PATCH-ewah-bitmap-silence-warning-about-MASK-macro-redefinition-td7632287.html\n"},{"id":"291639","messageId":"20160717230718.GA8569@starla","threadId":"42835","inReplyTo":"CAPig+cRvhbKwr=QJAyp=sYLLGDx-B2EHovHpn8Z1701stQMi1g@mail.gmail.com","subject":"Re: [PATCH] list: avoid incompatibility with *BSD sys/queue.h","fromName":"Eric Wong","fromEmail":"e@80x24.org","sentAt":"2016-07-17T23:07:18Z","receivedAt":"2016-07-17T23:07:24Z","isPatch":true,"sender":{"key":"e@80x24.org","avatar":null},"body":"Eric Sunshine <sunshine@sunshineco.com> wrote:\n> On Sat, Jul 16, 2016 at 8:25 PM, Eric Wong <e@80x24.org> wrote:\n> > Eric Wong <e@80x24.org> wrote:\n> >> I also wonder where we use sys/queue.h, since I use\n> >> LIST_HEAD from ccan/list/list.h in a different project\n> >> without conflicts...\n> >\n> > Still wondering... Checking sys/mman.h in an old FreeBSD source\n> > tree I had lying around reveals \"#include <sys/queue.h>\" is\n> > guarded by \"#if defined(_KERNEL)\", so it mman.h wouldn't pull\n> > it in for userspace builds...\n> \n> It's pulled in like this:\n> \n>     git-compat-util.h ->\n>     sys/sysctl.h ->\n>     sys/ucred.h ->\n>     sys/queue.h\n\nAh, thanks (and I've been sidetracked into using FreeBSD again :>)\n\n> Very reminiscent of [1].\n> \n> [1]: http://git.661346.n2.nabble.com/PATCH-ewah-bitmap-silence-warning-about-MASK-macro-redefinition-td7632287.html\n\nAlright.  In this case, I think \"LIST_HEAD\" is sufficiently\ndescriptive compared to more-generically named \"MASK\" or \"BLOCK\"\nthat it's harmless to \"#undef LIST_HEAD\" here without worrying\nabout conflicts or breaking outside code.\n"},{"id":"291655","messageId":"FA45931D-E1F2-4132-8D0D-C35339DA230D@gmail.com","threadId":"42835","inReplyTo":"20160717002533.GA14200@whir","subject":"Re: [PATCH] list: avoid incompatibility with *BSD sys/queue.h","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-07-18T16:08:12Z","receivedAt":"2016-07-18T16:08:22Z","isPatch":true,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 17 Jul 2016, at 02:25, Eric Wong <e@80x24.org> wrote:\n> \n> Eric Wong <e@80x24.org> wrote:\n>> Lars Schneider <larsxschneider@gmail.com> wrote:\n>>> It looks like as if this topic breaks the OS X build because \n>>> it defines LIST_HEAD. LIST_HEAD is already defined in \n>>> /usr/include/sys/queue.h. \n>> \n>> Oops, I suppose GIT_LIST_HEAD is an acceptable name?\n>> (looks a bit like a refname, though...).\n>> \n>> Or maybe CDS_LIST_HEAD (since I originally took it from the cds\n>> namespace under urcu)\n> \n> Naming things is hard; I think it's better to just undef an\n> existing LIST_HEAD, instead, since it's unlikely we'd ever use\n> sys/queue.h from *BSD.  (sys/queue.h is branchier, and IMHO\n> sys/queue.h macros are uglier than list_entry (container_of))\nThat sounds like the best solution to me, too.\n\n\n> I also wonder where we use sys/queue.h, since I use\n>> LIST_HEAD from ccan/list/list.h in a different project\n>> without conflicts...\n> \n> Still wondering... Checking sys/mman.h in an old FreeBSD source\n> tree I had lying around reveals \"#include <sys/queue.h>\" is\n> guarded by \"#if defined(_KERNEL)\", so it mman.h wouldn't pull\n> it in for userspace builds...\n> \n> -----8<------\n> Subject: [PATCH] list: avoid incompatibility with *BSD sys/queue.h\n> \n> Somehow, the OS X build pulls in sys/queue.h and causes\n> conflicts with the LIST_HEAD macro, here.\n> \n> ref: http://mid.gmane.org/FB76544F-16F7-45CA-9649-FD62EE44B0DE@gmail.com\n> \n> Reported-by: Lars Schneider <larsxschneider@gmail.com>\n> Signed-off-by: Eric Wong <e@80x24.org>\n> ---\n> list.h | 2 ++\n> 1 file changed, 2 insertions(+)\n> \n> diff --git a/list.h b/list.h\n> index f65edce..a226a87 100644\n> --- a/list.h\n> +++ b/list.h\n> @@ -36,6 +36,8 @@ struct list_head {\n> \tstruct list_head *next, *prev;\n> };\n> \n> +/* avoid conflicts with BSD-only sys/queue.h */\n> +#undef LIST_HEAD\n> /* Define a variable with the head and tail of the list. */\n> #define LIST_HEAD(name) \\\n> \tstruct list_head name = { &(name), &(name) }\n> -- \n> EW\n\nThis patch compiles without trouble on my local OS X.\n\nThanks,\nLars\n\n"}]}