{"thread":{"id":"26586","subject":"What's cooking in git.git (Feb 2011, #05; Wed, 23)","startedAt":"2011-02-23T23:26:50Z","lastAt":"2011-03-12T15:38:40Z","messageCount":46,"participants":["Junio C Hamano","Jonathan Nieder","Johan Herland","Ævar Arnfjörð Bjarmason","Erik Faye-Lund","Johannes Schindelin","Kirill Smelkov","Sebastian Schuberth","Chris Packham"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"162073","messageId":"7v1v2y5o3p.fsf@alter.siamese.dyndns.org","threadId":"26586","inReplyTo":null,"subject":"What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-02-23T23:26:50Z","receivedAt":"2011-02-23T23:26:50Z","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 '-' are\nonly in 'pu' while commits prefixed with '+' are in 'next'.\n\n--------------------------------------------------\n[New Topics]\n\n* ab/i18n (2011-02-22) 73 commits\n - i18n: git-shortlog basic messages\n - i18n: git-revert split up \"could not revert/apply\" message\n - i18n: git-revert literal \"me\" messages\n - i18n: git-revert \"Your local changes\" message\n - i18n: git-revert basic messages\n - i18n: git-notes GIT_NOTES_REWRITE_MODE error message\n - i18n: git-notes basic commands\n - i18n: git-gc \"Auto packing the repository\" message\n - i18n: git-gc basic messages\n - i18n: git-describe basic messages\n - i18n: git-clean clean.requireForce messages\n - i18n: git-clean basic messages\n - i18n: git-bundle basic messages\n - i18n: git-archive basic messages\n - i18n: git-status \"renamed: \" message\n - i18n: git-status \"Initial commit\" message\n - i18n: git-status \"Changes to be committed\" message\n - i18n: git-status shortstatus messages\n - i18n: git-status \"nothing to commit\" messages\n - i18n: git-status basic messages\n - i18n: git-push \"prevent you from losing\" message\n - i18n: git-push basic messages\n - i18n: git-tag tag_template message\n - i18n: git-tag basic messages\n - i18n: git-reset \"Unstaged changes after reset\" message\n - i18n: git-reset reset_type_names messages\n - i18n: git-reset basic messages\n - i18n: git-rm basic messages\n - i18n: git-mv \"bad\" messages\n - i18n: git-mv basic messages\n - i18n: git-merge \"Wonderful\" message\n - i18n: git-merge \"You have not concluded your merge\" messages\n - i18n: git-merge \"Updating %s..%s\" message\n - i18n: git-merge basic messages\n - i18n: git-log \"--OPT does not make sense\" messages\n - i18n: git-log basic messages\n - i18n: git-grep \"--open-files-in-pager\" message\n - i18n: git-grep basic messages\n - i18n: git-fetch split up \"(non-fast-forward)\" message\n - i18n: git-fetch update_local_ref messages\n - i18n: git-fetch formatting messages\n - i18n: git-fetch basic messages\n - i18n: git-diff basic messages\n - i18n: git-commit advice messages\n - i18n: git-commit \"enter the commit message\" message\n - i18n: git-commit print_summary messages\n - i18n: git-commit formatting messages\n - i18n: git-commit \"middle of a merge\" message\n - i18n: git-commit basic messages\n - i18n: git-checkout \"Switched to a .. branch\" message\n - i18n: git-checkout \"HEAD is now at\" message\n - i18n: git-checkout describe_detached_head messages\n - i18n: git-checkout: our/their version message\n - i18n: git-checkout basic messages\n - i18n: git-branch \"(no branch)\" message\n - i18n: git-branch \"git branch -v\" messages\n - i18n: git-branch \"Deleted branch [...]\" message\n - i18n: git-branch \"remote branch '%s' not found\" message\n - i18n: git-branch basic messages\n - i18n: git-add \"Unstaged changes\" message\n - i18n: git-add \"remove '%s'\" message\n - i18n: git-add \"did not match any files\" message\n - i18n: git-add \"The following paths are ignored\" message\n - i18n: git-add basic messages\n - i18n: git-clone \"Cloning into\" message\n - i18n: git-clone \"Cloning into\" message\n - i18n: git-clone basic messages\n - i18n: git-init \"Initialized [...] repository\" message\n - i18n: git-init basic messages\n - i18n: Makefile: \"pot\" target to extract messages marked for translation\n - i18n: do not poison translations unless GIT_GETTEXT_POISON envvar is set\n - i18n: add GETTEXT_POISON to simulate translated messages unfriendly translator\n - i18n: add no-op _() and N_() wrappers\n\nRe^4-roll, coordinated between Ævar and Jonathan.\n\nI'd like to fast-track the basics (especially the bottom 3 patches), and\nam even tempted to rebase other patches on 'pu' that are not yet in 'next'\non top of them, to make the transition easier, so please lend extra sets\nof eyeballs on an earlier ones to make sure they are sane (I thought they\nwere, but I am far from perfect).\n\n* gr/cvsimport-alternative-cvspass-location (2011-02-18) 1 commit\n - Look for password in both CVS and CVSNT password files.\n\n* jc/checkout-orphan-warning (2011-02-18) 1 commit\n - commit: give final warning when reattaching HEAD to leave commits behind\n\nLikes, dislikes?\n\n* jh/maint-do-not-track-non-branches (2011-02-17) 1 commit\n - branch/checkout --track: Ensure that upstream branch is indeed a branch\n\nThis supersedes \"do not track HEAD\" from Thomas.\n\n* jk/diffstat-binary (2011-02-19) 2 commits\n  (merged to 'next' on 2011-02-23 at 49da967)\n + diff: don't retrieve binary blobs for diffstat\n + diff: handle diffstat of rewritten binary files\n\n* jk/fail-null-clone (2011-02-17) 1 commit\n  (merged to 'next' on 2011-02-23 at a4217f5)\n + clone: die when trying to clone missing local path\n\n* jk/merge-rename-ux (2011-02-20) 6 commits\n - pull: propagate --progress to merge\n - merge: enable progress reporting for rename detection\n - add inexact rename detection progress infrastructure\n - commit: stop setting rename limit\n - bump rename limit defaults (again)\n - merge: improve inexact rename limit warning\n\nThe above three all seemed sensible improvements.\n\n* jn/test-terminal-punt-on-osx-breakage (2011-02-17) 1 commit\n  (merged to 'next' on 2011-02-23 at d754139)\n + tests: skip terminal output tests on OS X\n\n* js/cherry-pick-usability (2011-02-19) 4 commits\n  (merged to 'next' on 2011-02-23 at 95db30e)\n + Teach commit about CHERRY_PICK_HEAD\n + bash: teach __git_ps1 about CHERRY_PICK_HEAD\n + Introduce CHERRY_PICK_HEAD\n + t3507: introduce pristine-detach helper\n\n* js/detach-doc (2011-02-20) 1 commit\n  (merged to 'next' on 2011-02-21 at c384c3c)\n + git-checkout.txt: improve detached HEAD documentation\n\n* lt/rename-no-extra-copy-detection (2011-02-18) 3 commits\n  (merged to 'next' on 2011-02-23 at 2c1f271)\n + diffcore-rename: improve estimate_similarity() heuristics\n + diffcore-rename: properly honor the difference between -M and -C\n + for_each_hash: allow passing a 'void *data' pointer to callback\n\n* mg/rev-list-one-side-only (2011-02-22) 6 commits\n - t6007: test rev-list --cherry\n - log --cherry: a synonym\n - rev-list: --left/right-only are mutually exclusive\n - rev-list: documentation and test for --left/right-only\n - t6007: Make sure we test --cherry-pick\n - revlist.c: introduce --left/right-only for unsymmetric picking\n\n* so/submodule-no-update-first-time (2011-02-17) 2 commits\n  (merged to 'next' on 2011-02-23 at 2c6e8c9)\n + t7406: \"git submodule update {--merge|--rebase]\" with new submodules\n + submodule: no [--merge|--rebase] when newly cloned\n\n* va/p4 (2011-02-20) 2 commits\n  (merged to 'next' on 2011-02-21 at d981b23)\n + git-p4: Add copy detection support\n + git-p4: Improve rename detection support\n\n* jc/complete-symmetric-diff (2011-02-23) 1 commit\n - completion: complete \"git diff ...branc<TAB>\"\n\n* jh/submodule-fetch-on-demand (2011-02-23) 6 commits\n - submodule update: Don't fetch when the submodule commit is already present\n - fetch/pull: Don't recurse into a submodule when commits are already present\n - Submodules: Add 'on-demand' value for the 'fetchRecurseSubmodule' option\n - config: teach the fetch.recurseSubmodules option the 'on-demand' value\n - fetch/pull: Add the 'on-demand' value to the --recurse-submodules option\n - fetch/pull: recurse into submodules when necessary\n\n* jk/format-patch-multiline-header (2011-02-23) 2 commits\n - format-patch: wrap long header lines\n - strbuf: add fixed-length version of add_wrapped_text\n\n* cp/mergetool-beyondcompare (2011-02-18) 1 commit\n - mergetool--lib: add support for beyond compare\n\nMay want to have an independent success report on Windows.\n\n--------------------------------------------------\n[Stalled]\n\n* jh/merge-sans-branch (2011-02-10) 4 commits\n . merge: add support for merging from upstream by default\n - merge: introduce per-branch-configuration helper function\n - merge: introduce setup_merge_commit helper function\n - merge: update the usage information to be more modern\n\nThere was an objection to the tip one that determines the upstream in a\nwrong way?\n\n* jk/tag-contains (2010-07-05) 4 commits\n - Why is \"git tag --contains\" so slow?\n - default core.clockskew variable to one day\n - limit \"contains\" traversals based on commit timestamp\n - tag: speed up --contains calculation\n\nThe idea of the bottom one is probably Ok, except that the use of object\nflags needs to be rethought, or at least the helper needs to be moved to\nbuiltin/tag.c to make it clear that it should not be used outside the\ncurrent usage context.\n\n* jc/rename-degrade-cc-to-c (2011-01-06) 3 commits\n . diffcore-rename: fall back to -C when -C -C busts the rename limit\n . diffcore-rename: record filepair for rename src\n . diffcore-rename: refactor \"too many candidates\" logic\n\n* nd/index-doc (2010-09-06) 1 commit\n . doc: technical details about the index file format\n\n--------------------------------------------------\n[Cooking]\n\n* js/checkout-untracked-symlink (2011-02-20) 2 commits\n  (merged to 'next' on 2011-02-23 at 52a35ce)\n + do not overwrite untracked symlinks\n + Demonstrate breakage: checkout overwrites untracked symlink with directory\n\n* pw/p4 (2011-02-19) 8 commits\n  (merged to 'next' on 2011-02-21 at 1a7b7d2)\n + git-p4: support clone --bare\n + git-p4: decode p4 wildcard characters\n + git-p4: better message for \"git-p4 sync\" when not cloned\n + git-p4: reinterpret confusing p4 message\n + git-p4: accommodate new move/delete type in p4\n + git-p4: add missing newline in initial import message\n + git-p4: fix key error for p4 problem\n + git-p4: test script\n\n* jh/push-default-upstream-configname (2011-02-16) 1 commit\n  (merged to 'next' on 2011-02-23 at b5c25fa)\n + push.default: Rename 'tracking' to 'upstream'\n\nThis is not \"renaming\" in the sense that breaks existing practice, but\ngiving a new official name and deprecating the existing one.\n\n* js/maint-merge-use-prepare-commit-msg-hook (2011-02-14) 1 commit\n  (merged to 'next' on 2011-02-22 at 6458c4b)\n + merge: honor prepare-commit-msg hook\n\n* mg/patch-id (2011-02-17) 2 commits\n  (merged to 'next' on 2011-02-22 at 6f4acd8)\n + git-patch-id: do not trip over \"no newline\" markers\n + git-patch-id: test for \"no newline\" markers\n\n* mg/placeholders-are-lowercase (2011-02-17) 5 commits\n  (merged to 'next' on 2011-02-22 at 2754e21)\n + Make <identifier> lowercase in Documentation\n + Make <identifier> lowercase as per CodingGuidelines\n + Make <identifier> lowercase as per CodingGuidelines\n + Make <identifier> lowercase as per CodingGuidelines\n + CodingGuidelines: downcase placeholders in usage messages\n\n* mo/perl-bidi-pipe-envfix (2011-02-15) 1 commit\n  (merged to 'next' on 2011-02-15 at c36e816)\n + perl: command_bidi_pipe() method should set-up git environmens\n\nLooked reasonable.\n\n* nd/sorted-builtin-command-list (2011-02-15) 1 commit\n  (merged to 'next' on 2011-02-22 at 91fccd1)\n + git.c: reorder builtin command list\n\n* sp/maint-smart-http-sans-100-continue (2011-02-15) 1 commit\n  (merged to 'next' on 2011-02-15 at 553e3e5)\n + smart-http: Don't use Expect: 100-Continue\n\n* jc/grep--no-index-pathspec-fix (2011-02-16) 1 commit\n  (merged to 'next' on 2011-02-23 at 58b03b1)\n + grep --no-index: honor pathspecs correctly\n (this branch uses nd/struct-pathspec; is tangled with en/object-list-with-pathspec.)\n\n* mz/rebase (2011-02-09) 32 commits\n  (merged to 'next' on 2011-02-22 at 3219155)\n + rebase: use @{upstream} if no upstream specified\n + rebase -i: remove unnecessary state rebase-root\n + rebase -i: don't read unused variable preserve_merges\n + git-rebase--am: remove unnecessary --3way option\n + rebase -m: don't print exit code 2 when merge fails\n + rebase -m: remember allow_rerere_autoupdate option\n + rebase: remember strategy and strategy options\n + rebase: remember verbose option\n + rebase: extract code for writing basic state\n + rebase: factor out sub command handling\n + rebase: make -v a tiny bit more verbose\n + rebase -i: align variable names\n + rebase: show consistent conflict resolution hint\n + rebase: extract am code to new source file\n + rebase: extract merge code to new source file\n + rebase: remove $branch as synonym for $orig_head\n + rebase -i: support --stat\n + rebase: factor out call to pre-rebase hook\n + rebase: factor out clean work tree check\n + rebase: factor out reference parsing\n + rebase: reorder validation steps\n + rebase -i: remove now unnecessary directory checks\n + rebase: factor out command line option processing\n + rebase: align variable content\n + rebase: align variable names\n + rebase: stricter check of standalone sub command\n + rebase: act on command line outside parsing loop\n + rebase: improve detection of rebase in progress\n + rebase: remove unused rebase state 'prev_head'\n + rebase: read state outside loop\n + rebase: refactor reading of state\n + rebase: clearer names for directory variables\n\nMinor UI regression was reported but otherwise it looked like that the\ntopic is in a good shape.\n\n* lp/config-vername-check (2011-02-01) 2 commits\n  (merged to 'next' on 2011-02-23 at 426d48d)\n + Disallow empty section and variable names\n + Sanity-check config variable names\n\n* mz/rerere-remaining (2011-02-16) 2 commits\n  (merged to 'next' on 2011-02-22 at fa2d5ab)\n + mergetool: don't skip modify/remove conflicts\n + rerere \"remaining\"\n\nLooked much better than my weatherbaloon patch.\n\n* nd/hash-object-sanity (2011-02-05) 1 commit\n  (merged to 'next' on 2011-02-22 at 09acf6f)\n + Make hash-object more robust against malformed objects\n\n* hv/mingw-fs-funnies (2011-02-07) 5 commits\n  (merged to 'next' on 2011-02-09 at 3d0bb1a)\n + mingw_rmdir: set errno=ENOTEMPTY when appropriate\n + mingw: add fallback for rmdir in case directory is in use\n + mingw: make failures to unlink or move raise a question\n + mingw: work around irregular failures of unlink on windows\n + mingw: move unlink wrapper to mingw.c\n\nRerolled and seems ready to move forward.\n\n* nd/struct-pathspec (2011-01-31) 22 commits\n  (merged to 'next' on 2011-02-09 at b1e64ee)\n + t6004: add pathspec globbing test for log family\n + t7810: overlapping pathspecs and depth limit\n + grep: drop pathspec_matches() in favor of tree_entry_interesting()\n + grep: use writable strbuf from caller for grep_tree()\n + grep: use match_pathspec_depth() for cache/worktree grepping\n + grep: convert to use struct pathspec\n + Convert ce_path_match() to use match_pathspec_depth()\n + Convert ce_path_match() to use struct pathspec\n + struct rev_info: convert prune_data to struct pathspec\n + pathspec: add match_pathspec_depth()\n + tree_entry_interesting(): optimize wildcard matching when base is matched\n + tree_entry_interesting(): support wildcard matching\n + tree_entry_interesting(): fix depth limit with overlapping pathspecs\n + tree_entry_interesting(): support depth limit\n + tree_entry_interesting(): refactor into separate smaller functions\n + diff-tree: convert base+baselen to writable strbuf\n + glossary: define pathspec\n + Move tree_entry_interesting() to tree-walk.c and export it\n + tree_entry_interesting(): remove dependency on struct diff_options\n + Convert struct diff_options to use struct pathspec\n + diff-no-index: use diff_tree_setup_paths()\n + Add struct pathspec\n (this branch is used by en/object-list-with-pathspec and jc/grep--no-index-pathspec-fix.)\n\n* en/object-list-with-pathspec (2010-09-20) 2 commits\n  (merged to 'next' on 2011-02-09 at ccf6c6a)\n + Add testcases showing how pathspecs are handled with rev-list --objects\n + Make rev-list --objects work together with pathspecs\n (this branch uses nd/struct-pathspec; is tangled with jc/grep--no-index-pathspec-fix.)\n\n* uk/checkout-ambiguous-ref (2011-02-15) 5 commits\n  (merged to 'next' on 2011-02-15 at 645dad6)\n + Rename t2019 with typo \"amiguous\" that meant \"ambiguous\"\n + checkout: rearrange update_refs_for_switch for clarity\n + checkout: introduce --detach synonym for \"git checkout foo^{commit}\"\n + checkout: split off a function to peel away branchname arg\n  (merged to 'next' on 2011-02-03 at 9044724)\n + checkout: fix bug with ambiguous refs\n\nThe topic has become about \"checkout --detach\" ;-).\n"},{"id":"162076","messageId":"20110223234828.GA7286@elie","threadId":"26586","inReplyTo":"7v1v2y5o3p.fsf@alter.siamese.dyndns.org","subject":"ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-02-23T23:48:28Z","receivedAt":"2011-02-23T23:48:28Z","isPatch":false,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Junio C Hamano wrote:\n\n> * ab/i18n (2011-02-22) 73 commits\n[...]\n>  - i18n: do not poison translations unless GIT_GETTEXT_POISON envvar is set\n>  - i18n: add GETTEXT_POISON to simulate translated messages unfriendly translator\n>  - i18n: add no-op _() and N_() wrappers\n>\n> Re^4-roll, coordinated between Ævar and Jonathan.\n>\n> I'd like to fast-track the basics (especially the bottom 3 patches), and\n> am even tempted to rebase other patches on 'pu' that are not yet in 'next'\n> on top of them, to make the transition easier, so please lend extra sets\n> of eyeballs on an earlier ones to make sure they are sane (I thought they\n> were, but I am far from perfect).\n\nThe commit message for the second one seems to have been mangled:\n\n\ti18n: add GETTEXT_POISON to simulate translated messages unfriendly translator\n\nBefore, it said \"simulate unfriendly translator\", as in \"turn on this\noption to see what the translator from hell could do to your program\".\n(Well, it's not _that_ bad because it takes out format strings.)\n\nI still don't like the #-sign business in this commit.  Couldn't it\nbe split into a separate patch, not to be applied until just before\nthe strings in commit/tag/wt-status are marked for translation?\n\nThere is also a patch out there to make this use rot13, which I am\nsomewhat fond of.  Unfortunately, it leaks (because it is not clear\nhow long translated strings are supposed to last).\n\nI'd be happy with renaming use_poison() to gettext_poison() or\nsimilar.  I suppose that is not urgent.\n\nRegards,\nJonathan\n"},{"id":"162079","messageId":"201102240052.36379.johan@herland.net","threadId":"26586","inReplyTo":"7v1v2y5o3p.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Johan Herland","fromEmail":"johan@herland.net","sentAt":"2011-02-23T23:52:36Z","receivedAt":"2011-02-23T23:52:36Z","isPatch":false,"sender":{"key":"johan@herland.net","avatar":"https://avatars.githubusercontent.com/u/547031?v=4"},"body":"On Thursday 24 February 2011, Junio C Hamano wrote:\n> Here are the topics that have been cooking.  Commits prefixed with '-'\n> are only in 'pu' while commits prefixed with '+' are in 'next'.\n> \n> [...]\n> * jh/maint-do-not-track-non-branches (2011-02-17) 1 commit\n>  - branch/checkout --track: Ensure that upstream branch is indeed a\n> branch\n> \n> This supersedes \"do not track HEAD\" from Thomas.\n\nWhat do you mean by \"supersedes\"? It builds on top of Thomas' patch (v2 was \nrebased on top it), but it does not _replace_ Thomas' patch.\n\n\n...Johan\n\n-- \nJohan Herland, <johan@herland.net>\nwww.herland.net\n"},{"id":"162087","messageId":"AANLkTinUtqJJHNyS9CxrC=VnS87v=GH=pOw9yr4r=pii@mail.gmail.com","threadId":"26586","inReplyTo":"7v1v2y5o3p.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-02-24T00:32:47Z","receivedAt":"2011-02-24T00:32:47Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Thu, Feb 24, 2011 at 00:26, Junio C Hamano <gitster@pobox.com> wrote:\n\n> * ab/i18n (2011-02-22) 73 commits\n> [...]\n>\n> Re^4-roll, coordinated between Ævar and Jonathan.\n>\n> I'd like to fast-track the basics (especially the bottom 3 patches), and\n> am even tempted to rebase other patches on 'pu' that are not yet in 'next'\n> on top of them, to make the transition easier, so please lend extra sets\n> of eyeballs on an earlier ones to make sure they are sane (I thought they\n> were, but I am far from perfect).\n\nGreat that we're moving this forward. After this has made it to next\n(or master) I'm going to fix this up a bit and submit the shellscript\ni18n-ize patches:\n\n    https://github.com/avar/git/compare/5bd8b10...8fd2407\n\nOpen issues:\n\n   * Write documentation for git-sh-i18n.sh and git-sh-i18n--envsubst\n     like we have for git-sh-setup (already in WIP form).\n\n   * git-sh-i18n--envsubst is still too fat:\n\n        $ ldd -r git-sh-i18n--envsubst\n            linux-vdso.so.1 =>  (0x00007fffc60fd000)\n            libz.so.1 => /usr/lib/libz.so.1 (0x00007f25cff9e000)\n            libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8\n(0x00007f25cfbfd000)\n            libpthread.so.0 => /lib/libpthread.so.0 (0x00007f25cf9e0000)\n            libc.so.6 => /lib/libc.so.6 (0x00007f25cf67f000)\n            libdl.so.2 => /lib/libdl.so.2 (0x00007f25cf47b000)\n            /lib64/ld-linux-x86-64.so.2 (0x00007f25d01c0000)\n\n     It only needs to link to libc, but I didn't find out when I last\n     checked how to convince the Makefile to only link against\n     that. Help welcome :)\n\n   * Deal with the changes in 92c62a3f4f93432c0c82e3031a9e64e03ba290f7:\n\n        $ git --no-pager  grep -A1 abomination *.sh\n        git-pull.sh:            # XXX: This is an abomination\n        git-pull.sh-            require_clean_work_tree \"pull with\nrebase\" \"Please commit or stash them.\"\n\n     The changes Ramkumar Ramachandra made in 92c62a3f4f, while good,\n     are hard to square with i18n.\n\n     I think I'll just leave those bits untranslated for now and deal\n     with them later, since I'm trying to keep this minimal.\n\nAnd then there's the issue that unlike the C patches these will not be\na no-op that'll be optimized away by the compiler. We'll be calling an\nexternal program for displaying messages. While this is a trivial cost\non Unix (especially in the context we're using it, i.e. not in tight\nloops) it's more expensive on Windows.\n\nI don't see any way to deal with that short of implementing some\npre-processor, but I think the cost is worth it, but others might\ndisagree of course.\n\nAnyway, I can submit these patches (around 53) real soon, or wait\nuntil the current series settles. It's the same to me, which would you\nprefer?\n\n> * gr/cvsimport-alternative-cvspass-location (2011-02-18) 1 commit\n>  - Look for password in both CVS and CVSNT password files.\n\nGiven that this solves someone's problem I don't think there's any\nharm in letting it through. The code and overall behavior is somewhat\nnasty, but then so is the rest of git-cvs*.perl, so meh.\n\n> * jc/checkout-orphan-warning (2011-02-18) 1 commit\n>  - commit: give final warning when reattaching HEAD to leave commits behind\n\nI like this sort of thing.\n\nGenerally speaking I don't mind Git being more friendly and verbose\nabout this sort of thing. I.e. for common pitfalls print a few lines\nof help because it'll help more than it hurts. I think we've been to\nconservative about that in the past.\n\nThere's a grammar error here though if I'm not mistaken:\n\n    w git ((f11f53c...) $%) $ ./git co pu\n    Warning: you are leaving 1 commit behind that are not connected to\n    any of your branches:\n\nFor the singular this should be \"1 commit behind which is not\ncorrected to any of your branches\".\n\nWe're also being somewhat inaccurate by omission here, since we won't\ngive this warning if the commit is reachable from any named referenc,\ni.e. if the user just tagged it. So perhaps this should say something\nabout \"not reachable from any named reference\" or something, but then\nagain that would confuse the sort of users that need this the most.\n\n> * jh/maint-do-not-track-non-branches (2011-02-17) 1 commit\n>  - branch/checkout --track: Ensure that upstream branch is indeed a branch\n\nI like it.\n\n> * jk/merge-rename-ux (2011-02-20) 6 commits\n>  - pull: propagate --progress to merge\n>  - merge: enable progress reporting for rename detection\n>  - add inexact rename detection progress infrastructure\n>  - commit: stop setting rename limit\n>  - bump rename limit defaults (again)\n>  - merge: improve inexact rename limit warning\n>\n> The above three all seemed sensible improvements.\n\nAgreed.\n\n> * jn/test-terminal-punt-on-osx-breakage (2011-02-17) 1 commit\n>  (merged to 'next' on 2011-02-23 at d754139)\n>  + tests: skip terminal output tests on OS X\n\nLooks good, and maybe I'll debug the Perl one of these days.\n\n> * jk/tag-contains (2010-07-05) 4 commits\n>  - Why is \"git tag --contains\" so slow?\n>  - default core.clockskew variable to one day\n>  - limit \"contains\" traversals based on commit timestamp\n>  - tag: speed up --contains calculation\n>\n> The idea of the bottom one is probably Ok, except that the use of object\n> flags needs to be rethought, or at least the helper needs to be moved to\n> builtin/tag.c to make it clear that it should not be used outside the\n> current usage context.\n\nI really like this as noted elsewhere. But it seems that it would go\ndown better if the helper was submitted later on.\n\n> * jh/push-default-upstream-configname (2011-02-16) 1 commit\n>  (merged to 'next' on 2011-02-23 at b5c25fa)\n>  + push.default: Rename 'tracking' to 'upstream'\n>\n> This is not \"renaming\" in the sense that breaks existing practice, but\n> giving a new official name and deprecating the existing one.\n\nI like the new name.\n\n> * mo/perl-bidi-pipe-envfix (2011-02-15) 1 commit\n>  (merged to 'next' on 2011-02-15 at c36e816)\n>  + perl: command_bidi_pipe() method should set-up git environmens\n>\n> Looked reasonable.\n\nYeah, but fix up the typo in the subject. Should be \"environments\" :)\n"},{"id":"162089","messageId":"7voc6245yp.fsf@alter.siamese.dyndns.org","threadId":"26586","inReplyTo":"201102240052.36379.johan@herland.net","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-02-24T00:43:58Z","receivedAt":"2011-02-24T00:43:58Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johan Herland <johan@herland.net> writes:\n\n> On Thursday 24 February 2011, Junio C Hamano wrote:\n>> Here are the topics that have been cooking.  Commits prefixed with '-'\n>> are only in 'pu' while commits prefixed with '+' are in 'next'.\n>> \n>> [...]\n>> * jh/maint-do-not-track-non-branches (2011-02-17) 1 commit\n>>  - branch/checkout --track: Ensure that upstream branch is indeed a\n>> branch\n>> \n>> This supersedes \"do not track HEAD\" from Thomas.\n>\n> What do you mean by \"supersedes\"? It builds on top of Thomas' patch (v2 was \n> rebased on top it), but it does not _replace_ Thomas' patch.\n\nI judge that the earlier one to special case only \"HEAD\" a failed attempt\nto the wider problem; what was posted to the list might have been relative\nto it, but what is queued reverts the effect of the previous patch and is\nrelative to the mainline.\n"},{"id":"162090","messageId":"7vk4gq45bo.fsf@alter.siamese.dyndns.org","threadId":"26586","inReplyTo":"AANLkTinUtqJJHNyS9CxrC=VnS87v=GH=pOw9yr4r=pii@mail.gmail.com","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-02-24T00:57:47Z","receivedAt":"2011-02-24T00:57:47Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n\n> And then there's the issue that unlike the C patches these will not be\n> a no-op that'll be optimized away by the compiler. We'll be calling an\n> external program for displaying messages. While this is a trivial cost\n> on Unix (especially in the context we're using it, i.e. not in tight\n> loops) it's more expensive on Windows.\n>\n> I don't see any way to deal with that short of implementing some\n> pre-processor, but I think the cost is worth it, but others might\n> disagree of course.\n\nCount me one of the others then.  Don't we already preprocess our scripts\nbefore installing anyway?\n\n> Anyway, I can submit these patches (around 53) real soon, or wait\n> until the current series settles. It's the same to me, which would you\n> prefer?\n\nOne thing at a time is of course preferred.\n\nI actually want to stagger the current 70+ patches into two batches.  Have\nthe first handful, after polishing them really shiny, merged to master,\nand possibly rebase topics that are only in 'pu' and that are not meant\nfor 'maint' on top of the result (so that they can use _() in newly added\nmessages), and then merge \"mark strings in git-foo with _()\" patches in.\n\nI suspect it won't be the same to you.  At least, it shouldn't.\n\nOther topics that fix real bugs or add features continue to trickle down\nfrom 'next' to 'master' and you would need to re-roll what you have today.\nIf you wait (or if we have you wait) for too long, the re-roll would\nbecome just as unpleasant as my merging the i18n topic to 'pu'.\n\n>     Warning: you are leaving 1 commit behind that are not connected to\n>     any of your branches:\n>\n> For the singular this should be \"1 commit behind which is not\n> corrected to any of your branches\".\n\nHeh, thanks.  I would think \"s/ that are /, /\" would fix it rather\nnicely.\n\n> ... but then\n> again that would confuse the sort of users that need this the most.\n\nThat is exactly why I phrased it this way.\n"},{"id":"162092","messageId":"201102240204.20822.johan@herland.net","threadId":"26586","inReplyTo":"7voc6245yp.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Johan Herland","fromEmail":"johan@herland.net","sentAt":"2011-02-24T01:04:20Z","receivedAt":"2011-02-24T01:04:20Z","isPatch":false,"sender":{"key":"johan@herland.net","avatar":"https://avatars.githubusercontent.com/u/547031?v=4"},"body":"On Thursday 24 February 2011, Junio C Hamano wrote:\n> Johan Herland <johan@herland.net> writes:\n> > On Thursday 24 February 2011, Junio C Hamano wrote:\n> >> Here are the topics that have been cooking.  Commits prefixed with '-'\n> >> are only in 'pu' while commits prefixed with '+' are in 'next'.\n> >> \n> >> [...]\n> >> * jh/maint-do-not-track-non-branches (2011-02-17) 1 commit\n> >> \n> >>  - branch/checkout --track: Ensure that upstream branch is indeed a\n> >> \n> >> branch\n> >> \n> >> This supersedes \"do not track HEAD\" from Thomas.\n> > \n> > What do you mean by \"supersedes\"? It builds on top of Thomas' patch (v2\n> > was rebased on top it), but it does not _replace_ Thomas' patch.\n> \n> I judge that the earlier one to special case only \"HEAD\" a failed attempt\n> to the wider problem; what was posted to the list might have been\n> relative to it, but what is queued reverts the effect of the previous\n> patch and is relative to the mainline.\n\nAh, I see. I'm good with that. :)\n\n\n...Johan\n\n-- \nJohan Herland, <johan@herland.net>\nwww.herland.net\n"},{"id":"162093","messageId":"7vd3mi44gx.fsf@alter.siamese.dyndns.org","threadId":"26586","inReplyTo":"20110223234828.GA7286@elie","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-02-24T01:16:14Z","receivedAt":"2011-02-24T01:16:14Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jonathan Nieder <jrnieder@gmail.com> writes:\n\n> The commit message for the second one seems to have been mangled:\n>\n> \ti18n: add GETTEXT_POISON to simulate translated messages unfriendly translator\n\nYeah, I think I was fooled by the header folding while fixing things up\ninside the mailbox.\n\n> I still don't like the #-sign business in this commit.  Couldn't it\n> be split into a separate patch, not to be applied until just before\n> the strings in commit/tag/wt-status are marked for translation?\n\nThat might be a sensible thing to do.   Ævar what do you think?\n\n> There is also a patch out there to make this use rot13, which I am\n> somewhat fond of.  Unfortunately, it leaks (because it is not clear\n> how long translated strings are supposed to last).\n\nYeah I would imagine it would leak.  Also blindly running rot13 to turn %d\ninto %q is probably not what you want.\n\n> I'd be happy with renaming use_poison() to gettext_poison() or\n> similar.  I suppose that is not urgent.\n\nI would prefer to be able to merge the first handful to 'master' sooner\nrather than later to minimize the damage to in-flight topics, though.\n\nThanks.\n"},{"id":"162096","messageId":"AANLkTik6-AFN1T7GYz6z4ad=pPCZG4Z5LWung0qYwe2X@mail.gmail.com","threadId":"26586","inReplyTo":"7vk4gq45bo.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-02-24T01:37:36Z","receivedAt":"2011-02-24T01:37:36Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Thu, Feb 24, 2011 at 01:57, Junio C Hamano <gitster@pobox.com> wrote:\n> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n>\n>> And then there's the issue that unlike the C patches these will not be\n>> a no-op that'll be optimized away by the compiler. We'll be calling an\n>> external program for displaying messages. While this is a trivial cost\n>> on Unix (especially in the context we're using it, i.e. not in tight\n>> loops) it's more expensive on Windows.\n>>\n>> I don't see any way to deal with that short of implementing some\n>> pre-processor, but I think the cost is worth it, but others might\n>> disagree of course.\n>\n> Count me one of the others then.  Don't we already preprocess our scripts\n> before installing anyway?\n\nYes, but only for simple variable substitution. Substituting all the\ngettext calls out when we're not compiling with them would be way more\ncomplex than what we do now, but possible. Anyway I'm not going to do\nit.\n\n>> Anyway, I can submit these patches (around 53) real soon, or wait\n>> until the current series settles. It's the same to me, which would you\n>> prefer?\n>\n> One thing at a time is of course preferred.\n\nI'll wait then. No point in submitting them if you won't be merging\nthem down until the other things cool down.\n\n> I actually want to stagger the current 70+ patches into two batches.  Have\n> the first handful, after polishing them really shiny, merged to master,\n> and possibly rebase topics that are only in 'pu' and that are not meant\n> for 'maint' on top of the result (so that they can use _() in newly added\n> messages), and then merge \"mark strings in git-foo with _()\" patches in.\n>\n> I suspect it won't be the same to you.  At least, it shouldn't.\n>\n> Other topics that fix real bugs or add features continue to trickle down\n> from 'next' to 'master' and you would need to re-roll what you have today.\n> If you wait (or if we have you wait) for too long, the re-roll would\n> become just as unpleasant as my merging the i18n topic to 'pu'.\n\nRight, once we're confident (which at least I am) that the first few\npatches really are no-op's I think it would be easier for everyone to\nmerge them down sooner than later.\n\n>>     Warning: you are leaving 1 commit behind that are not connected to\n>>     any of your branches:\n>>\n>> For the singular this should be \"1 commit behind which is not\n>> corrected to any of your branches\".\n>\n> Heh, thanks.  I would think \"s/ that are /, /\" would fix it rather\n> nicely.\n\ns/corrected/connected/ also :)\n"},{"id":"162097","messageId":"7v4o7u42g9.fsf@alter.siamese.dyndns.org","threadId":"26586","inReplyTo":"AANLkTik6-AFN1T7GYz6z4ad=pPCZG4Z5LWung0qYwe2X@mail.gmail.com","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-02-24T01:59:50Z","receivedAt":"2011-02-24T01:59:50Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n\n> Right, once we're confident (which at least I am) that the first few\n> patches really are no-op's I think it would be easier for everyone to\n> merge them down sooner than later.\n\nWe three are pretty much on the same page, then.\n\nTwo minor points are what to do with the \"#\" prefix in \"# POISON #\" and\nnamespace contamination, but other than these I don't think there is\nanything controversial.\n\n\n>>>     Warning: you are leaving 1 commit behind that are not connected to\n>>>     any of your branches:\n>>>\n>>> For the singular this should be \"1 commit behind which is not\n>>> corrected to any of your branches\".\n>>\n>> Heh, thanks.  I would think \"s/ that are /, /\" would fix it rather\n>> nicely.\n>\n> s/corrected/connected/ also :)\n\nThat typo appears only in _your_ version, not mine ;-).\n"},{"id":"162098","messageId":"AANLkTinfAESXU6OaDEqgcU7tppE2PUR=mxYpT94tOJ8j@mail.gmail.com","threadId":"26586","inReplyTo":"7v4o7u42g9.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-02-24T02:07:12Z","receivedAt":"2011-02-24T02:07:12Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Thu, Feb 24, 2011 at 02:59, Junio C Hamano <gitster@pobox.com> wrote:\n> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n>\n>> Right, once we're confident (which at least I am) that the first few\n>> patches really are no-op's I think it would be easier for everyone to\n>> merge them down sooner than later.\n>\n> We three are pretty much on the same page, then.\n>\n> Two minor points are what to do with the \"#\" prefix in \"# POISON #\"\n\nThe root cause of this is solved in a patch by Jonathan:\n\n    https://github.com/avar/git/commit/da15d84430e5f9b68125f6ddad61f66251c991ac\n\nI thought it was better to submit it later once this was in. The\ncurrent behavior is harmless hack that we're aware of.\n\n> namespace contamination,\n\nYou mean just _ being propagated everywhere? That seems harmless.\n\n> but other than these I don't think there is anything controversial.\n\nGreat.\n\n>> s/corrected/connected/ also :)\n>\n> That typo appears only in _your_ version, not mine ;-).\n\nIndeed. I was amending my suggestion, not your original :)\n"},{"id":"162100","messageId":"AANLkTinY4pt5DLokKkuCNnC1yi7nQBHcZv722x9CKvCh@mail.gmail.com","threadId":"26586","inReplyTo":"7vd3mi44gx.fsf@alter.siamese.dyndns.org","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-02-24T02:55:04Z","receivedAt":"2011-02-24T02:55:04Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Thu, Feb 24, 2011 at 02:16, Junio C Hamano <gitster@pobox.com> wrote:\n> Jonathan Nieder <jrnieder@gmail.com> writes:\n>\n>> The commit message for the second one seems to have been mangled:\n>>\n>>       i18n: add GETTEXT_POISON to simulate translated messages unfriendly translator\n>\n> Yeah, I think I was fooled by the header folding while fixing things up\n> inside the mailbox.\n>\n>> I still don't like the #-sign business in this commit.  Couldn't it\n>> be split into a separate patch, not to be applied until just before\n>> the strings in commit/tag/wt-status are marked for translation?\n>\n> That might be a sensible thing to do.   Ævar what do you think?\n\nIt could, but I don't want to spend time on it. I think it's fine that\nthe choice of string is documented in the commit that introduces it.\n\n>> There is also a patch out there to make this use rot13, which I am\n>> somewhat fond of.  Unfortunately, it leaks (because it is not clear\n>> how long translated strings are supposed to last).\n>\n> Yeah I would imagine it would leak.  Also blindly running rot13 to turn %d\n> into %q is probably not what you want.\n\nGettext gives you a pointer to the string inside a mmaped .mo file,\neffectively, so the caller doesn't have to care about it. So you can't\nwrite something that doesn't leak memory unless you preserve that\ncharacteristic.\n\nBut it's a debugging mode, it doesn't matter IMO if it leaks memory.\n\nAnyway, to be blunt I really don't see the point of fiddling around\nwith this bit so much. Whether it's a `\"GETTEXT POISON\"` constant or\n`rot13(msgid)` the same tests will fail. So it's not functionally\nchanging what the feature was for in the first place, just adding more\ncomplexity.\n\nOf course there might be cases where a test will fail because it's\nsupposed to end in \\n but the poison string doesn't, but since none of\nthem did I didn't worry about that.\n\nAnd even if one did I'd probably just mark it as C_LOCALE_ONLY\nanyway. Since the intent is to make the person doing the i18n work not\nbreak plumbing, not to perfectly annotate our test suite. I'd much\nrather have a few more tests skipped under this poison mode than 20\nextra lines of C code that effectively give us nothing to maintain.\n\nIf someone else wants to do the work I don't care. I just think\nthere's more important things to worry about.\n"},{"id":"162102","messageId":"20110224031414.GC7970@elie","threadId":"26586","inReplyTo":"AANLkTinY4pt5DLokKkuCNnC1yi7nQBHcZv722x9CKvCh@mail.gmail.com","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-02-24T03:14:14Z","receivedAt":"2011-02-24T03:14:14Z","isPatch":false,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> Anyway, to be blunt I really don't see the point of fiddling around\n> with this bit so much. Whether it's a `\"GETTEXT POISON\"` constant or\n> `rot13(msgid)` the same tests will fail.\n\nBecause with rot13 you can decode the message and find the problematic\ncode?\n\n> If someone else wants to do the work I don't care. I just think\n> there's more important things to worry about.\n\nI already wrote a patch.  I imagine you don't intend it this way, but\nI keep on hearing \"we shouldn't do what you've already done.  It's too\nmuch trouble.  You wasted your time.\"\n"},{"id":"162106","messageId":"20110224040035.GE7970@elie","threadId":"26586","inReplyTo":"AANLkTinY4pt5DLokKkuCNnC1yi7nQBHcZv722x9CKvCh@mail.gmail.com","subject":"Re: ab/i18n","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-02-24T04:00:35Z","receivedAt":"2011-02-24T04:00:35Z","isPatch":false,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n> On Thu, Feb 24, 2011 at 02:16, Junio C Hamano <gitster@pobox.com> wrote:\n>> Jonathan Nieder <jrnieder@gmail.com> writes:\n\n>>> I still don't like the #-sign business in this commit.  Couldn't it\n>>> be split into a separate patch, not to be applied until just before\n>>> the strings in commit/tag/wt-status are marked for translation?\n>>\n>> That might be a sensible thing to do.   Ævar what do you think?\n>\n> It could, but I don't want to spend time on it.\n\nThat doesn't answer the question, does it?  The question is whether\nyou'd be okay with the change (in which case we should do it --- it's\nnot like there's a shortage of people willing to write a one-line\npatch) or not (in which case we shouldn't).\n\n>> Yeah I would imagine it would leak.  Also blindly running rot13 to turn %d\n>> into %q is probably not what you want.\n\nThe rot13 patch turns %d into 5q (and 5q into \"d).  I think that\naspect can wait for later, of course --- a fixed string is not\nactively bad or confusing.\n\n> Of course there might be cases where a test will fail because it's\n> supposed to end in \\n but the poison string doesn't, but since none of\n> them did I didn't worry about that.\n\nRight, that's a downside to the rot13 patch --- it takes \\n to \\n so\nit wouldn't catch such cases.  Easily fixable, though.\n\n> I'd much\n> rather have a few more tests skipped under this poison mode than 20\n> extra lines of C code that effectively give us nothing\n\nNo disagreement here.  I think some cases (e.g., adding '# ' before\neach line of the translated status hints) would give us something,\nnamely protection against hard-to-debug translation bugs.\n\nSorry for the grouchiness, and hope that helps.\nJonathan\n"},{"id":"162119","messageId":"AANLkTimWy+W+rcZHsac_n--y9iMeaoO66CPZVbN1VBp2@mail.gmail.com","threadId":"26586","inReplyTo":"AANLkTinUtqJJHNyS9CxrC=VnS87v=GH=pOw9yr4r=pii@mail.gmail.com","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Erik Faye-Lund","fromEmail":"kusmabite@gmail.com","sentAt":"2011-02-24T09:45:33Z","receivedAt":"2011-02-24T09:45:33Z","isPatch":false,"sender":{"key":"kusmabite@gmail.com","avatar":"https://avatars.githubusercontent.com/u/47073?v=4"},"body":"On Thu, Feb 24, 2011 at 1:32 AM, Ævar Arnfjörð Bjarmason\n<avarab@gmail.com> wrote:\n> And then there's the issue that unlike the C patches these will not be\n> a no-op that'll be optimized away by the compiler. We'll be calling an\n> external program for displaying messages. While this is a trivial cost\n> on Unix (especially in the context we're using it, i.e. not in tight\n> loops) it's more expensive on Windows.\n>\n\nOuch. I remember this being brought up earlier, but I just assumed it\nhad been fixed somehow. The shell-scripts are already pretty slow on\nWindows, and the overhead of starting a new process here is quite\nsignificant.\n\nIt sounds to me like we should revert these patches in msysGit, at\nleast until there's some actual translations in place (and that time\nactually goes into something useful)...\n\n> I don't see any way to deal with that short of implementing some\n> pre-processor, but I think the cost is worth it, but others might\n> disagree of course.\n>\n\nI'm not so sure. This is mostly a problem with the no-op version on\nWindows (due to the slow process-startup there), but I think Git for\nWindows probably wants to have i18n support in it's distribution as it\nstrives to be the canonical Git-distribution for Windows. But if we\ndo, there's nothing to optimize. There's no no-op-stuff, and we need\nto spend that time getting translations.\n\nIt might be that some people that build Git for Windows themselves and\nknow that they don't want a translated Git could benefit from a\npre-processor, but I'm not so sure. Translated strings occur when\nthere's communication going on between Git and the user, and then\nwe're some times waiting for user-input, and even when we aren't it\nshould be relatively few messages (unless verbose flags are turned on,\nwhich isn't an important use-case performance-wise to me).\n\n> Anyway, I can submit these patches (around 53) real soon, or wait\n> until the current series settles. It's the same to me, which would you\n> prefer?\n>\n\nIf we're going to revert these patches in 4msysgit.git, then I can\nimagine that the process becomes very awkward and error-prone if we're\ngoing to diverge for a long time. So I think it'd make more sense for\nus (the msysgit-developers, that is) if it was merged together with\nthe first translations. But that might be sub-optimal for the rest of\nyou guys.\n"},{"id":"162120","messageId":"AANLkTimn_CmWORwJfWXEiY18QCmXdNZMhCUC9YBMo_kV@mail.gmail.com","threadId":"26586","inReplyTo":"20110223234828.GA7286@elie","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Erik Faye-Lund","fromEmail":"kusmabite@gmail.com","sentAt":"2011-02-24T09:56:11Z","receivedAt":"2011-02-24T09:56:11Z","isPatch":false,"sender":{"key":"kusmabite@gmail.com","avatar":"https://avatars.githubusercontent.com/u/47073?v=4"},"body":"On Thu, Feb 24, 2011 at 12:48 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> There is also a patch out there to make this use rot13, which I am\n> somewhat fond of.  Unfortunately, it leaks (because it is not clear\n> how long translated strings are supposed to last).\n>\n\nI like the idea, but perhaps we could auto-generate a Pig Latin\ntranslation or something instead? Pig Latin has the benefit over\nrot-13 of the strings being of a different length than the original,\nwhich might trigger some bugs that same-length translations might\nnot...\n"},{"id":"162125","messageId":"20110224102712.GC14115@elie","threadId":"26586","inReplyTo":"AANLkTimn_CmWORwJfWXEiY18QCmXdNZMhCUC9YBMo_kV@mail.gmail.com","subject":"Re: ab/i18n","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-02-24T10:27:12Z","receivedAt":"2011-02-24T10:27:12Z","isPatch":false,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Erik Faye-Lund wrote:\n\n> I like the idea, but perhaps we could auto-generate a Pig Latin\n> translation or something instead?\n\nSorry for the fuss.  If I understand correctly, the remaining\nissues with the current ab/i18n branch in 'pu' are:\n\n* The series is too long to read in one sitting.\n\n  Suggested fix: deal with some arbitrary early subset (35 patches?\n  I'd even prefer around 20) first.\n\n* Patch 2 (add GETTEXT_POISON) is conceptually complicated since\n  its arbitrary string is not arbitrary.\n\n  Suggested fix: split it into two patches.  But I am still not sure\n  if that's considered acceptable?\n\n* Patch 2 squats on a valuable use_poison() identifier space.\n\n  Suggested fix: rename it to gettext_poison().\n\n* Patches 5 (i18n: git-init basic messages) and onward do not\n  explain \"we are marking strings for translation, in\n  preparation for translating them later\" in their commit messages.\n\n  Suggested fix: use titles like «i18n: mark some \"git init\" messages\n  for translation».  Or ignore the problem --- it's not a big deal.\n\n* We haven't run an automated tool to check that this is a no-op\n  in the -UGETTEXT_POISON case.\n\n  Suggested fix: build without debugging symbols and compare the\n  binaries.  Or invent a tool to check patches.  Or just use our\n  eyes, like we always have.\n\nDoes that sound like a fair summary?  I'd be happy to reroll the\nfirst 30 or so patches following whatever approach is the consensus\nfor these things to move this forward.\n"},{"id":"162126","messageId":"AANLkTikfqmPKA0T4Q-ac0CXzqmCEp0cWNskODEjmACW_@mail.gmail.com","threadId":"26586","inReplyTo":"20110224031414.GC7970@elie","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-02-24T10:38:54Z","receivedAt":"2011-02-24T10:38:54Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Thu, Feb 24, 2011 at 04:14, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Ævar Arnfjörð Bjarmason wrote:\n>\n>> Anyway, to be blunt I really don't see the point of fiddling around\n>> with this bit so much. Whether it's a `\"GETTEXT POISON\"` constant or\n>> `rot13(msgid)` the same tests will fail.\n>\n> Because with rot13 you can decode the message and find the problematic\n> code?\n>\n>> If someone else wants to do the work I don't care. I just think\n>> there's more important things to worry about.\n>\n> I already wrote a patch.  I imagine you don't intend it this way, but\n> I keep on hearing \"we shouldn't do what you've already done.  It's too\n> much trouble.  You wasted your time.\"\n\nI don't mean it that way at all, I just mean that as a comment to\n*this* particular patch series I don't think it's something we have to\nworry about.\n\nI.e. if you look at this in context we have a 170 gettext patch series\nto trickle in gradually. Right now we have 70 pending with only the C\ntranslations. Hopefully we can fast-track this to have around 150 of\nthose in in the next month or so.\n\nWhat I want to focus on is getting this right for users of Git, and I\nthink it's already good enough for that purpose. I'm not worried about\nan embedded debug testing mode that to my knowledge only you and I\nhave used so far.\n\nIf it has some changes for improvement I think they can be dealt with\nlater, doing it at this point means more code to review. Right now the\nC code in the series is around 10 lines, doing something like the\nrot13 implementation would at least triple that, making in not leak\nmemory (and hence have automated tools complain) would be even more\ncode.\n\nAgain, don't get me wrong. I really appreciate your work. I just don't\nthink this is something we need to worry about now.\n"},{"id":"162128","messageId":"AANLkTi=RPAmswfcxSDMtaBwD55kkfbT5Qj-n7jmoRTy0@mail.gmail.com","threadId":"26586","inReplyTo":"AANLkTimn_CmWORwJfWXEiY18QCmXdNZMhCUC9YBMo_kV@mail.gmail.com","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-02-24T10:40:21Z","receivedAt":"2011-02-24T10:40:21Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Thu, Feb 24, 2011 at 10:56, Erik Faye-Lund <kusmabite@gmail.com> wrote:\n> On Thu, Feb 24, 2011 at 12:48 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:\n>> There is also a patch out there to make this use rot13, which I am\n>> somewhat fond of.  Unfortunately, it leaks (because it is not clear\n>> how long translated strings are supposed to last).\n>>\n>\n> I like the idea, but perhaps we could auto-generate a Pig Latin\n> translation or something instead? Pig Latin has the benefit over\n> rot-13 of the strings being of a different length than the original,\n> which might trigger some bugs that same-length translations might\n> not...\n\nAt the risk of sounding too succinct.\n\n\"dudes\"\n\n:)\n"},{"id":"162129","messageId":"20110224104552.GD14115@elie","threadId":"26586","inReplyTo":"AANLkTikfqmPKA0T4Q-ac0CXzqmCEp0cWNskODEjmACW_@mail.gmail.com","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-02-24T10:45:52Z","receivedAt":"2011-02-24T10:45:52Z","isPatch":false,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> I don't mean it that way at all, I just mean that as a comment to\n> *this* particular patch series I don't think it's something we have to\n> worry about.\n\nThen we're in violent agreement, I suppose.  I don't think anyone\nmeant to imply that rot13 or anything of the kind should be snuck in\nhere.  Rereading my message, I see how it can be read that way ---\nsorry about that.\n\nI had only meant to give a heads up about something coming in the\nfuture.\n"},{"id":"162130","messageId":"20110224110029.GE14115@elie","threadId":"26586","inReplyTo":"AANLkTikfqmPKA0T4Q-ac0CXzqmCEp0cWNskODEjmACW_@mail.gmail.com","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-02-24T11:00:29Z","receivedAt":"2011-02-24T11:00:29Z","isPatch":false,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> I don't mean it that way at all, I just mean that as a comment to\n> *this* particular patch series I don't think it's something we have to\n> worry about.\n\nThis is really tiring and unpleasant.  I don't want to stand in the\nway of a translated git happening or to take on the project myself\nso I can't just decree \"it will be like so\".\n\nIt's your and Junio's (and lots other people's, of course) code.  But\nthat means that for me to be able to help, I need to be able to say,\n\"here's a suggested change\" and get an \"okay\" or \"no, here's what's\nwrong with that and how you can improve it\".\n\nAnd that just doesn't seem to be happening now.  I don't know how to\nfix it, but I thought I should explain why I am probably so\nfrustrating to work with right now.\n\nSorry about that.\n"},{"id":"162173","messageId":"AANLkTike1qDGJ-mLsSRYpBk59_evk9x5oFeGt5RSUg3d@mail.gmail.com","threadId":"26586","inReplyTo":"AANLkTimWy+W+rcZHsac_n--y9iMeaoO66CPZVbN1VBp2@mail.gmail.com","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-02-24T17:47:53Z","receivedAt":"2011-02-24T17:47:53Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Thu, Feb 24, 2011 at 10:45, Erik Faye-Lund <kusmabite@gmail.com> wrote:\n> On Thu, Feb 24, 2011 at 1:32 AM, Ævar Arnfjörð Bjarmason\n> <avarab@gmail.com> wrote:\n>> And then there's the issue that unlike the C patches these will not be\n>> a no-op that'll be optimized away by the compiler. We'll be calling an\n>> external program for displaying messages. While this is a trivial cost\n>> on Unix (especially in the context we're using it, i.e. not in tight\n>> loops) it's more expensive on Windows.\n>>\n>\n> Ouch. I remember this being brought up earlier, but I just assumed it\n> had been fixed somehow. The shell-scripts are already pretty slow on\n> Windows, and the overhead of starting a new process here is quite\n> significant.\n>\n> It sounds to me like we should revert these patches in msysGit, at\n> least until there's some actual translations in place (and that time\n> actually goes into something useful)...\n\nIIRC last time this was discussed I asked whether the size of the\nbinary mattered for execution startup time (i.e. more so than on\nUnix). We're only invoking printf(1) and git-sh-i18n--envsubst, both\nof which only are (or only need to be) linked to libc.\n\nIt would also be interesting to have some real world benchmarks on\nWindows with and without this series, maybe it won't be so bad.\n\nI think in the long term we probably want to rewrite the remaining\n*.sh programs in C anyway.\n\n>> I don't see any way to deal with that short of implementing some\n>> pre-processor, but I think the cost is worth it, but others might\n>> disagree of course.\n>>\n>\n> I'm not so sure. This is mostly a problem with the no-op version on\n> Windows (due to the slow process-startup there), but I think Git for\n> Windows probably wants to have i18n support in it's distribution as it\n> strives to be the canonical Git-distribution for Windows. But if we\n> do, there's nothing to optimize. There's no no-op-stuff, and we need\n> to spend that time getting translations.\n>\n> It might be that some people that build Git for Windows themselves and\n> know that they don't want a translated Git could benefit from a\n> pre-processor, but I'm not so sure. Translated strings occur when\n> there's communication going on between Git and the user, and then\n> we're some times waiting for user-input, and even when we aren't it\n> should be relatively few messages (unless verbose flags are turned on,\n> which isn't an important use-case performance-wise to me).\n>\n>> Anyway, I can submit these patches (around 53) real soon, or wait\n>> until the current series settles. It's the same to me, which would you\n>> prefer?\n>>\n>\n> If we're going to revert these patches in 4msysgit.git, then I can\n> imagine that the process becomes very awkward and error-prone if we're\n> going to diverge for a long time. So I think it'd make more sense for\n> us (the msysgit-developers, that is) if it was merged together with\n> the first translations. But that might be sub-optimal for the rest of\n> you guys.\n\nIf it comes to that it'll be easier to have some perl script that\nconverts C<\"$(eval_gettext \"foobar: \\$whatever\")\"> back to C<\"foobar:\n$whataver\"> at build time than revert the patches.\n"},{"id":"162181","messageId":"7vfwrd1c3m.fsf@alter.siamese.dyndns.org","threadId":"26586","inReplyTo":"20110224102712.GC14115@elie","subject":"Re: ab/i18n","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-02-24T19:11:57Z","receivedAt":"2011-02-24T19:11:57Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jonathan Nieder <jrnieder@gmail.com> writes:\n\n> * The series is too long to read in one sitting.\n>\n>   Suggested fix: deal with some arbitrary early subset (35 patches?\n>   I'd even prefer around 20) first.\n\nLet's concentrate on making sure that the first four (i18n foundation, no\nmarkings) gets merged to 'master' first, using the early ones (say,\n\"init\", \"clone\", \"add\" and \"branch\") as a sanity checks.\n\nAnd then we can stagger the remainder, perhaps at most 10 in one batch but\npreferrably smaller, two to three batches a week merged to 'next' and then\ndown to 'master', over a few weeks.\n\n> * Patch 2 (add GETTEXT_POISON) is conceptually complicated since\n>   its arbitrary string is not arbitrary.\n>\n>   Suggested fix: split it into two patches.  But I am still not sure\n>   if that's considered acceptable?\n\nSee bottom.\n\n> * Patch 2 squats on a valuable use_poison() identifier space.\n>\n>   Suggested fix: rename it to gettext_poison().\n\nFor this, I can just \"rebase -i\"; I don't think there is anything\ncontroversial nor tricky.\n\n> * Patches 5 (i18n: git-init basic messages) and onward do not\n>   explain \"we are marking strings for translation, in\n>   preparation for translating them later\" in their commit messages.\n>\n>   Suggested fix: use titles like «i18n: mark some \"git init\" messages\n>   for translation».  Or ignore the problem --- it's not a big deal.\n\nIf you want to see a mixed patch that has both logic reorganization and\nmessage marking in one change, e.g. i18n: git-revert split up \"could not\nrevert/apply\" message, split into one that only reorganizes the code\nstructure and the other that only marks literal string, your \"mark for\ntranslation\" would start making sense.  The other half won't even have\n\"i18n:\" prefix in that case.  If we go that route, it would be better to\nhave the code restructuring patches merged to 'master' before (and\nindependent from) i18n.  But the ones I took a look at didn't seem too bad\n(e.g. i18n: git-revert \"Your local changes\" message).  I think Ævar did a\ngood job splitting the changes into a reasonably small bite-sized chunks\nin this round.\n\nAssuming that we are not going to do that \"even finer\" split, I think the\npatches we have on 'pu' are descriptive enough already.  They look like\nthis:\n\n    i18n: git-tag tag_template message\n    i18n: git-mv \"bad\" messages\n\n> Does that sound like a fair summary?\n\nTo me it does.  Thanks.\n\n> I'd be happy to reroll the first 30 or so patches following whatever\n> approach is the consensus for these things to move this forward.\n\nI tend to think that except for the GETTEXT_POISON bit what we have is\nmostly fine.\n\nCan you give two weather-balloon counterproposal patches for \"add\nGETTEXT_POISON\" and \"i18n: git-status \"Changes to be committed\" message\"\nto illustrate what you have in mind, and perhaps list the patches in\nÆvar's series that need similar changes as you would need for the latter,\nto illustrate the extent of damage a careless translator can cause by\nomitting '#' from the beginning?  Would that help the topic get unstuck?\n"},{"id":"162198","messageId":"20110224223952.GA22524@elie","threadId":"26586","inReplyTo":"AANLkTike1qDGJ-mLsSRYpBk59_evk9x5oFeGt5RSUg3d@mail.gmail.com","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-02-24T22:39:52Z","receivedAt":"2011-02-24T22:39:52Z","isPatch":false,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> IIRC last time this was discussed I asked whether the size of the\n> binary mattered for execution startup time (i.e. more so than on\n> Unix). We're only invoking printf(1) and git-sh-i18n--envsubst, both\n> of which only are (or only need to be) linked to libc.\n\nprintf is usually built in to the shell.  I think if we're very\ncareful about quoting shell metacharacters then we can get by using\neval in place of envsubst.  See the message that\n\n http://thread.gmane.org/gmane.comp.version-control.git/160396\n\nis a reply to (which does not seem to have hit the ml; sorry about\nthat).\n\nI hope preprocessing away the \"eval\" is not needed. :)\n\n> It would also be interesting to have some real world benchmarks on\n> Windows with and without this series, maybe it won't be so bad.\n\nYes, e.g. timing from running the rebase tests in the testsuite\nmight be interesting.\n"},{"id":"162203","messageId":"alpine.DEB.1.00.1102250244260.1561@bonsai2","threadId":"26586","inReplyTo":"AANLkTike1qDGJ-mLsSRYpBk59_evk9x5oFeGt5RSUg3d@mail.gmail.com","subject":"Re: [msysGit] Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2011-02-25T01:45:35Z","receivedAt":"2011-02-25T01:45:35Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Thu, 24 Feb 2011, Ævar Arnfjörð Bjarmason wrote:\n\n> I think in the long term we probably want to rewrite the remaining *.sh \n> programs in C anyway.\n\nGood luck with that, and also the Perl programs (it's not so much the \ntechnical side which I wish you luck with; the technical issues are \nstraight-forward :-)\n\nCiao,\nDscho"},{"id":"162223","messageId":"20110225090544.GA3783@tugrik.mns.mnsspb.ru","threadId":"26586","inReplyTo":"AANLkTimWy+W+rcZHsac_n--y9iMeaoO66CPZVbN1VBp2@mail.gmail.com","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Kirill Smelkov","fromEmail":"kirr@mns.spb.ru","sentAt":"2011-02-25T09:05:44Z","receivedAt":"2011-02-25T09:05:44Z","isPatch":false,"sender":{"key":"kirr@navytux.spb.ru","avatar":"https://gravatar.com/avatar/cf3445fdad1849941e17ab25bf1ee7c5ea1be2deb444be25ff5f36b0e50a985f?d=mp&s=160"},"body":"+Dscho\n\nOn Thu, Feb 24, 2011 at 10:45:33AM +0100, Erik Faye-Lund wrote:\n> On Thu, Feb 24, 2011 at 1:32 AM, Ævar Arnfjörð Bjarmason\n> <avarab@gmail.com> wrote:\n> > And then there's the issue that unlike the C patches these will not be\n> > a no-op that'll be optimized away by the compiler. We'll be calling an\n> > external program for displaying messages. While this is a trivial cost\n> > on Unix (especially in the context we're using it, i.e. not in tight\n> > loops) it's more expensive on Windows.\n> >\n> \n> Ouch. I remember this being brought up earlier, but I just assumed it\n> had been fixed somehow. The shell-scripts are already pretty slow on\n> Windows, and the overhead of starting a new process here is quite\n> significant.\n\nJohannes, can we please try my patch[1] for msys.dll not to load\nuser32.dll for every msys program (i.e. sh.exe too)? Combined together\nwith 3 clipboard functions removal (details in [2]) from sh.exe, I bet\nthis will result in significantly faster shell startup, configure runs,\netc...\n\nThis days I have lack of access to windows machines, only wine, so I\ndesperately need someones help to at least first rebuild msys.dll.\n\n\nThanks,\nKirill\n\n[1] http://repo.or.cz/w/msys/kirr.git/commitdiff/f7d7efebd35e8e5bf6d685ff4f1197941984be04\n[2] http://repo.or.cz/w/msys/kirr.git/commitdiff/a97bed5d22f9c05f39776d8ea7856db4ce572dc5\n"},{"id":"162230","messageId":"alpine.DEB.1.00.1102251208380.1561@bonsai2","threadId":"26586","inReplyTo":"20110225090544.GA3783@tugrik.mns.mnsspb.ru","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2011-02-25T11:11:59Z","receivedAt":"2011-02-25T11:11:59Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 25 Feb 2011, Kirill Smelkov wrote:\n\n> Johannes, can we please try my patch[1] for msys.dll not to load \n> user32.dll for every msys program (i.e. sh.exe too)? Combined together \n> with 3 clipboard functions removal (details in [2]) from sh.exe, I bet \n> this will result in significantly faster shell startup, configure runs, \n> etc...\n> \n> This days I have lack of access to windows machines, only wine, so I\n> desperately need someones help to at least first rebuild msys.dll.\n> \n> [1] http://repo.or.cz/w/msys/kirr.git/commitdiff/f7d7efebd35e8e5bf6d685ff4f1197941984be04\n> [2] http://repo.or.cz/w/msys/kirr.git/commitdiff/a97bed5d22f9c05f39776d8ea7856db4ce572dc5\n\nThree things:\n\n[2] does not apply cleanly, so I am still desperately trying to find some \ntime to finish it off (the patches are to msys.git, not the 'msys' branch \nof msysgit.git, so I had to find a quarter an hour in order to put them \nthere in the first place, taking up all the Git time budget I wanted to \nallow myself for this week).\n\nFurther, I think that my beloved Shift+Insert will no longer work with \nyour [2].\n\nAnd lastly, in [2] you claim that you cross-built msys-1.0.dll. I would \nlike to have a script doing that in msysgit.git.\n\nCiao,\nDscho\n"},{"id":"162253","messageId":"20110225192455.GA7130@tugrik.mns.mnsspb.ru","threadId":"26586","inReplyTo":"alpine.DEB.1.00.1102251208380.1561@bonsai2","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Kirill Smelkov","fromEmail":"kirr@mns.spb.ru","sentAt":"2011-02-25T19:24:55Z","receivedAt":"2011-02-25T19:24:55Z","isPatch":false,"sender":{"key":"kirr@navytux.spb.ru","avatar":"https://gravatar.com/avatar/cf3445fdad1849941e17ab25bf1ee7c5ea1be2deb444be25ff5f36b0e50a985f?d=mp&s=160"},"body":"On Fri, Feb 25, 2011 at 12:11:59PM +0100, Johannes Schindelin wrote:\n> Hi,\n> \n> On Fri, 25 Feb 2011, Kirill Smelkov wrote:\n> \n> > Johannes, can we please try my patch[1] for msys.dll not to load \n> > user32.dll for every msys program (i.e. sh.exe too)? Combined together \n> > with 3 clipboard functions removal (details in [2]) from sh.exe, I bet \n> > this will result in significantly faster shell startup, configure runs, \n> > etc...\n> > \n> > This days I have lack of access to windows machines, only wine, so I\n> > desperately need someones help to at least first rebuild msys.dll.\n> > \n> > [1] http://repo.or.cz/w/msys/kirr.git/commitdiff/f7d7efebd35e8e5bf6d685ff4f1197941984be04\n> > [2] http://repo.or.cz/w/msys/kirr.git/commitdiff/a97bed5d22f9c05f39776d8ea7856db4ce572dc5\n\nFor [1] please do\n\ngit://repo.or.cz/msysgit/kirr.git ks/no-user32-in-msysdll       # into msys\n\nKirill Smelkov (1):\n      msys.dll: Don't pull user32.dll & friends just to detect whether right alt should be used as meta\n\n ...n-t-pull-user32.dll-friends-just-to-detec.patch |   98 ++++++++++++++++++++\n 1 files changed, 98 insertions(+), 0 deletions(-)\n create mode 100644 src/rt/patches/0011-msys.dll-Don-t-pull-user32.dll-friends-just-to-detec.patch\n\n\n> Three things:\n> \n> [2] does not apply cleanly, so I am still desperately trying to find some \n> time to finish it off (the patches are to msys.git, not the 'msys' branch \n> of msysgit.git, so I had to find a quarter an hour in order to put them \n> there in the first place, taking up all the Git time budget I wanted to \n> allow myself for this week).\n\nFor [2] please do\n\n    git pull git://repo.or.cz/msysgit/kirr.git ks/xser32.dll    # into devel\n\nKirill Smelkov (3):\n      hack: xser32.dll -- Fake user32.dll like stub (for sh.exe not to load user32.dll)\n      xser32.dll: Fake user32.dll like stub (for sh.exe not to load user32.dll)\n      hack: sh.exe -- link to xser32.dll instead of user32.dll\n\n bin/sh.exe            |  Bin 567296 -> 567296 bytes\n bin/xser32.dll        |  Bin 0 -> 4373 bytes\n src/xser32/Makefile   |   13 +++++++++++++\n src/xser32/release.sh |    7 +++++++\n src/xser32/xser32.c   |   27 +++++++++++++++++++++++++++\n 5 files changed, 47 insertions(+), 0 deletions(-)\n create mode 100644 bin/xser32.dll\n create mode 100644 src/xser32/Makefile\n create mode 100644 src/xser32/release.sh\n create mode 100644 src/xser32/xser32.c\n \n> Further, I think that my beloved Shift+Insert will no longer work with \n> your [2].\n\nProbably yes, but this is only an experiment to see whether sh.exe starts to be\nreally faster. For proper solution we'll need to patch bash to use msys's\n/dev/clipboard, or link to user32 symbols lazily.\n\n> And lastly, in [2] you claim that you cross-built msys-1.0.dll. I would \n> like to have a script doing that in msysgit.git.\n\nThis is in progress. Preliminary stuff (cross-built msys.dll no longer needs\nmingwm10.dll), is here:\n\nhttp://repo.or.cz/w/msys/kirr.git/shortlog/refs/heads/x/kirr\nhttp://repo.or.cz/w/msysgit/kirr.git/shortlog/refs/heads/ks/crossmsys\n\n\n\nSorry, I hoped to finish 2a today, but have to run...\n\n\nThanks,\nKirill\n"},{"id":"162276","messageId":"AANLkTi=qK4vL7Zq1zp590jxPb1j-dqt6D7Jesy1uAni3@mail.gmail.com","threadId":"26586","inReplyTo":"20110224110029.GE14115@elie","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2011-02-25T21:48:17Z","receivedAt":"2011-02-25T21:48:17Z","isPatch":false,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Thu, Feb 24, 2011 at 12:00, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Ævar Arnfjörð Bjarmason wrote:\n>\n>> I don't mean it that way at all, I just mean that as a comment to\n>> *this* particular patch series I don't think it's something we have to\n>> worry about.\n>\n> This is really tiring and unpleasant.  I don't want to stand in the\n> way of a translated git happening or to take on the project myself\n> so I can't just decree \"it will be like so\".\n>\n> It's your and Junio's (and lots other people's, of course) code.  But\n> that means that for me to be able to help, I need to be able to say,\n> \"here's a suggested change\" and get an \"okay\" or \"no, here's what's\n> wrong with that and how you can improve it\".\n>\n> And that just doesn't seem to be happening now.  I don't know how to\n> fix it, but I thought I should explain why I am probably so\n> frustrating to work with right now.\n\nFirst off, I really appreciate having your input and help on all this,\nreally. And I didn't mean to cause frustration.\n\nAs for whether your code looks good, I've found it to be better than\nthe stuff I've come up with.\n\nSorry about not being more clear about that, and giving \"ok\"'s etc. I\nthink the improvements you've made are great, and if you're willing to\nre-submit a better version of the series that would be even better\n(depending on the status of the current one wrt Junio etc).\n\nMy apprehensiveness about adding extra things and fixing up the series\nhas really been about one thing, and one thing only. Which is that I\ndon't often have time to spend on git.git anymore, and haven't\nsubmitted the series since October of last year.\n\nI was hoping that I could get it into a form that would be acceptable\nfor fast-tracking. I.e. I could make a tiny patch at the tip of the\nseries, prove that it was OK, then the other 50 C/Shell etc. patches\ncould get in quickly.\n\nAnyway, with the timeline Junio has in mind *that* probably won't be\npossible. I'm rapidly approaching a time where I again won't have time\nfor Git.\n\nBut just getting this in would be great, I can submit more stuff later\nwhen I have time, and it'll be less to juggle at once since there'll\nalready be something in git.git:master.\n\nAnd if someone else wants to pick it up and shepard it along that\nwould be fantastic as well.\n"},{"id":"162277","messageId":"alpine.DEB.1.00.1102252251140.15247@pacific.mpi-cbg.de","threadId":"26586","inReplyTo":"20110225192455.GA7130@tugrik.mns.mnsspb.ru","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2011-02-25T21:54:40Z","receivedAt":"2011-02-25T21:54:40Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 25 Feb 2011, Kirill Smelkov wrote:\n\n> On Fri, Feb 25, 2011 at 12:11:59PM +0100, Johannes Schindelin wrote:\n> \n> > On Fri, 25 Feb 2011, Kirill Smelkov wrote:\n> > \n> > > Johannes, can we please try my patch[1] for msys.dll not to load \n> > > user32.dll for every msys program (i.e. sh.exe too)? Combined \n> > > together with 3 clipboard functions removal (details in [2]) from \n> > > sh.exe, I bet this will result in significantly faster shell \n> > > startup, configure runs, etc...\n> > > \n> > > This days I have lack of access to windows machines, only wine, so I \n> > > desperately need someones help to at least first rebuild msys.dll.\n> > > \n> > > [1] http://repo.or.cz/w/msys/kirr.git/commitdiff/f7d7efebd35e8e5bf6d685ff4f1197941984be04\n> > > [2] http://repo.or.cz/w/msys/kirr.git/commitdiff/a97bed5d22f9c05f39776d8ea7856db4ce572dc5\n> \n> For [1] please do\n> \n> git://repo.or.cz/msysgit/kirr.git ks/no-user32-in-msysdll       # into msys\n\nToo late. I already did the work.\n\n> > Three things:\n> > \n> > [2] does not apply cleanly, so I am still desperately trying to find some \n> > time to finish it off (the patches are to msys.git, not the 'msys' branch \n> > of msysgit.git, so I had to find a quarter an hour in order to put them \n> > there in the first place, taking up all the Git time budget I wanted to \n> > allow myself for this week).\n> \n> For [2] please do\n> \n>     git pull git://repo.or.cz/msysgit/kirr.git ks/xser32.dll    # into devel\n\nAgain, too late. I already did the work.\n\n> > Further, I think that my beloved Shift+Insert will no longer work with \n> > your [2].\n> \n> Probably yes,\n\nIn my experiment after rebuilding msys-1.0.dll, it still works.\n\n> > And lastly, in [2] you claim that you cross-built msys-1.0.dll. I \n> > would like to have a script doing that in msysgit.git.\n> \n> This is in progress. Preliminary stuff (cross-built msys.dll no longer needs\n> mingwm10.dll), is here:\n> \n> http://repo.or.cz/w/msys/kirr.git/shortlog/refs/heads/x/kirr\n> http://repo.or.cz/w/msysgit/kirr.git/shortlog/refs/heads/ks/crossmsys\n\nThanks, I will try to find some time to test this next week.\n\nThe problem for now is that when I time /share/msysGit/run-tests.sh, there \nis hardly any gain from your patches:\n\nOld:\n\n\nreal    18m1.031s\nuser    6m17.861s\nsys     19m25.257s\n\nNew:\n\nreal    17m54.500s\nuser    6m12.319s\nsys     19m28.567s\n\nCiao,\nDscho\n"},{"id":"162290","messageId":"20110226051447.GF27887@elie","threadId":"26586","inReplyTo":"AANLkTi=qK4vL7Zq1zp590jxPb1j-dqt6D7Jesy1uAni3@mail.gmail.com","subject":"Re: ab/i18n (What's cooking in git.git (Feb 2011, #05; Wed, 23))","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2011-02-26T05:14:47Z","receivedAt":"2011-02-26T05:14:47Z","isPatch":false,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> First off, I really appreciate having your input and help on all this,\n> really. And I didn't mean to cause frustration.\n\nThe series seems to be un-stuck now, so frustration gone.  Sorry, I'm\nno good at this sort of thing.\n\nThanks for translated git, gettext poison, \"prove\"-able tests and\nother assorted neat toys. :)\n"},{"id":"162300","messageId":"4D68D4FA.7090500@gmail.com","threadId":"26586","inReplyTo":"7v1v2y5o3p.fsf@alter.siamese.dyndns.org","subject":"Adding Beyond Compare as a merge tool, was: Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2011-02-26T10:24:58Z","receivedAt":"2011-02-26T10:24:58Z","isPatch":false,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"On 24.02.2011 00:26, Junio C Hamano wrote:\n\n> * cp/mergetool-beyondcompare (2011-02-18) 1 commit\n>   - mergetool--lib: add support for beyond compare\n\nSorry for not responding earlier to this, but problems at my news \nprovider seem to have swallowed mails from several days, including the \noriginal post of\n\nhttp://marc.info/?l=git&m=129801656713478&w=2\n\nA while ago, I had already proposed\n\nhttp://marc.info/?l=git&m=129007741814521&w=2\n\nI'm not entirely sure why it was ignored in the end, probably I did not \nreport back to have tested it in Linux.\n\nA few things that I like better in my patch than in Chris':\n\n- Beyond Compare is added as \"bc3\" instead of \"bcompare\", which is both \nshorter and indicates that only version 3, not version 2, is supported.\n\n- Chris seems to be missing the patch to git-gui/lib/mergetool.tcl\n\n- To the best of my knownledge, the Beyond Compare executable is called \n\"BCompare\" (note the case), that means even with the merge tool named \n\"bcompare\" a translation step in git-mergetool--lib.sh should by \nrequired (as done in my patch). Chris, as you seem to have tested ion \nLinux, could you shed a light on  this?\n\n- Using dashes for the options to Beyond Compare is fine on Windows, \nhowever, I believe the order of the files is wrong, although that might \nbe a bit subjective. For a 3-way merge the syntax is\n\nBCompare.exe C:\\Left.ext C:\\Right.ext C:\\Center.ext\n\nSo the file that should go to the center panel is specified last. AFAIK, \nall other merge tools are called such that $BASE goes to the center. \nThis is why my patch specifies $BASE last.\n\nAny more opinions? Chris, in case you'd agree to prefer my patch, I'd be \nvery grateful if you could test it on Linux.\n\nFor your convenience, I've rebased onto the current master and attached \nthe patch files.\n\n-- \nSebastian Schuberth\n\n\nFrom 9016c0c0fbacba2747fc0023c853edd6a3d0da87 Mon Sep 17 00:00:00 2001\nFrom: Sebastian Schuberth <sschuberth@gmail.com>\nDate: Thu, 18 Nov 2010 10:23:51 +0100\nSubject: [PATCH 1/3] mergetool--lib: Sort tools alphabetically for easier lookup\n\n\nSigned-off-by: Sebastian Schuberth <sschuberth@gmail.com>\n---\n Documentation/git-difftool.txt  |    4 +-\n Documentation/git-mergetool.txt |    4 +-\n Documentation/merge-config.txt  |    8 +-\n git-gui/lib/mergetool.tcl       |   94 ++++++++--------\n git-mergetool--lib.sh           |  245 +++++++++++++++++++--------------------\n 5 files changed, 177 insertions(+), 178 deletions(-)\n\ndiff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt\nindex db87f1d..4c8825d 100644\n--- a/Documentation/git-difftool.txt\n+++ b/Documentation/git-difftool.txt\n@@ -31,8 +31,8 @@ OPTIONS\n --tool=<tool>::\n \tUse the diff tool specified by <tool>.\n \tValid merge tools are:\n-\tkdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff,\n-\tecmerge, diffuse, opendiff, p4merge and araxis.\n+\taraxis, diffuse, emerge, ecmerge, gvimdiff, kdiff3,\n+\tkompare, meld, opendiff, p4merge, tkdiff, vimdiff and xxdiff.\n +\n If a diff tool is not specified, 'git difftool'\n will use the configuration variable `diff.tool`.  If the\ndiff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt\nindex 1f75a84..4987245 100644\n--- a/Documentation/git-mergetool.txt\n+++ b/Documentation/git-mergetool.txt\n@@ -26,8 +26,8 @@ OPTIONS\n --tool=<tool>::\n \tUse the merge resolution program specified by <tool>.\n \tValid merge tools are:\n-\tkdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,\n-\tdiffuse, tortoisemerge, opendiff, p4merge and araxis.\n+\taraxis, diffuse, ecmerge, emerge, gvimdiff, kdiff3,\n+\tmeld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff and xxdiff.\n +\n If a merge resolution program is not specified, 'git mergetool'\n will use the configuration variable `merge.tool`.  If the\ndiff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt\nindex 1e5c22c..90587db 100644\n--- a/Documentation/merge-config.txt\n+++ b/Documentation/merge-config.txt\n@@ -33,10 +33,10 @@ merge.stat::\n \n merge.tool::\n \tControls which merge resolution program is used by\n-\tlinkgit:git-mergetool[1].  Valid built-in values are: \"kdiff3\",\n-\t\"tkdiff\", \"meld\", \"xxdiff\", \"emerge\", \"vimdiff\", \"gvimdiff\",\n-\t\"diffuse\", \"ecmerge\", \"tortoisemerge\", \"p4merge\", \"araxis\" and\n-\t\"opendiff\".  Any other value is treated is custom merge tool\n+\tlinkgit:git-mergetool[1].  Valid built-in values are: \"araxis\",\n+\t\"diffuse\", \"ecmerge\", \"emerge\", \"gvimdiff\", \"kdiff3\", \"meld\",\n+\t\"opendiff\", \"p4merge\", \"tkdiff\", \"tortoisemerge\", \"vimdiff\"\n+\tand \"xxdiff\".  Any other value is treated is custom merge tool\n \tand there must be a corresponding mergetool.<tool>.cmd option.\n \n merge.verbosity::\ndiff --git a/git-gui/lib/mergetool.tcl b/git-gui/lib/mergetool.tcl\nindex 3fe90e6..249e0cf 100644\n--- a/git-gui/lib/mergetool.tcl\n+++ b/git-gui/lib/mergetool.tcl\n@@ -175,43 +175,49 @@ proc merge_resolve_tool2 {} {\n \n \t# Build the command line\n \tswitch -- $tool {\n-\tkdiff3 {\n+\taraxis {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" --auto --L1 \"$MERGED (Base)\" \\\n-\t\t\t\t--L2 \"$MERGED (Local)\" --L3 \"$MERGED (Remote)\" -o \"$MERGED\" \"$BASE\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -wait -merge -3 -a1 \\\n+\t\t\t\t-title1:\"'$MERGED (Base)'\" -title2:\"'$MERGED (Local)'\" \\\n+\t\t\t\t-title3:\"'$MERGED (Remote)'\" \\\n+\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" --auto --L1 \"$MERGED (Local)\" \\\n-\t\t\t\t--L2 \"$MERGED (Remote)\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -wait -2 \\\n+\t\t\t\t -title1:\"'$MERGED (Local)'\" -title2:\"'$MERGED (Remote)'\" \\\n+\t\t\t\t \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n \t\t}\n \t}\n-\ttkdiff {\n+\tecmerge {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -a \"$BASE\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge3 --to=\"$MERGED\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge2 --to=\"$MERGED\"]\n \t\t}\n \t}\n-\tmeld {\n-\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"]\n+\temerge {\n+\t\tif {$base_stage ne {}} {\n+\t\t\tset cmdline [list \"$merge_tool_path\" -f emerge-files-with-ancestor-command \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$basename\"]\n+\t\t} else {\n+\t\t\tset cmdline [list \"$merge_tool_path\" -f emerge-files-command \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$basename\"]\n+\t\t}\n \t}\n \tgvimdiff {\n \t\tset cmdline [list \"$merge_tool_path\" -f \"$LOCAL\" \"$MERGED\" \"$REMOTE\"]\n \t}\n-\txxdiff {\n+\tkdiff3 {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -X --show-merged-pane \\\n-\t\t\t\t\t    -R {Accel.SaveAsMerged: \"Ctrl-S\"} \\\n-\t\t\t\t\t    -R {Accel.Search: \"Ctrl+F\"} \\\n-\t\t\t\t\t    -R {Accel.SearchForward: \"Ctrl-G\"} \\\n-\t\t\t\t\t    --merged-file \"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" --auto --L1 \"$MERGED (Base)\" \\\n+\t\t\t\t--L2 \"$MERGED (Local)\" --L3 \"$MERGED (Remote)\" -o \"$MERGED\" \"$BASE\" \"$LOCAL\" \"$REMOTE\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -X --show-merged-pane \\\n-\t\t\t\t\t    -R {Accel.SaveAsMerged: \"Ctrl-S\"} \\\n-\t\t\t\t\t    -R {Accel.Search: \"Ctrl+F\"} \\\n-\t\t\t\t\t    -R {Accel.SearchForward: \"Ctrl-G\"} \\\n-\t\t\t\t\t    --merged-file \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" --auto --L1 \"$MERGED (Local)\" \\\n+\t\t\t\t--L2 \"$MERGED (Remote)\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n \t\t}\n \t}\n+\tmeld {\n+\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"]\n+\t}\n \topendiff {\n \t\tif {$base_stage ne {}} {\n \t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"]\n@@ -219,22 +225,20 @@ proc merge_resolve_tool2 {} {\n \t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\"]\n \t\t}\n \t}\n-\tecmerge {\n-\t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge3 --to=\"$MERGED\"]\n-\t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge2 --to=\"$MERGED\"]\n-\t\t}\n+\tp4merge {\n+\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$REMOTE\" \"$LOCAL\" \"$MERGED\"]\n \t}\n-\temerge {\n+\ttkdiff {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -f emerge-files-with-ancestor-command \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$basename\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -a \"$BASE\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -f emerge-files-command \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$basename\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n \t\t}\n \t}\n+\tvimdiff {\n+\t\terror_popup [mc \"Not a GUI merge tool: '%s'\" $tool]\n+\t\treturn\n+\t}\n \twinmerge {\n \t\tif {$base_stage ne {}} {\n \t\t\t# This tool does not support 3-way merges.\n@@ -245,25 +249,21 @@ proc merge_resolve_tool2 {} {\n \t\t\t\t-dl \"Theirs File\" -dr \"Mine File\" \"$REMOTE\" \"$LOCAL\" \"$MERGED\"]\n \t\t}\n \t}\n-\taraxis {\n+\txxdiff {\n \t\tif {$base_stage ne {}} {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -wait -merge -3 -a1 \\\n-\t\t\t\t-title1:\"'$MERGED (Base)'\" -title2:\"'$MERGED (Local)'\" \\\n-\t\t\t\t-title3:\"'$MERGED (Remote)'\" \\\n-\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -X --show-merged-pane \\\n+\t\t\t\t\t    -R {Accel.SaveAsMerged: \"Ctrl-S\"} \\\n+\t\t\t\t\t    -R {Accel.Search: \"Ctrl+F\"} \\\n+\t\t\t\t\t    -R {Accel.SearchForward: \"Ctrl-G\"} \\\n+\t\t\t\t\t    --merged-file \"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"]\n \t\t} else {\n-\t\t\tset cmdline [list \"$merge_tool_path\" -wait -2 \\\n-\t\t\t\t -title1:\"'$MERGED (Local)'\" -title2:\"'$MERGED (Remote)'\" \\\n-\t\t\t\t \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n+\t\t\tset cmdline [list \"$merge_tool_path\" -X --show-merged-pane \\\n+\t\t\t\t\t    -R {Accel.SaveAsMerged: \"Ctrl-S\"} \\\n+\t\t\t\t\t    -R {Accel.Search: \"Ctrl+F\"} \\\n+\t\t\t\t\t    -R {Accel.SearchForward: \"Ctrl-G\"} \\\n+\t\t\t\t\t    --merged-file \"$MERGED\" \"$LOCAL\" \"$REMOTE\"]\n \t\t}\n \t}\n-\tp4merge {\n-\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$REMOTE\" \"$LOCAL\" \"$MERGED\"]\n-\t}\n-\tvimdiff {\n-\t\terror_popup [mc \"Not a GUI merge tool: '%s'\" $tool]\n-\t\treturn\n-\t}\n \tdefault {\n \t\terror_popup [mc \"Unsupported merge tool '%s'\" $tool]\n \t\treturn\ndiff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh\nindex 77d4aee..9fb82e5 100644\n--- a/git-mergetool--lib.sh\n+++ b/git-mergetool--lib.sh\n@@ -10,17 +10,17 @@ merge_mode() {\n \n translate_merge_tool_path () {\n \tcase \"$1\" in\n-\tvimdiff|vimdiff2)\n-\t\techo vim\n-\t\t;;\n-\tgvimdiff|gvimdiff2)\n-\t\techo gvim\n+\taraxis)\n+\t\techo compare\n \t\t;;\n \temerge)\n \t\techo emacs\n \t\t;;\n-\taraxis)\n-\t\techo compare\n+\tgvimdiff|gvimdiff2)\n+\t\techo gvim\n+\t\t;;\n+\tvimdiff|vimdiff2)\n+\t\techo vim\n \t\t;;\n \t*)\n \t\techo \"$1\"\n@@ -46,17 +46,16 @@ check_unchanged () {\n \n valid_tool () {\n \tcase \"$1\" in\n-\tkdiff3 | tkdiff | xxdiff | meld | opendiff | \\\n-\tvimdiff | gvimdiff | vimdiff2 | gvimdiff2 | \\\n-\temerge | ecmerge | diffuse | araxis | p4merge)\n+\taraxis | diffuse | ecmerge | emerge | gvimdiff | gvimdiff2 | \\\n+\tkdiff3 | meld | opendiff | p4merge | tkdiff | vimdiff | vimdiff2 | xxdiff)\n \t\t;; # happy\n-\ttortoisemerge)\n-\t\tif ! merge_mode; then\n+\tkompare)\n+\t\tif ! diff_mode; then\n \t\t\treturn 1\n \t\tfi\n \t\t;;\n-\tkompare)\n-\t\tif ! diff_mode; then\n+\ttortoisemerge)\n+\t\tif ! merge_mode; then\n \t\t\treturn 1\n \t\tfi\n \t\t;;\n@@ -89,69 +88,22 @@ run_merge_tool () {\n \tstatus=0\n \n \tcase \"$1\" in\n-\tkdiff3)\n-\t\tif merge_mode; then\n-\t\t\tif $base_present; then\n-\t\t\t\t(\"$merge_tool_path\" --auto \\\n-\t\t\t\t\t--L1 \"$MERGED (Base)\" \\\n-\t\t\t\t\t--L2 \"$MERGED (Local)\" \\\n-\t\t\t\t\t--L3 \"$MERGED (Remote)\" \\\n-\t\t\t\t\t-o \"$MERGED\" \\\n-\t\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t> /dev/null 2>&1)\n-\t\t\telse\n-\t\t\t\t(\"$merge_tool_path\" --auto \\\n-\t\t\t\t\t--L1 \"$MERGED (Local)\" \\\n-\t\t\t\t\t--L2 \"$MERGED (Remote)\" \\\n-\t\t\t\t\t-o \"$MERGED\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t> /dev/null 2>&1)\n-\t\t\tfi\n-\t\t\tstatus=$?\n-\t\telse\n-\t\t\t(\"$merge_tool_path\" --auto \\\n-\t\t\t\t--L1 \"$MERGED (A)\" \\\n-\t\t\t\t--L2 \"$MERGED (B)\" \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t> /dev/null 2>&1)\n-\t\tfi\n-\t\t;;\n-\tkompare)\n-\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n-\t\t;;\n-\ttkdiff)\n-\t\tif merge_mode; then\n-\t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" -a \"$BASE\" \\\n-\t\t\t\t\t-o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"\n-\t\t\telse\n-\t\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t\t-o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"\n-\t\t\tfi\n-\t\t\tstatus=$?\n-\t\telse\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n-\t\tfi\n-\t\t;;\n-\tp4merge)\n+\taraxis)\n \t\tif merge_mode; then\n-\t\t    touch \"$BACKUP\"\n+\t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"\n+\t\t\t\t\"$merge_tool_path\" -wait -merge -3 -a1 \\\n+\t\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" \\\n+\t\t\t\t\t>/dev/null 2>&1\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"\n+\t\t\t\t\"$merge_tool_path\" -wait -2 \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$MERGED\" \\\n+\t\t\t\t\t>/dev/null 2>&1\n \t\t\tfi\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n-\t\tfi\n-\t\t;;\n-\tmeld)\n-\t\tif merge_mode; then\n-\t\t\ttouch \"$BACKUP\"\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"\n-\t\t\tcheck_unchanged\n-\t\telse\n-\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" -wait -2 \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t>/dev/null 2>&1\n \t\tfi\n \t\t;;\n \tdiffuse)\n@@ -170,23 +122,58 @@ run_merge_tool () {\n \t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" | cat\n \t\tfi\n \t\t;;\n-\tvimdiff|gvimdiff)\n+\tecmerge)\n \t\tif merge_mode; then\n \t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" -f -d -c \"wincmd J\" \\\n-\t\t\t\t\t\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"\n+\t\t\t\t\"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t\t--default --mode=merge3 --to=\"$MERGED\"\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" -f -d -c \"wincmd l\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$MERGED\" \"$REMOTE\"\n+\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t\t--default --mode=merge2 --to=\"$MERGED\"\n \t\t\tfi\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" -f -d -c \"wincmd l\" \\\n+\t\t\t\"$merge_tool_path\" --default --mode=diff2 \\\n \t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n-\tvimdiff2|gvimdiff2)\n+\temerge)\n+\t\tif merge_mode; then\n+\t\t\tif $base_present; then\n+\t\t\t\t\"$merge_tool_path\" \\\n+\t\t\t\t\t-f emerge-files-with-ancestor-command \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$BASE\" \\\n+\t\t\t\t\t\"$(basename \"$MERGED\")\"\n+\t\t\telse\n+\t\t\t\t\"$merge_tool_path\" \\\n+\t\t\t\t\t-f emerge-files-command \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t\t\"$(basename \"$MERGED\")\"\n+\t\t\tfi\n+\t\t\tstatus=$?\n+\t\telse\n+\t\t\t\"$merge_tool_path\" -f emerge-files-command \\\n+\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\tfi\n+\t\t;;\n+\tgvimdiff|vimdiff)\n+\t\tif merge_mode; then\n+\t\t\ttouch \"$BACKUP\"\n+\t\t\tif $base_present; then\n+\t\t\t\t\"$merge_tool_path\" -f -d -c \"wincmd J\" \\\n+\t\t\t\t\t\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"\n+\t\t\telse\n+\t\t\t\t\"$merge_tool_path\" -f -d -c \"wincmd l\" \\\n+\t\t\t\t\t\"$LOCAL\" \"$MERGED\" \"$REMOTE\"\n+\t\t\tfi\n+\t\t\tcheck_unchanged\n+\t\telse\n+\t\t\t\"$merge_tool_path\" -f -d -c \"wincmd l\" \\\n+\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\tfi\n+\t\t;;\n+\tgvimdiff2|vimdiff2)\n \t\tif merge_mode; then\n \t\t\ttouch \"$BACKUP\"\n \t\t\t\"$merge_tool_path\" -f -d -c \"wincmd l\" \\\n@@ -197,30 +184,42 @@ run_merge_tool () {\n \t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n-\txxdiff)\n+\tkdiff3)\n \t\tif merge_mode; then\n-\t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" -X --show-merged-pane \\\n-\t\t\t\t\t-R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n-\t\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n-\t\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n-\t\t\t\t\t--merged-file \"$MERGED\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$BASE\" \"$REMOTE\"\n+\t\t\t\t(\"$merge_tool_path\" --auto \\\n+\t\t\t\t\t--L1 \"$MERGED (Base)\" \\\n+\t\t\t\t\t--L2 \"$MERGED (Local)\" \\\n+\t\t\t\t\t--L3 \"$MERGED (Remote)\" \\\n+\t\t\t\t\t-o \"$MERGED\" \\\n+\t\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t> /dev/null 2>&1)\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" -X $extra \\\n-\t\t\t\t\t-R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n-\t\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n-\t\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n-\t\t\t\t\t--merged-file \"$MERGED\" \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\t\t\t(\"$merge_tool_path\" --auto \\\n+\t\t\t\t\t--L1 \"$MERGED (Local)\" \\\n+\t\t\t\t\t--L2 \"$MERGED (Remote)\" \\\n+\t\t\t\t\t-o \"$MERGED\" \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t> /dev/null 2>&1)\n \t\t\tfi\n+\t\t\tstatus=$?\n+\t\telse\n+\t\t\t(\"$merge_tool_path\" --auto \\\n+\t\t\t\t--L1 \"$MERGED (A)\" \\\n+\t\t\t\t--L2 \"$MERGED (B)\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t> /dev/null 2>&1)\n+\t\tfi\n+\t\t;;\n+\tkompare)\n+\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n+\t\t;;\n+\tmeld)\n+\t\tif merge_mode; then\n+\t\t\ttouch \"$BACKUP\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n-\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n-\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n \topendiff)\n@@ -239,39 +238,31 @@ run_merge_tool () {\n \t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" | cat\n \t\tfi\n \t\t;;\n-\tecmerge)\n+\tp4merge)\n \t\tif merge_mode; then\n-\t\t\ttouch \"$BACKUP\"\n+\t\t    touch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t\t--default --mode=merge3 --to=\"$MERGED\"\n+\t\t\t\t\"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t\t--default --mode=merge2 --to=\"$MERGED\"\n+\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"\n \t\t\tfi\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" --default --mode=diff2 \\\n-\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n-\temerge)\n+\ttkdiff)\n \t\tif merge_mode; then\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t\t-f emerge-files-with-ancestor-command \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$BASE\" \\\n-\t\t\t\t\t\"$(basename \"$MERGED\")\"\n+\t\t\t\t\"$merge_tool_path\" -a \"$BASE\" \\\n+\t\t\t\t\t-o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"\n \t\t\telse\n \t\t\t\t\"$merge_tool_path\" \\\n-\t\t\t\t\t-f emerge-files-command \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t\t\"$(basename \"$MERGED\")\"\n+\t\t\t\t\t-o \"$MERGED\" \"$LOCAL\" \"$REMOTE\"\n \t\t\tfi\n \t\t\tstatus=$?\n \t\telse\n-\t\t\t\"$merge_tool_path\" -f emerge-files-command \\\n-\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n \ttortoisemerge)\n@@ -286,22 +277,30 @@ run_merge_tool () {\n \t\t\tstatus=1\n \t\tfi\n \t\t;;\n-\taraxis)\n+\txxdiff)\n \t\tif merge_mode; then\n \t\t\ttouch \"$BACKUP\"\n \t\t\tif $base_present; then\n-\t\t\t\t\"$merge_tool_path\" -wait -merge -3 -a1 \\\n-\t\t\t\t\t\"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" \\\n-\t\t\t\t\t>/dev/null 2>&1\n+\t\t\t\t\"$merge_tool_path\" -X --show-merged-pane \\\n+\t\t\t\t\t-R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n+\t\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n+\t\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n+\t\t\t\t\t--merged-file \"$MERGED\" \\\n+\t\t\t\t\t\"$LOCAL\" \"$BASE\" \"$REMOTE\"\n \t\t\telse\n-\t\t\t\t\"$merge_tool_path\" -wait -2 \\\n-\t\t\t\t\t\"$LOCAL\" \"$REMOTE\" \"$MERGED\" \\\n-\t\t\t\t\t>/dev/null 2>&1\n+\t\t\t\t\"$merge_tool_path\" -X $extra \\\n+\t\t\t\t\t-R 'Accel.SaveAsMerged: \"Ctrl-S\"' \\\n+\t\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n+\t\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n+\t\t\t\t\t--merged-file \"$MERGED\" \\\n+\t\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\t\tfi\n \t\t\tcheck_unchanged\n \t\telse\n-\t\t\t\"$merge_tool_path\" -wait -2 \"$LOCAL\" \"$REMOTE\" \\\n-\t\t\t\t>/dev/null 2>&1\n+\t\t\t\"$merge_tool_path\" \\\n+\t\t\t\t-R 'Accel.Search: \"Ctrl+F\"' \\\n+\t\t\t\t-R 'Accel.SearchForward: \"Ctrl-G\"' \\\n+\t\t\t\t\"$LOCAL\" \"$REMOTE\"\n \t\tfi\n \t\t;;\n \t*)\n-- \n1.7.3.2.msysgit.6.dirty\n\n\n\nFrom ef1fa03180c78ac2f7119b0b79fddaa37195a48d Mon Sep 17 00:00:00 2001\nFrom: Sebastian Schuberth <sschuberth@gmail.com>\nDate: Thu, 18 Nov 2010 11:05:01 +0100\nSubject: [PATCH 2/3] mergetool--lib: Add Beyond Compare 3 as a tool\n\n\nSigned-off-by: Sebastian Schuberth <sschuberth@gmail.com>\n---\n Documentation/git-difftool.txt         |    2 +-\n Documentation/git-mergetool.txt        |    2 +-\n Documentation/merge-config.txt         |    2 +-\n contrib/completion/git-completion.bash |    2 +-\n git-gui/lib/mergetool.tcl              |    7 +++++++\n git-mergetool--lib.sh                  |   22 ++++++++++++++++++++--\n 6 files changed, 31 insertions(+), 6 deletions(-)\n\ndiff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt\nindex 4c8825d..f087eff 100644\n--- a/Documentation/git-difftool.txt\n+++ b/Documentation/git-difftool.txt\n@@ -31,7 +31,7 @@ OPTIONS\n --tool=<tool>::\n \tUse the diff tool specified by <tool>.\n \tValid merge tools are:\n-\taraxis, diffuse, emerge, ecmerge, gvimdiff, kdiff3,\n+\taraxis, bc3, diffuse, emerge, ecmerge, gvimdiff, kdiff3,\n \tkompare, meld, opendiff, p4merge, tkdiff, vimdiff and xxdiff.\n +\n If a diff tool is not specified, 'git difftool'\ndiff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt\nindex 4987245..740b3f1 100644\n--- a/Documentation/git-mergetool.txt\n+++ b/Documentation/git-mergetool.txt\n@@ -26,7 +26,7 @@ OPTIONS\n --tool=<tool>::\n \tUse the merge resolution program specified by <tool>.\n \tValid merge tools are:\n-\taraxis, diffuse, ecmerge, emerge, gvimdiff, kdiff3,\n+\taraxis, bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3,\n \tmeld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff and xxdiff.\n +\n If a merge resolution program is not specified, 'git mergetool'\ndiff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt\nindex 90587db..33bf74c 100644\n--- a/Documentation/merge-config.txt\n+++ b/Documentation/merge-config.txt\n@@ -34,7 +34,7 @@ merge.stat::\n merge.tool::\n \tControls which merge resolution program is used by\n \tlinkgit:git-mergetool[1].  Valid built-in values are: \"araxis\",\n-\t\"diffuse\", \"ecmerge\", \"emerge\", \"gvimdiff\", \"kdiff3\", \"meld\",\n+\t\"bc3\", \"diffuse\", \"ecmerge\", \"emerge\", \"gvimdiff\", \"kdiff3\", \"meld\",\n \t\"opendiff\", \"p4merge\", \"tkdiff\", \"tortoisemerge\", \"vimdiff\"\n \tand \"xxdiff\".  Any other value is treated is custom merge tool\n \tand there must be a corresponding mergetool.<tool>.cmd option.\ndiff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash\nindex 893b771..058c2a9 100755\n--- a/contrib/completion/git-completion.bash\n+++ b/contrib/completion/git-completion.bash\n@@ -1358,7 +1358,7 @@ _git_diff ()\n }\n \n __git_mergetools_common=\"diffuse ecmerge emerge kdiff3 meld opendiff\n-\t\t\ttkdiff vimdiff gvimdiff xxdiff araxis p4merge\n+\t\t\ttkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3\n \"\n \n _git_difftool ()\ndiff --git a/git-gui/lib/mergetool.tcl b/git-gui/lib/mergetool.tcl\nindex 249e0cf..3c8e73b 100644\n--- a/git-gui/lib/mergetool.tcl\n+++ b/git-gui/lib/mergetool.tcl\n@@ -187,6 +187,13 @@ proc merge_resolve_tool2 {} {\n \t\t\t\t \"$LOCAL\" \"$REMOTE\" \"$MERGED\"]\n \t\t}\n \t}\n+\tbc3 {\n+\t\tif {$base_stage ne {}} {\n+\t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" -mergeoutput=\"$MERGED\"]\n+\t\t} else {\n+\t\t\tset cmdline [list \"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" -mergeoutput=\"$MERGED\"]\n+\t\t}\n+\t}\n \tecmerge {\n \t\tif {$base_stage ne {}} {\n \t\t\tset cmdline [list \"$merge_tool_path\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" --default --mode=merge3 --to=\"$MERGED\"]\ndiff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh\nindex 9fb82e5..3ac6231 100644\n--- a/git-mergetool--lib.sh\n+++ b/git-mergetool--lib.sh\n@@ -13,6 +13,9 @@ translate_merge_tool_path () {\n \taraxis)\n \t\techo compare\n \t\t;;\n+\tbc3)\n+\t\techo BCompare\n+\t\t;;\n \temerge)\n \t\techo emacs\n \t\t;;\n@@ -46,7 +49,7 @@ check_unchanged () {\n \n valid_tool () {\n \tcase \"$1\" in\n-\taraxis | diffuse | ecmerge | emerge | gvimdiff | gvimdiff2 | \\\n+\taraxis | bc3 | diffuse | ecmerge | emerge | gvimdiff | gvimdiff2 | \\\n \tkdiff3 | meld | opendiff | p4merge | tkdiff | vimdiff | vimdiff2 | xxdiff)\n \t\t;; # happy\n \tkompare)\n@@ -106,6 +109,21 @@ run_merge_tool () {\n \t\t\t\t>/dev/null 2>&1\n \t\tfi\n \t\t;;\n+\tbc3)\n+\t\tif merge_mode; then\n+\t\t\ttouch \"$BACKUP\"\n+\t\t\tif $base_present; then\n+\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \\\n+\t\t\t\t\t-mergeoutput=\"$MERGED\"\n+\t\t\telse\n+\t\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\" \\\n+\t\t\t\t\t-mergeoutput=\"$MERGED\"\n+\t\t\tfi\n+\t\t\tcheck_unchanged\n+\t\telse\n+\t\t\t\"$merge_tool_path\" \"$LOCAL\" \"$REMOTE\"\n+\t\tfi\n+\t\t;;\n \tdiffuse)\n \t\tif merge_mode; then\n \t\t\ttouch \"$BACKUP\"\n@@ -342,7 +360,7 @@ guess_merge_tool () {\n \t\telse\n \t\t\ttools=\"opendiff kdiff3 tkdiff xxdiff meld $tools\"\n \t\tfi\n-\t\ttools=\"$tools gvimdiff diffuse ecmerge p4merge araxis\"\n+\t\ttools=\"$tools gvimdiff diffuse ecmerge p4merge araxis bc3\"\n \tfi\n \tcase \"${VISUAL:-$EDITOR}\" in\n \t*vim*)\n-- \n1.7.3.2.msysgit.6.dirty\n\n\n\nFrom 8e871dab73f3759496ce5f0b87fcfca689b0c4ae Mon Sep 17 00:00:00 2001\nFrom: Sebastian Schuberth <sschuberth@gmail.com>\nDate: Thu, 18 Nov 2010 11:06:13 +0100\nSubject: [PATCH 3/3] mergetool--lib: Add the proper executable name for ECMerge\n\n\nSigned-off-by: Sebastian Schuberth <sschuberth@gmail.com>\n---\n git-mergetool--lib.sh |    3 +++\n 1 files changed, 3 insertions(+), 0 deletions(-)\n\ndiff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh\nindex 3ac6231..95da00b 100644\n--- a/git-mergetool--lib.sh\n+++ b/git-mergetool--lib.sh\n@@ -16,6 +16,9 @@ translate_merge_tool_path () {\n \tbc3)\n \t\techo BCompare\n \t\t;;\n+\tecmerge)\n+\t\techo guimerge\n+\t\t;;\n \temerge)\n \t\techo emacs\n \t\t;;\n-- \n1.7.3.2.msysgit.6.dirty\n\n"},{"id":"162302","messageId":"7voc5z6q6r.fsf@alter.siamese.dyndns.org","threadId":"26586","inReplyTo":"4D68D4FA.7090500@gmail.com","subject":"Re: Adding Beyond Compare as a merge tool, was: Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-02-26T10:33:16Z","receivedAt":"2011-02-26T10:33:16Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Sebastian Schuberth <sschuberth@gmail.com> writes:\n\n> For your convenience, I've rebased onto the current master and\n> attached the patch files.\n\nCould we be even more greedy (and lazy) and ask you to send them as a\nthree-patch series, one-patch-per-message and plain-text, as well, so that\nthese can be discussed on-list just like any other patches?\n"},{"id":"162303","messageId":"AANLkTikP2KsjTijvFbyGZZ28BHV8T3NF0BEcatK2EpCL@mail.gmail.com","threadId":"26586","inReplyTo":"7voc5z6q6r.fsf@alter.siamese.dyndns.org","subject":"Re: Adding Beyond Compare as a merge tool, was: Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2011-02-26T10:48:41Z","receivedAt":"2011-02-26T10:48:41Z","isPatch":false,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"On Sat, Feb 26, 2011 at 11:33, Junio C Hamano <gitster@pobox.com> wrote:\n\n>> For your convenience, I've rebased onto the current master and\n>> attached the patch files.\n>\n> Could we be even more greedy (and lazy) and ask you to send them as a\n> three-patch series, one-patch-per-message and plain-text, as well, so that\n> these can be discussed on-list just like any other patches?\n\nWill do ...\n\n-- \nSebastian Schuberth\n"},{"id":"162308","messageId":"20110226110740.GA3096@tugrik.mns.mnsspb.ru","threadId":"26586","inReplyTo":"alpine.DEB.1.00.1102252251140.15247@pacific.mpi-cbg.de","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Kirill Smelkov","fromEmail":"kirr@mns.spb.ru","sentAt":"2011-02-26T11:07:40Z","receivedAt":"2011-02-26T11:07:40Z","isPatch":false,"sender":{"key":"kirr@navytux.spb.ru","avatar":"https://gravatar.com/avatar/cf3445fdad1849941e17ab25bf1ee7c5ea1be2deb444be25ff5f36b0e50a985f?d=mp&s=160"},"body":"Hi,\n\nOn Fri, Feb 25, 2011 at 10:54:40PM +0100, Johannes Schindelin wrote:\n> Hi,\n> \n> On Fri, 25 Feb 2011, Kirill Smelkov wrote:\n> \n> > On Fri, Feb 25, 2011 at 12:11:59PM +0100, Johannes Schindelin wrote:\n> > \n> > > On Fri, 25 Feb 2011, Kirill Smelkov wrote:\n> > > \n> > > > Johannes, can we please try my patch[1] for msys.dll not to load \n> > > > user32.dll for every msys program (i.e. sh.exe too)? Combined \n> > > > together with 3 clipboard functions removal (details in [2]) from \n> > > > sh.exe, I bet this will result in significantly faster shell \n> > > > startup, configure runs, etc...\n> > > > \n> > > > This days I have lack of access to windows machines, only wine, so I \n> > > > desperately need someones help to at least first rebuild msys.dll.\n> > > > \n> > > > [1] http://repo.or.cz/w/msys/kirr.git/commitdiff/f7d7efebd35e8e5bf6d685ff4f1197941984be04\n> > > > [2] http://repo.or.cz/w/msys/kirr.git/commitdiff/a97bed5d22f9c05f39776d8ea7856db4ce572dc5\n> > \n> > For [1] please do\n> > \n> > git://repo.or.cz/msysgit/kirr.git ks/no-user32-in-msysdll       # into msys\n> \n> Too late. I already did the work.\n\nSorry for the confision. This one is ok to stay the way as you did it.\n\n> \n> > > Three things:\n> > > \n> > > [2] does not apply cleanly, so I am still desperately trying to find some \n> > > time to finish it off (the patches are to msys.git, not the 'msys' branch \n> > > of msysgit.git, so I had to find a quarter an hour in order to put them \n> > > there in the first place, taking up all the Git time budget I wanted to \n> > > allow myself for this week).\n> > \n> > For [2] please do\n> > \n> >     git pull git://repo.or.cz/msysgit/kirr.git ks/xser32.dll    # into devel\n> \n> Again, too late. I already did the work.\n\nSorry again, but as done in my ks/xser32.dll this is not tied to msys,\nso maybe better please pull my branch into devel instead?\n\n\n> > > Further, I think that my beloved Shift+Insert will no longer work with \n> > > your [2].\n> > \n> > Probably yes,\n> \n> In my experiment after rebuilding msys-1.0.dll, it still works.\n\nxser32.dll has nothing to do with msys - it's just a fake stub for\nsh.exe. Before testing, have you \"patched\" sh.exe the way it is done in\nmy ks/xser32.dll\n(http://repo.or.cz/w/msysgit/kirr.git/commit/9d952c74a52f577b2d16d4e4a489541a8fa7fbbd)\n\n?\n\nIf not, I'm not surprised it still works :)\n\n> > > And lastly, in [2] you claim that you cross-built msys-1.0.dll. I \n> > > would like to have a script doing that in msysgit.git.\n> > \n> > This is in progress. Preliminary stuff (cross-built msys.dll no longer needs\n> > mingwm10.dll), is here:\n> > \n> > http://repo.or.cz/w/msys/kirr.git/shortlog/refs/heads/x/kirr\n> > http://repo.or.cz/w/msysgit/kirr.git/shortlog/refs/heads/ks/crossmsys\n> \n> Thanks, I will try to find some time to test this next week.\n\nPlease don't - it does not build out of the box from msysgit yet. I just\nwanted to show it is not staying stale. When it is finished, I'll let\nyou know.\n\n> The problem for now is that when I time /share/msysGit/run-tests.sh, there \n> is hardly any gain from your patches:\n> \n> Old:\n> \n> \n> real    18m1.031s\n> user    6m17.861s\n> sys     19m25.257s\n> \n> New:\n> \n> real    17m54.500s\n> user    6m12.319s\n> sys     19m28.567s\n\nDid you patch sh.exe to link to xser32.dll instead of user32.dll?\n\nThis is important because even with rebuilt msys.dll, original sh.exe\nstill links to user32.dll and this hides all the effort put into\nstripping user32.dll from msys.dll.\n\nAlso I can't say for sure (hope yet) how sh-intensitive git tests are,\nbut at least running configure for say gettext or whatever should be\nvisibly faster, at least on wine.\n\n> \n> Ciao,\n> Dscho\n\n\nThanks,\nKirill\n"},{"id":"162320","messageId":"20110226190741.GA24914@tugrik.mns.mnsspb.ru","threadId":"26586","inReplyTo":"20110226110740.GA3096@tugrik.mns.mnsspb.ru","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Kirill Smelkov","fromEmail":"kirr@mns.spb.ru","sentAt":"2011-02-26T19:07:41Z","receivedAt":"2011-02-26T19:07:41Z","isPatch":false,"sender":{"key":"kirr@navytux.spb.ru","avatar":"https://gravatar.com/avatar/cf3445fdad1849941e17ab25bf1ee7c5ea1be2deb444be25ff5f36b0e50a985f?d=mp&s=160"},"body":"On Sat, Feb 26, 2011 at 02:07:40PM +0300, Kirill Smelkov wrote:\n> Hi,\n> \n> On Fri, Feb 25, 2011 at 10:54:40PM +0100, Johannes Schindelin wrote:\n> > > > And lastly, in [2] you claim that you cross-built msys-1.0.dll. I \n> > > > would like to have a script doing that in msysgit.git.\n> > > \n> > > This is in progress. Preliminary stuff (cross-built msys.dll no longer needs\n> > > mingwm10.dll), is here:\n> > > \n> > > http://repo.or.cz/w/msys/kirr.git/shortlog/refs/heads/x/kirr\n> > > http://repo.or.cz/w/msysgit/kirr.git/shortlog/refs/heads/ks/crossmsys\n> > \n> > Thanks, I will try to find some time to test this next week.\n> \n> Please don't - it does not build out of the box from msysgit yet. I just\n> wanted to show it is not staying stale. When it is finished, I'll let\n> you know.\n\nDone. Please do\n\n    git pull git://repo.or.cz/msysgit/kirr.git ks/crossmsys     # into msys\n\n\nto receive the following updates:\n\nKirill Smelkov (3):\n      msys: My patches to fix cross-compilation of msys.dll\n      src/rt/release.sh: Move under-msys specific code into it's own function\n      src/rt/release.sh: Teach it to cross-compile msys.dll on linux\n\n\nThanks beforehand,\nKirill\n\n\n[ Diffstat and cumulative patch also follow: ]\n\n\n .../0012-newlib-Fix-build-in-ctype_.c.patch        |   43 +++++\n ...p-cygwin-wsock_started-should-be-extern-C.patch |   33 ++++\n ...nsup-cygwin-reent_data-should-be-extern-C.patch |   33 ++++\n ...in-_sys_errlist-and-_sys_nerr-should-have.patch |   42 +++++\n ...in-Don-t-use-non-lvalue-assignment-in-cyg.patch |   36 ++++\n ...in-Don-t-use-non-lvalue-assgnment-in-dcrt.patch |   47 +++++\n ...cygwin-struct-LUID-has-no-member-QuadPart.patch |   39 +++++\n ...in-Fix-asm-constraint-for-_impure_ptr-err.patch |   38 ++++\n ...in-Add-volatile-qualifier-to-ilock-in-win.patch |   70 ++++++++\n ...in-call_signal_handler_now-alias-keeping-.patch |   48 +++++\n ...in-std_dll_init-and-wsock_init-should-not.patch |   60 +++++++\n ...-cygwin-Build-with-fno-threadsafe-statics.patch |   45 +++++\n ...24-winsup-cygwin-Avoid-libstdc-dependency.patch |  103 +++++++++++\n ...in-Strip-new-msys-1.0.dll-when-cross-comp.patch |   94 ++++++++++\n ...in-cygrun.exe-build-depends-on-libmsys-1..patch |   32 ++++\n ...in-cyrun.exe-should-be-built-with-nostdli.patch |   53 ++++++\n src/rt/release.sh                                  |  180 +++++++++++++++++---\n 17 files changed, 974 insertions(+), 22 deletions(-)\n create mode 100644 src/rt/patches/0012-newlib-Fix-build-in-ctype_.c.patch\n create mode 100644 src/rt/patches/0013-winsup-cygwin-wsock_started-should-be-extern-C.patch\n create mode 100644 src/rt/patches/0014-winsup-cygwin-reent_data-should-be-extern-C.patch\n create mode 100644 src/rt/patches/0015-winsup-cygwin-_sys_errlist-and-_sys_nerr-should-have.patch\n create mode 100644 src/rt/patches/0016-winsup-cygwin-Don-t-use-non-lvalue-assignment-in-cyg.patch\n create mode 100644 src/rt/patches/0017-winsup-cygwin-Don-t-use-non-lvalue-assgnment-in-dcrt.patch\n create mode 100644 src/rt/patches/0018-winsup-cygwin-struct-LUID-has-no-member-QuadPart.patch\n create mode 100644 src/rt/patches/0019-winsup-cygwin-Fix-asm-constraint-for-_impure_ptr-err.patch\n create mode 100644 src/rt/patches/0020-winsup-cygwin-Add-volatile-qualifier-to-ilock-in-win.patch\n create mode 100644 src/rt/patches/0021-winsup-cygwin-call_signal_handler_now-alias-keeping-.patch\n create mode 100644 src/rt/patches/0022-winsup-cygwin-std_dll_init-and-wsock_init-should-not.patch\n create mode 100644 src/rt/patches/0023-winsup-cygwin-Build-with-fno-threadsafe-statics.patch\n create mode 100644 src/rt/patches/0024-winsup-cygwin-Avoid-libstdc-dependency.patch\n create mode 100644 src/rt/patches/0025-winsup-cygwin-Strip-new-msys-1.0.dll-when-cross-comp.patch\n create mode 100644 src/rt/patches/0026-winsup-cygwin-cygrun.exe-build-depends-on-libmsys-1..patch\n create mode 100644 src/rt/patches/0027-winsup-cygwin-cyrun.exe-should-be-built-with-nostdli.patch\n\n\n\ndiff --git a/src/rt/patches/0012-newlib-Fix-build-in-ctype_.c.patch b/src/rt/patches/0012-newlib-Fix-build-in-ctype_.c.patch\nnew file mode 100644\nindex 0000000..77fb1e0\n--- /dev/null\n+++ b/src/rt/patches/0012-newlib-Fix-build-in-ctype_.c.patch\n@@ -0,0 +1,43 @@\n+From 39dade0de1e56cb226a77cc3d9ab67c529895db6 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@landau.phys.spbu.ru>\n+Date: Sun, 13 Feb 2011 00:53:32 +0300\n+Subject: [PATCH] newlib: Fix build in ctype_.c\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+    objs/../libc/ctype/ctype_.c:88: error: ‘_ctype_’ aliased to undefined symbol ‘_ctype_b+127’\n+\n+gcc4 refuses to take expression as alias target:\n+\n+    http://www.mail-archive.com/gcc%40gcc.gnu.org/msg01613.html\n+\n+So've cherry-hand-picked related patch by Cygwin's Corinna Vinschen\n+<vinschen@redhat.com> from here:\n+\n+    http://cygwin.com/ml/newlib/2005/msg00189.html\n+\n+Signed-off-by: Kirill Smelkov <kirr@landau.phys.spbu.ru>\n+---\n+ msys/rt/src/newlib/libc/ctype/ctype_.c |    5 ++++-\n+ 1 files changed, 4 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/newlib/libc/ctype/ctype_.c b/msys/rt/src/newlib/libc/ctype/ctype_.c\n+index 54f92d9..863ec60 100644\n+--- a/msys/rt/src/newlib/libc/ctype/ctype_.c\n++++ b/msys/rt/src/newlib/libc/ctype/ctype_.c\n+@@ -85,7 +85,10 @@ static _CONST char _ctype_b[128 + 256] = {\n+ };\n+ \n+ #if defined(__CYGWIN__) || defined(__MSYS__)\n+-extern _CONST char __declspec(dllexport) _ctype_[1 + 256] __attribute__ ((alias (\"_ctype_b+127\")));\n++__asm__ (\n++\t\".data \\n\\t\"\n++\t\".globl  __ctype_ \\n\\t\"\n++\t\".set    __ctype_,__ctype_b+127\");\n+ _CONST char __declspec(dllexport) *__ctype_ptr = _ctype_b + 128;\n+ #else\n+ extern _CONST char _ctype_[1 + 256] __attribute__ ((alias (\"_ctype_b+127\")));\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0013-winsup-cygwin-wsock_started-should-be-extern-C.patch b/src/rt/patches/0013-winsup-cygwin-wsock_started-should-be-extern-C.patch\nnew file mode 100644\nindex 0000000..a7b3870\n--- /dev/null\n+++ b/src/rt/patches/0013-winsup-cygwin-wsock_started-should-be-extern-C.patch\n@@ -0,0 +1,33 @@\n+From 061bbbde0f631181579c12c6fb7f7f68e7118fdc Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 18:16:30 +0300\n+Subject: [PATCH] winsup/cygwin: wsock_started should be extern \"C\"\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... autoload.cc\n+    .../winsup.h:240: error: previous declaration of ‘bool wsock_started’ with ‘C++’ linkage\n+    .../autoload.cc:254: error: conflicts with new declaration with ‘C’ linkage\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/winsup.h |    2 +-\n+ 1 files changed, 1 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/winsup.h b/msys/rt/src/winsup/cygwin/winsup.h\n+index 162c586..ecc5f54 100644\n+--- a/msys/rt/src/winsup/cygwin/winsup.h\n++++ b/msys/rt/src/winsup/cygwin/winsup.h\n+@@ -237,7 +237,7 @@ ssize_t check_iovec_for_write (const struct iovec *, int) __attribute__ ((regpar\n+ #define set_winsock_errno() __set_winsock_errno (__FUNCTION__, __LINE__)\n+ void __set_winsock_errno (const char *fn, int ln) __attribute__ ((regparm(2)));\n+ \n+-extern bool wsock_started;\n++extern \"C\" bool wsock_started;\n+ \n+ /* Printf type functions */\n+ extern \"C\" void __api_fatal (const char *, ...) __attribute__ ((noreturn));\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0014-winsup-cygwin-reent_data-should-be-extern-C.patch b/src/rt/patches/0014-winsup-cygwin-reent_data-should-be-extern-C.patch\nnew file mode 100644\nindex 0000000..1213e59\n--- /dev/null\n+++ b/src/rt/patches/0014-winsup-cygwin-reent_data-should-be-extern-C.patch\n@@ -0,0 +1,33 @@\n+From 6d8b0795ed154d975f89e9f5f8e27787af4bfcdd Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 18:19:30 +0300\n+Subject: [PATCH] winsup/cygwin: reent_data should be extern \"C\"\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... dcrt0.cc\n+    .../perthread.h:16: error: previous declaration of ‘_reent reent_data’ with ‘C++’ linkage\n+    .../dcrt0.cc:91: error: conflicts with new declaration with ‘C’ linkage\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/perthread.h |    2 +-\n+ 1 files changed, 1 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/perthread.h b/msys/rt/src/winsup/cygwin/perthread.h\n+index 185cc04..738a301 100644\n+--- a/msys/rt/src/winsup/cygwin/perthread.h\n++++ b/msys/rt/src/winsup/cygwin/perthread.h\n+@@ -13,7 +13,7 @@ details. */\n+ #define PTMAGIC 0x77366377\n+ \n+ struct _reent;\n+-extern struct _reent reent_data;\n++extern \"C\" struct _reent reent_data;\n+ \n+ extern DWORD *__stackbase __asm__ (\"%fs:4\");\n+ \n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0015-winsup-cygwin-_sys_errlist-and-_sys_nerr-should-have.patch b/src/rt/patches/0015-winsup-cygwin-_sys_errlist-and-_sys_nerr-should-have.patch\nnew file mode 100644\nindex 0000000..cdf4009\n--- /dev/null\n+++ b/src/rt/patches/0015-winsup-cygwin-_sys_errlist-and-_sys_nerr-should-have.patch\n@@ -0,0 +1,42 @@\n+From e608cceda43c4e7d6dd6829dd3ff1d0d6e0734e5 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 18:22:41 +0300\n+Subject: [PATCH] winsup/cygwin: _sys_errlist and _sys_nerr should have external linkage\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... errno.cc\n+    .../errno.cc:148: error: external linkage required for symbol ‘_sys_errlist’ because of ‘dllexport’ attribute\n+    .../errno.cc:290: error: external linkage required for symbol ‘_sys_nerr’ because of ‘dllexport’ attribute\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/errno.cc |    4 ++--\n+ 1 files changed, 2 insertions(+), 2 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/errno.cc b/msys/rt/src/winsup/cygwin/errno.cc\n+index 89e25ff..e4a4a81 100644\n+--- a/msys/rt/src/winsup/cygwin/errno.cc\n++++ b/msys/rt/src/winsup/cygwin/errno.cc\n+@@ -145,7 +145,7 @@ seterrno (const char *file, int line)\n+ \n+ extern char *_user_strerror _PARAMS ((int));\n+ \n+-const NO_COPY char __declspec(dllexport) * const _sys_errlist[]=\n++extern const NO_COPY char __declspec(dllexport) * const _sys_errlist[]=\n+ {\n+ /*      NOERROR 0       */ \"No error\",\n+ /*\tEPERM 1\t\t*/ \"Not super-user\",\n+@@ -287,7 +287,7 @@ const NO_COPY char __declspec(dllexport) * const _sys_errlist[]=\n+ /* ECASECLASH 137 */ \"Filename exists with different case\"\n+ };\n+ \n+-int const NO_COPY __declspec(dllexport) _sys_nerr =\n++extern int const NO_COPY __declspec(dllexport) _sys_nerr =\n+   sizeof (_sys_errlist) / sizeof (_sys_errlist[0]);\n+ \n+ /* FIXME: Why is strerror() a long switch and not just:\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0016-winsup-cygwin-Don-t-use-non-lvalue-assignment-in-cyg.patch b/src/rt/patches/0016-winsup-cygwin-Don-t-use-non-lvalue-assignment-in-cyg.patch\nnew file mode 100644\nindex 0000000..6ad498d\n--- /dev/null\n+++ b/src/rt/patches/0016-winsup-cygwin-Don-t-use-non-lvalue-assignment-in-cyg.patch\n@@ -0,0 +1,36 @@\n+From f9962a12ce9e1b47c5df8719b7b6079a91244131 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 18:30:28 +0300\n+Subject: [PATCH] winsup/cygwin: Don't use non-lvalue assignment in cygheap.cc\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+There was one non-lvalue assgnment in cygheap.cc, and gcc does not\n+support them for ages...\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... cygheap.cc\n+    .../cygheap.cc: In function ‘void* _csbrk(int)’:\n+    .../cygheap.cc:169: error: lvalue required as left operand of assignment\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/cygheap.cc |    2 +-\n+ 1 files changed, 1 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/cygheap.cc b/msys/rt/src/winsup/cygwin/cygheap.cc\n+index ac4d8fa..bdb93cc 100644\n+--- a/msys/rt/src/winsup/cygwin/cygheap.cc\n++++ b/msys/rt/src/winsup/cygwin/cygheap.cc\n+@@ -166,7 +166,7 @@ _csbrk (int sbs)\n+     }\n+ \n+   lastheap = cygheap_max;\n+-  (char *) cygheap_max += sbs;\n++  cygheap_max = ((char *)cygheap_max) + sbs;\n+   void *heapalign = (void *) pagetrunc (lastheap);\n+ \n+   if (!needalloc)\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0017-winsup-cygwin-Don-t-use-non-lvalue-assgnment-in-dcrt.patch b/src/rt/patches/0017-winsup-cygwin-Don-t-use-non-lvalue-assgnment-in-dcrt.patch\nnew file mode 100644\nindex 0000000..45990bf\n--- /dev/null\n+++ b/src/rt/patches/0017-winsup-cygwin-Don-t-use-non-lvalue-assgnment-in-dcrt.patch\n@@ -0,0 +1,47 @@\n+From 1448ec5e2ec6999122a60fd3f97c2ca89f660a4c Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 18:51:20 +0300\n+Subject: [PATCH] winsup/cygwin: Don't use non-lvalue assgnment in dcrt0.cc\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+fork_info is defined as\n+\n+    # define fork_info ((struct child_info_fork *)(si.lpReserved2))\n+\n+so statement like\n+\n+    fork_info = NULL;\n+\n+is non-lvalue assgnment:\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... dcrt0.cc\n+    .../dcrt0.cc: In function ‘void _dll_crt0()’:\n+    .../dcrt0.cc:958: error: lvalue required as left operand of assignment\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/dcrt0.cc |    4 ++--\n+ 1 files changed, 2 insertions(+), 2 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/dcrt0.cc b/msys/rt/src/winsup/cygwin/dcrt0.cc\n+index d3a67c7..6da4c0a 100644\n+--- a/msys/rt/src/winsup/cygwin/dcrt0.cc\n++++ b/msys/rt/src/winsup/cygwin/dcrt0.cc\n+@@ -955,10 +955,10 @@ _dll_crt0 ()\n+ \t    }\n+ \t  default:\n+ #if defined (__MSYS__)\n+-\t    fork_info = NULL;\n++\t    si.lpReserved2 = NULL;  /* <-- means fork_info=NULL */\n+ #else /* !__MSYS__ */\n+ \t    if (_cygwin_testing)\n+-\t      fork_info = NULL;\n++\t      si.lpReserved2 = NULL;  /* <-- means fork_info=NULL */\n+ \t    else if ((fork_info->type & PROC_MAGIC_MASK) == PROC_MAGIC_GENERIC)\n+ \t      api_fatal (\"conflicting versions of cygwin1.dll detected.  Use only the most recent version.\\n\");\n+ #endif /* !__MSYS__ */\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0018-winsup-cygwin-struct-LUID-has-no-member-QuadPart.patch b/src/rt/patches/0018-winsup-cygwin-struct-LUID-has-no-member-QuadPart.patch\nnew file mode 100644\nindex 0000000..d735178\n--- /dev/null\n+++ b/src/rt/patches/0018-winsup-cygwin-struct-LUID-has-no-member-QuadPart.patch\n@@ -0,0 +1,39 @@\n+From 7d49eefd97fe0276ff493580b749107713af54c0 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 18:39:17 +0300\n+Subject: [PATCH] winsup/cygwin: struct LUID has no member QuadPart\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... security.cc\n+    ../security.cc: In function ‘BOOL get_group_sidlist(const char*, cygsidlist&, cygsid&, cygsid&, _TOKEN_GROUPS*, LUID, int&)’:\n+    ../security.cc:507: error: ‘struct LUID’ has no member named ‘QuadPart’\n+\n+According to MSDN[1] there are only .LowPart and .HighPart in LUID, and\n+e.g. one wine patch[2] suggests how it should be redone.\n+\n+[1] http://msdn.microsoft.com/en-us/library/aa379261(v=vs.85).aspx\n+[2] http://www.winehq.org/pipermail/wine-patches/2001-November/001400.html\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/security.cc |    2 +-\n+ 1 files changed, 1 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/security.cc b/msys/rt/src/winsup/cygwin/security.cc\n+index 7f0080e..5d48248 100644\n+--- a/msys/rt/src/winsup/cygwin/security.cc\n++++ b/msys/rt/src/winsup/cygwin/security.cc\n+@@ -504,7 +504,7 @@ get_group_sidlist (const char *logonserver, cygsidlist &grp_list,\n+ \t  grp_list += well_known_interactive_sid;\n+ \t  grp_list += well_known_authenticated_users_sid;\n+ \t}\n+-      if (auth_luid.QuadPart != 999) /* != SYSTEM_LUID */\n++      if ( ! (auth_luid.HighPart == 0 && auth_luid.LowPart == 999) ) /* != SYSTEM_LUID */\n+ \t{\n+ \t  char buf[64];\n+ \t  __small_sprintf (buf, \"S-1-5-5-%u-%u\", auth_luid.HighPart,\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0019-winsup-cygwin-Fix-asm-constraint-for-_impure_ptr-err.patch b/src/rt/patches/0019-winsup-cygwin-Fix-asm-constraint-for-_impure_ptr-err.patch\nnew file mode 100644\nindex 0000000..348252b\n--- /dev/null\n+++ b/src/rt/patches/0019-winsup-cygwin-Fix-asm-constraint-for-_impure_ptr-err.patch\n@@ -0,0 +1,38 @@\n+From 013548ec033024245161685e93a3467d6bd2dbc0 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 19:50:48 +0300\n+Subject: [PATCH] winsup/cygwin: Fix asm constraint for (&_impure_ptr->errno)\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... exceptions.cc\n+    .../exceptions.cc:1234: error: memory input 1 is not directly addressable\n+\n+It was about \"m\" (&_impure_ptr->_errno). Earlier gcc accepted this, but\n+somehow world changed. Tell gcc the address can be also placed in a\n+register to make it happy.\n+\n+Similiar issue resolved this way:\n+\n+http://coding.derkeiler.com/Archive/Assembler/alt.lang.asm/2008-11/msg00079.html\n+http://coding.derkeiler.com/Archive/Assembler/alt.lang.asm/2008-11/msg00082.html\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/exceptions.cc |    2 +-\n+ 1 files changed, 1 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/exceptions.cc b/msys/rt/src/winsup/cygwin/exceptions.cc\n+index 94b3a0b..020c6d8 100644\n+--- a/msys/rt/src/winsup/cygwin/exceptions.cc\n++++ b/msys/rt/src/winsup/cygwin/exceptions.cc\n+@@ -1226,7 +1226,7 @@ _sigdelayed0:\t\t\t\t\t\t\t\t\\n\\\n+ \tpopl\t%%eax\t\t\t\t\t\t\t\\n\\\n+ \tjmp\t*%%eax\t\t\t\t\t\t\t\\n\\\n+ __no_sig_end:\t\t\t\t\t\t\t\t\\n\\\n+-\" : \"=m\" (sigsave.sig) : \"m\" (&_impure_ptr->_errno),\n++\" : \"=m\" (sigsave.sig) : \"rm\" (&_impure_ptr->_errno),\n+   \"g\" (sigsave.retaddr), \"g\" (sigsave.oldmask), \"g\" (sigsave.sig),\n+     \"g\" (sigsave.func), \"o\" (pid_offset), \"g\" (sigsave.saved_errno), \"g\" (sigsave.newmask)\n+ );\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0020-winsup-cygwin-Add-volatile-qualifier-to-ilock-in-win.patch b/src/rt/patches/0020-winsup-cygwin-Add-volatile-qualifier-to-ilock-in-win.patch\nnew file mode 100644\nindex 0000000..3b23139\n--- /dev/null\n+++ b/src/rt/patches/0020-winsup-cygwin-Add-volatile-qualifier-to-ilock-in-win.patch\n@@ -0,0 +1,70 @@\n+From 2fa5be857f3b026f245dd7a283de093809568f05 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Sat, 26 Feb 2011 14:38:42 +0300\n+Subject: [PATCH] winsup/cygwin: Add volatile qualifier to ilock* in winbase.h\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+[ Cherry-picked from r1.14 in\n+  http://cygwin.com/cgi-bin/cvsweb.cgi/src/winsup/cygwin/winbase.h?cvsroot=src ]\n+\n+This is needed in order to fix compilation with recent gcc/w32api:\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... thread.cc\n+    .../thread.cc: In constructor ‘pthread_cond::pthread_cond(pthread_condattr*)’:\n+    .../thread.cc:438: error: invalid conversion from ‘volatile LONG*’ to ‘long int*’\n+    .../thread.cc:438: error:   initializing argument 1 of ‘long int ilockexch(long int*, long int)’\n+    .../thread.cc: In destructor ‘pthread_cond::~pthread_cond()’:\n+    .../thread.cc:448: error: invalid conversion from ‘volatile LONG*’ to ‘long int*’\n+    .../thread.cc:448: error:   initializing argument 1 of ‘long int ilockexch(long int*, long int)’\n+    [ and so on ... ]\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/winbase.h |    8 ++++----\n+ 1 files changed, 4 insertions(+), 4 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/winbase.h b/msys/rt/src/winsup/cygwin/winbase.h\n+index 351d320..1257781 100644\n+--- a/msys/rt/src/winsup/cygwin/winbase.h\n++++ b/msys/rt/src/winsup/cygwin/winbase.h\n+@@ -4,7 +4,7 @@\n+ #define _WINBASE2_H\n+ \n+ extern __inline__ long\n+-ilockincr (long *m)\n++ilockincr (volatile long *m)\n+ {\n+   register int __res;\n+   __asm__ __volatile__ (\"\\n\\\n+@@ -16,7 +16,7 @@ ilockincr (long *m)\n+ }\n+ \n+ extern __inline__ long\n+-ilockdecr (long *m)\n++ilockdecr (volatile long *m)\n+ {\n+   register int __res;\n+   __asm__ __volatile__ (\"\\n\\\n+@@ -28,7 +28,7 @@ ilockdecr (long *m)\n+ }\n+ \n+ extern __inline__ long\n+-ilockexch (long *t, long v)\n++ilockexch (volatile long *t, long v)\n+ {\n+   register int __res;\n+   __asm__ __volatile__ (\"\\n\\\n+@@ -39,7 +39,7 @@ ilockexch (long *t, long v)\n+ }\n+ \n+ extern __inline__ long\n+-ilockcmpexch (long *t, long v, long c)\n++ilockcmpexch (volatile long *t, long v, long c)\n+ {\n+   register int __res;\n+   __asm__ __volatile__ (\"\\n\\\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0021-winsup-cygwin-call_signal_handler_now-alias-keeping-.patch b/src/rt/patches/0021-winsup-cygwin-call_signal_handler_now-alias-keeping-.patch\nnew file mode 100644\nindex 0000000..096d757\n--- /dev/null\n+++ b/src/rt/patches/0021-winsup-cygwin-call_signal_handler_now-alias-keeping-.patch\n@@ -0,0 +1,48 @@\n+From 85e943cb4e6aeac844ee465017efa5474c85e046 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 20:37:09 +0300\n+Subject: [PATCH] winsup/cygwin: call_signal_handler_now() alias-keeping breaks compilation\n+MIME-Version: 1.0\n+Content-Type: text/plain; charset=UTF-8\n+Content-Transfer-Encoding: 8bit\n+\n+    i586-mingw32msvc-g++ -c -O2 -D__MSYS__ -MD -fbuiltin ... exceptions.cc\n+    .../exceptions.cc:1148: error: ‘int call_signal_handler_now_dummy()’ aliased to undefined symbol ‘call_signal_handler_now’\n+\n+Unbreak it by making call_signal_handler_now() non-static and commenting\n+the kludge. Hope it's ok.\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/exceptions.cc |    4 +++-\n+ 1 files changed, 3 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/exceptions.cc b/msys/rt/src/winsup/cygwin/exceptions.cc\n+index 020c6d8..a2853e9 100644\n+--- a/msys/rt/src/winsup/cygwin/exceptions.cc\n++++ b/msys/rt/src/winsup/cygwin/exceptions.cc\n+@@ -1127,7 +1127,7 @@ events_terminate (void)\n+ }\n+ \n+ extern \"C\" {\n+-static int __stdcall\n++int __stdcall\n+ call_signal_handler_now ()\n+ {\n+   if (!sigsave.sig)\n+@@ -1142,10 +1142,12 @@ call_signal_handler_now ()\n+   sigdelayed0 ();\n+   return sa_flags & SA_RESTART;\n+ }\n++#if 0\n+ /* This kludge seems to keep a copy of call_signal_handler_now around\n+    even when compiling with -finline-functions. */\n+ static int __stdcall call_signal_handler_now_dummy ()\n+   __attribute__((alias (\"call_signal_handler_now\")));\n++#endif\n+ };\n+ \n+ int\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0022-winsup-cygwin-std_dll_init-and-wsock_init-should-not.patch b/src/rt/patches/0022-winsup-cygwin-std_dll_init-and-wsock_init-should-not.patch\nnew file mode 100644\nindex 0000000..27441b4\n--- /dev/null\n+++ b/src/rt/patches/0022-winsup-cygwin-std_dll_init-and-wsock_init-should-not.patch\n@@ -0,0 +1,60 @@\n+From 655638fd57f15e48c59620b763fbdc85bc7793a4 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 20:16:45 +0300\n+Subject: [PATCH] winsup/cygwin: std_dll_init() and wsock_init() should not be static\n+\n+Because they are referenced from assembly-made LoadDllPrime from\n+different from .text sections:\n+\n+    <linking new-msys-1.0.dll>\n+    autoload.o:autoload.cc:(.ws2_32_info[_ws2_32_handle]+0x0): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.ws2_32_info[_ws2_32_handle]+0xc): undefined reference to `wsock_init'\n+    autoload.o:autoload.cc:(.ws2_32_info[_ws2_32_handle]+0x17): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.ws2_32_info[_ws2_32_handle]+0x2e): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.ws2_32_info[_ws2_32_handle]+0x45): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.ws2_32_info[_ws2_32_handle]+0x5c): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.ws2_32_info[_ws2_32_handle]+0x73): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.ws2_32_info[_ws2_32_handle]+0x8a): more undefined references to `std_dll_init' follow\n+    autoload.o:autoload.cc:(.wsock32_info[_wsock32_handle]+0xc): undefined reference to `wsock_init'\n+    autoload.o:autoload.cc:(.wsock32_info[_wsock32_handle]+0x18): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.wsock32_info[_wsock32_handle]+0x30): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.wsock32_info[_wsock32_handle]+0x48): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.wsock32_info[_wsock32_handle]+0x60): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.wsock32_info[_wsock32_handle]+0x78): undefined reference to `std_dll_init'\n+    autoload.o:autoload.cc:(.wsock32_info[_wsock32_handle]+0x90): more undefined references to `std_dll_init' follow\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/autoload.cc |    8 ++++----\n+ 1 files changed, 4 insertions(+), 4 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/autoload.cc b/msys/rt/src/winsup/cygwin/autoload.cc\n+index 67d0bc0..6f5a8f5 100644\n+--- a/msys/rt/src/winsup/cygwin/autoload.cc\n++++ b/msys/rt/src/winsup/cygwin/autoload.cc\n+@@ -201,8 +201,8 @@ union retchain\n+ };\n+ \n+ /* The standard DLL initialization routine. */\n+-static long long std_dll_init () __asm__ (\"std_dll_init\") __attribute__ ((unused));\n+-static long long\n++long long std_dll_init () __asm__ (\"std_dll_init\") __attribute__ ((unused));\n++long long\n+ std_dll_init ()\n+ {\n+   HANDLE h;\n+@@ -241,9 +241,9 @@ std_dll_init ()\n+ }\n+ \n+ /* Initialization function for winsock stuff. */\n+-static long long wsock_init () __asm__ (\"wsock_init\") __attribute__ ((unused, regparm(1)));\n++long long wsock_init () __asm__ (\"wsock_init\") __attribute__ ((unused, regparm(1)));\n+ bool NO_COPY wsock_started = 0;\n+-static long long\n++long long\n+ wsock_init ()\n+ {\n+   static LONG NO_COPY here = -1L;\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0023-winsup-cygwin-Build-with-fno-threadsafe-statics.patch b/src/rt/patches/0023-winsup-cygwin-Build-with-fno-threadsafe-statics.patch\nnew file mode 100644\nindex 0000000..023dd80\n--- /dev/null\n+++ b/src/rt/patches/0023-winsup-cygwin-Build-with-fno-threadsafe-statics.patch\n@@ -0,0 +1,45 @@\n+From bcf492ef90d866cced91f6fd8f57fd0b4cd05691 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 21:57:51 +0300\n+Subject: [PATCH] winsup/cygwin: Build with -fno-threadsafe-statics\n+\n+msys is low-level enough to do it's own synchronisation when neccessary,\n+and also gcc3 does not seem to be implementing threadsafe statics, so\n+msys never used this mechanics.\n+\n+But when compiled with gcc4, threadsafe statics are default - this adds\n+to code size, and also pulls __cxa_guard_acquire and __cxa_guard_release\n+from libstdc++.\n+\n+Avoid it for compilers that understand threadsafe statics (gcc4). The\n+goal is to avoid libstdc++ dependency completly in the end.\n+\n+See also:\n+\n+http://lists.apple.com/archives/darwin-drivers/2005/May/msg00067.html\n+http://gcc.gnu.org/ml/libstdc++/2002-11/msg00279.html\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/Makefile.common |    5 +++++\n+ 1 files changed, 5 insertions(+), 0 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/Makefile.common b/msys/rt/src/winsup/Makefile.common\n+index 78595d2..798c374 100644\n+--- a/msys/rt/src/winsup/Makefile.common\n++++ b/msys/rt/src/winsup/Makefile.common\n+@@ -99,6 +99,11 @@ CPP_TARGET_INCLUDE:=/usr/include/c++/3.2.2/i686-pc-msys\n+ COMPILE_CXX:=$(CXX) $c -nostdinc++ $(ALL_CXXFLAGS) -I$(GCC_INCLUDE) \\\n+ \t     -I$(CPP_INCLUDE) -I$(CPP_TARGET_INCLUDE) \\\n+ \t     -fno-rtti -fno-exceptions\n++\n++# add -fno-threadsafe-statics if compiler supports it\n++COMPILE_CXX+=$(shell $(CXX) -fno-threadsafe-statics -c -xc++ /dev/null >/dev/null 2>&1\t\\\n++\t\t&& echo -fno-threadsafe-statics)\n++\n+ COMPILE_CC:=$(CC) $c -nostdinc $(ALL_CFLAGS) -I$(GCC_INCLUDE)\n+ \n+ vpath %.a\t$(cygwin_build):$(w32api_lib):$(newlib_build)/libc:$(newlib_build)/libm\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0024-winsup-cygwin-Avoid-libstdc-dependency.patch b/src/rt/patches/0024-winsup-cygwin-Avoid-libstdc-dependency.patch\nnew file mode 100644\nindex 0000000..eb55fc0\n--- /dev/null\n+++ b/src/rt/patches/0024-winsup-cygwin-Avoid-libstdc-dependency.patch\n@@ -0,0 +1,103 @@\n+From dfd3d1291f744f0f9c5549a58f69c814cb980266 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Fri, 25 Feb 2011 22:04:06 +0300\n+Subject: [PATCH] winsup/cygwin: Avoid libstdc++ dependency\n+\n+All we need from libstdc++ is operator new/delete, and also\n+__cxa_pure_virtual().\n+\n+But if we are getting this stuff from libstdc++, the functions also\n+pulls lots of dependencies, e.g. operator new calls std::terminate() if\n+it can't allocate memory, which links to exception-handling routines and\n+other symbols from non-msys C runtime:\n+\n+    <linking msys.dll (with libstdc++)>\n+    TODO\n+\n+Avoid it.\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/Makefile.in |    3 +-\n+ msys/rt/src/winsup/cygwin/supcc.cc    |   48 +++++++++++++++++++++++++++++++++\n+ 2 files changed, 50 insertions(+), 1 deletions(-)\n+ create mode 100644 msys/rt/src/winsup/cygwin/supcc.cc\n+\n+diff --git a/msys/rt/src/winsup/cygwin/Makefile.in b/msys/rt/src/winsup/cygwin/Makefile.in\n+index ef0ae9e..050fc8a 100644\n+--- a/msys/rt/src/winsup/cygwin/Makefile.in\n++++ b/msys/rt/src/winsup/cygwin/Makefile.in\n+@@ -131,6 +131,7 @@ DLL_OFILES:=assert.o autoload.o \\\n+ \tsmallprint.o spawn.o strace.o strsep.o sync.o syscalls.o sysconf.o \\\n+ \tsyslog.o termios.o thread.o times.o tty.o uinfo.o uname.o wait.o \\\n+ \twindow.o \\\n++\tsupcc.o\t\\\n+ \t$(EXTRA_DLL_OFILES) $(EXTRA_OFILES) $(MALLOC_OFILES) $(MT_SAFE_OBJECTS) \n+ \n+ GMON_OFILES:= gmon.o mcount.o profil.o\n+@@ -201,7 +202,7 @@ new-$(DLL_NAME): $(LDSCRIPT) $(DLL_OFILES) $(DEF_FILE) $(DLL_IMPORTS) $(LIBC) $(\n+ \t$(CXX) $(CXXFLAGS) -nostdlib -Wl,-T$(firstword $^) -shared -o $@ \\\n+ \t-e $(DLL_ENTRY) $(DEF_FILE) $(DLL_OFILES) version.o winver.o \\\n+ \t$(DLL_IMPORTS) $(MALLOC_OBJ) $(LIBM) $(LIBC) \\\n+-\t-lstdc++ -lgcc -lshell32 -luuid -lkernel32 -lnetapi32 -luser32\n++\t-lgcc -lshell32 -luuid -lkernel32 -lnetapi32 -luser32\n+ \n+ dll_ofiles: $(DLL_OFILES)\n+ \n+diff --git a/msys/rt/src/winsup/cygwin/supcc.cc b/msys/rt/src/winsup/cygwin/supcc.cc\n+new file mode 100644\n+index 0000000..1d3d6b5\n+--- /dev/null\n++++ b/msys/rt/src/winsup/cygwin/supcc.cc\n+@@ -0,0 +1,48 @@\n++/* C++ supporting routines - minimal selected bits from libsupc++ for msys.dll\n++ * to work without linking to libstdc++\n++ */\n++#include \"winsup.h\"\n++#include <stdlib.h>\n++\n++void *\n++operator new (size_t size)\n++{\n++    void *p;\n++\n++    p = malloc(size);\n++    /* TODO if !p - try __new_handler */\n++\n++    if (!p)\n++        api_fatal(\"out of memory in `operator new()`\");\n++\n++    return p;\n++}\n++\n++void\n++operator delete (void *p)\n++{\n++    if (p)\n++        free(p);\n++}\n++\n++\n++void *\n++operator new[] (size_t size)\n++{\n++    return operator new(size);\n++}\n++\n++void\n++operator delete[] (void *p)\n++{\n++    operator delete (p);\n++}\n++\n++\n++\n++/* pure virtuals link to here */\n++extern \"C\" void\n++__cxa_pure_virtual()\n++{\n++    api_fatal(\"pure virtual method called\");\n++}\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0025-winsup-cygwin-Strip-new-msys-1.0.dll-when-cross-comp.patch b/src/rt/patches/0025-winsup-cygwin-Strip-new-msys-1.0.dll-when-cross-comp.patch\nnew file mode 100644\nindex 0000000..c840148\n--- /dev/null\n+++ b/src/rt/patches/0025-winsup-cygwin-Strip-new-msys-1.0.dll-when-cross-comp.patch\n@@ -0,0 +1,94 @@\n+From 907b5b7d60f82ca51792ee9f048b08f2f6510e84 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Sat, 26 Feb 2011 15:01:04 +0300\n+Subject: [PATCH] winsup/cygwin: Strip new-msys-1.0.dll when cross-compiling\n+\n+Somehow mingw32 cross compiler on Debian (lenny and squeeze) produces\n+dll's with .debug_* sections with VirtualSize=0:\n+\n+    $ objdump -h new-msys-1.0.dll\n+    new-msys-1.0.dll:     file format efi-app-ia32\n+\n+    Sections:\n+    Idx Name          Size      VMA               LMA               File off  Algn\n+      0 .debug_abbrev 000137f0  00000000  00000000  000007e0  2**0\n+                      CONTENTS, READONLY, DEBUGGING\n+      1 .debug_info   0006f0b5  00000000  00000000  00013fe0  2**0\n+                      CONTENTS, READONLY, DEBUGGING\n+      2 .debug_line   0001c3fb  00000000  00000000  000831e0  2**0\n+                      CONTENTS, READONLY, DEBUGGING\n+      3 .debug_pubnames 0000303f  00000000  00000000  0009f5e0  2**0\n+                      CONTENTS, READONLY, DEBUGGING\n+      4 .debug_frame  000056d0  00000000  00000000  000a27e0  2**2\n+                      CONTENTS, READONLY, DEBUGGING\n+      5 .debug_loc    0001ba99  00000000  00000000  000a7fe0  2**0\n+                      CONTENTS, READONLY, DEBUGGING\n+      6 .debug_aranges 00002da0  00000000  00000000  000c3be0  2**3\n+                      CONTENTS, READONLY, DEBUGGING\n+      7 .debug_str    00000390  00000000  00000000  000c69e0  2**0\n+                      CONTENTS, READONLY, DEBUGGING\n+      8 .debug_ranges 000022a0  00000000  00000000  000c6de0  2**0\n+                      CONTENTS, READONLY, DEBUGGING\n+      9 .text         00081e30  71001000  71001000  000c9200  2**5\n+                      CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA\n+     10 .data         00004958  71083000  71083000  0014b200  2**5\n+                      CONTENTS, ALLOC, LOAD, DATA\n+     11 .wsock32_info 00000378  71088000  71088000  0014fc00  2**2\n+                      CONTENTS, ALLOC, LOAD, DATA, LINK_ONCE_DISCARD (COMDAT _wsock32_handle 15549)\n+     12 .ws2_32_info  00000144  71089000  71089000  00150000  2**2\n+                  CONTENTS, ALLOC, LOAD, DATA, LINK_ONCE_DISCARD (COMDAT _ws2_32_handle 14700)\n+\n+    ...\n+\n+And wine refuses to load PE's with such sections:\n+\n+    $ WINEDEBUG=module wine hellomsys.exe\n+    ...\n+    trace:module:load_native_dll Trying native dll L\"Z:\\\\home\\\\kirr\\\\src\\\\tools\\\\git\\\\msys\\\\msys\\\\rt\\\\src\\\\winsup\\\\cygwin\\\\objs\\\\msys-1.0.dll\"\n+    trace:module:map_image mapped PE file at 0x71000000-0x71102000\n+    warn:module:map_image Section /4 too large (8f000000+14000/102000)\n+    warn:module:load_dll Failed to load module L\"msys-1.0.dll\"; status=c000007b\n+    err:module:import_dll Loading library msys-1.0.dll (which is needed by L\"Z:\\\\...\\\\xmsys.exe\") failed (error c000007b).\n+    err:module:LdrInitializeThunk Main exe initialization for L\"Z:\\\\...\\\\xmsys.exe\" failed, status c0000135\n+\n+Now, c000007b is ERROR_BAD_EXE_FORMAT (= STATUS_INVALID_IMAGE_FORMAT),\n+and the error is triggered in ntdll:map_image():\n+\n+http://source.winehq.org/git/wine.git/?a=blob;f=dlls/ntdll/virtual.c;h=0913b714bed3e2f766c7e4f056335224316d52c3;hb=HEAD#l1217\n+\n+because of\n+\n+    if (!sec->Misc.VirtualSize)\n+        map_size = ROUND_SIZE( 0, sec->SizeOfRawData );\n+    else\n+        map_size = ROUND_SIZE( 0, sec->Misc.VirtualSize );\n+\n+I'm not PE expert, and can't tell who is right, so to workaround\n+problems, let's just strip debuginfo...\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/Makefile.in |    7 +++++++\n+ 1 files changed, 7 insertions(+), 0 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/Makefile.in b/msys/rt/src/winsup/cygwin/Makefile.in\n+index 050fc8a..e8eafe6 100644\n+--- a/msys/rt/src/winsup/cygwin/Makefile.in\n++++ b/msys/rt/src/winsup/cygwin/Makefile.in\n+@@ -204,6 +204,13 @@ new-$(DLL_NAME): $(LDSCRIPT) $(DLL_OFILES) $(DEF_FILE) $(DLL_IMPORTS) $(LIBC) $(\n+ \t$(DLL_IMPORTS) $(MALLOC_OBJ) $(LIBM) $(LIBC) \\\n+ \t-lgcc -lshell32 -luuid -lkernel32 -lnetapi32 -luser32\n+ \n++ifneq ($(findstring mingw32,$(CXX)),)\n++\t# wine loader does not like debug sections with VirtualSize 0 - so when\n++\t# cross-compiling, to workaround this problem, just strip them. XXX better use $$(STRIP)\n++\t$(patsubst %-g++,%-strip,$(CXX)) -g $@\n++endif\n++\n++\n+ dll_ofiles: $(DLL_OFILES)\n+ \n+ $(LIBGMON_A): $(GMON_OFILES) $(GMON_START)\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0026-winsup-cygwin-cygrun.exe-build-depends-on-libmsys-1..patch b/src/rt/patches/0026-winsup-cygwin-cygrun.exe-build-depends-on-libmsys-1..patch\nnew file mode 100644\nindex 0000000..6496696\n--- /dev/null\n+++ b/src/rt/patches/0026-winsup-cygwin-cygrun.exe-build-depends-on-libmsys-1..patch\n@@ -0,0 +1,32 @@\n+From 625a8d421d923b59d680b319ac2b6439eb46ecc6 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Sat, 26 Feb 2011 17:15:52 +0300\n+Subject: [PATCH] winsup/cygwin: cygrun.exe build-depends on libmsys-1.0.dll.a\n+\n+Since we link to it we should tell make we need it, or else `make -j4`\n+breaks:\n+\n+    i586-mingw32msvc-gcc -nodefaultlibs -o cygrun.exe cygrun.o -lgcc libmsys-1.0.dll.a -luser32 -lshell32 -lkernel32\n+    i586-mingw32msvc-gcc: libmsys-1.0.dll.a: No such file or directory\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/Makefile.in |    2 +-\n+ 1 files changed, 1 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/Makefile.in b/msys/rt/src/winsup/cygwin/Makefile.in\n+index e8eafe6..a1cbf71 100644\n+--- a/msys/rt/src/winsup/cygwin/Makefile.in\n++++ b/msys/rt/src/winsup/cygwin/Makefile.in\n+@@ -225,7 +225,7 @@ winver_stamp: mkvers.sh include/cygwin/version.h winver.rc $(DLL_OFILES)\n+ \ttouch $@ && \\\n+ \t$(COMPILE_CXX) -o version.o version.cc\n+ \n+-cygrun.exe : cygrun.o\n++cygrun.exe : cygrun.o $(LIB_NAME)\n+ \t$(CC) -nodefaultlibs -o $@ $^ -lgcc $(LIB_NAME) -luser32 -lshell32 -lkernel32\n+ \n+ #\f\n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/patches/0027-winsup-cygwin-cyrun.exe-should-be-built-with-nostdli.patch b/src/rt/patches/0027-winsup-cygwin-cyrun.exe-should-be-built-with-nostdli.patch\nnew file mode 100644\nindex 0000000..215f788\n--- /dev/null\n+++ b/src/rt/patches/0027-winsup-cygwin-cyrun.exe-should-be-built-with-nostdli.patch\n@@ -0,0 +1,53 @@\n+From cf59176197193d2256f13580b5a8518b5e66a9c0 Mon Sep 17 00:00:00 2001\n+From: Kirill Smelkov <kirr@mns.spb.ru>\n+Date: Sat, 26 Feb 2011 17:19:54 +0300\n+Subject: [PATCH] winsup/cygwin: cyrun.exe should be built with -nostdlib (not -nodefaultlibs)\n+\n+Because -nodefaultlibs, still pulls in compiler's crt bits. E.g. when\n+cross compiling:\n+\n+    i586-mingw32msvc-gcc -nodefaultlibs -o cygrun.exe cygrun.o libmsys-1.0.dll.a -lgcc libmsys-1.0.dll.a -luser32 -lshell32 -lkernel32\n+    libmsys-1.0.dll.a(dncqs00563.o):(.text+0x0): multiple definition of `_atexit'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:/home/ron/devel/debian/mingw32-runtime/mingw32-runtime-3.13/build_dir/src/mingw-runtime-3.13-20070825-1/crt1.c:280: first defined here\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x13): undefined reference to `__imp___onexit'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x35): undefined reference to `___cpu_features_init'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x3a): undefined reference to `__fpreset'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x51): undefined reference to `__CRT_glob'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x62): undefined reference to `___getmainargs'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x67): undefined reference to `__CRT_fmode'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x73): undefined reference to `___p__fmode'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x80): undefined reference to `__pei386_runtime_relocator'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x8d): undefined reference to `___p__environ'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0xaa): undefined reference to `__cexit'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0xb8): undefined reference to `__imp___iob'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0xd8): undefined reference to `__CRT_fmode'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0xf1): undefined reference to `__CRT_fmode'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x11a): undefined reference to `__imp____set_app_type'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x13a): undefined reference to `__imp____set_app_type'\n+    /usr/lib/gcc/i586-mingw32msvc/4.4.2/../../../../i586-mingw32msvc/lib/crt2.o:crt1.c:(.text+0x278): undefined reference to `__fpreset'\n+    collect2: ld returned 1 exit status\n+\n+Since newlib/msys already have all what is needed, we can turn\n+-nodefaultlibs into -nostdlib, which avoid standard crt2.o as well.\n+\n+Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n+---\n+ msys/rt/src/winsup/cygwin/Makefile.in |    2 +-\n+ 1 files changed, 1 insertions(+), 1 deletions(-)\n+\n+diff --git a/msys/rt/src/winsup/cygwin/Makefile.in b/msys/rt/src/winsup/cygwin/Makefile.in\n+index a1cbf71..393f2da 100644\n+--- a/msys/rt/src/winsup/cygwin/Makefile.in\n++++ b/msys/rt/src/winsup/cygwin/Makefile.in\n+@@ -226,7 +226,7 @@ winver_stamp: mkvers.sh include/cygwin/version.h winver.rc $(DLL_OFILES)\n+ \t$(COMPILE_CXX) -o version.o version.cc\n+ \n+ cygrun.exe : cygrun.o $(LIB_NAME)\n+-\t$(CC) -nodefaultlibs -o $@ $^ -lgcc $(LIB_NAME) -luser32 -lshell32 -lkernel32\n++\t$(CC) -nostdlib -o $@ $^ -lgcc $(LIB_NAME) -luser32 -lshell32 -lkernel32\n+ \n+ #\f\n+ \n+-- \n+1.7.4.1.48.g5673d\n+\ndiff --git a/src/rt/release.sh b/src/rt/release.sh\nindex a25f37a..c81f5e1 100644\n--- a/src/rt/release.sh\n+++ b/src/rt/release.sh\n@@ -8,7 +8,26 @@ die () {\n cd \"$(dirname \"$0\")\"\n \n debug=\n-test \"a$1\" = \"a--debug\" && debug=t\n+cross=\n+\n+while test $# != 0\n+do\n+\tcase \"$1\" in\n+\t\"--debug\")\n+\t\tdebug=t\n+\t\t;;\n+\n+\t\"--cross\")\n+\t\tcross=t\n+\t\t;;\n+\t*)\n+\t\tdie \"Unknown option $1\"\n+\t\t;;\n+\tesac\n+\n+\tshift\n+done\n+\n debug_clean=\n test \"$debug\" = \"$(cat debug.txt 2>/dev/null)\" || debug_clean=t\n echo \"$debug\" > debug.txt\n@@ -36,26 +55,143 @@ do\n \ti=$(($i+1))\n done\n \n-test -f /bin/cc.exe || ln gcc.exe /bin/cc.exe ||\n-die \"Could not make sure that MSys cc is found instead of MinGW one\"\n \n cd msys/rt &&\n-release=MSYS-g$(git show -s --pretty=%h HEAD) &&\n-(export MSYSTEM=MSYS &&\n- export PATH=/bin:$PATH &&\n- (test -d bld || mkdir bld) &&\n- cd bld &&\n- DLL=i686-pc-msys/winsup/cygwin/new-msys-1.0.dll &&\n- (test -f Makefile && test -z \"$debug_clean\" ||\n-  ../src/configure --prefix=/usr) &&\n- (test -z \"$debug\" || perl -i.bak -pe 's/-O2//g' $(find -name Makefile)) &&\n- (test -z \"$debug_clean\" || make clean) &&\n- (make || test -f $DLL) &&\n- (test ! -z \"$debug\" || strip $DLL) &&\n- rebase -b 0x68000000 $DLL &&\n- mv $DLL /bin/) &&\n-cd / &&\n-hash=$(git hash-object -w bin/new-msys-1.0.dll) &&\n-git update-index --cacheinfo 100755 $hash bin/msys-1.0.dll &&\n-git commit -s -m \"Updated msys-1.0.dll to $release\" &&\n-/share/msysGit/post-checkout-hook HEAD^ HEAD 1\n+release=MSYS-g$(git show -s --pretty=%h HEAD) ||\n+die \"Could not detect MSYS release\"\n+\n+\n+# build msys.dll in native win32/msys environment\n+release_native() {\n+\ttest -f /bin/cc.exe || ln gcc.exe /bin/cc.exe ||\n+\tdie \"Could not make sure that MSys cc is found instead of MinGW one\"\n+\n+\t(export MSYSTEM=MSYS &&\n+\t export PATH=/bin:$PATH &&\n+\t (test -d bld || mkdir bld) &&\n+\t cd bld &&\n+\t DLL=i686-pc-msys/winsup/cygwin/new-msys-1.0.dll &&\n+\t (test -f Makefile && test -z \"$debug_clean\" ||\n+\t  ../src/configure --prefix=/usr) &&\n+\t (test -z \"$debug\" || perl -i.bak -pe 's/-O2//g' $(find -name Makefile)) &&\n+\t (test -z \"$debug_clean\" || make clean) &&\n+\t (make || test -f $DLL) &&\n+\t (test ! -z \"$debug\" || strip $DLL) &&\n+\t rebase -b 0x68000000 $DLL &&\n+\t mv $DLL /bin/) &&\n+\tcd / &&\n+\thash=$(git hash-object -w bin/new-msys-1.0.dll) &&\n+\tgit update-index --cacheinfo 100755 $hash bin/msys-1.0.dll &&\n+\tgit commit -s -m \"Updated msys-1.0.dll to $release\" &&\n+\t/share/msysGit/post-checkout-hook HEAD^ HEAD 1\n+}\n+\n+# cross-build msys.dll\n+# XXX $debug not handled\n+# XXX $debug_clean not handled\n+release_cross() {\n+\troot=$(cd ../../../../ && pwd) &&\n+\tw32api=$root/mingw/include &&\n+\t(\n+\t (test -d bld || mkdir bld) &&\n+\t cd bld\n+\n+\t # this is the cross prefix for mingw gcc on Debian\n+\t X=i586-mingw32msvc\n+\n+\t DLL=$X/winsup/cygwin/new-msys-1.0.dll\n+\n+\t export CC=$X-gcc\n+\t export CXX=$X-g++\n+\t export AR=$X-ar\n+\t export AS=$X-as\n+\t export RANLIB=$X-ranlib\n+\t export LD=$X-ld\n+\t export DLLTOOL=$X-dlltool\n+\t export WINDRES=$X-windres\n+\t export STRIP=$X-strip\n+\n+\t (\n+\t  test -d $X || mkdir $X || die\n+\t  cd $X\n+\n+\t  # strip0d config.sub in srctree\n+\t  # Unfortunately I have to do this in scrtree, yes :( or else on linux configure says:\n+\t  #\n+\t  #     configure: error: can not run\n+\t  #     .../config.sub\n+\t  #\n+\t  # and manually inspecting config.sub gives:\n+\t  #\n+\t  #     $ ./config.sub\n+\t  #     bash: ./config.sub: /bin/sh^M: bad interpreter: No such file or directory\n+\t  #\n+\t  # this is better done in a patch, but git has problems applying\n+\t  # patches with trailing ^M, and also it would be fragile to apply\n+\t  # such patch from under msys. Another possibility would be to somehow\n+\t  # fool configure to take config.sub from objtree, and yes, this can\n+\t  # be done for newlib, but not for winsup/cygwin - the latter looks\n+\t  # for aux files only in srctree.\n+\t  #\n+\t  # So be it - we'll dirty the tree a bit, but this is relatively\n+\t  # harmles, since noone of us usually touches config.sub, and also\n+\t  # even after stripping, it runs ok under msys.\n+\t  ac_config_sub=../../src/config.sub\n+\t  tmpfile=`mktemp -t strip0d.XXXXXX` &&\n+\t  tr -d '\\015' <$ac_config_sub >$tmpfile &&\n+\t  mv $tmpfile $ac_config_sub &&\n+\t  chmod +x $ac_config_sub ||\n+\t  die \"Could not tweak config.sub\"\n+\n+\t  # shadow for needed libiberty bits\n+\t  test -d libiberty ||\n+\t  (echo \">>> shadow libiberty ...\" &&\n+\t   mkdir libiberty &&\n+\t   ln -s -t libiberty/ ../../../src/libiberty/{random,strsignal}.c &&\n+\t   ln -s -t libiberty/ ../../../src/include/{ansidecl,libiberty}.h\n+\t  ) ||\n+\t  die \"Could not shadow libiberty\"\n+\n+\t  test -f newlib/Makefile ||\n+\t  (echo -e \">>> configure newlib ...\\n\" &&\n+\t   mkdir -p newlib &&\n+\t   cd newlib &&\n+\n+\t   # NOTE i686-pc-cygwin here!\n+\t   CPPFLAGS=\"-D__MSYS__\"\t\\\n+\t   ../../../src/newlib/configure\t\\\n+\t       --host=i686-pc-cygwin\n+\t  ) ||\n+\t  die \"Could not cross-configure newlib\"\n+\n+\t  test -f winsup/cygwin/Makefile ||\n+\t  (echo -e \"\\n\\n>>> configure winsup/cygwin ...\\n\"\n+\t   mkdir -p winsup/cygwin &&\n+\t   cd winsup/cygwin &&\n+\n+\t   # NOTE CFLAGS=\"-gstabs+ ...\" is incompatible with wine loader\n+\t   # -isystem mingw/include for w32api *.h files\n+\t   CFLAGS=\"-O2 -D__MSYS__ -isystem $w32api\"\t\\\n+\t   ../../../../src/winsup/cygwin/configure\t\\\n+\t       --host=$X\t\\\n+\t  ) ||\n+\t  die \"Could not cross-configure winsup/cygwin\"\n+\n+\t  make -C newlib \t\t|| die \"Could not build newlib\"\n+\t  make -C winsup/cygwin \t|| die \"Could not build msys.dll\"\n+\t ) &&\n+\n+\t # TODO rebase $DLL (?)\n+\n+\t mv $DLL $root/bin/msys-1.0.dll &&\n+\t cd $root &&\n+\t git commit -s -m \"Updated msys-1.0.dll to cross-compiled $release\" bin/msys-1.0.dll\n+\t)\n+}\n+\n+\n+if test -z \"$cross\" ; then\n+\trelease_native\n+else\n+\trelease_cross\n+fi\n"},{"id":"162321","messageId":"alpine.DEB.1.00.1102262056030.1561@bonsai2","threadId":"26586","inReplyTo":"20110226190741.GA24914@tugrik.mns.mnsspb.ru","subject":"cross-compiling msys-1.0.dll, was Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2011-02-26T19:58:16Z","receivedAt":"2011-02-26T19:58:16Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sat, 26 Feb 2011, Kirill Smelkov wrote:\n\n> On Sat, Feb 26, 2011 at 02:07:40PM +0300, Kirill Smelkov wrote:\n> \n> > On Fri, Feb 25, 2011 at 10:54:40PM +0100, Johannes Schindelin wrote:\n> > > > > And lastly, in [2] you claim that you cross-built msys-1.0.dll. \n> > > > > I would like to have a script doing that in msysgit.git.\n> > > > \n> > > > This is in progress. Preliminary stuff (cross-built msys.dll no \n> > > > longer needs mingwm10.dll), is here:\n> > > > \n> > > > http://repo.or.cz/w/msys/kirr.git/shortlog/refs/heads/x/kirr\n> > > > http://repo.or.cz/w/msysgit/kirr.git/shortlog/refs/heads/ks/crossmsys\n> > > \n> > > Thanks, I will try to find some time to test this next week.\n> > \n> > Please don't - it does not build out of the box from msysgit yet. I \n> > just wanted to show it is not staying stale. When it is finished, I'll \n> > let you know.\n> \n> Done. Please do\n> \n>     git pull git://repo.or.cz/msysgit/kirr.git ks/crossmsys     # into msys\n\nThis is beautiful work. I will keep this as my candy tomorrow, because I \nstill have to finish something else (after which I want to provide myself \nwith some reward).\n\nCiao,\nDscho\n"},{"id":"162338","messageId":"4D69E355.7010104@gmail.com","threadId":"26586","inReplyTo":"4D68D4FA.7090500@gmail.com","subject":"Re: Adding Beyond Compare as a merge tool, was: Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Chris Packham","fromEmail":"judge.packham@gmail.com","sentAt":"2011-02-27T05:38:29Z","receivedAt":"2011-02-27T05:38:29Z","isPatch":false,"sender":{"key":"judge.packham@gmail.com","avatar":"https://avatars.githubusercontent.com/u/155667?v=4"},"body":"On 26/02/11 23:24, Sebastian Schuberth wrote:\n> On 24.02.2011 00:26, Junio C Hamano wrote:\n> \n>> * cp/mergetool-beyondcompare (2011-02-18) 1 commit\n>>   - mergetool--lib: add support for beyond compare\n> \n> Sorry for not responding earlier to this, but problems at my news\n> provider seem to have swallowed mails from several days, including the\n> original post of\n> \n> http://marc.info/?l=git&m=129801656713478&w=2\n> \n> A while ago, I had already proposed\n> \n> http://marc.info/?l=git&m=129007741814521&w=2\n> \n> I'm not entirely sure why it was ignored in the end, probably I did not\n> report back to have tested it in Linux.\n\nSorry that I missed it (I didn't really look too hard).\n\n> \n> A few things that I like better in my patch than in Chris':\n> \n> - Beyond Compare is added as \"bc3\" instead of \"bcompare\", which is both\n> shorter and indicates that only version 3, not version 2, is supported.\n\nv2 isn't natively available for linux, although it works quite well\nunder wine. Either way you're quite correct that v2 is not much use as a\n3-way merge tool. Trying to indicate v3 only make sense to me (at least\nuntil they release a v4 :)\n\n> - Chris seems to be missing the patch to git-gui/lib/mergetool.tcl\n\nDidn't know to add it, thanks for pointing it out. If my patch get's\npicked up I'll include it in the next round.\n\n> - To the best of my knownledge, the Beyond Compare executable is called\n> \"BCompare\" (note the case), that means even with the merge tool named\n> \"bcompare\" a translation step in git-mergetool--lib.sh should by\n> required (as done in my patch). Chris, as you seem to have tested ion\n> Linux, could you shed a light on  this?\n\nIn linux it's bcompare, although BCompare is the eventual executable\n\nchrisp@laptop:~> rpm -q --filesbypkg bcompare\nbcompare                  /usr/bin/bcompare\nbcompare                  /usr/lib/beyondcompare/BCompare\n\nUnfortunately /usr/bin/bcompare is a little more involved than a symlink\nso for linux we need to call bcompare. Do we have a nice way of handling\nthis? We could just treat them completely separate but that seems a but\nlike sweeping the problem under the carpet.\n\n> - Using dashes for the options to Beyond Compare is fine on Windows,\n\nGood to hear. I was meaning to fire up a vbox windows XP image to double\ncheck but you've saved me the hassle.\n\n> however, I believe the order of the files is wrong, although that might\n> be a bit subjective. For a 3-way merge the syntax is\n> \n> BCompare.exe C:\\Left.ext C:\\Right.ext C:\\Center.ext\n> \n> So the file that should go to the center panel is specified last. AFAIK,\n> all other merge tools are called such that $BASE goes to the center.\n> This is why my patch specifies $BASE last.\n\nI actually prefer base on the left a-la kdiff3 and araxis (and from my\nprevious life as a clearcase user). I've since found that with beyond\ncompare it is a pain to take changes from the center version so I agree\nwith your suggestion. We should probably make use of the -title options\nto remove ambiguity.\n\n> Any more opinions? Chris, in case you'd agree to prefer my patch, I'd be\n> very grateful if you could test it on Linux.\n> \n> For your convenience, I've rebased onto the current master and attached\n> the patch files.\n\nI'll give it a whirl when I get a chance. I suspect I'll need to handle\nthe BCompare/bcompare thing but that's not a huge issue.\n"},{"id":"162343","messageId":"7vhbbp6dyh.fsf@alter.siamese.dyndns.org","threadId":"26586","inReplyTo":"4D69E355.7010104@gmail.com","subject":"Re: Adding Beyond Compare as a merge tool, was: Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-02-27T09:09:42Z","receivedAt":"2011-02-27T09:09:42Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Chris Packham <judge.packham@gmail.com> writes:\n\n> In linux it's bcompare, although BCompare is the eventual executable\n>\n> chrisp@laptop:~> rpm -q --filesbypkg bcompare\n> bcompare                  /usr/bin/bcompare\n> bcompare                  /usr/lib/beyondcompare/BCompare\n>\n> Unfortunately /usr/bin/bcompare is a little more involved than a symlink\n> so for linux we need to call bcompare.\n\nThe real question is which one the end-users like git-mergetool--lib are\nexpected to call, and it looks like the \"bcompare\" in /usr/bin spelled in\nlowercase is the one.  So shouldn't we be calling that, Sebastian?\n\nAnd if we invoke lowercase \"bcompare\" on Windows, the system would do the\nright thing, no?\n"},{"id":"162352","messageId":"AANLkTimWPwCFgnAYz_jJ3Yw5QWvPNhPxq=j502UorEot@mail.gmail.com","threadId":"26586","inReplyTo":"4D69E355.7010104@gmail.com","subject":"Re: Adding Beyond Compare as a merge tool, was: Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2011-02-27T10:57:57Z","receivedAt":"2011-02-27T10:57:57Z","isPatch":false,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"On Sun, Feb 27, 2011 at 06:38, Chris Packham <judge.packham@gmail.com> wrote:\n\n> Sorry that I missed it (I didn't really look too hard).\n\nNo problem, at least this got me dig out my series again ;-)\n\n> 3-way merge tool. Trying to indicate v3 only make sense to me (at least\n> until they release a v4 :)\n\nTrue. In that case, read it as \"Beyond Compare version 3 an up\" ;-)\n\n> In linux it's bcompare, although BCompare is the eventual executable\n>\n> chrisp@laptop:~> rpm -q --filesbypkg bcompare\n> bcompare                  /usr/bin/bcompare\n> bcompare                  /usr/lib/beyondcompare/BCompare\n\nAh, OK, being on Windows I just checked the TAR.GZ file, which does\nnot contain /usr/bin/bcompare (but bcompare.sh, which probably gets\ninstalled by install.sh).\n\n> Unfortunately /usr/bin/bcompare is a little more involved than a symlink\n> so for linux we need to call bcompare. Do we have a nice way of handling\n> this? We could just treat them completely separate but that seems a but\n> like sweeping the problem under the carpet.\n\nWe could just call \"bcompare\" on Windows, too. As Windows is\ncase-insensitive, it will just work.\n\n> with your suggestion. We should probably make use of the -title options\n> to remove ambiguity.\n\nGood idea, I'll look into this.\n\n> I'll give it a whirl when I get a chance. I suspect I'll need to handle\n> the BCompare/bcompare thing but that's not a huge issue.\n\nYou could probably just wait a few minutes until I have pushed out an\nupdate for this patch.\n\n-- \nSebastian Schuberth\n"},{"id":"162353","messageId":"AANLkTikv=pGmy7NmCU2xCAq4oBnkXoGfdmNPY962gBdo@mail.gmail.com","threadId":"26586","inReplyTo":"7vhbbp6dyh.fsf@alter.siamese.dyndns.org","subject":"Re: Adding Beyond Compare as a merge tool, was: Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2011-02-27T10:58:56Z","receivedAt":"2011-02-27T10:58:56Z","isPatch":false,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"On Sun, Feb 27, 2011 at 10:09, Junio C Hamano <gitster@pobox.com> wrote:\n\n>> Unfortunately /usr/bin/bcompare is a little more involved than a symlink\n>> so for linux we need to call bcompare.\n>\n> The real question is which one the end-users like git-mergetool--lib are\n> expected to call, and it looks like the \"bcompare\" in /usr/bin spelled in\n> lowercase is the one.  So shouldn't we be calling that, Sebastian?\n>\n> And if we invoke lowercase \"bcompare\" on Windows, the system would do the\n> right thing, no?\n\nYes and yes, I'll update my patch accordingly.\n\n-- \nSebastian Schuberth\n"},{"id":"162355","messageId":"AANLkTinByZS0yQ6TNTwp74kW3yvTg8G_PQN3F99MKR2w@mail.gmail.com","threadId":"26586","inReplyTo":"AANLkTimWPwCFgnAYz_jJ3Yw5QWvPNhPxq=j502UorEot@mail.gmail.com","subject":"Re: Adding Beyond Compare as a merge tool, was: Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Sebastian Schuberth","fromEmail":"sschuberth@gmail.com","sentAt":"2011-02-27T11:15:50Z","receivedAt":"2011-02-27T11:15:50Z","isPatch":false,"sender":{"key":"sschuberth@gmail.com","avatar":"https://avatars.githubusercontent.com/u/349154?v=4"},"body":"On Sun, Feb 27, 2011 at 11:57, Sebastian Schuberth <sschuberth@gmail.com> wrote:\n\n>> with your suggestion. We should probably make use of the -title options\n>> to remove ambiguity.\n>\n> Good idea, I'll look into this.\n\nGiven that the -title options actually replace the display of the file\nname (instead of displaying the title in addition), I'd prefer not to\nmake use of these options. In fact, the file names Git uses for\nmerging already contain \"BASE\", \"LOCAL\", \"REMOTE\", so there should be\nno real need for additional titles, IMHO.\n\nI'll push out the updated series now.\n\n-- \nSebastian Schuberth\n"},{"id":"162361","messageId":"alpine.DEB.1.00.1102271509540.1561@bonsai2","threadId":"26586","inReplyTo":"20110226110740.GA3096@tugrik.mns.mnsspb.ru","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2011-02-27T14:28:43Z","receivedAt":"2011-02-27T14:28:43Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Kirill,\n\nOn Sat, 26 Feb 2011, Kirill Smelkov wrote:\n\n> On Fri, Feb 25, 2011 at 10:54:40PM +0100, Johannes Schindelin wrote:\n> > \n> > On Fri, 25 Feb 2011, Kirill Smelkov wrote:\n> > \n> > > On Fri, Feb 25, 2011 at 12:11:59PM +0100, Johannes Schindelin wrote:\n> > > \n> > > > Further, I think that my beloved Shift+Insert will no longer work \n> > > > with your [2].\n> > > \n> > > Probably yes,\n> > \n> > In my experiment after rebuilding msys-1.0.dll, it still works.\n> \n> xser32.dll has nothing to do with msys - it's just a fake stub for\n> sh.exe. Before testing, have you \"patched\" sh.exe the way it is done in\n> my ks/xser32.dll\n> (http://repo.or.cz/w/msysgit/kirr.git/commit/9d952c74a52f577b2d16d4e4a489541a8fa7fbbd)\n\nAh. I had to add -Wl,-kill-at to the LDFLAGS so it works. \n\nSee the ks/xser32 branch (and the ks/msys branch) of msysgit.git.\n\n> > The problem for now is that when I time /share/msysGit/run-tests.sh, \n> > there is hardly any gain from your patches:\n> > \n> > Old:\n> > \n> > \n> > real    18m1.031s\n> > user    6m17.861s\n> > sys     19m25.257s\n> > \n> > New:\n> > \n> > real    17m54.500s\n> > user    6m12.319s\n> > sys     19m28.567s\n> \n> Did you patch sh.exe to link to xser32.dll instead of user32.dll?\n\nNow I did, and the difference is quite noticable:\n\nreal    15m37.281s\nuser    5m6.934s\nsys     15m53.911s\n\n(Note that I did not spend time to increase the N, so there is no point in \nputting a percentage on the difference.)\n\nI wonder whether we could patch sh.exe so it loads user32.dll _lazily_ \nrather than using the xser32.dll hack?\n\n(This would also fix the issue that I can no longer use Shift+Insert to \npaste the clipboard into the Git Bash...)\n\n> Also I can't say for sure (hope yet) how sh-intensitive git tests are, \n> but at least running configure for say gettext or whatever should be \n> visibly faster, at least on wine.\n\nThey are pretty intensive, as they are shell scripts all over the place in \ntheir own right. I fear, however, that the real problem (maybe not on \nWINE, but with real Windows) is that sh.exe needs to provide too many \nPOSIX-like things when starting new processes.\n\nI fear, further, that the only way to make things more efficient on \nWindows is to get rid of the many exec() calls and do more things \nin-process. (If this is true, JGit should kick msysGit's ass.) This would \nnot apply to the test suite, though, which needs to stay a shell script \nsuite.\n\nBut maybe I am wrong, and the performance is lost through memory \nmanagement and filesystem interaction.\n\nCiao,\nDscho\n"},{"id":"163262","messageId":"20110312131646.GA14621@tugrik.mns.mnsspb.ru","threadId":"26586","inReplyTo":"alpine.DEB.1.00.1102271509540.1561@bonsai2","subject":"Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Kirill Smelkov","fromEmail":"kirr@mns.spb.ru","sentAt":"2011-03-12T13:16:47Z","receivedAt":"2011-03-12T13:16:47Z","isPatch":false,"sender":{"key":"kirr@navytux.spb.ru","avatar":"https://gravatar.com/avatar/cf3445fdad1849941e17ab25bf1ee7c5ea1be2deb444be25ff5f36b0e50a985f?d=mp&s=160"},"body":" [ Sorry for silence, completly buried under load... ]\n\nOn Sun, Feb 27, 2011 at 03:28:43PM +0100, Johannes Schindelin wrote:\n> Hi Kirill,\n> \n> On Sat, 26 Feb 2011, Kirill Smelkov wrote:\n> \n> > On Fri, Feb 25, 2011 at 10:54:40PM +0100, Johannes Schindelin wrote:\n> > > \n> > > On Fri, 25 Feb 2011, Kirill Smelkov wrote:\n> > > \n> > > > On Fri, Feb 25, 2011 at 12:11:59PM +0100, Johannes Schindelin wrote:\n> > > > \n> > > > > Further, I think that my beloved Shift+Insert will no longer work \n> > > > > with your [2].\n> > > > \n> > > > Probably yes,\n> > > \n> > > In my experiment after rebuilding msys-1.0.dll, it still works.\n> > \n> > xser32.dll has nothing to do with msys - it's just a fake stub for\n> > sh.exe. Before testing, have you \"patched\" sh.exe the way it is done in\n> > my ks/xser32.dll\n> > (http://repo.or.cz/w/msysgit/kirr.git/commit/9d952c74a52f577b2d16d4e4a489541a8fa7fbbd)\n> \n> Ah. I had to add -Wl,-kill-at to the LDFLAGS so it works. \n> \n> See the ks/xser32 branch (and the ks/msys branch) of msysgit.git.\n\nHm, strange how it used to work on my side :) but you are right, thanks.\n\n> \n> > > The problem for now is that when I time /share/msysGit/run-tests.sh, \n> > > there is hardly any gain from your patches:\n> > > \n> > > Old:\n> > > \n> > > \n> > > real    18m1.031s\n> > > user    6m17.861s\n> > > sys     19m25.257s\n> > > \n> > > New:\n> > > \n> > > real    17m54.500s\n> > > user    6m12.319s\n> > > sys     19m28.567s\n> > \n> > Did you patch sh.exe to link to xser32.dll instead of user32.dll?\n> \n> Now I did, and the difference is quite noticable:\n> \n> real    15m37.281s\n> user    5m6.934s\n> sys     15m53.911s\n\nThis is on real windows, yes?\n\n\n> (Note that I did not spend time to increase the N, so there is no point in \n> putting a percentage on the difference.)\n> \n> I wonder whether we could patch sh.exe so it loads user32.dll _lazily_ \n> rather than using the xser32.dll hack?\n> \n> (This would also fix the issue that I can no longer use Shift+Insert to \n> paste the clipboard into the Git Bash...)\n\nThe patch for bash would be simple enough to re-link it with user32.dll\n`dlltool -y` 'ed (-y creates delay-load import lobrary), or simply to\npatch lib/readline/kill.c to delay-load clipboard functions manually\nhere:\n\n    /* A special paste command for users of Cygnus's cygwin32. */\n    #if defined (__CYGWIN__)\n    #include <windows.h>\n\n    int\n    rl_paste_from_clipboard (count, key)\n         int count, key;\n    {\n      char *data, *ptr;\n      int len;\n\n      if (OpenClipboard (NULL) == 0)\n        return (0);\n\n      data = (char *)GetClipboardData (CF_TEXT);\n      if (data)\n\n    ...\n\n\nNow this is simple only after we have infrastructure for rebuilding bash\nin place, and untill we don't, something like this could help in the\nmeantime (sorry, can't test it properly under wine):\n\n---- 8< ----\nFrom 92151fe8325aa8c39e1b77b9780ed562703ba008 Mon Sep 17 00:00:00 2001\nFrom: Kirill Smelkov <kirr@mns.spb.ru>\nDate: Sat, 12 Mar 2011 15:20:19 +0300\nSubject: [PATCH] xser32: be a delay-load proxy to real user32.dll\n\nThis way we'll hopefully make clipboard work in shell again. The proper\nway is of course to rebuild sh.exe with user32 being `dlltool -y` 'ed.\n\nSigned-off-by: Kirill Smelkov <kirr@mns.spb.ru>\n---\n src/xser32/Makefile   |    3 +-\n src/xser32/release.sh |    2 +-\n src/xser32/xser32.c   |   61 ++++++++++++++++++++++++++++++++++++++++++++++--\n 3 files changed, 61 insertions(+), 5 deletions(-)\n\ndiff --git a/src/xser32/Makefile b/src/xser32/Makefile\nindex 818ab49..f201768 100644\n--- a/src/xser32/Makefile\n+++ b/src/xser32/Makefile\n@@ -2,9 +2,10 @@ CC      = gcc\n CFLAGS  = -Wall -Wwrite-strings\n LD      = gcc\n LDFLAGS = -nostdlib -Wl,-kill-at\n+LIBS    = -lkernel32\n \n xser32.dll: xser32.o\n-\t$(LD) $(LDFLAGS) -shared -o $@ $^ -e _DllMain@12\n+\t$(LD) $(LDFLAGS) -shared -o $@ $^ -e _DllMain@12 $(LIBS)\n \n clean:\n \t-rm -f xser32.o xser32.dll\ndiff --git a/src/xser32/release.sh b/src/xser32/release.sh\nindex 981f5e8..64e31b4 100644\n--- a/src/xser32/release.sh\n+++ b/src/xser32/release.sh\n@@ -5,4 +5,4 @@ cd \"$(dirname \"$0\")\" &&\n make &&\n install -m 775 xser32.dll $DEST &&\n git add $DEST &&\n-git commit -s -m \"xser32.dll: Fake user32.dll like stub (for sh.exe not to load user32.dll)\" $DEST\n+git commit -s -m \"xser32.dll: Delay-load proxy to real user32.dll (for sh.exe not to load user32.dll on every call)\" $DEST\ndiff --git a/src/xser32/xser32.c b/src/xser32/xser32.c\nindex 27375ab..362a80b 100644\n--- a/src/xser32/xser32.c\n+++ b/src/xser32/xser32.c\n@@ -1,22 +1,77 @@\n /* fake clipboard routines for sh.exe not to load user32.dll */\n #include <windef.h>\n+#include <stdarg.h>\n+#include <winbase.h>\n+\n+static HMODULE user32;\n+\n+static void die(const char *msg)\n+{\n+    const char *p;\n+    DWORD msglen;\n+    DWORD written;\n+\n+    /* hand-made strlen */\n+    for (p=msg, msglen=0; *p; ++p, ++msglen)\n+        ;\n+\n+    WriteFile (GetStdHandle (STD_ERROR_HANDLE), msg, msglen, &written, 0);\n+    ExitProcess(1);\n+}\n+\n+static void import_user32()\n+{\n+    if (user32)\n+        return;\n+\n+    user32 = LoadLibrary(\"user32.dll\");\n+    if (!user32)\n+        die(\"E: cannot load user32.dll\\n\");\n+}\n \n __declspec(dllexport)\n BOOL WINAPI OpenClipboard(HWND hWndNewOwner)\n {\n-    return FALSE;   /* always fails */\n+    static BOOL WINAPI (*pOpenClipboard) (HWND);\n+\n+    if (!pOpenClipboard) {\n+        import_user32();\n+        pOpenClipboard = GetProcAddress(user32, \"OpenClipboard\");\n+        if (!pOpenClipboard)\n+            die(\"E: cannot import OpenClipboard from user32.dll\\n\");\n+    }\n+\n+    return pOpenClipboard(hWndNewOwner);\n }\n \n __declspec(dllexport)\n BOOL WINAPI CloseClipboard(void)\n {\n-    return TRUE;    /* ok */\n+    static BOOL WINAPI (*pCloseClipboard) (void);\n+\n+    if (!pCloseClipboard) {\n+        import_user32();\n+        pCloseClipboard = GetProcAddress(user32, \"CloseClipboard\");\n+        if (!pCloseClipboard)\n+            die(\"E: cannot import CloseClipboard from user32.dll\\n\");\n+    }\n+\n+    return pCloseClipboard();\n }\n \n __declspec(dllexport)\n HANDLE WINAPI GetClipboardData(UINT uFormat)\n {\n-    return NULL;    /* always fail */\n+    static HANDLE WINAPI (*pGetClipboardData) (UINT);\n+\n+    if (!pGetClipboardData) {\n+        import_user32();\n+        pGetClipboardData = GetProcAddress(user32, \"GetClipboardData\");\n+        if (!pGetClipboardData)\n+            die(\"E: cannot import GetClipboardData from user32.dll\\n\");\n+    }\n+\n+    return GetClipboardData(uFormat);\n }\n \n \n-- \n1.7.4.1.225.g83c3c\n\n---- 8< ----\n\n\n> \n> > Also I can't say for sure (hope yet) how sh-intensitive git tests are, \n> > but at least running configure for say gettext or whatever should be \n> > visibly faster, at least on wine.\n> \n> They are pretty intensive, as they are shell scripts all over the place in \n> their own right.\n\nYes, thanks, your timing justifies that.\n\n> I fear, however, that the real problem (maybe not on \n> WINE, but with real Windows) is that sh.exe needs to provide too many \n> POSIX-like things when starting new processes.\n> \n> I fear, further, that the only way to make things more efficient on \n> Windows is to get rid of the many exec() calls and do more things \n> in-process. (If this is true, JGit should kick msysGit's ass.) This would \n> not apply to the test suite, though, which needs to stay a shell script \n> suite.\n> \n> But maybe I am wrong, and the performance is lost through memory \n> management and filesystem interaction.\n\nI'd say we should not fear and we should not guess. The user32.dll\nstripping was low-hanging-fruit, and judging from it I'd say there\nshould be other such places where time is wasted because nobody cared\nyet.\n\nOnly could we please move forward, and try to integrate somehow the\nresult to devel? Or else I fear we'll have too many half-done work/* branches...\n\n> Ciao,\n> Dscho\n\nThanks,\nKirill\n"},{"id":"163263","messageId":"20110312131831.GB14621@tugrik.mns.mnsspb.ru","threadId":"26586","inReplyTo":"alpine.DEB.1.00.1102262056030.1561@bonsai2","subject":"Re: cross-compiling msys-1.0.dll, was Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Kirill Smelkov","fromEmail":"kirr@mns.spb.ru","sentAt":"2011-03-12T13:18:31Z","receivedAt":"2011-03-12T13:18:31Z","isPatch":false,"sender":{"key":"kirr@navytux.spb.ru","avatar":"https://gravatar.com/avatar/cf3445fdad1849941e17ab25bf1ee7c5ea1be2deb444be25ff5f36b0e50a985f?d=mp&s=160"},"body":"On Sat, Feb 26, 2011 at 08:58:16PM +0100, Johannes Schindelin wrote:\n> Hi,\n> \n> On Sat, 26 Feb 2011, Kirill Smelkov wrote:\n> \n> > On Sat, Feb 26, 2011 at 02:07:40PM +0300, Kirill Smelkov wrote:\n> > \n> > > On Fri, Feb 25, 2011 at 10:54:40PM +0100, Johannes Schindelin wrote:\n> > > > > > And lastly, in [2] you claim that you cross-built msys-1.0.dll. \n> > > > > > I would like to have a script doing that in msysgit.git.\n> > > > > \n> > > > > This is in progress. Preliminary stuff (cross-built msys.dll no \n> > > > > longer needs mingwm10.dll), is here:\n> > > > > \n> > > > > http://repo.or.cz/w/msys/kirr.git/shortlog/refs/heads/x/kirr\n> > > > > http://repo.or.cz/w/msysgit/kirr.git/shortlog/refs/heads/ks/crossmsys\n> > > > \n> > > > Thanks, I will try to find some time to test this next week.\n> > > \n> > > Please don't - it does not build out of the box from msysgit yet. I \n> > > just wanted to show it is not staying stale. When it is finished, I'll \n> > > let you know.\n> > \n> > Done. Please do\n> > \n> >     git pull git://repo.or.cz/msysgit/kirr.git ks/crossmsys     # into msys\n> \n> This is beautiful work. I will keep this as my candy tomorrow, because I \n> still have to finish something else (after which I want to provide myself \n> with some reward).\n\nSo how was it, tasteful? :)\n\nThanks,\nKirill\n"},{"id":"163264","messageId":"alpine.DEB.1.00.1103121610280.1561@bonsai2","threadId":"26586","inReplyTo":"20110312131831.GB14621@tugrik.mns.mnsspb.ru","subject":"Re: cross-compiling msys-1.0.dll, was Re: What's cooking in git.git (Feb 2011, #05; Wed, 23)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2011-03-12T15:38:40Z","receivedAt":"2011-03-12T15:38:40Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sat, 12 Mar 2011, Kirill Smelkov wrote:\n\n> On Sat, Feb 26, 2011 at 08:58:16PM +0100, Johannes Schindelin wrote:\n> > Hi,\n> > \n> > On Sat, 26 Feb 2011, Kirill Smelkov wrote:\n> > \n> > > On Sat, Feb 26, 2011 at 02:07:40PM +0300, Kirill Smelkov wrote:\n> > > \n> > > > On Fri, Feb 25, 2011 at 10:54:40PM +0100, Johannes Schindelin wrote:\n> > > > > > > And lastly, in [2] you claim that you cross-built msys-1.0.dll. \n> > > > > > > I would like to have a script doing that in msysgit.git.\n> > > > > > \n> > > > > > This is in progress. Preliminary stuff (cross-built msys.dll no \n> > > > > > longer needs mingwm10.dll), is here:\n> > > > > > \n> > > > > > http://repo.or.cz/w/msys/kirr.git/shortlog/refs/heads/x/kirr\n> > > > > > http://repo.or.cz/w/msysgit/kirr.git/shortlog/refs/heads/ks/crossmsys\n> > > > > \n> > > > > Thanks, I will try to find some time to test this next week.\n> > > > \n> > > > Please don't - it does not build out of the box from msysgit yet. I \n> > > > just wanted to show it is not staying stale. When it is finished, I'll \n> > > > let you know.\n> > > \n> > > Done. Please do\n> > > \n> > >     git pull git://repo.or.cz/msysgit/kirr.git ks/crossmsys     # into msys\n> > \n> > This is beautiful work. I will keep this as my candy tomorrow, because I \n> > still have to finish something else (after which I want to provide myself \n> > with some reward).\n> \n> So how was it, tasteful? :)\n\nYep, but I got interrupted, and did not have time to come back yet. Please \nbear with me for a few more days!\n\nCiao,\nDscho\n"}]}