{"thread":{"id":"33574","subject":"What's cooking in git.git (Apr 2013, #07; Mon, 22)","startedAt":"2013-04-22T20:07:03Z","lastAt":"2013-04-29T17:41:55Z","messageCount":22,"participants":["Junio C Hamano","Johannes Sixt","Felipe Contreras"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"215148","messageId":"7vvc7enxco.fsf@alter.siamese.dyndns.org","threadId":"33574","inReplyTo":null,"subject":"What's cooking in git.git (Apr 2013, #07; Mon, 22)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-22T20:07:03Z","receivedAt":"2013-04-22T20:07:03Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"What's cooking in git.git (Apr 2013, #07; Mon, 22)\n--------------------------------------------------\n\nHere 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'.\n\nBoth of the two topics on preparing \"git add\" users for the\nbehaviour change in Git 2.0 are in 'master'.  We may want to tweak\nthe wording of warning messages and such before the feature freeze.\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* ap/strbuf-humanize (2013-04-10) 2 commits\n  (merged to 'next' on 2013-04-14 at 66d7af5)\n + count-objects: add -H option to humanize sizes\n + strbuf: create strbuf_humanise_bytes() to show byte sizes\n\n Teach \"--human-readable\" aka \"-H\" option to \"git count-objects\" to\n show various large numbers in Ki/Mi/GiB scaled as necessary.\n\n I've decided to let this topic supersede mc/count-objects-kibibytes.\n Human users will get an even easier output with \"-H\" and by not\n changing the output without an explicit option we do not have to\n break third-party tools that may have been reading from the output\n of this command.\n\n\n* as/clone-reference-with-gitfile (2013-04-09) 2 commits\n  (merged to 'next' on 2013-04-15 at ab0d128)\n + clone: Allow repo using gitfile as a reference\n + clone: Fix error message for reference repository\n\n \"git clone\" did not work if a repository pointed at by the\n \"--reference\" option is a gitfile that points at another place.\n\n\n* fc/branch-upstream-color (2013-04-15) 1 commit\n  (merged to 'next' on 2013-04-15 at 2fc50fd)\n + branch: colour upstream branches\n\n Add more colors to \"git branch -vv\" output.\n\n\n* fc/remote-hg (2013-04-11) 21 commits\n  (merged to 'next' on 2013-04-16 at cbeaf41)\n + remote-hg: activate graphlog extension for hg_log()\n + remote-hg: fix bad file paths\n + remote-hg: document location of stored hg repository\n + remote-hg: fix bad state issue\n + remote-hg: add 'insecure' option\n + remote-hg: add simple mail test\n + remote-hg: add basic author tests\n + remote-hg: show more proper errors\n + remote-hg: force remote push\n + remote-hg: push to the appropriate branch\n + remote-hg: update tags globally\n + remote-hg: update remote bookmarks\n + remote-hg: refactor export\n + remote-hg: split bookmark handling\n + remote-hg: redirect buggy mercurial output\n + remote-hg: trivial test cleanups\n + remote-hg: make sure fake bookmarks are updated\n + remote-hg: fix for files with spaces\n + remote-hg: properly report errors on bookmark pushes\n + remote-hg: add missing config variable in doc\n + remote-hg: trivial cleanups\n\n Updates remote-hg helper (in contrib/).\n\n\n* jk/a-thread-only-dies-once (2013-04-16) 2 commits\n  (merged to 'next' on 2013-04-18 at 3208f44)\n + run-command: use thread-aware die_is_recursing routine\n + usage: allow pluggable die-recursion checks\n\n A regression fix for the logic to detect die() handler triggering\n itself recursively.\n\n\n* jk/chopped-ident (2013-04-17) 3 commits\n  (merged to 'next' on 2013-04-19 at ecec2d4)\n + blame: handle broken commit headers gracefully\n + pretty: handle broken commit headers gracefully\n + cat-file: print tags raw for \"cat-file -p\"\n\n A commit object whose author or committer ident are malformed\n crashed some code that trusted that a name, an email and an\n timestamp can always be found in it.\n\n\n* jk/doc-http-backend (2013-04-13) 3 commits\n  (merged to 'next' on 2013-04-19 at 7932840)\n + doc/http-backend: match query-string in apache half-auth example\n + doc/http-backend: give some lighttpd config examples\n + doc/http-backend: clarify \"half-auth\" repo configuration\n\n Improve documentation to illustrate \"push authenticated, fetch\n anonymous\" configuration for smart HTTP servers.\n\n\n* jx/i18n-branch-error-messages (2013-04-15) 1 commit\n  (merged to 'next' on 2013-04-18 at 630c211)\n + i18n: branch: mark strings for translation\n\n\n* lf/read-blob-data-from-index (2013-04-17) 3 commits\n  (merged to 'next' on 2013-04-17 at 611208f)\n + convert.c: remove duplicate code\n + read_blob_data_from_index(): optionally return the size of blob data\n + attr.c: extract read_index_data() as read_blob_data_from_index()\n\n Reduce duplicated code between convert.c and attr.c.\n\n\n* mv/sequencer-pick-error-diag (2013-04-11) 1 commit\n  (merged to 'next' on 2013-04-16 at a2da926)\n + cherry-pick: make sure all input objects are commits\n\n \"git cherry-pick $blob $tree\" is diagnosed as a nonsense.\n\n\n* mv/ssl-ftp-curl (2013-04-12) 1 commit\n  (merged to 'next' on 2013-04-15 at 7fdada6)\n + Support FTP-over-SSL/TLS for regular FTP\n\n Does anybody really use commit walkers over ftp???\n\n\n* nd/checkout-keep-sparse (2013-04-15) 1 commit\n  (merged to 'next' on 2013-04-19 at 803dabc)\n + checkout: add --ignore-skip-worktree-bits in sparse checkout mode\n\n Make the initial \"sparse\" selection of the paths more sticky across\n \"git checkout\".\n\n\n* rt/commentchar-fmt-merge-msg (2013-04-18) 1 commit\n  (merged to 'next' on 2013-04-18 at 96799bd)\n + t6200: avoid path mangling issue on Windows\n\n A test fix for recent update.\n\n\n* ta/glossary (2013-04-15) 4 commits\n  (merged to 'next' on 2013-04-19 at 63ee8a4)\n + glossary: improve definitions of refspec and pathspec\n + The name of the hash function is \"SHA-1\", not \"SHA1\"\n + glossary: improve description of SHA-1 related topics\n + glossary: remove outdated/misleading/irrelevant entries\n\n\n* th/bisect-final-log (2013-04-15) 1 commit\n  (merged to 'next' on 2013-04-19 at 89d2041)\n + bisect: Store first bad commit as comment in log file\n\n Leave a commit to note what the final outcome was in the bisect log\n file.\n\n* tr/copy-revisions-from-stdin (2013-04-16) 1 commit\n  (merged to 'next' on 2013-04-16 at d882870)\n + read_revisions_from_stdin: make copies for handle_revision_arg\n\n A fix to a long-standing issue in the command line parser for\n revisions, which was triggered by mv/sequence-pick-error-diag topic.\n\n--------------------------------------------------\n[New Topics]\n\n* jh/checkout-auto-tracking (2013-04-21) 8 commits\n  (merged to 'next' on 2013-04-22 at 2356700)\n + glossary: Update and rephrase the definition of a remote-tracking branch\n + branch.c: Validate tracking branches with refspecs instead of refs/remotes/*\n + t9114.2: Don't use --track option against \"svn-remote\"-tracking branches\n + t7201.24: Add refspec to keep --track working\n + t3200.39: tracking setup should fail if there is no matching refspec.\n + checkout: Use remote refspecs when DWIMming tracking branches\n + t2024: Show failure to use refspec when DWIMming remote branch names\n + t2024: Add tests verifying current DWIM behavior of 'git checkout <branch>'\n\n Updates \"git checkout foo\" that DWIMs the intended \"upstream\" and\n turns it into \"git checkout -t -b foo remotes/origin/foo\" to\n correctly take existing remote definitions into account.  The\n remote \"origin\" may be what uniquely map its own branch to\n remotes/some/where/foo but that some/where may not be \"origin\".\n\n Will cook in 'next'.\n\n\n* mg/more-textconv (2013-04-19) 6 commits\n - grep: honor --textconv for the case rev:path\n - grep: allow to use textconv filters\n - t7008: demonstrate behavior of grep with textconv\n - cat-file: do not die on --textconv without textconv filters\n - show: honor --textconv for blobs\n - t4030: demonstrate behavior of show with textconv\n\n Will be rerolled.\n\n\n* jk/receive-pack-deadlocks-with-early-failure (2013-04-19) 1 commit\n  (merged to 'next' on 2013-04-22 at 1e27177)\n + receive-pack: close sideband fd on early pack errors\n\n When receive-pack detects error in the pack header it received in\n order to decide which of unpack-objects or index-pack to run, it\n returned without closing the error stream, which led to a hang\n sideband thread.\n\n Will fast-track to 'master'.\n\n\n* fc/untracked-zsh-prompt (2013-04-21) 1 commit\n  (merged to 'next' on 2013-04-22 at 472da3e)\n + prompt: fix untracked files for zsh\n\n Will fast-track to 'master'.\n\n\n* jn/glossary-revision (2013-04-21) 1 commit\n - glossary: a revision is just a commit\n\n The wording for \"revision\" in the glossary wanted to say it refers\n to \"commit (noun) as a concept\" but it was badly phrased.\n\n Will cook in 'next'.\n\n This may need further updates to hint that in contexts where it is\n clear, the word may refer to an object name, not necessarily a\n commit.\n\n\n* rr/shortlog-doc (2013-04-22) 8 commits\n - builtin/shortlog.c: make usage string consistent with log\n - builtin/log.c: make usage string consistent with doc\n - git-shortlog.txt: make SYNOPSIS match log, update OPTIONS\n - git-log.txt: rewrite note on why \"--\" may be required\n - git-log.txt: generalize <since>..<until>\n - git-log.txt: order OPTIONS properly; move <since>..<until>\n - revisions.txt: clarify the .. and ... syntax\n - git-shortlog.txt: remove (-h|--help) from OPTIONS\n\n Update documentation for \"log\" and \"shortlog\".\n\n Looked reasonable.\n Will merge to 'next'.\n\n\n* mh/multimail (2013-04-21) 1 commit\n - git-multimail: a replacement for post-receive-email\n\n Waiting for comments.\n\n--------------------------------------------------\n[Stalled]\n\n* jc/format-patch (2013-04-22) 2 commits\n - format-patch: --inline-single\n - format-patch: rename \"no_inline\" field\n\n A new option to send a single patch to the standard output to be\n appended at the bottom of a message.  I personally have no need for\n this, but it was easy enough to cobble together.  Tests, docs and\n stripping out more MIMEy stuff are left as exercises to interested\n parties.\n\n Not ready for inclusion.\n\n\n* jk/gitweb-utf8 (2013-04-08) 4 commits\n - gitweb: Fix broken blob action parameters on blob/commitdiff pages\n - gitweb: Don't append ';js=(0|1)' to external links\n - gitweb: Make feed title valid utf8\n - gitweb: Fix utf8 encoding for blob_plain, blobdiff_plain, commitdiff_plain, and patch\n\n Various fixes to gitweb.\n\n Waiting for a reroll after a review.\n\n\n* jk/commit-info-slab (2013-04-19) 3 commits\n - commit-slab: introduce a macro to define a slab for new type\n - commit-slab: avoid large realloc\n - commit: allow associating auxiliary info on-demand\n\n Technology demonstration to show a way we could use unbound number\n of flag bits on commit objects.\n\n\n* jn/config-ignore-inaccessible (2013-04-15) 1 commit\n - config: allow inaccessible configuration under $HOME\n\n When $HOME is misconfigured to point at an unreadable directory, we\n used to complain and die. This loosens the check.\n\n I do not think we agreed that this is a good idea, though.\n\n--------------------------------------------------\n[Cooking]\n\n* jc/prune-all (2013-04-18) 3 commits\n  (merged to 'next' on 2013-04-22 at b00ccf6)\n + api-parse-options.txt: document \"no-\" for non-boolean options\n + git-gc.txt, git-reflog.txt: document new expiry options\n + date.c: add parse_expiry_date()\n\n We used the approxidate() parser for \"--expire=<timestamp>\" options\n of various commands, but it is better to treat --expire=all and\n --expire=now a bit more specially than using the current timestamp.\n Update \"git gc\" and \"git reflog\" with a new parsing function for\n expiry dates.\n\n Will cook in 'next'.\n\n\n* nd/pretty-formats (2013-04-18) 13 commits\n  (merged to 'next' on 2013-04-22 at 3d63014)\n + pretty: support %>> that steal trailing spaces\n + pretty: support truncating in %>, %< and %><\n + pretty: support padding placeholders, %< %> and %><\n + pretty: add %C(auto) for auto-coloring\n + pretty: split color parsing into a separate function\n + pretty: two phase conversion for non utf-8 commits\n + utf8.c: add reencode_string_len() that can handle NULs in string\n + utf8.c: add utf8_strnwidth() with the ability to skip ansi sequences\n + utf8.c: move display_mode_esc_sequence_len() for use by other functions\n + pretty: share code between format_decoration and show_decorations\n + pretty-formats.txt: wrap long lines\n + pretty: get the correct encoding for --pretty:format=%e\n + pretty: save commit encoding from logmsg_reencode if the caller needs it\n\n pretty-printing body of the commit that is stored in non UTF-8\n encoding did not work well.  The early part of this series fixes\n it.  And then it adds %C(auto) specifier that turns the coloring on\n when we are emitting to the terminal, and adds column-aligning\n format directives.\n\n Will merge to 'master'.\n\n\n* kb/status-ignored-optim-2 (2013-04-15) 14 commits\n  (merged to 'next' on 2013-04-21 at d2a5c70)\n + dir.c: git-status --ignored: don't scan the work tree twice\n + dir.c: git-status --ignored: don't scan the work tree three times\n + dir.c: git-status: avoid is_excluded checks for tracked files\n + dir.c: replace is_path_excluded with now equivalent is_excluded API\n + dir.c: unify is_excluded and is_path_excluded APIs\n + dir.c: move prep_exclude\n + dir.c: factor out parts of last_exclude_matching for later reuse\n + dir.c: git-clean -d -X: don't delete tracked directories\n + dir.c: make 'git-status --ignored' work within leading directories\n + dir.c: git-status --ignored: don't list empty directories as ignored\n + dir.c: git-ls-files --directories: don't hide empty directories\n + dir.c: git-status --ignored: don't list empty ignored directories\n + dir.c: git-status --ignored: don't list files in ignored directories\n + dir.c: git-status --ignored: don't drop ignored directories\n\n Rerolls kb/status-ignored-optim topic (reverted from 'next').\n With help from Karsten, conflicts with as/check-ignore topic have\n been sorted out and it is now in 'pu'.\n\n Will merge to 'master'.\n\n\n* as/check-ignore (2013-04-11) 5 commits\n  (merged to 'next' on 2013-04-21 at 7515aa8)\n + Documentation: add caveats about I/O buffering for check-{attr,ignore}\n + check-ignore: allow incremental streaming of queries via --stdin\n + check-ignore: move setup into cmd_check_ignore()\n + check-ignore: add -n / --non-matching option\n + t0008: remove duplicated test fixture data\n\n Enhance \"check-ignore\" (1.8.2 update) to work more like \"check-attr\"\n over bidi-pipes.\n\n Will cook in 'next'.\n The test in the second from the tip needs to be updated.\n\n\n* mh/packed-refs-various (2013-04-15) 33 commits\n - refs: handle the main ref_cache specially\n - refs: change do_for_each_*() functions to take ref_cache arguments\n - pack_one_ref(): do some cheap tests before a more expensive one\n - pack_one_ref(): use write_packed_entry() to do the writing\n - pack_one_ref(): use function peel_entry()\n - refs: inline function do_not_prune()\n - pack_refs(): change to use do_for_each_entry()\n - refs: use same lock_file object for both ref-packing functions\n - pack_one_ref(): rename \"path\" parameter to \"refname\"\n - pack-refs: merge code from pack-refs.{c,h} into refs.{c,h}\n - pack-refs: rename handle_one_ref() to pack_one_ref()\n - refs: extract a function write_packed_entry()\n - repack_without_ref(): write peeled refs in the rewritten file\n - t3211: demonstrate loss of peeled refs if a packed ref is deleted\n - refs: change how packed refs are deleted\n - search_ref_dir(): return an index rather than a pointer\n - repack_without_ref(): silence errors for dangling packed refs\n - t3210: test for spurious error messages for dangling packed refs\n - refs: change the internal reference-iteration API\n - refs: extract a function peel_entry()\n - peel_ref(): fix return value for non-peelable, not-current reference\n - peel_object(): give more specific information in return value\n - refs: extract function peel_object()\n - refs: extract a function ref_resolves_to_object()\n - repack_without_ref(): use function get_packed_ref()\n - peel_ref(): use function get_packed_ref()\n - get_packed_ref(): return a ref_entry\n - do_for_each_ref_in_dirs(): remove dead code\n - refs: define constant PEELED_LINE_LENGTH\n - refs: document how current_ref is used\n - refs: document do_for_each_ref() and do_one_ref()\n - refs: document the fields of struct ref_value\n - refs: document flags constants REF_*\n\n Updates reading and updating packed-refs file, correcting corner\n case bugs.\n\n Waiting for comments.\n\n\n* jk/remote-helper-with-signed-tags (2013-04-15) 3 commits\n  (merged to 'next' on 2013-04-21 at 0231d45)\n + transport-helper: add 'signed-tags' capability\n + transport-helper: pass --signed-tags=warn-strip to fast-export\n + fast-export: add --signed-tags=warn-strip mode\n\n Allows remote-helpers to declare they can handle signed tags, and\n issue a warning when using those that don't.\n\n Will merge to 'master'.\n\n\n* jn/gitweb-install-doc (2013-04-17) 2 commits\n  (merged to 'next' on 2013-04-22 at a5d4812)\n + gitweb/INSTALL: GITWEB_CONFIG_SYSTEM is for backward compatibility\n + gitweb/INSTALL: Simplify description of GITWEB_CONFIG_SYSTEM\n\n Reword gitweb configuration instrutions.\n\n Will merge to 'master'.\n\n\n* fc/transport-helper-error-reporting (2013-04-17) 9 commits\n  (merged to 'next' on 2013-04-22 at 5ba6467)\n + transport-helper: update remote helper namespace\n + transport-helper: trivial code shuffle\n + transport-helper: warn when refspec is not used\n + transport-helper: clarify pushing without refspecs\n + transport-helper: update refspec documentation\n + transport-helper: clarify *:* refspec\n + transport-helper: improve push messages\n + transport-helper: mention helper name when it dies\n + transport-helper: report errors properly\n\n Update transport helper to report errors and maintain ref hierarchy\n used to keep track of remote helper state better.\n\n Will merge to 'master'.\n\n\n* jk/submodule-subdirectory-ok (2013-04-18) 2 commits\n  (merged to 'next' on 2013-04-22 at f211e25)\n + submodule: drop the top-level requirement\n + rev-parse: add --prefix option\n\n Allow various subcommands of \"git submodule\" to be run not from the\n top of the working tree of the superproject.\n\n Will cook in 'next'.\n\n\n* jl/submodule-mv (2013-04-11) 4 commits\n  (merged to 'next' on 2013-04-19 at 45ae3c9)\n + rm: delete .gitmodules entry of submodules removed from the work tree\n + Teach mv to update the path entry in .gitmodules for moved submodules\n + Teach mv to move submodules using a gitfile\n + Teach mv to move submodules together with their work trees\n\n \"git mv A B\" when moving a submodule A does \"the right thing\",\n inclusing relocating its working tree and adjusting the paths in\n the .gitmodules file.\n\n Will cook in 'next'.\n\n\n* jn/add-2.0-u-A-sans-pathspec (2013-04-03) 1 commit\n - git add: -u/-A now affects the entire working tree\n\n Will cook in 'next' until Git 2.0.\n\n\n* nd/magic-pathspecs (2013-03-31) 45 commits\n . Rename field \"raw\" to \"_raw\" in struct pathspec\n . pathspec: support :(glob) syntax\n . pathspec: make --literal-pathspecs disable pathspec magic\n . pathspec: support :(literal) syntax for noglob pathspec\n . Kill limit_pathspec_to_literal() as it's only used by parse_pathspec()\n . parse_pathspec: preserve prefix length via PATHSPEC_PREFIX_ORIGIN\n . parse_pathspec: make sure the prefix part is wildcard-free\n . tree-diff: remove the use of pathspec's raw[] in follow-rename codepath\n . Remove match_pathspec() in favor of match_pathspec_depth()\n . Remove init_pathspec() in favor of parse_pathspec()\n . Remove diff_tree_{setup,release}_paths\n . Convert common_prefix() to use struct pathspec\n . Convert add_files_to_cache to take struct pathspec\n . Convert {read,fill}_directory to take struct pathspec\n . Convert refresh_index to take struct pathspec\n . Convert report_path_error to take struct pathspec\n . checkout: convert read_tree_some to take struct pathspec\n . Convert unmerge_cache to take struct pathspec\n . Convert run_add_interactive to use struct pathspec\n . Convert read_cache_preload() to take struct pathspec\n . reset: convert to use parse_pathspec\n . add: convert to use parse_pathspec\n . check-ignore: convert to use parse_pathspec\n . archive: convert to use parse_pathspec\n . ls-files: convert to use parse_pathspec\n . rm: convert to use parse_pathspec\n . checkout: convert to use parse_pathspec\n . rerere: convert to use parse_pathspec\n . status: convert to use parse_pathspec\n . commit: convert to use parse_pathspec\n . clean: convert to use parse_pathspec\n . Guard against new pathspec magic in pathspec matching code\n . parse_pathspec: support prefixing original patterns\n . parse_pathspec: support stripping/checking submodule paths\n . parse_pathspec: support stripping submodule trailing slashes\n . parse_pathspec: a special flag for max_depth feature\n . Convert some get_pathspec() calls to parse_pathspec()\n . parse_pathspec: add PATHSPEC_PREFER_{CWD,FULL}\n . parse_pathspec: save original pathspec for reporting\n . Add parse_pathspec() that converts cmdline args to struct pathspec\n . pathspec: add copy_pathspec\n . pathspec: i18n-ize error strings in pathspec parsing code\n . Move struct pathspec and related functions to pathspec.[ch]\n . clean: remove unused variable \"seen\"\n . setup.c: check that the pathspec magic ends with \")\"\n\n Migrate the rest of codebase to use \"struct pathspec\" more.\n\n Will be rerolled.\n\n\n* tr/line-log (2013-04-22) 13 commits\n  (merged to 'next' on 2013-04-22 at 8f2c1de)\n + git-log(1): remove --full-line-diff description\n  (merged to 'next' on 2013-04-21 at cd92620)\n + line-log: fix documentation formatting\n  (merged to 'next' on 2013-04-15 at 504559e)\n + log -L: improve comments in process_all_files()\n + log -L: store the path instead of a diff_filespec\n + log -L: test merge of parallel modify/rename\n + t4211: pass -M to 'git log -M -L...' test\n  (merged to 'next' on 2013-04-05 at 5afb00c)\n + log -L: fix overlapping input ranges\n + log -L: check range set invariants when we look it up\n  (merged to 'next' on 2013-04-01 at 5be920c)\n + Speed up log -L... -M\n + log -L: :pattern:file syntax to find by funcname\n + Implement line-history search (git log -L)\n + Export rewrite_parents() for 'log -L'\n + Refactor parse_loc\n\n Will cook in 'next'.\n\n\n* jc/push-2.0-default-to-simple (2013-04-03) 1 commit\n - push: switch default from \"matching\" to \"simple\"\n\n The early bits to adjust the tests have been merged to 'master'.\n\n Will cook in 'next' until Git 2.0.\n\n\n* jc/add-2.0-delete-default (2013-04-21) 1 commit\n - git add <pathspec>... defaults to \"-A\"\n\n Will cook in 'next' until Git 2.0.\n"},{"id":"215270","messageId":"7vwqrtgi1r.fsf@alter.siamese.dyndns.org","threadId":"33574","inReplyTo":"7vvc7enxco.fsf@alter.siamese.dyndns.org","subject":"What's cooking in git.git (Apr 2013, #08; Tue, 23)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-23T19:31:44Z","receivedAt":"2013-04-23T19:31:44Z","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'.\n\nBoth of the two topics on preparing \"git add\" users for the\nbehaviour change in Git 2.0 are in 'master'.  We may want to tweak\nthe wording of warning messages and such before the feature freeze\n(see jc/add-ignore-removal topic in 'pu' for a proposal).\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* fc/untracked-zsh-prompt (2013-04-21) 1 commit\n  (merged to 'next' on 2013-04-22 at 472da3e)\n + prompt: fix untracked files for zsh\n\n Zsh completion forgot that '%' character used to signal untracked\n files needs to be escaped with another '%'.\n\n\n* jk/receive-pack-deadlocks-with-early-failure (2013-04-19) 1 commit\n  (merged to 'next' on 2013-04-22 at 1e27177)\n + receive-pack: close sideband fd on early pack errors\n\n When receive-pack detects error in the pack header it received in\n order to decide which of unpack-objects or index-pack to run, it\n returned without closing the error stream, which led to a hang\n sideband thread.\n\n\n* jn/gitweb-install-doc (2013-04-17) 2 commits\n  (merged to 'next' on 2013-04-22 at a5d4812)\n + gitweb/INSTALL: GITWEB_CONFIG_SYSTEM is for backward compatibility\n + gitweb/INSTALL: Simplify description of GITWEB_CONFIG_SYSTEM\n\n Reword gitweb configuration instrutions.\n\n\n* kb/status-ignored-optim-2 (2013-04-15) 14 commits\n  (merged to 'next' on 2013-04-21 at d2a5c70)\n + dir.c: git-status --ignored: don't scan the work tree twice\n + dir.c: git-status --ignored: don't scan the work tree three times\n + dir.c: git-status: avoid is_excluded checks for tracked files\n + dir.c: replace is_path_excluded with now equivalent is_excluded API\n + dir.c: unify is_excluded and is_path_excluded APIs\n + dir.c: move prep_exclude\n + dir.c: factor out parts of last_exclude_matching for later reuse\n + dir.c: git-clean -d -X: don't delete tracked directories\n + dir.c: make 'git-status --ignored' work within leading directories\n + dir.c: git-status --ignored: don't list empty directories as ignored\n + dir.c: git-ls-files --directories: don't hide empty directories\n + dir.c: git-status --ignored: don't list empty ignored directories\n + dir.c: git-status --ignored: don't list files in ignored directories\n + dir.c: git-status --ignored: don't drop ignored directories\n\n A handful of issues in the code to traverse working tree to find\n untracked and/or ignored files have been fixed, and the general\n codepath involved in \"status -u\" and \"clean\" have been cleaned up\n and optimized.\n\n\n* nd/pretty-formats (2013-04-18) 13 commits\n  (merged to 'next' on 2013-04-22 at 3d63014)\n + pretty: support %>> that steal trailing spaces\n + pretty: support truncating in %>, %< and %><\n + pretty: support padding placeholders, %< %> and %><\n + pretty: add %C(auto) for auto-coloring\n + pretty: split color parsing into a separate function\n + pretty: two phase conversion for non utf-8 commits\n + utf8.c: add reencode_string_len() that can handle NULs in string\n + utf8.c: add utf8_strnwidth() with the ability to skip ansi sequences\n + utf8.c: move display_mode_esc_sequence_len() for use by other functions\n + pretty: share code between format_decoration and show_decorations\n + pretty-formats.txt: wrap long lines\n + pretty: get the correct encoding for --pretty:format=%e\n + pretty: save commit encoding from logmsg_reencode if the caller needs it\n\n pretty-printing body of the commit that is stored in non UTF-8\n encoding did not work well.  The early part of this series fixes\n it.  And then it adds %C(auto) specifier that turns the coloring on\n when we are emitting to the terminal, and adds column-aligning\n format directives.\n\n--------------------------------------------------\n[New Topics]\n\n* jc/add-2.0-ignore-removal (2013-04-22) 1 commit\n - git add <pathspec>... defaults to \"-A\"\n (this branch uses jc/add-ignore-removal.)\n\n Updated endgame for \"git add <pathspec>\" that defaults to \"--all\"\n aka \"--no-ignore-removal\".\n\n Will cook in 'next' until Git 2.0.\n\n\n* jc/add-ignore-removal (2013-04-22) 2 commits\n - git add: rephrase -A/--no-all warning\n - git add: --ignore-removal is a better named --no-all\n (this branch is used by jc/add-2.0-ignore-removal.)\n\n Introduce \"--ignore-removal\" as a synonym to \"--no-all\" for \"git\n add\", and improve the 2.0 migration warning with it.\n\n Will merge to 'next'.\n\n\n* fc/remote-hg (2013-04-22) 16 commits\n - remote-hg: strip extra newline\n - remote-hg: use marks instead of inlined files\n - remote-hg: small performance improvement\n - remote-hg: allow refs with spaces\n - remote-hg: don't update bookmarks unnecessarily\n - remote-hg: add support for schemes extension\n - remote-hg: improve email sanitation\n - remote-hg: add custom local tag write code\n - remote-hg: write tags in the appropriate branch\n - remote-hg: custom method to write tags\n - remote-hg: add support for tag objects\n - remote-hg: add branch_tip() helper\n - remote-hg: properly mark branches up-to-date\n - remote-hg: use python urlparse\n - remote-hg: safer bookmark pushing\n - remote-helpers: avoid has_key\n\n Further updates to remote-hg (in contrib/).\n\n Will merge to 'next' after a few days.\n\n\n* th/bisect-skipped-log (2013-04-23) 1 commit\n - bisect: Log possibly bad, skipped commits at bisection end\n\n--------------------------------------------------\n[Stalled]\n\n* jc/format-patch (2013-04-22) 2 commits\n - format-patch: --inline-single\n - format-patch: rename \"no_inline\" field\n\n A new option to send a single patch to the standard output to be\n appended at the bottom of a message.  I personally have no need for\n this, but it was easy enough to cobble together.  Tests, docs and\n stripping out more MIMEy stuff are left as exercises to interested\n parties.\n\n Not ready for inclusion.\n\n\n* jk/gitweb-utf8 (2013-04-08) 4 commits\n - gitweb: Fix broken blob action parameters on blob/commitdiff pages\n - gitweb: Don't append ';js=(0|1)' to external links\n - gitweb: Make feed title valid utf8\n - gitweb: Fix utf8 encoding for blob_plain, blobdiff_plain, commitdiff_plain, and patch\n\n Various fixes to gitweb.\n\n Waiting for a reroll after a review.\n\n\n* jk/commit-info-slab (2013-04-19) 3 commits\n - commit-slab: introduce a macro to define a slab for new type\n - commit-slab: avoid large realloc\n - commit: allow associating auxiliary info on-demand\n\n Technology demonstration to show a way we could use unbound number\n of flag bits on commit objects.\n\n\n* jn/config-ignore-inaccessible (2013-04-15) 1 commit\n - config: allow inaccessible configuration under $HOME\n\n When $HOME is misconfigured to point at an unreadable directory, we\n used to complain and die. This loosens the check.\n\n I do not think we agreed that this is a good idea, though.\n\n--------------------------------------------------\n[Cooking]\n\n* jh/checkout-auto-tracking (2013-04-21) 8 commits\n  (merged to 'next' on 2013-04-22 at 2356700)\n + glossary: Update and rephrase the definition of a remote-tracking branch\n + branch.c: Validate tracking branches with refspecs instead of refs/remotes/*\n + t9114.2: Don't use --track option against \"svn-remote\"-tracking branches\n + t7201.24: Add refspec to keep --track working\n + t3200.39: tracking setup should fail if there is no matching refspec.\n + checkout: Use remote refspecs when DWIMming tracking branches\n + t2024: Show failure to use refspec when DWIMming remote branch names\n + t2024: Add tests verifying current DWIM behavior of 'git checkout <branch>'\n\n Updates \"git checkout foo\" that DWIMs the intended \"upstream\" and\n turns it into \"git checkout -t -b foo remotes/origin/foo\" to\n correctly take existing remote definitions into account.  The\n remote \"origin\" may be what uniquely map its own branch to\n remotes/some/where/foo but that some/where may not be \"origin\".\n\n Will cook in 'next'.\n\n\n* mg/more-textconv (2013-04-23) 7 commits\n - git grep: honor textconv by default\n - grep: honor --textconv for the case rev:path\n - grep: allow to use textconv filters\n - t7008: demonstrate behavior of grep with textconv\n - cat-file: do not die on --textconv without textconv filters\n - show: honor --textconv for blobs\n - t4030: demonstrate behavior of show with textconv\n\n Rerolld. I am not sure if I like \"show <blob>\" and \"grep\" that use\n textconv by default, though.\n\n\n* jn/glossary-revision (2013-04-21) 1 commit\n - glossary: a revision is just a commit\n\n The wording for \"revision\" in the glossary wanted to say it refers\n to \"commit (noun) as a concept\" but it was badly phrased.\n\n Will cook in 'next'.\n\n This may need further updates to hint that in contexts where it is\n clear, the word may refer to an object name, not necessarily a\n commit.\n\n\n* rr/shortlog-doc (2013-04-22) 8 commits\n - builtin/shortlog.c: make usage string consistent with log\n - builtin/log.c: make usage string consistent with doc\n - git-shortlog.txt: make SYNOPSIS match log, update OPTIONS\n - git-log.txt: rewrite note on why \"--\" may be required\n - git-log.txt: generalize <since>..<until>\n - git-log.txt: order OPTIONS properly; move <since>..<until>\n - revisions.txt: clarify the .. and ... syntax\n - git-shortlog.txt: remove (-h|--help) from OPTIONS\n\n Update documentation for \"log\" and \"shortlog\".\n\n Looked reasonable.\n Will merge to 'next'.\n\n\n* mh/multimail (2013-04-21) 1 commit\n - git-multimail: a replacement for post-receive-email\n\n Waiting for comments.\n\n\n* jc/prune-all (2013-04-18) 3 commits\n  (merged to 'next' on 2013-04-22 at b00ccf6)\n + api-parse-options.txt: document \"no-\" for non-boolean options\n + git-gc.txt, git-reflog.txt: document new expiry options\n + date.c: add parse_expiry_date()\n (this branch is used by mh/packed-refs-various.)\n\n We used the approxidate() parser for \"--expire=<timestamp>\" options\n of various commands, but it is better to treat --expire=all and\n --expire=now a bit more specially than using the current timestamp.\n Update \"git gc\" and \"git reflog\" with a new parsing function for\n expiry dates.\n\n Will cook in 'next'.\n\n\n* as/check-ignore (2013-04-11) 5 commits\n  (merged to 'next' on 2013-04-21 at 7515aa8)\n + Documentation: add caveats about I/O buffering for check-{attr,ignore}\n + check-ignore: allow incremental streaming of queries via --stdin\n + check-ignore: move setup into cmd_check_ignore()\n + check-ignore: add -n / --non-matching option\n + t0008: remove duplicated test fixture data\n\n Enhance \"check-ignore\" (1.8.2 update) to work more like \"check-attr\"\n over bidi-pipes.\n\n Will cook in 'next'.\n The test in the second from the tip needs to be updated.\n\n\n* mh/packed-refs-various (2013-04-23) 33 commits\n - refs: handle the main ref_cache specially\n - refs: change do_for_each_*() functions to take ref_cache arguments\n - pack_one_ref(): do some cheap tests before a more expensive one\n - pack_one_ref(): use write_packed_entry() to do the writing\n - pack_one_ref(): use function peel_entry()\n - refs: inline function do_not_prune()\n - pack_refs(): change to use do_for_each_entry()\n - refs: use same lock_file object for both ref-packing functions\n - pack_one_ref(): rename \"path\" parameter to \"refname\"\n - pack-refs: merge code from pack-refs.{c,h} into refs.{c,h}\n - pack-refs: rename handle_one_ref() to pack_one_ref()\n - refs: extract a function write_packed_entry()\n - repack_without_ref(): write peeled refs in the rewritten file\n - t3211: demonstrate loss of peeled refs if a packed ref is deleted\n - refs: change how packed refs are deleted\n - search_ref_dir(): return an index rather than a pointer\n - repack_without_ref(): silence errors for dangling packed refs\n - t3210: test for spurious error messages for dangling packed refs\n - refs: change the internal reference-iteration API\n - refs: extract a function peel_entry()\n - peel_ref(): fix return value for non-peelable, not-current reference\n - peel_object(): give more specific information in return value\n - refs: extract function peel_object()\n - refs: extract a function ref_resolves_to_object()\n - repack_without_ref(): use function get_packed_ref()\n - peel_ref(): use function get_packed_ref()\n - get_packed_ref(): return a ref_entry\n - do_for_each_ref_in_dirs(): remove dead code\n - refs: define constant PEELED_LINE_LENGTH\n - refs: document how current_ref is used\n - refs: document do_for_each_ref() and do_one_ref()\n - refs: document the fields of struct ref_value\n - refs: document flags constants REF_*\n (this branch uses jc/prune-all.)\n\n Updates reading and updating packed-refs file, correcting corner\n case bugs.\n\n Waiting for comments.\n\n\n* jk/remote-helper-with-signed-tags (2013-04-15) 3 commits\n  (merged to 'next' on 2013-04-21 at 0231d45)\n + transport-helper: add 'signed-tags' capability\n + transport-helper: pass --signed-tags=warn-strip to fast-export\n + fast-export: add --signed-tags=warn-strip mode\n\n Allows remote-helpers to declare they can handle signed tags, and\n issue a warning when using those that don't.\n\n Will merge to 'master'.\n\n\n* fc/transport-helper-error-reporting (2013-04-17) 9 commits\n  (merged to 'next' on 2013-04-22 at 5ba6467)\n + transport-helper: update remote helper namespace\n + transport-helper: trivial code shuffle\n + transport-helper: warn when refspec is not used\n + transport-helper: clarify pushing without refspecs\n + transport-helper: update refspec documentation\n + transport-helper: clarify *:* refspec\n + transport-helper: improve push messages\n + transport-helper: mention helper name when it dies\n + transport-helper: report errors properly\n\n Update transport helper to report errors and maintain ref hierarchy\n used to keep track of remote helper state better.\n\n Will merge to 'master'.\n\n\n* jk/submodule-subdirectory-ok (2013-04-18) 2 commits\n  (merged to 'next' on 2013-04-22 at f211e25)\n + submodule: drop the top-level requirement\n + rev-parse: add --prefix option\n\n Allow various subcommands of \"git submodule\" to be run not from the\n top of the working tree of the superproject.\n\n Will cook in 'next'.\n\n\n* jl/submodule-mv (2013-04-23) 5 commits\n  (merged to 'next' on 2013-04-23 at c04f574)\n + submodule.c: duplicate real_path's return value\n  (merged to 'next' on 2013-04-19 at 45ae3c9)\n + rm: delete .gitmodules entry of submodules removed from the work tree\n + Teach mv to update the path entry in .gitmodules for moved submodules\n + Teach mv to move submodules using a gitfile\n + Teach mv to move submodules together with their work trees\n\n \"git mv A B\" when moving a submodule A does \"the right thing\",\n inclusing relocating its working tree and adjusting the paths in\n the .gitmodules file.\n\n Will cook in 'next'.\n\n\n* jn/add-2.0-u-A-sans-pathspec (2013-04-03) 1 commit\n - git add: -u/-A now affects the entire working tree\n\n Will cook in 'next' until Git 2.0.\n\n\n* nd/magic-pathspecs (2013-03-31) 45 commits\n . Rename field \"raw\" to \"_raw\" in struct pathspec\n . pathspec: support :(glob) syntax\n . pathspec: make --literal-pathspecs disable pathspec magic\n . pathspec: support :(literal) syntax for noglob pathspec\n . Kill limit_pathspec_to_literal() as it's only used by parse_pathspec()\n . parse_pathspec: preserve prefix length via PATHSPEC_PREFIX_ORIGIN\n . parse_pathspec: make sure the prefix part is wildcard-free\n . tree-diff: remove the use of pathspec's raw[] in follow-rename codepath\n . Remove match_pathspec() in favor of match_pathspec_depth()\n . Remove init_pathspec() in favor of parse_pathspec()\n . Remove diff_tree_{setup,release}_paths\n . Convert common_prefix() to use struct pathspec\n . Convert add_files_to_cache to take struct pathspec\n . Convert {read,fill}_directory to take struct pathspec\n . Convert refresh_index to take struct pathspec\n . Convert report_path_error to take struct pathspec\n . checkout: convert read_tree_some to take struct pathspec\n . Convert unmerge_cache to take struct pathspec\n . Convert run_add_interactive to use struct pathspec\n . Convert read_cache_preload() to take struct pathspec\n . reset: convert to use parse_pathspec\n . add: convert to use parse_pathspec\n . check-ignore: convert to use parse_pathspec\n . archive: convert to use parse_pathspec\n . ls-files: convert to use parse_pathspec\n . rm: convert to use parse_pathspec\n . checkout: convert to use parse_pathspec\n . rerere: convert to use parse_pathspec\n . status: convert to use parse_pathspec\n . commit: convert to use parse_pathspec\n . clean: convert to use parse_pathspec\n . Guard against new pathspec magic in pathspec matching code\n . parse_pathspec: support prefixing original patterns\n . parse_pathspec: support stripping/checking submodule paths\n . parse_pathspec: support stripping submodule trailing slashes\n . parse_pathspec: a special flag for max_depth feature\n . Convert some get_pathspec() calls to parse_pathspec()\n . parse_pathspec: add PATHSPEC_PREFER_{CWD,FULL}\n . parse_pathspec: save original pathspec for reporting\n . Add parse_pathspec() that converts cmdline args to struct pathspec\n . pathspec: add copy_pathspec\n . pathspec: i18n-ize error strings in pathspec parsing code\n . Move struct pathspec and related functions to pathspec.[ch]\n . clean: remove unused variable \"seen\"\n . setup.c: check that the pathspec magic ends with \")\"\n\n Migrate the rest of codebase to use \"struct pathspec\" more.\n\n This has nasty conflicts with kb/status-ignored-optim-2,\n as/check-ignore and tr/line-log; I've already asked Duy to hold\n this and later rebase on top of them.\n\n\n* tr/line-log (2013-04-22) 13 commits\n  (merged to 'next' on 2013-04-22 at 8f2c1de)\n + git-log(1): remove --full-line-diff description\n  (merged to 'next' on 2013-04-21 at cd92620)\n + line-log: fix documentation formatting\n  (merged to 'next' on 2013-04-15 at 504559e)\n + log -L: improve comments in process_all_files()\n + log -L: store the path instead of a diff_filespec\n + log -L: test merge of parallel modify/rename\n + t4211: pass -M to 'git log -M -L...' test\n  (merged to 'next' on 2013-04-05 at 5afb00c)\n + log -L: fix overlapping input ranges\n + log -L: check range set invariants when we look it up\n  (merged to 'next' on 2013-04-01 at 5be920c)\n + Speed up log -L... -M\n + log -L: :pattern:file syntax to find by funcname\n + Implement line-history search (git log -L)\n + Export rewrite_parents() for 'log -L'\n + Refactor parse_loc\n\n Will cook in 'next'.\n\n\n* jc/push-2.0-default-to-simple (2013-04-03) 1 commit\n - push: switch default from \"matching\" to \"simple\"\n\n The early bits to adjust the tests have been merged to 'master'.\n\n Will cook in 'next' until Git 2.0.\n\n--------------------------------------------------\n[Discarded]\n\n* jc/add-2.0-delete-default (2013-04-21) 1 commit\n - git add <pathspec>... defaults to \"-A\"\n\n Superseded by jc/add-2.0-ignore-removal\n"},{"id":"215295","messageId":"51779052.8020507@viscovery.net","threadId":"33574","inReplyTo":"7vwqrtgi1r.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Apr 2013, #08; Tue, 23)","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2013-04-24T07:57:06Z","receivedAt":"2013-04-24T07:57:06Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 4/23/2013 21:31, schrieb Junio C Hamano:\n> * fc/transport-helper-error-reporting (2013-04-17) 9 commits\n>   (merged to 'next' on 2013-04-22 at 5ba6467)\n>  + transport-helper: update remote helper namespace\n>  + transport-helper: trivial code shuffle\n>  + transport-helper: warn when refspec is not used\n>  + transport-helper: clarify pushing without refspecs\n>  + transport-helper: update refspec documentation\n>  + transport-helper: clarify *:* refspec\n>  + transport-helper: improve push messages\n>  + transport-helper: mention helper name when it dies\n>  + transport-helper: report errors properly\n> \n>  Update transport helper to report errors and maintain ref hierarchy\n>  used to keep track of remote helper state better.\n> \n>  Will merge to 'master'.\n\nPlease don't, yet. There is a new test case that fails on Windows. I'll\nhave to figure out a work-around.\n\nIn git-remote-testgit we have this code:\n\n\tbefore=$(git for-each-ref --format='%(refname) %(objectname)')\n\n\tgit fast-import \"${testgitmarks_args[@]}\" --quiet\n\n\tafter=$(git for-each-ref --format='%(refname) %(objectname)')\n\n\t# figure out which refs were updated\n\tjoin -e 0 -o '0 1.2 2.2' -a 2 <(echo \"$before\") <(echo \"$after\") |\n\twhile read ref a b\n\tdo\n\t\ttest $a == $b && continue\n\t\techo \"ok $ref\"\n\tdone\n\nThe failure is in the 'join' line: Bash on Windows does not implement\nprocess substitution, and we do not have 'join'. This failing code exists\nsince 93b5cf9c (remote-testgit: report success after an import,\n2012-11-28), but apparently, it did not matter so far.\n\n-- Hannes\n"},{"id":"215297","messageId":"CAMP44s1oX_m0d+2Z3+VkafOhT1bZK_9Z5m1ex456DMdAidEKeg@mail.gmail.com","threadId":"33574","inReplyTo":"51779052.8020507@viscovery.net","subject":"Re: What's cooking in git.git (Apr 2013, #08; Tue, 23)","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-24T08:04:49Z","receivedAt":"2013-04-24T08:04:49Z","isPatch":false,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Wed, Apr 24, 2013 at 2:57 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:\n> Am 4/23/2013 21:31, schrieb Junio C Hamano:\n>> * fc/transport-helper-error-reporting (2013-04-17) 9 commits\n>>   (merged to 'next' on 2013-04-22 at 5ba6467)\n>>  + transport-helper: update remote helper namespace\n>>  + transport-helper: trivial code shuffle\n>>  + transport-helper: warn when refspec is not used\n>>  + transport-helper: clarify pushing without refspecs\n>>  + transport-helper: update refspec documentation\n>>  + transport-helper: clarify *:* refspec\n>>  + transport-helper: improve push messages\n>>  + transport-helper: mention helper name when it dies\n>>  + transport-helper: report errors properly\n>>\n>>  Update transport helper to report errors and maintain ref hierarchy\n>>  used to keep track of remote helper state better.\n>>\n>>  Will merge to 'master'.\n>\n> Please don't, yet. There is a new test case that fails on Windows. I'll\n> have to figure out a work-around.\n\nWhich test case? If it it failed, it failed before this series. I\ndon't see how this new series would affect anything.\n\n-- \nFelipe Contreras\n"},{"id":"215300","messageId":"5177980A.4090305@viscovery.net","threadId":"33574","inReplyTo":"CAMP44s1oX_m0d+2Z3+VkafOhT1bZK_9Z5m1ex456DMdAidEKeg@mail.gmail.com","subject":"Re: What's cooking in git.git (Apr 2013, #08; Tue, 23)","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2013-04-24T08:30:02Z","receivedAt":"2013-04-24T08:30:02Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 4/24/2013 10:04, schrieb Felipe Contreras:\n> On Wed, Apr 24, 2013 at 2:57 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:\n>> Am 4/23/2013 21:31, schrieb Junio C Hamano:\n>>> * fc/transport-helper-error-reporting (2013-04-17) 9 commits\n>>>   (merged to 'next' on 2013-04-22 at 5ba6467)\n>>>  + transport-helper: update remote helper namespace\n>>>  + transport-helper: trivial code shuffle\n>>>  + transport-helper: warn when refspec is not used\n>>>  + transport-helper: clarify pushing without refspecs\n>>>  + transport-helper: update refspec documentation\n>>>  + transport-helper: clarify *:* refspec\n>>>  + transport-helper: improve push messages\n>>>  + transport-helper: mention helper name when it dies\n>>>  + transport-helper: report errors properly\n>>>\n>>>  Update transport helper to report errors and maintain ref hierarchy\n>>>  used to keep track of remote helper state better.\n>>>\n>>>  Will merge to 'master'.\n>>\n>> Please don't, yet. There is a new test case that fails on Windows. I'll\n>> have to figure out a work-around.\n> \n> Which test case? If it it failed, it failed before this series. I\n> don't see how this new series would affect anything.\n\nThe test introduced in the commit at the tip: 'push update refs'.\nMore precisely:\n\n---- 8< ----\nD:\\Src\\mingw-git\\t>sh t5801-remote-helpers.sh\nok 1 - setup repository\nok 2 - cloning from local repo\nok 3 - create new commit on remote\nok 4 - pulling from local repo\nok 5 - pushing to local repo\nok 6 - fetch new branch\nok 7 - fetch multiple branches\nok 8 - push when remote has extra refs\nok 9 - push new branch by name\nnot ok 10 - push new branch with old:new refspec # TODO known breakage\nok 11 - cloning without refspec\nok 12 - pulling without refspecs\nok 13 - pushing without refspecs\nok 14 - pulling without marks\nnot ok 15 - pushing without marks # TODO known breakage\nok 16 - push all with existing object\nok 17 - push ref with existing object\nnot ok 18 - push update refs\n#\n#               (cd local &&\n#               git checkout -b update master &&\n#               echo update >>file &&\n#               git commit -a -m update &&\n#               git push origin update\n#               git rev-parse --verify remotes/origin/update >expect &&\n#               git rev-parse --verify testgit/origin/heads/update >actual &&\n#               test_cmp expect actual\n#               )\n#\nok 19 - proper failure checks for fetching\nok 20 - proper failure checks for pushing\nok 21 - push messages\nok 22 - push signed tag\nok 23 - push signed tag with signed-tags capability\n# still have 2 known breakage(s)\n# failed 1 among remaining 21 test(s)\n1..23\n---- 8< ----\n\nThe verbose failure is:\n\n---- 8< ----\nexpecting success:\n        (cd local &&\n        git checkout -b update master &&\n        echo update >>file &&\n        git commit -a -m update &&\n        git push origin update\n        git rev-parse --verify remotes/origin/update >expect &&\n        git rev-parse --verify testgit/origin/heads/update >actual &&\n        test_cmp expect actual\n        )\n\nSwitched to a new branch 'update'\n[update 86cfeec] update\n Author: A U Thor <author@example.com>\n 1 file changed, 1 insertion(+)\nd:/Src/mingw-git/git-remote-testgit: cannot make pipe for process substitution: Function not implemented\nd:/Src/mingw-git/git-remote-testgit: cannot make pipe for process substitution: Function not implemented\nd:/Src/mingw-git/git-remote-testgit: line 97: join: command not found\nEverything up-to-date\nfatal: Needed a single revision\nnot ok 18 - push update refs\n---- 8< ----\n\nAn example of a successful test is this:\n\n---- 8< ----\nexpecting success:\n        (cd local &&\n         git checkout -b new-name  &&\n         echo content >>file &&\n         git commit -a -m seven &&\n         git push origin new-name\n        ) &&\n        compare_refs local HEAD server refs/heads/new-name\n\nSwitched to a new branch 'new-name'\n[new-name 455466e] seven\n Author: A U Thor <author@example.com>\n 1 file changed, 1 insertion(+)\nd:/Src/mingw-git/git-remote-testgit: cannot make pipe for process substitution: Function not implemented\nd:/Src/mingw-git/git-remote-testgit: cannot make pipe for process substitution: Function not implemented\nd:/Src/mingw-git/git-remote-testgit: line 97: join: command not found\nEverything up-to-date\nok 9 - push new branch by name\n---- 8< ----\n\n-- Hannes\n"},{"id":"215406","messageId":"5178C583.6000703@viscovery.net","threadId":"33574","inReplyTo":"5177980A.4090305@viscovery.net","subject":"[PATCH] git-remote-testgit: avoid process substitution","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2013-04-25T05:56:19Z","receivedAt":"2013-04-25T05:56:19Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"From: Johannes Sixt <j6t@kdbg.org>\n\nBash on Windows does not implement process substitution.\n\nSigned-off-by: Johannes Sixt <j6t@kdbg.org>\n---\nAm 4/24/2013 10:30, schrieb Johannes Sixt:\n> Am 4/24/2013 10:04, schrieb Felipe Contreras:\n>> On Wed, Apr 24, 2013 at 2:57 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:\n>>> Am 4/23/2013 21:31, schrieb Junio C Hamano:\n>>>> * fc/transport-helper-error-reporting (2013-04-17) 9 commits\n>>>>   (merged to 'next' on 2013-04-22 at 5ba6467)\n>>>>  + transport-helper: update remote helper namespace\n>>>>  + transport-helper: trivial code shuffle\n>>>>  + transport-helper: warn when refspec is not used\n>>>>  + transport-helper: clarify pushing without refspecs\n>>>>  + transport-helper: update refspec documentation\n>>>>  + transport-helper: clarify *:* refspec\n>>>>  + transport-helper: improve push messages\n>>>>  + transport-helper: mention helper name when it dies\n>>>>  + transport-helper: report errors properly\n>>>>\n>>>>  Update transport helper to report errors and maintain ref hierarchy\n>>>>  used to keep track of remote helper state better.\n>>>>\n>>>>  Will merge to 'master'.\n>>>\n>>> Please don't, yet. There is a new test case that fails on Windows. I'll\n>>> have to figure out a work-around.\n>>\n>> Which test case? If it it failed, it failed before this series. I\n>> don't see how this new series would affect anything.\n> \n> The test introduced in the commit at the tip: 'push update refs'.\n\nHere is a fix. It assumes that the list of refs after the import is\na superset of the refs before the import. (Can refs be deleted\nvia fast-import?)\n\n git-remote-testgit | 12 +++++++-----\n 1 file changed, 7 insertions(+), 5 deletions(-)\n\ndiff --git a/git-remote-testgit b/git-remote-testgit\nindex 23c9d40..e99d5fa 100755\n--- a/git-remote-testgit\n+++ b/git-remote-testgit\n@@ -91,13 +91,15 @@ do\n \n \t\tgit fast-import \"${testgitmarks_args[@]}\" --quiet\n \n-\t\tafter=$(git for-each-ref --format='%(refname) %(objectname)')\n-\n \t\t# figure out which refs were updated\n-\t\tjoin -e 0 -o '0 1.2 2.2' -a 2 <(echo \"$before\") <(echo \"$after\") |\n-\t\twhile read ref a b\n+\t\tgit for-each-ref --format='%(refname) %(objectname)' |\n+\t\twhile read ref a\n \t\tdo\n-\t\t\ttest $a == $b && continue\n+\t\t\tcase \"$before\" in\n+\t\t\t*\"$ref $a\"*)\n+\t\t\t\tcontinue\n+\t\t\t\t;;\n+\t\t\tesac\n \t\t\techo \"ok $ref\"\n \t\tdone\n \n-- \n1.8.2.388.g36592d7\n"},{"id":"215446","messageId":"7vehdy7j5f.fsf@alter.siamese.dyndns.org","threadId":"33574","inReplyTo":"5178C583.6000703@viscovery.net","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-25T14:57:16Z","receivedAt":"2013-04-25T14:57:16Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <j.sixt@viscovery.net> writes:\n\n> From: Johannes Sixt <j6t@kdbg.org>\n>\n> Bash on Windows does not implement process substitution.\n>\n> Signed-off-by: Johannes Sixt <j6t@kdbg.org>\n> ---\n> ...\n> Here is a fix. It assumes that the list of refs after the import is\n> a superset of the refs before the import. (Can refs be deleted\n> via fast-import?)\n>\n>  git-remote-testgit | 12 +++++++-----\n>  1 file changed, 7 insertions(+), 5 deletions(-)\n>\n> diff --git a/git-remote-testgit b/git-remote-testgit\n> index 23c9d40..e99d5fa 100755\n> --- a/git-remote-testgit\n> +++ b/git-remote-testgit\n> @@ -91,13 +91,15 @@ do\n>  \n>  \t\tgit fast-import \"${testgitmarks_args[@]}\" --quiet\n>  \n> -\t\tafter=$(git for-each-ref --format='%(refname) %(objectname)')\n> -\n>  \t\t# figure out which refs were updated\n> -\t\tjoin -e 0 -o '0 1.2 2.2' -a 2 <(echo \"$before\") <(echo \"$after\") |\n> -\t\twhile read ref a b\n> +\t\tgit for-each-ref --format='%(refname) %(objectname)' |\n> +\t\twhile read ref a\n>  \t\tdo\n> -\t\t\ttest $a == $b && continue\n> +\t\t\tcase \"$before\" in\n> +\t\t\t*\"$ref $a\"*)\n> +\t\t\t\tcontinue\n\nThis just like the original 'join' depends on the two output from\nfor-each-ref to be sorted the same way, which is true and fine.  But\nI wonder one thing.  When $before has this in it:\n\n\trefs/heads/refs/heads/master 664059...126eaa7\n\nand your \"read ref a\" got this in the input:\n\n\trefs/heads/master 664059...126eaa7\n\nwould the pattern matching by case work corretly?\n\nDoing something like this might be needed.\n\n\tcase \"$LF$before$LF\" in\n        *\"$LF$ref $a$LF\"*)\n        \tcontinue ;; # matches\n\tesac\n"},{"id":"215461","messageId":"CAMP44s0FHnm0xeSuzVNxVhn_rMQ=oKqoDxCU+OWGKPNOxmnGyA@mail.gmail.com","threadId":"33574","inReplyTo":"7vehdy7j5f.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-25T17:50:42Z","receivedAt":"2013-04-25T17:50:42Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Thu, Apr 25, 2013 at 9:57 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> Johannes Sixt <j.sixt@viscovery.net> writes:\n>\n>> From: Johannes Sixt <j6t@kdbg.org>\n>>\n>> Bash on Windows does not implement process substitution.\n>>\n>> Signed-off-by: Johannes Sixt <j6t@kdbg.org>\n>> ---\n>> ...\n>> Here is a fix. It assumes that the list of refs after the import is\n>> a superset of the refs before the import. (Can refs be deleted\n>> via fast-import?)\n>>\n>>  git-remote-testgit | 12 +++++++-----\n>>  1 file changed, 7 insertions(+), 5 deletions(-)\n>>\n>> diff --git a/git-remote-testgit b/git-remote-testgit\n>> index 23c9d40..e99d5fa 100755\n>> --- a/git-remote-testgit\n>> +++ b/git-remote-testgit\n>> @@ -91,13 +91,15 @@ do\n>>\n>>               git fast-import \"${testgitmarks_args[@]}\" --quiet\n>>\n>> -             after=$(git for-each-ref --format='%(refname) %(objectname)')\n>> -\n>>               # figure out which refs were updated\n>> -             join -e 0 -o '0 1.2 2.2' -a 2 <(echo \"$before\") <(echo \"$after\") |\n>> -             while read ref a b\n>> +             git for-each-ref --format='%(refname) %(objectname)' |\n>> +             while read ref a\n>>               do\n>> -                     test $a == $b && continue\n>> +                     case \"$before\" in\n>> +                     *\"$ref $a\"*)\n>> +                             continue\n>\n> This just like the original 'join' depends on the two output from\n> for-each-ref to be sorted the same way, which is true and fine.  But\n> I wonder one thing.  When $before has this in it:\n\nI wonder if we should bother with this at all. The purpose of the code\nwas mainly to show to users that they should report the success only\nif the refs have been updated, but the code is becoming more\nobfuscated, a comment should do the trick. And then, we can just\nreport success for all the refs (and explain in the comment why).\n\n-- \nFelipe Contreras\n"},{"id":"215467","messageId":"7vwqrq31tv.fsf@alter.siamese.dyndns.org","threadId":"33574","inReplyTo":"CAMP44s0FHnm0xeSuzVNxVhn_rMQ=oKqoDxCU+OWGKPNOxmnGyA@mail.gmail.com","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-25T18:25:00Z","receivedAt":"2013-04-25T18:25:00Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Felipe Contreras <felipe.contreras@gmail.com> writes:\n\n>>> ...\n>>> +             git for-each-ref --format='%(refname) %(objectname)' |\n>>> +             while read ref a\n>>>               do\n>>> -                     test $a == $b && continue\n>>> +                     case \"$before\" in\n>>> +                     *\"$ref $a\"*)\n>>> +                             continue\n>>\n> I wonder if we should bother with this at all. The purpose of the code\n> was mainly to show to users that they should report the success only\n> if the refs have been updated, but the code is becoming more\n> obfuscated, a comment should do the trick. And then, we can just\n> report success for all the refs (and explain in the comment why).\n\nAre you proposing to say \"ok $ref\" to everything we see in the\nresulting repository, even the ones the caller of remote-testgit did\nnot ask us to do anything with?\n\nWouldn't the caller be surprised if we did so?\n"},{"id":"215478","messageId":"CAMP44s3LhYt+eNaKWyoDWAPtepaOKXLhYsPXg5dPjYN8MoGA-w@mail.gmail.com","threadId":"33574","inReplyTo":"7vwqrq31tv.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-25T19:24:47Z","receivedAt":"2013-04-25T19:24:47Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Thu, Apr 25, 2013 at 1:25 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> Felipe Contreras <felipe.contreras@gmail.com> writes:\n>\n>>>> ...\n>>>> +             git for-each-ref --format='%(refname) %(objectname)' |\n>>>> +             while read ref a\n>>>>               do\n>>>> -                     test $a == $b && continue\n>>>> +                     case \"$before\" in\n>>>> +                     *\"$ref $a\"*)\n>>>> +                             continue\n>>>\n>> I wonder if we should bother with this at all. The purpose of the code\n>> was mainly to show to users that they should report the success only\n>> if the refs have been updated, but the code is becoming more\n>> obfuscated, a comment should do the trick. And then, we can just\n>> report success for all the refs (and explain in the comment why).\n>\n> Are you proposing to say \"ok $ref\" to everything we see in the\n> resulting repository, even the ones the caller of remote-testgit did\n> not ask us to do anything with?\n>\n> Wouldn't the caller be surprised if we did so?\n\nWhy would it? The only effective difference is what you'll see\nreported in the UI, but there's no user here.\n\n-- \nFelipe Contreras\n"},{"id":"215500","messageId":"7vsj2e2x5d.fsf@alter.siamese.dyndns.org","threadId":"33574","inReplyTo":"CAMP44s3LhYt+eNaKWyoDWAPtepaOKXLhYsPXg5dPjYN8MoGA-w@mail.gmail.com","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-25T20:06:06Z","receivedAt":"2013-04-25T20:06:06Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Felipe Contreras <felipe.contreras@gmail.com> writes:\n\n> On Thu, Apr 25, 2013 at 1:25 PM, Junio C Hamano <gitster@pobox.com> wrote:\n>> Felipe Contreras <felipe.contreras@gmail.com> writes:\n>>\n>>>>> ...\n>>>>> +             git for-each-ref --format='%(refname) %(objectname)' |\n>>>>> +             while read ref a\n>>>>>               do\n>>>>> -                     test $a == $b && continue\n>>>>> +                     case \"$before\" in\n>>>>> +                     *\"$ref $a\"*)\n>>>>> +                             continue\n>>>>\n>>> I wonder if we should bother with this at all. The purpose of the code\n>>> was mainly to show to users that they should report the success only\n>>> if the refs have been updated, but the code is becoming more\n>>> obfuscated, a comment should do the trick. And then, we can just\n>>> report success for all the refs (and explain in the comment why).\n>>\n>> Are you proposing to say \"ok $ref\" to everything we see in the\n>> resulting repository, even the ones the caller of remote-testgit did\n>> not ask us to do anything with?\n>>\n>> Wouldn't the caller be surprised if we did so?\n>\n> Why would it?  The only effective difference is what you'll see\n> reported in the UI, but there's no user here.\n\nYou are correct that it affects only the UI, but isn't that because\nthe current implementation of push_update_refs_status() blindly\naccepts whatever 'ok' response says without checking the ref\nmentioned against what it tried to push out?  I was wondering if\nthat codepath should stay that way forever, or if we may want add\nsanity checks later.  If the latter, I suspect this would manifest\nas an ancient bug to say 'ok' for everything we have instead of what\nwe actually pushed out (of course, the explanation in the comment\nwould help).\n\nSo I am OK with that simpler approach.  Care to roll the conclusion\nof your idea into a patch?\n\nBy the way, I noticed that Documentation/gitremote-helpers.txt does\nnot even mention these 'ok' responses for 'export' command, but they\nshould be the same as responses to 'push'. Perhaps we can share some\ntext between the two?\n"},{"id":"215503","messageId":"CAMP44s0O04OZjPPzW2=5nSHWyWNECm3L5qVZWyFdWK=dzaKA7A@mail.gmail.com","threadId":"33574","inReplyTo":"7vsj2e2x5d.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-25T20:31:23Z","receivedAt":"2013-04-25T20:31:23Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Thu, Apr 25, 2013 at 3:06 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> Felipe Contreras <felipe.contreras@gmail.com> writes:\n>\n>> On Thu, Apr 25, 2013 at 1:25 PM, Junio C Hamano <gitster@pobox.com> wrote:\n>>> Felipe Contreras <felipe.contreras@gmail.com> writes:\n>>>\n>>>>>> ...\n>>>>>> +             git for-each-ref --format='%(refname) %(objectname)' |\n>>>>>> +             while read ref a\n>>>>>>               do\n>>>>>> -                     test $a == $b && continue\n>>>>>> +                     case \"$before\" in\n>>>>>> +                     *\"$ref $a\"*)\n>>>>>> +                             continue\n>>>>>\n>>>> I wonder if we should bother with this at all. The purpose of the code\n>>>> was mainly to show to users that they should report the success only\n>>>> if the refs have been updated, but the code is becoming more\n>>>> obfuscated, a comment should do the trick. And then, we can just\n>>>> report success for all the refs (and explain in the comment why).\n>>>\n>>> Are you proposing to say \"ok $ref\" to everything we see in the\n>>> resulting repository, even the ones the caller of remote-testgit did\n>>> not ask us to do anything with?\n>>>\n>>> Wouldn't the caller be surprised if we did so?\n>>\n>> Why would it?  The only effective difference is what you'll see\n>> reported in the UI, but there's no user here.\n>\n> You are correct that it affects only the UI, but isn't that because\n> the current implementation of push_update_refs_status() blindly\n> accepts whatever 'ok' response says without checking the ref\n> mentioned against what it tried to push out?  I was wondering if\n> that codepath should stay that way forever, or if we may want add\n> sanity checks later.  If the latter, I suspect this would manifest\n> as an ancient bug to say 'ok' for everything we have instead of what\n> we actually pushed out (of course, the explanation in the comment\n> would help).\n\nActually, I think the code already checks for that.\n\n> So I am OK with that simpler approach.  Care to roll the conclusion\n> of your idea into a patch?\n\nWill do.\n\n> By the way, I noticed that Documentation/gitremote-helpers.txt does\n> not even mention these 'ok' responses for 'export' command, but they\n> should be the same as responses to 'push'. Perhaps we can share some\n> text between the two?\n\nIndeed, it's the same code for both.\n\n-- \nFelipe Contreras\n"},{"id":"215652","messageId":"CAMP44s2nWs3XyaLQUnYd=A9u1=8tB7Qp+FN7gf+SrACxmtP8pw@mail.gmail.com","threadId":"33574","inReplyTo":"5178C583.6000703@viscovery.net","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-26T21:56:27Z","receivedAt":"2013-04-26T21:56:27Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Thu, Apr 25, 2013 at 12:56 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:\n> From: Johannes Sixt <j6t@kdbg.org>\n>\n> Bash on Windows does not implement process substitution.\n\nNevermind, reporting all the refs creates a lot of irrelevant output,\nthis version is fine.\n\nAcknowledged-by: Felipe Contreras <felipe.contreras@gmail.com>\n\n-- \nFelipe Contreras\n"},{"id":"215657","messageId":"7vobd1udz2.fsf@alter.siamese.dyndns.org","threadId":"33574","inReplyTo":"CAMP44s2nWs3XyaLQUnYd=A9u1=8tB7Qp+FN7gf+SrACxmtP8pw@mail.gmail.com","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-26T22:25:05Z","receivedAt":"2013-04-26T22:25:05Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Felipe Contreras <felipe.contreras@gmail.com> writes:\n\n> On Thu, Apr 25, 2013 at 12:56 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:\n>> From: Johannes Sixt <j6t@kdbg.org>\n>>\n>> Bash on Windows does not implement process substitution.\n>\n> Nevermind, reporting all the refs creates a lot of irrelevant output,\n> this version is fine.\n\nWhen $before has this in it:\n\n\trefs/heads/refs/heads/master 664059...126eaa7\n\nand your \"read ref a\" got this in the input:\n\n\trefs/heads/master 664059...126eaa7\n\nwould the pattern matching by case work corretly?\n\n>\n> Acknowledged-by: Felipe Contreras <felipe.contreras@gmail.com>\n"},{"id":"215659","messageId":"CAMP44s3j5Bk3eqPeN2qkGTWFLO2NKz0taTGYVNvEut_VM=0NXA@mail.gmail.com","threadId":"33574","inReplyTo":"7vobd1udz2.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH] git-remote-testgit: avoid process substitution","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-26T22:45:49Z","receivedAt":"2013-04-26T22:45:49Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Fri, Apr 26, 2013 at 5:25 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> Felipe Contreras <felipe.contreras@gmail.com> writes:\n>\n>> On Thu, Apr 25, 2013 at 12:56 AM, Johannes Sixt <j.sixt@viscovery.net> wrote:\n>>> From: Johannes Sixt <j6t@kdbg.org>\n>>>\n>>> Bash on Windows does not implement process substitution.\n>>\n>> Nevermind, reporting all the refs creates a lot of irrelevant output,\n>> this version is fine.\n>\n> When $before has this in it:\n>\n>         refs/heads/refs/heads/master 664059...126eaa7\n>\n> and your \"read ref a\" got this in the input:\n>\n>         refs/heads/master 664059...126eaa7\n>\n> would the pattern matching by case work corretly?\n\nNo, it wouldn't, but I don't think there's any way to do \\<\\> or \\b in globs.\n\nAlternatively, we could use the same $before and $after, and simply\nstore the output somewhere; $GIT_DIR/testgit-before, for example. This\nshould decrease the amount of changes needed, but I don't know if\nanybody would have problems with the use of 'join'.\n\nCheers.\n\n-- \nFelipe Contreras\n"},{"id":"215664","messageId":"7v8v44vpon.fsf_-_@alter.siamese.dyndns.org","threadId":"33574","inReplyTo":"CAMP44s3j5Bk3eqPeN2qkGTWFLO2NKz0taTGYVNvEut_VM=0NXA@mail.gmail.com","subject":"Re* [PATCH] git-remote-testgit: avoid process substitution","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-26T23:26:48Z","receivedAt":"2013-04-26T23:26:48Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Felipe Contreras <felipe.contreras@gmail.com> writes:\n\n> No, it wouldn't, but I don't think there's any way to do \\<\\> or \\b in globs.\n\nThis should do in the meantime, but it further needs:\n\n - J6t's sign off for the follow-up part to remove remaining\n   bash-isms to complete this patch (the last part of the patch is\n   from <5178C583.6000703@viscovery.net> and we can take half the\n   log message from there);\n\n - Rename it to git-remote-testgit.sh and tell Makefile to replace\n   the shebang line with SHELL_PATH like other scripts;\n\n - Remove the \"we need to have bash because we will run remote-testgit\"\n   logic from t5801\n\n\n\ndiff --git a/git-remote-testgit b/git-remote-testgit\nindex b395c8d..ffac950 100755\n--- a/git-remote-testgit\n+++ b/git-remote-testgit\n@@ -1,4 +1,4 @@\n-#!/usr/bin/env bash\n+#!/bin/sh\n # Copyright (c) 2012 Felipe Contreras\n \n alias=$1\n@@ -23,7 +23,6 @@ then\n \ttestgitmarks=\"$dir/testgit.marks\"\n \ttest -e \"$gitmarks\" || >\"$gitmarks\"\n \ttest -e \"$testgitmarks\" || >\"$testgitmarks\"\n-\ttestgitmarks_args=( \"--\"{import,export}\"-marks=$testgitmarks\" )\n fi\n \n while read line\n@@ -62,22 +61,31 @@ do\n \t\t\techo \"feature export-marks=$gitmarks\"\n \t\tfi\n \t\techo \"feature done\"\n-\t\tgit fast-export \"${testgitmarks_args[@]}\" $refs |\n+\t\tgit fast-export \\\n+\t\t\t${testgitmarks:+\"--import-marks=$testgitmarks\"} \\\n+\t\t\t${testgitmarks:+\"--export-marks=$testgitmarks\"} \\\n+\t\t\t$refs |\n \t\tsed -e \"s#refs/heads/#${prefix}/heads/#g\"\n \t\techo \"done\"\n \t\t;;\n \texport)\n \t\tbefore=$(git for-each-ref --format='%(refname) %(objectname)')\n \n-\t\tgit fast-import \"${testgitmarks_args[@]}\" --quiet\n-\n-\t\tafter=$(git for-each-ref --format='%(refname) %(objectname)')\n+\t\tgit fast-export \\\n+\t\t\t${testgitmarks:+\"--import-marks=$testgitmarks\"} \\\n+\t\t\t${testgitmarks:+\"--export-marks=$testgitmarks\"} \\\n+\t\t\t--quiet\n \n \t\t# figure out which refs were updated\n-\t\tjoin -e 0 -o '0 1.2 2.2' -a 2 <(echo \"$before\") <(echo \"$after\") |\n-\t\twhile read ref a b\n+\t\tLF=$'\\n'\n+\t\tgit for-each-ref --format='%(refname) %(objectname)' |\n+\t\twhile read ref a\n \t\tdo\n-\t\t\ttest $a == $b && continue\n+\t\t\tcase \"$LF$before$LF\" in\n+\t\t\t*\"$LF$ref $a$LF\"*)\n+\t\t\t\tcontinue\n+\t\t\t\t;;\n+\t\t\tesac\n \t\t\techo \"ok $ref\"\n \t\tdone\n \n"},{"id":"215717","messageId":"517C2349.3050609@kdbg.org","threadId":"33574","inReplyTo":"7v8v44vpon.fsf_-_@alter.siamese.dyndns.org","subject":"Re: Re* [PATCH] git-remote-testgit: avoid process substitution","fromName":"Johannes Sixt","fromEmail":"j6t@kdbg.org","sentAt":"2013-04-27T19:13:13Z","receivedAt":"2013-04-27T19:13:13Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 27.04.2013 01:26, schrieb Junio C Hamano:\n> Felipe Contreras <felipe.contreras@gmail.com> writes:\n> \n>> No, it wouldn't, but I don't think there's any way to do \\<\\> or \\b in globs.\n> \n> This should do in the meantime, but it further needs:\n> \n>  - J6t's sign off for the follow-up part to remove remaining\n>    bash-isms to complete this patch (the last part of the patch is\n>    from <5178C583.6000703@viscovery.net> and we can take half the\n>    log message from there);\n\nThe patch below doesn't remove the bash dependency, yet, but it addresses\nthe problematic mismatch you noticed without the need for $LF. Can you\nplease queue it to move the topic forward?\n\nRemoving the remaining bashisms and the following two can come later:\n\n>  - Rename it to git-remote-testgit.sh and tell Makefile to replace\n>    the shebang line with SHELL_PATH like other scripts;\n> \n>  - Remove the \"we need to have bash because we will run remote-testgit\"\n>    logic from t5801\n\nHere's my\n\nSigned-off-by: Johannes Sixt <j6t@kdbg.org>\n\nfor this part in case someone wants to pick it up:\n\n> diff --git a/git-remote-testgit b/git-remote-testgit\n> index b395c8d..ffac950 100755\n> --- a/git-remote-testgit\n> +++ b/git-remote-testgit\n> @@ -1,4 +1,4 @@\n> -#!/usr/bin/env bash\n> +#!/bin/sh\n>  # Copyright (c) 2012 Felipe Contreras\n>  \n>  alias=$1\n> @@ -23,7 +23,6 @@ then\n>  \ttestgitmarks=\"$dir/testgit.marks\"\n>  \ttest -e \"$gitmarks\" || >\"$gitmarks\"\n>  \ttest -e \"$testgitmarks\" || >\"$testgitmarks\"\n> -\ttestgitmarks_args=( \"--\"{import,export}\"-marks=$testgitmarks\" )\n>  fi\n>  \n>  while read line\n> @@ -62,22 +61,31 @@ do\n>  \t\t\techo \"feature export-marks=$gitmarks\"\n>  \t\tfi\n>  \t\techo \"feature done\"\n> -\t\tgit fast-export \"${testgitmarks_args[@]}\" $refs |\n> +\t\tgit fast-export \\\n> +\t\t\t${testgitmarks:+\"--import-marks=$testgitmarks\"} \\\n> +\t\t\t${testgitmarks:+\"--export-marks=$testgitmarks\"} \\\n> +\t\t\t$refs |\n>  \t\tsed -e \"s#refs/heads/#${prefix}/heads/#g\"\n>  \t\techo \"done\"\n>  \t\t;;\n>  \texport)\n>  \t\tbefore=$(git for-each-ref --format='%(refname) %(objectname)')\n>  \n> -\t\tgit fast-import \"${testgitmarks_args[@]}\" --quiet\n> +\t\tgit fast-import \\\n> +\t\t\t${testgitmarks:+\"--import-marks=$testgitmarks\"} \\\n> +\t\t\t${testgitmarks:+\"--export-marks=$testgitmarks\"} \\\n> +\t\t\t--quiet\n>  \n\n--- 8< ---\nSubject: [PATCH] git-remote-testgit: avoid process substitution\n\nThe implementation of bash on Windows does not offer process substitution.\n\nSigned-off-by: Johannes Sixt <j6t@kdbg.org>\n---\n git-remote-testgit | 13 +++++++------\n 1 file changed, 7 insertions(+), 6 deletions(-)\n\ndiff --git a/git-remote-testgit b/git-remote-testgit\nindex 23c9d40..979b13e 100755\n--- a/git-remote-testgit\n+++ b/git-remote-testgit\n@@ -87,17 +87,18 @@ do\n \t\t\texit 1\n \t\tfi\n \n-\t\tbefore=$(git for-each-ref --format='%(refname) %(objectname)')\n+\t\tbefore=$(git for-each-ref --format=' %(refname) %(objectname) ')\n \n \t\tgit fast-import \"${testgitmarks_args[@]}\" --quiet\n \n-\t\tafter=$(git for-each-ref --format='%(refname) %(objectname)')\n-\n \t\t# figure out which refs were updated\n-\t\tjoin -e 0 -o '0 1.2 2.2' -a 2 <(echo \"$before\") <(echo \"$after\") |\n-\t\twhile read ref a b\n+\t\tgit for-each-ref --format='%(refname) %(objectname)' |\n+\t\twhile read ref a\n \t\tdo\n-\t\t\ttest $a == $b && continue\n+\t\t\tcase \"$before\" in\n+\t\t\t*\" $ref $a \"*)\n+\t\t\t\tcontinue ;;\t# unchanged\n+\t\t\tesac\n \t\t\techo \"ok $ref\"\n \t\tdone\n \n-- \n1.8.2.388.g36592d7\n"},{"id":"215875","messageId":"7vehdtjl2n.fsf@alter.siamese.dyndns.org","threadId":"33574","inReplyTo":"517C2349.3050609@kdbg.org","subject":"Re: Re* [PATCH] git-remote-testgit: avoid process substitution","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-29T17:36:16Z","receivedAt":"2013-04-29T17:36:16Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <j6t@kdbg.org> writes:\n\n> The patch below doesn't remove the bash dependency, yet, but it addresses\n> the problematic mismatch you noticed without the need for $LF. Can you\n> please queue it to move the topic forward?\n\nI'll send three-patch series I have (including the two discussed in\nthe thread) on top of fc/transport-helper-error-reporting as a reply\nto this message.  It seems to pass \"make SHELL_PATH=/bin/dash test\".\n"},{"id":"215878","messageId":"1367257315-12009-1-git-send-email-gitster@pobox.com","threadId":"33574","inReplyTo":"7vehdtjl2n.fsf@alter.siamese.dyndns.org","subject":"[PATCH 0/3] De-bashing remote-testgit","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-29T17:41:52Z","receivedAt":"2013-04-29T17:41:52Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"The two from J6t are what were discussed on the list.  The last one\nis to teach git-remote-testgit to honor SHELL_PATH like all the\nother shell scripts.\n\nJohannes Sixt (2):\n  git-remote-testgit: avoid process substitution\n  git-remote-testgit: further remove some bashisms\n\nJunio C Hamano (1):\n  git-remote-testgit: build it to run under $SHELL_PATH\n\n .gitignore                                  |  1 +\n Makefile                                    |  1 +\n git-remote-testgit => git-remote-testgit.sh | 26 ++++++++++++++++----------\n t/t5801-remote-helpers.sh                   |  5 -----\n 4 files changed, 18 insertions(+), 15 deletions(-)\n rename git-remote-testgit => git-remote-testgit.sh (77%)\n\n-- \n1.8.3-rc0-121-gda9b90f\n"},{"id":"215879","messageId":"1367257315-12009-2-git-send-email-gitster@pobox.com","threadId":"33574","inReplyTo":"1367257315-12009-1-git-send-email-gitster@pobox.com","subject":"[PATCH 1/3] git-remote-testgit: avoid process substitution","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-29T17:41:53Z","receivedAt":"2013-04-29T17:41:53Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"From: Johannes Sixt <j6t@kdbg.org>\n\nThe implementation of bash on Windows does not offer process substitution.\n\nSigned-off-by: Johannes Sixt <j6t@kdbg.org>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n git-remote-testgit | 13 +++++++------\n 1 file changed, 7 insertions(+), 6 deletions(-)\n\ndiff --git a/git-remote-testgit b/git-remote-testgit\nindex 5fd09f9..643e4ae 100755\n--- a/git-remote-testgit\n+++ b/git-remote-testgit\n@@ -86,17 +86,18 @@ do\n \t\t\texit 1\n \t\tfi\n \n-\t\tbefore=$(git for-each-ref --format='%(refname) %(objectname)')\n+\t\tbefore=$(git for-each-ref --format=' %(refname) %(objectname) ')\n \n \t\tgit fast-import \"${testgitmarks_args[@]}\" --quiet\n \n-\t\tafter=$(git for-each-ref --format='%(refname) %(objectname)')\n-\n \t\t# figure out which refs were updated\n-\t\tjoin -e 0 -o '0 1.2 2.2' -a 2 <(echo \"$before\") <(echo \"$after\") |\n-\t\twhile read ref a b\n+\t\tgit for-each-ref --format='%(refname) %(objectname)' |\n+\t\twhile read ref a\n \t\tdo\n-\t\t\ttest $a == $b && continue\n+\t\t\tcase \"$before\" in\n+\t\t\t*\" $ref $a \"*)\n+\t\t\t\tcontinue ;;\t# unchanged\n+\t\t\tesac\n \t\t\techo \"ok $ref\"\n \t\tdone\n \n-- \n1.8.3-rc0-121-gda9b90f\n"},{"id":"215881","messageId":"1367257315-12009-3-git-send-email-gitster@pobox.com","threadId":"33574","inReplyTo":"1367257315-12009-1-git-send-email-gitster@pobox.com","subject":"[PATCH 2/3] git-remote-testgit: further remove some bashisms","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-29T17:41:54Z","receivedAt":"2013-04-29T17:41:54Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"From: Johannes Sixt <j.sixt@viscovery.net>\n\nSigned-off-by: Johannes Sixt <j6t@kdbg.org>\n---\n git-remote-testgit | 13 +++++++++----\n 1 file changed, 9 insertions(+), 4 deletions(-)\n\ndiff --git a/git-remote-testgit b/git-remote-testgit\nindex 643e4ae..b528949 100755\n--- a/git-remote-testgit\n+++ b/git-remote-testgit\n@@ -1,4 +1,4 @@\n-#!/usr/bin/env bash\n+#!/bin/sh\n # Copyright (c) 2012 Felipe Contreras\n \n alias=$1\n@@ -23,7 +23,6 @@ then\n \ttestgitmarks=\"$dir/testgit.marks\"\n \ttest -e \"$gitmarks\" || >\"$gitmarks\"\n \ttest -e \"$testgitmarks\" || >\"$testgitmarks\"\n-\ttestgitmarks_args=( \"--\"{import,export}\"-marks=$testgitmarks\" )\n fi\n \n while read line\n@@ -69,7 +68,10 @@ do\n \t\tfi\n \n \t\techo \"feature done\"\n-\t\tgit fast-export \"${testgitmarks_args[@]}\" $refs |\n+\t\tgit fast-export \\\n+\t\t\t${testgitmarks:+\"--import-marks=$testgitmarks\"} \\\n+\t\t\t${testgitmarks:+\"--export-marks=$testgitmarks\"} \\\n+\t\t\t$refs |\n \t\tsed -e \"s#refs/heads/#${prefix}/heads/#g\"\n \t\techo \"done\"\n \t\t;;\n@@ -88,7 +90,10 @@ do\n \n \t\tbefore=$(git for-each-ref --format=' %(refname) %(objectname) ')\n \n-\t\tgit fast-import \"${testgitmarks_args[@]}\" --quiet\n+\t\tgit fast-import \\\n+\t\t\t${testgitmarks:+\"--import-marks=$testgitmarks\"} \\\n+\t\t\t${testgitmarks:+\"--export-marks=$testgitmarks\"} \\\n+\t\t\t--quiet\n \n \t\t# figure out which refs were updated\n \t\tgit for-each-ref --format='%(refname) %(objectname)' |\n-- \n1.8.3-rc0-121-gda9b90f\n"},{"id":"215880","messageId":"1367257315-12009-4-git-send-email-gitster@pobox.com","threadId":"33574","inReplyTo":"1367257315-12009-1-git-send-email-gitster@pobox.com","subject":"[PATCH 3/3] git-remote-testgit: build it to run under $SHELL_PATH","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-04-29T17:41:55Z","receivedAt":"2013-04-29T17:41:55Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Just like all the other shell scripts, replace the shebang line to\nmake sure it runs under the shell the user specified.\n\nAs this no longer depends on bashisms, t5801 does not have to say\nbash must be available somewhere on the system.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n .gitignore                                  | 1 +\n Makefile                                    | 1 +\n git-remote-testgit => git-remote-testgit.sh | 0\n t/t5801-remote-helpers.sh                   | 5 -----\n 4 files changed, 2 insertions(+), 5 deletions(-)\n rename git-remote-testgit => git-remote-testgit.sh (100%)\n\ndiff --git a/.gitignore b/.gitignore\nindex 6669bf0..10aee94 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -125,6 +125,7 @@\n /git-remote-ftps\n /git-remote-fd\n /git-remote-ext\n+/git-remote-testgit\n /git-remote-testpy\n /git-remote-testsvn\n /git-repack\ndiff --git a/Makefile b/Makefile\nindex 0f931a2..5f424a7 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -460,6 +460,7 @@ SCRIPT_SH += git-mergetool.sh\n SCRIPT_SH += git-pull.sh\n SCRIPT_SH += git-quiltimport.sh\n SCRIPT_SH += git-rebase.sh\n+SCRIPT_SH += git-remote-testgit.sh\n SCRIPT_SH += git-repack.sh\n SCRIPT_SH += git-request-pull.sh\n SCRIPT_SH += git-stash.sh\ndiff --git a/git-remote-testgit b/git-remote-testgit.sh\nsimilarity index 100%\nrename from git-remote-testgit\nrename to git-remote-testgit.sh\ndiff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh\nindex c956abd..0a83db8 100755\n--- a/t/t5801-remote-helpers.sh\n+++ b/t/t5801-remote-helpers.sh\n@@ -7,11 +7,6 @@ test_description='Test remote-helper import and export commands'\n \n . ./test-lib.sh\n \n-if ! type \"${BASH-bash}\" >/dev/null 2>&1; then\n-\tskip_all='skipping remote-testgit tests, bash not available'\n-\ttest_done\n-fi\n-\n compare_refs() {\n \tgit --git-dir=\"$1/.git\" rev-parse --verify $2 >expect &&\n \tgit --git-dir=\"$3/.git\" rev-parse --verify $4 >actual &&\n-- \n1.8.3-rc0-121-gda9b90f\n"}]}