{"thread":{"id":"44403","subject":"What's cooking in git.git (Oct 2016, #09; Mon, 31)","startedAt":"2016-10-31T21:50:06Z","lastAt":"2016-11-08T09:03:47Z","messageCount":30,"participants":["Junio C Hamano","Torsten Bögershausen","Johannes Schindelin","Jeff King","Johannes Sixt","Lars Schneider","Karthik Nayak"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"305208","messageId":"xmqqwpgoqjct.fsf@gitster.mtv.corp.google.com","threadId":"44403","inReplyTo":null,"subject":"What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-10-31T21:49:54Z","receivedAt":"2016-10-31T21:50:06Z","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\nGit v2.10.2, the second maintenance release for 2.10.x track, has\nbeen tagged.  On the master front, an early preview v2.11.0-rc0 has\nbeen tagged.  An updated, slightly slipped from the original,\nschedule is found at http://tinyurl.com/gitCal and I am hoping that\nwe can conclude this cycle before US Thanksgiving.\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[Graduated to \"master\"]\n\n* ak/pre-receive-hook-template-modefix (2016-10-28) 1 commit\n  (merged to 'next' on 2016-10-28 at 86d95836a3)\n + pre-receive.sample: mark it executable\n\n A trivial clean-up to a recently graduated topic.\n\n\n* ak/sh-setup-dot-source-i18n-fix (2016-10-30) 1 commit\n  (merged to 'next' on 2016-10-31 at 538a72700e)\n + git-sh-setup: be explicit where to dot-source git-sh-i18n from.\n\n Recent update to git-sh-setup (a library of shell functions that\n are used by our in-tree scripted Porcelain commands) included\n another shell library git-sh-i18n without specifying where it is,\n relying on the $PATH.  This has been fixed to be more explicit by\n prefixing $(git --exec-path) output in front.\n\n\n* aw/numbered-stash (2016-10-26) 1 commit\n  (merged to 'next' on 2016-10-26 at 8d9325fa3a)\n + stash: allow stashes to be referenced by index only\n\n The user always has to say \"stash@{$N}\" when naming a single\n element in the default location of the stash, i.e. reflogs in\n refs/stash.  The \"git stash\" command learned to accept \"git stash\n apply 4\" as a short-hand for \"git stash apply stash@{4}\".\n\n\n* jk/common-main (2016-10-27) 1 commit\n  (merged to 'next' on 2016-10-28 at fcdd4f8a26)\n + git-compat-util: move content inside ifdef/endif guards\n\n A trivial clean-up to a recently graduated topic.\n\n\n* jk/rebase-config-insn-fmt-docfix (2016-10-30) 1 commit\n  (merged to 'next' on 2016-10-31 at d48e20ffa2)\n + doc: fix missing \"::\" in config list\n\n Documentation fix.\n\n\n* jt/trailer-with-cruft (2016-10-21) 8 commits\n  (merged to 'next' on 2016-10-27 at b5d1a21811)\n + trailer: support values folded to multiple lines\n + trailer: forbid leading whitespace in trailers\n + trailer: allow non-trailers in trailer block\n + trailer: clarify failure modes in parse_trailer\n + trailer: make args have their own struct\n + trailer: streamline trailer item create and add\n + trailer: use list.h for doubly-linked list\n + trailer: improve const correctness\n (this branch is used by jt/use-trailer-api-in-commands.)\n\n Update \"interpret-trailers\" machinery and teaches it that people in\n real world write all sorts of crufts in the \"trailer\" that was\n originally designed to have the neat-o \"Mail-Header: like thing\"\n and nothing else.\n\n\n* ls/filter-process (2016-10-17) 14 commits\n  (merged to 'next' on 2016-10-19 at ffd0de042c)\n + contrib/long-running-filter: add long running filter example\n + convert: add filter.<driver>.process option\n + convert: prepare filter.<driver>.process option\n + convert: make apply_filter() adhere to standard Git error handling\n + pkt-line: add functions to read/write flush terminated packet streams\n + pkt-line: add packet_write_gently()\n + pkt-line: add packet_flush_gently()\n + pkt-line: add packet_write_fmt_gently()\n + pkt-line: extract set_packet_header()\n + pkt-line: rename packet_write() to packet_write_fmt()\n + run-command: add clean_on_exit_handler\n + run-command: move check_pipe() from write_or_die to run_command\n + convert: modernize tests\n + convert: quote filter names in error messages\n\n The smudge/clean filter API expect an external process is spawned\n to filter the contents for each path that has a filter defined.  A\n new type of \"process\" filter API has been added to allow the first\n request to run the filter for a path to spawn a single process, and\n all filtering need is served by this single process for multiple\n paths, reducing the process creation overhead.\n\n\n* ls/git-open-cloexec (2016-10-25) 3 commits\n  (merged to 'next' on 2016-10-26 at f7259cbddb)\n + read-cache: make sure file handles are not inherited by child processes\n + sha1_file: open window into packfiles with O_CLOEXEC\n + sha1_file: rename git_open_noatime() to git_open()\n (this branch is used by jc/git-open-cloexec.)\n\n Git generally does not explicitly close file descriptors that were\n open in the parent process when spawning a child process, but most\n of the time the child does not want to access them. As Windows does\n not allow removing or renaming a file that has a file descriptor\n open, a slow-to-exit child can even break the parent process by\n holding onto them.  Use O_CLOEXEC flag to open files in various\n codepaths.\n\n\n* nd/test-helpers (2016-10-27) 1 commit\n  (merged to 'next' on 2016-10-31 at 9780fe6d90)\n + valgrind: support test helpers\n\n Update to the test framework made in 2.9 timeframe broke running\n the tests under valgrind, which has been fixed.\n\n\n* rs/commit-pptr-simplify (2016-10-30) 1 commit\n  (merged to 'next' on 2016-10-31 at ddeed2e66a)\n + commit: simplify building parents list\n\n Code simplification.\n\n\n* sc/fmt-merge-msg-doc-markup-fix (2016-10-28) 1 commit\n  (merged to 'next' on 2016-10-31 at 198c259bb2)\n + Documentation/fmt-merge-msg: fix markup in example\n\n Documentation fix.\n\n--------------------------------------------------\n[New Topics]\n\n* jc/push-default-explicit (2016-10-28) 1 commit\n - push: do not use potentially ambiguous default refspec\n\n A lazy \"git push\" without refspec did not internally use a fully\n specified refspec to perform 'current', 'simple', or 'upstream'\n push, causing unnecessary \"ambiguous ref\" errors.\n\n Needs updates to the tests.\n\n\n* jt/use-trailer-api-in-commands (2016-10-28) 4 commits\n - sequencer: use trailer's trailer layout\n - trailer: have function to describe trailer layout\n - trailer: avoid unnecessary splitting on lines\n - commit: make ignore_non_trailer take buf/len\n\n Commands that operate on a log message and add lines to the trailer\n blocks, such as \"format-patch -s\", \"cherry-pick (-x|-s)\", and\n \"commit -s\", have been taught to use the logic of and share the\n code with \"git interpret-trailer\".\n\n--------------------------------------------------\n[Stalled]\n\n* hv/submodule-not-yet-pushed-fix (2016-10-10) 3 commits\n - batch check whether submodule needs pushing into one call\n - serialize collection of refs that contain submodule changes\n - serialize collection of changed submodules\n\n The code in \"git push\" to compute if any commit being pushed in the\n superproject binds a commit in a submodule that hasn't been pushed\n out was overly inefficient, making it unusable even for a small\n project that does not have any submodule but have a reasonable\n number of refs.\n\n Waiting for review.\n cf. <cover.1475851621.git.hvoigt@hvoigt.net>\n\n\n* sb/push-make-submodule-check-the-default (2016-10-10) 2 commits\n - push: change submodule default to check when submodules exist\n - submodule add: extend force flag to add existing repos\n\n Turn the default of \"push.recurseSubmodules\" to \"check\" when\n submodules seem to be in use.\n\n Will hold to wait for hv/submodule-not-yet-pushed-fix\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.  It is likely that to support a \"prime clone from CDN\", it\n would need a lot more than just \"these are the heads and the pack\n data is over there\", so this may not be sufficient.\n\n Will discard.\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 It has been two months without any support.  We may want to discard\n this.\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 Needs review.\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 Has been waiting for a review for too long without seeing anything.\n\n Will discard.\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 Has been waiting for a reroll for too long.\n cf. <xmqq60ypbeng.fsf@gitster.mtv.corp.google.com>\n\n Will discard.\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\n Will discard.\n\n--------------------------------------------------\n[Cooking]\n\n* nd/rebase-forget (2016-10-28) 1 commit\n - rebase: add --forget to cleanup rebase, leave HEAD untouched\n\n \"git rebase\" learned \"--forget\" option, which allows a user to\n remove the metadata left by an earlier \"git rebase\" that was\n manually aborted without using \"git rebase --abort\".\n\n Waiting for a reroll.\n\n\n* jc/git-open-cloexec (2016-10-31) 3 commits\n - sha1_file: stop opening files with O_NOATIME\n - git_open_cloexec(): use fcntl(2) w/ FD_CLOEXEC fallback\n - git_open(): untangle possible NOATIME and CLOEXEC interactions\n\n The codeflow of setting NOATIME and CLOEXEC on file descriptors Git\n opens has been simplified.\n\n We may want to drop the tip one.\n\n\n* jk/no-looking-at-dotgit-outside-repo-final (2016-10-26) 1 commit\n  (merged to 'next' on 2016-10-26 at 220e160451)\n + setup_git_env: avoid blind fall-back to \".git\"\n\n This is the endgame of the topic to avoid blindly falling back to\n \".git\" when the setup sequence said we are _not_ in Git repository.\n A corner case that happens to work right now may be broken by a\n call to die(\"BUG\").\n\n Will cook in 'next'.\n\n\n* jc/reset-unmerge (2016-10-24) 1 commit\n - reset: --unmerge\n\n After \"git add\" is run prematurely during a conflict resolution,\n \"git diff\" can no longer be used as a way to sanity check by\n looking at the combined diff.  \"git reset\" learned a new\n \"--unmerge\" option to recover from this situation.\n\n\n* jc/merge-base-fp-only (2016-10-19) 8 commits\n . merge-base: fp experiment\n - merge: allow to use only the fp-only merge bases\n - merge-base: limit the output to bases that are on first-parent chain\n - merge-base: mark bases that are on first-parent chain\n - merge-base: expose get_merge_bases_many_0() a bit more\n - merge-base: stop moving commits around in remove_redundant()\n - sha1_name: remove ONELINE_SEEN bit\n - commit: simplify fastpath of merge-base\n\n An experiment of merge-base that ignores common ancestors that are\n not on the first parent chain.\n\n\n* tb/convert-stream-check (2016-10-27) 2 commits\n - convert.c: stream and fast search for binary\n - read-cache: factor out get_sha1_from_index() helper\n\n End-of-line conversion sometimes needs to see if the current blob\n in the index has NULs and CRs to base its decision.  We used to\n always get a full statistics over the blob, but in many cases we\n can return early when we have seen \"enough\" (e.g. if we see a\n single NUL, the blob will be handled as binary).  The codepaths\n have been optimized by using streaming interface.\n\n Waiting for review.\n The tip seems to do too much in a single commit and may be better split.\n cf. <20161012134724.28287-1-tboegi@web.de>\n cf. <xmqqd1il5w4e.fsf@gitster.mtv.corp.google.com>\n\n\n* pb/bisect (2016-10-18) 27 commits\n - bisect--helper: remove the dequote in bisect_start()\n - bisect--helper: retire `--bisect-auto-next` subcommand\n - bisect--helper: retire `--bisect-autostart` subcommand\n - bisect--helper: retire `--bisect-write` subcommand\n - bisect--helper: `bisect_replay` shell function in C\n - bisect--helper: `bisect_log` shell function in C\n - bisect--helper: retire `--write-terms` subcommand\n - bisect--helper: retire `--check-expected-revs` subcommand\n - bisect--helper: `bisect_state` & `bisect_head` shell function in C\n - bisect--helper: `bisect_autostart` shell function in C\n - bisect--helper: retire `--next-all` subcommand\n - bisect--helper: retire `--bisect-clean-state` subcommand\n - bisect--helper: `bisect_next` and `bisect_auto_next` shell function in C\n - t6030: no cleanup with bad merge base\n - bisect--helper: `bisect_start` shell function partially in C\n - bisect--helper: `get_terms` & `bisect_terms` shell function in C\n - bisect--helper: `bisect_next_check` & bisect_voc shell function in C\n - bisect--helper: `check_and_set_terms` shell function in C\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 Move more parts of \"git bisect\" to C.\n\n Waiting for review.\n\n\n* st/verify-tag (2016-10-10) 7 commits\n - t/t7004-tag: Add --format specifier tests\n - t/t7030-verify-tag: Add --format specifier tests\n - builtin/tag: add --format argument for tag -v\n - builtin/verify-tag: add --format to verify-tag\n - tag: add format specifier to gpg_verify_tag\n - ref-filter: add function to print single ref_array_item\n - gpg-interface, tag: add GPG_VERIFY_QUIET flag\n\n \"git tag\" and \"git verify-tag\" learned to put GPG verification\n status in their \"--format=<placeholders>\" output format.\n\n Waiting for a reroll.\n cf. <20161007210721.20437-1-santiago@nyu.edu>\n\n\n* sb/attr (2016-10-28) 37 commits\n - completion: clone can initialize specific submodules\n - clone: add --init-submodule=<pathspec> switch\n - submodule update: add `--init-default-path` switch\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 - attr: keep attr stack for each check\n - SQUASH???\n - attr: convert to new threadsafe API\n - attr: make git_check_attr_counted static\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 - attr.c: pass struct git_attr_check down the callchain\n - attr.c: add push_stack() helper\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\n The attributes API has been updated so that it can later be\n optimized using the knowledge of which attributes are queried.\n Building on top of the updated API, the pathspec machinery learned\n to select only paths with given attributes set.\n\n Waiting for review.\n\n\n* va/i18n-perl-scripts (2016-10-20) 14 commits\n - i18n: difftool: mark warnings for translation\n - i18n: send-email: mark string with interpolation for translation\n - i18n: send-email: mark warnings and errors for translation\n - i18n: send-email: mark strings for translation\n - i18n: add--interactive: mark status words for translation\n - i18n: add--interactive: remove %patch_modes entries\n - i18n: add--interactive: mark edit_hunk_manually message for translation\n - i18n: add--interactive: i18n of help_patch_cmd\n - i18n: add--interactive: mark patch prompt for translation\n - i18n: add--interactive: mark plural strings\n - i18n: clean.c: match string with git-add--interactive.perl\n - i18n: add--interactive: mark strings with interpolation for translation\n - i18n: add--interactive: mark simple here-documents for translation\n - i18n: add--interactive: mark strings for translation\n\n Porcelain scripts written in Perl are getting internationalized.\n\n Waiting for review.\n cf. <20161010125449.7929-1-vascomalmeida@sapo.pt>\n\n\n* jc/latin-1 (2016-09-26) 2 commits\n  (merged to 'next' on 2016-09-28 at c8673e03c2)\n + utf8: accept \"latin-1\" as ISO-8859-1\n + utf8: refactor code to decide fallback encoding\n\n Some platforms no longer understand \"latin-1\" that is still seen in\n the wild in e-mail headers; replace them with \"iso-8859-1\" that is\n more widely known when conversion fails from/to it.\n\n Will hold to see if people scream.\n\n\n* sg/fix-versioncmp-with-common-suffix (2016-09-08) 5 commits\n - versioncmp: cope with common leading parts in versionsort.prereleaseSuffix\n - versioncmp: pass full tagnames to swap_prereleases()\n - t7004-tag: add version sort tests to show prerelease reordering issues\n - t7004-tag: use test_config helper\n - t7004-tag: delete unnecessary tags with test_when_finished\n\n The prereleaseSuffix feature of version comparison that is used in\n \"git tag -l\" did not correctly when two or more prereleases for the\n same release were present (e.g. when 2.0, 2.0-beta1, and 2.0-beta2\n are there and the code needs to compare 2.0-beta1 and 2.0-beta2).\n\n Waiting for a reroll.\n cf. <20160908223727.Horde.jVOOJ278ssZ3qkyjkmyqZD-@webmail.informatik.kit.edu>\n\n\n* jc/pull-rebase-ff (2016-07-28) 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* jc/merge-drop-old-syntax (2015-04-29) 1 commit\n  (merged to 'next' on 2016-10-11 at 8928c8b9b3)\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 cf. <5671DB28.8020901@kdbg.org>\n\n Will cook in 'next'.\n"},{"id":"305282","messageId":"20161102071646.GA5094@tb-raspi","threadId":"44403","inReplyTo":"xmqqwpgoqjct.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Torsten Bögershausen","fromEmail":"tboegi@web.de","sentAt":"2016-11-02T07:16:46Z","receivedAt":"2016-11-02T07:17:04Z","isPatch":false,"sender":{"key":"tboegi@web.de","avatar":"https://avatars.githubusercontent.com/u/7138363?v=4"},"body":"> \n> * tb/convert-stream-check (2016-10-27) 2 commits\n>  - convert.c: stream and fast search for binary\n>  - read-cache: factor out get_sha1_from_index() helper\n> \n>  End-of-line conversion sometimes needs to see if the current blob\n>  in the index has NULs and CRs to base its decision.  We used to\n>  always get a full statistics over the blob, but in many cases we\n>  can return early when we have seen \"enough\" (e.g. if we see a\n>  single NUL, the blob will be handled as binary).  The codepaths\n>  have been optimized by using streaming interface.\n> \n>  The tip seems to do too much in a single commit and may be better split.\n>  cf. <20161012134724.28287-1-tboegi@web.de>\n>  cf. <xmqqd1il5w4e.fsf@gitster.mtv.corp.google.com>\n\nReviews have been done, thanks everybody.\n\nIt looks to be a good \"proof of concept\".\n\nThe current series is far away from being ready, so please kick it\nout of pu and feel free to discard.\n \n\n \n"},{"id":"305283","messageId":"alpine.DEB.2.20.1611021054030.3264@virtualbox","threadId":"44403","inReplyTo":"xmqqwpgoqjct.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2016-11-02T09:57:19Z","receivedAt":"2016-11-02T09:57:33Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nOn Mon, 31 Oct 2016, Junio C Hamano wrote:\n\n> * jc/git-open-cloexec (2016-10-31) 3 commits\n>  - sha1_file: stop opening files with O_NOATIME\n>  - git_open_cloexec(): use fcntl(2) w/ FD_CLOEXEC fallback\n>  - git_open(): untangle possible NOATIME and CLOEXEC interactions\n> \n>  The codeflow of setting NOATIME and CLOEXEC on file descriptors Git\n>  opens has been simplified.\n\nThis branch (in particular, the \"use fcntl(2)\" one) breaks the build on\nWindows. Until this breakage is resolved, I won't be able to see (nor\nreport) any test breakages in `pu`.\n\nCiao,\nDscho\n"},{"id":"305284","messageId":"xmqq37jaf3cu.fsf@gitster.mtv.corp.google.com","threadId":"44403","inReplyTo":"20161102071646.GA5094@tb-raspi","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-11-02T12:55:29Z","receivedAt":"2016-11-02T12:55:42Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Torsten Bögershausen <tboegi@web.de> writes:\n\n>> * tb/convert-stream-check (2016-10-27) 2 commits\n>>  - convert.c: stream and fast search for binary\n>>  - read-cache: factor out get_sha1_from_index() helper\n>> \n>\n> It looks to be a good \"proof of concept\".\n>\n> The current series is far away from being ready, so please kick it\n> out of pu and feel free to discard.\n\nThanks for a heads-up.  Anything in 'pu' won't be of importance\nuntil 2.11 final, so please don't worry too much about it.\n"},{"id":"305285","messageId":"xmqqy412dopj.fsf@gitster.mtv.corp.google.com","threadId":"44403","inReplyTo":"alpine.DEB.2.20.1611021054030.3264@virtualbox","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2016-11-02T12:57:12Z","receivedAt":"2016-11-02T12:57: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> On Mon, 31 Oct 2016, Junio C Hamano wrote:\n>\n>> * jc/git-open-cloexec (2016-10-31) 3 commits\n>>  - sha1_file: stop opening files with O_NOATIME\n>>  - git_open_cloexec(): use fcntl(2) w/ FD_CLOEXEC fallback\n>>  - git_open(): untangle possible NOATIME and CLOEXEC interactions\n>> \n>>  The codeflow of setting NOATIME and CLOEXEC on file descriptors Git\n>>  opens has been simplified.\n>\n> This branch (in particular, the \"use fcntl(2)\" one) breaks the build on\n> Windows. Until this breakage is resolved, I won't be able to see (nor\n> report) any test breakages in `pu`.\n\nThanks for a heads-up.  Anything in 'pu' won't be of importance\nuntil 2.11 final, so please don't worry too much about it.  Instead\nplease do make sure the tip of 'master' is OK.\n\nHaving said that, an incremental update or replacement to help\npreparing it for post 2.11 final is appreciated ;-)\n\nFYI, I may be offline for a few days.\n"},{"id":"305297","messageId":"20161102170415.GA6420@tb-raspi","threadId":"44403","inReplyTo":"xmqqwpgoqjct.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Torsten Bögershausen","fromEmail":"tboegi@web.de","sentAt":"2016-11-02T17:04:15Z","receivedAt":"2016-11-02T17:04:30Z","isPatch":false,"sender":{"key":"tboegi@web.de","avatar":"https://avatars.githubusercontent.com/u/7138363?v=4"},"body":"> * ls/filter-process (2016-10-17) 14 commits\n>   (merged to 'next' on 2016-10-19 at ffd0de042c)\n\nSome (late, as I recently got a new battery for the Mac OS 10.6 test system) \ncomments:\nt0021 failes here:\n\n\nCan't locate object method \"flush\" via package \"IO::Handle\" at /Users/tb/projects/git/git.next/t/t0021/rot13-filter.pl line 90.\nfatal: The remote end hung up unexpectedly\n\n\nperl itself is 5.10 and we use the one shipped with Mac OS.\nWhy that ?\nt0021 uses the hard-coded path:\nt0021/rot13-filter.pl (around line 345) and the nice macro\nPERL_PATH from the Makefile is fully ignored.\n\nCommenting out the different \"flush\" makes the test hang, and I haven't digged further.\n\n"},{"id":"305304","messageId":"20161102174021.awhmbmuffbzv5b7t@sigill.intra.peff.net","threadId":"44403","inReplyTo":"20161102170415.GA6420@tb-raspi","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-02T17:40:21Z","receivedAt":"2016-11-02T17:40:28Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Wed, Nov 02, 2016 at 05:04:15PM +0000, Torsten Bögershausen wrote:\n\n> > * ls/filter-process (2016-10-17) 14 commits\n> >   (merged to 'next' on 2016-10-19 at ffd0de042c)\n> \n> Some (late, as I recently got a new battery for the Mac OS 10.6 test system) \n> comments:\n> t0021 failes here:\n> \n> \n> Can't locate object method \"flush\" via package \"IO::Handle\" at /Users/tb/projects/git/git.next/t/t0021/rot13-filter.pl line 90.\n> fatal: The remote end hung up unexpectedly\n> \n> \n> perl itself is 5.10 and we use the one shipped with Mac OS.\n\nWow, haven't seen that bug in a while[1]. The problem is that STDIN is a\nfilehandle object, but older versions of perl do not automatically load\nIO::Handle to get all of the methods. This was fixed in perl 5.13.\n\nWe can work around it with:\n\n  use IO::Handle;\n\nat the top of the script. That should work everywhere, as IO::Handle has\nbeen part of the core system for ages. But another option would be to\njust turn on autoflush, with:\n\n  $| = 1;\n\nat the top of the script (though it looks like we flush $debug, too, so\nwe'd probably need to \"select $debug; $| = 1\" there, too). The \"use\"\ncommand is preferable IMHO.\n\n> Why that ?\n> t0021 uses the hard-coded path:\n> t0021/rot13-filter.pl (around line 345) and the nice macro\n> PERL_PATH from the Makefile is fully ignored.\n\nYeah, we should be using PERL_PATH. Doing so inside the filter config\nvalue is probably a pain due to shell quoting issues. But we could\nuse write_script() to get a local copy.\n\nI'll see if I can work up a patch.\n\n-Peff\n\n[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=261953\n"},{"id":"305305","messageId":"73aed2a3-f2ad-ecc2-d43c-86b4a110a970@kdbg.org","threadId":"44403","inReplyTo":"20161102170415.GA6420@tb-raspi","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2016-11-02T17:43:24Z","receivedAt":"2016-11-02T17:43:33Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 02.11.2016 um 18:04 schrieb Torsten Bögershausen:\n>> * ls/filter-process (2016-10-17) 14 commits\n>>   (merged to 'next' on 2016-10-19 at ffd0de042c)\n> \n> Some (late, as I recently got a new battery for the Mac OS 10.6 test system) \n> comments:\n> t0021 failes here:\n> \n> \n> Can't locate object method \"flush\" via package \"IO::Handle\" at /Users/tb/projects/git/git.next/t/t0021/rot13-filter.pl line 90.\n> fatal: The remote end hung up unexpectedly\n> \n> \n> perl itself is 5.10 and we use the one shipped with Mac OS.\n> Why that ?\n> t0021 uses the hard-coded path:\n> t0021/rot13-filter.pl (around line 345) and the nice macro\n> PERL_PATH from the Makefile is fully ignored.\n> \n> Commenting out the different \"flush\" makes the test hang, and I haven't digged further.\n> \n\nhttps://public-inbox.org/git/e8deda5f-11a6-1463-4fc5-25454084ccb1@kdbg.org/\n\n-- Hannes\n\n"},{"id":"305306","messageId":"64EFD774-BA23-4FAB-8942-03185F447EF2@gmail.com","threadId":"44403","inReplyTo":"20161102170415.GA6420@tb-raspi","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-11-02T17:44:31Z","receivedAt":"2016-11-02T17:44:39Z","isPatch":false,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\nOn 2 Nov 2016, at 17:04, Torsten Bögershausen <tboegi@web.de> wrote:\n\n>> * ls/filter-process (2016-10-17) 14 commits\n>>  (merged to 'next' on 2016-10-19 at ffd0de042c)\n> \n> Some (late, as I recently got a new battery for the Mac OS 10.6 test system) \n> comments:\n> t0021 failes here:\n> \n> \n> Can't locate object method \"flush\" via package \"IO::Handle\" at /Users/tb/projects/git/git.next/t/t0021/rot13-filter.pl line 90.\n> fatal: The remote end hung up unexpectedly\n> \n> \n> perl itself is 5.10 and we use the one shipped with Mac OS.\n> Why that ?\n\nThanks for reporting! It surprises me that flush is not available. I don't have a 10.6 system to tests. Where you able to reproduce the problem on a newer system with an older Perl, too?\n\n@Martin: do you have a clue?\n\nI can't debug the issue right now (only on mobile) but I will look into it on Friday!\n\n> t0021 uses the hard-coded path:\n> t0021/rot13-filter.pl (around line 345) and the nice macro\n> PERL_PATH from the Makefile is fully t\n\nCan you check the line number? Rot13-filter.pl has only 192 lines. I'll look into the PERL_PATH. \n\n\n> Commenting out the different \"flush\" makes the test hang, and I haven't digged further.\n\nThat would be expected because the pl file writes output to a file which is checked by the calling sh script.\n\nThanks,\nLars "},{"id":"305308","messageId":"20161102181625.e2uprqdlzl7z2xrz@sigill.intra.peff.net","threadId":"44403","inReplyTo":"20161102174021.awhmbmuffbzv5b7t@sigill.intra.peff.net","subject":"[PATCH 0/4] t0021 perl portability fixups","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-02T18:16:25Z","receivedAt":"2016-11-02T18:16:32Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"This series should fix the portability problem you saw (in the final\npatch), and fixes the failure to use PERL_PATH along the way.\n\n  [1/4]: t0021: use write_script to create rot13 shell script\n  [2/4]: t0021: put $TEST_ROOT in $PATH\n  [3/4]: t0021: use $PERL_PATH for rot13-filter.pl\n  [4/4]: t0021: fix filehandle usage on older perl\n\n t/t0021-conversion.sh   | 30 ++++++++++++++++--------------\n t/t0021/rot13-filter.pl |  2 +-\n 2 files changed, 17 insertions(+), 15 deletions(-)\n mode change 100755 => 100644 t/t0021/rot13-filter.pl\n"},{"id":"305309","messageId":"20161102181751.trxsns5pxqk73ukc@sigill.intra.peff.net","threadId":"44403","inReplyTo":"20161102181625.e2uprqdlzl7z2xrz@sigill.intra.peff.net","subject":"[PATCH 1/4] t0021: use write_script to create rot13 shell script","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-02T18:17:51Z","receivedAt":"2016-11-02T18:17:57Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"This avoids us fooling around with $SHELL_PATH and the\nexecutable bit ourselves.\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\n t/t0021-conversion.sh | 4 +---\n 1 file changed, 1 insertion(+), 3 deletions(-)\n\ndiff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\nindex a20b9f58e..dfde22549 100755\n--- a/t/t0021-conversion.sh\n+++ b/t/t0021-conversion.sh\n@@ -6,13 +6,11 @@ test_description='blob conversion via gitattributes'\n \n TEST_ROOT=\"$(pwd)\"\n \n-cat <<EOF >\"$TEST_ROOT/rot13.sh\"\n-#!$SHELL_PATH\n+write_script <<\\EOF \"$TEST_ROOT/rot13.sh\"\n tr \\\n   'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' \\\n   'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'\n EOF\n-chmod +x \"$TEST_ROOT/rot13.sh\"\n \n generate_random_characters () {\n \tLEN=$1\n-- \n2.11.0.rc0.258.gf434c15\n\n"},{"id":"305310","messageId":"20161102181824.mi6lmfnfckvrav7n@sigill.intra.peff.net","threadId":"44403","inReplyTo":"20161102181625.e2uprqdlzl7z2xrz@sigill.intra.peff.net","subject":"[PATCH 2/4] t0021: put $TEST_ROOT in $PATH","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-02T18:18:25Z","receivedAt":"2016-11-02T18:18:31Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"We create a rot13.sh script in the trash directory, but need\nto call it by its full path when we have moved our cwd to\nanother directory. Let's just put $TEST_ROOT in our $PATH so\nthat the script is always found.\n\nThis is a minor convenience for rot13.sh, but will be a\nmajor one when we switch rot13-filter.pl to a script in the\nsame directory, as it means we will not have to deal with\nshell quoting inside the filter-process config.\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\n t/t0021-conversion.sh | 7 ++++---\n 1 file changed, 4 insertions(+), 3 deletions(-)\n\ndiff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\nindex dfde22549..c1ad20c61 100755\n--- a/t/t0021-conversion.sh\n+++ b/t/t0021-conversion.sh\n@@ -5,6 +5,7 @@ test_description='blob conversion via gitattributes'\n . ./test-lib.sh\n \n TEST_ROOT=\"$(pwd)\"\n+PATH=$TEST_ROOT:$PATH\n \n write_script <<\\EOF \"$TEST_ROOT/rot13.sh\"\n tr \\\n@@ -64,7 +65,7 @@ test_cmp_exclude_clean () {\n # is equal to the committed content.\n test_cmp_committed_rot13 () {\n \ttest_cmp \"$1\" \"$2\" &&\n-\t\"$TEST_ROOT/rot13.sh\" <\"$1\" >expected &&\n+\trot13.sh <\"$1\" >expected &&\n \tgit cat-file blob :\"$2\" >actual &&\n \ttest_cmp expected actual\n }\n@@ -513,7 +514,7 @@ test_expect_success PERL 'required process filter should process multiple packet\n \t\tfor FILE in \"$TEST_ROOT\"/*.file\n \t\tdo\n \t\t\tcp \"$FILE\" . &&\n-\t\t\t\"$TEST_ROOT/rot13.sh\" <\"$FILE\" >\"$FILE.rot13\"\n+\t\t\trot13.sh <\"$FILE\" >\"$FILE.rot13\"\n \t\tdone &&\n \n \t\techo \"*.file filter=protocol\" >.gitattributes &&\n@@ -616,7 +617,7 @@ test_expect_success PERL 'process filter should restart after unexpected write f\n \n \t\t# Smudge failed\n \t\t! test_cmp smudge-write-fail.o smudge-write-fail.r &&\n-\t\t\"$TEST_ROOT/rot13.sh\" <smudge-write-fail.o >expected &&\n+\t\trot13.sh <smudge-write-fail.o >expected &&\n \t\tgit cat-file blob :smudge-write-fail.r >actual &&\n \t\ttest_cmp expected actual\n \t)\n-- \n2.11.0.rc0.258.gf434c15\n\n"},{"id":"305311","messageId":"20161102182022.zalzmc6rcwmvrgqq@sigill.intra.peff.net","threadId":"44403","inReplyTo":"20161102181625.e2uprqdlzl7z2xrz@sigill.intra.peff.net","subject":"[PATCH 3/4] t0021: use $PERL_PATH for rot13-filter.pl","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-02T18:20:22Z","receivedAt":"2016-11-02T18:20:28Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"The rot13-filter.pl script hardcodes \"#!/usr/bin/perl\", and\ndoes not respect $PERL_PATH at all. That is a problem if the\nsystem does not have perl at that path, or if it has a perl\nthat is too old to run a complicated script like the\nrot13-filter (but PERL_PATH points to a more modern one).\n\nWe can fix this by using write_script() to create a new copy\nof the script with the correct #!-line. In theory we could\nmove the whole script inside t0021-conversion.sh rather than\nhaving it as an auxiliary file, but it's long enough that\nit just makes things harder to read.\n\nAs a bonus, we can stop using the full path to the script in\nthe filter-process config we add (because the trash\ndirectory is in our PATH). Not only is this shorter, but it\nsidesteps any shell-quoting issues. The original was broken\nwhen $TEST_DIRECTORY contained a space, because it was\ninterpolated in the outer script.\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\n t/t0021-conversion.sh   | 19 +++++++++++--------\n t/t0021/rot13-filter.pl |  1 -\n 2 files changed, 11 insertions(+), 9 deletions(-)\n mode change 100755 => 100644 t/t0021/rot13-filter.pl\n\ndiff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\nindex c1ad20c61..a8fa52148 100755\n--- a/t/t0021-conversion.sh\n+++ b/t/t0021-conversion.sh\n@@ -13,6 +13,9 @@ tr \\\n   'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'\n EOF\n \n+write_script rot13-filter.pl \"$PERL_PATH\" \\\n+\t<\"$TEST_DIRECTORY\"/t0021/rot13-filter.pl\n+\n generate_random_characters () {\n \tLEN=$1\n \tNAME=$2\n@@ -341,7 +344,7 @@ test_expect_success 'diff does not reuse worktree files that need cleaning' '\n '\n \n test_expect_success PERL 'required process filter should filter data' '\n-\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n+\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n \ttest_config_global filter.protocol.required true &&\n \trm -rf repo &&\n \tmkdir repo &&\n@@ -434,7 +437,7 @@ test_expect_success PERL 'required process filter should filter data' '\n \n test_expect_success PERL 'required process filter takes precedence' '\n \ttest_config_global filter.protocol.clean false &&\n-\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean\" &&\n+\ttest_config_global filter.protocol.process \"rot13-filter.pl clean\" &&\n \ttest_config_global filter.protocol.required true &&\n \trm -rf repo &&\n \tmkdir repo &&\n@@ -459,7 +462,7 @@ test_expect_success PERL 'required process filter takes precedence' '\n '\n \n test_expect_success PERL 'required process filter should be used only for \"clean\" operation only' '\n-\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean\" &&\n+\ttest_config_global filter.protocol.process \"rot13-filter.pl clean\" &&\n \trm -rf repo &&\n \tmkdir repo &&\n \t(\n@@ -494,7 +497,7 @@ test_expect_success PERL 'required process filter should be used only for \"clean\n '\n \n test_expect_success PERL 'required process filter should process multiple packets' '\n-\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n+\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n \ttest_config_global filter.protocol.required true &&\n \n \trm -rf repo &&\n@@ -554,7 +557,7 @@ test_expect_success PERL 'required process filter should process multiple packet\n '\n \n test_expect_success PERL 'required process filter with clean error should fail' '\n-\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n+\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n \ttest_config_global filter.protocol.required true &&\n \trm -rf repo &&\n \tmkdir repo &&\n@@ -573,7 +576,7 @@ test_expect_success PERL 'required process filter with clean error should fail'\n '\n \n test_expect_success PERL 'process filter should restart after unexpected write failure' '\n-\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n+\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n \trm -rf repo &&\n \tmkdir repo &&\n \t(\n@@ -624,7 +627,7 @@ test_expect_success PERL 'process filter should restart after unexpected write f\n '\n \n test_expect_success PERL 'process filter should not be restarted if it signals an error' '\n-\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n+\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n \trm -rf repo &&\n \tmkdir repo &&\n \t(\n@@ -663,7 +666,7 @@ test_expect_success PERL 'process filter should not be restarted if it signals a\n '\n \n test_expect_success PERL 'process filter abort stops processing of all further files' '\n-\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n+\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n \trm -rf repo &&\n \tmkdir repo &&\n \t(\ndiff --git a/t/t0021/rot13-filter.pl b/t/t0021/rot13-filter.pl\nold mode 100755\nnew mode 100644\nindex ae4c50f5c..e3ea58e1e\n--- a/t/t0021/rot13-filter.pl\n+++ b/t/t0021/rot13-filter.pl\n@@ -1,4 +1,3 @@\n-#!/usr/bin/perl\n #\n # Example implementation for the Git filter protocol version 2\n # See Documentation/gitattributes.txt, section \"Filter Protocol\"\n-- \n2.11.0.rc0.258.gf434c15\n\n"},{"id":"305312","messageId":"20161102182301.hezruhtuhra6uoft@sigill.intra.peff.net","threadId":"44403","inReplyTo":"20161102181625.e2uprqdlzl7z2xrz@sigill.intra.peff.net","subject":"[PATCH 4/4] t0021: fix filehandle usage on older perl","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-02T18:23:01Z","receivedAt":"2016-11-02T18:25:58Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"The rot13-filter.pl script calls methods on implicitly\ndefined filehandles (STDOUT, and the result of an open()\ncall).  Prior to perl 5.13, these methods are not\nautomatically loaded, and perl will complain with:\n\n  Can't locate object method \"flush\" via package \"IO::Handle\"\n\nLet's explicitly load IO::File (which inherits from\nIO::Handle). That's more than we need for just \"flush\", but\nmatches what perl has done since:\n\n  http://perl5.git.perl.org/perl.git/commit/15e6cdd91beb4cefae4b65e855d68cf64766965d\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\nI see J6t solved this a week ago using \"FileHandle\". These days that is\nbasically a compatibility synonym for IO::File. I think both should be\navailable pretty much everywhere, so I went with IO::File for the\nreasons above. But if that doesn't work for some reason, switching to\n\"use FileHandle\" should be OK, too.\n\nI don't have an old enough perl easily available to test it either way.\n\n t/t0021/rot13-filter.pl | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/t/t0021/rot13-filter.pl b/t/t0021/rot13-filter.pl\nindex e3ea58e1e..4d5697ee5 100644\n--- a/t/t0021/rot13-filter.pl\n+++ b/t/t0021/rot13-filter.pl\n@@ -21,6 +21,7 @@\n \n use strict;\n use warnings;\n+use IO::File;\n \n my $MAX_PACKET_CONTENT_SIZE = 65516;\n my @capabilities            = @ARGV;\n-- \n2.11.0.rc0.258.gf434c15\n"},{"id":"305316","messageId":"20161102205437.GA6951@tb-raspi","threadId":"44403","inReplyTo":"20161102182301.hezruhtuhra6uoft@sigill.intra.peff.net","subject":"Re: [PATCH 4/4] t0021: fix filehandle usage on older perl","fromName":"Torsten Bögershausen","fromEmail":"tboegi@web.de","sentAt":"2016-11-02T20:54:37Z","receivedAt":"2016-11-02T20:55:04Z","isPatch":true,"sender":{"key":"tboegi@web.de","avatar":"https://avatars.githubusercontent.com/u/7138363?v=4"},"body":"\n> +use IO::File;\n\nThat did the trick (the J6T version work as well)\n\nThanks for the fast responses.\n"},{"id":"305345","messageId":"421804D4-56C2-410C-B579-0E92D15B446F@gmail.com","threadId":"44403","inReplyTo":"73aed2a3-f2ad-ecc2-d43c-86b4a110a970@kdbg.org","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-11-03T14:21:15Z","receivedAt":"2016-11-03T14:21:29Z","isPatch":false,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 2 Nov 2016, at 17:43, Johannes Sixt <j6t@kdbg.org> wrote:\n> \n> Am 02.11.2016 um 18:04 schrieb Torsten Bögershausen:\n>>> * ls/filter-process (2016-10-17) 14 commits\n>>>  (merged to 'next' on 2016-10-19 at ffd0de042c)\n>> \n>> Some (late, as I recently got a new battery for the Mac OS 10.6 test system) \n>> comments:\n>> t0021 failes here:\n>> \n>> \n>> Can't locate object method \"flush\" via package \"IO::Handle\" at /Users/tb/projects/git/git.next/t/t0021/rot13-filter.pl line 90.\n>> fatal: The remote end hung up unexpectedly\n>> \n>> \n>> perl itself is 5.10 and we use the one shipped with Mac OS.\n>> Why that ?\n>> t0021 uses the hard-coded path:\n>> t0021/rot13-filter.pl (around line 345) and the nice macro\n>> PERL_PATH from the Makefile is fully ignored.\n>> \n>> Commenting out the different \"flush\" makes the test hang, and I haven't digged further.\n>> \n> \n> https://public-inbox.org/git/e8deda5f-11a6-1463-4fc5-25454084ccb1@kdbg.org/\n\nWoooh. I am sorry Hannes - I completely missed that email! Looks like Peff addressed the issue already. His patches look very good but I want to try it on my machine tomorrow.\n\nThanks,\nLars\n"},{"id":"305383","messageId":"d36d8b51-f2d7-a2f5-89ea-369f49556e10@kdbg.org","threadId":"44403","inReplyTo":"20161102181824.mi6lmfnfckvrav7n@sigill.intra.peff.net","subject":"Re: [PATCH 2/4] t0021: put $TEST_ROOT in $PATH","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2016-11-03T20:40:01Z","receivedAt":"2016-11-03T20:40:09Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 02.11.2016 um 19:18 schrieb Jeff King:\n> We create a rot13.sh script in the trash directory, but need\n> to call it by its full path when we have moved our cwd to\n> another directory. Let's just put $TEST_ROOT in our $PATH so\n> that the script is always found.\n> \n> This is a minor convenience for rot13.sh, but will be a\n> major one when we switch rot13-filter.pl to a script in the\n> same directory, as it means we will not have to deal with\n> shell quoting inside the filter-process config.\n> \n> Signed-off-by: Jeff King <peff@peff.net>\n> ---\n>  t/t0021-conversion.sh | 7 ++++---\n>  1 file changed, 4 insertions(+), 3 deletions(-)\n> \n> diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\n> index dfde22549..c1ad20c61 100755\n> --- a/t/t0021-conversion.sh\n> +++ b/t/t0021-conversion.sh\n> @@ -5,6 +5,7 @@ test_description='blob conversion via gitattributes'\n>  . ./test-lib.sh\n>  \n>  TEST_ROOT=\"$(pwd)\"\n> +PATH=$TEST_ROOT:$PATH\n\nThis causes problems on Windows. We need the following squashed in.\n\n---- 8< ----\n[PATCH] squash! t0021: put $TEST_ROOT in $PATH\n\nWe have to use $PWD instead of $(pwd) because on Windows the\nlatter would add a C: style path to bash's Unix-style $PATH\nvariable, which becomes confused by the colon after the\ndrive letter. ($PWD is a Unix-style path.)\n\nSigned-off-by: Johannes Sixt <j6t@kdbg.org>\n---\n t/t0021-conversion.sh | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\nindex 4e4b9a6be3..cff2b7259d 100755\n--- a/t/t0021-conversion.sh\n+++ b/t/t0021-conversion.sh\n@@ -4,7 +4,7 @@ test_description='blob conversion via gitattributes'\n \n . ./test-lib.sh\n \n-TEST_ROOT=\"$(pwd)\"\n+TEST_ROOT=\"$PWD\"\n PATH=$TEST_ROOT:$PATH\n \n write_script <<\\EOF \"$TEST_ROOT/rot13.sh\"\n-- \n2.11.0.rc0.55.gd967357\n\n"},{"id":"305384","messageId":"20161103204438.zfe653c2bsv3zqkx@sigill.intra.peff.net","threadId":"44403","inReplyTo":"d36d8b51-f2d7-a2f5-89ea-369f49556e10@kdbg.org","subject":"Re: [PATCH 2/4] t0021: put $TEST_ROOT in $PATH","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-03T20:44:38Z","receivedAt":"2016-11-03T20:44:46Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Thu, Nov 03, 2016 at 09:40:01PM +0100, Johannes Sixt wrote:\n\n> >  TEST_ROOT=\"$(pwd)\"\n> > +PATH=$TEST_ROOT:$PATH\n> \n> This causes problems on Windows. We need the following squashed in.\n> \n> ---- 8< ----\n> [PATCH] squash! t0021: put $TEST_ROOT in $PATH\n> \n> We have to use $PWD instead of $(pwd) because on Windows the\n> latter would add a C: style path to bash's Unix-style $PATH\n> variable, which becomes confused by the colon after the\n> drive letter. ($PWD is a Unix-style path.)\n\nThanks. I have to admit I remain confused about which one to use at any\ngiven invocation (I would have thought that switching to $PWD causes\nproblems elsewhere in the script, but I guess file redirection is\ncapable of handling either type).\n\n-Peff\n"},{"id":"305387","messageId":"c77455b1-6621-cff5-c07f-97a247fa2eb4@kdbg.org","threadId":"44403","inReplyTo":"20161103204438.zfe653c2bsv3zqkx@sigill.intra.peff.net","subject":"Re: [PATCH 2/4] t0021: put $TEST_ROOT in $PATH","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2016-11-03T21:09:45Z","receivedAt":"2016-11-03T21:09:53Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 03.11.2016 um 21:44 schrieb Jeff King:\n> On Thu, Nov 03, 2016 at 09:40:01PM +0100, Johannes Sixt wrote:\n>> We have to use $PWD instead of $(pwd) because on Windows...\n>\n> Thanks. I have to admit I remain confused about which one to use at any\n> given invocation\n\nNo worries. It *is* complex, and I don't expect anyone who is not deep \nin the business to get this thing right except by mere chance.\n\n> (I would have thought that switching to $PWD causes\n> problems elsewhere in the script, but I guess file redirection is\n> capable of handling either type).\n\nCorrect.\n\n-- Hannes\n\n"},{"id":"305439","messageId":"20161105072758.GA15760@tb-raspi","threadId":"44403","inReplyTo":"CAG2PGspq34wn2bAGyhR6B-XmmayadmL-v3_65y5LJWTWNHXkOQ@mail.gmail.com","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Torsten Bögershausen","fromEmail":"tboegi@web.de","sentAt":"2016-11-05T07:27:58Z","receivedAt":"2016-11-05T07:28:14Z","isPatch":false,"sender":{"key":"tboegi@web.de","avatar":"https://avatars.githubusercontent.com/u/7138363?v=4"},"body":"On Thu, Nov 03, 2016 at 09:30:44AM -0400, Martin-Louis Bright wrote:\n> I will see if I can find a OSX 10.6 system to test with, and I'll try with\n> perl 5.10.\n> \n> --Martin\n\nNo need to worry too much:\n\nI have tested Peffs patch applied on next OK- \nAnd the integration into pu that came the 2nd Novevember is tested OK as well.\n\n(And please everybody: avoid top-posting here)\n"},{"id":"305440","messageId":"20161105074231.GA15803@tb-raspi","threadId":"44403","inReplyTo":"xmqqwpgoqjct.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Torsten Bögershausen","fromEmail":"tboegi@web.de","sentAt":"2016-11-05T07:42:31Z","receivedAt":"2016-11-05T07:43:55Z","isPatch":false,"sender":{"key":"tboegi@web.de","avatar":"https://avatars.githubusercontent.com/u/7138363?v=4"},"body":"> * st/verify-tag (2016-10-10) 7 commits\n>  - t/t7004-tag: Add --format specifier tests\n>  - t/t7030-verify-tag: Add --format specifier tests\n>  - builtin/tag: add --format argument for tag -v\n>  - builtin/verify-tag: add --format to verify-tag\n>  - tag: add format specifier to gpg_verify_tag\n>  - ref-filter: add function to print single ref_array_item\n>  - gpg-interface, tag: add GPG_VERIFY_QUIET flag\n> \n>  \"git tag\" and \"git verify-tag\" learned to put GPG verification\n>  status in their \"--format=<placeholders>\" output format.\n> \n>  Waiting for a reroll.\n>  cf. <20161007210721.20437-1-santiago@nyu.edu>\n\nI don't know if this has been reported before:\nSome tests needs to be protected by GPG:\n+test_expect_success GPG 'verifying a proper tag with --format pass and format accordingly' \n\ntest_expect_success GPG 'verifying a forged tag with --format fail and format accordingly'\n\ntest_expect_success GPG 'verifying a forged tag with --format fail and format accordingly'\n"},{"id":"305453","messageId":"22DAA280-1857-4E22-914A-1208D784DA98@gmail.com","threadId":"44403","inReplyTo":"20161102181751.trxsns5pxqk73ukc@sigill.intra.peff.net","subject":"Re: [PATCH 1/4] t0021: use write_script to create rot13 shell script","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-11-06T14:25:33Z","receivedAt":"2016-11-06T14:25:31Z","isPatch":true,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 02 Nov 2016, at 19:17, Jeff King <peff@peff.net> wrote:\n> \n> This avoids us fooling around with $SHELL_PATH and the\n> executable bit ourselves.\n> \n> Signed-off-by: Jeff King <peff@peff.net>\n> ---\n> t/t0021-conversion.sh | 4 +---\n> 1 file changed, 1 insertion(+), 3 deletions(-)\n> \n> diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\n> index a20b9f58e..dfde22549 100755\n> --- a/t/t0021-conversion.sh\n> +++ b/t/t0021-conversion.sh\n> @@ -6,13 +6,11 @@ test_description='blob conversion via gitattributes'\n> \n> TEST_ROOT=\"$(pwd)\"\n> \n> -cat <<EOF >\"$TEST_ROOT/rot13.sh\"\n> -#!$SHELL_PATH\n> +write_script <<\\EOF \"$TEST_ROOT/rot13.sh\"\n> tr \\\n>   'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' \\\n>   'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'\n> EOF\n> -chmod +x \"$TEST_ROOT/rot13.sh\"\n> \n> generate_random_characters () {\n> \tLEN=$1\n> -- \n> 2.11.0.rc0.258.gf434c15\n> \n\nThis looks good to me (and it works on my machine).\nHowever, I took a look at the \"write_script\" function and found this,\nadded by Junio in 840c519d:\n\necho \"#!${2-\"$SHELL_PATH\"}\" &&\n\nThere is some kind of variable expansion happening with the \"2-\" but\nI can't quite figure out what is going on. Plus, I can't find anything \nabout this in the sh docs.\n\nCan anyone help me to understand it?\n\nThanks,\nLars\n \n"},{"id":"305454","messageId":"20161106142957.52wx2llanw5bis4i@sigill.intra.peff.net","threadId":"44403","inReplyTo":"22DAA280-1857-4E22-914A-1208D784DA98@gmail.com","subject":"Re: [PATCH 1/4] t0021: use write_script to create rot13 shell script","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-06T14:29:58Z","receivedAt":"2016-11-06T14:30:49Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Sun, Nov 06, 2016 at 03:25:33PM +0100, Lars Schneider wrote:\n\n> This looks good to me (and it works on my machine).\n> However, I took a look at the \"write_script\" function and found this,\n> added by Junio in 840c519d:\n> \n> echo \"#!${2-\"$SHELL_PATH\"}\" &&\n> \n> There is some kind of variable expansion happening with the \"2-\" but\n> I can't quite figure out what is going on. Plus, I can't find anything \n> about this in the sh docs.\n> \n> Can anyone help me to understand it?\n\nSee the section on parameter expansion in \"man bash\". Basically:\n\n ${foo:-bar}\n\nexpands to $foo, or \"bar\" if it is unset or empty. Without the colon:\n\n  ${foo-bar}\n\nexpands to $foo, \"bar\" if it unset (but not if it is empty). I don't\nthink we really care about the distinction here, and either is fine (you\nwould not ever pass an empty argument).\n\nSo in this context you may pass in the interpreter:\n\n  write_script \"$PERL_PATH\" <<\\EOF\n  ... some perl code ...\n  EOF\n\nor it defaults to shell, which is what most of the callers want:\n\n  write_script <<\\EOF\n  ... some shell code ...\n  EOF\n\n-Peff\n"},{"id":"305455","messageId":"C023A4E4-AA9B-45EF-AA34-C249323F2AE8@gmail.com","threadId":"44403","inReplyTo":"20161102181824.mi6lmfnfckvrav7n@sigill.intra.peff.net","subject":"Re: [PATCH 2/4] t0021: put $TEST_ROOT in $PATH","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-11-06T14:29:42Z","receivedAt":"2016-11-06T14:30:52Z","isPatch":true,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 02 Nov 2016, at 19:18, Jeff King <peff@peff.net> wrote:\n> \n> We create a rot13.sh script in the trash directory, but need\n> to call it by its full path when we have moved our cwd to\n> another directory. Let's just put $TEST_ROOT in our $PATH so\n> that the script is always found.\n> \n> This is a minor convenience for rot13.sh, but will be a\n> major one when we switch rot13-filter.pl to a script in the\n> same directory, as it means we will not have to deal with\n> shell quoting inside the filter-process config.\n> \n> Signed-off-by: Jeff King <peff@peff.net>\n> ---\n> t/t0021-conversion.sh | 7 ++++---\n> 1 file changed, 4 insertions(+), 3 deletions(-)\n> \n> diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\n> index dfde22549..c1ad20c61 100755\n> --- a/t/t0021-conversion.sh\n> +++ b/t/t0021-conversion.sh\n> @@ -5,6 +5,7 @@ test_description='blob conversion via gitattributes'\n> . ./test-lib.sh\n> \n> TEST_ROOT=\"$(pwd)\"\n> +PATH=$TEST_ROOT:$PATH\n> \n> write_script <<\\EOF \"$TEST_ROOT/rot13.sh\"\n> tr \\\n> @@ -64,7 +65,7 @@ test_cmp_exclude_clean () {\n> # is equal to the committed content.\n> test_cmp_committed_rot13 () {\n> \ttest_cmp \"$1\" \"$2\" &&\n> -\t\"$TEST_ROOT/rot13.sh\" <\"$1\" >expected &&\n> +\trot13.sh <\"$1\" >expected &&\n> \tgit cat-file blob :\"$2\" >actual &&\n> \ttest_cmp expected actual\n> }\n> @@ -513,7 +514,7 @@ test_expect_success PERL 'required process filter should process multiple packet\n> \t\tfor FILE in \"$TEST_ROOT\"/*.file\n> \t\tdo\n> \t\t\tcp \"$FILE\" . &&\n> -\t\t\t\"$TEST_ROOT/rot13.sh\" <\"$FILE\" >\"$FILE.rot13\"\n> +\t\t\trot13.sh <\"$FILE\" >\"$FILE.rot13\"\n> \t\tdone &&\n> \n> \t\techo \"*.file filter=protocol\" >.gitattributes &&\n> @@ -616,7 +617,7 @@ test_expect_success PERL 'process filter should restart after unexpected write f\n> \n> \t\t# Smudge failed\n> \t\t! test_cmp smudge-write-fail.o smudge-write-fail.r &&\n> -\t\t\"$TEST_ROOT/rot13.sh\" <smudge-write-fail.o >expected &&\n> +\t\trot13.sh <smudge-write-fail.o >expected &&\n> \t\tgit cat-file blob :smudge-write-fail.r >actual &&\n> \t\ttest_cmp expected actual\n> \t)\n> -- \n> 2.11.0.rc0.258.gf434c15\n\nLooks good to me and the PWD Windows fix suggested by Hannes [1] works great\non macOS.\n\nThanks,\nLars\n\n[1] http://public-inbox.org/git/20161103204438.zfe653c2bsv3zqkx@sigill.intra.peff.net/"},{"id":"305456","messageId":"65249E23-8685-44A8-B2AC-9C414658540E@gmail.com","threadId":"44403","inReplyTo":"20161106142957.52wx2llanw5bis4i@sigill.intra.peff.net","subject":"Re: [PATCH 1/4] t0021: use write_script to create rot13 shell script","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-11-06T14:43:49Z","receivedAt":"2016-11-06T14:43:47Z","isPatch":true,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 06 Nov 2016, at 15:29, Jeff King <peff@peff.net> wrote:\n> \n> On Sun, Nov 06, 2016 at 03:25:33PM +0100, Lars Schneider wrote:\n> \n>> This looks good to me (and it works on my machine).\n>> However, I took a look at the \"write_script\" function and found this,\n>> added by Junio in 840c519d:\n>> \n>> echo \"#!${2-\"$SHELL_PATH\"}\" &&\n>> \n>> There is some kind of variable expansion happening with the \"2-\" but\n>> I can't quite figure out what is going on. Plus, I can't find anything \n>> about this in the sh docs.\n>> \n>> Can anyone help me to understand it?\n> \n> See the section on parameter expansion in \"man bash\". Basically:\n> \n> ${foo:-bar}\n> \n> expands to $foo, or \"bar\" if it is unset or empty. Without the colon:\n> \n>  ${foo-bar}\n> \n> expands to $foo, \"bar\" if it unset (but not if it is empty).\n\nAhh! The missing colon tricked me. For some reason the version\nwithout colon is not mentioned in my docs (GNU bash, version 3.2.57)\nor I overlooked it.\n\nThanks for taking the time to explain it!\n\n- Lars\n\n"},{"id":"305457","messageId":"E073426F-8285-4D11-91BC-E1B80F54AD32@gmail.com","threadId":"44403","inReplyTo":"20161102182022.zalzmc6rcwmvrgqq@sigill.intra.peff.net","subject":"Re: [PATCH 3/4] t0021: use $PERL_PATH for rot13-filter.pl","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-11-06T14:52:00Z","receivedAt":"2016-11-06T14:52:28Z","isPatch":true,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 02 Nov 2016, at 19:20, Jeff King <peff@peff.net> wrote:\n> \n> The rot13-filter.pl script hardcodes \"#!/usr/bin/perl\", and\n> does not respect $PERL_PATH at all. That is a problem if the\n> system does not have perl at that path, or if it has a perl\n> that is too old to run a complicated script like the\n> rot13-filter (but PERL_PATH points to a more modern one).\n> \n> We can fix this by using write_script() to create a new copy\n> of the script with the correct #!-line. In theory we could\n> move the whole script inside t0021-conversion.sh rather than\n> having it as an auxiliary file, but it's long enough that\n> it just makes things harder to read.\n> \n> As a bonus, we can stop using the full path to the script in\n> the filter-process config we add (because the trash\n> directory is in our PATH). Not only is this shorter, but it\n> sidesteps any shell-quoting issues. The original was broken\n> when $TEST_DIRECTORY contained a space, because it was\n> interpolated in the outer script.\n> \n> Signed-off-by: Jeff King <peff@peff.net>\n> ---\n> t/t0021-conversion.sh   | 19 +++++++++++--------\n> t/t0021/rot13-filter.pl |  1 -\n> 2 files changed, 11 insertions(+), 9 deletions(-)\n> mode change 100755 => 100644 t/t0021/rot13-filter.pl\n> \n> diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh\n> index c1ad20c61..a8fa52148 100755\n> --- a/t/t0021-conversion.sh\n> +++ b/t/t0021-conversion.sh\n> @@ -13,6 +13,9 @@ tr \\\n>   'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'\n> EOF\n> \n> +write_script rot13-filter.pl \"$PERL_PATH\" \\\n> +\t<\"$TEST_DIRECTORY\"/t0021/rot13-filter.pl\n> +\n> generate_random_characters () {\n> \tLEN=$1\n> \tNAME=$2\n> @@ -341,7 +344,7 @@ test_expect_success 'diff does not reuse worktree files that need cleaning' '\n> '\n> \n> test_expect_success PERL 'required process filter should filter data' '\n> -\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n> +\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n> \ttest_config_global filter.protocol.required true &&\n> \trm -rf repo &&\n> \tmkdir repo &&\n> @@ -434,7 +437,7 @@ test_expect_success PERL 'required process filter should filter data' '\n> \n> test_expect_success PERL 'required process filter takes precedence' '\n> \ttest_config_global filter.protocol.clean false &&\n> -\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean\" &&\n> +\ttest_config_global filter.protocol.process \"rot13-filter.pl clean\" &&\n> \ttest_config_global filter.protocol.required true &&\n> \trm -rf repo &&\n> \tmkdir repo &&\n> @@ -459,7 +462,7 @@ test_expect_success PERL 'required process filter takes precedence' '\n> '\n> \n> test_expect_success PERL 'required process filter should be used only for \"clean\" operation only' '\n> -\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean\" &&\n> +\ttest_config_global filter.protocol.process \"rot13-filter.pl clean\" &&\n> \trm -rf repo &&\n> \tmkdir repo &&\n> \t(\n> @@ -494,7 +497,7 @@ test_expect_success PERL 'required process filter should be used only for \"clean\n> '\n> \n> test_expect_success PERL 'required process filter should process multiple packets' '\n> -\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n> +\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n> \ttest_config_global filter.protocol.required true &&\n> \n> \trm -rf repo &&\n> @@ -554,7 +557,7 @@ test_expect_success PERL 'required process filter should process multiple packet\n> '\n> \n> test_expect_success PERL 'required process filter with clean error should fail' '\n> -\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n> +\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n> \ttest_config_global filter.protocol.required true &&\n> \trm -rf repo &&\n> \tmkdir repo &&\n> @@ -573,7 +576,7 @@ test_expect_success PERL 'required process filter with clean error should fail'\n> '\n> \n> test_expect_success PERL 'process filter should restart after unexpected write failure' '\n> -\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n> +\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n> \trm -rf repo &&\n> \tmkdir repo &&\n> \t(\n> @@ -624,7 +627,7 @@ test_expect_success PERL 'process filter should restart after unexpected write f\n> '\n> \n> test_expect_success PERL 'process filter should not be restarted if it signals an error' '\n> -\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n> +\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n> \trm -rf repo &&\n> \tmkdir repo &&\n> \t(\n> @@ -663,7 +666,7 @@ test_expect_success PERL 'process filter should not be restarted if it signals a\n> '\n> \n> test_expect_success PERL 'process filter abort stops processing of all further files' '\n> -\ttest_config_global filter.protocol.process \"$TEST_DIRECTORY/t0021/rot13-filter.pl clean smudge\" &&\n> +\ttest_config_global filter.protocol.process \"rot13-filter.pl clean smudge\" &&\n> \trm -rf repo &&\n> \tmkdir repo &&\n> \t(\n> diff --git a/t/t0021/rot13-filter.pl b/t/t0021/rot13-filter.pl\n> old mode 100755\n> new mode 100644\n> index ae4c50f5c..e3ea58e1e\n> --- a/t/t0021/rot13-filter.pl\n> +++ b/t/t0021/rot13-filter.pl\n> @@ -1,4 +1,3 @@\n> -#!/usr/bin/perl\n> #\n> # Example implementation for the Git filter protocol version 2\n> # See Documentation/gitattributes.txt, section \"Filter Protocol\"\n> -- \n> 2.11.0.rc0.258.gf434c15\n\nLooks good to me! \n\nMinor pedantic nit: \nWould it make sense to rename \"rot13-filter.pl\" to \n\"rot13-filter.pl.template\" or something because of the\nmissing shebang?\n\n- Lars\n\n"},{"id":"305458","messageId":"20161106145408.qenhcucj7a3llhyr@sigill.intra.peff.net","threadId":"44403","inReplyTo":"E073426F-8285-4D11-91BC-E1B80F54AD32@gmail.com","subject":"Re: [PATCH 3/4] t0021: use $PERL_PATH for rot13-filter.pl","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2016-11-06T14:54:08Z","receivedAt":"2016-11-06T14:54:15Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Sun, Nov 06, 2016 at 03:52:00PM +0100, Lars Schneider wrote:\n\n> Would it make sense to rename \"rot13-filter.pl\" to \n> \"rot13-filter.pl.template\" or something because of the\n> missing shebang?\n\nI think it makes sense to keep it as \".pl\". Without the \"#!\" things like\neditors will use the extension to guess what type of file it is, for\nfeatures like syntax highlight and auto-indentation.\n\nI was actually tempted to _keep_ the #! line for that reason, but then\nthe built result ends up with two such lines (which is not wrong, but is\nconfusing if anybody actually looks at it).\n\n-Peff\n"},{"id":"305459","messageId":"36375B98-2706-4A07-96F7-75D89B5FFD60@gmail.com","threadId":"44403","inReplyTo":"20161102182301.hezruhtuhra6uoft@sigill.intra.peff.net","subject":"Re: [PATCH 4/4] t0021: fix filehandle usage on older perl","fromName":"Lars Schneider","fromEmail":"larsxschneider@gmail.com","sentAt":"2016-11-06T14:55:06Z","receivedAt":"2016-11-06T14:55:05Z","isPatch":true,"sender":{"key":"larsxschneider@gmail.com","avatar":"https://avatars.githubusercontent.com/u/477434?v=4"},"body":"\n> On 02 Nov 2016, at 19:23, Jeff King <peff@peff.net> wrote:\n> \n> The rot13-filter.pl script calls methods on implicitly\n> defined filehandles (STDOUT, and the result of an open()\n> call).  Prior to perl 5.13, these methods are not\n> automatically loaded, and perl will complain with:\n> \n>  Can't locate object method \"flush\" via package \"IO::Handle\"\n> \n> Let's explicitly load IO::File (which inherits from\n> IO::Handle). That's more than we need for just \"flush\", but\n> matches what perl has done since:\n> \n>  http://perl5.git.perl.org/perl.git/commit/15e6cdd91beb4cefae4b65e855d68cf64766965d\n> \n> Signed-off-by: Jeff King <peff@peff.net>\n> ---\n> I see J6t solved this a week ago using \"FileHandle\". These days that is\n> basically a compatibility synonym for IO::File. I think both should be\n> available pretty much everywhere, so I went with IO::File for the\n> reasons above. But if that doesn't work for some reason, switching to\n> \"use FileHandle\" should be OK, too.\n> \n> I don't have an old enough perl easily available to test it either way.\n> \n> t/t0021/rot13-filter.pl | 1 +\n> 1 file changed, 1 insertion(+)\n> \n> diff --git a/t/t0021/rot13-filter.pl b/t/t0021/rot13-filter.pl\n> index e3ea58e1e..4d5697ee5 100644\n> --- a/t/t0021/rot13-filter.pl\n> +++ b/t/t0021/rot13-filter.pl\n> @@ -21,6 +21,7 @@\n> \n> use strict;\n> use warnings;\n> +use IO::File;\n> \n> my $MAX_PACKET_CONTENT_SIZE = 65516;\n> my @capabilities            = @ARGV;\n> -- \n> 2.11.0.rc0.258.gf434c15\n\nLooks good to me (and works flawlessly on newer macOS).\n\nThanks,\nLars"},{"id":"305537","messageId":"CAOLa=ZS=X=5ZvSn=AynOLpD1tDcpRkGyO6-m7d2RPoFf-4v_bg@mail.gmail.com","threadId":"44403","inReplyTo":"xmqqwpgoqjct.fsf@gitster.mtv.corp.google.com","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Karthik Nayak","fromEmail":"karthik.188@gmail.com","sentAt":"2016-11-08T08:12:47Z","receivedAt":"2016-11-08T08:13:23Z","isPatch":false,"sender":{"key":"karthik.188@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1786334?v=4"},"body":"Hello,\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>  Needs review.\n\nAnything I could do to push this forward? It's been a while now.\n"},{"id":"305538","messageId":"CAOLa=ZQGDuFvPJjt8GPVLvAjKoFvmuzf9UNWVB4okn=a9BgTQA@mail.gmail.com","threadId":"44403","inReplyTo":"CA+P7+xo+CJU_ng5OWX1y26+=QPCg6Zxpv_0opTAzsNqeFXAwng@mail.gmail.com","subject":"Re: What's cooking in git.git (Oct 2016, #09; Mon, 31)","fromName":"Karthik Nayak","fromEmail":"karthik.188@gmail.com","sentAt":"2016-11-08T09:03:09Z","receivedAt":"2016-11-08T09:03:47Z","isPatch":false,"sender":{"key":"karthik.188@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1786334?v=4"},"body":"Helo,\n\nOn Tue, Nov 8, 2016 at 1:58 PM, Jacob Keller <jacob.keller@gmail.com> wrote:\n> On Nov 8, 2016 12:24 AM, \"Karthik Nayak\" <karthik.188@gmail.com> wrote:\n>> Anything I could do to push this forward? It's been a while now.\n>\n> Hi,\n>\n> If this just needs more reviewers I can take a look. Do you possibly have a\n> link to the series so I can find it more easily on the mailing list?\n>\n\nSince It's been so long I feel it's better I rerolled it, rebasing on\n'master'. So I'll\ndo that soon.\n\n-- \nRegards,\nKarthik Nayak\n"}]}