{"thread":{"id":"12603","subject":"What's cooking in git.git (topics)","startedAt":"2008-03-09T10:46:24Z","lastAt":"2010-12-14T14:21:55Z","messageCount":368,"participants":["Junio C Hamano","Johannes Schindelin","Samuel Tardieu","Steffen Prohaska","Govind Salinas","Kristian Høgsberg","Jeff King","Lars Hjemli","Brandon Casey","Ping Yin","Josef Weidendorfer","Michele Ballabio","Fedor Sergeev","Robin Rosenberg","Daniel Barkalow","Stephan Beyer","Jon Loeliger","Steven Grimm","Jakub Narebski","Sebastian Bober","Shawn O. Pearce","Johan Herland","Miklos Vajna","Pieter de Bie","しらいしななこ","Theodore Tso","Tommi Virtanen","Olivier Marin","Linus Torvalds","Johannes Sixt","Andrew Morton","Petr Baudis","Clifford Caoile","Stephen Rothwell","Thomas Rast","Marius Storm-Olsen","Nanako Shiraishi","Peter Harris","Abhijit Menon-Sen","Edward Z. Yang"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"71506","messageId":"7vlk4snpj3.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":null,"subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-09T10:46:24Z","receivedAt":"2008-03-09T10:46:24Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\n----------------------------------------------------------------\n[New Topics]\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n\n----------------------------------------------------------------\n[Graduated to 'master']\n\n* dp/clean-fix (Fri Mar 7 21:56:56 2008 -0800) 7 commits\n + git-clean: add tests for relative path\n + git-clean: correct printing relative path\n + Make private quote_path() in wt-status.c available as\n   quote_path_relative()\n + Revert part of d089eba (setup: sanitize absolute and funny paths\n   in get_pathspec())\n + Revert part of 1abf095 (git-add: adjust to the get_pathspec()\n   changes)\n + Revert part of 744dacd (builtin-mv: minimum fix to avoid losing\n   files)\n + get_pathspec(): die when an out-of-tree path is given\n\n* sp/fetch-optim (Mon Mar 3 22:27:40 2008 -0500) 11 commits\n + Teach git-fetch to exploit server side automatic tag following\n + Teach fetch-pack/upload-pack about --include-tag\n + git-pack-objects: Automatically pack annotated tags if object was\n   packed\n + Teach git-fetch to grab a tag at the same time as a commit\n + Make git-fetch follow tags we already have objects for sooner\n + Teach upload-pack to log the received need lines to an fd\n + Free the path_lists used to find non-local tags in git-fetch\n + Allow builtin-fetch's find_non_local_tags to append onto a list\n + Ensure tail pointer gets setup correctly when we fetch HEAD only\n + Remove unnecessary delaying of free_refs(ref_map) in builtin-fetch\n + Remove unused variable in builtin-fetch find_non_local_tags\n\n* ml/submodule-add-existing (Tue Mar 4 20:15:02 2008 -0500) 1 commit\n + git-submodule - Allow adding a submodule in-place\n\n* jc/describe-always (Sun Mar 2 08:51:57 2008 -0800) 1 commit\n + describe --always: fall back to showing an abbreviated object name\n\n* aw/maint-shortlog-blank-lines (Wed Mar 5 14:24:10 2008 +0000) 1 commit\n + shortlog: take the first populated line of the description\n\n* jn/gitweb-pickaxe (Wed Mar 5 09:31:55 2008 +0100) 1 commit\n + gitweb: Fix and simplify pickaxe search\n\n* cr/reset-parseopt (Tue Mar 4 23:11:34 2008 +0100) 1 commit\n + Make builtin-reset.c use parse_options.\n\n* mr/compat-snprintf (Wed Mar 5 16:46:13 2008 +0100) 1 commit\n + Add compat/snprintf.c for systems that return bogus\n\n* jc/am (Tue Mar 4 00:25:06 2008 -0800) 3 commits\n + am: --rebasing\n + am: remove support for -d .dotest\n + am: read from the right mailbox when started from a subdirectory\n\n* ph/parseopt (Sun Mar 2 11:35:56 2008 +0100) 2 commits\n + parse-options: new option type to treat an option-like parameter\n   as an argument.\n + parse-opt: bring PARSE_OPT_HIDDEN and NONEG to git-rev-parse --\n   parseopt\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* lt/unpack-trees (Fri Mar 7 13:48:40 2008 -0800) 10 commits\n + unpack_trees(): minor memory leak fix in unused destination index\n + Make 'unpack_trees()' have a separate source and destination index\n + Make 'unpack_trees()' take the index to work on as an argument\n + Add 'const' where appropriate to index handling functions\n + Fix tree-walking compare_entry() in the presense of --prefix\n + Move 'unpack_trees()' over to 'traverse_trees()' interface\n + Make 'traverse_trees()' traverse conflicting DF entries in\n   parallel\n + Add return value to 'traverse_tree()' callback\n + Make 'traverse_tree()' use linked structure rather than 'const\n   char *base'\n + Add 'df_name_compare()' helper function\n\n* js/remote (Sat Mar 8 23:40:42 2008 +0100) 8 commits\n + builtin remote rm: remove symbolic refs, too\n + remote: fix \"update [group...]\"\n + remote show: Clean up connection correctly if object fetch wasn't\n   done\n + builtin-remote: prune remotes correctly that were added with --\n   mirror\n + Make git-remote a builtin\n + Test \"git remote show\" and \"git remote prune\"\n + parseopt: add flag to stop on first non option\n + path-list: add functions to work with unsorted lists\n\nSlated for 1.5.5, but probably needs more time to mature.\n\n* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits\n + t5300: add test for \"index-pack --strict\"\n + receive-pack: allow using --strict mode for unpacking objects\n + unpack-objects: fix --strict handling\n + t5300: add test for \"unpack-objects --strict\"\n + unpack-objects: prevent writing of inconsistent objects\n\nThis would re-instate the \"unpack-objects --strict\" but we probably should\nnot do this before 1.5.5.\n\n* py/submodule (Sat Mar 8 02:27:19 2008 +0800) 4 commits\n - git-submodule summary: documentation\n - git-submodule summary: limit summary size\n - git-submodule summary: show commit summary\n - git-submodule summary: code framework\n\nLooking better.  With tests it should be mergeable to 'next'.\n\n----------------------------------------------------------------\n[On Hold]\n\n* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits\n - Additional tests to capture worktree special cases\n - Documentation: update api-builtin and api-setup\n - Make setup_git_directory() auto-setup worktree if found\n - builtin-archive: mark unused prefix \"unused_prefix\"\n - Completely move out worktree setup from\n   setup_git_directory_gently()\n - http-push: Avoid calling setup_git_directory() twice\n - Make setup_work_tree() return new prefix\n - Make get_git_dir() and 'git rev-parse --git-dir' absolute path\n - Make sure setup_git_directory is called before accessing\n   repository\n - \"git read-tree -m\" and the like require worktree\n\nEvery time we touch work-tree stuff we seem to unstabilize; this round\nseems more solid but I am still treading cautiously.  Not sure if we want\nthis for 1.5.5.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\n* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits\n - diffcore-rename: make file_table available outside exact rename\n   detection\n + Optimize rename detection for a huge diff\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n - diff: make --dirstat binary-file safe\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n - Teach GIT-VERSION-GEN about the .git file\n - Teach git-submodule.sh about the .git file\n - Teach resolve_gitlink_ref() about the .git file\n - Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  I am not sure if we should merge this to\n'next' before 1.5.5.  Most active people will be on 'next' and\nif we have this there, the resulting 1.5.5 release might end up\nhaving issues that come from differences this one introduces.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n - sha1-lookup: make selection of 'middle' less aggressive\n - sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 5 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n + expose a helper function peel_to_type().\n + merge-recursive: split low-level merge functions out.\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n"},{"id":"71792","messageId":"7vwso85qkf.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vlk4snpj3.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-12T07:50:24Z","receivedAt":"2008-03-12T07:50:24Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\n----------------------------------------------------------------\n[New Topics]\n\n* cc/help (Tue Mar 11 08:51:12 2008 +0100) 3 commits\n + help: implement multi-valued \"man.viewer\" config option\n + Documentation: help: describe 'man.viewer' config variable\n + help: add \"man.viewer\" config var to use \"woman\" or \"konqueror\"\n\n* ph/maint-quiltimport (Sat Mar 8 19:27:09 2008 +0100) 1 commit\n + git-quiltimport: better parser to grok \"enhanced\" series files.\n\n* mr/autoconf-fread (Tue Mar 11 09:48:34 2008 +0100) 1 commit\n + autoconf: Test FREAD_READS_DIRECTORIES\n\n* db/diff-to-fp (Mon Mar 10 13:58:26 2008 -0400) 2 commits\n - wt-status.c: no need for dup() dance anymore\n - Write diff output to a file in struct diff_options\n\nAll of these can be in 1.5.5 (they may or may not need fix-ups); let's\nclose the 1.5.5 merge window now with these.\n\n----------------------------------------------------------------\n[Graduated to 'master']\n\n* lt/unpack-trees (Fri Mar 7 13:48:40 2008 -0800) 10 commits\n + unpack_trees(): minor memory leak fix in unused destination index\n + Make 'unpack_trees()' have a separate source and destination index\n + Make 'unpack_trees()' take the index to work on as an argument\n + Add 'const' where appropriate to index handling functions\n + Fix tree-walking compare_entry() in the presense of --prefix\n + Move 'unpack_trees()' over to 'traverse_trees()' interface\n + Make 'traverse_trees()' traverse conflicting DF entries in\n   parallel\n + Add return value to 'traverse_tree()' callback\n + Make 'traverse_tree()' use linked structure rather than 'const\n   char *base'\n + Add 'df_name_compare()' helper function\n\n* js/remote (Sat Mar 8 23:40:42 2008 +0100) 9 commits\n + \"remote update\": print remote name being fetched from\n + builtin remote rm: remove symbolic refs, too\n + remote: fix \"update [group...]\"\n + remote show: Clean up connection correctly if object fetch wasn't\n   done\n + builtin-remote: prune remotes correctly that were added with --\n   mirror\n + Make git-remote a builtin\n + Test \"git remote show\" and \"git remote prune\"\n + parseopt: add flag to stop on first non option\n + path-list: add functions to work with unsorted lists\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* py/submodule (Tue Mar 11 21:52:19 2008 +0800) 5 commits\n + git-submodule summary: test\n + git-submodule summary: documentation\n + git-submodule summary: limit summary size\n + git-submodule summary: show commit summary\n + git-submodule summary: code framework\n\nI didn't see anybody very supportive for this series, but I do not think\nthis regresses existing other subcommands to \"git submodule\", so let's\nmerge this to 'master' before 1.5.5 and see how useful submodule users\nfind this.\n\n----------------------------------------------------------------\n[On Hold]\n\n* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits\n - Additional tests to capture worktree special cases\n - Documentation: update api-builtin and api-setup\n - Make setup_git_directory() auto-setup worktree if found\n - builtin-archive: mark unused prefix \"unused_prefix\"\n - Completely move out worktree setup from\n   setup_git_directory_gently()\n - http-push: Avoid calling setup_git_directory() twice\n - Make setup_work_tree() return new prefix\n - Make get_git_dir() and 'git rev-parse --git-dir' absolute path\n - Make sure setup_git_directory is called before accessing\n   repository\n - \"git read-tree -m\" and the like require worktree\n\nEvery time we touch work-tree stuff we seem to unstabilize; this round\nseems more solid but I am still treading cautiously.  Not sure if we want\nthis for 1.5.5.\n\n* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits\n + t5300: add test for \"index-pack --strict\"\n + receive-pack: allow using --strict mode for unpacking objects\n + unpack-objects: fix --strict handling\n + t5300: add test for \"unpack-objects --strict\"\n + unpack-objects: prevent writing of inconsistent objects\n\nThis would re-instate the \"unpack-objects --strict\" but we probably should\nnot do this before 1.5.5.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\n* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits\n - diffcore-rename: make file_table available outside exact rename\n   detection\n + Optimize rename detection for a huge diff\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n - diff: make --dirstat binary-file safe\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n - Teach GIT-VERSION-GEN about the .git file\n - Teach git-submodule.sh about the .git file\n - Teach resolve_gitlink_ref() about the .git file\n - Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  I am not sure if we should merge this to\n'next' before 1.5.5.  Most active people will be on 'next' and\nif we have this there, the resulting 1.5.5 release might end up\nhaving issues that come from differences this one introduces.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n - sha1-lookup: make selection of 'middle' less aggressive\n - sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"71802","messageId":"alpine.LSU.1.00.0803121316360.1656@racer.site","threadId":"12603","inReplyTo":"7vwso85qkf.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-03-12T12:18:50Z","receivedAt":"2008-03-12T12:18:50Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 12 Mar 2008, Junio C Hamano wrote:\n\n> * nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits\n>  - Additional tests to capture worktree special cases\n>  - Documentation: update api-builtin and api-setup\n>  - Make setup_git_directory() auto-setup worktree if found\n>  - builtin-archive: mark unused prefix \"unused_prefix\"\n>  - Completely move out worktree setup from\n>    setup_git_directory_gently()\n>  - http-push: Avoid calling setup_git_directory() twice\n>  - Make setup_work_tree() return new prefix\n>  - Make get_git_dir() and 'git rev-parse --git-dir' absolute path\n>  - Make sure setup_git_directory is called before accessing\n>    repository\n>  - \"git read-tree -m\" and the like require worktree\n> \n> Every time we touch work-tree stuff we seem to unstabilize; this round \n> seems more solid but I am still treading cautiously.  Not sure if we \n> want this for 1.5.5.\n\nI am sure we do not want this for 1.5.5.\n\nIt is too complicated a patch series to be obviously correct, and as I \nsaid earlier, a few design goals are not to my liking, such as trying to \nseparate git_dir from work_tree logic with a sledgehammer.\n\nCiao,\nDscho\n"},{"id":"72049","messageId":"7vwso5r87q.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vwso85qkf.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-14T09:00:25Z","receivedAt":"2008-03-14T09:00:25Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nThe merge window for 1.5.5 is closed as of tonight, except for the\npromised git-gui (0.10) and gitk updates, and topics still cooking in\n'next', and 1.5.5-rc0 will be tagged shortly.\n\nAfter that we will have quite a lot of regression fixes ahead of us, I am\nafraid.  Since v1.5.4, a few commands have been reimplemented or made\nbuilt-ins (checkout, remote, merge-recursive), and these inevitably\ninvolve \"growing pains\".\n\nWhile I am reasonably confident that we have long caught showstopper\nregressions in key features of these commands while they were cooking in\n'next', I am sure there would remain regressions here and there in the\nperiphery.  It is unavoidable.  POSIX-only people may say \"why rewrite, if\nit involves this much pain\", but like it or not, there are people stuck on\nunfortunate platforms that cannot run scripted versions well enough.\n\nLet's see if our regular contributors are as good at fixing their own\nscrew-ups as they are good at coming up with new code, and hope that we\ncan keep this rc cycle manageably short.  Touch wood...\n\n----------------------------------------------------------------\n[New Topics]\n\n* jc/makefile (Wed Mar 12 01:46:26 2008 -0700) 2 commits\n - Makefile: flatten enumeration of headers, objects and programs\n - Makefile: DIFF_OBJS is not special at all these days\n\nI promised to do this immediately after -rc0, so this will shortly be in\n'next' and then in 'master'.\n\n* jk/portable (Wed Mar 12 17:42:43 2008 -0400) 13 commits\n + t7505: use SHELL_PATH in hook\n + t9112: add missing #!/bin/sh header\n + filter-branch: use $SHELL_PATH instead of 'sh'\n + filter-branch: don't use xargs -0\n + add NO_EXTERNAL_GREP build option\n + t6000lib: tr portability fix\n + t4020: don't use grep -a\n + add test_cmp function for test scripts\n + remove use of \"tail -n 1\" and \"tail -1\"\n + grep portability fix: don't use \"-e\" or \"-q\"\n + more tr portability test script fixes\n + t0050: perl portability fix\n + tr portability fixes\n\nInitially triggered by Solaris porting effort but these are harmless\nportability changes.  Perhaps in 1.5.5, perhaps immediately after that.\n\n----------------------------------------------------------------\n[Dropped]\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n . tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n . tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n----------------------------------------------------------------\n[Graduated to 'master']\n\n* ph/maint-quiltimport (Wed Mar 12 21:07:19 2008 -0700) 2 commits\n + quiltimport: fix misquoting of parsed -p<num> parameter\n + git-quiltimport: better parser to grok \"enhanced\" series files.\n\n* mr/autoconf-fread (Tue Mar 11 09:48:34 2008 +0100) 1 commit\n + autoconf: Test FREAD_READS_DIRECTORIES\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* cc/help (Thu Mar 13 19:15:30 2008 -0700) 6 commits\n + Documentation/git-help: typofix\n + help: warn if specified 'man.viewer' is unsupported, instead of\n   erroring out\n + Documentation: help: explain 'man.viewer' multiple values\n + help: implement multi-valued \"man.viewer\" config option\n + Documentation: help: describe 'man.viewer' config variable\n + help: add \"man.viewer\" config var to use \"woman\" or \"konqueror\"\n\n* db/diff-to-fp (Mon Mar 10 13:58:26 2008 -0400) 2 commits\n + wt-status.c: no need for dup() dance anymore\n + Write diff output to a file in struct diff_options\n\n* py/submodule (Wed Mar 12 09:30:01 2008 +0100) 6 commits\n + git-submodule summary: fix that some \"wc\" flavors produce leading\n   spaces\n + git-submodule summary: test\n + git-submodule summary: documentation\n + git-submodule summary: limit summary size\n + git-submodule summary: show commit summary\n + git-submodule summary: code framework\n\nI didn't see anybody very supportive for this series, but I do not think\nthis regresses existing other subcommands to \"git submodule\", so let's\nmerge this to 'master' before 1.5.5 and see how useful submodule users\nfind this.\n\n----------------------------------------------------------------\n[On Hold]\n\n* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits\n - Additional tests to capture worktree special cases\n - Documentation: update api-builtin and api-setup\n - Make setup_git_directory() auto-setup worktree if found\n - builtin-archive: mark unused prefix \"unused_prefix\"\n - Completely move out worktree setup from\n   setup_git_directory_gently()\n - http-push: Avoid calling setup_git_directory() twice\n - Make setup_work_tree() return new prefix\n - Make get_git_dir() and 'git rev-parse --git-dir' absolute path\n - Make sure setup_git_directory is called before accessing\n   repository\n - \"git read-tree -m\" and the like require worktree\n\nEvery time we touch work-tree stuff we seem to unstabilize; this round\nseems more solid but I am still treading cautiously.  Not sure if we want\nthis for 1.5.5.\n\n* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits\n + t5300: add test for \"index-pack --strict\"\n + receive-pack: allow using --strict mode for unpacking objects\n + unpack-objects: fix --strict handling\n + t5300: add test for \"unpack-objects --strict\"\n + unpack-objects: prevent writing of inconsistent objects\n\nThis would re-instate the \"unpack-objects --strict\" but we probably should\nnot do this before 1.5.5.\n\n* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits\n - diffcore-rename: make file_table available outside exact rename\n   detection\n + Optimize rename detection for a huge diff\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n - diff: make --dirstat binary-file safe\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n - Teach GIT-VERSION-GEN about the .git file\n - Teach git-submodule.sh about the .git file\n - Teach resolve_gitlink_ref() about the .git file\n - Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  I am not sure if we should merge this to\n'next' before 1.5.5.  Most active people will be on 'next' and\nif we have this there, the resulting 1.5.5 release might end up\nhaving issues that come from differences this one introduces.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n - sha1-lookup: make selection of 'middle' less aggressive\n - sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"72730","messageId":"7v8x0992hy.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vwso5r87q.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-23T10:08:25Z","receivedAt":"2008-03-23T10:08:25Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nSince we tagged -rc0, we've seen regression fixes at a reasonable rate.\nAt -rc1 tonight, I think we are fairly in good shape.\n\n----------------------------------------------------------------\n[New Topics]\n\n* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits\n + send-email: Don't require to be called in a repository\n + Git.pm: Don't require repository instance for ident\n + Git.pm: Don't require a repository instance for config\n + var: Don't require to be in a git repository.\n\nPeople couldn't invoke \"git send-email\" from outside their repositories,\nbut this series allows them to.  I do not think it is urgent, though.\nThis does not look risky, even though it touches Git.pm that is shared\nwith other things.  This has been cooking in 'next' for some time and we\nhaven't heard about breakages caused by this.  Will probably be the first\nthing to be merged in 'master' post 1.5.5.\n\n* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit\n + rebase [--onto O] A B: omit needless checkout\n\nWe used to \"git checkout B && git rebase A\" internally to implement this,\nwhich meant the work tree was smudged one time too many.  This is probably\na safe optimization, but it case after -rc0 and is not really a must-have\nfix.  One of the first after post 1.5.5.\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n - Make git-add behave more sensibly in a case-insensitive\n   environment\n - When adding files to the index, add support for case-independent\n   matches\n - Make unpack-tree update removed files before any updated files\n - Make branch merging aware of underlying case-insensitive\n   filsystems\n - Add 'core.ignorecase' option\n - Make hash_name_lookup able to do case-independent lookups\n - Make \"index_name_exists()\" return the cache_entry it found\n - Move name hashing functions into a file of its own\n - Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of ASCII-only case insensitive filesystem support.  It is\nnot complete yet, though.  E.g. if you enable core.ignorecase in t0050,\nthe merge test fails.\n\n* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit\n + pretty.c: add %x00 format specifier.\n\nAdds a generic \"insert any byte value\" to --pretty=format:<> specifier.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n - \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this, but because I have met no real user with shared repository\nworkflow who complained on this issue, I think this is not urgent.\n\n----------------------------------------------------------------\n[Graduated to 'master']\n\n* cc/help (Thu Mar 13 19:15:30 2008 -0700) 6 commits\n + Documentation/git-help: typofix\n + help: warn if specified 'man.viewer' is unsupported, instead of\n   erroring out\n + Documentation: help: explain 'man.viewer' multiple values\n + help: implement multi-valued \"man.viewer\" config option\n + Documentation: help: describe 'man.viewer' config variable\n + help: add \"man.viewer\" config var to use \"woman\" or \"konqueror\"\n\nThere are some leftover bits posted after -rc0, but I think they can\nwait.\n\n* db/diff-to-fp (Mon Mar 10 13:58:26 2008 -0400) 2 commits\n + wt-status.c: no need for dup() dance anymore\n + Write diff output to a file in struct diff_options\n\n* py/submodule (Wed Mar 12 09:30:01 2008 +0100) 6 commits\n + git-submodule summary: fix that some \"wc\" flavors produce leading\n   spaces\n + git-submodule summary: test\n + git-submodule summary: documentation\n + git-submodule summary: limit summary size\n + git-submodule summary: show commit summary\n + git-submodule summary: code framework\n\nI didn't see anybody very supportive for this series, but I do not think\nthis regresses existing other subcommands to \"git submodule\", so let's see\nhow useful submodule users find this.  Maybe they have improvement ideas\nfor its output before we decide post 1.5.5 if it is a good idea to include\nit in \"git status\" output.\n\n* jc/makefile (Wed Mar 12 01:46:26 2008 -0700) 2 commits\n - Makefile: flatten enumeration of headers, objects and programs\n - Makefile: DIFF_OBJS is not special at all these days\n\nI promised to do this immediately after -rc0, so this will shortly be in\n'next' and then in 'master'.\n\n* jk/portable (Wed Mar 12 17:42:43 2008 -0400) 13 commits\n + t7505: use SHELL_PATH in hook\n + t9112: add missing #!/bin/sh header\n + filter-branch: use $SHELL_PATH instead of 'sh'\n + filter-branch: don't use xargs -0\n + add NO_EXTERNAL_GREP build option\n + t6000lib: tr portability fix\n + t4020: don't use grep -a\n + add test_cmp function for test scripts\n + remove use of \"tail -n 1\" and \"tail -1\"\n + grep portability fix: don't use \"-e\" or \"-q\"\n + more tr portability test script fixes\n + t0050: perl portability fix\n + tr portability fixes\n\nInitially triggered by Solaris porting effort but these are harmless\nportability changes.  Perhaps in 1.5.5, perhaps immediately after that.\n\n----------------------------------------------------------------\n[Dropped]\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n . tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n . tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits\n . Additional tests to capture worktree special cases\n . Documentation: update api-builtin and api-setup\n . Make setup_git_directory() auto-setup worktree if found\n . builtin-archive: mark unused prefix \"unused_prefix\"\n . Completely move out worktree setup from\n   setup_git_directory_gently()\n . http-push: Avoid calling setup_git_directory() twice\n . Make setup_work_tree() return new prefix\n . Make get_git_dir() and 'git rev-parse --git-dir' absolute path\n . Make sure setup_git_directory is called before accessing\n   repository\n . \"git read-tree -m\" and the like require worktree\n\nEvery time we touch work-tree stuff we seem to have unstabilized things.\nThis is excluded from 'pu' for now although I still have copies.\n\n----------------------------------------------------------------\n[On Hold]\n\n* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits\n + t5300: add test for \"index-pack --strict\"\n + receive-pack: allow using --strict mode for unpacking objects\n + unpack-objects: fix --strict handling\n + t5300: add test for \"unpack-objects --strict\"\n + unpack-objects: prevent writing of inconsistent objects\n\nThis would re-instate the \"unpack-objects --strict\" but we probably should\nnot do this before 1.5.5.\n\n* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits\n - diffcore-rename: make file_table available outside exact rename\n   detection\n + Optimize rename detection for a huge diff\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n - diff: make --dirstat binary-file safe\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n - Teach GIT-VERSION-GEN about the .git file\n - Teach git-submodule.sh about the .git file\n - Teach resolve_gitlink_ref() about the .git file\n - Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  I am not sure if we should merge this to\n'next' before 1.5.5.  Most active people will be on 'next' and\nif we have this there, the resulting 1.5.5 release might end up\nhaving issues that come from differences this one introduces.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n - sha1-lookup: make selection of 'middle' less aggressive\n - sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"72735","messageId":"2008-03-23-13-00-28+trackit+sam@rfc1149.net","threadId":"12603","inReplyTo":"7v8x0992hy.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Samuel Tardieu","fromEmail":"sam@rfc1149.net","sentAt":"2008-03-23T12:00:28Z","receivedAt":"2008-03-23T12:00:28Z","isPatch":false,"sender":{"key":"sam@rfc1149.net","avatar":"https://avatars.githubusercontent.com/u/44656?v=4"},"body":"I don't see your MIME/Content-Type fix in the list (adding the\nrequired headers even in presence of user headers). Did I overlook\nsomething?\n\n  Sam\n-- \nSamuel Tardieu -- sam@rfc1149.net -- http://www.rfc1149.net/\n"},{"id":"72739","messageId":"alpine.OSX.1.00.0803231334210.11994@cougar","threadId":"12603","inReplyTo":"7v8x0992hy.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-03-23T12:39:59Z","receivedAt":"2008-03-23T12:39:59Z","isPatch":false,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"On Sun, 23 Mar 2008, Junio C Hamano wrote:\n\n> * lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n>  - Make git-add behave more sensibly in a case-insensitive\n>    environment\n>  - When adding files to the index, add support for case-independent\n>    matches\n>  - Make unpack-tree update removed files before any updated files\n>  - Make branch merging aware of underlying case-insensitive\n>    filsystems\n>  - Add 'core.ignorecase' option\n>  - Make hash_name_lookup able to do case-independent lookups\n>  - Make \"index_name_exists()\" return the cache_entry it found\n>  - Move name hashing functions into a file of its own\n>  - Make unpack_trees_options bit flags actual bitfields\n> \n> The beginning of ASCII-only case insensitive filesystem support.  It is\n> not complete yet, though.  E.g. if you enable core.ignorecase in t0050,\n> the merge test fails.\n\nThe merge test passes for me (on hfs+).  The \"git mv\" test still fails;\nLinus made clear that \"git mv\" is not yet fixed.\n\n            Steffen\n"},{"id":"72780","messageId":"7v4pax8iqc.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"2008-03-23-13-00-28+trackit+sam@rfc1149.net","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-23T17:15:23Z","receivedAt":"2008-03-23T17:15:23Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Samuel Tardieu <sam@rfc1149.net> writes:\n\n> I don't see your MIME/Content-Type fix in the list (adding the\n> required headers even in presence of user headers). Did I overlook\n> something?\n\nDo you mean 6bf4f1b (format-patch: generate MIME header as needed even\nwhen there is format.header, 2008-03-14)?\n"},{"id":"72783","messageId":"7vve3d734z.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.OSX.1.00.0803231334210.11994@cougar","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-23T17:37:32Z","receivedAt":"2008-03-23T17:37:32Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Steffen Prohaska <prohaska@zib.de> writes:\n\n> The merge test passes for me (on hfs+).  The \"git mv\" test still fails;\n> Linus made clear that \"git mv\" is not yet fixed.\n\nI was actually talking about the case with your patch applied to t0050 on\ncase sensitive systems.\n"},{"id":"72811","messageId":"5d46db230803231406x132e748bm306494ec5f8dfd2b@mail.gmail.com","threadId":"12603","inReplyTo":"7v8x0992hy.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Govind Salinas","fromEmail":"blix@sophiasuchtig.com","sentAt":"2008-03-23T21:06:25Z","receivedAt":"2008-03-23T21:06:25Z","isPatch":false,"sender":{"key":"blix@sophiasuchtig.com","avatar":null},"body":"On Sun, Mar 23, 2008 at 5:08 AM, Junio C Hamano <gitster@pobox.com> wrote:\n>\n>  * gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit\n>   + pretty.c: add %x00 format specifier.\n>\n>  Adds a generic \"insert any byte value\" to --pretty=format:<> specifier.\n>\nI also sent out the following patch that could be put in instead of or in\naddition to this one.  The both solve my problem in different ways.\n\nThanks,\nGovind.\n\n---\nFrom: Govind Salinas <blix@sophiasuchtig.com>\nDate: Sun, 23 Mar 2008 16:02:11 -0500\nSubject: [PATCH] log-tree.c:  Make log_tree_diff_flush() honor line_termination.\n\nSigned-off-by: Govind Salinas <blix@sophiasuchtig.com>\n---\n log-tree.c |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/log-tree.c b/log-tree.c\nindex 608f697..5f55683 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -338,7 +338,7 @@ int log_tree_diff_flush(struct rev_info *opt)\n \t\t\tint pch = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_PATCH;\n \t\t\tif ((pch & opt->diffopt.output_format) == pch)\n \t\t\t\tprintf(\"---\");\n-\t\t\tputchar('\\n');\n+\t\t\tputchar(opt->diffopt.line_termination);\n \t\t}\n \t}\n \tdiff_flush(&opt->diffopt);\n-- \n1.5.4.4.550.g77e21.dirty\n"},{"id":"72824","messageId":"2008-03-23-23-34-54+trackit+sam@rfc1149.net","threadId":"12603","inReplyTo":"7v4pax8iqc.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Samuel Tardieu","fromEmail":"sam@rfc1149.net","sentAt":"2008-03-23T22:34:54Z","receivedAt":"2008-03-23T22:34:54Z","isPatch":false,"sender":{"key":"sam@rfc1149.net","avatar":"https://avatars.githubusercontent.com/u/44656?v=4"},"body":">>>>> \"Junio\" == Junio C Hamano <gitster@pobox.com> writes:\n\nJunio> Do you mean 6bf4f1b (format-patch: generate MIME header as\nJunio> needed even when there is format.header, 2008-03-14)?\n\nYup. I hadn't seen it was in master and main already :)\n\n  Sam\n-- \nSamuel Tardieu -- sam@rfc1149.net -- http://www.rfc1149.net/\n"},{"id":"72851","messageId":"7vprtk3jwg.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"5d46db230803231406x132e748bm306494ec5f8dfd2b@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-24T03:01:19Z","receivedAt":"2008-03-24T03:01:19Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Govind Salinas\" <blix@sophiasuchtig.com> writes:\n\n> I also sent out the following patch that could be put in instead of...\n\nI had an impression that that change would break the existing output that\nsomebody other than you are depending on.\n\nI personally think it is plausible that everybody wants the new behaviour\nyour patch propose, but that kind of change is not appropriate for 1.5.5\ncycle (might be Ok for 1.6.0 after we see agreements on the list), and\ndefinitely not something we would want to apply after -rc0.\n"},{"id":"73233","messageId":"7vd4pf7h9y.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7v8x0992hy.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-28T01:45:45Z","receivedAt":"2008-03-28T01:45:45Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\n----------------------------------------------------------------\n[New Topics]\n\n* dd/cvsserver (Thu Mar 27 23:18:35 2008 +0100) 7 commits\n - cvsserver: Use the user part of the email in log and annotate\n   results\n - cvsserver: Add test for update -p\n - cvsserver: Implement update -p (print to stdout)\n - cvsserver: Add a few tests for 'status' command\n - cvsserver: Do not include status output for subdirectories if -l\n   is passed\n - cvsserver: Only print the file part of the filename in status\n   header\n - cvsserver: Respond to the 'editors' and 'watchers' commands\n\nThe changes seem clean and should affect only locking related client\ncommands, so even though this is a new _feature_, I am inclined to merge\nthis in 1.5.5.  Testing by interested parties are encouraged.\n\n* mb/prune (Mon Mar 24 23:20:51 2008 -0700) 4 commits\n + builtin-prune: protect objects listed on the command line\n + builtin-prune.c: use parse_options()\n + Add tests for git-prune\n + parse-options.c: introduce OPT_DATE\n\n\"git prune $this $that\" lost its ability to protect $this and $that from\ngetting pruned when it was rewritten in C; this attempts to resurrect it.\nThis maybe is 1.5.5 material.\n\n* jk/add-i-mode (Thu Mar 27 03:32:25 2008 -0400) 2 commits\n + add--interactive: allow user to choose mode update\n + add--interactive: ignore mode change in 'p'atch command\n\nNew feature, will probably be part of the release after 1.5.5\n\n* gp/gitweb (Wed Mar 26 18:11:19 2008 +0000) 1 commit\n + gitweb: fallback to system-wide config file if default config does\n   not exist\n\nNew feature, will probably be part of the release after 1.5.5\n\n----------------------------------------------------------------\n[On Hold]\n\n* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit\n + pretty.c: add %x00 format specifier.\n\nAdds a generic \"insert any byte value\" to --pretty=format:<> specifier.\nNew feature, will probably be part of the release after 1.5.5\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n - \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this, but because I have met no real user with shared repository\nworkflow who complained on this issue, I think this is not urgent.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits\n + send-email: Don't require to be called in a repository\n + Git.pm: Don't require repository instance for ident\n + Git.pm: Don't require a repository instance for config\n + var: Don't require to be in a git repository.\n\nPeople couldn't invoke \"git send-email\" from outside their repositories,\nbut this series allows them to.  I do not think it is urgent, though.\nThis does not look risky, even though it touches Git.pm that is shared\nwith other things.  This has been cooking in 'next' for some time and we\nhaven't heard about breakages caused by this.  Will probably be the first\nthing to be merged in 'master' post 1.5.5.\n\n* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit\n + rebase [--onto O] A B: omit needless checkout\n\nWe used to \"git checkout B && git rebase A\" internally to implement this,\nwhich meant the work tree was smudged one time too many.  This is probably\na safe optimization, but it case after -rc0 and is not really a must-have\nfix.  One of the first after post 1.5.5.\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n - Make git-add behave more sensibly in a case-insensitive\n   environment\n - When adding files to the index, add support for case-independent\n   matches\n - Make unpack-tree update removed files before any updated files\n - Make branch merging aware of underlying case-insensitive\n   filsystems\n - Add 'core.ignorecase' option\n - Make hash_name_lookup able to do case-independent lookups\n - Make \"index_name_exists()\" return the cache_entry it found\n - Move name hashing functions into a file of its own\n - Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of ASCII-only case insensitive filesystem support.\n\n* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits\n + t5300: add test for \"index-pack --strict\"\n + receive-pack: allow using --strict mode for unpacking objects\n + unpack-objects: fix --strict handling\n + t5300: add test for \"unpack-objects --strict\"\n + unpack-objects: prevent writing of inconsistent objects\n\nThis would re-instate the \"unpack-objects --strict\" but we probably should\nnot do this before 1.5.5.\n\n* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits\n - diffcore-rename: make file_table available outside exact rename\n   detection\n + Optimize rename detection for a huge diff\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n - diff: make --dirstat binary-file safe\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n - Teach GIT-VERSION-GEN about the .git file\n - Teach git-submodule.sh about the .git file\n - Teach resolve_gitlink_ref() about the .git file\n - Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  I am not sure if we should merge this to\n'next' before 1.5.5.  Most active people will be on 'next' and\nif we have this there, the resulting 1.5.5 release might end up\nhaving issues that come from differences this one introduces.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n - sha1-lookup: make selection of 'middle' less aggressive\n - sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"73423","messageId":"7vwsnjl21c.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vd4pf7h9y.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-03-31T08:40:15Z","receivedAt":"2008-03-31T08:40:15Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\n----------------------------------------------------------------\n[New Topics]\n\n* bc/mktag (Thu Mar 27 11:16:04 2008 -0500) 1 commit\n + mktag.c: improve verification of tagger field and tests\n\nThis is not very urgent but not complex nor risky enough to be worth\nholding back.  Will merge before 1.5.5.\n\n* je/cvsserver (Thu Mar 27 14:02:14 2008 -0700) 1 commit\n + Allow git-cvsserver database table name prefix to be specified.\n\nThe changes seem clean; even though this is a new _feature_, I am inclined\nto merge this in 1.5.5.  Testing by interested parties are encouraged.\n\n* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n - filter-branch.sh: support nearly proper tag name filtering\n\nNew feature, will probably be part of the release after 1.5.5\n\n* js/filter-branch (Mon Mar 31 09:14:15 2008 +0200) 2 commits\n + filter-branch: Fix renaming a directory in the tree-filter\n + filter-branch: Test renaming directories in a tree-filter\n\nFix for 1.5.5; I ran out of time this weekend to merge this.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* mb/prune (Mon Mar 24 23:20:51 2008 -0700) 4 commits\n + builtin-prune: protect objects listed on the command line\n + builtin-prune.c: use parse_options()\n + Add tests for git-prune\n + parse-options.c: introduce OPT_DATE\n\n\"git prune $this $that\" lost its ability to protect $this and $that from\ngetting pruned when it was rewritten in C; this attempts to resurrect it.\nThis maybe is 1.5.5 material.\n\n----------------------------------------------------------------\n[Actively cooking]\n\n* dd/cvsserver (Thu Mar 27 23:18:35 2008 +0100) 7 commits\n + cvsserver: Use the user part of the email in log and annotate\n   results\n + cvsserver: Add test for update -p\n + cvsserver: Implement update -p (print to stdout)\n + cvsserver: Add a few tests for 'status' command\n + cvsserver: Do not include status output for subdirectories if -l\n   is passed\n + cvsserver: Only print the file part of the filename in status\n   header\n + cvsserver: Respond to the 'editors' and 'watchers' commands\n\nThe changes seem clean and should affect only locking related client\ncommands, so even though this is a new _feature_, I am inclined to merge\nthis in 1.5.5.  Testing by interested parties are encouraged.\n\n* pb/cvsserver (Sun Mar 16 20:00:21 2008 +0100) 1 commit\n + git-cvsserver: handle change type T\n\nThis should be 1.5.5 material.\n\n----------------------------------------------------------------\n[On Hold]\n\n* jk/add-i-mode (Thu Mar 27 03:32:25 2008 -0400) 2 commits\n + add--interactive: allow user to choose mode update\n + add--interactive: ignore mode change in 'p'atch command\n\nNew feature, will probably be part of the release after 1.5.5\n\n* gp/gitweb (Wed Mar 26 18:11:19 2008 +0000) 1 commit\n + gitweb: fallback to system-wide config file if default config does\n   not exist\n\nNew feature, will probably be part of the release after 1.5.5\n\n* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit\n + pretty.c: add %x00 format specifier.\n\nAdds a generic \"insert any byte value\" to --pretty=format:<> specifier.\nNew feature, will probably be part of the release after 1.5.5\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n - \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this, but because I have met no real user with shared repository\nworkflow who complained on this issue, I think this is not urgent.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits\n + send-email: Don't require to be called in a repository\n + Git.pm: Don't require repository instance for ident\n + Git.pm: Don't require a repository instance for config\n + var: Don't require to be in a git repository.\n\nPeople couldn't invoke \"git send-email\" from outside their repositories,\nbut this series allows them to.  I do not think it is urgent, though.\nThis does not look risky, even though it touches Git.pm that is shared\nwith other things.  This has been cooking in 'next' for some time and we\nhaven't heard about breakages caused by this.  Will probably be the first\nthing to be merged in 'master' post 1.5.5.\n\n* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit\n + rebase [--onto O] A B: omit needless checkout\n\nWe used to \"git checkout B && git rebase A\" internally to implement this,\nwhich meant the work tree was smudged one time too many.  This is probably\na safe optimization, but it case after -rc0 and is not really a must-have\nfix.  One of the first after post 1.5.5.\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n - Make git-add behave more sensibly in a case-insensitive\n   environment\n - When adding files to the index, add support for case-independent\n   matches\n - Make unpack-tree update removed files before any updated files\n - Make branch merging aware of underlying case-insensitive\n   filsystems\n - Add 'core.ignorecase' option\n - Make hash_name_lookup able to do case-independent lookups\n - Make \"index_name_exists()\" return the cache_entry it found\n - Move name hashing functions into a file of its own\n - Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of ASCII-only case insensitive filesystem support.\n\n* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits\n + t5300: add test for \"index-pack --strict\"\n + receive-pack: allow using --strict mode for unpacking objects\n + unpack-objects: fix --strict handling\n + t5300: add test for \"unpack-objects --strict\"\n + unpack-objects: prevent writing of inconsistent objects\n\nThis would re-instate the \"unpack-objects --strict\" but we probably should\nnot do this before 1.5.5.\n\n* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits\n - diffcore-rename: make file_table available outside exact rename\n   detection\n + Optimize rename detection for a huge diff\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n - diff: make --dirstat binary-file safe\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n - Teach GIT-VERSION-GEN about the .git file\n - Teach git-submodule.sh about the .git file\n - Teach resolve_gitlink_ref() about the .git file\n - Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  I am not sure if we should merge this to\n'next' before 1.5.5.  Most active people will be on 'next' and\nif we have this there, the resulting 1.5.5 release might end up\nhaving issues that come from differences this one introduces.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n - sha1-lookup: make selection of 'middle' less aggressive\n - sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"73660","messageId":"7vhcehzdeg.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vwsnjl21c.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-04T18:24:39Z","receivedAt":"2008-04-04T18:24:39Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nWith a handful topics graduated to \"master\", we hopefully will have the\nfinal 1.5.5 soon.\n\n----------------------------------------------------------------\n[New Topics]\n\n* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits\n - contrib/hooks: add an example pre-auto-gc hook\n - Documentation/hooks: add pre-auto-gc hook\n - git-gc --auto: add pre-auto-gc hook\n\nA new hook to stop \"git gc --auto\" from running.\n\n* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n - filter-branch.sh: support nearly proper tag name filtering\n\nNew feature, will probably be part of the release after 1.5.5\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* bc/mktag (Thu Mar 27 11:16:04 2008 -0500) 1 commit\n + mktag.c: improve verification of tagger field and tests\n\n* je/cvsserver (Thu Mar 27 14:02:14 2008 -0700) 1 commit\n + Allow git-cvsserver database table name prefix to be specified.\n\n* dd/cvsserver (Thu Mar 27 23:18:35 2008 +0100) 7 commits\n + cvsserver: Use the user part of the email in log and annotate\n   results\n + cvsserver: Add test for update -p\n + cvsserver: Implement update -p (print to stdout)\n + cvsserver: Add a few tests for 'status' command\n + cvsserver: Do not include status output for subdirectories if -l\n   is passed\n + cvsserver: Only print the file part of the filename in status\n   header\n + cvsserver: Respond to the 'editors' and 'watchers' commands\n\n* pb/cvsserver (Sun Mar 16 20:00:21 2008 +0100) 1 commit\n + git-cvsserver: handle change type T\n\n* js/filter-branch (Mon Mar 31 09:14:15 2008 +0200) 2 commits\n + filter-branch: Fix renaming a directory in the tree-filter\n + filter-branch: Test renaming directories in a tree-filter\n\n----------------------------------------------------------------\n[On Hold]\n\n* jk/add-i-mode (Thu Mar 27 03:32:25 2008 -0400) 2 commits\n + add--interactive: allow user to choose mode update\n + add--interactive: ignore mode change in 'p'atch command\n\nNew feature, will probably be part of the release after 1.5.5\n\n* gp/gitweb (Wed Mar 26 18:11:19 2008 +0000) 1 commit\n + gitweb: fallback to system-wide config file if default config does\n   not exist\n\nNew feature, will probably be part of the release after 1.5.5\n\n* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit\n + pretty.c: add %x00 format specifier.\n\nAdds a generic \"insert any byte value\" to --pretty=format:<> specifier.\nNew feature, will probably be part of the release after 1.5.5\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n - \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this, but because I have met no real user with shared repository\nworkflow who complained on this issue, I think this is not urgent.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits\n + send-email: Don't require to be called in a repository\n + Git.pm: Don't require repository instance for ident\n + Git.pm: Don't require a repository instance for config\n + var: Don't require to be in a git repository.\n\nPeople couldn't invoke \"git send-email\" from outside their repositories,\nbut this series allows them to.  I do not think it is urgent, though.\nThis does not look risky, even though it touches Git.pm that is shared\nwith other things.  This has been cooking in 'next' for some time and we\nhaven't heard about breakages caused by this.  Will probably be the first\nthing to be merged in 'master' post 1.5.5.\n\n* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit\n + rebase [--onto O] A B: omit needless checkout\n\nWe used to \"git checkout B && git rebase A\" internally to implement this,\nwhich meant the work tree was smudged one time too many.  This is probably\na safe optimization, but it case after -rc0 and is not really a must-have\nfix.  One of the first after post 1.5.5.\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n - Make git-add behave more sensibly in a case-insensitive\n   environment\n - When adding files to the index, add support for case-independent\n   matches\n - Make unpack-tree update removed files before any updated files\n - Make branch merging aware of underlying case-insensitive\n   filsystems\n - Add 'core.ignorecase' option\n - Make hash_name_lookup able to do case-independent lookups\n - Make \"index_name_exists()\" return the cache_entry it found\n - Move name hashing functions into a file of its own\n - Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of ASCII-only case insensitive filesystem support.\n\n* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits\n + t5300: add test for \"index-pack --strict\"\n + receive-pack: allow using --strict mode for unpacking objects\n + unpack-objects: fix --strict handling\n + t5300: add test for \"unpack-objects --strict\"\n + unpack-objects: prevent writing of inconsistent objects\n\nThis would re-instate the \"unpack-objects --strict\" but we probably should\nnot do this before 1.5.5.\n\n* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits\n - diffcore-rename: make file_table available outside exact rename\n   detection\n + Optimize rename detection for a huge diff\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n - diff: make --dirstat binary-file safe\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n - Teach GIT-VERSION-GEN about the .git file\n - Teach git-submodule.sh about the .git file\n - Teach resolve_gitlink_ref() about the .git file\n - Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n - sha1-lookup: make selection of 'middle' less aggressive\n - sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"73664","messageId":"1207340506.10992.28.camel@gaara.boston.redhat.com","threadId":"12603","inReplyTo":"7vhcehzdeg.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Kristian Høgsberg","fromEmail":"krh@redhat.com","sentAt":"2008-04-04T20:21:46Z","receivedAt":"2008-04-04T20:21:46Z","isPatch":false,"sender":{"key":"krh@redhat.com","avatar":"https://gravatar.com/avatar/763dee6f9594ac474f725b137a39565792928e583ddf59b32befc2907409027e?d=mp&s=160"},"body":"On Fri, 2008-04-04 at 11:24 -0700, Junio C Hamano wrote:\n> Here are the topics that have been cooking.  Commits prefixed\n> with '-' are only in 'pu' while commits prefixed with '+' are\n> in 'next'.\n> \n> The topics list the commits in reverse chronological order.\n> \n> With a handful topics graduated to \"master\", we hopefully will have\n> the\n> final 1.5.5 soon.\n\nWhat happened to builtin-clone?  I know I just threw it over the fence,\nbut Daniel picked it up and got it a lot closer to working?  Did it fall\nthrough the cracks or is it just 1.5.6 material?\n\nKristian\n"},{"id":"73667","messageId":"7vzls9xs05.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1207340506.10992.28.camel@gaara.boston.redhat.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-04T20:52:10Z","receivedAt":"2008-04-04T20:52:10Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Kristian Høgsberg <krh@redhat.com> writes:\n\n> On Fri, 2008-04-04 at 11:24 -0700, Junio C Hamano wrote:\n>> Here are the topics that have been cooking.  Commits prefixed\n>> with '-' are only in 'pu' while commits prefixed with '+' are\n>> in 'next'.\n>> \n>> The topics list the commits in reverse chronological order.\n>> \n>> With a handful topics graduated to \"master\", we hopefully will have the\n>> final 1.5.5 soon.\n>\n> What happened to builtin-clone?\n\nNothing.\n\n> ... I know I just threw it over the fence,\n> but Daniel picked it up and got it a lot closer to working?  Did it fall\n> through the cracks or is it just 1.5.6 material?\n\nIf I recall correctly, \"a lot closer to working\" happened way after 1.5.5\nmerge window closed, so it definitely is not 1.5.5 material.\n\nJudging from the fact that we recently had to deal with the fallouts of C\nrewrites that happened during the 1.5.4 timeframe, I would have to say\nthat any C rewrite of a substantial and important program needs to be\ncooked at least for one (or preferably two cycles, especially we are\ntrying to have shorter cycles) in 'next'.\n\nSo at this point, I optimistically say that it has a good chance of being\ndeeply in 'next' and all the active git people would hopefully be using\nit, by the time 1.5.6 (or perhaps that is named 1.6.0, depending on what\nelse we will do) ships, but I cannot say much more than that.  It very\nmuch depends on how hard the code has been scrutinized already at this\npoint; I haven't personally looked at it in any serious depth yet.\n"},{"id":"73679","messageId":"alpine.LSU.1.00.0804050221000.4008@racer.site","threadId":"12603","inReplyTo":"7vzls9xs05.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-04-05T00:26:53Z","receivedAt":"2008-04-05T00:26:53Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 4 Apr 2008, Junio C Hamano wrote:\n\n> Kristian Høgsberg <krh@redhat.com> writes:\n> \n> > ... I know I just threw it over the fence, but Daniel picked it up and \n> > got it a lot closer to working?  Did it fall through the cracks or is \n> > it just 1.5.6 material?\n> \n> If I recall correctly, \"a lot closer to working\" happened way after \n> 1.5.5 merge window closed, so it definitely is not 1.5.5 material.\n> \n> Judging from the fact that we recently had to deal with the fallouts of \n> C rewrites that happened during the 1.5.4 timeframe, I would have to say \n> that any C rewrite of a substantial and important program needs to be \n> cooked at least for one (or preferably two cycles, especially we are \n> trying to have shorter cycles) in 'next'.\n\nThat would mean that you'd have to merge it into 'next'.  And rather \nsooner than later, since everything else would lead to a dragging out of \nthe timeline.\n\nAs it happens, until you called out the 'please test master' phase, I was \nrunning with builtin clone, and did not find it lacking.  Although I have \nto admit that I have some cleanups, and I haven't merged with Daniel in a \nlong time.  And I do not do anything particularly fancy, such as shallow \nclone or shared clone.\n\nCiao,\nDscho \"who hopes that the please-test-master phase is over soon\""},{"id":"73688","messageId":"7vmyo8yhl2.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.LSU.1.00.0804050221000.4008@racer.site","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-05T05:51:53Z","receivedAt":"2008-04-05T05:51:53Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> On Fri, 4 Apr 2008, Junio C Hamano wrote:\n>\n>> Judging from the fact that we recently had to deal with the fallouts of \n>> C rewrites that happened during the 1.5.4 timeframe, I would have to say \n>> that any C rewrite of a substantial and important program needs to be \n>> cooked at least for one (or preferably two cycles, especially we are \n>> trying to have shorter cycles) in 'next'.\n>\n> That would mean that you'd have to merge it into 'next'.  And rather \n> sooner than later, since everything else would lead to a dragging out of \n> the timeline.\n\nYes, which means somebody needs to present a mergeable history rather\nsooner than later, and that somebody does not have to be me ;-)\n"},{"id":"73938","messageId":"7vbq4j748l.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vhcehzdeg.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-09T09:43:38Z","receivedAt":"2008-04-09T09:43:38Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nCaution. \"next\" has been rebuilt with the remaining topics on top of\n\"master\".  \"maint\" is still for 1.5.4.X maintenance track for tonight.\n\nA rough timeline from now on.\n\n * Brown paper back fixes, if any, for 1.5.5.1 (2008-04-16).\n\n * Discussion and review on new feature and enhancement patch series\n   begins.  Please resubmit things that you were cooking in your head\n   during 1.5.5-rc period after cleaning up and retesting.\n\n * 1.5.6 merge window closes (2008-05-14).\n\n * Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).\n\n * 1.5.6 Final (2008-06-08).\n\n----------------------------------------------------------------\n[New Topics]\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits\n - merge: remove deprecated summary and diffstat options and config\n   variables\n - merge, pull: add '--(no-)log' command line option\n - fmt-merge-msg: add '--(no-)log' options and 'merge.log' config\n   variable\n - add 'merge.stat' config variable\n - merge, pull: introduce '--(no-)stat' option\n - doc: moved merge.* config variables into separate merge-config.txt\n\nI tried to fix its too-eager deprecation.  The last one needs re-review;\nit should remove \"these are still supported but will be removed\" comments\nthat earlier ones add, and must be held back until 1.6.0 or later.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n - git-blame --reverse\n - builtin-blame.c: allow more than 16 parents\n - builtin-blame.c: move prepare_final() into a separate function.\n - rev-list --children\n - revision traversal: --children option\n\nThe reverse blame I talked about earlier.\n\n* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 3 commits\n - diff-files: mark an index entry we know is up-to-date as such\n - write_index(): optimize ce_smudge_racily_clean_entry() calls with\n   CE_UPTODATE\n - lstat: introduce a wrapper xlstat\n\nFurther reduce redundant lstat(2) calls during \"git status\" and other\ncommon operations.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit\n + rebase [--onto O] A B: omit needless checkout\n\nWe used to \"git checkout B && git rebase A\" internally to implement this,\nwhich meant the work tree was smudged one time too many.\n\n* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit\n + pretty.c: add %x00 format specifier.\n\nAdds a generic \"insert any byte value\" to --pretty=format:<> specifier.\n\n* jk/add-i-mode (Thu Mar 27 03:32:25 2008 -0400) 2 commits\n + add--interactive: allow user to choose mode update\n + add--interactive: ignore mode change in 'p'atch command\n\nAllows mode change \"pseudo hunk\" to be staged separately.\n\nNOTE NOTE NOTE!  It might be interesting to extend the idea of this patch\nto treat \"new file\" as a pseudo hunk to record the much talked about\n\"intent to add\".  That is, add a new command (or a new submode to patch\nsubcommand) that lets you add a file that is so far untracked, but only\nwith its mode and e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 which is the\nblob object name for an _empty_ blob.  After such an operation is done,\n\"git diff\" will show the new contents of the file you build in your work\ntree that you _could_ commit with \"git commit -a\".\n\n* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits\n + send-email: Don't require to be called in a repository\n + Git.pm: Don't require repository instance for ident\n + Git.pm: Don't require a repository instance for config\n + var: Don't require to be in a git repository.\n\nPeople couldn't invoke \"git send-email\" from outside their repositories,\nbut this series allows them to.\n\n* mk/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits\n + t5300: add test for \"index-pack --strict\"\n + receive-pack: allow using --strict mode for unpacking objects\n + unpack-objects: fix --strict handling\n + t5300: add test for \"unpack-objects --strict\"\n + unpack-objects: prevent writing of inconsistent objects\n\nThis would re-instate the \"unpack-objects --strict\".\n\n* gp/gitweb (Sat Apr 5 16:37:18 2008 +0000) 2 commits\n + gitweb: fallback to system-wide config file (fixup)\n + gitweb: fallback to system-wide config file if default config does\n   not exist\n\n* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 1 commit\n + Optimize rename detection for a huge diff\n\nThis makes memory consumption of the rename detection operation for a huge\ndiff (that is, a change that touches many many files).  I've been running\nwith this for quite a while in my day-job repository without adverse\neffects.\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits\n + contrib/hooks: add an example pre-auto-gc hook\n + Documentation/hooks: add pre-auto-gc hook\n + git-gc --auto: add pre-auto-gc hook\n\nA new hook to stop \"git gc --auto\" from running.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.  There recently was a problem report that had a scent of this\nissue which turned out to be a false alarm (it was about http-push which\ndoes not do the native pack protocol optimization and the reporter was\npushing into an empty repository which needs full transfer anyway).\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n + diff: make --dirstat binary-file safe\n\nThe current \"dirstat\" does totally wrong thing when the set of files\nchanged includes a binary one.  This uses the same similarity evaluation\ncode as rename heuristics uses to treat text and binary the same way.\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n + Make git-add behave more sensibly in a case-insensitive\n   environment\n + When adding files to the index, add support for case-independent\n   matches\n + Make unpack-tree update removed files before any updated files\n + Make branch merging aware of underlying case-insensitive\n   filsystems\n + Add 'core.ignorecase' option\n + Make hash_name_lookup able to do case-independent lookups\n + Make \"index_name_exists()\" return the cache_entry it found\n + Move name hashing functions into a file of its own\n + Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of case insensitive filesystem support, currently\nASCII-only.\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n + Teach GIT-VERSION-GEN about the .git file\n + Teach git-submodule.sh about the .git file\n + Teach resolve_gitlink_ref() about the .git file\n + Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n + sha1-lookup: make selection of 'middle' less aggressive\n + sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven, so let's prove\nit or revert it by giving it a bit more exposure.\n\n----------------------------------------------------------------\n[On Hold]\n\nSome of these will start moving to \"next\", some I may have to ask for\nclean-up and resubmission for further discussion.  Also the topics raised\nduring the 1.5.5-rc freeze period should be rebased, cleaned-up and\nresubmit for discussion and review for inclusion in 1.5.6.\n\n* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n - filter-branch.sh: support nearly proper tag name filtering\n\nInstead of discarding signed tags, this demotes them to simply annotated,\nwhich is technically not that different from signed tags.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* jc/rename-file-table (Fri Mar 7 14:03:19 2008 -0800) 1 commit\n - diffcore-rename: make file_table available outside exact rename\n   detection\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"74319","messageId":"7vr6d8apjx.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vbq4j748l.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-14T07:00:50Z","receivedAt":"2008-04-14T07:00: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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nCaution. \"next\" has been rebuilt with the remaining topics on top of\n\"master\".\n\nA rough timeline from now on.\n\n * Brown paper back fixes, if any, for 1.5.5.1 (2008-04-16).\n\n * Discussion and review on new feature and enhancement patch series\n   begins.  Please resubmit things that you were cooking in your head\n   during 1.5.5-rc period after cleaning up and retesting.\n\n * 1.5.6 merge window closes (2008-05-14).\n\n * Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).\n\n * 1.5.6 Final (2008-06-08).\n\n----------------------------------------------------------------\n[New Topics]\n\n* mk/color (Wed Apr 9 21:32:06 2008 +0200) 1 commit\n + Use color.ui variable in scripts too\n\n* jk/remote-default-show (Wed Apr 9 11:15:51 2008 -0400) 1 commit\n + git-remote: show all remotes with \"git remote show\"\n\n* jc/terminator-separator (Mon Apr 7 17:11:34 2008 -0700) 1 commit\n + log: teach \"terminator\" vs \"separator\" mode to \"--pretty=format\"\n\n* js/decorate (Mon Apr 7 14:41:12 2008 +0100) 2 commits\n - pretty=format: Add %d to show decoration\n - decorate: use \"const struct object\"\n\n* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit\n + git-fetch: always show status of non-tracking-ref fetches\n\n* py/submodule (Sat Apr 12 23:05:33 2008 +0800) 3 commits\n + builtin-status: Add tests for submodule summary\n + builtin-status: submodule summary support\n + git-submodule summary: --for-status option\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits\n - merge: remove deprecated summary and diffstat options and config\n   variables\n + merge, pull: add '--(no-)log' command line option\n + fmt-merge-msg: add '--(no-)log' options and 'merge.log' config\n   variable\n + add 'merge.stat' config variable\n + merge, pull: introduce '--(no-)stat' option\n + doc: moved merge.* config variables into separate merge-config.txt\n\nI fixed its too-eager deprecation.  The last one needs to be held back, as\nit actually removes the support for features that the main part of the\nseries deprecates, until 1.6.0 or later.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.\n\n* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits\n + diff-files: mark an index entry we know is up-to-date as such\n + write_index(): optimize ce_smudge_racily_clean_entry() calls with\n   CE_UPTODATE\n\nFurther reduce redundant lstat(2) calls during \"git status\" and other\ncommon operations.\n\n* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits\n + contrib/hooks: add an example pre-auto-gc hook\n + Documentation/hooks: add pre-auto-gc hook\n + git-gc --auto: add pre-auto-gc hook\n\nA new hook to stop \"git gc --auto\" from running.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.  There recently was a problem report that had a scent of this\nissue which turned out to be a false alarm (it was about http-push which\ndoes not do the native pack protocol optimization and the reporter was\npushing into an empty repository which needs full transfer anyway).\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n + diff: make --dirstat binary-file safe\n\nThe current \"dirstat\" does totally wrong thing when the set of files\nchanged includes a binary one.  This uses the same similarity evaluation\ncode as rename heuristics uses to treat text and binary the same way.\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n + Make git-add behave more sensibly in a case-insensitive\n   environment\n + When adding files to the index, add support for case-independent\n   matches\n + Make unpack-tree update removed files before any updated files\n + Make branch merging aware of underlying case-insensitive\n   filsystems\n + Add 'core.ignorecase' option\n + Make hash_name_lookup able to do case-independent lookups\n + Make \"index_name_exists()\" return the cache_entry it found\n + Move name hashing functions into a file of its own\n + Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of case insensitive filesystem support, currently\nASCII-only.\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n + Teach GIT-VERSION-GEN about the .git file\n + Teach git-submodule.sh about the .git file\n + Teach resolve_gitlink_ref() about the .git file\n + Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n + sha1-lookup: make selection of 'middle' less aggressive\n + sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven, so let's prove\nit or revert it by giving it a bit more exposure.\n\n----------------------------------------------------------------\n[On Hold]\n\n* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n - filter-branch.sh: support nearly proper tag name filtering\n\nInstead of discarding signed tags, this demotes them to simply annotated,\nwhich is technically not that different from signed tags.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* jc/rename-file-table (Fri Mar 7 14:03:19 2008 -0800) 1 commit\n - diffcore-rename: make file_table available outside exact rename\n   detection\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 3 commits\n - lstat: introduce a wrapper xlstat\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"74470","messageId":"20080415192301.GD31395@sigill.intra.peff.net","threadId":"12603","inReplyTo":"7vr6d8apjx.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2008-04-15T19:23:02Z","receivedAt":"2008-04-15T19:23:02Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Mon, Apr 14, 2008 at 12:00:50AM -0700, Junio C Hamano wrote:\n\n> * jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit\n>  + git-fetch: always show status of non-tracking-ref fetches\n\nI have been out of touch for a few days. My plan had been to come back\nwith a new version that suppressed the status on pull, but I haven't\nseen anyone screaming about the change, so maybe it should just be left.\n\n-Peff\n"},{"id":"74749","messageId":"7vhcdyfe9u.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vr6d8apjx.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-19T08:19:09Z","receivedAt":"2008-04-19T08:19:09Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nCaution. \"next\" has been rebuilt with the remaining topics on top of\n\"master\".\n\nA rough timeline from now on.\n\n * 1.5.5.1 this Sunday, with what's in 'maint' tonight.\n\n * Discussion and review on new feature and enhancement patch series\n   begins.  Please resubmit things that you were cooking in your head\n   during 1.5.5-rc period after cleaning up and retesting.\n\n * 1.5.6 merge window closes (2008-05-14).\n\n * Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).\n\n * 1.5.6 Final (2008-06-08).\n\n----------------------------------------------------------------\n[New Topics]\n\n* ho/shared (Wed Apr 16 11:34:24 2008 +0300) 1 commit\n + Make core.sharedRepository more generic\n\nLooked Ok, and will start cooking soon.\n\n* pb/remote-mirror-config (Thu Apr 17 13:17:20 2008 +0200) 1 commit\n - Add a remote.*.mirror configuration option\n\nI haven't gave this very careful review yet.\n\n* ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits\n - git-svn: add documentation for --add-author-from option.\n - git-svn: Add --add-author-from option.\n - git-svn: add documentation for --use-log-author option.\n\nEric requested a new set of tests for this series.\n\n* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits\n - Add tests for `branch --[no-]merged`\n - git-branch.txt: compare --contains, --merged and --no-merged\n - git-branch: add support for --merged and --no-merged\n\nLooked Ok, and will start cooking soon.\n\n* py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit\n - git-submodule: Extract functions module_info and module_url\n\nI am a bit slow reviewing this series; only managed to queue the first one\nso far.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* mk/color (Wed Apr 9 21:32:06 2008 +0200) 1 commit\n + Use color.ui variable in scripts too\n\n* jk/remote-default-show (Wed Apr 9 11:15:51 2008 -0400) 1 commit\n + git-remote: show all remotes with \"git remote show\"\n\n* jc/terminator-separator (Mon Apr 7 17:11:34 2008 -0700) 1 commit\n + log: teach \"terminator\" vs \"separator\" mode to \"--pretty=format\"\n\n* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit\n + git-fetch: always show status of non-tracking-ref fetches\n\n* py/submodule (Sat Apr 12 23:05:33 2008 +0800) 3 commits\n + builtin-status: Add tests for submodule summary\n + builtin-status: submodule summary support\n + git-submodule summary: --for-status option\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits\n - merge: remove deprecated summary and diffstat options and config\n   variables\n + merge, pull: add '--(no-)log' command line option\n + fmt-merge-msg: add '--(no-)log' options and 'merge.log' config\n   variable\n + add 'merge.stat' config variable\n + merge, pull: introduce '--(no-)stat' option\n + doc: moved merge.* config variables into separate merge-config.txt\n\nI fixed its too-eager deprecation.  The last one needs to be held back, as\nit actually removes the support for features that the main part of the\nseries deprecates, until 1.6.0 or later.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.\n\n* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits\n + diff-files: mark an index entry we know is up-to-date as such\n + write_index(): optimize ce_smudge_racily_clean_entry() calls with\n   CE_UPTODATE\n\nFurther reduce redundant lstat(2) calls during \"git status\" and other\ncommon operations.\n\n* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits\n + contrib/hooks: add an example pre-auto-gc hook\n + Documentation/hooks: add pre-auto-gc hook\n + git-gc --auto: add pre-auto-gc hook\n\nA new hook to stop \"git gc --auto\" from running.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.  There recently was a problem report that had a scent of this\nissue which turned out to be a false alarm (it was about http-push which\ndoes not do the native pack protocol optimization and the reporter was\npushing into an empty repository which needs full transfer anyway).\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n + diff: make --dirstat binary-file safe\n\nThe current \"dirstat\" does totally wrong thing when the set of files\nchanged includes a binary one.  This uses the same similarity evaluation\ncode as rename heuristics uses to treat text and binary the same way.\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n + Make git-add behave more sensibly in a case-insensitive\n   environment\n + When adding files to the index, add support for case-independent\n   matches\n + Make unpack-tree update removed files before any updated files\n + Make branch merging aware of underlying case-insensitive\n   filsystems\n + Add 'core.ignorecase' option\n + Make hash_name_lookup able to do case-independent lookups\n + Make \"index_name_exists()\" return the cache_entry it found\n + Move name hashing functions into a file of its own\n + Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of case insensitive filesystem support, currently\nASCII-only.\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n + Teach GIT-VERSION-GEN about the .git file\n + Teach git-submodule.sh about the .git file\n + Teach resolve_gitlink_ref() about the .git file\n + Add platform-independent .git \"symlink\"\n\nThe idea and the implementation seem Ok, but this leaves\ndistinct feeling that it is a solution still waiting for a user\n(e.g. \"git submodule\" enhancements to take advantage of this\nfacility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was\nbound to the superproject).\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n + sha1-lookup: make selection of 'middle' less aggressive\n + sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven, so let's prove\nit or revert it by giving it a bit more exposure.\n\n----------------------------------------------------------------\n[On Hold]\n\n* js/decorate (Mon Apr 7 14:41:12 2008 +0100) 2 commits\n - pretty=format: Add %d to show decoration\n - decorate: use \"const struct object\"\n\nThis has stalled, after a petered-out discussion.\n\n* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n - filter-branch.sh: support nearly proper tag name filtering\n\nInstead of discarding signed tags, this demotes them to simply annotated,\nwhich is technically not that different from signed tags.  There was an\nobjection if what this claims to do is the right thing to do to begin\nwith.  Also I haven't verified if it does what it claims to do.\n\nComments?\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* jc/rename-file-table (Fri Mar 7 14:03:19 2008 -0800) 1 commit\n - diffcore-rename: make file_table available outside exact rename\n   detection\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 3 commits\n - lstat: introduce a wrapper xlstat\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"74752","messageId":"alpine.DEB.1.00.0804191523030.3945@eeepc-johanness","threadId":"12603","inReplyTo":"7vhcdyfe9u.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-04-19T14:23:53Z","receivedAt":"2008-04-19T14:23:53Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sat, 19 Apr 2008, Junio C Hamano wrote:\n\n> ----------------------------------------------------------------\n> [On Hold]\n> \n> * js/decorate (Mon Apr 7 14:41:12 2008 +0100) 2 commits\n>  - pretty=format: Add %d to show decoration\n>  - decorate: use \"const struct object\"\n> \n> This has stalled, after a petered-out discussion.\n\nI am not personally interested, but I thought that it was easy enough to \ndo.  So let's just scrap it, the mailing list has it should anybody need \nit in the future.\n\nCiao,\nDscho\n"},{"id":"74756","messageId":"8c5c35580804190934q3ea27328j76418745b7e7665e@mail.gmail.com","threadId":"12603","inReplyTo":"7vhcdyfe9u.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Lars Hjemli","fromEmail":"hjemli@gmail.com","sentAt":"2008-04-19T16:34:35Z","receivedAt":"2008-04-19T16:34:35Z","isPatch":false,"sender":{"key":"hjemli@gmail.com","avatar":null},"body":"On Sat, Apr 19, 2008 at 10:19 AM, Junio C Hamano <gitster@pobox.com> wrote:\n>  * lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits\n>   - Add tests for `branch --[no-]merged`\n>   - git-branch.txt: compare --contains, --merged and --no-merged\n>   - git-branch: add support for --merged and --no-merged\n\nI notice that you moved the test script into t3201 while still adding\nt3202, which probably wasn't your intent.\n\nWould you like me to resend the patches with your fixups to tests and\ndocs (and maybe even squash them into a single patch)?\n\n--\nlarsh\n"},{"id":"74795","messageId":"7vmynpdv7l.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"8c5c35580804190934q3ea27328j76418745b7e7665e@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-20T04:08:30Z","receivedAt":"2008-04-20T04:08:30Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Lars Hjemli\" <hjemli@gmail.com> writes:\n\n> On Sat, Apr 19, 2008 at 10:19 AM, Junio C Hamano <gitster@pobox.com> wrote:\n>>  * lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits\n>>   - Add tests for `branch --[no-]merged`\n>>   - git-branch.txt: compare --contains, --merged and --no-merged\n>>   - git-branch: add support for --merged and --no-merged\n>\n> I notice that you moved the test script into t3201 while still adding\n> t3202, which probably wasn't your intent.\n>\n> Would you like me to resend the patches with your fixups to tests and\n> docs (and maybe even squash them into a single patch)?\n\nThanks, but it's easy enough for me to amend the tip of lh/branch-merged\nto drop t3202 and that should be sufficient.\n"},{"id":"74874","messageId":"480CBC76.7020303@nrlssc.navy.mil","threadId":"12603","inReplyTo":"7vhcdyfe9u.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Brandon Casey","fromEmail":"casey@nrlssc.navy.mil","sentAt":"2008-04-21T16:10:30Z","receivedAt":"2008-04-21T16:10:30Z","isPatch":false,"sender":{"key":"drafnel@gmail.com","avatar":"https://avatars.githubusercontent.com/u/921167?v=4"},"body":"Junio C Hamano wrote:\n\n> * bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n>  - filter-branch.sh: support nearly proper tag name filtering\n> \n> Instead of discarding signed tags, this demotes them to simply annotated,\n> which is technically not that different from signed tags.\n\nI just want to point out that this patch is not exclusively about signed\ntags.\n\nThe patch is about retaining annotated tags rather than demoting them to\nlight-weight tag references as is done currently for _all_ annotated tags,\nsigned and unsigned. When rewriting signed tags, the signature is stripped\nso that we don't write a tag with a bogus signature.\n\n-brandon\n"},{"id":"74938","messageId":"7vabjm1a0q.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vhcdyfe9u.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-22T10:03:49Z","receivedAt":"2008-04-22T10:03:49Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nNote.\n\n    Some commits on 'pu' have [comment] in front of their title, primarily\n    to remind myself not to accidentally merge them to 'next' before\n    issues are resolved.  They will be amended either by replacement patch\n    from the author, or when the issue raised on the list gets refuted\n    convincingly enough to justify the original patch (in which case only\n    the comment like \"[questionable???]\"  will be removed without changing\n    the tree of the commit).\n\nThe topics list the commits in reverse chronological order.\n\nA rough timeline from now on.\n\n * Discussion and review on new feature and enhancement patch series\n   begins.  Please resubmit things that you were cooking in your head\n   during 1.5.5-rc period after cleaning up and retesting.\n\n * 1.5.6 merge window closes (2008-05-14).\n\n * Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).\n\n * 1.5.6 Final (2008-06-08).\n\n----------------------------------------------------------------\n[New Topics]\n\n* js/rebase-i-sequencer (Mon Apr 14 02:21:09 2008 +0200) 13 commits\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.\n\n* db/clone-in-c (Thu Apr 17 19:32:43 2008 -0400) 8 commits\n - [mess] Build in clone\n - [strdup() and other clean-ups needed] Provide API access to\n   init_db()\n - [waiting for response] Add a function to set a non-default work\n   tree\n - Allow for having for_each_ref() list extra refs\n - Have a constant extern refspec for \"--tags\"\n - Add a library function to add an alternate to the alternates file\n - Add a lockfile function to append to a file\n - Mark the list of refs to fetch as const\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* mk/color (Wed Apr 9 21:32:06 2008 +0200) 1 commit\n + Use color.ui variable in scripts too\n\n* jk/remote-default-show (Wed Apr 9 11:15:51 2008 -0400) 1 commit\n + git-remote: show all remotes with \"git remote show\"\n\n* jc/terminator-separator (Mon Apr 7 17:11:34 2008 -0700) 1 commit\n + log: teach \"terminator\" vs \"separator\" mode to \"--pretty=format\"\n\n* py/submodule (Sat Apr 12 23:05:33 2008 +0800) 3 commits\n + builtin-status: Add tests for submodule summary\n + builtin-status: submodule summary support\n + git-submodule summary: --for-status option\n\n* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits\n + contrib/hooks: add an example pre-auto-gc hook\n + Documentation/hooks: add pre-auto-gc hook\n + git-gc --auto: add pre-auto-gc hook\n\nA new hook to stop \"git gc --auto\" from running.\n\n* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit\n + diff: make --dirstat binary-file safe\n\nThe current \"dirstat\" does totally wrong thing when the set of files\nchanged includes a binary one.  This uses the same similarity evaluation\ncode as rename heuristics uses to treat text and binary the same way.\n\n* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits\n + sha1-lookup: make selection of 'middle' less aggressive\n + sha1-lookup: more memory efficient search in sorted list of SHA-1\n\nMicro-optimization whose real world benefit is not proven, so let's prove\nit or revert it by giving it a bit more exposure.\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* pb/remote-mirror-config (Thu Apr 17 13:17:20 2008 +0200) 1 commit\n + Add a remote.*.mirror configuration option\n\n* ho/shared (Wed Apr 16 11:34:24 2008 +0300) 1 commit\n + Make core.sharedRepository more generic\n\n* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits\n + Add tests for `branch --[no-]merged`\n + git-branch.txt: compare --contains, --merged and --no-merged\n + git-branch: add support for --merged and --no-merged\n\n* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit\n + git-fetch: always show status of non-tracking-ref fetches\n\nThis changes reporting behaviour of one-shot \"git pull $url $branch\",\nwhich would affect long-time users in integrator role (that's you, Linus\n;-).  Let's see if we hear anybody screaming.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits\n - merge: remove deprecated summary and diffstat options and config\n   variables\n + merge, pull: add '--(no-)log' command line option\n + fmt-merge-msg: add '--(no-)log' options and 'merge.log' config\n   variable\n + add 'merge.stat' config variable\n + merge, pull: introduce '--(no-)stat' option\n + doc: moved merge.* config variables into separate merge-config.txt\n\nThe last one needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.\n\n* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits\n + diff-files: mark an index entry we know is up-to-date as such\n + write_index(): optimize ce_smudge_racily_clean_entry() calls with\n   CE_UPTODATE\n\nFurther reduce redundant lstat(2) calls during \"git status\" and other\ncommon operations.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.  There recently was a problem report that had a scent of this\nissue which turned out to be a false alarm (it was about http-push which\ndoes not do the native pack protocol optimization and the reporter was\npushing into an empty repository which needs full transfer anyway).\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n + Make git-add behave more sensibly in a case-insensitive\n   environment\n + When adding files to the index, add support for case-independent\n   matches\n + Make unpack-tree update removed files before any updated files\n + Make branch merging aware of underlying case-insensitive\n   filsystems\n + Add 'core.ignorecase' option\n + Make hash_name_lookup able to do case-independent lookups\n + Make \"index_name_exists()\" return the cache_entry it found\n + Move name hashing functions into a file of its own\n + Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of case insensitive filesystem support, currently\nASCII-only.\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n + Teach GIT-VERSION-GEN about the .git file\n + Teach git-submodule.sh about the .git file\n + Teach resolve_gitlink_ref() about the .git file\n + Add platform-independent .git \"symlink\"\n\nThere was a GSoC project idea to enhance \"git submodule\" to take advantage\nof this facility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was bound to\nthe superproject, but it appears nobody took it.\n\n* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n + filter-branch.sh: support nearly proper tag name filtering\n\nInstead of discarding annotated and/or signed tags, this keeps them and\ndemotes the signed ones to simply annotated.  It issues warning when it\ndoes this demotion.  I think the behaviour is sensible.\n\n----------------------------------------------------------------\n[Dropped]\n\n* js/decorate (Mon Apr 7 14:41:12 2008 +0100) 2 commits\n . pretty=format: Add %d to show decoration\n . decorate: use \"const struct object\"\n\nPer author's lack of interest\n\n----------------------------------------------------------------\n[On Hold]\n\n* ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits\n - git-svn: add documentation for --add-author-from option.\n - git-svn: Add --add-author-from option.\n - git-svn: add documentation for --use-log-author option.\n\nEric requested a new set of tests for this series.\n\n* py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit\n - git-submodule: Extract functions module_info and module_url\n\nI only managed to queue the first one so far.\n\nIt does not help motivating me reviewing the series that the overall tone\nof it is to ignore .git/config more and make .gitmodules take more active\nrole, either.  I have already said number of times why that is not a good\nidea and why it is against the overall submodule design.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 1 commit\n - lstat: introduce a wrapper xlstat\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"74966","messageId":"46dff0320804220659j66dea3fehc2a9bdcdc0371025@mail.gmail.com","threadId":"12603","inReplyTo":"7vabjm1a0q.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-04-22T13:59:46Z","receivedAt":"2008-04-22T13:59:46Z","isPatch":false,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"On Tue, Apr 22, 2008 at 6:03 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> Here are the topics that have been cooking.  Commits prefixed\n>  with '-' are only in 'pu' while commits prefixed with '+' are\n>  in 'next'.\n>\n\n>\n> * py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit\n>   - git-submodule: Extract functions module_info and module_url\n>\n>\n> I only managed to queue the first one so far.\n>\n>  It does not help motivating me reviewing the series that the overall tone\n>  of it is to ignore .git/config more and make .gitmodules take more active\n>  role, either.  I have already said number of times why that is not a good\n>  idea and why it is against the overall submodule design.\n\nI summarize junio's points that says $GIT_DIR/config is authoritative.\n\n1. .gitmodules shouldn't be authoritative and should be just a hint\n   to fill $GIT_DIR/config because\n\n   a) url may be rewritten with different protocol, such as from\n     \"http://\" to \"git://\"\n   b) url may be total different between .gitmodules and\n      $GIT_DIR/config\n\n2. When going back to an old HEAD of super project and do\n   \"git submodule update\", the url recorded in .gitmodules may be\n   stale or not existent anymore, so we should refer to\n   $GIT_DIR/config for the right url.\n\n3. We can record what contents we've seen in the .gitmodules, so that\n   we can give users a chance to adjust what is in $GIT_DIR/config\n   when we notice the entry in .gitmodules has changed.\n\nAny others?\n\nHowever, i argue the fall back strategy (say fall back to .gitmodules\nwhen we can't find an entries in $GIT_DIR/config) doesn't break the\nauthority and isn't in contrast with the cases above. It just attachs\nmore importance to .gitmodules and can make the world better in most\ncases.\n\nFor 1.a, i think we can keep these entries in .gitmodules, and use\n\"url.<thisurl>.insteadof = <otherurl>\" to override the urls.\n\nFor 1.b, i think this is a rare case. And we can override these urls\nin $GIT_DIR/config. However, in many cases, we havn't to do that.\n\nFor 2, i think it is also a rare case. And before going back, we can\noverride the urls in $GIT_DIR/config.\n\nFor 3, i havn't found a good way to do that. And it doesn't conflict\nwith the fall back strategy (say, wh\n\nSo, my conclusion\n\n* 1.b, 2 and 3 are all rare cases, and these cases don't conflict with\n  the fall back strategy\n\n* 1.a is a usual case, and fallback + 'url insteadOf\" will make things\n  better\n\n* The most common case is that most (even all) entries in .gitmodules\n  are the same as entires in $GIT_DIR/config. So with fallback, we\n  don't have to copy entries from .gitmodules to $GIT_DIR/config.\n\n* And, in a central environment, i think it's common that the super\n  project and sub project use the same protocol. So if we use relative\n  urls in .gitmodules, when changing the url protocol the super\n  project, the urls in .gitmodules needn't change and can be\n  dynamically expanded with the url of the super project (Of course,\n  after applying the 2nd patch of this series)\n\n\n-- \nPing Yin\n"},{"id":"74972","messageId":"200804221655.11914.Josef.Weidendorfer@gmx.de","threadId":"12603","inReplyTo":"46dff0320804220659j66dea3fehc2a9bdcdc0371025@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Josef Weidendorfer","fromEmail":"josef.weidendorfer@gmx.de","sentAt":"2008-04-22T14:55:11Z","receivedAt":"2008-04-22T14:55:11Z","isPatch":false,"sender":{"key":"josef.weidendorfer@gmx.de","avatar":null},"body":"On Tuesday 22 April 2008, Ping Yin wrote:\n> On Tue, Apr 22, 2008 at 6:03 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> >  It does not help motivating me reviewing the series that the overall tone\n> >  of it is to ignore .git/config more and make .gitmodules take more active\n> >  role, either.  I have already said number of times why that is not a good\n> >  idea and why it is against the overall submodule design.\n> \n> I summarize junio's points that says $GIT_DIR/config is authoritative.\n>\n> [...]\n> \n> Any others?\n\nA reason you did not mention is security:\nYou never want your .git/config to be changed behind your back, which\neffectivly is the case when using the versioned .gitmodules information\n(similar problem as with a .gitconfig in-tree).\n\nAnother one:\nFrom a design point of view, submodule URLs are project meta information\nunrelated to source history. So, actually, I think it was wrong to put\nsubmodule URLs (even hints only) into the versioned .gitmodules files (*).\n\nThe main reason for .gitmodules is to store submodule information which\nhas to be in sync with commits, such as a submodule name related to some\npath where the submodule happens to be checked out in a given commit, and\nalso related to some config entry holding the URL to allow for fetch/pull.\nThe idea is that submodules have an identity in the supermodule (in contrast\nto files in git), such that related configuration keeps valid when moving\nsubmodules around. This needs simultanous adjusting the path attribute in\n.gitmodules when a submodule is moved.\n\nJosef\n\n(*) IMHO, it would be far better if such project meta/policy information could\nbe in its own history (e.g. branch \"gitconfig\" to allow for easy propagation\nat clone/fetch time). However, any such configuration should need\nexplicit interaction by the user to take over project config into the\nlocal git config (e.g. via a \"git config merge gitconfig:config\" after\ninspecting via \"git show gitconfig:config\").\n"},{"id":"74989","messageId":"46dff0320804221013m2ff0320am31b7f8beb5f26f1b@mail.gmail.com","threadId":"12603","inReplyTo":"200804221655.11914.Josef.Weidendorfer@gmx.de","subject":"Re: What's cooking in git.git (topics)","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-04-22T17:13:48Z","receivedAt":"2008-04-22T17:13:48Z","isPatch":false,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"On Tue, Apr 22, 2008 at 10:55 PM, Josef Weidendorfer\n<Josef.Weidendorfer@gmx.de> wrote:\n> On Tuesday 22 April 2008, Ping Yin wrote:\n>  > On Tue, Apr 22, 2008 at 6:03 PM, Junio C Hamano <gitster@pobox.com> wrote:\n>\n> > >  It does not help motivating me reviewing the series that the overall tone\n>  > >  of it is to ignore .git/config more and make .gitmodules take more active\n>  > >  role, either.  I have already said number of times why that is not a good\n>  > >  idea and why it is against the overall submodule design.\n>  >\n>  > I summarize junio's points that says $GIT_DIR/config is authoritative.\n>  >\n>  > [...]\n>  >\n>  > Any others?\n>\n>  A reason you did not mention is security:\n>  You never want your .git/config to be changed behind your back, which\n>  effectivly is the case when using the versioned .gitmodules information\n>  (similar problem as with a .gitconfig in-tree).\n\nAs discussed in another thread about in-tree .gitconfig, security\nissues only arise on limited configuration entries. However, there are\nno entries in .gitmodules falling into any of these entries.\n\n>\n>  Another one:\n>  From a design point of view, submodule URLs are project meta information\n>  unrelated to source history. So, actually, I think it was wrong to put\n>  submodule URLs (even hints only) into the versioned .gitmodules files (*).\n\nBut now it actually acts as hints and we don't find a better way. I\njust propose that the hints become the good default.\n\n>\n>  The main reason for .gitmodules is to store submodule information which\n>  has to be in sync with commits, such as a submodule name related to some\n>  path where the submodule happens to be checked out in a given commit, and\n>  also related to some config entry holding the URL to allow for fetch/pull.\n>  The idea is that submodules have an identity in the supermodule (in contrast\n>  to files in git), such that related configuration keeps valid when moving\n>  submodules around. This needs simultanous adjusting the path attribute in\n>  .gitmodules when a submodule is moved.\n\nIf we go back to a old HEAD or switch to another branch with changed\npath for a submodule,  what should 'git submodule update' do?\nI think entries in .gitmodules should take precedence.\n\nSo url in $GIT_DIR/config is authoritative, and path in .gitmodules is\nauthoritative.\n\n\n\n\n-- \nPing Yin\n"},{"id":"74993","messageId":"alpine.DEB.1.00.0804221827330.4460@eeepc-johanness","threadId":"12603","inReplyTo":"46dff0320804221013m2ff0320am31b7f8beb5f26f1b@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-04-22T17:28:37Z","receivedAt":"2008-04-22T17:28:37Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 23 Apr 2008, Ping Yin wrote:\n\n> If we go back to a old HEAD or switch to another branch with changed \n> path for a submodule, what should 'git submodule update' do? I think \n> entries in .gitmodules should take precedence.\n\nLiterally the most common reason for a _different_ .gitmodules in an older \nrevision is that the repository was moved to another machine.\n\nIn this case, your suggestion is actively wrong.\n\nCiao,\nDscho\n"},{"id":"74998","messageId":"200804222007.03439.Josef.Weidendorfer@gmx.de","threadId":"12603","inReplyTo":"46dff0320804221013m2ff0320am31b7f8beb5f26f1b@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Josef Weidendorfer","fromEmail":"josef.weidendorfer@gmx.de","sentAt":"2008-04-22T18:07:03Z","receivedAt":"2008-04-22T18:07:03Z","isPatch":false,"sender":{"key":"josef.weidendorfer@gmx.de","avatar":null},"body":"On Tuesday 22 April 2008, Ping Yin wrote:\n> >  A reason you did not mention is security:\n> >  You never want your .git/config to be changed behind your back, which\n> >  effectivly is the case when using the versioned .gitmodules information\n> >  (similar problem as with a .gitconfig in-tree).\n> \n> As discussed in another thread about in-tree .gitconfig, security\n> issues only arise on limited configuration entries. However, there are\n> no entries in .gitmodules falling into any of these entries.\n\nHmm... At least, it can be very annoying when git fetches data from repositories\nyou did not expect, only because submodule URLs change via this\nfallback mechanism. Perhaps it is a little far reached, but suppose a project\nchanges its URL, and the old one becomes occupied by a malicious person.\nThe problem is that the URL with the now malicious repository is bound in the\nhistory of the project. For sure, you do not want to fetch from that old repository\nby accident, after you did a checkout of an old commit. And there would be no\nway to protect other people from this malicious repository other than rewriting\nthe whole history.\n\n> >  Another one:\n> >  From a design point of view, submodule URLs are project meta information\n> >  unrelated to source history. So, actually, I think it was wrong to put\n> >  submodule URLs (even hints only) into the versioned .gitmodules files (*).\n> \n> But now it actually acts as hints and we don't find a better way. I\n> just propose that the hints become the good default.\n\nFor me this sounds like: Now that we have made this bad decision, it does\nnot matter to make it even worse.\n\nWhat was the motivation for this fallback mechanism?\n\nIn any way, it is preferable to always use the correct URL for submodules.\nThus, when the URL ever changes in the projects livetime (covered by\ngit history), you want to have the correct URL in your .git/config\n(not to accidently use the wrong URL when checking out an old commit).\nBut then, the fallback mechanism does not trigger anyway.\n\n> >  The main reason for .gitmodules is to store submodule information which\n> >  has to be in sync with commits, such as a submodule name related to some\n> >  path where the submodule happens to be checked out in a given commit, and\n> >  also related to some config entry holding the URL to allow for fetch/pull.\n> >  The idea is that submodules have an identity in the supermodule (in contrast\n> >  to files in git), such that related configuration keeps valid when moving\n> >  submodules around. This needs simultanous adjusting the path attribute in\n> >  .gitmodules when a submodule is moved.\n> \n> If we go back to a old HEAD or switch to another branch with changed\n> path for a submodule,  what should 'git submodule update' do?\n> I think entries in .gitmodules should take precedence.\n\nOf course. It makes no sense to have submodule path configuration in .git/config,\nas it has to be in sync with the current commit. That has nothing to do with\nprecedence. The same is true for .gitattributes, for example.\n\n> So url in $GIT_DIR/config is authoritative, and path in .gitmodules is\n> authoritative.\n\nNo.\nThese are totally different types of configurations.\n\nJosef\n"},{"id":"75011","messageId":"200804222251.04559.barra_cuda@katamail.com","threadId":"12603","inReplyTo":"7vabjm1a0q.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Michele Ballabio","fromEmail":"barra_cuda@katamail.com","sentAt":"2008-04-22T20:51:04Z","receivedAt":"2008-04-22T20:51:04Z","isPatch":false,"sender":{"key":"barra_cuda@katamail.com","avatar":"https://avatars.githubusercontent.com/u/16371673?v=4"},"body":"On Tuesday 22 April 2008, Junio C Hamano wrote:\n> * mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits\n>  + contrib/hooks: add an example pre-auto-gc hook\n>  + Documentation/hooks: add pre-auto-gc hook\n>  + git-gc --auto: add pre-auto-gc hook\n> \n> A new hook to stop \"git gc --auto\" from running.\n\nAbout \"git gc --auto\", there was a patch sometime ago:\n\n\t[PATCH] commit: resurrect \"gc --auto\" at the end\n\nhttp://marc.info/?l=git&m=120716427130606&w=2\n\nWas it dropped?\n"},{"id":"75020","messageId":"7vd4ohwhcj.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"200804222251.04559.barra_cuda@katamail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-23T00:22:04Z","receivedAt":"2008-04-23T00:22:04Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Michele Ballabio <barra_cuda@katamail.com> writes:\n\n> On Tuesday 22 April 2008, Junio C Hamano wrote:\n>> * mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits\n>>  + contrib/hooks: add an example pre-auto-gc hook\n>>  + Documentation/hooks: add pre-auto-gc hook\n>>  + git-gc --auto: add pre-auto-gc hook\n>> \n>> A new hook to stop \"git gc --auto\" from running.\n>\n> About \"git gc --auto\", there was a patch sometime ago:\n>\n> \t[PATCH] commit: resurrect \"gc --auto\" at the end\n>\n> http://marc.info/?l=git&m=120716427130606&w=2\n>\n> Was it dropped?\n\nIn the thread, addition of an extra hook to \"gc --auto\" wasdiscussed.  It\nwas judged conditionally Ok as long as nobody assumes \"gc --auto\" is\nultra-cheap.  We used to have a \"gc --auto\" at the end of git-commit which\nviolated that condition, but we do not have that anymore.\n\nThe patch resurrects the behaviour that makes the extra hook possibly\nunacceptable again, dosn't it?\n"},{"id":"75025","messageId":"46dff0320804221827g6579919fid69d581256de90e1@mail.gmail.com","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0804221827330.4460@eeepc-johanness","subject":"Re: What's cooking in git.git (topics)","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-04-23T01:27:37Z","receivedAt":"2008-04-23T01:27:37Z","isPatch":false,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"On Wed, Apr 23, 2008 at 1:28 AM, Johannes Schindelin\n<Johannes.Schindelin@gmx.de> wrote:\n> Hi,\n>\n>\n>  On Wed, 23 Apr 2008, Ping Yin wrote:\n>\n>  > If we go back to a old HEAD or switch to another branch with changed\n>  > path for a submodule, what should 'git submodule update' do? I think\n>  > entries in .gitmodules should take precedence.\n>\n>  Literally the most common reason for a _different_ .gitmodules in an older\n>  revision is that the repository was moved to another machine.\n>\n>  In this case, your suggestion is actively wrong.\n>\nAnother common reason is the adjustment of repository directory in the\ncentral environment\nso i said *path*, not *url*. I agree what Josef said in the the\nfollowing reply: \"It makes no sense to have submodule path\nconfiguration in .git/config, as it has to be in sync with the current\ncommit\". So it should be bettter to store path info only in\n.gitmodules instead of $GIT_DIR/config\n\n\n-- \nPing Yin\n"},{"id":"75027","messageId":"46dff0320804221859x7641144fua34df89fcc686aa2@mail.gmail.com","threadId":"12603","inReplyTo":"200804222007.03439.Josef.Weidendorfer@gmx.de","subject":"Re: What's cooking in git.git (topics)","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-04-23T01:59:29Z","receivedAt":"2008-04-23T01:59:29Z","isPatch":false,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"On Wed, Apr 23, 2008 at 2:07 AM, Josef Weidendorfer\n<Josef.Weidendorfer@gmx.de> wrote:\n> On Tuesday 22 April 2008, Ping Yin wrote:\n>\n> > >  A reason you did not mention is security:\n>  > >  You never want your .git/config to be changed behind your back, which\n>  > >  effectivly is the case when using the versioned .gitmodules information\n>  > >  (similar problem as with a .gitconfig in-tree).\n>  >\n>  > As discussed in another thread about in-tree .gitconfig, security\n>  > issues only arise on limited configuration entries. However, there are\n>  > no entries in .gitmodules falling into any of these entries.\n>\n>  Hmm... At least, it can be very annoying when git fetches data from repositories\n>  you did not expect, only because submodule URLs change via this\n>  fallback mechanism. Perhaps it is a little far reached, but suppose a project\n>  changes its URL, and the old one becomes occupied by a malicious person.\n>  The problem is that the URL with the now malicious repository is bound in the\n>  history of the project.\n\nIt is always bound now without the fallback patch :)\n\n>  For sure, you do not want to fetch from that old repository\n>  by accident, after you did a checkout of an old commit. And there would be no\n>  way to protect other people from this malicious repository other than rewriting\n>  the whole history.\n\nI wonder how the *malicious* repository can hurt us since only the\ncommit recorded in commit of the super project will be checked out.\n\n>\n>\n>  > >  Another one:\n>  > >  From a design point of view, submodule URLs are project meta information\n>  > >  unrelated to source history. So, actually, I think it was wrong to put\n>  > >  submodule URLs (even hints only) into the versioned .gitmodules files (*).\n>  >\n>  > But now it actually acts as hints and we don't find a better way. I\n>  > just propose that the hints become the good default.\n>\n>  For me this sounds like: Now that we have made this bad decision, it does\n>  not matter to make it even worse.\n\nI should be like: Now that we have made a bad decision (if it is), we\nhave to improve it to make life better before we can find a better\nsolution.\n\n>\n>  What was the motivation for this fallback mechanism?\n>\n>  In any way, it is preferable to always use the correct URL for submodules.\n>  Thus, when the URL ever changes in the projects livetime (covered by\n>  git history), you want to have the correct URL in your .git/config\n>  (not to accidently use the wrong URL when checking out an old commit).\n>  But then, the fallback mechanism does not trigger anyway.\n\nI havn't found yet how an incorrect URL can hurt us. The worst case i\ncan imagine is the failure of \"git submodule update\".\n\nTwo of the most common cases which can result in an incorrect/stale url is\n\n * the repository has been moved to another machine\n * the directory structure of upstream repositories has changed\n\nHowever, there are also cases that the old version of url in\n.gitmodules is correct.\n\nThink about the case that the reposotory maintainer has decided to\nreplace current submodule with a totoally different one. In this case,\nwhen back to the old HEAD, the url in .gitmodules is correct while url\nin $GIT_DIR/config is incorrect.\n\nSo, when error happens, we can't judge which url is correct. So just\nlet the user make the decision by refering the change history of\n.gitmodules or asking the repository maintainer.\n\n\n-- \nPing Yin\n"},{"id":"75028","messageId":"46dff0320804221903u6d5a3b51q171a89e8b920183a@mail.gmail.com","threadId":"12603","inReplyTo":"46dff0320804221827g6579919fid69d581256de90e1@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-04-23T02:03:16Z","receivedAt":"2008-04-23T02:03:16Z","isPatch":false,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"On Wed, Apr 23, 2008 at 9:27 AM, Ping Yin <pkufranky@gmail.com> wrote:\n>\n> On Wed, Apr 23, 2008 at 1:28 AM, Johannes Schindelin\n>  <Johannes.Schindelin@gmx.de> wrote:\n>  > Hi,\n>  >\n>  >\n>  >  On Wed, 23 Apr 2008, Ping Yin wrote:\n>  >\n>  >  > If we go back to a old HEAD or switch to another branch with changed\n>  >  > path for a submodule, what should 'git submodule update' do? I think\n>  >  > entries in .gitmodules should take precedence.\n>  >\n>  >  Literally the most common reason for a _different_ .gitmodules in an older\n>  >  revision is that the repository was moved to another machine.\n>  >\n>  >  In this case, your suggestion is actively wrong.\n>  >\n>  Another common reason is the adjustment of repository directory in the\n>  central environment\n\nI'm wrong, this is the case that  *url* changes.\n\n>  so i said *path*, not *url*. I agree what Josef said in the the\n>  following reply: \"It makes no sense to have submodule path\n>  configuration in .git/config, as it has to be in sync with the current\n>  commit\". So it should be bettter to store path info only in\n>  .gitmodules instead of $GIT_DIR/config\n>\n\nThe case that *path* changes is the submodule is moved to a new path\nin some commit. But it is a very rare case.\n\n\n-- \nPing Yin\n"},{"id":"75039","messageId":"200804230936.55539.barra_cuda@katamail.com","threadId":"12603","inReplyTo":"7vd4ohwhcj.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Michele Ballabio","fromEmail":"barra_cuda@katamail.com","sentAt":"2008-04-23T07:36:55Z","receivedAt":"2008-04-23T07:36:55Z","isPatch":false,"sender":{"key":"barra_cuda@katamail.com","avatar":"https://avatars.githubusercontent.com/u/16371673?v=4"},"body":"On Wednesday 23 April 2008, Junio C Hamano wrote:\n> In the thread, addition of an extra hook to \"gc --auto\" wasdiscussed.  It\n> was judged conditionally Ok as long as nobody assumes \"gc --auto\" is\n> ultra-cheap.  We used to have a \"gc --auto\" at the end of git-commit which\n> violated that condition, but we do not have that anymore.\n> \n> The patch resurrects the behaviour that makes the extra hook possibly\n> unacceptable again, dosn't it?\n\nYes. I thought there was an unwanted change in behavior in git-commit.\nSorry for the noise.\n"},{"id":"75040","messageId":"alpine.WNT.1.10.0804231124270.2728@theodor","threadId":"12603","inReplyTo":"46dff0320804221859x7641144fua34df89fcc686aa2@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Fedor Sergeev","fromEmail":"fedor.sergeev@sun.com","sentAt":"2008-04-23T07:47:57Z","receivedAt":"2008-04-23T07:47:57Z","isPatch":false,"sender":{"key":"fedor.sergeev@sun.com","avatar":null},"body":"On Wed, 23 Apr 2008, Ping Yin wrote:\n> On Wed, Apr 23, 2008 at 2:07 AM, Josef Weidendorfer\n>>  Hmm... At least, it can be very annoying when git fetches data from repositories\n>>  you did not expect, only because submodule URLs change via this\n>>  fallback mechanism. Perhaps it is a little far reached, but suppose a project\n>>  changes its URL, and the old one becomes occupied by a malicious person.\n>>  The problem is that the URL with the now malicious repository is bound in the\n>>  history of the project.\n>\n> It is always bound now without the fallback patch :)\n>\n>>  For sure, you do not want to fetch from that old repository\n>>  by accident, after you did a checkout of an old commit. And there would be no\n>>  way to protect other people from this malicious repository other than rewriting\n>>  the whole history.\n>\n> I wonder how the *malicious* repository can hurt us since only the\n> commit recorded in commit of the super project will be checked out.\n\nIf one manages to hack on repository one can modify it enormous amount of \nways, including spoofing on SHA (providing wrong contents for it - does \ngit verify that when getting a pack?), utilizing bugs in git etc...\n\nI doubt somebody would spend that much of an effort but you know,\nyou can not be paranoid *enough* :)\n\nregards,\n   Fedor.\n"},{"id":"75044","messageId":"46dff0320804230132u5ae94fd0x310bad0b8a145f42@mail.gmail.com","threadId":"12603","inReplyTo":"alpine.WNT.1.10.0804231124270.2728@theodor","subject":"Re: What's cooking in git.git (topics)","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-04-23T08:32:26Z","receivedAt":"2008-04-23T08:32:26Z","isPatch":false,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"On Wed, Apr 23, 2008 at 3:47 PM, Fedor Sergeev <Fedor.Sergeev@sun.com> wrote:\n> On Wed, 23 Apr 2008, Ping Yin wrote:\n>\n> >\n> > On Wed, Apr 23, 2008 at 2:07 AM, Josef Weidendorfer\n> >\n> >\n> > >  Hmm... At least, it can be very annoying when git fetches data from\n> repositories\n> > >  you did not expect, only because submodule URLs change via this\n> > >  fallback mechanism. Perhaps it is a little far reached, but suppose a\n> project\n> > >  changes its URL, and the old one becomes occupied by a malicious\n> person.\n> > >  The problem is that the URL with the now malicious repository is bound\n> in the\n> > >  history of the project.\n> > >\n> >\n> > It is always bound now without the fallback patch :)\n> >\n> >\n> > >  For sure, you do not want to fetch from that old repository\n> > >  by accident, after you did a checkout of an old commit. And there would\n> be no\n> > >  way to protect other people from this malicious repository other than\n> rewriting\n> > >  the whole history.\n> > >\n> >\n> > I wonder how the *malicious* repository can hurt us since only the\n> > commit recorded in commit of the super project will be checked out.\n> >\n>\n>  If one manages to hack on repository one can modify it enormous amount of\n> ways, including spoofing on SHA (providing wrong contents for it - does git\n> verify that when getting a pack?), utilizing bugs in git etc...\n\nDoable? I dunno.\n\n\n\n-- \nPing Yin\n"},{"id":"75045","messageId":"200804231047.41315.robin.rosenberg.lists@dewire.com","threadId":"12603","inReplyTo":"alpine.WNT.1.10.0804231124270.2728@theodor","subject":"Re: What's cooking in git.git (topics)","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-04-23T08:47:41Z","receivedAt":"2008-04-23T08:47:41Z","isPatch":false,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"onsdagen den 23 april 2008 09.47.57 skrev Fedor Sergeev:\n> If one manages to hack on repository one can modify it enormous amount of\n> ways, including spoofing on SHA (providing wrong contents for it - does\n> git verify that when getting a pack?), utilizing bugs in git etc...\n\nThe pack transfer protocol does not transfer the SHA of objects, only the \ncontents is transferred. The SHA-1 is (has to be since it is not sent) \nreconstructed on the receiving end.\n\n-- robin\n"},{"id":"75048","messageId":"alpine.WNT.1.10.0804231313550.2728@theodor","threadId":"12603","inReplyTo":"200804231047.41315.robin.rosenberg.lists@dewire.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Fedor Sergeev","fromEmail":"fedor.sergeev@sun.com","sentAt":"2008-04-23T09:16:23Z","receivedAt":"2008-04-23T09:16:23Z","isPatch":false,"sender":{"key":"fedor.sergeev@sun.com","avatar":null},"body":"On Wed, 23 Apr 2008, Robin Rosenberg wrote:\n\n> onsdagen den 23 april 2008 09.47.57 skrev Fedor Sergeev:\n>> If one manages to hack on repository one can modify it enormous amount of\n>> ways, including spoofing on SHA (providing wrong contents for it - does\n>> git verify that when getting a pack?), utilizing bugs in git etc...\n>\n> The pack transfer protocol does not transfer the SHA of objects, only the\n> contents is transferred. The SHA-1 is (has to be since it is not sent)\n> reconstructed on the receiving end.\n\nThats nice. Then I agree its difficult to spoil superproject out of \nsubmodule other than it just does not checkout.\n\nregards,\n   Fedor.\n"},{"id":"75258","messageId":"7vr6crj0jk.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vabjm1a0q.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-04-27T06:04:47Z","receivedAt":"2008-04-27T06:04:47Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nA rough timeline from now on.\n\n * Discussion and review on new feature and enhancement patch series\n   begins.  Please resubmit things that you were cooking in your head\n   during 1.5.5-rc period after cleaning up and retesting.\n\n * 1.5.6 merge window closes (2008-05-14).\n\n * Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).\n\n * 1.5.6 Final (2008-06-08).\n\n----------------------------------------------------------------\n[New Topics]\n\n* db/learn-HEAD (Sat Apr 26 15:53:12 2008 -0400) 2 commits\n - Make ls-remote http://... list HEAD, like for git://...\n - Make walker.fetch_ref() take a struct ref.\n\n* cc/help (Fri Apr 25 08:25:41 2008 +0200) 5 commits\n - documentation: web--browse: add a note about konqueror\n - documentation: help: add info about \"man.<tool>.cmd\" config var\n - help: use \"man.<tool>.cmd\" as custom man viewer command\n - documentation: help: add \"man.<tool>.path\" config variable\n - help: use man viewer path from \"man.<tool>.path\" config var\n\n* jn/webfeed (Sun Apr 20 22:09:48 2008 +0200) 1 commit\n + gitweb: Use feed link according to current view\n\n* ar/batch-cat (Wed Apr 23 15:17:53 2008 -0400) 11 commits\n - git-svn: Speed up fetch\n - Git.pm: Add hash_and_insert_object and cat_blob\n - Git.pm: Add command_bidi_pipe and command_close_bidi_pipe\n - git-hash-object: Add --stdin-paths option\n - Add more tests for git hash-object\n - Move git-hash-object tests from t5303 to t1007\n - git-cat-file: Add --batch option\n - git-cat-file: Add --batch-check option\n - git-cat-file: Make option parsing a little more flexible\n - git-cat-file: Small refactor of cmd_cat_file\n - <<REJECT>> Add tests for git cat-file\n\n* lt/dirmatch-optim (Sat Apr 19 14:22:38 2008 -0700) 1 commit\n + Optimize match_pathspec() to avoid fnmatch()\n\n* dm/cherry-pick-s (Sat Apr 26 15:14:28 2008 -0500) 1 commit\n + Allow cherry-pick (and revert) to add signoff line\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* ho/shared (Wed Apr 16 11:34:24 2008 +0300) 1 commit\n + Make core.sharedRepository more generic\n\n----------------------------------------------------------------\n[Will merge to \"master\" soonish]\n\n* pb/remote-mirror-config (Thu Apr 17 13:17:20 2008 +0200) 1 commit\n + Add a remote.*.mirror configuration option\n\n* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits\n + Add tests for `branch --[no-]merged`\n + git-branch.txt: compare --contains, --merged and --no-merged\n + git-branch: add support for --merged and --no-merged\n\n* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit\n + git-fetch: always show status of non-tracking-ref fetches\n\nThis changes reporting behaviour of one-shot \"git pull $url $branch\",\nwhich would affect long-time users in integrator role (that's you, Linus\n;-).  Let's see if we hear anybody screaming.\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n + Teach GIT-VERSION-GEN about the .git file\n + Teach git-submodule.sh about the .git file\n + Teach resolve_gitlink_ref() about the .git file\n + Add platform-independent .git \"symlink\"\n\nThere was a GSoC project idea to enhance \"git submodule\" to take advantage\nof this facility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was bound to\nthe superproject, but it appears nobody took it.\n\n* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n + filter-branch.sh: support nearly proper tag name filtering\n\nInstead of discarding annotated and/or signed tags, this keeps them and\ndemotes the signed ones to simply annotated.  It issues warning when it\ndoes this demotion.  I think the behaviour is sensible.\n\n* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits\n + diff-files: mark an index entry we know is up-to-date as such\n + write_index(): optimize ce_smudge_racily_clean_entry() calls with\n   CE_UPTODATE\n\nFurther reduce redundant lstat(2) calls during \"git status\" and other\ncommon operations.\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* js/rebase-i-sequencer (Fri Apr 25 22:50:53 2008 -0700) 14 commits\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits\n - merge: remove deprecated summary and diffstat options and config\n   variables\n + merge, pull: add '--(no-)log' command line option\n + fmt-merge-msg: add '--(no-)log' options and 'merge.log' config\n   variable\n + add 'merge.stat' config variable\n + merge, pull: introduce '--(no-)stat' option\n + doc: moved merge.* config variables into separate merge-config.txt\n\nThe last one needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.  There recently was a problem report that had a scent of this\nissue which turned out to be a false alarm (it was about http-push which\ndoes not do the native pack protocol optimization and the reporter was\npushing into an empty repository which needs full transfer anyway).\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n + Make git-add behave more sensibly in a case-insensitive\n   environment\n + When adding files to the index, add support for case-independent\n   matches\n + Make unpack-tree update removed files before any updated files\n + Make branch merging aware of underlying case-insensitive\n   filsystems\n + Add 'core.ignorecase' option\n + Make hash_name_lookup able to do case-independent lookups\n + Make \"index_name_exists()\" return the cache_entry it found\n + Move name hashing functions into a file of its own\n + Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of case insensitive filesystem support, currently\nASCII-only.\n\n----------------------------------------------------------------\n[Dropped]\n\n\n----------------------------------------------------------------\n[On Hold]\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* db/clone-in-c (Thu Apr 17 19:32:43 2008 -0400) 8 commits\n - [mess] Build in clone\n - [strdup() and other clean-ups needed] Provide API access to\n   init_db()\n - [waiting for response] Add a function to set a non-default work\n   tree\n - Allow for having for_each_ref() list extra refs\n - Have a constant extern refspec for \"--tags\"\n - Add a library function to add an alternate to the alternates file\n - Add a lockfile function to append to a file\n - Mark the list of refs to fetch as const\n\nThere were a few comments and suggestions to the ones near the tip that\nneed to be addressed.  Earlier ones look Ok.\n\n* ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits\n - git-svn: add documentation for --add-author-from option.\n - git-svn: Add --add-author-from option.\n - git-svn: add documentation for --use-log-author option.\n\nEric requested a new set of tests for this series.\n\n* py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit\n - git-submodule: Extract functions module_info and module_url\n\nNot going well.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 1 commit\n - lstat: introduce a wrapper xlstat\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"75268","messageId":"46dff0320804262344h5c8651ednb11e913a2b800eb4@mail.gmail.com","threadId":"12603","inReplyTo":"7vr6crj0jk.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Ping Yin","fromEmail":"pkufranky@gmail.com","sentAt":"2008-04-27T06:44:32Z","receivedAt":"2008-04-27T06:44:32Z","isPatch":false,"sender":{"key":"pkufranky@gmail.com","avatar":"https://avatars.githubusercontent.com/u/5346?v=4"},"body":"On Sun, Apr 27, 2008 at 2:04 PM, Junio C Hamano <gitster@pobox.com> wrote:\n>\n>  * py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit\n>   - git-submodule: Extract functions module_info and module_url\n>\n>  Not going well.\n>\n\nHmm, i wonder how this series can go well. Or this series is totoally\nbad and should be discarded.\n\n\nPing Yin\n"},{"id":"76179","messageId":"7vmyn4hr8f.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vr6crj0jk.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-06T06:38:24Z","receivedAt":"2008-05-06T06:38:24Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt's been a while since the last issue of this series.  I've been\nswamped, and haven't had a chance to spend enough time on reviewing and\naccepting patches.\n\nA good news is that the tip of 'pu' tonight passes all the test --- it has\nbeen broken for some time.\n\nA rough timeline from now on.\n\n * Discussion and review on new feature and enhancement patch series\n   begins.  Please resubmit things that you were cooking in your head\n   during 1.5.5-rc period after cleaning up and retesting.\n\n * 1.5.6 merge window closes (2008-05-14).\n\n * Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).\n\n * 1.5.6 Final (2008-06-08).\n\n----------------------------------------------------------------\n[New Topics]\n\n* bd/tests (Sun May 4 01:38:00 2008 -0400) 10 commits\n + Rename the test trash directory to contain spaces.\n + Fix tests breaking when checkout path contains shell\n   metacharacters\n + Don't use the 'export NAME=value' in the test scripts.\n + lib-git-svn.sh: Fix quoting issues with paths containing shell\n   metacharacters\n + test-lib.sh: Fix some missing path quoting\n + Use test_set_editor in t9001-send-email.sh\n + test-lib.sh: Add a test_set_editor function to safely set $VISUAL\n + git-send-email.perl: Handle shell metacharacters in $EDITOR\n   properly\n + config.c: Escape backslashes in section names properly\n + git-rebase.sh: Fix --merge --abort failures when path contains\n   whitespace\n\nMaking sure the tools quote paths correctly and work inside a directory\nwhose pathname contains whitespace.  Thanks Bryan, and thanks J6t for\nreviewing and testing.\n\n* np/pack (Fri May 2 15:11:51 2008 -0400) 7 commits\n + pack-objects: fix early eviction for max depth delta objects\n + pack-objects: allow for early delta deflating\n + pack-objects: move compression code in a separate function\n + pack-objects: clean up write_object() a bit\n + pack-objects: simplify the condition associated with --all-\n   progress\n + pack-objects: remove some double negative logic\n + pack-objects: small cleanup\n\nEvery time Nico tweaks pack generation, something good comes out ;-).\n\n* py/diff-submodule (Sat May 3 17:24:28 2008 -0700) 5 commits\n + is_racy_timestamp(): do not check timestamp for gitlinks\n + diff-lib.c: rename check_work_tree_entity()\n + diff: a submodule not checked out is not modified\n + Add t7506 to test submodule related functions for git-status\n + t4027: test diff for submodule with empty directory\n\nA submodule that is not checked out is not modified, but was mistaken as\nbeing removed.  Thanks Ping for tests and fixes.\n\n* cc/hooks-doc (Fri May 2 05:30:47 2008 +0200) 1 commit\n - Documentation: rename \"hooks.txt\" to \"githooks.txt\" and make it a\n   man page\n\nI've looked at but not applied most of the patches in the series that\nbuilt on top of this.  I think it probably is a good goal to make\neverything _accessible_ as manual pages, but at the same time I do not\nexactly like the HTML rendered results of material that are not really\nmanual pages.  E.g. \"Everyday\" looks much worse to me.\n\nAt least, the categorization of sections 1/5/7 should be straightened\nout.  diffcore is not about \"file format\" at all and do not belong to\nsection 5, for example.\n\n* pb/push (Mon Apr 28 11:32:12 2008 -0400) 1 commit\n - add special \"matching refs\" refspec\n\nThis first patch is a good enhancement without hurting any existing users.\nWe need a staged introduction of the second and later patches, and many\npeople including me did not agree the later ones in the series are\ndesirable.\n\n* mv/format-cc (Tue Apr 29 12:56:47 2008 +0200) 3 commits\n + Add tests for sendemail.cc configuration variable\n + git-send-email: add a new sendemail.cc configuration variable\n + git-format-patch: add a new format.cc configuration variable\n\n* as/graph (Mon May 5 00:57:03 2008 -0700) 4 commits\n - graph API: eliminate unnecessary indentation\n - log and rev-list: add --graph option\n - Add history graph API\n - revision API: split parent rewriting and parent printing options\n\nDraw \"tig 'g'\" graph without tig ;-)\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 4 commits\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n + diff: make \"too many files\" rename warning optional\n + bump rename limit defaults\n + add merge.renamelimit config option\n\nThe documentation part of this series partly depends on another series,\nbut I am expecting both to graduate smoothly to 'master' reasonably soon.\n\n* sv/first-parent (Sun Apr 27 19:32:46 2008 +0200) 1 commit\n + Simplify and fix --first-parent implementation\n\n* gp/bisect-fix (Mon May 5 07:43:00 2008 +0000) 1 commit\n + git-bisect.sh: don't accidentally override existing branch\n   \"bisect\"\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* pb/remote-mirror-config (Thu Apr 17 13:17:20 2008 +0200) 1 commit\n + Add a remote.*.mirror configuration option\n\n* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits\n + Add tests for `branch --[no-]merged`\n + git-branch.txt: compare --contains, --merged and --no-merged\n + git-branch: add support for --merged and --no-merged\n\n* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit\n + git-fetch: always show status of non-tracking-ref fetches\n\nThis changes reporting behaviour of one-shot \"git pull $url $branch\",\nwhich would affect long-time users in integrator role (that's you, Linus\n;-).  Let's see if we hear anybody screaming.\n\n* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits\n + Teach GIT-VERSION-GEN about the .git file\n + Teach git-submodule.sh about the .git file\n + Teach resolve_gitlink_ref() about the .git file\n + Add platform-independent .git \"symlink\"\n\nThere was a GSoC project idea to enhance \"git submodule\" to take advantage\nof this facility to preserve the subrepository while switching between a\nrevision with a submodule and another before the submodule was bound to\nthe superproject, but it appears nobody took it.\n\n* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit\n + filter-branch.sh: support nearly proper tag name filtering\n\nInstead of discarding annotated and/or signed tags, this keeps them and\ndemotes the signed ones to simply annotated.  It issues warning when it\ndoes this demotion.  I think the behaviour is sensible.\n\n* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits\n + diff-files: mark an index entry we know is up-to-date as such\n + write_index(): optimize ce_smudge_racily_clean_entry() calls with\n   CE_UPTODATE\n\nFurther reduce redundant lstat(2) calls during \"git status\" and other\ncommon operations.\n\n----------------------------------------------------------------\n[Will merge to \"master\" soonish]\n\n* lt/dirmatch-optim (Sat Apr 19 14:22:38 2008 -0700) 1 commit\n + Optimize match_pathspec() to avoid fnmatch()\n\n* dm/cherry-pick-s (Sat Apr 26 15:14:28 2008 -0500) 1 commit\n + Allow cherry-pick (and revert) to add signoff line\n\n* cc/help (Fri Apr 25 08:25:41 2008 +0200) 5 commits\n + documentation: web--browse: add a note about konqueror\n + documentation: help: add info about \"man.<tool>.cmd\" config var\n + help: use \"man.<tool>.cmd\" as custom man viewer command\n + documentation: help: add \"man.<tool>.path\" config variable\n + help: use man viewer path from \"man.<tool>.path\" config var\n\n* jn/webfeed (Sun Apr 20 22:09:48 2008 +0200) 1 commit\n + gitweb: Use feed link according to current view\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n + Use perl instead of tac\n + Fix t3404 assumption that `wc -l` does not use whitespace.\n + rebase -i: Use : in expr command instead of match.\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.  Dscho seems to\nhave quite a strong objection to the 'mark' syntax and mechanism being\nunnecessarily complex.  Let's wait and see if a less complex but equally\nexpressive alternative materializes...\n\n* db/learn-HEAD (Sat Apr 26 15:53:12 2008 -0400) 2 commits\n + Make ls-remote http://... list HEAD, like for git://...\n + Make walker.fetch_ref() take a struct ref.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits\n - merge: remove deprecated summary and diffstat options and config\n   variables\n + merge, pull: add '--(no-)log' command line option\n + fmt-merge-msg: add '--(no-)log' options and 'merge.log' config\n   variable\n + add 'merge.stat' config variable\n + merge, pull: introduce '--(no-)stat' option\n + doc: moved merge.* config variables into separate merge-config.txt\n\nThe last one needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.\nThis may help a GSoC project that wants to gather statistical overview of\nthe history.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.  There recently was a problem report that had a scent of this\nissue which turned out to be a false alarm (it was about http-push which\ndoes not do the native pack protocol optimization and the reporter was\npushing into an empty repository which needs full transfer anyway).\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n + Make git-add behave more sensibly in a case-insensitive\n   environment\n + When adding files to the index, add support for case-independent\n   matches\n + Make unpack-tree update removed files before any updated files\n + Make branch merging aware of underlying case-insensitive\n   filsystems\n + Add 'core.ignorecase' option\n + Make hash_name_lookup able to do case-independent lookups\n + Make \"index_name_exists()\" return the cache_entry it found\n + Move name hashing functions into a file of its own\n + Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of case insensitive filesystem support, currently\nASCII-only.\n\n----------------------------------------------------------------\n[Dropped]\n\n* ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits\n . git-svn: add documentation for --add-author-from option.\n . git-svn: Add --add-author-from option.\n . git-svn: add documentation for --use-log-author option.\n\nEric requested a new set of tests for this series which never came.  I am\nstill holding onto the tip of the topic in case we can resurrect it, but\nit is not merged to 'pu'.\n\n----------------------------------------------------------------\n[On Hold]\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* db/clone-in-c (Sun Apr 27 13:39:30 2008 -0400) 8 commits\n - Build in clone\n - Provide API access to init_db()\n - Add a function to set a non-default work tree\n - Allow for having for_each_ref() list extra refs\n - Have a constant extern refspec for \"--tags\"\n - Add a library function to add an alternate to the alternates file\n - Add a lockfile function to append to a file\n - Mark the list of refs to fetch as const\n\nI'd really want this in 1.5.6; will merge to 'next' after giving a final\npass sometime this week.\n\n* ar/batch-cat (Wed Apr 23 15:17:47 2008 -0400) 5 commits\n - git-cat-file: Add --batch option\n - git-cat-file: Add --batch-check option\n - git-cat-file: Make option parsing a little more flexible\n - git-cat-file: Small refactor of cmd_cat_file\n - Add tests for git cat-file\n\nI fixed up the problematic shell script in the first patch in the series\nbut later one introduced the same problematic constructs in another file,\nat which point I gave up and discarded the rest.  At least it now passes\nits own testsuite without breaking others.\n\n* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits\n - tests: convert \"cmp\" and \"cmp -s\" to test_cmp\n - tests: test_cmp helper function\n\nThis one may be more elaborate, but Jeff's patch is much simpler.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour by not using\nmerge-recursive, but unfortunately has stalled for some time now.\n\n* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 1 commit\n - lstat: introduce a wrapper xlstat\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"76800","messageId":"7vr6c7xjqw.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vmyn4hr8f.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-12T22:03:51Z","receivedAt":"2008-05-12T22:03:51Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> [Dropped]\n>\n> * ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits\n>  . git-svn: add documentation for --add-author-from option.\n>  . git-svn: Add --add-author-from option.\n>  . git-svn: add documentation for --use-log-author option.\n>\n> Eric requested a new set of tests for this series which never came.  I am\n> still holding onto the tip of the topic in case we can resurrect it, but\n> it is not merged to 'pu'.\n\nI usually try hard not to do this kind of thing as it would encourage a\nmisconception that I'll tie any and all loose ends (which I obviously do\nnot have infinite amount of time and energy that is necessary), but I've\ndecided to add a skeleton for necessary tests to get the ball rolling.\n\nHere is a sample output from the test sequence (the log message from the\nlast one):\n\n    commit 0bc699cbd72810f85a0200c7197022b50e8298ed\n    Author: A U Thor <author@example.com>\n    Date:   Mon May 12 21:28:26 2008 +0000\n\n        fourth\n\n        From: A U Thor <author@example.com>\n\n\n        git-svn-id: file:///git.git/t/trash directory/svnrepo@4 23bf1e2a-19bf-478a-b023-e66a9e40421e\n\nI am not sure if adding the \"From: \" line as a trailer, with two blank\nline after it before the git-svn-id line, is the intended format for the\nfinal log message.  Maybe it is meant to go before the commit log message\nwith a blank line after it.  Maybe it is meant to be a trailer, one blank\nline before and after it and then git-svn-id line (in whcih case we have\none blank after it too many).  I genuinely do not know what is intended.\n\nIf this is the intended output, please say so.  Otherwise please fix it as\nneeded, and add tests for the final format specification as well, so that\nlater changes will not break it.\n\nThanks.\n\n-- >8 --\nFrom: Junio C Hamano <gitster@pobox.com>\nDate: Mon, 12 May 2008 14:53:40 -0700\nSubject: [PATCH] git-svn: add test for --add-author-from and --use-log-author\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n t/t9122-git-svn-author.sh |   73 +++++++++++++++++++++++++++++++++++++++++++++\n 1 files changed, 73 insertions(+), 0 deletions(-)\n create mode 100755 t/t9122-git-svn-author.sh\n\ndiff --git a/t/t9122-git-svn-author.sh b/t/t9122-git-svn-author.sh\nnew file mode 100755\nindex 0000000..d9a784b\n--- /dev/null\n+++ b/t/t9122-git-svn-author.sh\n@@ -0,0 +1,73 @@\n+#!/bin/sh\n+\n+test_description='git svn authorship'\n+. ./lib-git-svn.sh\n+\n+test_expect_success 'setup svn repository' '\n+\tsvn checkout \"$svnrepo\" work.svn &&\n+\t(\n+\t\tcd work.svn &&\n+\t\techo >file\n+\t\tsvn add file\n+\t\tsvn commit -m \"first commit\" file\n+\t)\n+\n+'\n+\n+test_expect_success 'interact with it via git-svn' '\n+\n+\tmkdir work.git &&\n+\t(\n+\t\tcd work.git &&\n+\t\tgit svn init \"$svnrepo\"\n+\t\tgit svn fetch &&\n+\n+\t\techo modification >file &&\n+\t\ttest_tick &&\n+\t\tgit commit -a -m second &&\n+\n+\t\ttest_tick &&\n+\t\tgit svn dcommit &&\n+\n+\t\techo \"further modification\" >file &&\n+\t\ttest_tick &&\n+\t\tgit commit -a -m third &&\n+\n+\t\ttest_tick &&\n+\t\tgit svn --add-author-from dcommit &&\n+\n+\t\techo \"yet further modification\" >file &&\n+\t\ttest_tick &&\n+\t\tgit commit -a -m fourth &&\n+\n+\t\ttest_tick &&\n+\t\tgit svn --add-author-from --use-log-author dcommit &&\n+\n+\t\tgit log &&\n+\n+\t\tgit show -s HEAD^^ >../actual.2 &&\n+\t\tgit show -s HEAD^  >../actual.3 &&\n+\t\tgit show -s HEAD   >../actual.4\n+\n+\t) &&\n+\n+\t# Make sure that --add-author-from without --use-log-author\n+\t# did not affect the authorship information\n+\tmyself=$(grep \"^Author: \" actual.2) &&\n+\tunaffected=$(grep \"^Author: \" actual.3) &&\n+\ttest \"z$myself\" = \"z$unaffected\" &&\n+\n+\t# Make sure lack of --add-author-from did not add cruft\n+\t! grep \"^    From: A U Thor \" actual.2 &&\n+\n+\t# Make sure --add-author-from added cruft\n+\tgrep \"^    From: A U Thor \" actual.3 &&\n+\tgrep \"^    From: A U Thor \" actual.4 &&\n+\n+\t# Make sure --add-author-from with --use-log-author affected\n+\t# the authorship information\n+\tgrep \"^Author: A U Thor \" actual.4\n+\n+'\n+\n+test_done\n-- \n1.5.5.1.328.g8abfd\n"},{"id":"76813","messageId":"7vk5hzvzp6.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vr6c7xjqw.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-13T00:02:13Z","receivedAt":"2008-05-13T00:02:13Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Adam, I am very sorry, but the message was misdirected.\n\nI'm resending it now to ask for comments from Avery.\n"},{"id":"76997","messageId":"7vmymsjz6x.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vmyn4hr8f.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-14T22:30:46Z","receivedAt":"2008-05-14T22:30:46Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt's been a while since the last issue of this series.  I've been\nswamped, and haven't had a chance to spend enough time on reviewing and\naccepting patches.\n\nA rough timeline from now on.\n\n * Will merge the remaining topics already on 'next', and perhaps accept a\n   handful minor topics that are not yet in.\n\n * Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).\n\n * 1.5.6 Final (2008-06-08).\n\n----------------------------------------------------------------\n[New Topics]\n\n* bc/tag (Fri May 9 00:03:35 2008 -0500) 3 commits\n - ident.c: New function valid_ident for checking ident string\n   formatting\n - Make mktag a builtin\n - mktag.c: adjust verify_tag parameters\n\nI stopped looking at this after hitting an unappliable patch --- will need\nto take a look at it again.\n\n* js/config-cb (Wed May 14 18:46:53 2008 +0100) 1 commit\n - Provide git_config with a callback-data parameter\n\nThis needs to wait until most of the other things graduate for 1.5.6;\nluckily, unlike the other \"path-list\" changes, misconversions is much\neasier to catch for this change and I am not worried about it.\n\n* ds/branch-auto-rebase (Sat May 10 15:36:29 2008 -0700) 1 commit\n + Allow tracking branches to set up rebase by default.\n\nFor 1.5.6.\n\n* bc/repack (Wed May 14 01:33:53 2008 -0400) 5 commits\n + let pack-objects do the writing of unreachable objects as loose\n   objects\n + add a force_object_loose() function\n + builtin-gc.c: deprecate --prune, it now really has no effect\n + git-gc: always use -A when manually repacking\n + repack: modify behavior of -A option to leave unreferenced objects\n   unpacked\n\nFor 1.5.6.\n\n* sp/ignorecase (Sun May 11 18:16:42 2008 +0200) 4 commits\n - t0050: Add test for case insensitive add\n - t0050: Set core.ignorecase case to activate case insensitivity\n - t0050: Test autodetect core.ignorecase\n - git-init: autodetect core.ignorecase\n\nThis unfortunately seems to break on natively case sensitive filesystems.\n\n* ar/add-unreadable (Mon May 12 19:59:23 2008 +0200) 5 commits\n + Add a config option to ignore errors for git-add\n + Add a test for git-add --ignore-errors\n + Add --ignore-errors to git-add to allow it to skip files with read\n   errors\n + Extend interface of add_files_to_cache to allow ignore indexing\n   errors\n + Make the exit code of add_file_to_index actually useful\n\n* jc/diff-words (Sun May 11 12:33:48 2008 -0700) 2 commits\n - diff --color-words: a bit of tweak\n - diff --color-words reimplementation\n\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits\n + Make git-add behave more sensibly in a case-insensitive\n   environment\n + When adding files to the index, add support for case-independent\n   matches\n + Make unpack-tree update removed files before any updated files\n + Make branch merging aware of underlying case-insensitive\n   filsystems\n + Add 'core.ignorecase' option\n + Make hash_name_lookup able to do case-independent lookups\n + Make \"index_name_exists()\" return the cache_entry it found\n + Move name hashing functions into a file of its own\n + Make unpack_trees_options bit flags actual bitfields\n\nThe beginning of case insensitive filesystem support, currently\nASCII-only.\n\n* db/learn-HEAD (Sat Apr 26 15:53:12 2008 -0400) 2 commits\n + Make ls-remote http://... list HEAD, like for git://...\n + Make walker.fetch_ref() take a struct ref.\n\n* cc/help (Fri Apr 25 08:25:41 2008 +0200) 5 commits\n + documentation: web--browse: add a note about konqueror\n + documentation: help: add info about \"man.<tool>.cmd\" config var\n + help: use \"man.<tool>.cmd\" as custom man viewer command\n + documentation: help: add \"man.<tool>.path\" config variable\n + help: use man viewer path from \"man.<tool>.path\" config var\n\n* dm/cherry-pick-s (Sat Apr 26 15:14:28 2008 -0500) 1 commit\n + Allow cherry-pick (and revert) to add signoff line\n\n* lt/dirmatch-optim (Sat Apr 19 14:22:38 2008 -0700) 1 commit\n + Optimize match_pathspec() to avoid fnmatch()\n\n* jn/webfeed (Sun Apr 20 22:09:48 2008 +0200) 1 commit\n + gitweb: Use feed link according to current view\n\n* gp/bisect-fix (Mon May 5 07:43:00 2008 +0000) 1 commit\n + git-bisect.sh: don't accidentally override existing branch\n   \"bisect\"\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 3 commits\n + diff: make \"too many files\" rename warning optional\n + bump rename limit defaults\n + add merge.renamelimit config option\n\n* py/diff-submodule (Sat May 3 17:24:28 2008 -0700) 5 commits\n + is_racy_timestamp(): do not check timestamp for gitlinks\n + diff-lib.c: rename check_work_tree_entity()\n + diff: a submodule not checked out is not modified\n + Add t7506 to test submodule related functions for git-status\n + t4027: test diff for submodule with empty directory\n\nA submodule that is not checked out is not modified, but was mistaken as\nbeing removed.  Thanks Ping for tests and fixes.\n\n* cc/hooks-doc (Fri May 2 05:30:47 2008 +0200) 1 commit\n + Documentation: rename \"hooks.txt\" to \"githooks.txt\" and make it a\n   man page\n\n* mv/format-cc (Tue Apr 29 12:56:47 2008 +0200) 3 commits\n + Add tests for sendemail.cc configuration variable\n + git-send-email: add a new sendemail.cc configuration variable\n + git-format-patch: add a new format.cc configuration variable\n\n* bd/tests (Sun May 4 01:38:00 2008 -0400) 10 commits\n + Rename the test trash directory to contain spaces.\n + Fix tests breaking when checkout path contains shell\n   metacharacters\n + Don't use the 'export NAME=value' in the test scripts.\n + lib-git-svn.sh: Fix quoting issues with paths containing shell\n   metacharacters\n + test-lib.sh: Fix some missing path quoting\n + Use test_set_editor in t9001-send-email.sh\n + test-lib.sh: Add a test_set_editor function to safely set $VISUAL\n + git-send-email.perl: Handle shell metacharacters in $EDITOR\n   properly\n + config.c: Escape backslashes in section names properly\n + git-rebase.sh: Fix --merge --abort failures when path contains\n   whitespace\n\nMaking sure the tools quote paths correctly and work inside a directory\nwhose pathname contains whitespace.  Thanks Bryan, and thanks J6t for\nreviewing and testing.\n\n* sb/committer (Sun May 4 18:04:51 2008 +0200) 3 commits\n + commit: Show committer if automatic\n + commit: Show author if different from committer\n + Preparation to call determine_author_info from prepare_to_commit\n\n----------------------------------------------------------------\n[Will merge to \"master\" soonish]\n\n* as/graph (Mon May 5 00:57:03 2008 -0700) 4 commits\n + graph API: eliminate unnecessary indentation\n + log and rev-list: add --graph option\n + Add history graph API\n + revision API: split parent rewriting and parent printing options\n\nDraw \"tig 'g'\" graph without tig ;-)\n\n* np/pack (Fri May 2 15:11:51 2008 -0400) 7 commits\n + pack-objects: fix early eviction for max depth delta objects\n + pack-objects: allow for early delta deflating\n + pack-objects: move compression code in a separate function\n + pack-objects: clean up write_object() a bit\n + pack-objects: simplify the condition associated with --all-\n   progress\n + pack-objects: remove some double negative logic\n + pack-objects: small cleanup\n\nEvery time Nico tweaks pack generation, something good comes out ;-).\n\n* db/clone-in-c (Sun Apr 27 13:39:30 2008 -0400) 8 commits\n + Build in clone\n + Provide API access to init_db()\n + Add a function to set a non-default work tree\n + Allow for having for_each_ref() list extra refs\n + Have a constant extern refspec for \"--tags\"\n + Add a library function to add an alternate to the alternates file\n + Add a lockfile function to append to a file\n + Mark the list of refs to fetch as const\n\nFor 1.5.6; please give it a good beating.\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.\n\nThis needs debugging.\n\n* ap/svn (Mon May 12 17:09:49 2008 -0700) 4 commits\n + git-svn: add test for --add-author-from and --use-log-author\n + git-svn: add documentation for --add-author-from option.\n + git-svn: Add --add-author-from option.\n + git-svn: add documentation for --use-log-author option.\n\nSome tweak for output might be needed, I dunno.\n\n* sv/first-parent (Mon May 12 17:12:36 2008 +0200) 2 commits\n + revision.c: really honor --first-parent\n + Simplify and fix --first-parent implementation\n\n----------------------------------------------------------------\n[Stalled]\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe tip commit on the series).\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n + Use perl instead of tac\n + Fix t3404 assumption that `wc -l` does not use whitespace.\n + rebase -i: Use : in expr command instead of match.\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.  Dscho seems to\nhave quite a strong objection to the 'mark' syntax and mechanism being\nunnecessarily complex.  Let's wait and see if a less complex but equally\nexpressive alternative materializes...\n\n* ar/batch-cat (Wed Apr 23 15:17:47 2008 -0400) 5 commits\n - git-cat-file: Add --batch option\n - git-cat-file: Add --batch-check option\n - git-cat-file: Make option parsing a little more flexible\n - git-cat-file: Small refactor of cmd_cat_file\n - Add tests for git cat-file\n\nI fixed up the problematic shell script in the first patch in the series\nbut later one introduced the same problematic constructs in another file,\nat which point I gave up and discarded the rest.  At least it now passes\nits own testsuite without breaking others.\n\n----------------------------------------------------------------\n[On Hold]\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n - merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* pb/push (Mon Apr 28 11:32:12 2008 -0400) 1 commit\n + add special \"matching refs\" refspec\n\nThis first patch is a good enhancement without hurting any existing users.\nWe need a staged introduction of the second and later patches, and many\npeople including me did not agree the later ones in the series are\ndesirable.\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"76999","messageId":"alpine.LNX.1.00.0805141844500.19665@iabervon.org","threadId":"12603","inReplyTo":"7vmymsjz6x.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Daniel Barkalow","fromEmail":"barkalow@iabervon.org","sentAt":"2008-05-14T22:55:11Z","receivedAt":"2008-05-14T22:55:11Z","isPatch":false,"sender":{"key":"barkalow@iabervon.org","avatar":"https://avatars.githubusercontent.com/u/55364219?v=4"},"body":"On Wed, 14 May 2008, Junio C Hamano wrote:\n\n> * db/clone-in-c (Sun Apr 27 13:39:30 2008 -0400) 8 commits\n>  + Build in clone\n>  + Provide API access to init_db()\n>  + Add a function to set a non-default work tree\n>  + Allow for having for_each_ref() list extra refs\n>  + Have a constant extern refspec for \"--tags\"\n>  + Add a library function to add an alternate to the alternates file\n>  + Add a lockfile function to append to a file\n>  + Mark the list of refs to fetch as const\n> \n> For 1.5.6; please give it a good beating.\n\nLast time, you said you were going to review this again; did you review it \nand find nothing to comment on, decide to just make sure it gets a \nbeating, or are you still planning to review it more? (Just wondering so I \ncan try to arrange to have time to respond to comments if there's going to \nbe a bunch)\n"},{"id":"77015","messageId":"7vfxski3z9.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.LNX.1.00.0805141844500.19665@iabervon.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-15T04:30:18Z","receivedAt":"2008-05-15T04:30:18Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Daniel Barkalow <barkalow@iabervon.org> writes:\n\n> Last time, you said you were going to review this again; did you review it \n> and find nothing to comment on, decide to just make sure it gets a \n> beating, or are you still planning to review it more? (Just wondering so I \n> can try to arrange to have time to respond to comments if there's going to \n> be a bunch)\n\nI did not have any further nitpicks on either design nor code in particular.\n\nBut keep in mind that I won't be the single source of review comments ;-).\n.\n"},{"id":"77024","messageId":"alpine.OSX.1.10.0805150748590.2650@cougar","threadId":"12603","inReplyTo":"7vmymsjz6x.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-05-15T05:51:59Z","receivedAt":"2008-05-15T05:51:59Z","isPatch":false,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"On Wed, 14 May 2008, Junio C Hamano wrote:\n\n> \n> For 1.5.6.\n> \n> * sp/ignorecase (Sun May 11 18:16:42 2008 +0200) 4 commits\n>  - t0050: Add test for case insensitive add\n>  - t0050: Set core.ignorecase case to activate case insensitivity\n>  - t0050: Test autodetect core.ignorecase\n>  - git-init: autodetect core.ignorecase\n> \n> This unfortunately seems to break on natively case sensitive filesystems.\n\n\n>From 92ec8c8a12cdc45a69f6612af340a8ce50976ab1 Mon Sep 17 00:00:00 2001\nFrom: Steffen Prohaska <prohaska@zib.de>\nDate: Thu, 15 May 2008 07:19:54 +0200\nSubject: [PATCH] t0050: Fix merge test on case sensitive file systems\n\nOn a case sensitive filesystem, \"git reset --hard\" might refuse to\noverwrite a file whose name differs only by case, even if\ncore.ignorecase is set.  It is not clear which circumstances cause this\nbehavior.  This commit simply works around the problem by removing\nthe case changing file before running \"git reset --hard\".\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n t/t0050-filesystem.sh |    2 ++\n 1 files changed, 2 insertions(+), 0 deletions(-)\n\ndiff --git a/t/t0050-filesystem.sh b/t/t0050-filesystem.sh\nindex 0e33c4b..c5360e2 100755\n--- a/t/t0050-filesystem.sh\n+++ b/t/t0050-filesystem.sh\n@@ -72,6 +72,8 @@ $test_case 'rename (case change)' '\n \n $test_case 'merge (case change)' '\n \n+\trm -f CamelCase &&\n+\trm -f camelcase &&\n \tgit reset --hard initial &&\n \tgit merge topic\n \n-- \n1.5.5.1.349.g99d0\n"},{"id":"77440","messageId":"7vabijxhk4.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vmymsjz6x.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-22T01:18:19Z","receivedAt":"2008-05-22T01:18:19Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt's been a while since the last issue of this series.  I've been\nswamped, and haven't had a chance to spend enough time on reviewing and\naccepting patches.\n\nA rough timeline from now on.\n\n * Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21 -- need\n   to slip til the weekend).\n\n * 1.5.6 Final (2008-06-08).\n\nThere are a few known breakages I want to see addressed that are not in\nhere before 1.5.6 (no not any new features but pure bugfixes).\n\n----------------------------------------------------------------\n[New Topics]\n\n* js/config-cb (Wed May 14 18:46:53 2008 +0100) 1 commit\n - Provide git_config with a callback-data parameter\n\nThis needs to wait until most of the other things graduate for 1.5.6;\nluckily, unlike the other \"path-list\" changes, misconversions is much\neasier to catch for this change and I am not worried about it.\n\n* jc/apply-whitespace (Sat May 17 02:02:44 2008 -0700) 3 commits\n + builtin-apply: do not declare patch is creation when we do not\n   know it\n + builtin-apply: accept patch to an empty file\n + builtin-apply: typofix\n\nWe were loose when parsing a patch that adds contents to an empty file.\nThis fix would be nice to have in 1.5.6.\n\n* js/mailinfo (Fri May 16 14:03:30 2008 +0100) 1 commit\n - <<PARK - BASE64 and QP still broken>> mailsplit and mailinfo:\n   gracefully handle NUL characters\n\nWhen \"am\" processes a patch that modifies a line with NUL, we used to\nchomp the patch line there, resulting in rejects.  This patch fixes the\nissue partially, only when the message is not encoded in BASE64 nor\nQuoted-Printable.\n\n* mo/cvsserver (Wed May 14 22:35:48 2008 -0600) 3 commits\n + git-cvsserver: add ability to guess -kb from contents\n + implement gitcvs.usecrlfattr\n + git-cvsserver: add mechanism for managing working tree and current\n   directory\n\nCVS interoperability improvements, for 1.5.6\n\n* js/cvsexportcommit (Wed May 14 15:29:49 2008 +0100) 2 commits\n + cvsexportcommit: introduce -W for shared working trees (between\n   Git and CVS)\n + cvsexportcommit: chomp only removes trailing whitespace\n\nCVS interoperability improvements, for 1.5.6\n\n* ar/t6031 (Sun May 18 16:57:27 2008 +0200) 1 commit\n + Fix t6031 on filesystems without working exec bit\n\n* jc/unpack-trees-reword (Sat May 17 12:03:49 2008 -0700) 1 commit\n + unpack-trees: allow Porcelain to give different error messages\n\n* jc/add-n-u (Wed May 21 12:04:34 2008 -0700) 1 commit\n + \"git-add -n -u\" should not add but just report\n\n* js/ignore-submodule (Wed May 14 18:03:59 2008 +0100) 3 commits\n + Ignore dirty submodule states during rebase and stash\n + Teach update-index about --ignore-submodules\n + diff options: Introduce --ignore-submodules\n\nThe above are all fixes, meant for 1.5.6.\n\n* dr/ceiling (Fri May 16 00:27:28 2008 +0100) 1 commit\n - Add support for GIT_CEILING_DIRECTORIES\n\nI haven't had a chance to take a look at the updated series myself.\n\n* jc/diff-words (Sun May 11 12:33:48 2008 -0700) 2 commits\n - diff --color-words: a bit of tweak\n - diff --color-words reimplementation\n\nThis series did not pan out well.  I briefly thought that perhaps I should\ndiscard them and replace with the \"not just whitespace\" one from Ping Yin\nfirst, hoping that we can clean the overall logic up later, but perhaps\nthe whole thing can get a fresh restart after 1.5.6.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* ar/add-unreadable (Mon May 12 19:59:23 2008 +0200) 5 commits\n + Add a config option to ignore errors for git-add\n + Add a test for git-add --ignore-errors\n + Add --ignore-errors to git-add to allow it to skip files with read\n   errors\n + Extend interface of add_files_to_cache to allow ignore indexing\n   errors\n + Make the exit code of add_file_to_index actually useful\n\nWhen you sometimes have unreadable path in your own work tree, this allows\nyou to ignore failures to index such path with \"git add\".  Philosophically\nthat whole notion is wrong (\"why should you be adding such a file to begin\nwith\"), but this has practical value of working around insane systems that\nlocks out the access by the user to a file when the file is in use by\nsomebody else.\n\nI am somewhat skeptical about the last one that enables such a workaround\non a permanent basis, though.\n\n* ds/branch-auto-rebase (Sat May 10 15:36:29 2008 -0700) 1 commit\n + Allow tracking branches to set up rebase by default.\n\nFor 1.5.6.\n\n* as/graph (Mon May 5 00:57:03 2008 -0700) 4 commits\n + graph API: eliminate unnecessary indentation\n + log and rev-list: add --graph option\n + Add history graph API\n + revision API: split parent rewriting and parent printing options\n\nDraw \"tig 'g'\" graph without tig ;-)\n\n* np/pack (Fri May 2 15:11:51 2008 -0400) 7 commits\n + pack-objects: fix early eviction for max depth delta objects\n + pack-objects: allow for early delta deflating\n + pack-objects: move compression code in a separate function\n + pack-objects: clean up write_object() a bit\n + pack-objects: simplify the condition associated with --all-\n   progress\n + pack-objects: remove some double negative logic\n + pack-objects: small cleanup\n\nEvery time Nico tweaks pack generation, something good comes out ;-).\n\n* sv/first-parent (Mon May 12 17:12:36 2008 +0200) 2 commits\n + revision.c: really honor --first-parent\n + Simplify and fix --first-parent implementation\n\n\n----------------------------------------------------------------\n[Will merge to \"master\" soonish]\n\n* sp/ignorecase (Thu May 15 07:19:54 2008 +0200) 5 commits\n + t0050: Fix merge test on case sensitive file systems\n + t0050: Add test for case insensitive add\n + t0050: Set core.ignorecase case to activate case insensitivity\n + t0050: Test autodetect core.ignorecase\n + git-init: autodetect core.ignorecase\n\nFor 1.5.6.\n\n* bc/repack (Thu May 15 22:37:31 2008 -0400) 6 commits\n + Documentation/git-repack.txt: document new -A behaviour\n + let pack-objects do the writing of unreachable objects as loose\n   objects\n + add a force_object_loose() function\n + builtin-gc.c: deprecate --prune, it now really has no effect\n + git-gc: always use -A when manually repacking\n + repack: modify behavior of -A option to leave unreferenced objects\n   unpacked\n\nFor 1.5.6.\n\n* db/clone-in-c (Tue May 20 14:15:14 2008 -0400) 11 commits\n + clone: fall back to copying if hardlinking fails\n + builtin-clone.c: Need to closedir() in copy_or_link_directory()\n + builtin-clone: fix initial checkout\n + Build in clone\n + Provide API access to init_db()\n + Add a function to set a non-default work tree\n + Allow for having for_each_ref() list extra refs\n + Have a constant extern refspec for \"--tags\"\n + Add a library function to add an alternate to the alternates file\n + Add a lockfile function to append to a file\n + Mark the list of refs to fetch as const\n\nFor 1.5.6.\n\n* pb/push (Mon Apr 28 11:32:12 2008 -0400) 1 commit\n + add special \"matching refs\" refspec\n\nThis first patch is a good enhancement without hurting any existing users.\nWe need a staged introduction of the second and later patches, and many\npeople including me did not agree the later ones in the series are\ndesirable.\n\n----------------------------------------------------------------\n[Stalled]\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.\n\nThis needs debugging.\n\n* ap/svn (Mon May 12 17:09:49 2008 -0700) 4 commits\n + git-svn: add test for --add-author-from and --use-log-author\n + git-svn: add documentation for --add-author-from option.\n + git-svn: Add --add-author-from option.\n + git-svn: add documentation for --use-log-author option.\n\nSome tweak for output might be needed, I dunno.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe tip commit on the series).\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n + Use perl instead of tac\n + Fix t3404 assumption that `wc -l` does not use whitespace.\n + rebase -i: Use : in expr command instead of match.\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.  Dscho seems to\nhave quite a strong objection to the 'mark' syntax and mechanism being\nunnecessarily complex.  Let's wait and see if a less complex but equally\nexpressive alternative materializes...\n\n* ar/batch-cat (Wed Apr 23 15:17:47 2008 -0400) 5 commits\n - git-cat-file: Add --batch option\n - git-cat-file: Add --batch-check option\n - git-cat-file: Make option parsing a little more flexible\n - git-cat-file: Small refactor of cmd_cat_file\n - Add tests for git cat-file\n\nThe series was meant to speed up git-svn by avoiding many individual\ninvocations of git-cat-file.\n\nI fixed up the problematic shell script in the first patch in the series\nbut later one introduced the same problematic constructs in another file,\nat which point I gave up and discarded the rest.  At least it now passes\nits own testsuite without breaking others.  The remainder needs to be\nresubmit for the entire series to be usable for git-svn.\n\n----------------------------------------------------------------\n[On Hold]\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n - merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n\n----------------------------------------------------------------\n[Dropped]\n\n* bc/tag (Fri May 9 00:03:35 2008 -0500) 3 commits\n - ident.c: New function valid_ident for checking ident string\n   formatting\n - Make mktag a builtin\n - mktag.c: adjust verify_tag parameters\n\nThe goal of the series was to unify the internal implementation of\ngit-mktag and git-tag but the patches did not quite apply.  Needs\nrebase/resubmit.\n"},{"id":"77455","messageId":"alpine.DEB.1.00.0805221212200.30431@racer","threadId":"12603","inReplyTo":"7vabijxhk4.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-05-22T11:35:01Z","receivedAt":"2008-05-22T11:35:01Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 21 May 2008, Junio C Hamano wrote:\n\n> * js/config-cb (Wed May 14 18:46:53 2008 +0100) 1 commit\n>  - Provide git_config with a callback-data parameter\n> \n> This needs to wait until most of the other things graduate for 1.5.6; \n> luckily, unlike the other \"path-list\" changes, misconversions is much \n> easier to catch for this change and I am not worried about it.\n\nJust let me know when to resubmit, and against what branch(es).\n\n> * js/mailinfo (Fri May 16 14:03:30 2008 +0100) 1 commit\n>  - <<PARK - BASE64 and QP still broken>> mailsplit and mailinfo:\n>    gracefully handle NUL characters\n> \n> When \"am\" processes a patch that modifies a line with NUL, we used to\n> chomp the patch line there, resulting in rejects.  This patch fixes the\n> issue partially, only when the message is not encoded in BASE64 nor\n> Quoted-Printable.\n\nLike I said, I would be happy if Tommy took care of that patch.\n\n> * js/ignore-submodule (Wed May 14 18:03:59 2008 +0100) 3 commits\n>  + Ignore dirty submodule states during rebase and stash\n>  + Teach update-index about --ignore-submodules\n>  + diff options: Introduce --ignore-submodules\n\nI haven't heard back from you about renaming that option.  I think I \nsuggested --non-gitlinks or something equally discouraging for \nporcelain users.\n\n> * as/graph (Mon May 5 00:57:03 2008 -0700) 4 commits\n>  + graph API: eliminate unnecessary indentation\n>  + log and rev-list: add --graph option\n>  + Add history graph API\n>  + revision API: split parent rewriting and parent printing options\n> \n> Draw \"tig 'g'\" graph without tig ;-)\n\nI am a big fan of this feature.\n\n> * db/clone-in-c (Tue May 20 14:15:14 2008 -0400) 11 commits\n>  + clone: fall back to copying if hardlinking fails\n>  + builtin-clone.c: Need to closedir() in copy_or_link_directory()\n>  + builtin-clone: fix initial checkout\n>  + Build in clone\n>  + Provide API access to init_db()\n>  + Add a function to set a non-default work tree\n>  + Allow for having for_each_ref() list extra refs\n>  + Have a constant extern refspec for \"--tags\"\n>  + Add a library function to add an alternate to the alternates file\n>  + Add a lockfile function to append to a file\n>  + Mark the list of refs to fetch as const\n\nFingers crossed.\n\n> * js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n>  + Use perl instead of tac\n>  + Fix t3404 assumption that `wc -l` does not use whitespace.\n>  + rebase -i: Use : in expr command instead of match.\n>  + rebase -i: update the implementation of 'mark' command\n>  + Add option --preserve-tags\n>  + Teach rebase interactive the tag command\n>  + Add option --first-parent\n>  + Do rebase with preserve merges with advanced TODO list\n>  + Select all lines with fake-editor\n>  + Unify the length of $SHORT* and the commits in the TODO list\n>  + Teach rebase interactive the merge command\n>  + Move redo merge code in a function\n>  + Teach rebase interactive the reset command\n>  + Teach rebase interactive the mark command\n>  + Move cleanup code into it's own function\n>  + Don't append default merge message to -m message\n>  + fake-editor: output TODO list if unchanged\n> \n> This may complement the proposed \"sequencer\" GSoC project.  Dscho seems \n> to have quite a strong objection to the 'mark' syntax and mechanism \n> being unnecessarily complex.  Let's wait and see if a less complex but \n> equally expressive alternative materializes...\n\nYeah, I know.  My backlog is growing and growing.\n\nCiao,\nDscho\n"},{"id":"77488","messageId":"7vlk22urtt.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0805221212200.30431@racer","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-22T18:17:02Z","receivedAt":"2008-05-22T18:17:02Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n>> * js/config-cb (Wed May 14 18:46:53 2008 +0100) 1 commit\n>>  - Provide git_config with a callback-data parameter\n>> \n>> This needs to wait until most of the other things graduate for 1.5.6; \n>> luckily, unlike the other \"path-list\" changes, misconversions is much \n>> easier to catch for this change and I am not worried about it.\n>\n> Just let me know when to resubmit, and against what branch(es).\n\nIt is probably easier for me to munge the original submission from you\nwhen I decide to tag -rc0, adjusting any potential new callers (I do not\nthink of any offhand in diff between master and next).  We will need a\nquiescent time for this kind of change, and that way we will get such a\nquiescent window by definition.\n\n>> * js/mailinfo (Fri May 16 14:03:30 2008 +0100) 1 commit\n>>  - <<PARK - BASE64 and QP still broken>> mailsplit and mailinfo:\n>>    gracefully handle NUL characters\n>> \n>> When \"am\" processes a patch that modifies a line with NUL, we used to\n>> chomp the patch line there, resulting in rejects.  This patch fixes the\n>> issue partially, only when the message is not encoded in BASE64 nor\n>> Quoted-Printable.\n\n> Like I said, I would be happy if Tommy took care of that patch.\n\nI dunno.  Is it likely to happen?  I'd take a look at it myself when I\nhave a chance.\n\n>> * js/ignore-submodule (Wed May 14 18:03:59 2008 +0100) 3 commits\n>>  + Ignore dirty submodule states during rebase and stash\n>>  + Teach update-index about --ignore-submodules\n>>  + diff options: Introduce --ignore-submodules\n>\n> I haven't heard back from you about renaming that option.  I think I \n> suggested --non-gitlinks or something equally discouraging for \n> porcelain users.\n\nThe name is fine.  I had more trouble with what it does, rather, what it\ndoesn't --- it does not ignore typechange that involve a gitlink if I\nrecall correctly.\n\n>> * db/clone-in-c (Tue May 20 14:15:14 2008 -0400) 11 commits\n>>  + clone: fall back to copying if hardlinking fails\n>>  + builtin-clone.c: Need to closedir() in copy_or_link_directory()\n>>  + builtin-clone: fix initial checkout\n>>  + Build in clone\n>>  + Provide API access to init_db()\n>>  + Add a function to set a non-default work tree\n>>  + Allow for having for_each_ref() list extra refs\n>>  + Have a constant extern refspec for \"--tags\"\n>>  + Add a library function to add an alternate to the alternates file\n>>  + Add a lockfile function to append to a file\n>>  + Mark the list of refs to fetch as const\n>\n> Fingers crossed.\n\nRather, uncross them and type a few more tests ;-)?\n"},{"id":"77499","messageId":"alpine.LNX.1.00.0805221649240.19665@iabervon.org","threadId":"12603","inReplyTo":"7vlk22urtt.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Daniel Barkalow","fromEmail":"barkalow@iabervon.org","sentAt":"2008-05-22T22:02:55Z","receivedAt":"2008-05-22T22:02:55Z","isPatch":false,"sender":{"key":"barkalow@iabervon.org","avatar":"https://avatars.githubusercontent.com/u/55364219?v=4"},"body":"On Thu, 22 May 2008, Junio C Hamano wrote:\n\n> >> * db/clone-in-c (Tue May 20 14:15:14 2008 -0400) 11 commits\n> >>  + clone: fall back to copying if hardlinking fails\n> >>  + builtin-clone.c: Need to closedir() in copy_or_link_directory()\n> >>  + builtin-clone: fix initial checkout\n> >>  + Build in clone\n> >>  + Provide API access to init_db()\n> >>  + Add a function to set a non-default work tree\n> >>  + Allow for having for_each_ref() list extra refs\n> >>  + Have a constant extern refspec for \"--tags\"\n> >>  + Add a library function to add an alternate to the alternates file\n> >>  + Add a lockfile function to append to a file\n> >>  + Mark the list of refs to fetch as const\n> >\n> > Fingers crossed.\n> \n> Rather, uncross them and type a few more tests ;-)?\n\nThere are a few tests from Johan that didn't get in, which I'd had in my \ntree but didn't send because I don't have a good process in place for \nsending patches I'm not the author of. I'm pretty sure they pass, but I \nhaven't checked recently. I'll send them in a moment.\n\n\t-Daniel\n*This .sig left intentionally blank*\n"},{"id":"77722","messageId":"20080525212922.GA9564@leksak.fem-net","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0805221212200.30431@racer","subject":"Re: What's cooking in git.git (topics)","fromName":"Stephan Beyer","fromEmail":"s-beyer@gmx.net","sentAt":"2008-05-25T21:29:22Z","receivedAt":"2008-05-25T21:29:22Z","isPatch":false,"sender":{"key":"s-beyer@gmx.net","avatar":"https://avatars.githubusercontent.com/u/143889?v=4"},"body":"Hi,\n\n> > * js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\nesp.\n> >  + Teach rebase interactive the merge command\n> >  + Teach rebase interactive the reset command\n> >  + Teach rebase interactive the mark command\n[...]\n>\n> Yeah, I know.  My backlog is growing and growing.\n\nI think, this week we get the git-sequencer \"spec\" ready to be sent\nto the list.\nThen there's a new thread to discuss ;-)\n\nRegards,\n  Stephan\n\n-- \nStephan Beyer <s-beyer@gmx.net>, PGP 0x6EDDD207FCC5040F\n"},{"id":"77728","messageId":"7vwslhg8qe.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vabijxhk4.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-26T01:22:17Z","receivedAt":"2008-05-26T01:22:17Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt's been a while since the last issue of this series.  I've been\nswamped, and haven't had a chance to spend enough time on reviewing and\naccepting patches.\n\nA rough timeline from now on.\n\n * 1.5.6-rc0 has been tagged.  Expect a few minor breakages ;-)\n\n * Fixes of 'master' continues, with newer -rcX tagged every once in a\n   while.\n\n * 1.5.6 Final (2008-06-08).\n\nThere are a few known breakages I want to see addressed that are not in\nhere before 1.5.6 (no not any new features but pure bugfixes).\n\n----------------------------------------------------------------\n[New Topics]\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n - Introduce fast forward option only\n - Head reduction before selecting merge strategy\n - Restructure git-merge.sh\n - Introduce -ff=<fast forward option>\n - New merge tests\n - Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C but it appears\nneither will happen by 1.5.6 anyway.\n\n* jc/diff-no-no-index (Fri May 23 22:28:56 2008 -0700) 3 commits\n + \"git diff\": do not ignore index without --no-index\n + diff-files: do not play --no-index games\n + tests: do not use implicit \"git diff --no-index\"\n\nThis was done in response to recently discovered interaction with stgit;\nwe were too eater to invoke --no-index behaviour without being asked.\nCurrently it even drops the behaviour when you ask to compare two paths\nthat are outside of git work tree if your current directory is inside it,\nwhich I think could safely resurrect, and then the whole thing will be\nready for 1.5.6.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* js/config-cb (Wed May 14 18:46:53 2008 +0100) 1 commit\n + Provide git_config with a callback-data parameter\n\n* jc/apply-whitespace (Sat May 17 02:02:44 2008 -0700) 3 commits\n + builtin-apply: do not declare patch is creation when we do not\n   know it\n + builtin-apply: accept patch to an empty file\n + builtin-apply: typofix\n\nWe were loose when parsing a patch that adds contents to an empty file.\nThis fix would be nice to have in 1.5.6.\n\n* js/mailinfo (Fri May 16 14:03:30 2008 +0100) 3 commits\n + mailsplit: minor clean-up in read_line_with_nul()\n + mailinfo: apply the same fix not to lose NULs in BASE64 and QP\n   codepaths\n + mailsplit and mailinfo: gracefully handle NUL characters\n\nWhen \"am\" processes a patch that modifies a line with NUL, we used to\nchomp the patch line there, resulting in rejects.  This patch fixes the\nissue partially, only when the message is not encoded in BASE64 nor\nQuoted-Printable.  I suspect its handling of a MIME attachment may still\nwrong, but otherwise this should fix the breakage reported earlier.\n\n* mo/cvsserver (Wed May 14 22:35:48 2008 -0600) 3 commits\n + git-cvsserver: add ability to guess -kb from contents\n + implement gitcvs.usecrlfattr\n + git-cvsserver: add mechanism for managing working tree and current\n   directory\n\n* js/cvsexportcommit (Wed May 14 15:29:49 2008 +0100) 2 commits\n + cvsexportcommit: introduce -W for shared working trees (between\n   Git and CVS)\n + cvsexportcommit: chomp only removes trailing whitespace\n\nCVS interoperability improvements.\n\n* ar/t6031 (Sun May 18 16:57:27 2008 +0200) 1 commit\n + Fix t6031 on filesystems without working exec bit\n\n* jc/unpack-trees-reword (Sat May 17 12:03:49 2008 -0700) 1 commit\n + unpack-trees: allow Porcelain to give different error messages\n\nMakes safety message from \"git checkout switch-to-this-branch\" a bit\neasier to read, and opens up the possibility to reword messages from other\ncommands that use unpack-trees machinery.\n\n* jc/add-n-u (Wed May 21 12:04:34 2008 -0700) 1 commit\n + \"git-add -n -u\" should not add but just report\n\n* js/ignore-submodule (Wed May 14 18:03:59 2008 +0100) 3 commits\n + Ignore dirty submodule states during rebase and stash\n + Teach update-index about --ignore-submodules\n + diff options: Introduce --ignore-submodules\n\n* sp/ignorecase (Thu May 15 07:19:54 2008 +0200) 5 commits\n + t0050: Fix merge test on case sensitive file systems\n + t0050: Add test for case insensitive add\n + t0050: Set core.ignorecase case to activate case insensitivity\n + t0050: Test autodetect core.ignorecase\n + git-init: autodetect core.ignorecase\n\n* bc/repack (Thu May 15 22:37:31 2008 -0400) 6 commits\n + Documentation/git-repack.txt: document new -A behaviour\n + let pack-objects do the writing of unreachable objects as loose\n   objects\n + add a force_object_loose() function\n + builtin-gc.c: deprecate --prune, it now really has no effect\n + git-gc: always use -A when manually repacking\n + repack: modify behavior of -A option to leave unreferenced objects\n   unpacked\n\n* db/clone-in-c (Tue May 20 14:15:14 2008 -0400) 11 commits\n + clone: fall back to copying if hardlinking fails\n + builtin-clone.c: Need to closedir() in copy_or_link_directory()\n + builtin-clone: fix initial checkout\n + Build in clone\n + Provide API access to init_db()\n + Add a function to set a non-default work tree\n + Allow for having for_each_ref() list extra refs\n + Have a constant extern refspec for \"--tags\"\n + Add a library function to add an alternate to the alternates file\n + Add a lockfile function to append to a file\n + Mark the list of refs to fetch as const\n\n* pb/push (Mon Apr 28 11:32:12 2008 -0400) 1 commit\n + add special \"matching refs\" refspec\n\nThis first patch is a good enhancement without hurting any existing users.\nWe need a staged introduction of the second and later patches, and many\npeople including me did not agree the later ones in the series are\ndesirable.\n\n* ap/svn (Mon May 12 17:09:49 2008 -0700) 4 commits\n + git-svn: add test for --add-author-from and --use-log-author\n + git-svn: add documentation for --add-author-from option.\n + git-svn: Add --add-author-from option.\n + git-svn: add documentation for --use-log-author option.\n\nSome tweak for output might be needed, but I'll leave that to actual\ngit-svn users.\n\n* ar/batch-cat (Wed Apr 23 15:17:47 2008 -0400) 13 commits\n + change quoting in test t1006-cat-file.sh\n + builtin-cat-file.c: use parse_options()\n + git-svn: Speed up fetch\n + Git.pm: Add hash_and_insert_object and cat_blob\n + Git.pm: Add command_bidi_pipe and command_close_bidi_pipe\n + git-hash-object: Add --stdin-paths option\n + Add more tests for git hash-object\n + Move git-hash-object tests from t5303 to t1007\n + git-cat-file: Add --batch option\n + git-cat-file: Add --batch-check option\n + git-cat-file: Make option parsing a little more flexible\n + git-cat-file: Small refactor of cmd_cat_file\n + Add tests for git cat-file\n\nThe series is meant to speed up git-svn by avoiding many individual\ninvocations of git-cat-file, started by Adam Roben and finished by Michele\nBallabio.\n\n----------------------------------------------------------------\n[Stalled]\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.\n\nThis needs debugging.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe tip commit on the series).\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n + Use perl instead of tac\n + Fix t3404 assumption that `wc -l` does not use whitespace.\n + rebase -i: Use : in expr command instead of match.\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.  Dscho seems to\nhave quite a strong objection to the 'mark' syntax and mechanism being\nunnecessarily complex.  Let's wait and see if a less complex but equally\nexpressive alternative materializes...\n\n----------------------------------------------------------------\n[On Hold]\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n - Eliminate an unnecessary chdir(\"..\")\n - Add support for GIT_CEILING_DIRECTORIES\n - Fold test-absolute-path into test-path-utils\n - Implement normalize_absolute_path\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n - merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n\n* jc/diff-words (Sun May 11 12:33:48 2008 -0700) 2 commits\n - diff --color-words: a bit of tweak\n - diff --color-words reimplementation\n\nThis series did not pan out well.  I briefly thought that perhaps I should\ndiscard them and replace with the \"not just whitespace\" one from Ping Yin\nfirst, hoping that we can clean the overall logic up later, but perhaps\nthe whole thing can get a fresh restart after 1.5.6.  I'll drop this\naltogether the next round.\n"},{"id":"77825","messageId":"7vd4n82tqw.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vwslhg8qe.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] git-diff: allow --no-index semantics a bit more","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-27T05:36:39Z","receivedAt":"2008-05-27T05:36:39Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Even when inside a git work tree, if two paths are given and at least one\nis clearly outside the work tree, it cannot be a request to diff a tracked\npath anyway; allow such an invocation to use --no-index semantics.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n > * jc/diff-no-no-index (Fri May 23 22:28:56 2008 -0700) 3 commits\n >  + \"git diff\": do not ignore index without --no-index\n >  + diff-files: do not play --no-index games\n >  + tests: do not use implicit \"git diff --no-index\"\n >\n > This was done in response to recently discovered interaction with stgit;\n > we were too eater to invoke --no-index behaviour without being asked.\n > Currently it even drops the behaviour when you ask to compare two paths\n > that are outside of git work tree if your current directory is inside it,\n > which I think could safely resurrect, and then the whole thing will be\n > ready for 1.5.6.\n\n And this should hopefully be enough.\n\n diff-no-index.c |   39 ++++++++++++++++++++++++++++++++-------\n 1 files changed, 32 insertions(+), 7 deletions(-)\n\ndiff --git a/diff-no-index.c b/diff-no-index.c\nindex 1b57fee..b1ae791 100644\n--- a/diff-no-index.c\n+++ b/diff-no-index.c\n@@ -144,6 +144,25 @@ static int queue_diff(struct diff_options *o,\n \t}\n }\n \n+static int path_outside_repo(const char *path)\n+{\n+\t/*\n+\t * We have already done setup_git_directory_gently() so we\n+\t * know we are inside a git work tree already.\n+\t */\n+\tconst char *work_tree;\n+\tsize_t len;\n+\n+\tif (!is_absolute_path(path))\n+\t\treturn 0;\n+\twork_tree = get_git_work_tree();\n+\tlen = strlen(work_tree);\n+\tif (strncmp(path, work_tree, len) ||\n+\t    (path[len] != '\\0' && path[len] != '/'))\n+\t\treturn 1;\n+\treturn 0;\n+}\n+\n void diff_no_index(struct rev_info *revs,\n \t\t   int argc, const char **argv,\n \t\t   int nongit, const char *prefix)\n@@ -162,13 +181,19 @@ void diff_no_index(struct rev_info *revs,\n \t\t\tbreak;\n \t}\n \n-\t/*\n-\t * No explicit --no-index, but \"git diff --opts A B\" outside\n-\t * a git repository is a cute hack to support.\n-\t */\n-\tif (!no_index && !nongit)\n-\t\treturn;\n-\n+\tif (!no_index && !nongit) {\n+\t\t/*\n+\t\t * Inside a git repository, without --no-index.  Only\n+\t\t * when a path outside the repository is given,\n+\t\t * e.g. \"git diff /var/tmp/[12]\", or \"git diff\n+\t\t * Makefile /var/tmp/Makefile\", allow it to be used as\n+\t\t * a colourful \"diff\" replacement.\n+\t\t */\n+\t\tif ((argc != i + 2) ||\n+\t\t    (!path_outside_repo(argv[i]) &&\n+\t\t     !path_outside_repo(argv[i+1])))\n+\t\t\treturn;\n+\t}\n \tif (argc != i + 2)\n \t\tdie(\"git diff %s takes two paths\",\n \t\t    no_index ? \"--no-index\" : \"[--no-index]\");\n-- \n1.5.6.rc0.13.g2d392\n"},{"id":"78175","messageId":"7vhccfiksy.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vwslhg8qe.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-05-30T20:44:29Z","receivedAt":"2008-05-30T20:44:29Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt's been a while since the last issue of this series.  I've been\nswamped, and haven't had a chance to spend enough time on reviewing and\naccepting patches.\n\nA rough timeline from now on.\n\n * Fixes of 'master' continues, with newer -rcX tagged every once in a\n   while.\n\n * 1.5.6 Final (2008-06-08 -- likely to slip by a week or so, though).\n\nThere are a few known breakages I want to see addressed that are not in\nhere before 1.5.6 (no not any new features but pure bugfixes).\n\n----------------------------------------------------------------\n[New Topics]\n\n* jc/checkout (Wed May 28 16:11:16 2008 -0700) 5 commits\n - PARK: NUL hack to entry\n - checkout: \"best effort\" checkout\n - unpack_trees(): allow callers to differentiate worktree errors\n   from merge errors\n - checkout: consolidate reset_{to_new,clean_to_new|()\n - checkout: make reset_clean_to_new() not die by itself\n\n* lr/init-bare (Wed May 28 19:53:57 2008 +0100) 1 commit\n - git-init: accept --bare option\n\nThis makes both \"git --bare init\" and \"git init --bare\" work, which would\nreduce confusion.  I am tempted to include it in 1.5.6.  Comments?\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* jc/diff-no-no-index (Mon May 26 22:35:07 2008 -0700) 5 commits\n + git diff --no-index: default to page like other diff frontends\n + git-diff: allow  --no-index semantics a bit more\n + \"git diff\": do not ignore index without --no-index\n + diff-files: do not play --no-index games\n + tests: do not use implicit \"git diff --no-index\"\n\nThis was done in response to recently discovered interaction with stgit;\nwe were too eater to invoke --no-index behaviour without being asked.\n\n----------------------------------------------------------------\n[Stalled]\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.\n\nThis needs debugging.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe tip commit on the series).\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n + Use perl instead of tac\n + Fix t3404 assumption that `wc -l` does not use whitespace.\n + rebase -i: Use : in expr command instead of match.\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.  Dscho seems to\nhave quite a strong objection to the 'mark' syntax and mechanism being\nunnecessarily complex.  Let's wait and see if a less complex but equally\nexpressive alternative materializes...\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n - Introduce fast forward option only\n - Head reduction before selecting merge strategy\n - Restructure git-merge.sh\n - Introduce -ff=<fast forward option>\n - New merge tests\n - Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C but it appears\nneither will happen by 1.5.6 anyway.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n - Eliminate an unnecessary chdir(\"..\")\n - Add support for GIT_CEILING_DIRECTORIES\n - Fold test-absolute-path into test-path-utils\n - Implement normalize_absolute_path\n\n----------------------------------------------------------------\n[On Hold]\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n - merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"78177","messageId":"48406D5C.4000703@freescale.com","threadId":"12603","inReplyTo":"7vhccfiksy.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Jon Loeliger","fromEmail":"jdl@freescale.com","sentAt":"2008-05-30T21:10:52Z","receivedAt":"2008-05-30T21:10:52Z","isPatch":false,"sender":{"key":"jdl@jdl.com","avatar":"https://gravatar.com/avatar/75ce9a10b151acd2c28ec4ab2136dba7b2ff1634530bd04b155981a749d08a64?d=mp&s=160"},"body":"Junio C Hamano wrote:\n> Here are the topics that have been cooking.  Commits prefixed\n> with '-' are only in 'pu' while commits prefixed with '+' are\n> in 'next'.\n> \n>\n> * js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n>  + Use perl instead of tac\n>  + Fix t3404 assumption that `wc -l` does not use whitespace.\n>  + rebase -i: Use : in expr command instead of match.\n>  + rebase -i: update the implementation of 'mark' command\n>  + Add option --preserve-tags\n>  + Teach rebase interactive the tag command\n>  + Add option --first-parent\n>  + Do rebase with preserve merges with advanced TODO list\n>  + Select all lines with fake-editor\n>  + Unify the length of $SHORT* and the commits in the TODO list\n>  + Teach rebase interactive the merge command\n>  + Move redo merge code in a function\n>  + Teach rebase interactive the reset command\n>  + Teach rebase interactive the mark command\n>  + Move cleanup code into it's own function\n>  + Don't append default merge message to -m message\n>  + fake-editor: output TODO list if unchanged\n> \n> This may complement the proposed \"sequencer\" GSoC project.  Dscho seems to\n> have quite a strong objection to the 'mark' syntax and mechanism being\n> unnecessarily complex.  Let's wait and see if a less complex but equally\n> expressive alternative materializes...\n\n\nWell, there are the two not-quite facetious suggestions\nI made off list to Junio.  Granted, he though they would\nbe overkill (too), but I guess I could make them here for\nthe general record in any case.\n\nOne suggestion was to make a procedural model out of\nthe commit graph and allow something like this:\n\n    b :- pick(B)\n    x :- merge(pick(A), b)\n    y :- merge(pick(C), b)\n    z :- merge(x, y)\n\nMy second and semi-equivallent suggestion was to\nallow a lisp-like notation:\n\n    (merge (merge (pick A)\n                  (pick B)\n           (merge (pick B)\n                  (pick C)\n\nAs Junio observed, even that could be beyond what most\ncasual git rebase -i users are willing to do to a sequencer\nedit stream before getting down to business.\n\nAh well. :-)\n\njdl\n"},{"id":"78188","messageId":"E718F523-70B9-4742-B291-CDBE4790A278@midwinter.com","threadId":"12603","inReplyTo":"7vhccfiksy.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Steven Grimm","fromEmail":"koreth@midwinter.com","sentAt":"2008-05-30T22:00:01Z","receivedAt":"2008-05-30T22:00:01Z","isPatch":false,"sender":{"key":"koreth@midwinter.com","avatar":"https://gravatar.com/avatar/71b4d2e8b62f168bdc9e9205341159e3567003b4f9e2127c617c5fa0a1f5bad2?d=mp&s=160"},"body":"On May 30, 2008, at 1:44 PM, Junio C Hamano wrote:\n> [Stalled]\n>\n> * dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n> - Eliminate an unnecessary chdir(\"..\")\n> - Add support for GIT_CEILING_DIRECTORIES\n> - Fold test-absolute-path into test-path-utils\n> - Implement normalize_absolute_path\n\n\nThe most recent version of this patch seemed to come and go without  \nany commentary one way or the other. What are people's objections to  \nit as it stands now?\n\n-Steve\n"},{"id":"78203","messageId":"20080531012511.GA5907@leksak.fem-net","threadId":"12603","inReplyTo":"48406D5C.4000703@freescale.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Stephan Beyer","fromEmail":"s-beyer@gmx.net","sentAt":"2008-05-31T01:25:11Z","receivedAt":"2008-05-31T01:25:11Z","isPatch":false,"sender":{"key":"s-beyer@gmx.net","avatar":"https://avatars.githubusercontent.com/u/143889?v=4"},"body":"Hi,\n\n> One suggestion was to make a procedural model out of\n> the commit graph and allow something like this:\n>\n>    b :- pick(B)\n>    x :- merge(pick(A), b)\n>    y :- merge(pick(C), b)\n>    z :- merge(x, y)\n\nNice idea.  But imho too hard for casual users.\nSomeone who has to learn a new language won't use the tool.\n\n> My second and semi-equivallent suggestion was to\n> allow a lisp-like notation:\n>\n>    (merge (merge (pick A)\n>                  (pick B)\n>           (merge (pick B)\n>                  (pick C)\n\nYou forgot some right parenthesis here ;-)\n...which shows, that it is also not easy enough for users.\n\nOr is it intentional?\n\n:)\nStephan\n\n-- \nStephan Beyer <s-beyer@gmx.net>, PGP 0x6EDDD207FCC5040F\n"},{"id":"78340","messageId":"7vod6k6zg4.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vhccfiksy.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-02T07:58:03Z","receivedAt":"2008-06-02T07:58:03Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt's been a while since the last issue of this series.  I've been\nswamped, and haven't had a chance to spend enough time on reviewing and\naccepting patches.\n\nA rough timeline from now on.\n\n * Fixes of 'master' continues, with newer -rcX tagged every once in a\n   while.  I'd like to tag -rc1 in a few days.\n\n * 1.5.6 Final (2008-06-08 -- likely to slip by a week or so, though).\n\n----------------------------------------------------------------\n[New Topics]\n\n* lw/gitweb (Sat May 31 16:19:24 2008 +0200) 2 commits\n - gitweb: use Git.pm, and use its parse_rev method for\n   git_get_head_hash\n - perl/Git.pm: add parse_rev method\n\nI do not necessarily think it is an improvement to name the operation\ncalled as \"rev-parse\" at the plumbing layer with a different name\n\"get_hash\" as the later round of this series does.\n\nAs I mentioned on the list, I think the \"PERL5LIB fix\" I squashed in was a\nmisguided workaround to a wrong problem; if we are making gitweb.perl to\nuse Git.pm, I think we should do the same GITPERLLIB trick we do to other\nperl scripts for consistency.\n\nI've looked at the Git.pm testsuite that uses Test::More briefly but\nhadn't really reviewed it.  Is Test::More commonly used, considered solid\nand widely available?\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* lw/test-fix (Sat May 31 23:11:21 2008 +0200) 1 commit\n + t/test-lib.sh: resolve symlinks in working directory, for pathname\n   comparisons\n\n* sb/am-tests (Sun Jun 1 00:11:43 2008 +0200) 2 commits\n + Merge t4150-am-subdir.sh and t4151-am.sh into t4150-am.sh\n + Add test cases for git-am\n\n* lt/pack-sync (Fri May 30 08:54:46 2008 -0700) 2 commits\n + Remove now unnecessary 'sync()' calls\n + Make pack creation always fsync() the result\n\n* sp/remote (Sun Jun 1 00:28:04 2008 -0400) 3 commits\n + Make \"git-remote rm\" delete refs acccording to fetch specs\n + Make \"git-remote prune\" delete refs according to fetch specs\n + Remove unused remote_prefix member in builtin-remote\n\n\"git-remote\" had an unwarranted assumption that everybody uses\nrefs/remotes/$it namespace to track remote repository called $it.  This\nseries is a reasonable fix to it.\n\n* np/pack-check (Thu May 29 17:34:50 2008 -0400) 1 commit\n + make verify-pack a bit more useful with bad packs\n\n* lr/init-bare (Wed May 28 19:53:57 2008 +0100) 1 commit\n + git-init: accept --bare option\n\nThis makes both \"git --bare init\" and \"git init --bare\" work, which would\nreduce confusion.\n\n* jc/checkout (Wed May 28 16:11:16 2008 -0700) 4 commits\n + checkout: \"best effort\" checkout\n + unpack_trees(): allow callers to differentiate worktree errors\n   from merge errors\n + checkout: consolidate reset_{to_new,clean_to_new|()\n + checkout: make reset_clean_to_new() not die by itself\n\nThis \"fix\" seems to help real-world users.\n\n* jb/reset-q (Sat May 31 18:10:58 2008 -0700) 1 commit\n + git-reset: honor -q and do not show progress message\n\n----------------------------------------------------------------\n[Stalled]\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.\n\nThis needs debugging.\n\n* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe tip commit on the series).\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n + Use perl instead of tac\n + Fix t3404 assumption that `wc -l` does not use whitespace.\n + rebase -i: Use : in expr command instead of match.\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.  Dscho seems to\nhave quite a strong objection to the 'mark' syntax and mechanism being\nunnecessarily complex.  Let's wait and see if a less complex but equally\nexpressive alternative materializes...\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n - Introduce fast forward option only\n - Head reduction before selecting merge strategy\n - Restructure git-merge.sh\n - Introduce -ff=<fast forward option>\n - New merge tests\n - Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C but it appears\nneither will happen by 1.5.6 anyway.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n - Eliminate an unnecessary chdir(\"..\")\n - Add support for GIT_CEILING_DIRECTORIES\n - Fold test-absolute-path into test-path-utils\n - Implement normalize_absolute_path\n\n----------------------------------------------------------------\n[On Hold]\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n - merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"78342","messageId":"m3hccc1cm0.fsf@localhost.localdomain","threadId":"12603","inReplyTo":"7vod6k6zg4.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-06-02T08:10:22Z","receivedAt":"2008-06-02T08:10:22Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> I've looked at the Git.pm testsuite that uses Test::More briefly but\n> hadn't really reviewed it.  Is Test::More commonly used, considered solid\n> and widely available?\n\nIt is part of perl-5.8.6-24 RPM package in Fedora Core 4.\nIt is mentioned in http://www.perlfoundation.org/perl5/index.cgi?testing\n \n> ----------------------------------------------------------------\n> [Graduated to \"master\"]\n> \n> * lr/init-bare (Wed May 28 19:53:57 2008 +0100) 1 commit\n>  + git-init: accept --bare option\n> \n> This makes both \"git --bare init\" and \"git init --bare\" work, which would\n> reduce confusion.\n\nNice.\n\n-- \nJakub Narebski\nPoland\nShadeHawk on #git\n"},{"id":"78358","messageId":"20080602115622.GC32553@post.servercare.de","threadId":"12603","inReplyTo":"7vod6k6zg4.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Sebastian Bober","fromEmail":"seb@tix64.net","sentAt":"2008-06-02T11:56:22Z","receivedAt":"2008-06-02T11:56:22Z","isPatch":false,"sender":{"key":"seb@tix64.net","avatar":null},"body":"On Mon, Jun 02, 2008 at 12:58:03AM -0700, Junio C Hamano wrote:\n> \n> I've looked at the Git.pm testsuite that uses Test::More briefly but\n> hadn't really reviewed it.  Is Test::More commonly used, considered solid\n> and widely available?\n\nyes it is on all three points. It is the most commonly used test module\nfor Perl, used by thousands of CPAN distributions. Test::More is\ndelivered as core module since 5.8.0 or 5.6.2, so is widely deployed. It\nis actively maintained and is integrated in a test framework that allows\nthe use and development of further \"plug-in\" test modules. With that\nit's conceivable to write a test module specifically for git and its\nusage scenarios.\n\nRegards,\n  Sebastian\n"},{"id":"78371","messageId":"alpine.DEB.1.00.0806021545340.13507@racer.site.net","threadId":"12603","inReplyTo":"7vod6k6zg4.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-02T15:17:05Z","receivedAt":"2008-06-02T15:17:05Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 2 Jun 2008, Junio C Hamano wrote:\n\n> * sp/remote (Sun Jun 1 00:28:04 2008 -0400) 3 commits\n>  + Make \"git-remote rm\" delete refs acccording to fetch specs\n>  + Make \"git-remote prune\" delete refs according to fetch specs\n>  + Remove unused remote_prefix member in builtin-remote\n> \n> \"git-remote\" had an unwarranted assumption that everybody uses \n> refs/remotes/$it namespace to track remote repository called $it.  This \n> series is a reasonable fix to it.\n\nAFAIR this limitation was already in the scripted version, and I tried to \nwrap my head around lifting it.  However, I did not end up with the \nbrillian analysis of Shawn, and was almost sending a reply contradicting \nhis logic.  However, I agree with Shawn that it is the same issue as \ncontradicting fetches, so if it leads to problems, it is a pilot error.\n\n_However_, I still try to come up with some attic for deleted refs.  It is \nnot just a matter of moving the logs to a different namespace because of \nD/F conflicts.\n\nCiao,\nDscho\n"},{"id":"78374","messageId":"20080602154320.GK12896@spearce.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0806021545340.13507@racer.site.net","subject":"Re: What's cooking in git.git (topics)","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-02T15:43:20Z","receivedAt":"2008-06-02T15:43:20Z","isPatch":false,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> _However_, I still try to come up with some attic for deleted refs.  It is \n> not just a matter of moving the logs to a different namespace because of \n> D/F conflicts.\n\nRecord the delete at the end of the reflog so we have a date/time\nrecord and the last SHA-1 value, just in case it doesn't match up\nwith the most recent reflog entry (e.g. user ran some legacy tool\nthat just redirect git-commit-tree output to the branch itself).\n\nTake the SHA-1 hash of the reflog now that the final entry is\nwritten.  Rename the file to .git/attic/$sha1 and call it a day.\nI thought about compressing the file too, but its not worth saving\nthe disk space here and it would make tools that inspect the attic\nexpensive to run.\n\nThe attic can be easily cleaned out by looking at the timestamp of\nthe last record of each file.  Attic log files older than X days can\nbe removed.  This is better than reading the modification time of\nthe file as we don't have to worry about some copy tool not saving\nthe modification time if the user moves/copies the repository.\n\nThat's all the easy stuff.\n\nThe hard stuff is:\n\n- Should the commits listed in attic reflogs be considered reachable\n  when we pack, prune or fsck?  Commits in a reflog are, even if\n  they aren't reachable from a transport perspective.\n\n- What command gets the extra options to see what branches are in\n  the attic and when they got there?\n\n- What command gets the extra option to recover a branch from the\n  attic?\n\n- When we recover a branch from the attic is it sufficient to recover\n  it to the name it had at time of deletion?  Should we allow you to\n  recover it to a different name?\n\n- Is it sufficient to make you recover the branch from the attic\n  before you can access the rest of its reflog with porcelain?\n\n- What do we do if we recover a branch with stale reflog entries\n  and the attic is deemed to not be reachable (see above).\n\n-- \nShawn.\n"},{"id":"78381","messageId":"alpine.DEB.1.00.0806021659480.13507@racer.site.net","threadId":"12603","inReplyTo":"20080602154320.GK12896@spearce.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-02T16:14:18Z","receivedAt":"2008-06-02T16:14:18Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 2 Jun 2008, Shawn O. Pearce wrote:\n\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> > _However_, I still try to come up with some attic for deleted refs.  \n> > It is not just a matter of moving the logs to a different namespace \n> > because of D/F conflicts.\n> \n> Record the delete at the end of the reflog so we have a date/time record \n> and the last SHA-1 value, just in case it doesn't match up with the most \n> recent reflog entry (e.g. user ran some legacy tool that just redirect \n> git-commit-tree output to the branch itself).\n\nThat's obvious.\n\n> Take the SHA-1 hash of the reflog now that the final entry is written.  \n> Rename the file to .git/attic/$sha1 and call it a day. I thought about \n> compressing the file too, but its not worth saving the disk space here \n> and it would make tools that inspect the attic expensive to run.\n> \n> The attic can be easily cleaned out by looking at the timestamp of the \n> last record of each file.  Attic log files older than X days can be \n> removed.  This is better than reading the modification time of the file \n> as we don't have to worry about some copy tool not saving the \n> modification time if the user moves/copies the repository.\n\nI actually would prefer to have the logs in the .git/logs/ directory, so \nthat I can easily reuse all existing reflog handling.\n\nAfter sending the mail, I actually got an idea:\n\n\t.git/logs/attic/<timestamp>/<refname>\n\nI think this should work without problems.  In that case, git-gc also \nhandles the garbage collection.\n\n> The hard stuff is:\n> \n> - Should the commits listed in attic reflogs be considered reachable \n>   when we pack, prune or fsck?  Commits in a reflog are, even if they \n>   aren't reachable from a transport perspective.\n\nYes, they should.  That is the whole purpose of keeping the reflogs: I \nwant to be able to resurrect the branch, if I deleted it by accident.\n\n> - What command gets the extra options to see what branches are in the \n>   attic and when they got there?\n\nI'd like to have them listed with the other reflogs.\n\n> - What command gets the extra option to recover a branch from the attic?\n\nNone.  It is the user's responsibility to use the information wisely.\n\ngit branch resurrected attic/<bla>/refs/heads/accidentally-deleted@{1}\n\n> - When we recover a branch from the attic is it sufficient to recover it \n>   to the name it had at time of deletion?  Should we allow you to \n>   recover it to a different name?\n\nSee above.  I think resurrecting under the same name would not necessarily \nbe the most frequent operation on deleted refs.\n\n> - Is it sufficient to make you recover the branch from the attic before \n>   you can access the rest of its reflog with porcelain?\n> \n> - What do we do if we recover a branch with stale reflog entries\n>   and the attic is deemed to not be reachable (see above).\n\nI'll just go with my idea, implement it, and post it here for discussion.\n\nCiao,\nDscho\n"},{"id":"78391","messageId":"7vej7f7lj5.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0806021659480.13507@racer.site.net","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-02T18:13:18Z","receivedAt":"2008-06-02T18:13:18Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> After sending the mail, I actually got an idea:\n>\n> \t.git/logs/attic/<timestamp>/<refname>\n>\n> I think this should work without problems.  In that case, git-gc also \n> handles the garbage collection.\n\nI do not like that particular color of the bikeshed, but I'd agree that it\ncertainly is the easiest route from both the implementation and the design\npoint of view.  All of the \"hard stuff\" Shawn mentions goes away, and you \nare left with only one new \"hard stuff\", which is much easier to solve:\n\n - Should there be a way to really remove the archived reflog?\n\nAnd my answer is \"yes, a new subcommand to 'git-reflog' to list and\nanother subcommand to remove one\".\n\nAs to default behaviour, probably we would by default archive any local\nbranches, and _not_ archive other things like remote trackers and tags.  A\nnew configuration variable reflog.archive = {none,heads,all} would be\nhonored and absense of it defaults to reflog.archive = heads.\n"},{"id":"78396","messageId":"alpine.DEB.1.00.0806022012510.13507@racer.site.net","threadId":"12603","inReplyTo":"7vej7f7lj5.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-02T19:17:46Z","receivedAt":"2008-06-02T19:17:46Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 2 Jun 2008, Junio C Hamano wrote:\n\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> > After sending the mail, I actually got an idea:\n> >\n> > \t.git/logs/attic/<timestamp>/<refname>\n> >\n> > I think this should work without problems.  In that case, git-gc also \n> > handles the garbage collection.\n> \n> I do not like that particular color of the bikeshed, but I'd agree that \n> it certainly is the easiest route from both the implementation and the \n> design point of view.\n\nOkay, how about \"deleted-%d.%m.%Y-%H:%M:%S\" instead of \"attic/%s\"?\n\n> All of the \"hard stuff\" Shawn mentions goes away, and you are left with \n> only one new \"hard stuff\", which is much easier to solve:\n> \n>  - Should there be a way to really remove the archived reflog?\n> \n> And my answer is \"yes, a new subcommand to 'git-reflog' to list and\n> another subcommand to remove one\".\n\nYou mean a subcommand to list just the refs that exist in the deleted-* \nnamespace?\n\nAs to remove one, how about:\n\n\t git reflog --expire=now --expire-unreachable=now \\\n\t\tdeleted-<date>/<refname>\n\nHmm?\n\n> As to default behaviour, probably we would by default archive any local \n> branches, and _not_ archive other things like remote trackers and tags.  \n\nUnfortunately, this is exactly what I need: remote trackers and tags.  \nSince I have to delete branches from repo.or.cz as long as the pruning of \nforked projects' objects does not work correctly.\n\n> A new configuration variable reflog.archive = {none,heads,all} would be \n> honored and absense of it defaults to reflog.archive = heads.\n\nSure, that makes sense.  I'd just \"git config --global reflog.archive \nall\".\n\nCiao,\nDscho\n"},{"id":"78399","messageId":"alpine.DEB.1.00.0806022025030.13507@racer.site.net","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0806022012510.13507@racer.site.net","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-02T19:25:47Z","receivedAt":"2008-06-02T19:25:47Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 2 Jun 2008, Johannes Schindelin wrote:\n\n> On Mon, 2 Jun 2008, Junio C Hamano wrote:\n> \n> > Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> > \n> > > After sending the mail, I actually got an idea:\n> > >\n> > > \t.git/logs/attic/<timestamp>/<refname>\n\nJust tried that, and for obvious reasons it fails the testsuite: Git is \njust too darned fast.\n\nCiao,\nDscho\n"},{"id":"79704","messageId":"7v4p7xwsfp.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vod6k6zg4.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-13T10:16:42Z","receivedAt":"2008-06-13T10:16:42Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt's been a while since the last issue of this series.  I've been\nswamped, and haven't had a chance to spend enough time on reviewing and\naccepting patches.\n\nA rough timeline from now on.\n\n * 1.5.6-rc3 this weekend.\n\n * 1.5.6 Final (2008-06-20).\n\n----------------------------------------------------------------\n[New Topics]\n\n* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits\n - gitweb: Separate generating 'sort by' table header\n - gitweb: Separate filling list of projects info\n\n* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit\n + Teach new attribute 'export-ignore' to git-archive\n\n* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit\n + gitweb: remove git_blame and rename git_blame2 to git_blame\n\n* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits\n + Make old sha1 optional with git update-ref -d\n + Clean up builtin-update-ref's option parsing\n\n* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits\n - Add configuration option for default untracked files mode\n - Add argument 'no' commit/status option -u|--untracked-files\n - Add an optional <mode> argument to commit/status -u|--untracked-\n   files option\n\n* rs/attr (Sun Jun 8 17:16:11 2008 +0200) 1 commit\n + Ignore .gitattributes in bare repositories\n\n* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits\n + Hook up the result aggregation in the test makefile.\n + A simple script to parse the results from the testcases\n + Modify test-lib.sh to output stats to t/test-results/*\n\nNone of the above are 1.5.6 material, except for the \"ignore\n.gitattributes file in bare repositories\" from René, which I think we\nshould have.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\nNothing this week.\n\n----------------------------------------------------------------\n[Stalled]\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.\n\nThis needs debugging.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n + Use perl instead of tac\n + Fix t3404 assumption that `wc -l` does not use whitespace.\n + rebase -i: Use : in expr command instead of match.\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nThis may complement the proposed \"sequencer\" GSoC project.  Dscho seems to\nhave quite a strong objection to the 'mark' syntax and mechanism being\nunnecessarily complex.  Let's wait and see if a less complex but equally\nexpressive alternative materializes...\n\nIt is very likely that this whole thing will be reverted from 'next' and\nbe replaced with the new sequenser series during 1.6.0 cycle.\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n - Introduce fast forward option only\n - Head reduction before selecting merge strategy\n - Restructure git-merge.sh\n - Introduce -ff=<fast forward option>\n - New merge tests\n - Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C but it appears\nneither will happen by 1.5.6 anyway.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n - Eliminate an unnecessary chdir(\"..\")\n - Add support for GIT_CEILING_DIRECTORIES\n - Fold test-absolute-path into test-path-utils\n - Implement normalize_absolute_path\n\n----------------------------------------------------------------\n[On Hold]\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n - merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"80207","messageId":"7v3anb19n7.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7v4p7xwsfp.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-18T07:31:56Z","receivedAt":"2008-06-18T07:31:56Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt's been a while since the last issue of this series.  I've been\nswamped, and haven't had a chance to spend enough time on reviewing and\naccepting patches.\n\nA rough timeline from now on.\n\n * 1.5.6 Final (late this week).\n\n----------------------------------------------------------------\n[New Topics]\n\n* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits\n - Teach \"git clone\" to pack refs\n - Prepare testsuite for a \"git clone\" that packs refs\n - Move pack_refs() and friends into libgit\n - Incorporate fetched packs in future object traversal\n\nWould be helpful cloning from a repository with insanely large number of\nrefs.\n\n* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit\n - Per-ref reflog expiry configuration\n\nPerhaps a good foundation for optionally unexpirable stash.\n\n* lw/perlish (Tue Jun 17 08:59:51 2008 +0200) 2 commits\n - Git.pm: add test suite\n - t/test-lib.sh: add test_external and test_external_without_stderr\n\nIO::String dependency is a bit worrysome, and the error diagnostic could\nhopefully be made more obvious, but I do not have a fundamental objection\nto this series.\n\n* jk/test (Sat Jun 14 03:28:07 2008 -0400) 5 commits\n + enable whitespace checking of test scripts\n + avoid trailing whitespace in zero-change diffstat lines\n + avoid whitespace on empty line in automatic usage message\n + mask necessary whitespace policy violations in test scripts\n + fix whitespace violations in test scripts\n\nTightens whitespace rules for t/*.sh scripts.\n\n* pb/fast-export (Wed Jun 11 13:17:04 2008 +0200) 1 commit\n - builtin-fast-export: Add importing and exporting of revision marks\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* rs/attr (Sun Jun 8 17:16:11 2008 +0200) 1 commit\n + Ignore .gitattributes in bare repositories\n\n----------------------------------------------------------------\n[On Hold]\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n + \"git push\": tellme-more protocol extension\n\nAllows common ancestor negotiation for git-push to help people with shared\nrepository workflow in certain minority situations.  The lack of protocol\nsupport has been bugging me for quite some time, and that was the reason I\ndid this.\n\nThis needs debugging.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n + Use perl instead of tac\n + Fix t3404 assumption that `wc -l` does not use whitespace.\n + rebase -i: Use : in expr command instead of match.\n + rebase -i: update the implementation of 'mark' command\n + Add option --preserve-tags\n + Teach rebase interactive the tag command\n + Add option --first-parent\n + Do rebase with preserve merges with advanced TODO list\n + Select all lines with fake-editor\n + Unify the length of $SHORT* and the commits in the TODO list\n + Teach rebase interactive the merge command\n + Move redo merge code in a function\n + Teach rebase interactive the reset command\n + Teach rebase interactive the mark command\n + Move cleanup code into it's own function\n + Don't append default merge message to -m message\n + fake-editor: output TODO list if unchanged\n\nIt is very likely that this whole thing will be reverted from 'next' and\nbe replaced with the new sequenser series during 1.6.0 cycle.\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n - Introduce fast forward option only\n - Head reduction before selecting merge strategy\n - Restructure git-merge.sh\n - Introduce -ff=<fast forward option>\n - New merge tests\n - Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C.  There is no\nfundamental reason to favor one over the other, so I'll be torn after\n1.5.6 happens, but not before.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n - Eliminate an unnecessary chdir(\"..\")\n - Add support for GIT_CEILING_DIRECTORIES\n - Fold test-absolute-path into test-path-utils\n - Implement normalize_absolute_path\n\n* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits\n - gitweb: Separate generating 'sort by' table header\n - gitweb: Separate filling list of projects info\n\n* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit\n + Teach new attribute 'export-ignore' to git-archive\n\n* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit\n + gitweb: remove git_blame and rename git_blame2 to git_blame\n\n* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits\n + Make old sha1 optional with git update-ref -d\n + Clean up builtin-update-ref's option parsing\n\n* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits\n - Add configuration option for default untracked files mode\n - Add argument 'no' commit/status option -u|--untracked-files\n - Add an optional <mode> argument to commit/status -u|--untracked-\n   files option\n\n* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits\n + Hook up the result aggregation in the test makefile.\n + A simple script to parse the results from the testcases\n + Modify test-lib.sh to output stats to t/test-results/*\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n - merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis needs to be held back, as it actually removes the support for\nfeatures that the main part of the series deprecates, until 1.6.0 or\nlater.\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n - Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"80300","messageId":"200806191058.58074.johan@herland.net","threadId":"12603","inReplyTo":"7v3anb19n7.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johan Herland","fromEmail":"johan@herland.net","sentAt":"2008-06-19T08:58:58Z","receivedAt":"2008-06-19T08:58:58Z","isPatch":false,"sender":{"key":"johan@herland.net","avatar":"https://avatars.githubusercontent.com/u/547031?v=4"},"body":"On Wednesday 18 June 2008, Junio C Hamano wrote:\n> [New Topics]\n>\n> * jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits\n>  - Teach \"git clone\" to pack refs\n>  - Prepare testsuite for a \"git clone\" that packs refs\n>  - Move pack_refs() and friends into libgit\n>  - Incorporate fetched packs in future object traversal\n>\n> Would be helpful cloning from a repository with insanely large number of\n> refs.\n\nThe first 3 patches (i.e. the bottom 3 in the above list) might be \nconsidered general cleanup patches, and are independent of each other (i.e. \nyou might want to include them on their own merit, independently of patch \n#4).\n\nThe final patch doesn't make any difference for \"regular\" repos (e.g. \ngit.git with ~200 refs) on Linux (see below). But once the number of refs \nincrease, the difference becomes obvious.\n\nHere are some numbers to give some more context:\n\nAll tests done on 64-bit quad-core Linux, cloning locally (hard-linked):\n\n~200 refs (git.git):\ncurrent next:    0.2s\nw/above patches: 0.2s\n\n~1000 refs (test repo):\ncurrent next:    0.16s\nw/above patches: 0.05s\n\n~11000 refs (test repo):\ncurrent next:    1.3s\nw/above patches: 0.3s\n\n~26000 refs (actual repo at $dayjob):\ncurrent next:    3.2s\nw/above patches: 0.8s\n\n\nRegards,\n\n...Johan\n\n-- \nJohan Herland, <johan@herland.net>\nwww.herland.net\n"},{"id":"80535","messageId":"7vwskjazql.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7v3anb19n7.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-21T09:44:50Z","receivedAt":"2008-06-21T09:44: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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  But bigger changes will be:\n\n * MinGW will be in.\n\n * /usr/bin/git-cat-file is no more.  The bulk of the git commands will\n   move to /usr/libexec/git-core/ or somesuch.\n\n * git-merge will be rewritten in C.\n\nCurrently tip of 'pu' is broken and does not pass tests, as j6t/mingw has\ninteraction with dr/ceiling and jc/merge-theirs has interaction with\nmv/merge-in-c.\n\n----------------------------------------------------------------\n[New Topics]\n\n* jc/merge-theirs (Fri Jun 20 00:17:59 2008 -0700) 2 commits\n - git-merge-recursive-{ours,theirs}\n - git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends may need to change, though.\n\n* lt/racy-empty (Tue Jun 10 10:44:43 2008 -0700) 1 commit\n + racy-git: an empty blob has a fixed object name\n\n* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit\n + Remove the use of '--' in merge program invocation\n\n* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits\n - compat/pread.c: Add a forward declaration to fix a warning\n - Windows: Fix ntohl() related warnings about printf formatting\n - Windows: TMP and TEMP environment variables specify a temporary\n   directory.\n - Windows: Make 'git help -a' work.\n - Windows: Work around an oddity when a pipe with no reader is\n   written to.\n - Windows: Make the pager work.\n - When installing, be prepared that template_dir may be relative.\n - Windows: Use a relative default template_dir and ETC_GITCONFIG\n - Windows: Compute the fallback for exec_path from the program\n   invocation.\n - Turn builtin_exec_path into a function.\n - Windows: Use a customized struct stat that also has the st_blocks\n   member.\n - Windows: Add a custom implementation for utime().\n - Windows: Add a new lstat and fstat implementation based on Win32\n   API.\n - Windows: Implement a custom spawnve().\n - Windows: Implement wrappers for gethostbyname(), socket(), and\n   connect().\n - Windows: Work around incompatible sort and find.\n - Windows: Implement asynchronous functions as threads.\n - Windows: Disambiguate DOS style paths from SSH URLs.\n - Windows: A rudimentary poll() emulation.\n - Windows: Change the name of hook scripts to make them not\n   executable.\n - Windows: Implement start_command().\n - Windows: A pipe() replacement whose ends are not inherited to\n   children.\n - Windows: Wrap execve so that shell scripts can be invoked.\n - Windows: Implement setitimer() and sigaction().\n - Windows: Fix PRIuMAX definition.\n - Windows: Implement gettimeofday().\n - Windows: Handle absolute paths in\n   safe_create_leading_directories().\n - Windows: Treat Windows style path names.\n - setup.c: Prepare for Windows directory separators.\n - Windows: Work around misbehaved rename().\n - Windows: always chmod(, 0666) before unlink().\n - Windows: A minimal implemention of getpwuid().\n - Windows: Implement a wrapper of the open() function.\n - Windows: Strip \".exe\" from the program name.\n - Windows: Use the Windows style PATH separator ';'.\n - Add target architecture MinGW.\n - Compile some programs only conditionally.\n - Add compat/regex.[ch] and compat/fnmatch.[ch].\n\nNo explanation is necessary ;-).\n\n* sn/static (Thu Jun 19 08:21:11 2008 +0900) 2 commits\n + config.c: make git_env_bool() static\n + environment.c: remove unused function\n\n* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits\n + Add config option to enable 'fsync()' of object files\n + Split up default \"i18n\" and \"branch\" config parsing into helper\n   routines\n + Split up default \"user\" config parsing into helper routine\n + Split up default \"core\" config parsing into helper routine\n\n* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit\n + gitweb: standarize HTTP status codes\n\n* mv/merge-in-c (Fri Jun 20 01:22:36 2008 +0200) 11 commits\n - Add new test to ensure git-merge handles more than 25 refs.\n - Build in merge\n - Introduce filter_independent() in commit.c\n - Introduce get_octopus_merge_bases() in commit.c\n - git-fmt-merge-msg: make it usable from other builtins\n - Move read_cache_unmerged() to read-cache.c\n - parseopt: add a new PARSE_OPT_ARGV0_IS_AN_OPTION option\n - Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n - Move parse-options's skip_prefix() to git-compat-util.h\n - Move commit_list_count() to commit.c\n - Move split_cmdline() to alias.c\n\n* jc/maint-combine-diff-pre-context (Wed Jun 18 23:59:41 2008 -0700) 1 commit\n + diff -c/--cc: do not include uninteresting deletion before leading\n   context\n\n* lt/maint-gitdir-relative (Thu Jun 19 12:34:06 2008 -0700) 1 commit\n + Make git_dir a path relative to work_tree in setup_work_tree()\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n + Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n + Eliminate an unnecessary chdir(\"..\")\n + Add support for GIT_CEILING_DIRECTORIES\n + Fold test-absolute-path into test-path-utils\n + Implement normalize_absolute_path\n\n* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits\n + gitweb: Separate generating 'sort by' table header\n + gitweb: Separate filling list of projects info\n\n* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit\n + Teach new attribute 'export-ignore' to git-archive\n\n* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit\n + gitweb: remove git_blame and rename git_blame2 to git_blame\n\n* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits\n + Make old sha1 optional with git update-ref -d\n + Clean up builtin-update-ref's option parsing\n\n* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits\n + Add configuration option for default untracked files mode\n + Add argument 'no' commit/status option -u|--untracked-files\n + Add an optional <mode> argument to commit/status -u|--untracked-\n   files option\n\n* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits\n + Hook up the result aggregation in the test makefile.\n + A simple script to parse the results from the testcases\n + Modify test-lib.sh to output stats to t/test-results/*\n\n* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits\n + Teach \"git clone\" to pack refs\n + Prepare testsuite for a \"git clone\" that packs refs\n + Move pack_refs() and friends into libgit\n + Incorporate fetched packs in future object traversal\n\nThis is useful when cloning from a repository with insanely large number\nof refs.\n\n* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit\n - Per-ref reflog expiry configuration\n\nPerhaps a good foundation for optionally unexpirable stash.  As 1.6.0 will\nbe a good time to make backward incompatible changes, we might make expiry\nperiod of stash 'never' in new repositories.  Needs a concensus.\n\n* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits\n + Git.pm: add test suite\n + t/test-lib.sh: add test_external and test_external_without_stderr\n\nBeginning of regression tests for Perl part of the system.\n\n* jk/test (Sat Jun 14 03:28:07 2008 -0400) 5 commits\n + enable whitespace checking of test scripts\n + avoid trailing whitespace in zero-change diffstat lines\n + avoid whitespace on empty line in automatic usage message\n + mask necessary whitespace policy violations in test scripts\n + fix whitespace violations in test scripts\n\nTightens whitespace rules for t/*.sh scripts.\n\n* pb/fast-export (Wed Jun 11 13:17:04 2008 +0200) 1 commit\n + builtin-fast-export: Add importing and exporting of revision marks\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\nNothing today but expect many small ones to come out of 'next' this\nweekend.\n\n----------------------------------------------------------------\n[On Hold]\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n - \"git push\": tellme-more protocol extension\n\nKicked back to 'pu' for now.\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n - Use perl instead of tac\n - Fix t3404 assumption that `wc -l` does not use whitespace.\n - rebase -i: Use : in expr command instead of match.\n - rebase -i: update the implementation of 'mark' command\n - Add option --preserve-tags\n - Teach rebase interactive the tag command\n - Add option --first-parent\n - Do rebase with preserve merges with advanced TODO list\n - Select all lines with fake-editor\n - Unify the length of $SHORT* and the commits in the TODO list\n - Teach rebase interactive the merge command\n - Move redo merge code in a function\n - Teach rebase interactive the reset command\n - Teach rebase interactive the mark command\n - Move cleanup code into it's own function\n - Don't append default merge message to -m message\n - fake-editor: output TODO list if unchanged\n\nIt is very likely that this whole thing will be reverted from 'next' and\nbe replaced with the new sequenser series during 1.6.0 cycle.\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n - Introduce fast forward option only\n - Head reduction before selecting merge strategy\n - Restructure git-merge.sh\n - Introduce -ff=<fast forward option>\n - New merge tests\n - Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n - WIP: rethink replay merge\n - Start using replay-tree merge in cherry-pick\n - revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n - git-am --forge: add Signed-off-by: line for the author\n - git-am: clean-up Signed-off-by: lines\n - stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n - stripspace: use parse_options()\n - Add \"git am -s\" test\n - git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n"},{"id":"80545","messageId":"20080621121429.GI29404@genesis.frugalware.org","threadId":"12603","inReplyTo":"7vwskjazql.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-06-21T12:14:29Z","receivedAt":"2008-06-21T12:14:29Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Sat, Jun 21, 2008 at 02:44:50AM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n> * nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n>  + Move all dashed-form commands to libexecdir\n> \n> Scheduled for 1.6.0.\n> \n> * jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n>  - Prepare execv_git_cmd() for removal of builtins from the\n>    filesystem\n>  - git-shell: accept \"git foo\" form\n> \n> We do not plan to remove git-foo form completely from the filesystem at\n> this point, but git-shell may need to be updated.\n\nI may be wrong, but given that git-upload-pack/receive-pack is now not\nin PATH, I think it will be problematic to do a pull/push in case the\nserver runs next, the client is 1.5.6 and the user has git-shell as\nshell, for example.\n\nOr have I missed something?\n\nThanks\n"},{"id":"80681","messageId":"7vk5ggipuw.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vwskjazql.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-23T07:15:35Z","receivedAt":"2008-06-23T07:15:35Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  But bigger changes will be:\n\n * MinGW will be in.\n\n * /usr/bin/git-cat-file is no more.  The bulk of the git commands will\n   move to /usr/libexec/git-core/ or somesuch.\n\n * git-merge will be rewritten in C.\n\nCurrently tip of 'pu' is broken and does not pass tests, as j6t/mingw has\ninteraction with dr/ceiling and jc/merge-theirs has interaction with\nmv/merge-in-c.\n\n----------------------------------------------------------------\n[New Topics]\n\n* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits\n - rerere.autoupdate\n - t4200: fix rerere test\n - rerere: remove dubious \"tail_optimization\"\n - git-rerere: detect unparsable conflicts\n - rerere: rerere_created_at() and has_resolution() abstraction\n\n* sb/rebase (Sun Jun 22 01:55:50 2008 +0200) 2 commits\n + t3404: stricter tests for git-rebase--interactive\n + api-builtin.txt: update and fix typo\n\n* sb/maint-rebase (Sun Jun 22 16:07:02 2008 +0200) 1 commit\n + git-rebase.sh: Add check if rebase is in progress\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit\n + gitweb: standarize HTTP status codes\n\n* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits\n + Add config option to enable 'fsync()' of object files\n + Split up default \"i18n\" and \"branch\" config parsing into helper\n   routines\n + Split up default \"user\" config parsing into helper routine\n + Split up default \"core\" config parsing into helper routine\n\n* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n + Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\n* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits\n + Hook up the result aggregation in the test makefile.\n + A simple script to parse the results from the testcases\n + Modify test-lib.sh to output stats to t/test-results/*\n\n* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits\n + Teach \"git clone\" to pack refs\n + Prepare testsuite for a \"git clone\" that packs refs\n + Move pack_refs() and friends into libgit\n + Incorporate fetched packs in future object traversal\n\nThis is useful when cloning from a repository with insanely large number\nof refs.\n\n* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits\n + Git.pm: add test suite\n + t/test-lib.sh: add test_external and test_external_without_stderr\n\nBeginning of regression tests for Perl part of the system.\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* mv/merge-in-c (Sat Jun 21 19:15:35 2008 +0200) 14 commits\n - Add new test case to ensure git-merge reduces octopus parents when\n   possible\n - Add new test case to ensure git-merge filters for independent\n   parents\n - Build in merge\n - Introduce reduce_heads()\n - Introduce get_merge_bases_many()\n - Add new test to ensure git-merge handles more than 25 refs.\n - Introduce get_octopus_merge_bases() in commit.c\n - git-fmt-merge-msg: make it usable from other builtins\n - Move read_cache_unmerged() to read-cache.c\n - parseopt: add a new PARSE_OPT_ARGV0_IS_AN_OPTION option\n - Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n - Move parse-options's skip_prefix() to git-compat-util.h\n - Move commit_list_count() to commit.c\n - Move split_cmdline() to alias.c\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n - Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n - git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n + Eliminate an unnecessary chdir(\"..\")\n + Add support for GIT_CEILING_DIRECTORIES\n + Fold test-absolute-path into test-path-utils\n + Implement normalize_absolute_path\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit\n + Teach new attribute 'export-ignore' to git-archive\n\n* lt/racy-empty (Tue Jun 10 10:44:43 2008 -0700) 1 commit\n + racy-git: an empty blob has a fixed object name\n\n* sn/static (Thu Jun 19 08:21:11 2008 +0900) 2 commits\n + config.c: make git_env_bool() static\n + environment.c: remove unused function\n\n* jc/maint-combine-diff-pre-context (Wed Jun 18 23:59:41 2008 -0700) 1 commit\n + diff -c/--cc: do not include uninteresting deletion before leading\n   context\n\n* lt/maint-gitdir-relative (Thu Jun 19 12:34:06 2008 -0700) 1 commit\n + Make git_dir a path relative to work_tree in setup_work_tree()\n\n* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits\n + gitweb: Separate generating 'sort by' table header\n + gitweb: Separate filling list of projects info\n\n* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit\n + gitweb: remove git_blame and rename git_blame2 to git_blame\n\n* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits\n + Make old sha1 optional with git update-ref -d\n + Clean up builtin-update-ref's option parsing\n\n* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits\n + Add configuration option for default untracked files mode\n + Add argument 'no' commit/status option -u|--untracked-files\n + Add an optional <mode> argument to commit/status -u|--untracked-\n   files option\n\n* jk/test (Sat Jun 14 03:28:07 2008 -0400) 5 commits\n + enable whitespace checking of test scripts\n + avoid trailing whitespace in zero-change diffstat lines\n + avoid whitespace on empty line in automatic usage message\n + mask necessary whitespace policy violations in test scripts\n + fix whitespace violations in test scripts\n\nTightens whitespace rules for t/*.sh scripts.\n\n* pb/fast-export (Wed Jun 11 13:17:04 2008 +0200) 1 commit\n + builtin-fast-export: Add importing and exporting of revision marks\n\n----------------------------------------------------------------\n[On Hold]\n\n* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit\n + Remove the use of '--' in merge program invocation\n\nWaiting for success reports from people who use various backends.\n\n* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits\n - compat/pread.c: Add a forward declaration to fix a warning\n - Windows: Fix ntohl() related warnings about printf formatting\n - Windows: TMP and TEMP environment variables specify a temporary\n   directory.\n - Windows: Make 'git help -a' work.\n - Windows: Work around an oddity when a pipe with no reader is\n   written to.\n - Windows: Make the pager work.\n - When installing, be prepared that template_dir may be relative.\n - Windows: Use a relative default template_dir and ETC_GITCONFIG\n - Windows: Compute the fallback for exec_path from the program\n   invocation.\n - Turn builtin_exec_path into a function.\n - Windows: Use a customized struct stat that also has the st_blocks\n   member.\n - Windows: Add a custom implementation for utime().\n - Windows: Add a new lstat and fstat implementation based on Win32\n   API.\n - Windows: Implement a custom spawnve().\n - Windows: Implement wrappers for gethostbyname(), socket(), and\n   connect().\n - Windows: Work around incompatible sort and find.\n - Windows: Implement asynchronous functions as threads.\n - Windows: Disambiguate DOS style paths from SSH URLs.\n - Windows: A rudimentary poll() emulation.\n - Windows: Change the name of hook scripts to make them not\n   executable.\n - Windows: Implement start_command().\n - Windows: A pipe() replacement whose ends are not inherited to\n   children.\n - Windows: Wrap execve so that shell scripts can be invoked.\n - Windows: Implement setitimer() and sigaction().\n - Windows: Fix PRIuMAX definition.\n - Windows: Implement gettimeofday().\n - Windows: Handle absolute paths in\n   safe_create_leading_directories().\n - Windows: Treat Windows style path names.\n - setup.c: Prepare for Windows directory separators.\n - Windows: Work around misbehaved rename().\n - Windows: always chmod(, 0666) before unlink().\n - Windows: A minimal implemention of getpwuid().\n - Windows: Implement a wrapper of the open() function.\n - Windows: Strip \".exe\" from the program name.\n - Windows: Use the Windows style PATH separator ';'.\n - Add target architecture MinGW.\n - Compile some programs only conditionally.\n - Add compat/regex.[ch] and compat/fnmatch.[ch].\n\nNo explanation is necessary ;-).  The series is probably 'next' worthy\nas-is.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit\n - Per-ref reflog expiry configuration\n\nPerhaps a good foundation for optionally unexpirable stash.  As 1.6.0 will\nbe a good time to make backward incompatible changes, we might make expiry\nperiod of stash 'never' in new repositories.  Needs a concensus.\n\n* jc/merge-theirs (Fri Jun 20 00:17:59 2008 -0700) 2 commits\n - git-merge-recursive-{ours,theirs}\n - git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends may need to change, though.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n\n----------------------------------------------------------------\n[Dropped for now]\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n . Introduce fast forward option only\n . Head reduction before selecting merge strategy\n . Restructure git-merge.sh\n . Introduce -ff=<fast forward option>\n . New merge tests\n . Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C.\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n . Use perl instead of tac\n . Fix t3404 assumption that `wc -l` does not use whitespace.\n . rebase -i: Use : in expr command instead of match.\n . rebase -i: update the implementation of 'mark' command\n . Add option --preserve-tags\n . Teach rebase interactive the tag command\n . Add option --first-parent\n . Do rebase with preserve merges with advanced TODO list\n . Select all lines with fake-editor\n . Unify the length of $SHORT* and the commits in the TODO list\n . Teach rebase interactive the merge command\n . Move redo merge code in a function\n . Teach rebase interactive the reset command\n . Teach rebase interactive the mark command\n . Move cleanup code into it's own function\n . Don't append default merge message to -m message\n . fake-editor: output TODO list if unchanged\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n . WIP: rethink replay merge\n . Start using replay-tree merge in cherry-pick\n . revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n . git-am --forge: add Signed-off-by: line for the author\n . git-am: clean-up Signed-off-by: lines\n . stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n . stripspace: use parse_options()\n . Add \"git am -s\" test\n . git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n . \"git push\": tellme-more protocol extension\n"},{"id":"80694","messageId":"20080623121502.GQ29404@genesis.frugalware.org","threadId":"12603","inReplyTo":"7vk5ggipuw.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-06-23T12:15:02Z","receivedAt":"2008-06-23T12:15:02Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Mon, Jun 23, 2008 at 12:15:35AM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n> * mv/merge-in-c (Sat Jun 21 19:15:35 2008 +0200) 14 commits\n>  - Add new test case to ensure git-merge reduces octopus parents when\n>    possible\n>  - Add new test case to ensure git-merge filters for independent\n>    parents\n>  - Build in merge\n>  - Introduce reduce_heads()\n>  - Introduce get_merge_bases_many()\n>  - Add new test to ensure git-merge handles more than 25 refs.\n>  - Introduce get_octopus_merge_bases() in commit.c\n>  - git-fmt-merge-msg: make it usable from other builtins\n>  - Move read_cache_unmerged() to read-cache.c\n>  - parseopt: add a new PARSE_OPT_ARGV0_IS_AN_OPTION option\n>  - Add new test to ensure git-merge handles pull.twohead and\n>    pull.octopus\n>  - Move parse-options's skip_prefix() to git-compat-util.h\n>  - Move commit_list_count() to commit.c\n>  - Move split_cmdline() to alias.c\n\n\"Add new test case to ensure git-merge reduces octopus parents when\npossible\" does exactly the same as \"Add new test case to ensure\ngit-merge filters for independent parents\", so I think you should drop\nthe later. Only the name of the test and the commit message differs, and\nI think we want to avoid redundancy in the testsuite. ;-)\n"},{"id":"80845","messageId":"7vwskfclfs.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080621121429.GI29404@genesis.frugalware.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-24T07:59:51Z","receivedAt":"2008-06-24T07:59:51Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Miklos Vajna <vmiklos@frugalware.org> writes:\n\n> On Sat, Jun 21, 2008 at 02:44:50AM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n>> * nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit\n>>  + Move all dashed-form commands to libexecdir\n>> \n>> Scheduled for 1.6.0.\n>> \n>> * jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n>>  - Prepare execv_git_cmd() for removal of builtins from the\n>>    filesystem\n>>  - git-shell: accept \"git foo\" form\n>> \n>> We do not plan to remove git-foo form completely from the filesystem at\n>> this point, but git-shell may need to be updated.\n>\n> I may be wrong, but given that git-upload-pack/receive-pack is now not\n> in PATH, I think it will be problematic to do a pull/push in case the\n> server runs next, the client is 1.5.6 and the user has git-shell as\n> shell, for example.\n\nThe idea of the \"shell: accept 'git foo' form\" patch is that as long as\nthe server end consistently use the same version (i.e. git-shell is from\n'next' and it knows where the rest of git is installed), things should\nwork fine.  I've merged them to 'next' and pushed it out so that you can\ntry it.\n\nI do not use git-shell in production setting (I do have one user account\nwhose login shell is git-shell from 'next' I use purely for testing), and\nI do not know how much use it has seen in the real world.  My cursory\nsanity-check (\"cvs -d :ext:thatuser@myhost:/path/ co --help\", and \"git\nls-remote ssh://thatuser@myhost/path/\")  seems to be Ok with $(bindir)\nthat has only git, gitk and nothing else.\n"},{"id":"80849","messageId":"9B8F0B10-F48D-475B-BF59-CEE94222B6E8@ai.rug.nl","threadId":"12603","inReplyTo":"7vwskfclfs.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Pieter de Bie","fromEmail":"pdebie@ai.rug.nl","sentAt":"2008-06-24T08:12:28Z","receivedAt":"2008-06-24T08:12:28Z","isPatch":false,"sender":{"key":"pdebie@ai.rug.nl","avatar":null},"body":"\nOn 24 jun 2008, at 09:59, Junio C Hamano wrote:\n\n> The idea of the \"shell: accept 'git foo' form\" patch is that as long  \n> as\n> the server end consistently use the same version (i.e. git-shell is  \n> from\n> 'next' and it knows where the rest of git is installed), things should\n> work fine.  I've merged them to 'next' and pushed it out so that you  \n> can\n> try it.\n\nAny clone / push operation fails if you use current next:\n\nVienna:bin pieter$ git --version\ngit version 1.5.6.129.g274ea\nVienna:bin pieter$ git clone localhost:project/bonnenteller\nInitialize bonnenteller/.git\nInitialized empty Git repository in /opt/git/bin/bonnenteller/.git/\nPassword:\nbash: git-upload-pack: command not found\nfatal: The remote end hung up unexpectedly\n\nI think that is what Miklos meant. Also, I think the client sends the  \ncommand to execute on the remote side. At least for v1.5.5 clients and  \nbefore, that is \"git-upload-pack\". As this is not in PATH, that  \ncommand will fail on any server that runs v1.5.6 and has the libexec  \ndir.\n\n- Pieter\n"},{"id":"80852","messageId":"FCE18242-EE46-4D2E-B916-E1E98568AB60@ai.rug.nl","threadId":"12603","inReplyTo":"9B8F0B10-F48D-475B-BF59-CEE94222B6E8@ai.rug.nl","subject":"Re: What's cooking in git.git (topics)","fromName":"Pieter de Bie","fromEmail":"pdebie@ai.rug.nl","sentAt":"2008-06-24T08:16:15Z","receivedAt":"2008-06-24T08:16:15Z","isPatch":false,"sender":{"key":"pdebie@ai.rug.nl","avatar":null},"body":"\nOn 24 jun 2008, at 10:12, Pieter de Bie wrote:\n\n> I think that is what Miklos meant. Also, I think the client sends  \n> the command to execute on the remote side. At least for v1.5.5  \n> clients and before, that is \"git-upload-pack\". As this is not in  \n> PATH, that command will fail on any server that runs v1.5.6 and has  \n> the libexec dir.\n\nThat is supposed to be \"v1.5.6\" and \"v1.6.0\" respectively.\n"},{"id":"80915","messageId":"20080624160224.GA29404@genesis.frugalware.org","threadId":"12603","inReplyTo":"9B8F0B10-F48D-475B-BF59-CEE94222B6E8@ai.rug.nl","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-06-24T16:02:24Z","receivedAt":"2008-06-24T16:02:24Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Tue, Jun 24, 2008 at 10:12:28AM +0200, Pieter de Bie <pdebie@ai.rug.nl> wrote:\n> Vienna:bin pieter$ git --version\n> git version 1.5.6.129.g274ea\n> Vienna:bin pieter$ git clone localhost:project/bonnenteller\n> Initialize bonnenteller/.git\n> Initialized empty Git repository in /opt/git/bin/bonnenteller/.git/\n> Password:\n> bash: git-upload-pack: command not found\n> fatal: The remote end hung up unexpectedly\n> \n> I think that is what Miklos meant.\n\nExactly. Thanks for the good description.\n"},{"id":"80920","messageId":"alpine.DEB.1.00.0806241709330.9925@racer","threadId":"12603","inReplyTo":"20080624160224.GA29404@genesis.frugalware.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-24T16:25:57Z","receivedAt":"2008-06-24T16:25:57Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 24 Jun 2008, Miklos Vajna wrote:\n\n> On Tue, Jun 24, 2008 at 10:12:28AM +0200, Pieter de Bie <pdebie@ai.rug.nl> wrote:\n> > Vienna:bin pieter$ git --version\n> > git version 1.5.6.129.g274ea\n> > Vienna:bin pieter$ git clone localhost:project/bonnenteller\n> > Initialize bonnenteller/.git\n> > Initialized empty Git repository in /opt/git/bin/bonnenteller/.git/\n> > Password:\n> > bash: git-upload-pack: command not found\n> > fatal: The remote end hung up unexpectedly\n> > \n> > I think that is what Miklos meant.\n> \n> Exactly. Thanks for the good description.\n\nAFAICT these are fixed with ed99a225(Merge branch 'jc/dashless' into \nnext).\n\nCiao,\nDscho\n"},{"id":"80942","messageId":"20080624185403.GB29404@genesis.frugalware.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0806241709330.9925@racer","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-06-24T18:54:03Z","receivedAt":"2008-06-24T18:54:03Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Tue, Jun 24, 2008 at 05:25:57PM +0100, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> > > Vienna:bin pieter$ git --version\n> > > git version 1.5.6.129.g274ea\n> > > Vienna:bin pieter$ git clone localhost:project/bonnenteller\n> > > Initialize bonnenteller/.git\n> > > Initialized empty Git repository in /opt/git/bin/bonnenteller/.git/\n> > > Password:\n> > > bash: git-upload-pack: command not found\n> > > fatal: The remote end hung up unexpectedly\n> > > \n> > > I think that is what Miklos meant.\n> > \n> > Exactly. Thanks for the good description.\n> \n> AFAICT these are fixed with ed99a225(Merge branch 'jc/dashless' into \n> next).\n\nUsing fc48199 (\"Merge branch 'master' into next\", which includes\ned99a225) on the server, v1.5.6 on the client, I get: \n\n$ git clone server:/home/vmiklos/git/test next\nInitialize next/.git\nInitialized empty Git repository in /home/vmiklos/scm/git/next/.git/\nvmiklos@server's password:\nbash: git-upload-pack: command not found\nfatal: The remote end hung up unexpectedly\n"},{"id":"80949","messageId":"alpine.DEB.1.00.0806242007150.9925@racer","threadId":"12603","inReplyTo":"20080624185403.GB29404@genesis.frugalware.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-24T19:08:56Z","receivedAt":"2008-06-24T19:08:56Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 24 Jun 2008, Miklos Vajna wrote:\n\n> On Tue, Jun 24, 2008 at 05:25:57PM +0100, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> > > > Vienna:bin pieter$ git --version\n> > > > git version 1.5.6.129.g274ea\n> > > > Vienna:bin pieter$ git clone localhost:project/bonnenteller\n> > > > Initialize bonnenteller/.git\n> > > > Initialized empty Git repository in /opt/git/bin/bonnenteller/.git/\n> > > > Password:\n> > > > bash: git-upload-pack: command not found\n> > > > fatal: The remote end hung up unexpectedly\n> > > > \n> > > > I think that is what Miklos meant.\n> > > \n> > > Exactly. Thanks for the good description.\n> > \n> > AFAICT these are fixed with ed99a225(Merge branch 'jc/dashless' into \n> > next).\n> \n> Using fc48199 (\"Merge branch 'master' into next\", which includes\n> ed99a225) on the server, v1.5.6 on the client, I get: \n> \n> $ git clone server:/home/vmiklos/git/test next\n> Initialize next/.git\n> Initialized empty Git repository in /home/vmiklos/scm/git/next/.git/\n> vmiklos@server's password:\n> bash: git-upload-pack: command not found\n> fatal: The remote end hung up unexpectedly\n\nHmm.  Probably the client needs to be newer, too.  This is going to be \npainful.  Junio?\n\nSorry for the noise,\nDscho\n"},{"id":"80962","messageId":"m3wskek4wt.fsf@localhost.localdomain","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0806242007150.9925@racer","subject":"Re: What's cooking in git.git (topics)","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-06-24T19:31:19Z","receivedAt":"2008-06-24T19:31:19Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> On Tue, 24 Jun 2008, Miklos Vajna wrote:\n> > \n> > Using fc48199 (\"Merge branch 'master' into next\", which includes\n> > ed99a225) on the server, v1.5.6 on the client, I get: \n> > \n> > $ git clone server:/home/vmiklos/git/test next\n> > Initialize next/.git\n> > Initialized empty Git repository in /home/vmiklos/scm/git/next/.git/\n> > vmiklos@server's password:\n> > bash: git-upload-pack: command not found\n> > fatal: The remote end hung up unexpectedly\n> \n> Hmm.  Probably the client needs to be newer, too.  This is going to be \n> painful.  Junio?\n\nIt looks like git-upload-pack and git-receive-pack would\nhave to be left in $PATH, at least till old clients die\nof old age ;-)\n\ngit-shell hackery won't solve problem, because not everybody is using\ngit-shell.\n-- \nJakub Narebski\nPoland\nShadeHawk on #git\n"},{"id":"80965","messageId":"alpine.DEB.1.00.0806242033570.9925@racer","threadId":"12603","inReplyTo":"m3wskek4wt.fsf@localhost.localdomain","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-24T19:34:54Z","receivedAt":"2008-06-24T19:34:54Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 24 Jun 2008, Jakub Narebski wrote:\n\n> git-shell hackery won't solve problem, because not everybody is using \n> git-shell.\n\nThe problem is not git-shell vs git potty.\n\nThe problem is that not everybody magically updates their clients to ask \nfor dash-less form.\n\nCiao,\nDscho\n"},{"id":"80971","messageId":"200806242206.12291.jnareb@gmail.com","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0806242033570.9925@racer","subject":"Re: What's cooking in git.git (topics)","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-06-24T20:06:11Z","receivedAt":"2008-06-24T20:06:11Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Hello!\n\nJohannes Schindelin wrote:\n> On Tue, 24 Jun 2008, Jakub Narebski wrote:\n> \n> > git-shell hackery won't solve problem, because not everybody is using \n> > git-shell.\n> \n> The problem is not git-shell vs git potty.\n> \n> The problem is that not everybody magically updates their clients to ask \n> for dash-less form.\n\nWhat I meant here by \"git-shell hackery\" was for git-shell to\nautomagically redirect request for \"git-receive-pack\" to \"git receive-pack\"\n(or \"$GIT_EXEC_PATH/git-receive-pack\").\n\nBut, as I said, it isn't complete solution.  Leaving git-*-pack in $PATH\nfor the time being (what I said) is.\n-- \nJakub Narebski\nPoland\n"},{"id":"80981","messageId":"7vskv2d0lp.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0806242007150.9925@racer","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-24T20:44:34Z","receivedAt":"2008-06-24T20:44:34Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n>> Using fc48199 (\"Merge branch 'master' into next\", which includes\n>> ed99a225) on the server, v1.5.6 on the client, I get: \n>> \n>> $ git clone server:/home/vmiklos/git/test next\n>> Initialize next/.git\n>> Initialized empty Git repository in /home/vmiklos/scm/git/next/.git/\n>> vmiklos@server's password:\n>> bash: git-upload-pack: command not found\n>> fatal: The remote end hung up unexpectedly\n>\n> Hmm.  Probably the client needs to be newer, too.  This is going to be \n> painful.  Junio?\n\nEven with maint client accessing an account with next git-shell as its\nlogin shell, I do not get the above failure.\n\nIs git-shell installed and configured correctly at all in Miklos's setup?\nWhy does the other side say \"bash: git-upload-pack\" when login shell is\ngit-shell and not bash?\n"},{"id":"80994","messageId":"20080624221049.GE29404@genesis.frugalware.org","threadId":"12603","inReplyTo":"7vskv2d0lp.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-06-24T22:10:49Z","receivedAt":"2008-06-24T22:10:49Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Tue, Jun 24, 2008 at 01:44:34PM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n> >> bash: git-upload-pack: command not found\n> >> fatal: The remote end hung up unexpectedly\n> >\n> > Hmm.  Probably the client needs to be newer, too.  This is going to be \n> > painful.  Junio?\n> \n> Even with maint client accessing an account with next git-shell as its\n> login shell, I do not get the above failure.\n> \n> Is git-shell installed and configured correctly at all in Miklos's setup?\n> Why does the other side say \"bash: git-upload-pack\" when login shell is\n> git-shell and not bash?\n\nSorry for the confusion, this is not about git-shell at all. I have\nbash as the shell on the server, obviously.\n\nSo, in case the server runs next, the client runs master, and I try to\nclone via ssh, I get the above error.\n"},{"id":"81016","messageId":"7vk5gea0ff.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080624221049.GE29404@genesis.frugalware.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-24T23:16:36Z","receivedAt":"2008-06-24T23:16:36Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Miklos Vajna <vmiklos@frugalware.org> writes:\n\n> On Tue, Jun 24, 2008 at 01:44:34PM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n>> >> bash: git-upload-pack: command not found\n>> >> fatal: The remote end hung up unexpectedly\n>> >\n>> > Hmm.  Probably the client needs to be newer, too.  This is going to be \n>> > painful.  Junio?\n>> \n>> Even with maint client accessing an account with next git-shell as its\n>> login shell, I do not get the above failure.\n>> \n>> Is git-shell installed and configured correctly at all in Miklos's setup?\n>> Why does the other side say \"bash: git-upload-pack\" when login shell is\n>> git-shell and not bash?\n>\n> Sorry for the confusion, this is not about git-shell at all. I have\n> bash as the shell on the server, obviously.\n>\n> So, in case the server runs next, the client runs master, and I try to\n> clone via ssh, I get the above error.\n\nAh, there is not much we can do in that case then.  git-upload-pack is\nwhat the client asks you to run, and if you do not have it in the path,\nyou can (1) either make sure it is on the path, (2) have the client be\nmore explicit when asking for git-upload-pack (--upload-pack=$where), or\n(3) leave the minimum git-* binaries that can remotely be launched\ndirectly in the usual $PATH.\n\nIt most likely makes sense to do (3) anyway.  upload-pack, receive-pack,\nanything else?\n"},{"id":"81020","messageId":"20080624233236.GI29404@genesis.frugalware.org","threadId":"12603","inReplyTo":"7vk5gea0ff.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-06-24T23:32:36Z","receivedAt":"2008-06-24T23:32:36Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Tue, Jun 24, 2008 at 04:16:36PM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n> It most likely makes sense to do (3) anyway.  upload-pack, receive-pack,\n> anything else?\n\nI think that's all.\n"},{"id":"81029","messageId":"m3fxr2jruy.fsf@localhost.localdomain","threadId":"12603","inReplyTo":"7vk5gea0ff.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-06-25T00:11:44Z","receivedAt":"2008-06-25T00:11:44Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> Ah, there is not much we can do in that case then.  git-upload-pack is\n> what the client asks you to run, and if you do not have it in the path,\n> you can (1) either make sure it is on the path, (2) have the client be\n> more explicit when asking for git-upload-pack (--upload-pack=$where), or\n> (3) leave the minimum git-* binaries that can remotely be launched\n> directly in the usual $PATH.\n> \n> It most likely makes sense to do (3) anyway.  upload-pack, receive-pack,\n> anything else?\n\nWhat does \"git ls-remote server:/home/vmiklos/git/test\" invoke on server? \n\n-- \nJakub Narebski\nPoland\nShadeHawk on #git\n"},{"id":"81038","messageId":"7vk5ge8bm5.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080624233236.GI29404@genesis.frugalware.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T02:57:54Z","receivedAt":"2008-06-25T02:57:54Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Miklos Vajna <vmiklos@frugalware.org> writes:\n\n> On Tue, Jun 24, 2008 at 04:16:36PM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n>> It most likely makes sense to do (3) anyway.  upload-pack, receive-pack,\n>> anything else?\n>\n> I think that's all.\n\nThen that would be this patch on top of nd/dashless topic.\n\n Makefile |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 929136b..babf16b 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1268,7 +1268,7 @@ install: all\n \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'\n \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n \t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n-\t$(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)'\n+\t$(INSTALL) git$X git-upload-pack$X git-receive-pack$X '$(DESTDIR_SQ)$(bindir_SQ)'\n \t$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install\n \t$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install\n ifndef NO_TCLTK\n"},{"id":"81039","messageId":"20080625120832.6117@nanako3.lavabit.com","threadId":"12603","inReplyTo":"7vk5ge8bm5.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"しらいしななこ","fromEmail":"nanako3@lavabit.com","sentAt":"2008-06-25T03:08:32Z","receivedAt":"2008-06-25T03:08:32Z","isPatch":false,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"Quoting Junio C Hamano <gitster@pobox.com>:\n\n> Miklos Vajna <vmiklos@frugalware.org> writes:\n>\n>> On Tue, Jun 24, 2008 at 04:16:36PM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n>>> It most likely makes sense to do (3) anyway.  upload-pack, receive-pack,\n>>> anything else?\n>>\n>> I think that's all.\n>\n> Then that would be this patch on top of nd/dashless topic.\n>\n>  Makefile |    2 +-\n>  1 files changed, 1 insertions(+), 1 deletions(-)\n>\n> diff --git a/Makefile b/Makefile\n> index 929136b..babf16b 100644\n> --- a/Makefile\n> +++ b/Makefile\n> @@ -1268,7 +1268,7 @@ install: all\n>  \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'\n>  \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n>  \t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n> -\t$(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)'\n> +\t$(INSTALL) git$X git-upload-pack$X git-receive-pack$X '$(DESTDIR_SQ)$(bindir_SQ)'\n>  \t$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install\n>  \t$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install\n>  ifndef NO_TCLTK\n\nDoesn't \"git archive --remote=<repo>\" also execute git program on a remote machine?\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"81044","messageId":"7v1w2m8ahi.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625120832.6117@nanako3.lavabit.com","subject":"[PATCH] Keep some git-* programs in $(bindir)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T03:22:17Z","receivedAt":"2008-06-25T03:22:17Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Otherwise remote executions directly over ssh won't find them as they used\nto.  --upload-pack and --receive-pack options _could_ be used on the\nclient side, but things should keep working out-of-box for older clients.\n\nLater versions of clients (fetch-pack and send-pack) probably could start\nasking for these programs with dashless form, but that is a different\ntopic.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n * しらいしななこ <nanako3@lavabit.com> writes:\n > Doesn't \"git archive --remote=<repo>\" also execute git program on a remote machine?\n\n Ok, how about this?\n\n Makefile |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 929136b..742e7d3 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1268,7 +1268,7 @@ install: all\n \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'\n \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n \t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n-\t$(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)'\n+\t$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-archive$X '$(DESTDIR_SQ)$(bindir_SQ)'\n \t$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install\n \t$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install\n ifndef NO_TCLTK\n-- \n1.5.6.56.g29b0d\n"},{"id":"81047","messageId":"7vprq66vqd.fsf_-_@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7v1w2m8ahi.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T03:26:18Z","receivedAt":"2008-06-25T03:26:18Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"The daemon expects to see the dashed form and we cannot change older\nservers.  But when invoking programs on the remote end over SSH, the\ncommand line the client side build is under client's control.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n * This I haven't even compile tested at all, but it feels right.  We\n   probably should do this before bindir=>libexecdir move; as long as this\n   is in place on the client side the version running on the server end\n   should not matter.\n\n connect.c |    4 ++++\n 1 files changed, 4 insertions(+), 0 deletions(-)\n\ndiff --git a/connect.c b/connect.c\nindex e92af29..fd1da26 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -589,6 +589,10 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n \tconn = xcalloc(1, sizeof(*conn));\n \n \tstrbuf_init(&cmd, MAX_CMD_LEN);\n+\tif (protocol != PROTO_GIT && !strncmp(prog, \"git-\", 4)) {\n+\t\tstrbuf_addstr(&cmd, \"git \");\n+\t\tprog += 4;\n+\t}\n \tstrbuf_addstr(&cmd, prog);\n \tstrbuf_addch(&cmd, ' ');\n \tsq_quote_buf(&cmd, path);\n-- \n1.5.6.56.g29b0d\n"},{"id":"81048","messageId":"20080625032636.GS11793@spearce.org","threadId":"12603","inReplyTo":"20080625120832.6117@nanako3.lavabit.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T03:26:37Z","receivedAt":"2008-06-25T03:26:37Z","isPatch":false,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":" <nanako3@lavabit.com> wrote:\n> Quoting Junio C Hamano <gitster@pobox.com>:\n> > Miklos Vajna <vmiklos@frugalware.org> writes:\n> >> On Tue, Jun 24, 2008 at 04:16:36PM -0700, Junio C Hamano <gitster@pobox.com> wrote:\n> >>> It most likely makes sense to do (3) anyway.  upload-pack, receive-pack,\n> >>> anything else?\n> >>\n> >> I think that's all.\n> >\n> > Then that would be this patch on top of nd/dashless topic.\n> >\n> >  Makefile |    2 +-\n> >  1 files changed, 1 insertions(+), 1 deletions(-)\n> >\n> > diff --git a/Makefile b/Makefile\n> > index 929136b..babf16b 100644\n> > --- a/Makefile\n> > +++ b/Makefile\n> > @@ -1268,7 +1268,7 @@ install: all\n> >  \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'\n> >  \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n> >  \t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n> > -\t$(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)'\n> > +\t$(INSTALL) git$X git-upload-pack$X git-receive-pack$X '$(DESTDIR_SQ)$(bindir_SQ)'\n> >  \t$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install\n> >  \t$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install\n> >  ifndef NO_TCLTK\n> \n> Doesn't \"git archive --remote=<repo>\" also execute git program on a remote machine?\n\nYes, it runs git-upload-archive on the remote side.  The three\nprimary services for the remote side are documented in daemon.c:\n\n    403 static struct daemon_service daemon_service[] = {\n    404     { \"upload-archive\", \"uploadarch\", upload_archive, 0, 1 },\n    405     { \"upload-pack\", \"uploadpack\", upload_pack, 1, 1 },\n    406     { \"receive-pack\", \"receivepack\", receive_pack, 0, 1 },\n    407 };\n\n(with git- prefixes).\n\nIMHO all three need to be in $PATH, along with git and gitk, through\nat least a major revision release cycle to give clients a chance to\nupgrade to something that uses \"git foo\" rather than \"git-foo\" when\ntalking to the remote.\n\n-- \nShawn.\n"},{"id":"81049","messageId":"20080625033221.GU11793@spearce.org","threadId":"12603","inReplyTo":"m3fxr2jruy.fsf@localhost.localdomain","subject":"Re: What's cooking in git.git (topics)","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T03:32:21Z","receivedAt":"2008-06-25T03:32:21Z","isPatch":false,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Jakub Narebski <jnareb@gmail.com> wrote:\n> \n> What does \"git ls-remote server:/home/vmiklos/git/test\" invoke on server? \n\nFYI, it actually runs git-upload-pack, gets the list of advertised\nrefs, then closes the connection immediately.  The other side sees\nthe client hang up and just terminates silently, since the client\ndidn't \"want\" anything packed and sent.\n\n-- \nShawn.\n"},{"id":"81050","messageId":"20080625034538.GW11793@spearce.org","threadId":"12603","inReplyTo":"7vprq66vqd.fsf_-_@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T03:45:38Z","receivedAt":"2008-06-25T03:45:38Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n> The daemon expects to see the dashed form and we cannot change older\n> servers.  But when invoking programs on the remote end over SSH, the\n> command line the client side build is under client's control.\n...\n> diff --git a/connect.c b/connect.c\n> index e92af29..fd1da26 100644\n> --- a/connect.c\n> +++ b/connect.c\n> @@ -589,6 +589,10 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n>  \tconn = xcalloc(1, sizeof(*conn));\n>  \n>  \tstrbuf_init(&cmd, MAX_CMD_LEN);\n> +\tif (protocol != PROTO_GIT && !strncmp(prog, \"git-\", 4)) {\n> +\t\tstrbuf_addstr(&cmd, \"git \");\n> +\t\tprog += 4;\n> +\t}\n\nNack on that implementation.\n\nI think this is a problem for systems based on say gitosis,\nor some pattern like it.  Day-job doesn't use gitosis, but\nhas switched to a Perl based forced ssh tool that smells a\nlot like gitosis.  Gitosis is popular.\n\ngithub probably uses something similar.  But nobody knows (or\nprobably cares) since they don't release their source.\n\ngitosis is likely looking for \"$git-upload-pack '(.*)'$\" to be\nin the $SSH_ORIGINAL_COMMAND environment variable, if you send\n\"git upload-pack 'path.git'\" I think its going to reject.\n\nWhat's really bad about your patch is you cannot work around it as a\nuser by setting --upload-pack on the command line, or in the config,\nbecause down at the very deepest level you are switching the \"git-\"\nto \"git \" and ignoring what the user has supplied you.\n\nSorry, but I think this change needs to go higher up, to the default\nvalues that --upload-pack and remote.$name.uploadpack override,\nso the user can at least work around it when we break her ability\nto use github, gitosis, or anything like it.\n\n-- \nShawn.\n"},{"id":"81054","messageId":"20080625041747.GC11793@spearce.org","threadId":"12603","inReplyTo":"7v1w2m8ahi.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Keep some git-* programs in $(bindir)","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T04:17:47Z","receivedAt":"2008-06-25T04:17:47Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n>  * しらいしななこ <nanako3@lavabit.com> writes:\n>  > Doesn't \"git archive --remote=<repo>\" also execute git program on a remote machine?\n> \n> diff --git a/Makefile b/Makefile\n> index 929136b..742e7d3 100644\n> --- a/Makefile\n> +++ b/Makefile\n> @@ -1268,7 +1268,7 @@ install: all\n>  \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'\n>  \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n>  \t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n> -\t$(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)'\n> +\t$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-archive$X '$(DESTDIR_SQ)$(bindir_SQ)'\n\nI think you mean git-upload-archive, given what daemon.c says.\nOr line 34 of builtin-archive.c, which calls git-upload-archive\nby way of git_connect().\n\n-- \nShawn.\n"},{"id":"81055","messageId":"alpine.LNX.1.00.0806250015580.19665@iabervon.org","threadId":"12603","inReplyTo":"7v1w2m8ahi.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Keep some git-* programs in $(bindir)","fromName":"Daniel Barkalow","fromEmail":"barkalow@iabervon.org","sentAt":"2008-06-25T04:19:49Z","receivedAt":"2008-06-25T04:19:49Z","isPatch":true,"sender":{"key":"barkalow@iabervon.org","avatar":"https://avatars.githubusercontent.com/u/55364219?v=4"},"body":"On Tue, 24 Jun 2008, Junio C Hamano wrote:\n\n> Otherwise remote executions directly over ssh won't find them as they used\n> to.  --upload-pack and --receive-pack options _could_ be used on the\n> client side, but things should keep working out-of-box for older clients.\n> \n> Later versions of clients (fetch-pack and send-pack) probably could start\n> asking for these programs with dashless form, but that is a different\n> topic.\n\nShould they use \"git upload-pack\" or should they look for their helper \nprograms in a libexec dir? I don't think that either of these programs is \nuseful to run independantly, but I don't know if finding a program that \ndoesn't go in $PATH on a remote machine is going to be any fun.\n\n\t-Daniel\n*This .sig lefti ntentionally blank*\n"},{"id":"81060","messageId":"7vk5ge6soc.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625034538.GW11793@spearce.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T04:32:19Z","receivedAt":"2008-06-25T04:32:19Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Shawn O. Pearce\" <spearce@spearce.org> writes:\n\n> Sorry, but I think this change needs to go higher up, to the default\n> values that --upload-pack and remote.$name.uploadpack override,\n> so the user can at least work around it when we break her ability\n> to use github, gitosis, or anything like it.\n\nWell, the thing is, \"higher up\" would not have enough clue to see if it\nneeds to give dashed form (for git-daemon) or space form (for ssh), so\nthat suggestion won't help much.\n\nI do not care too much about closed source service, but gitosis should be\nable to update the pattern to allow \"git[ -]upload-pack\" reasonably\neasily.\n\nAny other suggestions that is workable?\n"},{"id":"81062","messageId":"20080625043741.GD11793@spearce.org","threadId":"12603","inReplyTo":"alpine.LNX.1.00.0806250015580.19665@iabervon.org","subject":"Re: [PATCH] Keep some git-* programs in $(bindir)","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T04:37:41Z","receivedAt":"2008-06-25T04:37:41Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Daniel Barkalow <barkalow@iabervon.org> wrote:\n> On Tue, 24 Jun 2008, Junio C Hamano wrote:\n> \n> > Otherwise remote executions directly over ssh won't find them as they used\n> > to.  --upload-pack and --receive-pack options _could_ be used on the\n> > client side, but things should keep working out-of-box for older clients.\n> > \n> > Later versions of clients (fetch-pack and send-pack) probably could start\n> > asking for these programs with dashless form, but that is a different\n> > topic.\n> \n> Should they use \"git upload-pack\" or should they look for their helper \n> programs in a libexec dir? I don't think that either of these programs is \n> useful to run independantly, but I don't know if finding a program that \n> doesn't go in $PATH on a remote machine is going to be any fun.\n\nIMHO they should in the future use \"git upload-pack\".\n\nBut this may not work with all servers, especially those that\nuse $SSH_ORIGINAL_COMMAND to dispatch to the correct command,\nor abort if the user tries to request something dangerous.\nGitosis comes to mind.\n\nI'm not sure we can get away with doing this in 1.6.0 as it is\neffectively a network protocol breakage.  We have thus far never\ncaused a newer client to fail talking to an older server.  I'm\nnot sure we should start doing that in 1.6.0.\n\nMy vote is we keep the dashed form of these 3 commands in the\n$PATH during 1.6 and remove them in 1.7, but when we do it we\nmust ensure there is a way to still request dashed form found\nthrough $PATH when passing --upload-pack as an argument.\n\n-- \nShawn.\n"},{"id":"81063","messageId":"20080625044409.GE11793@spearce.org","threadId":"12603","inReplyTo":"7vk5ge6soc.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T04:44:09Z","receivedAt":"2008-06-25T04:44:09Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n> \"Shawn O. Pearce\" <spearce@spearce.org> writes:\n> \n> > Sorry, but I think this change needs to go higher up, to the default\n> > values that --upload-pack and remote.$name.uploadpack override,\n> > so the user can at least work around it when we break her ability\n> > to use github, gitosis, or anything like it.\n> \n> Well, the thing is, \"higher up\" would not have enough clue to see if it\n> needs to give dashed form (for git-daemon) or space form (for ssh), so\n> that suggestion won't help much.\n\nActually I'd go the other direction.  Allow the higher up level\nto supply \"git upload-pack\" and convert it to git- for the git://\nprotocol.  Possible patch below.\n\n> I do not care too much about closed source service, but gitosis should be\n> able to update the pattern to allow \"git[ -]upload-pack\" reasonably\n> easily.\n\nPasky also has to update:\n\n$ git ls-remote --upload-pack='git upload-pack' repo.or.cz:/srv/git/egit.git\nfatal: unrecognized command 'git upload-pack '/srv/git/egit.git''\nfatal: The remote end hung up unexpectedly\n\n;-)\n \n> Any other suggestions that is workable?\n\ndiff --git a/builtin-clone.c b/builtin-clone.c\nindex 5c5acb4..98d0f0f 100644\n--- a/builtin-clone.c\n+++ b/builtin-clone.c\n@@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;\n static int option_local, option_no_hardlinks, option_shared;\n static char *option_template, *option_reference, *option_depth;\n static char *option_origin = NULL;\n-static char *option_upload_pack = \"git-upload-pack\";\n+static char *option_upload_pack = \"git upload-pack\";\n \n static struct option builtin_clone_options[] = {\n \tOPT__QUIET(&option_quiet),\n@@ -58,7 +58,7 @@ static struct option builtin_clone_options[] = {\n \tOPT_STRING('o', \"origin\", &option_origin, \"branch\",\n \t\t   \"use <branch> instead or 'origin' to track upstream\"),\n \tOPT_STRING('u', \"upload-pack\", &option_upload_pack, \"path\",\n-\t\t   \"path to git-upload-pack on the remote\"),\n+\t\t   \"path to git upload-pack on the remote\"),\n \tOPT_STRING(0, \"depth\", &option_depth, \"depth\",\n \t\t    \"create a shallow clone of that depth\"),\n \ndiff --git a/builtin-fetch-pack.c b/builtin-fetch-pack.c\nindex f4dbcf0..b0efd01 100644\n--- a/builtin-fetch-pack.c\n+++ b/builtin-fetch-pack.c\n@@ -14,7 +14,7 @@ static int transfer_unpack_limit = -1;\n static int fetch_unpack_limit = -1;\n static int unpack_limit = 100;\n static struct fetch_pack_args args = {\n-\t/* .uploadpack = */ \"git-upload-pack\",\n+\t/* .uploadpack = */ \"git upload-pack\",\n };\n \n static const char fetch_pack_usage[] =\ndiff --git a/connect.c b/connect.c\nindex e92af29..dbabd93 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -576,8 +576,8 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n \t\t * from extended components with a NUL byte.\n \t\t */\n \t\tpacket_write(fd[1],\n-\t\t\t     \"%s %s%chost=%s%c\",\n-\t\t\t     prog, path, 0,\n+\t\t\t     \"git-%s %s%chost=%s%c\",\n+\t\t\t     prog + 4, path, 0,\n \t\t\t     target_host, 0);\n \t\tfree(target_host);\n \t\tfree(url);\ndiff --git a/git-parse-remote.sh b/git-parse-remote.sh\nindex 695a409..0f82a93 100755\n--- a/git-parse-remote.sh\n+++ b/git-parse-remote.sh\n@@ -255,10 +255,10 @@ get_uploadpack () {\n \tcase \"$data_source\" in\n \tconfig)\n \t\tuplp=$(git config --get \"remote.$1.uploadpack\")\n-\t\techo ${uplp:-git-upload-pack}\n+\t\techo ${uplp:-git upload-pack}\n \t\t;;\n \t*)\n-\t\techo \"git-upload-pack\"\n+\t\techo \"git upload-pack\"\n \t\t;;\n \tesac\n }\ndiff --git a/transport.c b/transport.c\nindex 3ff8519..351b7f5 100644\n--- a/transport.c\n+++ b/transport.c\n@@ -762,10 +762,10 @@ struct transport *transport_get(struct remote *remote, const char *url)\n \n \t\tdata->thin = 1;\n \t\tdata->conn = NULL;\n-\t\tdata->uploadpack = \"git-upload-pack\";\n+\t\tdata->uploadpack = \"git upload-pack\";\n \t\tif (remote && remote->uploadpack)\n \t\t\tdata->uploadpack = remote->uploadpack;\n-\t\tdata->receivepack = \"git-receive-pack\";\n+\t\tdata->receivepack = \"git receive-pack\";\n \t\tif (remote && remote->receivepack)\n \t\t\tdata->receivepack = remote->receivepack;\n \t}\n\n-- \nShawn.\n"},{"id":"81065","messageId":"7v8wwu6qxr.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625044409.GE11793@spearce.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T05:09:52Z","receivedAt":"2008-06-25T05:09:52Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Shawn O. Pearce\" <spearce@spearce.org> writes:\n\n>> Any other suggestions that is workable?\n>\n> diff --git a/builtin-clone.c b/builtin-clone.c\n> index 5c5acb4..98d0f0f 100644\n> --- a/builtin-clone.c\n> +++ b/builtin-clone.c\n> @@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;\n\n<< a patch to conditionally change \"git-program\" default to \"git program\"\nsnipped >>\n\nHow would that help client that talk with git-daemon, unlike what I sent\nearlier?\n"},{"id":"81066","messageId":"7v4p7i6qs1.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7v8wwu6qxr.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T05:13:18Z","receivedAt":"2008-06-25T05:13:18Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> \"Shawn O. Pearce\" <spearce@spearce.org> writes:\n>\n>>> Any other suggestions that is workable?\n>>\n>> diff --git a/builtin-clone.c b/builtin-clone.c\n>> index 5c5acb4..98d0f0f 100644\n>> --- a/builtin-clone.c\n>> +++ b/builtin-clone.c\n>> @@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;\n>\n> << a patch to conditionally change \"git-program\" default to \"git program\"\n> snipped >>\n\nTypofix: s/cond/uncond/;\n\n> How would that help client that talk with git-daemon, unlike what I sent\n> earlier?\n\nIf we force --upload-pack workaround to _everybody_ we are already lost.\n\nAlso I think the previous one still lets you work it around by giving a\nfull path, like \"/usr/local/bin/git-upload-pack\", because \"/usr\" does not\nmatch \"git-\" ;-)\n"},{"id":"81068","messageId":"7vy74u5bkk.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7v4p7i6qs1.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T05:27:07Z","receivedAt":"2008-06-25T05:27:07Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> If we force --upload-pack workaround to _everybody_ we are already lost.\n>\n> Also I think the previous one still lets you work it around by giving a\n> full path, like \"/usr/local/bin/git-upload-pack\", because \"/usr\" does not\n> match \"git-\" ;-)\n\nOk, let's map this out seriously.\n\n* 1.6.0 will install the server-side programs in $(bindir) so that \n  people coming over ssh will find them on the $PATH\n\n* In 1.6.0 (and 1.5.6.1), we will change \"git daemon\" to accept both\n  \"git-program\" and \"git program\" forms.  When the spaced form is used, it\n  will behave as if the dashed form is requested.  This is a prerequisite\n  for client side change to start asking for \"git program\".\n\n* In the near future, there will no client-side change.  \"git-program\"\n  will be asked for.\n\n* 6 months after 1.6.0 ships, hopefully all the deployed server side will\n  be running that version or newer.  Client side will start asking for\n  \"git program\" by default, but we can still override with --upload-pack\n  and friends.\n\n* 12 months after client side changes, everybody will be running that\n  version or newer.  We stop installing the server side programs in\n  $(bindir) but people coming over ssh will be asking for \"git program\"\n  and \"git\" will be on the $PATH so there is no issue.\n\nThe above 6 and 12 are yanked out of thin air and I am of course open to\ntweaking them, but I think the above order of events would be workable.\n"},{"id":"81070","messageId":"7vr6am5be8.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625044409.GE11793@spearce.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T05:30:55Z","receivedAt":"2008-06-25T05:30:55Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Shawn O. Pearce\" <spearce@spearce.org> writes:\n\n> Pasky also has to update:\n>\n> $ git ls-remote --upload-pack='git upload-pack' repo.or.cz:/srv/git/egit.git\n> fatal: unrecognized command 'git upload-pack '/srv/git/egit.git''\n> fatal: The remote end hung up unexpectedly\n\nOf course.  I am assuming that he runs git-shell for user account, and\nthat's what the change in 'next' is about.\n"},{"id":"81072","messageId":"20080625053452.GI11793@spearce.org","threadId":"12603","inReplyTo":"7v4p7i6qs1.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T05:34:52Z","receivedAt":"2008-06-25T05:34:52Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n> Junio C Hamano <gitster@pobox.com> writes:\n> > \"Shawn O. Pearce\" <spearce@spearce.org> writes:\n> >\n> >>> Any other suggestions that is workable?\n> >>\n> >> diff --git a/builtin-clone.c b/builtin-clone.c\n> >> index 5c5acb4..98d0f0f 100644\n> >> --- a/builtin-clone.c\n> >> +++ b/builtin-clone.c\n> >> @@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;\n> >\n> > << a patch to conditionally change \"git-program\" default to \"git program\"\n> > snipped >>\n\nShouldn't \"git upload-pack\" work on the server side as far back as\n0.99.9k?  That's back really old.  And my patch fixed \"git \" to be\n\"git-\" when talking to git-daemon, thus keeping clients compatible\nwith all current git:// servers.\n\nFor SSH servers that can't handle \"git upload-pack\" the user can\nchange it to --upload-pack=git-upload-pack and get back to the\nold behavior, until the server operator can upgrade.\n\nYour patch doesn't offer that work around on the client side.\n \n> Typofix: s/cond/uncond/;\n> \n> > How would that help client that talk with git-daemon, unlike what I sent\n> > earlier?\n\nCheck my change in git_connect again:\n\ndiff --git a/connect.c b/connect.c\nindex e92af29..dbabd93 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -576,8 +576,8 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n \t\t * from extended components with a NUL byte.\n \t\t */\n \t\tpacket_write(fd[1],\n-\t\t\t     \"%s %s%chost=%s%c\",\n-\t\t\t     prog, path, 0,\n+\t\t\t     \"git-%s %s%chost=%s%c\",\n+\t\t\t     prog + 4, path, 0,\n \t\t\t     target_host, 0);\n \t\tfree(target_host);\n \t\tfree(url);\n\nIts buggy if the user tried to do \"git ls-remote --upload-pack=crp git://\"\nbut if this is the direction we want to go we can obviously work out a\nbetter method of forcing \"git \" to be \"git-\" when talking to git-daemon.\n\n> If we force --upload-pack workaround to _everybody_ we are already lost.\n> \n> Also I think the previous one still lets you work it around by giving a\n> full path, like \"/usr/local/bin/git-upload-pack\", because \"/usr\" does not\n> match \"git-\" ;-)\n\nPlease tell me, where is git-upload-pack on repo.or.cz?\n\n$ ssh repo.or.cz which git-upload-pack\nfatal: unrecognized command 'which git-upload-pack'\n\nI doubt I can pass it '/usr/local/bin/git-upload-pack' and get it\nto work too.  So I don't think this is a good work around.\n\nObviously pasky will fix repo.or.cz to accept both at some point\nin the near future, likely before 1.6.0 releases, because he's cool\nlike that.  Not everyone is.\n\nPlease don't make 1.6.0 unavailable to end-users because their\nserver operator can't currently accept \"git upload-pack\" without\ngiving them a workaround to force \"git-upload-pack\" over SSH.\n\n-- \nShawn.\n"},{"id":"81073","messageId":"20080625053848.GJ11793@spearce.org","threadId":"12603","inReplyTo":"7vy74u5bkk.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T05:38:49Z","receivedAt":"2008-06-25T05:38:49Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n> Junio C Hamano <gitster@pobox.com> writes:\n> \n> > If we force --upload-pack workaround to _everybody_ we are already lost.\n> >\n> > Also I think the previous one still lets you work it around by giving a\n> > full path, like \"/usr/local/bin/git-upload-pack\", because \"/usr\" does not\n> > match \"git-\" ;-)\n> \n> Ok, let's map this out seriously.\n\nThis plan makes a lot of sense to me.  I'm behind it.  For whatever\nthat means.  At least I'll shutup and stop making noise about this\nissue if you take this approach.  :-)\n\n \n> * 1.6.0 will install the server-side programs in $(bindir) so that \n>   people coming over ssh will find them on the $PATH\n> \n> * In 1.6.0 (and 1.5.6.1), we will change \"git daemon\" to accept both\n>   \"git-program\" and \"git program\" forms.  When the spaced form is used, it\n>   will behave as if the dashed form is requested.  This is a prerequisite\n>   for client side change to start asking for \"git program\".\n> \n> * In the near future, there will no client-side change.  \"git-program\"\n>   will be asked for.\n> \n> * 6 months after 1.6.0 ships, hopefully all the deployed server side will\n>   be running that version or newer.  Client side will start asking for\n>   \"git program\" by default, but we can still override with --upload-pack\n>   and friends.\n> \n> * 12 months after client side changes, everybody will be running that\n>   version or newer.  We stop installing the server side programs in\n>   $(bindir) but people coming over ssh will be asking for \"git program\"\n>   and \"git\" will be on the $PATH so there is no issue.\n> \n> The above 6 and 12 are yanked out of thin air and I am of course open to\n> tweaking them, but I think the above order of events would be workable.\n\nYea, 6 and 12 seem like a good idea.  Its a couple of releases and\ngives people time to migrate their server installations.\n\n-- \nShawn.\n"},{"id":"81076","messageId":"7vmyla5ac0.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625053452.GI11793@spearce.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T05:53:51Z","receivedAt":"2008-06-25T05:53:51Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Shawn O. Pearce\" <spearce@spearce.org> writes:\n\n> Junio C Hamano <gitster@pobox.com> wrote:\n>> Junio C Hamano <gitster@pobox.com> writes:\n>> > \"Shawn O. Pearce\" <spearce@spearce.org> writes:\n>> >\n>> >>> Any other suggestions that is workable?\n>> >>\n>> >> diff --git a/builtin-clone.c b/builtin-clone.c\n>> >> index 5c5acb4..98d0f0f 100644\n>> >> --- a/builtin-clone.c\n>> >> +++ b/builtin-clone.c\n>> >> @@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;\n>> >\n>> > << a patch to conditionally change \"git-program\" default to \"git program\"\n>> > snipped >>\n>\n> Shouldn't \"git upload-pack\" work on the server side as far back as\n> 0.99.9k?\n\nYeah, I missed the patch to connect.c that was buried among other changes.\nSorry.\n"},{"id":"81089","messageId":"20080625072909.GJ29404@genesis.frugalware.org","threadId":"12603","inReplyTo":"m3fxr2jruy.fsf@localhost.localdomain","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-06-25T07:29:09Z","receivedAt":"2008-06-25T07:29:09Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Tue, Jun 24, 2008 at 05:11:44PM -0700, Jakub Narebski <jnareb@gmail.com> wrote:\n> What does \"git ls-remote server:/home/vmiklos/git/test\" invoke on server? \n\n$ git ls-remote server:/home/vmiklos/git/test\nbash: git-upload-pack: command not found\nfatal: The remote end hung up unexpectedly\n"},{"id":"81102","messageId":"7vej6l3lp7.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vk5ggipuw.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T09:31:16Z","receivedAt":"2008-06-25T09:31:16Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  But bigger changes will be:\n\n * MinGW will be in.\n\n * /usr/bin/git-cat-file is no more.  The bulk of the git commands will\n   move to /usr/libexec/git-core/ or somesuch.\n\n * git-merge will be rewritten in C.\n\n * default pack and idx versions will be updated as scheduled for some\n   time ago.\n\n----------------------------------------------------------------\n[New Topics]\n\n* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits\n - Migrate git-blame to parse-option partially.\n - parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.\n - parse-opt: fake short strings for callers to believe in.\n - parse-opt: do not pring errors on unknown options, return -2\n   intead.\n - parse-opt: create parse_options_step.\n - parse-opt: Export a non NORETURN usage dumper.\n - parse-opt: have parse_options_{start,end}.\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit\n + gitweb: standarize HTTP status codes\n\n* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits\n + Add config option to enable 'fsync()' of object files\n + Split up default \"i18n\" and \"branch\" config parsing into helper\n   routines\n + Split up default \"user\" config parsing into helper routine\n + Split up default \"core\" config parsing into helper routine\n\n* nd/dashless (Tue Jun 24 19:58:11 2008 -0700) 2 commits\n + Keep some git-* programs in $(bindir)\n + Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  We'll leave server-side programs in $(bindir) \nso that ssh clients can ask for \"git-program\" and find them on the $PATH.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\n* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits\n + Hook up the result aggregation in the test makefile.\n + A simple script to parse the results from the testcases\n + Modify test-lib.sh to output stats to t/test-results/*\n\n* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits\n + Teach \"git clone\" to pack refs\n + Prepare testsuite for a \"git clone\" that packs refs\n + Move pack_refs() and friends into libgit\n + Incorporate fetched packs in future object traversal\n\nThis is useful when cloning from a repository with insanely large number\nof refs.\n\n* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits\n + Git.pm: add test suite\n + t/test-lib.sh: add test_external and test_external_without_stderr\n\nBeginning of regression tests for Perl part of the system.\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* mv/merge-in-c (Sat Jun 21 19:15:35 2008 +0200) 12 commits\n - Add new test case to ensure git-merge reduces octopus parents when\n   possible\n - Build in merge\n - Introduce reduce_heads()\n - Introduce get_merge_bases_many()\n - Add new test to ensure git-merge handles more than 25 refs.\n - Introduce get_octopus_merge_bases() in commit.c\n - git-fmt-merge-msg: make it usable from other builtins\n - Move read_cache_unmerged() to read-cache.c\n - Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n - Move parse-options's skip_prefix() to git-compat-util.h\n - Move commit_list_count() to commit.c\n - Move split_cmdline() to alias.c\n\nI dropped the change to parseopt in this series and fixed up the caller.\n\n* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits\n + Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n + git-shell: accept \"git foo\" form\n\nWe do not plan to remove git-foo form completely from the filesystem at\nthis point, but git-shell may need to be updated.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n + Eliminate an unnecessary chdir(\"..\")\n + Add support for GIT_CEILING_DIRECTORIES\n + Fold test-absolute-path into test-path-utils\n + Implement normalize_absolute_path\n\n* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits\n - rerere.autoupdate\n - t4200: fix rerere test\n - rerere: remove dubious \"tail_optimization\"\n - git-rerere: detect unparsable conflicts\n - rerere: rerere_created_at() and has_resolution() abstraction\n\n* sb/rebase (Sun Jun 22 01:55:50 2008 +0200) 2 commits\n + t3404: stricter tests for git-rebase--interactive\n + api-builtin.txt: update and fix typo\n\n* sb/maint-rebase (Sun Jun 22 16:07:02 2008 +0200) 1 commit\n + git-rebase.sh: Add check if rebase is in progress\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n\n----------------------------------------------------------------\n[On Hold]\n\n* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit\n + Remove the use of '--' in merge program invocation\n\nWaiting for success reports from people who use various backends.\n\n* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 39 commits\n - compat/pread.c: Add a forward declaration to fix a warning\n - Windows: Fix ntohl() related warnings about printf formatting\n - Windows: TMP and TEMP environment variables specify a temporary\n   directory.\n - Windows: Make 'git help -a' work.\n - Windows: Work around an oddity when a pipe with no reader is\n   written to.\n - Windows: Make the pager work.\n - When installing, be prepared that template_dir may be relative.\n - Windows: Use a relative default template_dir and ETC_GITCONFIG\n - Windows: Compute the fallback for exec_path from the program\n   invocation.\n - Turn builtin_exec_path into a function.\n - Windows: Use a customized struct stat that also has the st_blocks\n   member.\n - Windows: Add a custom implementation for utime().\n - Windows: Add a new lstat and fstat implementation based on Win32\n   API.\n - Windows: Implement a custom spawnve().\n - Windows: Implement wrappers for gethostbyname(), socket(), and\n   connect().\n - Windows: Work around incompatible sort and find.\n - Windows: Implement asynchronous functions as threads.\n - Windows: Disambiguate DOS style paths from SSH URLs.\n - Windows: A rudimentary poll() emulation.\n - Windows: Change the name of hook scripts to make them not\n   executable.\n - Windows: Implement start_command().\n - Windows: A pipe() replacement whose ends are not inherited to\n   children.\n - Windows: Wrap execve so that shell scripts can be invoked.\n - Windows: Implement setitimer() and sigaction().\n - Windows: Fix PRIuMAX definition.\n - Windows: Implement gettimeofday().\n - Make my_mktime() public and rename it to tm_to_time_t()\n - Windows: Work around misbehaved rename().\n - Windows: always chmod(, 0666) before unlink().\n - Windows: A minimal implemention of getpwuid().\n - Windows: Implement a wrapper of the open() function.\n - Windows: Strip \".exe\" from the program name.\n - Windows: Handle absolute paths in\n   safe_create_leading_directories().\n - Windows: Treat Windows style path names.\n - setup.c: Prepare for Windows directory separators.\n - Windows: Use the Windows style PATH separator ';'.\n - Add target architecture MinGW.\n - Compile some programs only conditionally.\n - Add compat/regex.[ch] and compat/fnmatch.[ch].\n\nNo explanation is necessary ;-).  The series is probably 'next' worthy\nas-is, except that template renaming hack won't be needed anymore.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit\n - Per-ref reflog expiry configuration\n\nPerhaps a good foundation for optionally unexpirable stash.  As 1.6.0 will\nbe a good time to make backward incompatible changes, we might make expiry\nperiod of stash 'never' in new repositories.  Needs a concensus.\n\n* jc/merge-theirs (Fri Jun 20 00:17:59 2008 -0700) 2 commits\n - git-merge-recursive-{ours,theirs}\n - git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends may need to change, though.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n\n----------------------------------------------------------------\n[Dropped for now]\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n . Introduce fast forward option only\n . Head reduction before selecting merge strategy\n . Restructure git-merge.sh\n . Introduce -ff=<fast forward option>\n . New merge tests\n . Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C.\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n . Use perl instead of tac\n . Fix t3404 assumption that `wc -l` does not use whitespace.\n . rebase -i: Use : in expr command instead of match.\n . rebase -i: update the implementation of 'mark' command\n . Add option --preserve-tags\n . Teach rebase interactive the tag command\n . Add option --first-parent\n . Do rebase with preserve merges with advanced TODO list\n . Select all lines with fake-editor\n . Unify the length of $SHORT* and the commits in the TODO list\n . Teach rebase interactive the merge command\n . Move redo merge code in a function\n . Teach rebase interactive the reset command\n . Teach rebase interactive the mark command\n . Move cleanup code into it's own function\n . Don't append default merge message to -m message\n . fake-editor: output TODO list if unchanged\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n . WIP: rethink replay merge\n . Start using replay-tree merge in cherry-pick\n . revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n . git-am --forge: add Signed-off-by: line for the author\n . git-am: clean-up Signed-off-by: lines\n . stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n . stripspace: use parse_options()\n . Add \"git am -s\" test\n . git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n . \"git push\": tellme-more protocol extension\n"},{"id":"81113","messageId":"20080625130646.GD20361@mit.edu","threadId":"12603","inReplyTo":"7vy74u5bkk.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Theodore Tso","fromEmail":"tytso@mit.edu","sentAt":"2008-06-25T13:06:46Z","receivedAt":"2008-06-25T13:06:46Z","isPatch":true,"sender":{"key":"tytso@mit.edu","avatar":"https://avatars.githubusercontent.com/u/51416?v=4"},"body":"On Tue, Jun 24, 2008 at 10:27:07PM -0700, Junio C Hamano wrote:\n> Ok, let's map this out seriously.\n> \n> * 1.6.0 will install the server-side programs in $(bindir) so that \n>   people coming over ssh will find them on the $PATH\n> \n> * In 1.6.0 (and 1.5.6.1), we will change \"git daemon\" to accept both\n>   \"git-program\" and \"git program\" forms.  When the spaced form is used, it\n>   will behave as if the dashed form is requested.  This is a prerequisite\n>   for client side change to start asking for \"git program\".\n> \n> * In the near future, there will no client-side change.  \"git-program\"\n>   will be asked for.\n> \n> * 6 months after 1.6.0 ships, hopefully all the deployed server side will\n>   be running that version or newer.  Client side will start asking for\n>   \"git program\" by default, but we can still override with --upload-pack\n>   and friends.\n> \n> * 12 months after client side changes, everybody will be running that\n>   version or newer.  We stop installing the server side programs in\n>   $(bindir) but people coming over ssh will be asking for \"git program\"\n>   and \"git\" will be on the $PATH so there is no issue.\n> \n> The above 6 and 12 are yanked out of thin air and I am of course open to\n> tweaking them, but I think the above order of events would be workable.\n\nIs that really 6 and 12 months, or \"6/12 months or at the next major\nrelease boundary, whichever is later\".  i.e., would make some of these\nchanges as part of a minor dot release, such as having the client side\nchange what it starts asking for in 1.6.3 or some such?  Presumably\nthe earliest that change would happen is 1.7, and the earliest to make\nthe server side installation changes is 1.8, right?  Or did you really\nmean a hard 6/12 months, regardless of release cycle issues?\n\n       \t    \t \t \t       \t       - Ted\n"},{"id":"81148","messageId":"7vlk0t1kdp.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625130646.GD20361@mit.edu","subject":"Re: [PATCH] Ask for \"git program\" when asking for \"git-program\" over SSH connection","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T17:42:42Z","receivedAt":"2008-06-25T17:42:42Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Theodore Tso <tytso@mit.edu> writes:\n\n> On Tue, Jun 24, 2008 at 10:27:07PM -0700, Junio C Hamano wrote:\n> ...\n>> The above 6 and 12 are yanked out of thin air and I am of course open to\n>> tweaking them, but I think the above order of events would be workable.\n>\n> Is that really 6 and 12 months, or \"6/12 months or at the next major\n> release boundary, whichever is later\".\n\nSigh... I thought you by now knew me better than that...\n\nYes, I didn't say it explicitly because I thought it was too obvious,\nwhich was a mistake.  These except for the ones that are preparation (such\nas \"prepare daemon so that future clients can ask with non-dash forms\")\nneed to happen at release boundaries, but these 6/12 months figures set\nthe minimums.  E.g. even if we had 6 week release cycles and 1.7.0 were to\nbe done 6 weeks after 1.6.0, that is still too early for the client side\nto switch asking for \"git program\".\n"},{"id":"81200","messageId":"7v4p7hxhbd.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625053848.GJ11793@spearce.org","subject":"[PATCH] daemon: accept \"git program\" as well","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T22:47:50Z","receivedAt":"2008-06-25T22:47:50Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"This is a step to futureproof git-daemon to accept clients that\nask for \"git upload-pack\" and friends, instead of using the more\ntraditional dash-form \"git-upload-pack\".  By allowing both, it\nmakes the client side easier to handle, as it makes \"git\" the only\nthing necessary to be on $PATH when invoking the remote command\ndirectly via ssh.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n\n \"Shawn O. Pearce\" <spearce@spearce.org> writes:\n\n > Junio C Hamano <gitster@pobox.com> wrote:\n >\n >> Ok, let's map this out seriously.\n >\n > This plan makes a lot of sense to me.  I'm behind it.  For whatever\n > that means.  At least I'll shutup and stop making noise about this\n > issue if you take this approach.  :-)\n >  \n >> * 1.6.0 will install the server-side programs in $(bindir) so that \n >>   people coming over ssh will find them on the $PATH\n >> \n >> * In 1.6.0 (and 1.5.6.1), we will change \"git daemon\" to accept both\n >>   \"git-program\" and \"git program\" forms.  When the spaced form is used, it\n >>   will behave as if the dashed form is requested.  This is a prerequisite\n >>   for client side change to start asking for \"git program\".\n >> \n >> * In the near future, there will no client-side change.  \"git-program\"\n >>   will be asked for.\n >> \n >> * 6 months after 1.6.0 ships, hopefully all the deployed server side will\n >>   be running that version or newer.  Client side will start asking for\n >>   \"git program\" by default, but we can still override with --upload-pack\n >>   and friends.\n >> \n >> * 12 months after client side changes, everybody will be running that\n >>   version or newer.  We stop installing the server side programs in\n >>   $(bindir) but people coming over ssh will be asking for \"git program\"\n >>   and \"git\" will be on the $PATH so there is no issue.\n >> \n >> The above 6 and 12 are yanked out of thin air and I am of course open to\n >> tweaking them, but I think the above order of events would be workable.\n >\n > Yea, 6 and 12 seem like a good idea.  Its a couple of releases and\n > gives people time to migrate their server installations.\n\n So this obviously needs to be queued to 'maint' to be included in 1.5.6.1\n and 1.6.0.\n\n daemon.c |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/daemon.c b/daemon.c\nindex 63cd12c..621c567 100644\n--- a/daemon.c\n+++ b/daemon.c\n@@ -586,7 +586,7 @@ static int execute(struct sockaddr *addr)\n \tfor (i = 0; i < ARRAY_SIZE(daemon_service); i++) {\n \t\tstruct daemon_service *s = &(daemon_service[i]);\n \t\tint namelen = strlen(s->name);\n-\t\tif (!prefixcmp(line, \"git-\") &&\n+\t\tif ((!prefixcmp(line, \"git-\") || !prefixcmp(line, \"git \")) &&\n \t\t    !strncmp(s->name, line + 4, namelen) &&\n \t\t    line[namelen + 4] == ' ') {\n \t\t\t/*\n"},{"id":"81201","messageId":"7vvdzxw2eo.fsf_-_@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7v4p7hxhbd.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Make clients ask for \"git program\" over ssh and local transport","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T22:55:11Z","receivedAt":"2008-06-25T22:55:11Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"This will allow server side programs such as upload-pack to be installed\noutside $PATH.  Connections to git-daemon still ask for \"git-program\" to\nretain backward compatibility for daemons before 1.5.6.1 and 1.6.0.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n * This is essentially your patch.  This can be in 1.6.0 clients and it\n   should also be in 1.5.6.1 as people might keep ancient clients to talk\n   to new servers that won't have anything but \"git\" on $PATH.\n\n builtin-clone.c      |    2 +-\n builtin-fetch-pack.c |    2 +-\n connect.c            |   10 ++++++++--\n git-parse-remote.sh  |    4 ++--\n transport.c          |    4 ++--\n 5 files changed, 14 insertions(+), 8 deletions(-)\n\ndiff --git a/builtin-clone.c b/builtin-clone.c\nindex 7190952..2f3e9c9 100644\n--- a/builtin-clone.c\n+++ b/builtin-clone.c\n@@ -36,7 +36,7 @@ static int option_quiet, option_no_checkout, option_bare;\n static int option_local, option_no_hardlinks, option_shared;\n static char *option_template, *option_reference, *option_depth;\n static char *option_origin = NULL;\n-static char *option_upload_pack = \"git-upload-pack\";\n+static char *option_upload_pack = \"git upload-pack\";\n \n static struct option builtin_clone_options[] = {\n \tOPT__QUIET(&option_quiet),\ndiff --git a/builtin-fetch-pack.c b/builtin-fetch-pack.c\nindex de1e8d1..a5f21f9 100644\n--- a/builtin-fetch-pack.c\n+++ b/builtin-fetch-pack.c\n@@ -14,7 +14,7 @@ static int transfer_unpack_limit = -1;\n static int fetch_unpack_limit = -1;\n static int unpack_limit = 100;\n static struct fetch_pack_args args = {\n-\t/* .uploadpack = */ \"git-upload-pack\",\n+\t/* .uploadpack = */ \"git upload-pack\",\n };\n \n static const char fetch_pack_usage[] =\ndiff --git a/connect.c b/connect.c\nindex e92af29..4a32ba4 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -567,6 +567,8 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n \t\t * cannot connect.\n \t\t */\n \t\tchar *target_host = xstrdup(host);\n+\t\tconst char *program_prefix = \"\";\n+\n \t\tif (git_use_proxy(host))\n \t\t\tgit_proxy_connect(fd, host);\n \t\telse\n@@ -575,9 +577,13 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n \t\t * Separate original protocol components prog and path\n \t\t * from extended components with a NUL byte.\n \t\t */\n+\t\tif (!prefixcmp(prog, \"git \")) {\n+\t\t\tprogram_prefix = \"git-\";\n+\t\t\tprog += 4;\n+\t\t}\n \t\tpacket_write(fd[1],\n-\t\t\t     \"%s %s%chost=%s%c\",\n-\t\t\t     prog, path, 0,\n+\t\t\t     \"%s%s %s%chost=%s%c\",\n+\t\t\t     program_prefix, prog, path, 0,\n \t\t\t     target_host, 0);\n \t\tfree(target_host);\n \t\tfree(url);\ndiff --git a/git-parse-remote.sh b/git-parse-remote.sh\nindex 695a409..0f82a93 100755\n--- a/git-parse-remote.sh\n+++ b/git-parse-remote.sh\n@@ -255,10 +255,10 @@ get_uploadpack () {\n \tcase \"$data_source\" in\n \tconfig)\n \t\tuplp=$(git config --get \"remote.$1.uploadpack\")\n-\t\techo ${uplp:-git-upload-pack}\n+\t\techo ${uplp:-git upload-pack}\n \t\t;;\n \t*)\n-\t\techo \"git-upload-pack\"\n+\t\techo \"git upload-pack\"\n \t\t;;\n \tesac\n }\ndiff --git a/transport.c b/transport.c\nindex 3ff8519..351b7f5 100644\n--- a/transport.c\n+++ b/transport.c\n@@ -762,10 +762,10 @@ struct transport *transport_get(struct remote *remote, const char *url)\n \n \t\tdata->thin = 1;\n \t\tdata->conn = NULL;\n-\t\tdata->uploadpack = \"git-upload-pack\";\n+\t\tdata->uploadpack = \"git upload-pack\";\n \t\tif (remote && remote->uploadpack)\n \t\t\tdata->uploadpack = remote->uploadpack;\n-\t\tdata->receivepack = \"git-receive-pack\";\n+\t\tdata->receivepack = \"git receive-pack\";\n \t\tif (remote && remote->receivepack)\n \t\t\tdata->receivepack = remote->receivepack;\n \t}\n-- \n1.5.6.86.ge2da6\n"},{"id":"81202","messageId":"7vr6alw28s.fsf_-_@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vvdzxw2eo.fsf_-_@gitster.siamese.dyndns.org","subject":"[PATCH] Ask for \"git program\" even against git-daemon","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T22:58:43Z","receivedAt":"2008-06-25T22:58:43Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"This drops backward compatibility support to ask for \"git-program\"\nform when talking to git-daemon.  Now all git native requests use\n\"git program\" form over ssh, local and git transports.\n\nThis needs to be held back until everybody runs git-daemon from 1.5.6.1 or\n1.6.0 or newer.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n * According to the roadmap we exchanged earlier, this should happen in a\n   major release (that increments the second dewey-decimal digit from the\n   left) that ships at least 6 months after 1.5.6.1 and 1.6.0 (which will\n   have the \"git daemon preparation\" patch included) are released.\n\n connect.c |    9 ++-------\n 1 files changed, 2 insertions(+), 7 deletions(-)\n\ndiff --git a/connect.c b/connect.c\nindex 4a32ba4..f2e72c2 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -567,7 +567,6 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n \t\t * cannot connect.\n \t\t */\n \t\tchar *target_host = xstrdup(host);\n-\t\tconst char *program_prefix = \"\";\n \n \t\tif (git_use_proxy(host))\n \t\t\tgit_proxy_connect(fd, host);\n@@ -577,13 +576,9 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n \t\t * Separate original protocol components prog and path\n \t\t * from extended components with a NUL byte.\n \t\t */\n-\t\tif (!prefixcmp(prog, \"git \")) {\n-\t\t\tprogram_prefix = \"git-\";\n-\t\t\tprog += 4;\n-\t\t}\n \t\tpacket_write(fd[1],\n-\t\t\t     \"%s%s %s%chost=%s%c\",\n-\t\t\t     program_prefix, prog, path, 0,\n+\t\t\t     \"%s %s%chost=%s%c\",\n+\t\t\t     prog, path, 0,\n \t\t\t     target_host, 0);\n \t\tfree(target_host);\n \t\tfree(url);\n-- \n1.5.6.86.ge2da6\n"},{"id":"81203","messageId":"20080625230228.GR11793@spearce.org","threadId":"12603","inReplyTo":"7v4p7hxhbd.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] daemon: accept \"git program\" as well","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T23:02:28Z","receivedAt":"2008-06-25T23:02:28Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n> This is a step to futureproof git-daemon to accept clients that\n> ask for \"git upload-pack\" and friends, instead of using the more\n> traditional dash-form \"git-upload-pack\".  By allowing both, it\n> makes the client side easier to handle, as it makes \"git\" the only\n> thing necessary to be on $PATH when invoking the remote command\n> directly via ssh.\n> \n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n\nObviously correct.  Ack.  Thanks Junio.\n\n\n>  So this obviously needs to be queued to 'maint' to be included in 1.5.6.1\n>  and 1.6.0.\n> \n>  daemon.c |    2 +-\n>  1 files changed, 1 insertions(+), 1 deletions(-)\n> \n> diff --git a/daemon.c b/daemon.c\n> index 63cd12c..621c567 100644\n> --- a/daemon.c\n> +++ b/daemon.c\n> @@ -586,7 +586,7 @@ static int execute(struct sockaddr *addr)\n>  \tfor (i = 0; i < ARRAY_SIZE(daemon_service); i++) {\n>  \t\tstruct daemon_service *s = &(daemon_service[i]);\n>  \t\tint namelen = strlen(s->name);\n> -\t\tif (!prefixcmp(line, \"git-\") &&\n> +\t\tif ((!prefixcmp(line, \"git-\") || !prefixcmp(line, \"git \")) &&\n>  \t\t    !strncmp(s->name, line + 4, namelen) &&\n>  \t\t    line[namelen + 4] == ' ') {\n>  \t\t\t/*\n\n-- \nShawn.\n"},{"id":"81206","messageId":"20080625231343.GS11793@spearce.org","threadId":"12603","inReplyTo":"7vvdzxw2eo.fsf_-_@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Make clients ask for \"git program\" over ssh and local transport","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T23:13:43Z","receivedAt":"2008-06-25T23:13:43Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n> This will allow server side programs such as upload-pack to be installed\n> outside $PATH.  Connections to git-daemon still ask for \"git-program\" to\n> retain backward compatibility for daemons before 1.5.6.1 and 1.6.0.\n> \n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> ---\n>  * This is essentially your patch.  This can be in 1.6.0 clients and it\n>    should also be in 1.5.6.1 as people might keep ancient clients to talk\n>    to new servers that won't have anything but \"git\" on $PATH.\n\nAck.  Thanks for cleaning up the code in connect.c to not segfault\nor send garbage.\n\nI think you want to squash this in as well:\n\ndiff --git a/builtin-send-pack.c b/builtin-send-pack.c\nindex d76260c..f693a6d 100644\n--- a/builtin-send-pack.c\n+++ b/builtin-send-pack.c\n@@ -12,7 +12,7 @@ static const char send_pack_usage[] =\n \"  --all and explicit <ref> specification are mutually exclusive.\";\n \n static struct send_pack_args args = {\n-\t/* .receivepack = */ \"git-receive-pack\",\n+\t/* .receivepack = */ \"git receive-pack\",\n };\n \n /*\n \n\n-- \nShawn.\n"},{"id":"81209","messageId":"7vmyl9w0y1.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625230228.GR11793@spearce.org","subject":"Re: [PATCH] daemon: accept \"git program\" as well","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T23:26:46Z","receivedAt":"2008-06-25T23:26:46Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Shawn O. Pearce\" <spearce@spearce.org> writes:\n\n> Junio C Hamano <gitster@pobox.com> wrote:\n>> This is a step to futureproof git-daemon to accept clients that\n>> ask for \"git upload-pack\" and friends, instead of using the more\n>> traditional dash-form \"git-upload-pack\".  By allowing both, it\n>> makes the client side easier to handle, as it makes \"git\" the only\n>> thing necessary to be on $PATH when invoking the remote command\n>> directly via ssh.\n>> \n>> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n>\n> Obviously correct.  Ack.  Thanks Junio.\n\nBy the way I looked at gitosis (Tommi CC'ed).\n\n    http://repo.or.cz/w/gitosis.git?a=blob;f=gitosis/serve.py;h=c0b7135bf45305ee1079b0dcab3b4ed1ce988aab;hb=38561aa6a51a2ef6cc04aa119481df62d213ffa4\n\nIn gitosis/serve.py, there are COMMANDS_READONLY and COMMANDS_WRITE array\nthat holds 'git-upload-pack' and 'git-receive-pack' commands, and they are\ncompared with user commands after doing:\n\n\tverb, args = command.split(None, 1)\n\n(and \"verb\" is looked up in the set of valid commands).  It should not be\ntoo involved to notice verb is 'git' and then re-split the args part to\nsee if they are upload-pack/receive-pack, which would be the equivalent\nchange to this patch.  It needs to be done before the clients are\nupdated.\n"},{"id":"81210","messageId":"20080625232727.GU11793@spearce.org","threadId":"12603","inReplyTo":"7vr6alw28s.fsf_-_@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" even against git-daemon","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T23:27:27Z","receivedAt":"2008-06-25T23:27:27Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n> This drops backward compatibility support to ask for \"git-program\"\n> form when talking to git-daemon.  Now all git native requests use\n> \"git program\" form over ssh, local and git transports.\n> \n> This needs to be held back until everybody runs git-daemon from 1.5.6.1 or\n> 1.6.0 or newer.\n> \n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> ---\n>  * According to the roadmap we exchanged earlier, this should happen in a\n>    major release (that increments the second dewey-decimal digit from the\n>    left) that ships at least 6 months after 1.5.6.1 and 1.6.0 (which will\n>    have the \"git daemon preparation\" patch included) are released.\n\nAgreed about holding back.\n\nBut I wonder if this patch is even worth it at some later point\nin time.  Are we also going to change git-daemon to stop accepting\n\"git-\" form?  Is it a worthwhile change?\n\n-- \nShawn.\n"},{"id":"81213","messageId":"7viqvxw0i7.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625232727.GU11793@spearce.org","subject":"Re: [PATCH] Ask for \"git program\" even against git-daemon","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-25T23:36:16Z","receivedAt":"2008-06-25T23:36:16Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Shawn O. Pearce\" <spearce@spearce.org> writes:\n\n> Junio C Hamano <gitster@pobox.com> wrote:\n> ...\n>>  * According to the roadmap we exchanged earlier, this should happen in a\n>>    major release (that increments the second dewey-decimal digit from the\n>>    left) that ships at least 6 months after 1.5.6.1 and 1.6.0 (which will\n>>    have the \"git daemon preparation\" patch included) are released.\n>\n> Agreed about holding back.\n>\n> But I wonder if this patch is even worth it at some later point\n> in time.  Are we also going to change git-daemon to stop accepting\n> \"git-\" form?  Is it a worthwhile change?\n\nThis was merely responding to...\n\n    From: \"Shawn O. Pearce\" <spearce@spearce.org>\n    Subject: Re: [PATCH] Keep some git-* programs in $(bindir)\n    Date: Wed, 25 Jun 2008 00:37:41 -0400\n    Message-ID: <20080625043741.GD11793@spearce.org>\n\n    Daniel Barkalow <barkalow@iabervon.org> wrote:\n    > ...\n    > Should they use \"git upload-pack\" or should they look for their helper \n    > programs in a libexec dir? I don't think that either of these programs is \n    > useful to run independantly, but I don't know if finding a program that \n    > doesn't go in $PATH on a remote machine is going to be any fun.\n\n    IMHO they should in the future use \"git upload-pack\".\n\n\nI do not mind not doing this at all.  Remember, I am the one with more\ninertia than anybody else here (holding back backward incompatible\ninnovations is what maintainers do).\n\nOh, that inertia does not have much to do with actual body weight, if\nanybody is wondering ;-)\n"},{"id":"81216","messageId":"20080625235724.GV11793@spearce.org","threadId":"12603","inReplyTo":"7viqvxw0i7.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Ask for \"git program\" even against git-daemon","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-06-25T23:57:24Z","receivedAt":"2008-06-25T23:57:24Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Junio C Hamano <gitster@pobox.com> wrote:\n> \"Shawn O. Pearce\" <spearce@spearce.org> writes:\n> >\n> > But I wonder if this patch is even worth it at some later point\n> > in time.  Are we also going to change git-daemon to stop accepting\n> > \"git-\" form?  Is it a worthwhile change?\n> \n> This was merely responding to...\n> \n>     From: \"Shawn O. Pearce\" <spearce@spearce.org>\n>     Subject: Re: [PATCH] Keep some git-* programs in $(bindir)\n>     Date: Wed, 25 Jun 2008 00:37:41 -0400\n>     Message-ID: <20080625043741.GD11793@spearce.org>\n> \n>     Daniel Barkalow <barkalow@iabervon.org> wrote:\n>     > ...\n>     > Should they use \"git upload-pack\" [...]\n> \n>     IMHO they should in the future use \"git upload-pack\".\n\nSorry I wasn't clear. I was talking about the SSH transport only.\nFor git:// we could just always send git-upload-pack, like your\ntransitional patch does.  Then we stay compatible with even very\nold git:// servers.\n\n-- \nShawn.\n"},{"id":"81217","messageId":"7vd4m5vz1k.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080625235724.GV11793@spearce.org","subject":"Re: [PATCH] Ask for \"git program\" even against git-daemon","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-26T00:07:51Z","receivedAt":"2008-06-26T00:07:51Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Shawn O. Pearce\" <spearce@spearce.org> writes:\n\n> Junio C Hamano <gitster@pobox.com> wrote:\n>> \"Shawn O. Pearce\" <spearce@spearce.org> writes:\n>> >\n>> > But I wonder if this patch is even worth it at some later point\n>> > in time.  Are we also going to change git-daemon to stop accepting\n>> > \"git-\" form?  Is it a worthwhile change?\n>> \n>> This was merely responding to...\n>> \n>>     From: \"Shawn O. Pearce\" <spearce@spearce.org>\n>>     Subject: Re: [PATCH] Keep some git-* programs in $(bindir)\n>>     Date: Wed, 25 Jun 2008 00:37:41 -0400\n>>     Message-ID: <20080625043741.GD11793@spearce.org>\n>> \n>>     Daniel Barkalow <barkalow@iabervon.org> wrote:\n>>     > ...\n>>     > Should they use \"git upload-pack\" [...]\n>> \n>>     IMHO they should in the future use \"git upload-pack\".\n>\n> Sorry I wasn't clear. I was talking about the SSH transport only.\n> For git:// we could just always send git-upload-pack, like your\n> transitional patch does.  Then we stay compatible with even very\n> old git:// servers.\n\nOk, if that is the plan, then we wouldn't even need to futureproof\ngit-daemon at all.\n\nNot having to change anything is good ;-).\n"},{"id":"81252","messageId":"20080626082013.GT22344@eagain.net","threadId":"12603","inReplyTo":"7vmyl9w0y1.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] daemon: accept \"git program\" as well","fromName":"Tommi Virtanen","fromEmail":"tv@eagain.net","sentAt":"2008-06-26T08:20:13Z","receivedAt":"2008-06-26T08:20:13Z","isPatch":true,"sender":{"key":"tv@debian.org","avatar":null},"body":"On Wed, Jun 25, 2008 at 04:26:46PM -0700, Junio C Hamano wrote:\n> By the way I looked at gitosis (Tommi CC'ed).\n> \n>     http://repo.or.cz/w/gitosis.git?a=blob;f=gitosis/serve.py;h=c0b7135bf45305ee1079b0dcab3b4ed1ce988aab;hb=38561aa6a51a2ef6cc04aa119481df62d213ffa4\n> \n> In gitosis/serve.py, there are COMMANDS_READONLY and COMMANDS_WRITE array\n> that holds 'git-upload-pack' and 'git-receive-pack' commands, and they are\n> compared with user commands after doing:\n\nYeah, that's pretty much a trivial change, doing it now to future-proof\ngitosis.\n\n-- \n:(){ :|:&};:\n"},{"id":"81295","messageId":"200806261741.36187.jnareb@gmail.com","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0806242033570.9925@racer","subject":"Re: What's cooking in git.git (topics)","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-06-26T15:41:33Z","receivedAt":"2008-06-26T15:41:33Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"On Tue, 24 Jun 2008, Johannes Schindelin wrote:\n> Hi,\n> \n> On Tue, 24 Jun 2008, Jakub Narebski wrote:\n> \n> > git-shell hackery won't solve problem, because not everybody is using \n> > git-shell.\n> \n> The problem is not git-shell vs git potty.\n> \n> The problem is that not everybody magically updates their clients to ask \n> for dash-less form.\n\nWith git-shell even if client uses dashed form it can find git commands\n(\"hackery\" is too strong a word for having git-shell search $GIT_EXEC_PATH).\nBut if one uses only SSH, server must have dashed form in a $PATH\n\n-- \nJakub Narebski\nPoland\n"},{"id":"81341","messageId":"4864286C.80609@free.fr","threadId":"12603","inReplyTo":"20080626082013.GT22344@eagain.net","subject":"Re: [PATCH] daemon: accept \"git program\" as well","fromName":"Olivier Marin","fromEmail":"dkr+ml.git@free.fr","sentAt":"2008-06-26T23:38:20Z","receivedAt":"2008-06-26T23:38:20Z","isPatch":true,"sender":{"key":"dkr+ml.git@free.fr","avatar":null},"body":"Hi,\n\nTommi Virtanen a écrit :\n> On Wed, Jun 25, 2008 at 04:26:46PM -0700, Junio C Hamano wrote:\n>>\n>> In gitosis/serve.py, there are COMMANDS_READONLY and COMMANDS_WRITE array\n>> that holds 'git-upload-pack' and 'git-receive-pack' commands, and they are\n>> compared with user commands after doing:\n> \n> Yeah, that's pretty much a trivial change, doing it now to future-proof\n> gitosis.\n> \n\nThis just happened to me with a dashless client, so I tried your patch but it\ndoes not work. The problem comes from git-shell that do not support dashless\nargument, yet (IOW: git shell -c 'git upload-pack ...' give an error).\n\nThe following patch on top of yours fix the problem. The s/git-shell/git shell/\npart is not really necessary, but why not?\n\ndiff --git a/gitosis/serve.py b/gitosis/serve.py\nindex 9a91fcb..5aac355 100644\n--- a/gitosis/serve.py\n+++ b/gitosis/serve.py\n@@ -21,12 +21,10 @@ ALLOW_RE = re.compile(\"^'/*(?P<path>[a-zA-Z0-9][a-zA-Z0-9@._-]*(/[a-zA-Z0-9][a-z\n \n COMMANDS_READONLY = [\n     'git-upload-pack',\n-    'git upload-pack',\n     ]\n \n COMMANDS_WRITE = [\n     'git-receive-pack',\n-    'git receive-pack',\n     ]\n \n class ServingError(Exception):\n@@ -75,7 +73,7 @@ def serve(\n             # all known \"git foo\" commands take one argument; improve\n             # if/when needed\n             raise UnknownCommandError()\n-        verb = '%s %s' % (verb, subverb)\n+        verb = '%s-%s' % (verb, subverb)\n \n     if (verb not in COMMANDS_WRITE\n         and verb not in COMMANDS_READONLY):\n@@ -201,6 +199,6 @@ class Main(app.App):\n             sys.exit(1)\n \n         main_log.debug('Serving %s', newcmd)\n-        os.execvp('git-shell', ['git-shell', '-c', newcmd])\n-        main_log.error('Cannot execute git-shell.')\n+        os.execvp('git', ['git', 'shell', '-c', newcmd])\n+        main_log.error('Cannot execute git.')\n         sys.exit(1)\n\n\nOlivier.\n"},{"id":"81343","messageId":"7vd4m3ojas.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"4864286C.80609@free.fr","subject":"Re: [PATCH] daemon: accept \"git program\" as well","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-26T23:42:03Z","receivedAt":"2008-06-26T23:42:03Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Olivier Marin <dkr+ml.git@free.fr> writes:\n\n> Hi,\n>\n> Tommi Virtanen a écrit :\n>> On Wed, Jun 25, 2008 at 04:26:46PM -0700, Junio C Hamano wrote:\n>>>\n>>> In gitosis/serve.py, there are COMMANDS_READONLY and COMMANDS_WRITE array\n>>> that holds 'git-upload-pack' and 'git-receive-pack' commands, and they are\n>>> compared with user commands after doing:\n>> \n>> Yeah, that's pretty much a trivial change, doing it now to future-proof\n>> gitosis.\n>> \n>\n> This just happened to me with a dashless client, so I tried your patch but it\n> does not work. The problem comes from git-shell that do not support dashless\n> argument, yet (IOW: git shell -c 'git upload-pack ...' give an error).\n>\n> The following patch on top of yours fix the problem. The s/git-shell/git shell/\n> part is not really necessary, but why not?\n>\n> diff --git a/gitosis/serve.py b/gitosis/serve.py\n> index 9a91fcb..5aac355 100644\n> --- a/gitosis/serve.py\n> +++ b/gitosis/serve.py\n> @@ -21,12 +21,10 @@ ALLOW_RE = re.compile(\"^'/*(?P<path>[a-zA-Z0-9][a-zA-Z0-9@._-]*(/[a-zA-Z0-9][a-z\n>  \n>  COMMANDS_READONLY = [\n>      'git-upload-pack',\n> -    'git upload-pack',\n>      ]\n>  \n>  COMMANDS_WRITE = [\n>      'git-receive-pack',\n> -    'git receive-pack',\n>      ]\n>  \n>  class ServingError(Exception):\n> @@ -75,7 +73,7 @@ def serve(\n>              # all known \"git foo\" commands take one argument; improve\n>              # if/when needed\n>              raise UnknownCommandError()\n> -        verb = '%s %s' % (verb, subverb)\n> +        verb = '%s-%s' % (verb, subverb)\n>  \n>      if (verb not in COMMANDS_WRITE\n>          and verb not in COMMANDS_READONLY):\n> @@ -201,6 +199,6 @@ class Main(app.App):\n>              sys.exit(1)\n>  \n>          main_log.debug('Serving %s', newcmd)\n> -        os.execvp('git-shell', ['git-shell', '-c', newcmd])\n> -        main_log.error('Cannot execute git-shell.')\n> +        os.execvp('git', ['git', 'shell', '-c', newcmd])\n> +        main_log.error('Cannot execute git.')\n>          sys.exit(1)\n\nHmm, Tommi, if you are doing command sanitizing yourself, is there a\nreason to still invoke the command via git-shell?\n"},{"id":"81625","messageId":"7v3amweiaz.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vej6l3lp7.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Make default expiration period of reflog used for stash infinite","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-29T08:50:28Z","receivedAt":"2008-06-29T08:50:28Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"This makes the default expiration period for the reflog that implements\nstash infinite.\n\nThe original behaviour to autoexpire old stashes can be restored by using\nthe gc.refs/stash.{reflogexpire,reflogexpireunreachable} configration\nvariables introduced by the previous commit.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n > [Stalled/Needs more work]\n >\n > * jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit\n >  - Per-ref reflog expiry configuration\n >\n > Perhaps a good foundation for optionally unexpirable stash.  As 1.6.0 will\n > be a good time to make backward incompatible changes, we might make expiry\n > period of stash 'never' in new repositories.  Needs a concensus.\n\n builtin-reflog.c |   11 +++++++++++\n 1 files changed, 11 insertions(+), 0 deletions(-)\n\ndiff --git a/builtin-reflog.c b/builtin-reflog.c\nindex 0711728..125d455 100644\n--- a/builtin-reflog.c\n+++ b/builtin-reflog.c\n@@ -441,6 +441,17 @@ static void set_reflog_expiry_param(struct cmd_reflog_expire_cb *cb, int slot, c\n \t\t}\n \t}\n \n+\t/*\n+\t * If unconfigured, make stash never expire\n+\t */\n+\tif (!strcmp(ref, \"refs/stash\")) {\n+\t\tif (!(slot & EXPIRE_TOTAL))\n+\t\t\tcb->expire_total = 0;\n+\t\tif (!(slot & EXPIRE_UNREACH))\n+\t\t\tcb->expire_unreachable = 0;\n+\t\treturn;\n+\t}\n+\n \t/* Nothing matched -- use the default value */\n \tif (!(slot & EXPIRE_TOTAL))\n \t\tcb->expire_total = default_reflog_expire;\n-- \n1.5.6.1.102.g8e69d\n"},{"id":"81624","messageId":"7vwsk8d3q5.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vej6l3lp7.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Teach git-merge to pass -X<option> to the backend strategy module","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-29T08:50:42Z","receivedAt":"2008-06-29T08:50:42Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Distinguishing slight variation of modes of operation between the vanilla\nmerge-recursive and merge-recursive-ours by the command name may have been\nan easy way to experiment, but we should bite the bullet and allow backend\nspecific options to be given by the end user.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n > [Stalled/Needs more work]\n >\n > * jc/merge-theirs (Fri Jun 20 00:17:59 2008 -0700) 2 commits\n >  - git-merge-recursive-{ours,theirs}\n >  - git-merge-file --ours, --theirs\n >\n > Punting a merge by discarding your own work in conflicting parts but still\n > salvaging the parts that are cleanly automerged.  It is likely that this\n > will result in nonsense mishmash, but somehow often people want this, so\n > here they are.  The interface to the backends may need to change, though.\n\n Makefile                     |    3 ---\n builtin-merge-recursive.c    |   23 +++++++++++++++--------\n git-merge.sh                 |   11 ++++++++---\n t/t6034-merge-ours-theirs.sh |    4 ++--\n 4 files changed, 25 insertions(+), 16 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 82d2892..b003e3e 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -304,8 +304,6 @@ BUILT_INS += git-format-patch$X\n BUILT_INS += git-fsck-objects$X\n BUILT_INS += git-get-tar-commit-id$X\n BUILT_INS += git-init$X\n-BUILT_INS += git-merge-recursive-ours$X\n-BUILT_INS += git-merge-recursive-theirs$X\n BUILT_INS += git-merge-subtree$X\n BUILT_INS += git-peek-remote$X\n BUILT_INS += git-repo-config$X\n@@ -1383,7 +1381,6 @@ check-docs::\n \tdo \\\n \t\tcase \"$$v\" in \\\n \t\tgit-merge-octopus | git-merge-ours | git-merge-recursive | \\\n-\t\tgit-merge-recursive-ours | git-merge-recursive-theirs | \\\n \t\tgit-merge-resolve | git-merge-stupid | git-merge-subtree | \\\n \t\tgit-fsck-objects | git-init-db | \\\n \t\tgit-?*--?* ) continue ;; \\\ndiff --git a/builtin-merge-recursive.c b/builtin-merge-recursive.c\nindex a355e7a..6541e16 100644\n--- a/builtin-merge-recursive.c\n+++ b/builtin-merge-recursive.c\n@@ -1407,12 +1407,6 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)\n \t\tif (8 < namelen &&\n \t\t    !strcmp(argv[0] + namelen - 8, \"-subtree\"))\n \t\t\tmerge_recursive_variants = MERGE_RECURSIVE_SUBTREE;\n-\t\telse if (5 < namelen &&\n-\t\t\t !strcmp(argv[0] + namelen - 5, \"-ours\"))\n-\t\t\tmerge_recursive_variants = MERGE_RECURSIVE_OURS;\n-\t\telse if (7 < namelen &&\n-\t\t\t !strcmp(argv[0] + namelen - 7, \"-theirs\"))\n-\t\t\tmerge_recursive_variants = MERGE_RECURSIVE_THEIRS;\n \t}\n \n \tgit_config(merge_config, NULL);\n@@ -1423,8 +1417,21 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)\n \t\tdie(\"Usage: %s <base>... -- <head> <remote> ...\\n\", argv[0]);\n \n \tfor (i = 1; i < argc; ++i) {\n-\t\tif (!strcmp(argv[i], \"--\"))\n-\t\t\tbreak;\n+\t\tconst char *arg = argv[i];\n+\n+\t\tif (!prefixcmp(arg, \"--\")) {\n+\t\t\tif (!arg[2])\n+\t\t\t\tbreak;\n+\t\t\tif (!strcmp(arg+2, \"ours\"))\n+\t\t\t\tmerge_recursive_variants = MERGE_RECURSIVE_OURS;\n+\t\t\telse if (!strcmp(arg+2, \"theirs\"))\n+\t\t\t\tmerge_recursive_variants = MERGE_RECURSIVE_THEIRS;\n+\t\t\telse if (!strcmp(arg+2, \"subtree\"))\n+\t\t\t\tmerge_recursive_variants = MERGE_RECURSIVE_SUBTREE;\n+\t\t\telse\n+\t\t\t\tdie(\"Unknown option %s\", arg);\n+\t\t\tcontinue;\n+\t\t}\n \t\tif (bases_count < sizeof(bases)/sizeof(*bases))\n \t\t\tbases[bases_count++] = argv[i];\n \t}\ndiff --git a/git-merge.sh b/git-merge.sh\nindex 39b5cd9..d475852 100755\n--- a/git-merge.sh\n+++ b/git-merge.sh\n@@ -17,6 +17,7 @@ commit               perform a commit if the merge succeeds (default)\n ff                   allow fast forward (default)\n s,strategy=          merge strategy to use\n m,message=           message to be used for the merge commit (if any)\n+X=                   pass merge strategy specific options\n \"\n \n SUBDIRECTORY_OK=Yes\n@@ -31,12 +32,12 @@ LF='\n '\n \n all_strategies='recur recursive octopus resolve stupid ours subtree'\n-all_strategies=\"$all_strategies recursive-ours recursive-theirs\"\n default_twohead_strategies='recursive'\n default_octopus_strategies='octopus'\n no_fast_forward_strategies='subtree ours'\n-no_trivial_strategies='recursive recur subtree ours recursive-ours recursive-theirs'\n+no_trivial_strategies='recursive recur subtree ours'\n use_strategies=\n+backend_option=\n \n allow_fast_forward=t\n allow_trivial_merge=t\n@@ -187,6 +188,10 @@ parse_config () {\n \t\t\tmerge_msg=\"$1\"\n \t\t\thave_message=t\n \t\t\t;;\n+\t\t-X)\n+\t\t\tshift\n+\t\t\tbackend_option=\"$backend_option --$1\"\n+\t\t\t;;\n \t\t--)\n \t\t\tshift\n \t\t\tbreak ;;\n@@ -451,7 +456,7 @@ do\n     # Remember which strategy left the state in the working tree\n     wt_strategy=$strategy\n \n-    git-merge-$strategy $common -- \"$head_arg\" \"$@\"\n+    git-merge-$strategy $backend_option $common -- \"$head_arg\" \"$@\"\n     exit=$?\n     if test \"$no_commit\" = t && test \"$exit\" = 0\n     then\ndiff --git a/t/t6034-merge-ours-theirs.sh b/t/t6034-merge-ours-theirs.sh\nindex 56a9247..91f0f63 100755\n--- a/t/t6034-merge-ours-theirs.sh\n+++ b/t/t6034-merge-ours-theirs.sh\n@@ -35,7 +35,7 @@ test_expect_success 'plain recursive - should conflict' '\n \n test_expect_success 'recursive favouring theirs' '\n \tgit reset --hard master &&\n-\tgit merge -s recursive-theirs side &&\n+\tgit merge -s recursive -Xtheirs side &&\n \t! grep nine file &&\n \tgrep nueve file &&\n \t! grep 9 file &&\n@@ -45,7 +45,7 @@ test_expect_success 'recursive favouring theirs' '\n \n test_expect_success 'recursive favouring ours' '\n \tgit reset --hard master &&\n-\tgit merge -s recursive-ours side &&\n+\tgit merge -s recursive -Xours side &&\n \tgrep nine file &&\n \t! grep nueve file &&\n \t! grep 9 file &&\n-- \n1.5.6.1.102.g8e69d\n"},{"id":"81626","messageId":"7vod5kd3im.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vej6l3lp7.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-29T08:55:13Z","receivedAt":"2008-06-29T08:55:13Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be applied to the maintenance series have \"maint-\" in their\nnames.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  Bigger changes will be:\n\n * MinGW will be in.\n\n * /usr/bin/git-cat-file is no more.  The bulk of the git commands will\n   move to /usr/libexec/git-core/ or somesuch.\n\n * git-merge will be rewritten in C.\n\n * default pack and idx versions will be updated as scheduled for some\n   time ago.\n\n----------------------------------------------------------------\n[New Topics]\n\n* jk/maint-fetch-ref-hier (Thu Jun 26 23:59:50 2008 -0400) 1 commit\n + fetch: report local storage errors in status table\n\nWhen the remote used to have \"foo\" branch but now has \"foo/bar\", fetch\nrefuses to delete the existing remote tracking branch \"foo\" to create a\nnew remote tracking branch \"foo/bar\", but the error message was\nconfusing.\n\n* jc/maint-reset (Wed Jun 25 18:16:36 2008 -0700) 1 commit\n + Allow \"git-reset path\" when unambiguous\n\nWe used to require \"git-reset -- path\" even when there is no ambiguity\n(i.e. path cannot be mistaken as a valid tree-ish and it is a filename in\nthe work tree).\n\n* js/maint-clone-insteadof (Fri Jun 27 13:56:05 2008 +0100) 1 commit\n . clone: respect url.insteadOf setting in global configs\n\n\"git clone\" does not honor \"url.InsteadOf\" in $HOME/.gitconfig; Daniel\nseems to have ideas for a better fix than this, but this is worth fixing\non 'maint'.\n\n* tr/send-email-ssl (Thu Jun 26 23:03:21 2008 +0200) 2 commits\n + git-send-email: prevent undefined variable warnings if no\n   encryption is set\n + git-send-email: add support for TLS via Net::SMTP::SSL\n\n* kb/send-email-fifo (Wed Jun 25 15:44:40 2008 -0700) 1 commit\n + git-send-email: Accept fifos as well as files\n\nTwo minor send-email feature enhancements for 1.6.0.\n\n* jc/checkdiff (Thu Jun 26 16:08:05 2008 -0700) 6 commits\n + Update sample pre-commit hook to use \"diff --check\"\n + diff --check: detect leftover conflict markers\n + Teach \"diff --check\" about new blank lines at end\n + checkdiff: pass diff_options to the callback\n + check_and_emit_line(): rename and refactor\n + diff --check: explain why we do not care whether old side is\n   binary\n\nAllows us to replace the sample pre-commit hook that was not aware of the\nline termination convention per path nor newer whitespace breakage rules.\n\n* np/pack-default (Wed Jun 25 00:25:53 2008 -0400) 2 commits\n + pack.indexversion config option now defaults to 2\n + repack.usedeltabaseoffset config option now defaults to \"true\"\n\nUpdates the default value for pack.indexversion to 2 and use delta-base\noffset encoding of the packfiles by default.\n\n* js/apply-recount (Fri Jun 27 18:43:09 2008 +0100) 1 commit\n + Allow git-apply to recount the lines in a hunk (AKA recountdiff)\n\nA good ingredient for implementing \"apply --edit\".\n\n* dz/apply-again (Fri Jun 27 14:39:12 2008 -0400) 1 commit\n + git-apply: handle a patch that touches the same path more than\n   once better\n\nAllows us to feed a patch that touches the same path more than once.\n\n* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits\n - Migrate git-blame to parse-option partially.\n - parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.\n - parse-opt: fake short strings for callers to believe in.\n - parse-opt: do not pring errors on unknown options, return -2\n   intead.\n - parse-opt: create parse_options_step.\n - parse-opt: Export a non NORETURN usage dumper.\n - parse-opt: have parse_options_{start,end}.\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* nd/dashless (Tue Jun 24 19:58:11 2008 -0700) 2 commits\n + Keep some git-* programs in $(bindir)\n + Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  We'll leave server-side programs in $(bindir) \nso that ssh clients can ask for \"git-program\" and find them on the $PATH.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 4 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n + Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n + git-shell: accept \"git foo\" form\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits\n - Make default expiration period of reflog used for stash infinite\n - Per-ref reflog expiry configuration\n\nAs 1.6.0 will be a good time to make backward incompatible changes, the\ntip commit makes the default expiry period of stash 'never', unless you\nconfigure them to expire explicitly using gc.refs/stash.* variables.\nNeeds consensus, but I am guessing that enough people would want stash\nthat does not expire.\n\n* jc/merge-theirs (Sat Jun 28 17:28:22 2008 -0700) 3 commits\n - Teach git-merge to pass -X<option> to the backend strategy module\n - git-merge-recursive-{ours,theirs}\n - git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -s recursive other\" now.\n\n* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits\n + compat/pread.c: Add a forward declaration to fix a warning\n + Windows: Fix ntohl() related warnings about printf formatting\n + Windows: TMP and TEMP environment variables specify a temporary\n   directory.\n + Windows: Make 'git help -a' work.\n + Windows: Work around an oddity when a pipe with no reader is\n   written to.\n + Windows: Make the pager work.\n + When installing, be prepared that template_dir may be relative.\n + Windows: Use a relative default template_dir and ETC_GITCONFIG\n + Windows: Compute the fallback for exec_path from the program\n   invocation.\n + Turn builtin_exec_path into a function.\n + Windows: Use a customized struct stat that also has the st_blocks\n   member.\n + Windows: Add a custom implementation for utime().\n + Windows: Add a new lstat and fstat implementation based on Win32\n   API.\n + Windows: Implement a custom spawnve().\n + Windows: Implement wrappers for gethostbyname(), socket(), and\n   connect().\n + Windows: Work around incompatible sort and find.\n + Windows: Implement asynchronous functions as threads.\n + Windows: Disambiguate DOS style paths from SSH URLs.\n + Windows: A rudimentary poll() emulation.\n + Windows: Implement start_command().\n + Windows: A pipe() replacement whose ends are not inherited to\n   children.\n + Windows: Wrap execve so that shell scripts can be invoked.\n + Windows: Implement setitimer() and sigaction().\n + Windows: Fix PRIuMAX definition.\n + Windows: Implement gettimeofday().\n + Make my_mktime() public and rename it to tm_to_time_t()\n + Windows: Work around misbehaved rename().\n + Windows: always chmod(, 0666) before unlink().\n + Windows: A minimal implemention of getpwuid().\n + Windows: Implement a wrapper of the open() function.\n + Windows: Strip \".exe\" from the program name.\n + Windows: Handle absolute paths in\n   safe_create_leading_directories().\n + Windows: Treat Windows style path names.\n + setup.c: Prepare for Windows directory separators.\n + Windows: Use the Windows style PATH separator ';'.\n + Add target architecture MinGW.\n + Compile some programs only conditionally.\n + Add compat/regex.[ch] and compat/fnmatch.[ch].\n\nNo explanation necessary ;-)\n\n* mv/merge-in-c (Sat Jun 28 04:38:19 2008 +0200) 13 commits\n - Build in merge\n - Add new test case to ensure git-merge prepends the custom merge\n   message\n - Add new test case to ensure git-merge reduces octopus parents when\n   possible\n - Introduce reduce_heads()\n - Introduce get_merge_bases_many()\n - Add new test to ensure git-merge handles more than 25 refs.\n - Introduce get_octopus_merge_bases() in commit.c\n - git-fmt-merge-msg: make it usable from other builtins\n - Move read_cache_unmerged() to read-cache.c\n - Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n - Move parse-options's skip_prefix() to git-compat-util.h\n - Move commit_list_count() to commit.c\n - Move split_cmdline() to alias.c\n\nThe last one is a huge patch and it will take some time to review and get\ndetails sorted out.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n + Eliminate an unnecessary chdir(\"..\")\n + Add support for GIT_CEILING_DIRECTORIES\n + Fold test-absolute-path into test-path-utils\n + Implement normalize_absolute_path\n\n* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits\n + rerere.autoupdate\n + t4200: fix rerere test\n + rerere: remove dubious \"tail_optimization\"\n + git-rerere: detect unparsable conflicts\n + rerere: rerere_created_at() and has_resolution() abstraction\n\nA new configuration will allow paths that have been resolved cleanly by\nrerere to be updated in the index automatically.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* sb/rebase (Sun Jun 22 01:55:50 2008 +0200) 2 commits\n + t3404: stricter tests for git-rebase--interactive\n + api-builtin.txt: update and fix typo\n\n* sb/maint-rebase (Sun Jun 22 16:07:02 2008 +0200) 1 commit\n + git-rebase.sh: Add check if rebase is in progress\n\n* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit\n + gitweb: standarize HTTP status codes\n\n* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits\n + Add config option to enable 'fsync()' of object files\n + Split up default \"i18n\" and \"branch\" config parsing into helper\n   routines\n + Split up default \"user\" config parsing into helper routine\n + Split up default \"core\" config parsing into helper routine\n\n* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits\n + Hook up the result aggregation in the test makefile.\n + A simple script to parse the results from the testcases\n + Modify test-lib.sh to output stats to t/test-results/*\n\n* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits\n + Teach \"git clone\" to pack refs\n + Prepare testsuite for a \"git clone\" that packs refs\n + Move pack_refs() and friends into libgit\n + Incorporate fetched packs in future object traversal\n\nThis is useful when cloning from a repository with insanely large number\nof refs.\n\n* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits\n + Git.pm: add test suite\n + t/test-lib.sh: add test_external and test_external_without_stderr\n\nBeginning of regression tests for Perl part of the system.\n\n----------------------------------------------------------------\n[On Hold]\n\n* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit\n + Remove the use of '--' in merge program invocation\n\nWaiting for success reports from people who use various backends.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n\n----------------------------------------------------------------\n[Dropped for now]\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n . Introduce fast forward option only\n . Head reduction before selecting merge strategy\n . Restructure git-merge.sh\n . Introduce -ff=<fast forward option>\n . New merge tests\n . Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C.\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n . Use perl instead of tac\n . Fix t3404 assumption that `wc -l` does not use whitespace.\n . rebase -i: Use : in expr command instead of match.\n . rebase -i: update the implementation of 'mark' command\n . Add option --preserve-tags\n . Teach rebase interactive the tag command\n . Add option --first-parent\n . Do rebase with preserve merges with advanced TODO list\n . Select all lines with fake-editor\n . Unify the length of $SHORT* and the commits in the TODO list\n . Teach rebase interactive the merge command\n . Move redo merge code in a function\n . Teach rebase interactive the reset command\n . Teach rebase interactive the mark command\n . Move cleanup code into it's own function\n . Don't append default merge message to -m message\n . fake-editor: output TODO list if unchanged\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n . WIP: rethink replay merge\n . Start using replay-tree merge in cherry-pick\n . revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n . git-am --forge: add Signed-off-by: line for the author\n . git-am: clean-up Signed-off-by: lines\n . stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n . stripspace: use parse_options()\n . Add \"git am -s\" test\n . git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n . \"git push\": tellme-more protocol extension\n"},{"id":"81630","messageId":"g47oc3$q1l$1@ger.gmane.org","threadId":"12603","inReplyTo":"7vwsk8d3q5.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Teach git-merge to pass -X<option> to the backend strategy module","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-06-29T10:32:36Z","receivedAt":"2008-06-29T10:32:36Z","isPatch":true,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Junio C Hamano wrote:\n\n> diff --git a/git-merge.sh b/git-merge.sh\n> index 39b5cd9..d475852 100755\n> --- a/git-merge.sh\n> +++ b/git-merge.sh\n> @@ -17,6 +17,7 @@ commit               perform a commit if the merge succeeds (default)\n>  ff                   allow fast forward (default)\n>  s,strategy=          merge strategy to use\n>  m,message=           message to be used for the merge commit (if any)\n> +X=                   pass merge strategy specific options\n>  \"\n\nYou have updated usage for git-merge, but didn't update manpages\n(Documentation).\n\n-- \nJakub Narebski\nWarsaw, Poland\nShadeHawk on #git\n"},{"id":"81655","messageId":"alpine.LFD.1.10.0806291127140.21402@hp.linux-foundation.org","threadId":"12603","inReplyTo":"7vod5kd3im.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Linus Torvalds","fromEmail":"torvalds@linux-foundation.org","sentAt":"2008-06-29T18:35:49Z","receivedAt":"2008-06-29T18:35:49Z","isPatch":false,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\n\nOn Sun, 29 Jun 2008, Junio C Hamano wrote:\n> \n>  * /usr/bin/git-cat-file is no more.  The bulk of the git commands will\n>    move to /usr/libexec/git-core/ or somesuch.\n\nEvery time I read this note I do a double-take.\n\nTo me, the first sentence means that 'cat-file' command is gone. Then, the \nsecond sentence is just gibberish. And since I understand what you _want_ \nto say, I then go back and parse it properly, and know that you don't \nactually mean that git-cat-file is removed, but that it's removed from \nbeing accessible under that name in the path.\n\nSo to avoid my double-take, and hopefully avoid confusion for other \npeople, can you please make your status report rephrase that thing.\n\nMaybe just say\n\n * Do not install all git subcommands as 'git-xyzzy' files in the user \n   path. This avoids unnecessary hardlinks (or copies on systems that do \n   not support links), and enforces the 'git xyzzy' syntax.\n\n   Subcommands that aren't builtins now get installed in\n   /usr/libexec/git-core/ or somesuch.\n\n(I haven't looked at the series, but I _assume_ it also avoids installing \nthe builtin subcommands entirely when not necessary, ie \"git-cat-file\" \nreally _is_ gone, but it's not because the \"cat-file\" command itself is \ngone).\n\nHmm? Or maybe it's just me who gets confused by the phrasing.\n\n\t\tLinus\n"},{"id":"81657","messageId":"7vhcbcawjt.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.LFD.1.10.0806291127140.21402@hp.linux-foundation.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-29T19:08:38Z","receivedAt":"2008-06-29T19:08:38Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Linus Torvalds <torvalds@linux-foundation.org> writes:\n\n> Maybe just say\n>\n>  * Do not install all git subcommands as 'git-xyzzy' files in the user \n>    path. This avoids unnecessary hardlinks (or copies on systems that do \n>    not support links), and enforces the 'git xyzzy' syntax.\n>\n>    Subcommands that aren't builtins now get installed in\n>    /usr/libexec/git-core/ or somesuch.\n\nThanks.\n\n> (I haven't looked at the series, but I _assume_ it also avoids installing \n> the builtin subcommands entirely when not necessary, ie \"git-cat-file\" \n> really _is_ gone, but it's not because the \"cat-file\" command itself is \n> gone).\n\nIt is actually a fairly long road ahead.\n\nIn 1.6.0, most of them will be moved to /usr/libexec/git-core/, so that\nreally old scripts end users may have can be more easily kept working by\nsimply saying:\n\n\tPATH=$(git --exec-path):$PATH\n\nearly, without doing \"s/git-/git /g\".\n\nCurrent git clients run git-upload-pack and friends in \"git-xyzzy\" form\nwhen accessing remote repositories directly over ssh, so in 1.6.0 we will\nhave to leave these server side programs in $(bindir) as well.\n\ngit-shell and gitosis is being updated to accept \"git upload-pack\" form as\nwell, and after older versions of these programs die out, we can update\nthe clients to ask for remote side programs without dash.\n\nNone of the server side programs is built-in, so we could start the\nhardlink removal independent from this transition (iow, \"Only subcommands\nthat aren't builtin will be installed in libexec, builtins are not on the\ndisk anywhere\" could happen now), but I'd prefer to keep changes in each\nsteps small to minimize impacts to the end users' environments.\n"},{"id":"81658","messageId":"7v63rsawj6.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"g47oc3$q1l$1@ger.gmane.org","subject":"Re: [PATCH] Teach git-merge to pass -X<option> to the backend strategy module","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-29T19:09:01Z","receivedAt":"2008-06-29T19:09:01Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jakub Narebski <jnareb@gmail.com> writes:\n\n> Junio C Hamano wrote:\n>\n>> diff --git a/git-merge.sh b/git-merge.sh\n>> index 39b5cd9..d475852 100755\n>> --- a/git-merge.sh\n>> +++ b/git-merge.sh\n>> @@ -17,6 +17,7 @@ commit               perform a commit if the merge succeeds (default)\n>>  ff                   allow fast forward (default)\n>>  s,strategy=          merge strategy to use\n>>  m,message=           message to be used for the merge commit (if any)\n>> +X=                   pass merge strategy specific options\n>>  \"\n>\n> You have updated usage for git-merge, but didn't update manpages\n> (Documentation).\n\nPatches welcome ;-)\n"},{"id":"81661","messageId":"7vk5g89f34.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.LFD.1.10.0806291127140.21402@hp.linux-foundation.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-29T20:11:11Z","receivedAt":"2008-06-29T20:11:11Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Linus Torvalds <torvalds@linux-foundation.org> writes:\n\n> To me, the first sentence means that 'cat-file' command is gone....\n\nHere is a replacement I am preparing, taken from the draft release notes\nto 1.6.0:\n\n * With the default Makefile settings, most of the programs will be\n   installed outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\n   some server side programs that need to be accessible for technical\n   reasons.  Invoking a git subcommand as \"git-xyzzy\" from the command\n   line has been deprecated since early 2006 (and officially announced in\n   1.5.4 release notes); use of them from your scripts after adding\n   output from \"git --exec-path\" to the $PATH will still be supported in\n   1.6.0, but users are again strongly encouraged to adjust their\n   scripts to use \"git xyzzy\" form, as we will stop installing\n   \"git-xyzzy\" hardlinks for built-in commands in later releases.\n"},{"id":"81663","messageId":"A87D312D-8B65-4D57-84AC-8FC07A27B937@ai.rug.nl","threadId":"12603","inReplyTo":"7vk5g89f34.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Pieter de Bie","fromEmail":"pdebie@ai.rug.nl","sentAt":"2008-06-29T20:15:00Z","receivedAt":"2008-06-29T20:15:00Z","isPatch":false,"sender":{"key":"pdebie@ai.rug.nl","avatar":null},"body":"\nOn 29 jun 2008, at 22:11, Junio C Hamano wrote:\n\n> use of them from your scripts after adding\n>   output from \"git --exec-path\" to the $PATH will still be supported  \n> in\n>   1.6.0, but users are again strongly encouraged to adjust their\n>   scripts to use \"git xyzzy\" form, as we will stop installing\n>   \"git-xyzzy\" hardlinks for built-in commands in later releases.\n\nI think msysgit doesn't (didn't?) install the hardlinks to conserve  \nspace,\nas Windows doesn't support hard links. Perhaps we should mention that\nas well?\n\n- Pieter\n"},{"id":"81677","messageId":"alpine.DEB.1.00.0806292256200.9925@racer","threadId":"12603","inReplyTo":"A87D312D-8B65-4D57-84AC-8FC07A27B937@ai.rug.nl","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-29T21:57:39Z","receivedAt":"2008-06-29T21:57:39Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 29 Jun 2008, Pieter de Bie wrote:\n\n> On 29 jun 2008, at 22:11, Junio C Hamano wrote:\n> \n> >  use of them from your scripts after adding output from \"git \n> >  --exec-path\" to the $PATH will still be supported in 1.6.0, but users \n> >  are again strongly encouraged to adjust their scripts to use \"git \n> >  xyzzy\" form, as we will stop installing \"git-xyzzy\" hardlinks for \n> >  built-in commands in later releases.\n> \n> I think msysgit doesn't (didn't?) install the hardlinks to conserve \n> space, as Windows doesn't support hard links.\n\nPlease do not spread FUD.  Where available, we install hardlinks.\n\nAnd even if we did not, given that we do not yet actively support MinGW, I \nthink your suggestion is a bit early, to say the least.\n\nCiao,\nDscho\n"},{"id":"81678","messageId":"A7BB2A8B-DBDB-477C-9A91-BADCCB6154FC@zib.de","threadId":"12603","inReplyTo":"A87D312D-8B65-4D57-84AC-8FC07A27B937@ai.rug.nl","subject":"Re: What's cooking in git.git (topics)","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-06-29T22:00:18Z","receivedAt":"2008-06-29T22:00:18Z","isPatch":false,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Jun 29, 2008, at 10:15 PM, Pieter de Bie wrote:\n\n>\n> On 29 jun 2008, at 22:11, Junio C Hamano wrote:\n>\n>> use of them from your scripts after adding\n>>  output from \"git --exec-path\" to the $PATH will still be supported  \n>> in\n>>  1.6.0, but users are again strongly encouraged to adjust their\n>>  scripts to use \"git xyzzy\" form, as we will stop installing\n>>  \"git-xyzzy\" hardlinks for built-in commands in later releases.\n>\n> I think msysgit doesn't (didn't?) install the hardlinks to conserve  \n> space,\n> as Windows doesn't support hard links. Perhaps we should mention that\n> as well?\n\nWindows does support hardlinks and msysgit uses them.\n\n\tSteffen\n"},{"id":"81706","messageId":"20080630033034.GB18930@sigill.intra.peff.net","threadId":"12603","inReplyTo":"7vod5kd3im.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2008-06-30T03:30:34Z","receivedAt":"2008-06-30T03:30:34Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Sun, Jun 29, 2008 at 01:55:13AM -0700, Junio C Hamano wrote:\n\n> * jk/maint-fetch-ref-hier (Thu Jun 26 23:59:50 2008 -0400) 1 commit\n>  + fetch: report local storage errors in status table\n> \n> When the remote used to have \"foo\" branch but now has \"foo/bar\", fetch\n> refuses to delete the existing remote tracking branch \"foo\" to create a\n> new remote tracking branch \"foo/bar\", but the error message was\n> confusing.\n\nWhere do we want to take this? The conversation went something like:\n\n   me: here's a patch where we hint about \"remote prune\"\n  you: why not just fix the refs, it's no worse than a rewind\n   me: we kill reflogs, so it is different than a rewind\n  you: oh, right\n\nSo I'm not sure if that was \"Oh, right, it's not a good idea to remove\nthe conflicting ref\" or \"Oh, right, but it's probably still fine.\"\n\n-Peff\n"},{"id":"81712","messageId":"7vwsk74hgr.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080630033034.GB18930@sigill.intra.peff.net","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-30T05:31:00Z","receivedAt":"2008-06-30T05:31:00Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n> On Sun, Jun 29, 2008 at 01:55:13AM -0700, Junio C Hamano wrote:\n>\n>> * jk/maint-fetch-ref-hier (Thu Jun 26 23:59:50 2008 -0400) 1 commit\n>>  + fetch: report local storage errors in status table\n>> \n>> When the remote used to have \"foo\" branch but now has \"foo/bar\", fetch\n>> refuses to delete the existing remote tracking branch \"foo\" to create a\n>> new remote tracking branch \"foo/bar\", but the error message was\n>> confusing.\n>\n> Where do we want to take this? The conversation went something like:\n>\n>    me: here's a patch where we hint about \"remote prune\"\n>   you: why not just fix the refs, it's no worse than a rewind\n>    me: we kill reflogs, so it is different than a rewind\n>   you: oh, right\n>\n> So I'm not sure if that was \"Oh, right, it's not a good idea to remove\n> the conflicting ref\" or \"Oh, right, but it's probably still fine.\"\n\nIt is \"Oh right, it is Ok.  Let's cook it in 'next', have it in 'master'\nand then backmerge to 'maint'\".\n"},{"id":"81713","messageId":"20080630053302.GA23786@sigill.intra.peff.net","threadId":"12603","inReplyTo":"7vwsk74hgr.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2008-06-30T05:33:02Z","receivedAt":"2008-06-30T05:33:02Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Sun, Jun 29, 2008 at 10:31:00PM -0700, Junio C Hamano wrote:\n\n> > Where do we want to take this? The conversation went something like:\n> >\n> >    me: here's a patch where we hint about \"remote prune\"\n> >   you: why not just fix the refs, it's no worse than a rewind\n> >    me: we kill reflogs, so it is different than a rewind\n> >   you: oh, right\n> >\n> > So I'm not sure if that was \"Oh, right, it's not a good idea to remove\n> > the conflicting ref\" or \"Oh, right, but it's probably still fine.\"\n> \n> It is \"Oh right, it is Ok.  Let's cook it in 'next', have it in 'master'\n> and then backmerge to 'maint'\".\n\nSorry if I'm being slow, but what is \"it\" here? The \"warning\" patch I\nsent, or a to-be-posted patch that deletes the conflicting ref?\n\n-Peff\n"},{"id":"81714","messageId":"7vskuv4h4h.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080630053302.GA23786@sigill.intra.peff.net","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-30T05:38:22Z","receivedAt":"2008-06-30T05:38:22Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n> On Sun, Jun 29, 2008 at 10:31:00PM -0700, Junio C Hamano wrote:\n>\n>> > Where do we want to take this? The conversation went something like:\n>> >\n>> >    me: here's a patch where we hint about \"remote prune\"\n>> >   you: why not just fix the refs, it's no worse than a rewind\n>> >    me: we kill reflogs, so it is different than a rewind\n>> >   you: oh, right\n>> >\n>> > So I'm not sure if that was \"Oh, right, it's not a good idea to remove\n>> > the conflicting ref\" or \"Oh, right, but it's probably still fine.\"\n>> \n>> It is \"Oh right, it is Ok.  Let's cook it in 'next', have it in 'master'\n>> and then backmerge to 'maint'\".\n>\n> Sorry if I'm being slow, but what is \"it\" here? The \"warning\" patch I\n> sent, or a to-be-posted patch that deletes the conflicting ref?\n\nSorry, my fingers outpaced my brain and gave you gibberish.\n\n\tOh right, we should hint about \"remote prune\" and stop there, at\n\tleast for now, as it is not nice to just delete the refs and lose\n\ttheir reflogs without user's consent.\n"},{"id":"81732","messageId":"7v3amv1e8n.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vod5kd3im.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-30T09:08:56Z","receivedAt":"2008-06-30T09:08:56Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be applied to the maintenance series have \"maint-\" in their\nnames.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  Bigger changes will be:\n\n * MinGW will be in.\n\n * With the default Makefile settings, most of the programs will be\n   installed outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\n   some server side programs that need to be accessible for technical\n   reasons.  Invoking a git subcommand as \"git-xyzzy\" from the command\n   line has been deprecated since early 2006 (and officially announced in\n   1.5.4 release notes); use of them from your scripts after adding\n   output from \"git --exec-path\" to the $PATH will still be supported in\n   1.6.0, but users are again strongly encouraged to adjust their\n   scripts to use \"git xyzzy\" form, as we will stop installing\n   \"git-xyzzy\" hardlinks for built-in commands in later releases.\n\n * git-merge will be rewritten in C.\n\n * default pack and idx versions will be updated as scheduled for some\n   time ago.\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* nd/dashless (Tue Jun 24 19:58:11 2008 -0700) 2 commits\n + Keep some git-* programs in $(bindir)\n + Move all dashed-form commands to libexecdir\n\nScheduled for 1.6.0.  We'll leave server-side programs in $(bindir) so\nthat ssh clients can ask for \"git-program\" and find them on the $PATH.\nNext major release after 1.6.0 would most likely remove the hardlinks to\nbuilt-in commands, but not yet.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 4 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n + Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n + git-shell: accept \"git foo\" form\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* jk/maint-fetch-ref-hier (Fri Jun 27 00:01:41 2008 -0400) 2 commits\n + fetch: give a hint to the user when local refs fail to update\n + fetch: report local storage errors in status table\n\nWhen the remote used to have \"foo\" branch but now has \"foo/bar\", fetch\nrefuses to delete the existing remote tracking branch \"foo\" to create a\nnew remote tracking branch \"foo/bar\", but the error message was\nconfusing.\n\n* jc/maint-reset (Wed Jun 25 18:16:36 2008 -0700) 1 commit\n + Allow \"git-reset path\" when unambiguous\n\nWe used to require \"git-reset -- path\" even when there is no ambiguity\n(i.e. path cannot be mistaken as a valid tree-ish and it is a filename in\nthe work tree).\n\n* js/maint-clone-insteadof (Fri Jun 27 13:55:23 2008 +0100) 2 commits\n + clone: respect the settings in $HOME/.gitconfig and /etc/gitconfig\n + clone: respect url.insteadOf setting in global configs\n\n\"git clone\" did not honor \"url.InsteadOf\" in $HOME/.gitconfig.  I think\nDaniel's \"Let's get rid of internal use of GIT_CONFIG\" makes sense (even\nthough it feels very scary), and it would make the solution much simpler,\nbut it came late and it is already past my bedtime, so...\n\n* tr/send-email-ssl (Thu Jun 26 23:03:21 2008 +0200) 2 commits\n + git-send-email: prevent undefined variable warnings if no\n   encryption is set\n + git-send-email: add support for TLS via Net::SMTP::SSL\n\n* kb/send-email-fifo (Wed Jun 25 15:44:40 2008 -0700) 1 commit\n + git-send-email: Accept fifos as well as files\n\nTwo minor send-email feature enhancements for 1.6.0.\n\n* jc/checkdiff (Sun Jun 29 16:49:06 2008 -0400) 7 commits\n + Fix t4017-diff-retval for white-space from wc\n + Update sample pre-commit hook to use \"diff --check\"\n + diff --check: detect leftover conflict markers\n + Teach \"diff --check\" about new blank lines at end\n + checkdiff: pass diff_options to the callback\n + check_and_emit_line(): rename and refactor\n + diff --check: explain why we do not care whether old side is\n   binary\n\nAllows us to replace the sample pre-commit hook that was not aware of the\nline termination convention per path nor newer whitespace breakage rules.\n\n* np/pack-default (Wed Jun 25 00:25:53 2008 -0400) 2 commits\n + pack.indexversion config option now defaults to 2\n + repack.usedeltabaseoffset config option now defaults to \"true\"\n\nUpdates the default value for pack.indexversion to 2 and use delta-base\noffset encoding of the packfiles by default.\n\n* js/apply-recount (Fri Jun 27 18:43:09 2008 +0100) 1 commit\n + Allow git-apply to recount the lines in a hunk (AKA recountdiff)\n\nA good ingredient for implementing \"apply --edit\".\n\n* dz/apply-again (Fri Jun 27 14:39:12 2008 -0400) 1 commit\n + git-apply: handle a patch that touches the same path more than\n   once better\n\nAllows us to feed a patch that touches the same path more than once.\n\n* jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits\n - Make default expiration period of reflog used for stash infinite\n - Per-ref reflog expiry configuration\n\nAs 1.6.0 will be a good time to make backward incompatible changes, the\ntip commit makes the default expiry period of stash 'never', unless you\nconfigure them to expire explicitly using gc.refs/stash.* variables.\nNeeds consensus, but I am guessing that enough people would want stash\nthat does not expire.\n\n* jc/merge-theirs (Sat Jun 28 17:28:22 2008 -0700) 3 commits\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -s recursive other\" now.\n\n* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits\n + compat/pread.c: Add a forward declaration to fix a warning\n + Windows: Fix ntohl() related warnings about printf formatting\n + Windows: TMP and TEMP environment variables specify a temporary\n   directory.\n + Windows: Make 'git help -a' work.\n + Windows: Work around an oddity when a pipe with no reader is\n   written to.\n + Windows: Make the pager work.\n + When installing, be prepared that template_dir may be relative.\n + Windows: Use a relative default template_dir and ETC_GITCONFIG\n + Windows: Compute the fallback for exec_path from the program\n   invocation.\n + Turn builtin_exec_path into a function.\n + Windows: Use a customized struct stat that also has the st_blocks\n   member.\n + Windows: Add a custom implementation for utime().\n + Windows: Add a new lstat and fstat implementation based on Win32\n   API.\n + Windows: Implement a custom spawnve().\n + Windows: Implement wrappers for gethostbyname(), socket(), and\n   connect().\n + Windows: Work around incompatible sort and find.\n + Windows: Implement asynchronous functions as threads.\n + Windows: Disambiguate DOS style paths from SSH URLs.\n + Windows: A rudimentary poll() emulation.\n + Windows: Implement start_command().\n + Windows: A pipe() replacement whose ends are not inherited to\n   children.\n + Windows: Wrap execve so that shell scripts can be invoked.\n + Windows: Implement setitimer() and sigaction().\n + Windows: Fix PRIuMAX definition.\n + Windows: Implement gettimeofday().\n + Make my_mktime() public and rename it to tm_to_time_t()\n + Windows: Work around misbehaved rename().\n + Windows: always chmod(, 0666) before unlink().\n + Windows: A minimal implemention of getpwuid().\n + Windows: Implement a wrapper of the open() function.\n + Windows: Strip \".exe\" from the program name.\n + Windows: Handle absolute paths in\n   safe_create_leading_directories().\n + Windows: Treat Windows style path names.\n + setup.c: Prepare for Windows directory separators.\n + Windows: Use the Windows style PATH separator ';'.\n + Add target architecture MinGW.\n + Compile some programs only conditionally.\n + Add compat/regex.[ch] and compat/fnmatch.[ch].\n\nNo explanation necessary ;-)\n\n* mv/merge-in-c (Mon Jun 30 03:39:58 2008 +0200) 13 commits\n - Build in merge\n - Add new test case to ensure git-merge prepends the custom merge\n   message\n - Add new test case to ensure git-merge reduces octopus parents when\n   possible\n - Introduce reduce_heads()\n - Introduce get_merge_bases_many()\n - Add new test to ensure git-merge handles more than 25 refs.\n - Introduce get_octopus_merge_bases() in commit.c\n - git-fmt-merge-msg: make it usable from other builtins\n - Move read_cache_unmerged() to read-cache.c\n - Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n - Move parse-options's skip_prefix() to git-compat-util.h\n - Move commit_list_count() to commit.c\n - Move split_cmdline() to alias.c\n\nThe last one is still in flux.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n + Eliminate an unnecessary chdir(\"..\")\n + Add support for GIT_CEILING_DIRECTORIES\n + Fold test-absolute-path into test-path-utils\n + Implement normalize_absolute_path\n\n* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits\n + rerere.autoupdate\n + t4200: fix rerere test\n + rerere: remove dubious \"tail_optimization\"\n + git-rerere: detect unparsable conflicts\n + rerere: rerere_created_at() and has_resolution() abstraction\n\nA new configuration will allow paths that have been resolved cleanly by\nrerere to be updated in the index automatically.\n\n* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits\n - Migrate git-blame to parse-option partially.\n - parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.\n - parse-opt: fake short strings for callers to believe in.\n - parse-opt: do not pring errors on unknown options, return -2\n   intead.\n - parse-opt: create parse_options_step.\n - parse-opt: Export a non NORETURN usage dumper.\n - parse-opt: have parse_options_{start,end}.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n----------------------------------------------------------------\n[On Hold]\n\n* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit\n + Remove the use of '--' in merge program invocation\n\nWaiting for success reports from people who use various backends.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n\n----------------------------------------------------------------\n[Dropped for now]\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n . Introduce fast forward option only\n . Head reduction before selecting merge strategy\n . Restructure git-merge.sh\n . Introduce -ff=<fast forward option>\n . New merge tests\n . Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C.\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n . Use perl instead of tac\n . Fix t3404 assumption that `wc -l` does not use whitespace.\n . rebase -i: Use : in expr command instead of match.\n . rebase -i: update the implementation of 'mark' command\n . Add option --preserve-tags\n . Teach rebase interactive the tag command\n . Add option --first-parent\n . Do rebase with preserve merges with advanced TODO list\n . Select all lines with fake-editor\n . Unify the length of $SHORT* and the commits in the TODO list\n . Teach rebase interactive the merge command\n . Move redo merge code in a function\n . Teach rebase interactive the reset command\n . Teach rebase interactive the mark command\n . Move cleanup code into it's own function\n . Don't append default merge message to -m message\n . fake-editor: output TODO list if unchanged\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n . WIP: rethink replay merge\n . Start using replay-tree merge in cherry-pick\n . revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n . git-am --forge: add Signed-off-by: line for the author\n . git-am: clean-up Signed-off-by: lines\n . stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n . stripspace: use parse_options()\n . Add \"git am -s\" test\n . git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n . \"git push\": tellme-more protocol extension\n"},{"id":"81743","messageId":"4CE52307-A2DE-488B-998B-76D60B66E804@zib.de","threadId":"12603","inReplyTo":"7v3amv1e8n.fsf@gitster.siamese.dyndns.org","subject":"How to reduce remaining differences to 4msysgit? (was What's cooking in git.git (topics))","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-06-30T11:19:57Z","receivedAt":"2008-06-30T11:19:57Z","isPatch":false,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Jun 30, 2008, at 11:08 AM, Junio C Hamano wrote:\n\n> * MinGW will be in.\n\n\nIf this is done, we should be able to create the msysgit release  \ndirectly\nfrom Junio's master.  Hannes changes alone, however, are not sufficient,\nbecause some commits have been parked in 4msysgit.  Now that MinGW is\non Junio's next and Junio's next is also on 4msysgit's next, it it easy\nto see how much is left to do by running:\n\n    git diff --stat junio/next..4msysgit/next\n\njunio is a remote pointing to git://git.kernel.org/pub/scm/git/git.git.\n4msysgit is a remote pointing to git://repo.or.cz/git/mingw/ \n4msysgit.git.\nI attached the output below.\n\nHow should we proceed to get rid of the differences?\n\nShould we prepare and send patches directly to the official git list  \nnow?\nShould we wait until the first MinGW branch is on master?\nShould we prepare a whole patch series?  Maybe Hannes would maintain  \nthis\npatch series.\n\nI have not yet looked at the remaining differences in detail.  I expect\nmost of them to be trivial.  But some might require discussion on the\nlist, so at some point we should send the patches to the official list.\n\n\tSteffen\n\n\n$ git diff --stat junio/next..4msysgit/next\n  Makefile                               |   23 ++-\n  README.MinGW                           |   77 ++++++++\n  RelNotes                               |    1 -\n  builtin-fetch-pack.c                   |    3 +-\n  builtin-tag.c                          |   14 ++\n  builtin-verify-tag.c                   |    2 +\n  cache.h                                |    2 +\n  check-builtins.sh                      |    2 +-\n  compat/mingw.c                         |    4 +-\n  compat/winansi.c                       |  309 +++++++++++++++++++++++ \n+++++++++\n  connect.c                              |    5 +-\n  convert.c                              |    4 +\n  fast-import.c                          |    2 +\n  git-add--interactive.perl              |    2 +-\n  git-compat-util.h                      |    7 +\n  git-parse-remote.sh                    |    3 +-\n  gitk-git/Makefile                      |    4 +\n  gitk-git/gitk                          |    2 +\n  help.c                                 |   30 +++-\n  path.c                                 |   13 ++\n  read-cache.c                           |    5 +\n  setup.c                                |    7 +-\n  t/t0000-basic.sh                       |   31 +++-\n  t/t0001-init.sh                        |    2 +-\n  t/t0004-unwritable.sh                  |    7 +\n  t/t1002-read-tree-m-u-2way.sh          |    6 +\n  t/t1003-read-tree-prefix.sh            |    4 +\n  t/t1004-read-tree-m-u-wf.sh            |    2 +\n  t/t1300-repo-config.sh                 |    1 +\n  t/t1301-shared-repo.sh                 |    4 +\n  t/t2001-checkout-cache-clash.sh        |    2 +\n  t/t2003-checkout-cache-mkdir.sh        |    4 +\n  t/t2004-checkout-cache-temp.sh         |    2 +\n  t/t2007-checkout-symlink.sh            |    7 +\n  t/t2100-update-cache-badpath.sh        |    2 +\n  t/t2201-add-update-typechange.sh       |   11 +-\n  t/t3000-ls-files-others.sh             |    1 +\n  t/t3010-ls-files-killed-modified.sh    |    7 +\n  t/t3100-ls-tree-restrict.sh            |   12 ++\n  t/t3200-branch.sh                      |    2 +\n  t/t3700-add.sh                         |   10 +\n  t/t3901-i18n-patch.sh                  |    4 +\n  t/t3903-stash.sh                       |   12 +-\n  t/t4004-diff-rename-symlink.sh         |    7 +\n  t/t4008-diff-break-rewrite.sh          |    4 +\n  t/t4011-diff-symlink.sh                |    7 +\n  t/t4023-diff-rename-typechange.sh      |    5 +\n  t/t4109-apply-multifrag.sh             |    4 +\n  t/t4110-apply-scan.sh                  |    4 +\n  t/t4114-apply-typechange.sh            |    5 +\n  t/t4115-apply-symlink.sh               |    7 +\n  t/t4116-apply-reverse.sh               |    3 +-\n  t/t4122-apply-symlink-inside.sh        |    7 +\n  t/t4150-am.sh                          |    6 +-\n  t/t5000-tar-tree.sh                    |    7 +\n  t/t5300-pack-object.sh                 |   62 +++----\n  t/t5502-quickfetch.sh                  |    3 +\n  t/t5503-tagfollow.sh                   |   25 +++-\n  t/t5505-remote.sh                      |    3 +\n  t/t5511-refspec.sh                     |   11 +-\n  t/t5512-ls-remote.sh                   |    3 +\n  t/t5520-pull.sh                        |    1 +\n  t/t5530-upload-pack-error.sh           |    1 +\n  t/t7004-tag.sh                         |    5 +-\n  t/t7005-editor.sh                      |    1 +\n  t/t7201-co.sh                          |    6 +-\n  t/t7401-submodule-summary.sh           |   30 ++--\n  t/t7501-commit.sh                      |    1 +\n  t/t7502-status.sh                      |    4 +\n  t/t7503-pre-commit-hook.sh             |    6 +\n  t/t7504-commit-msg-hook.sh             |    6 +\n  t/t9001-send-email.sh                  |    4 +\n  t/t9200-git-cvsexportcommit.sh         |    4 +\n  t/t9500-gitweb-standalone-no-errors.sh |    3 +\n  t/test-lib.sh                          |   17 ++\n  templates/Makefile                     |    3 +\n  utf8.c                                 |    7 +\n  utf8.h                                 |    4 -\n  78 files changed, 844 insertions(+), 86 deletions(-)\n"},{"id":"81751","messageId":"1214834970.3382.4.camel@gaara.bos.redhat.com","threadId":"12603","inReplyTo":"7v3amv1e8n.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Kristian Høgsberg","fromEmail":"krh@redhat.com","sentAt":"2008-06-30T14:09:30Z","receivedAt":"2008-06-30T14:09:30Z","isPatch":false,"sender":{"key":"krh@redhat.com","avatar":"https://gravatar.com/avatar/763dee6f9594ac474f725b137a39565792928e583ddf59b32befc2907409027e?d=mp&s=160"},"body":"On Mon, 2008-06-30 at 02:08 -0700, Junio C Hamano wrote:\n> Here are the topics that have been cooking.  Commits prefixed\n> with '-' are only in 'pu' while commits prefixed with '+' are\n> in 'next'.\n> \n> The topics list the commits in reverse chronological order.  The topics\n> meant to be applied to the maintenance series have \"maint-\" in their\n> names.\n> \n> It already is beginning to become clear what 1.6.0 will look like.  What's\n> already in 'next' all are well intentioned (I do not guarantee they are\n> already bug-free --- that is what cooking them in 'next' is for) and are\n> good set of feature enhancements.  Bigger changes will be:\n> \n>  * MinGW will be in.\n> \n>  * With the default Makefile settings, most of the programs will be\n>    installed outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\n>    some server side programs that need to be accessible for technical\n>    reasons.  Invoking a git subcommand as \"git-xyzzy\" from the command\n>    line has been deprecated since early 2006 (and officially announced in\n>    1.5.4 release notes); use of them from your scripts after adding\n>    output from \"git --exec-path\" to the $PATH will still be supported in\n>    1.6.0, but users are again strongly encouraged to adjust their\n>    scripts to use \"git xyzzy\" form, as we will stop installing\n>    \"git-xyzzy\" hardlinks for built-in commands in later releases.\n> \n>  * git-merge will be rewritten in C.\n> \n>  * default pack and idx versions will be updated as scheduled for some\n>    time ago.\n\nA small detail I've suggested scheduling for 1.6 before is removing (or\nrather, stop creating) the empty .git/branches directory.  How does that\nsound?\n\ncheers,\nKristian\n"},{"id":"81752","messageId":"xCkJI0rKxLV-jlgYn3-ZPYZEIcBEelr7sxrGfR0wLKe2kpfIDU6Pcg@cipher.nrlssc.navy.mil","threadId":"12603","inReplyTo":"7vod5kd3im.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Brandon Casey","fromEmail":"casey@nrlssc.navy.mil","sentAt":"2008-06-30T14:59:18Z","receivedAt":"2008-06-30T14:59:18Z","isPatch":false,"sender":{"key":"drafnel@gmail.com","avatar":"https://avatars.githubusercontent.com/u/921167?v=4"},"body":"Junio C Hamano wrote:\n\n> * jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits\n>  - Make default expiration period of reflog used for stash infinite\n>  - Per-ref reflog expiry configuration\n\nThanks.\n\n-brandon\n"},{"id":"81754","messageId":"m3myl2hq45.fsf@localhost.localdomain","threadId":"12603","inReplyTo":"1214834970.3382.4.camel@gaara.bos.redhat.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-06-30T15:58:07Z","receivedAt":"2008-06-30T15:58:07Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Kristian Høgsberg <krh@redhat.com> writes:\n\n> \n> A small detail I've suggested scheduling for 1.6 before is removing (or\n> rather, stop creating) the empty .git/branches directory.  How does that\n> sound?\n\nPerhaps also stop creating .git/description (remove\n'templates/this--description' file), now that it is mentioned in\ngitweb/README and/or gitweb/INSTALL?\n\n(Do you want a patch?)\n-- \nJakub Narebski\nPoland\nShadeHawk on #git\n"},{"id":"81766","messageId":"200806302047.56935.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"4CE52307-A2DE-488B-998B-76D60B66E804@zib.de","subject":"Re: [msysGit] How to reduce remaining differences to 4msysgit? (was What's cooking in git.git (topics))","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-06-30T18:47:56Z","receivedAt":"2008-06-30T18:47:56Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"On Montag, 30. Juni 2008, Steffen Prohaska wrote:\n> On Jun 30, 2008, at 11:08 AM, Junio C Hamano wrote:\n> > * MinGW will be in.\n>\n> If this is done, we should be able to create the msysgit release\n> directly\n> from Junio's master.  Hannes changes alone, however, are not sufficient,\n> because some commits have been parked in 4msysgit.  Now that MinGW is\n> on Junio's next and Junio's next is also on 4msysgit's next, it it easy\n> to see how much is left to do by running:\n>\n>     git diff --stat junio/next..4msysgit/next\n>\n> junio is a remote pointing to git://git.kernel.org/pub/scm/git/git.git.\n> 4msysgit is a remote pointing to git://repo.or.cz/git/mingw/\n> 4msysgit.git.\n> I attached the output below.\n>\n> How should we proceed to get rid of the differences?\n>\n> Should we prepare and send patches directly to the official git list\n> now?\n> Should we wait until the first MinGW branch is on master?\n> Should we prepare a whole patch series?  Maybe Hannes would maintain\n> this\n> patch series.\n\nUntil 1.6.0 is released, a number of _required_ patches will have to be \nincluded. There are two sorts of them:\n\n* Patches that touch generic code, like replacing c == '/' by is_dir_sep(c).\n\n* Patches that are purly Windows specific.\n\nThe former I intend to submit to the mailing list directly and as soon as \npossible (but if I can intervene on newly submitted patches early so that a \nfixup is not even necessary, then even better). The latter I intend to \ncollect in a branch and submit as a batch. Let's see how this works out.\n\nThen there are the extra patches in 4msysgit. From my POV, they are not \n_required_ because I can appearently work with git on Windows without them. I \nthink some of them are not necessary. Can we go through them again?\n\nAnd then there are the patches to the t/ directory. I do not target them for \n1.6.0, but I do want to prepare another series with them.\n\n-- Hannes\n"},{"id":"81783","messageId":"7vhcbavabp.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"m3myl2hq45.fsf@localhost.localdomain","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-30T22:15:22Z","receivedAt":"2008-06-30T22:15:22Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jakub Narebski <jnareb@gmail.com> writes:\n\n> Kristian Høgsberg <krh@redhat.com> writes:\n>\n>> \n>> A small detail I've suggested scheduling for 1.6 before is removing (or\n>> rather, stop creating) the empty .git/branches directory.  How does that\n>> sound?\n>\n> Perhaps also stop creating .git/description (remove\n> 'templates/this--description' file), now that it is mentioned in\n> gitweb/README and/or gitweb/INSTALL?\n>\n> (Do you want a patch?)\n\nNot yet.  I would first like to see a justification that makes sense.\n\nI do not see much connection between your mentioning the file in README\nand the file's removal.  You currently say \"By default it is set to ...\"\nand you would have to change it to \"By default it does not exist so you\nhave to create one\".  Does it have much difference?  Either way the user\nneeds to open the file with the editor and edit it, and the current file\nat least says \"Please edit me\".  I am not sure if removal is an\nimprovement.\n\nThe sample templates/hooks--update.sample seems to check if the contents\nof the description file makes sense, without even checking if it exists.\nThat also needs to be updated.\n\nActually, the sample hook should be updated independent of this issue.\nI'd suggest to simply remove the check from the sample hook.  Setting\ndescription and installing the hook is part of the initial public\nrepository deployment task, and once the description is set, the hook does\nnot have to check it over and over again.  Allowing arrival of new commits\nwhile the description is not set won't hurt anything (somebody would\nnotice and tell \"please set a better description\" to the repository owner,\nand doing so at that point will fix things without anybody having to redo\nany old pushes), and forbidding push from the hook for lack of description\ndoes not make any sense.\n"},{"id":"81784","messageId":"7vabh2vaav.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214834970.3382.4.camel@gaara.bos.redhat.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-06-30T22:15:52Z","receivedAt":"2008-06-30T22:15:52Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Kristian Høgsberg <krh@redhat.com> writes:\n\n> On Mon, 2008-06-30 at 02:08 -0700, Junio C Hamano wrote:\n> ...\n>> It already is beginning to become clear what 1.6.0 will look like.  What's\n>> already in 'next' all are well intentioned (I do not guarantee they are\n>> already bug-free --- that is what cooking them in 'next' is for) and are\n>> good set of feature enhancements.  Bigger changes will be:\n> ...\n> A small detail I've suggested scheduling for 1.6 before is removing (or\n> rather, stop creating) the empty .git/branches directory.  How does that\n> sound?\n\nWhat's the benefit of the removal that outweighs the downside?  I can\nimagine two contradicting voices from new end users.\n\n (1) With current git, I ran \"git init\" and I have an empty\n     .git/branches/, but my remote information created with \"git clone\"\n     and \"git remote add\" all go to .git/config these days.  Why do I have\n     to have this empty directory that I do not use?\n\n (2) It is documented that \"git fetch\" can use files in .git/branches/ as\n     the source specification, but when I ran \"git init\", it does not\n     create the directory with Kristian's git. I need to do an extra\n     \"mkdir .git/branches/\" myself.  Why?\n\nYou are obviously coming from the former camp, but do you have a good\nanswer to people from the other camp?\n\nI do not recall if Cogito required to have .git/branches created by us or\nit can create it on demand if we don't.  If the latter, that would be\ngreat, otherwise remaining users would be in the latter camp as well, and\nwe may have to make sure Cogito is really dead already (or wait for it to\ndie), or Cogito gets updated for its remaining users to tolerate the\ninitial lack of the directory (and wait for that version percolates down\nto the users).\n\nSome people rely on (or at least \"like\") the convenience of being able to\ncreate a single-liner file in .git/branches/ to easily add, and remove\nsuch a file to easily remove where they integrate from.  This is\nespecially so when they have dozens of source repositories to fetch from.\nI do not think we want to remove support for .git/branches as a way to\nspecify fetch sources (this is why I am CC'ing Andrew who I know uses\nbranches, and Stephen who is also a heavy integrator even though I do not\nknow if he is in branches camp or uses more modern style), but they now\nhave to do an extra \"mkdir .git/branches\" after \"git init\" to continue\ntheir workflow if we adopt the change you are proposing here.  It is not a\nbig deal, but it still is a backward incompatible change.\n"},{"id":"81796","messageId":"20080630155147.009a24b7.akpm@linux-foundation.org","threadId":"12603","inReplyTo":"7vabh2vaav.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Andrew Morton","fromEmail":"akpm@linux-foundation.org","sentAt":"2008-06-30T22:51:47Z","receivedAt":"2008-06-30T22:51:47Z","isPatch":false,"sender":{"key":"akpm@linux-foundation.org","avatar":null},"body":"On Mon, 30 Jun 2008 15:15:52 -0700\nJunio C Hamano <gitster@pobox.com> wrote:\n\n> Some people rely on (or at least \"like\") the convenience of being able to\n> create a single-liner file in .git/branches/ to easily add, and remove\n> such a file to easily remove where they integrate from.  This is\n> especially so when they have dozens of source repositories to fetch from.\n> I do not think we want to remove support for .git/branches as a way to\n> specify fetch sources (this is why I am CC'ing Andrew who I know uses\n> branches, and Stephen who is also a heavy integrator even though I do not\n> know if he is in branches camp or uses more modern style), but they now\n> have to do an extra \"mkdir .git/branches\" after \"git init\" to continue\n> their workflow if we adopt the change you are proposing here.  It is not a\n> big deal, but it still is a backward incompatible change.\n\nI do find the more compact format of .git/branches/git-foo to be\nconvenient.  For example, my scripts go looking in there for the URL\nand add that to the patch changelog so that people can reconstruct -mm's\ngit-foo.patch from the relevant git tree.\n\nThat being said,\n\n- It wouldn't bother me to have to type `mkdir .git/branches' after\n  `git init'!\n\n- It's bad to have the same info in two places, and to have to\n  support two different ways of doing the same thing for ever.  So I\n  could understand a wish to remove .git/branches/ support completely. \n  I'll cope :)\n\n  For me the biggest part of migrating would be working out what on\n  earth the format of the new files is.  Maybe it's documented\n  somewhere undiscoverable, dunno.\n"},{"id":"81797","messageId":"20080630225344.GB12564@machine.or.cz","threadId":"12603","inReplyTo":"7vabh2vaav.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-06-30T22:53:44Z","receivedAt":"2008-06-30T22:53:44Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"On Mon, Jun 30, 2008 at 03:15:52PM -0700, Junio C Hamano wrote:\n> I do not recall if Cogito required to have .git/branches created by us or\n> it can create it on demand if we don't.  If the latter, that would be\n> great, otherwise remaining users would be in the latter camp as well, and\n> we may have to make sure Cogito is really dead already (or wait for it to\n> die), or Cogito gets updated for its remaining users to tolerate the\n> initial lack of the directory (and wait for that version percolates down\n> to the users).\n\nCogito is getting somewhat broken by removing of the git- plumbing from\n$PATH anyway (you have to hack around it; and I'm not saying it's bad\nthing).\n\nBut it is actually quite resilient against this kind of stuff (as it was\nconstructed to be able to run on very rudimental repositories dating\nearly to the dawn of time). All versions supporting .git/branches [*] will\nautocreate the .git/branches directory if missing.\n\n[*] .git/branches was actually called .git/remotes even earlier; yay,\nhow rich our history is. ;-)\n\n> Some people rely on (or at least \"like\") the convenience of being able to\n> create a single-liner file in .git/branches/ to easily add, and remove\n> such a file to easily remove where they integrate from.  This is\n> especially so when they have dozens of source repositories to fetch from.\n> I do not think we want to remove support for .git/branches as a way to\n> specify fetch sources (this is why I am CC'ing Andrew who I know uses\n> branches, and Stephen who is also a heavy integrator even though I do not\n> know if he is in branches camp or uses more modern style), but they now\n> have to do an extra \"mkdir .git/branches\" after \"git init\" to continue\n> their workflow if we adopt the change you are proposing here.  It is not a\n> big deal, but it still is a backward incompatible change.\n\nNow, I think it would be nice to keep backward compatibility here. I'm\nstill _regularly_ running into people who still use Cogito (and it's not\nbecause they know me :-)) and are only now doing the switch, or only\nplanning to yet.\n\n(On the other hand, using Git on repositories created by old Git\nversions or Cogito can be quite a confusing experience for non-expert\nusers - things related to remote repositories behave differently to what\nthe documentation describes, obviously.  Maybe it _would_ be reasonable\noption to do something radical when hitting old repository, like\n\"(Re-)clone me for non-confusing user experience, pretty please, or\ngit-config force_old_repo 1 if you know what are you doing.\")\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nThe last good thing written in C++ was the Pachelbel Canon. -- J. Olson\n"},{"id":"81800","messageId":"alpine.DEB.1.00.0807010007010.9925@racer","threadId":"12603","inReplyTo":"20080630155147.009a24b7.akpm@linux-foundation.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-06-30T23:09:15Z","receivedAt":"2008-06-30T23:09:15Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 30 Jun 2008, Andrew Morton wrote:\n\n> - It's bad to have the same info in two places, and to have to\n>   support two different ways of doing the same thing for ever.\n\nIt is actually worse: we have three places.\n\n>   For me the biggest part of migrating would be working out what on\n>   earth the format of the new files is.  Maybe it's documented\n>   somewhere undiscoverable, dunno.\n\nThe easiest way is to\n\n\tgit config remote.$NICKNAME.url $URL\n\nwhere you said\n\n\techo $URL > .git/branches/$NICKNAME\n\nActually, you might even like this command better:\n\n\tgit remote add $NICKNAME $URL\n\nMany ways to go to Rome,\nDscho\n"},{"id":"81808","messageId":"4869700C.6060803@free.fr","threadId":"12603","inReplyTo":"7v3amweiaz.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Make default expiration period of reflog used for stash infinite","fromName":"Olivier Marin","fromEmail":"dkr+ml.git@free.fr","sentAt":"2008-06-30T23:45:16Z","receivedAt":"2008-06-30T23:45:16Z","isPatch":true,"sender":{"key":"dkr+ml.git@free.fr","avatar":null},"body":"Junio C Hamano a écrit :\n> This makes the default expiration period for the reflog that implements\n> stash infinite.\n\nI did not read the whole thread so maybe I missed something but I though you\nwanted to apply Nanako's patch before?\n\nThe patch: http://article.gmane.org/gmane.comp.version-control.git/85055\n\nOlivier.\n"},{"id":"81812","messageId":"1f748ec60806301703g134b8127i1965377adf9f04e5@mail.gmail.com","threadId":"12603","inReplyTo":"200806302047.56935.johannes.sixt@telecom.at","subject":"Re: How to reduce remaining differences to 4msysgit? (was What's cooking in git.git (topics))","fromName":"Clifford Caoile","fromEmail":"piyo@users.sourceforge.net","sentAt":"2008-07-01T00:03:54Z","receivedAt":"2008-07-01T00:03:54Z","isPatch":false,"sender":{"key":"piyo@users.sourceforge.net","avatar":null},"body":"\nHi:\n\nOn Tue, Jul 1, 2008 at 3:47 AM, Johannes Sixt <johannes.sixt@telecom.at> wrote:\n>\n> On Montag, 30. Juni 2008, Steffen Prohaska wrote:\n>> On Jun 30, 2008, at 11:08 AM, Junio C Hamano wrote:\n>> > * MinGW will be in.\n>>\n>> How should we proceed to get rid of the differences?\n> ...\n> Then there are the extra patches in 4msysgit. From my POV, they are not\n> _required_ because I can appearently work with git on Windows without them. I\n> think some of them are not necessary. Can we go through them again?\n\nAs one of the extra patches in 4msysgit, there is the cca/git.el\nbranch [1] which I contributed [2] previously for Emacs git.el users\non Windows. However I have not gotten any feedback whatsoever, so\nperhaps parking it in 4msysgit is not appropriate. I plan to\nseparately to host these patch(es). Please ignore it or remove it at\nyour convenience.\n\nReferences:\n[1] http://repo.or.cz/w/git/mingw/4msysgit.git?a=shortlog;h=refs/heads/cca/git.el\n[2] http://thread.gmane.org/gmane.comp.version-control.msysgit/2140\n\nBest regards,\nClifford Caoile\n"},{"id":"81814","messageId":"20080701105750.040ccf75.sfr@canb.auug.org.au","threadId":"12603","inReplyTo":"7vabh2vaav.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Stephen Rothwell","fromEmail":"sfr@canb.auug.org.au","sentAt":"2008-07-01T00:57:50Z","receivedAt":"2008-07-01T00:57:50Z","isPatch":false,"sender":{"key":"sfr@canb.auug.org.au","avatar":null},"body":"On Mon, 30 Jun 2008 15:15:52 -0700 Junio C Hamano <gitster@pobox.com> wrote:\n>\n> branches, and Stephen who is also a heavy integrator even though I do not\n> know if he is in branches camp or uses more modern style), but they now\n\nI use \"git remote add\" for each new repository and haven't had anything\nin the branches directory of any of my trees for a long time ...\n\n-- \nCheers,\nStephen Rothwell                    sfr@canb.auug.org.au\nhttp://www.canb.auug.org.au/~sfr/\n"},{"id":"81844","messageId":"7vskuuoygp.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"4869700C.6060803@free.fr","subject":"Re: [PATCH] Make default expiration period of reflog used for stash infinite","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-01T07:28:06Z","receivedAt":"2008-07-01T07:28:06Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Olivier Marin <dkr+ml.git@free.fr> writes:\n\n> Junio C Hamano a écrit :\n>> This makes the default expiration period for the reflog that implements\n>> stash infinite.\n>\n> I did not read the whole thread so maybe I missed something but I though you\n> wanted to apply Nanako's patch before?\n>\n> The patch: http://article.gmane.org/gmane.comp.version-control.git/85055\n\nThanks for reminding, but I am of two minds about the change.\n\n (1) The change would untie the base tree of the stash from the history\n     behind it and allow previously rewound tips of branches that these\n     stashes were built on top of.  Without the patch, these otherwise\n     unreachable commits will never be reclaimed.\n\n (2) Today, you can say \"git log stash\" (note the lack of \"-g\" option) to\n     view the history behind the stash through two artificial commits that\n     stash creates.  This will become impossible with the patch.\n\nProbably I am worrying too much; I do not personally think the second\npoint matters in the real life.  If \"git log stash\" _were_ any useful,\nit means the history behind the stash entries are not useless at all, but\nin that case the user would be using regular branches to store them\nanyway.\n"},{"id":"81859","messageId":"20080701101114.GA6379@sigill.intra.peff.net","threadId":"12603","inReplyTo":"7v3amv1e8n.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2008-07-01T10:11:14Z","receivedAt":"2008-07-01T10:11:14Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Mon, Jun 30, 2008 at 02:08:56AM -0700, Junio C Hamano wrote:\n\n> * js/apply-recount (Fri Jun 27 18:43:09 2008 +0100) 1 commit\n>  + Allow git-apply to recount the lines in a hunk (AKA recountdiff)\n> \n> A good ingredient for implementing \"apply --edit\".\n\nThomas,\n\nNow that this is in next, maybe it is a good time to repost the\nadd--interactive patch (it should be independent of Dscho's 2/2 \"add -e\"\npatch).\n\n-Peff\n"},{"id":"81866","messageId":"1214912674-9443-1-git-send-email-trast@student.ethz.ch","threadId":"12603","inReplyTo":"20080701101114.GA6379@sigill.intra.peff.net","subject":"[PATCH] git-add--interactive: manual hunk editing mode","fromName":"Thomas Rast","fromEmail":"trast@student.ethz.ch","sentAt":"2008-07-01T11:44:34Z","receivedAt":"2008-07-01T11:44:34Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"Adds a new option 'e' to the 'add -p' command loop that lets you edit\nthe current hunk in your favourite editor.\n\nIf the resulting patch applies cleanly, the edited hunk will\nimmediately be marked for staging. If it does not apply cleanly, you\nwill be given an opportunity to edit again. If all lines of the hunk\nare removed, then the edit is aborted and the hunk is left unchanged.\n\nApplying the changed hunk(s) relies on Johannes Schindelin's new\n--recount option for git-apply.\n\nNote that the \"real patch\" test intentionally uses\n  (echo e; echo n; echo d) | git add -p\neven though the 'n' and 'd' are superfluous at first sight.  They\nserve to get out of the interaction loop if git add -p wrongly\nconcludes the patch does not apply.\n\nMany thanks to Jeff King <peff@peff.net> for lots of help and\nsuggestions.\n\nSigned-off-by: Thomas Rast <trast@student.ethz.ch>\n---\n\nJeff King wrote:\n> Now that this is in next, maybe it is a good time to repost the\n> add--interactive patch (it should be independent of Dscho's 2/2 \"add -e\"\n> patch).\n\nIt is independent, so I suppose you're right.  (Dscho mentioned in\npassing he might repost \"add -e\" himself.)\n\n- Thomas\n\n Documentation/git-add.txt  |    1 +\n git-add--interactive.perl  |  124 +++++++++++++++++++++++++++++++++++++++++++-\n t/t3701-add-interactive.sh |   67 ++++++++++++++++++++++++\n 3 files changed, 191 insertions(+), 1 deletions(-)\n\ndiff --git a/Documentation/git-add.txt b/Documentation/git-add.txt\nindex c6de028..1d8d209 100644\n--- a/Documentation/git-add.txt\n+++ b/Documentation/git-add.txt\n@@ -246,6 +246,7 @@ patch::\n        k - leave this hunk undecided, see previous undecided hunk\n        K - leave this hunk undecided, see previous hunk\n        s - split the current hunk into smaller hunks\n+       e - manually edit the current hunk\n        ? - print help\n +\n After deciding the fate for all hunks, if there is any hunk\ndiff --git a/git-add--interactive.perl b/git-add--interactive.perl\nindex 903953e..6bb117a 100755\n--- a/git-add--interactive.perl\n+++ b/git-add--interactive.perl\n@@ -2,6 +2,7 @@\n \n use strict;\n use Git;\n+use File::Temp;\n \n my $repo = Git->repository();\n \n@@ -18,6 +19,18 @@ my ($fraginfo_color) =\n \t$diff_use_color ? (\n \t\t$repo->get_color('color.diff.frag', 'cyan'),\n \t) : ();\n+my ($diff_plain_color) =\n+\t$diff_use_color ? (\n+\t\t$repo->get_color('color.diff.plain', ''),\n+\t) : ();\n+my ($diff_old_color) =\n+\t$diff_use_color ? (\n+\t\t$repo->get_color('color.diff.old', 'red'),\n+\t) : ();\n+my ($diff_new_color) =\n+\t$diff_use_color ? (\n+\t\t$repo->get_color('color.diff.new', 'green'),\n+\t) : ();\n \n my $normal_color = $repo->get_color(\"\", \"reset\");\n \n@@ -770,6 +783,104 @@ sub coalesce_overlapping_hunks {\n \treturn @out;\n }\n \n+sub color_diff {\n+\treturn map {\n+\t\tcolored((/^@/  ? $fraginfo_color :\n+\t\t\t /^\\+/ ? $diff_new_color :\n+\t\t\t /^-/  ? $diff_old_color :\n+\t\t\t $diff_plain_color),\n+\t\t\t$_);\n+\t} @_;\n+}\n+\n+sub edit_hunk_manually {\n+\tmy ($oldtext) = @_;\n+\n+\tmy $t = File::Temp->new(\n+\t\tTEMPLATE => $repo->repo_path . \"/git-hunk-edit.XXXXXX\",\n+\t\tSUFFIX => '.diff'\n+\t);\n+\tprint $t \"# Manual hunk edit mode -- see bottom for a quick guide\\n\";\n+\tprint $t @$oldtext;\n+\tprint $t <<EOF;\n+# ---\n+# To remove '-' lines, make them ' ' lines (context).\n+# To remove '+' lines, delete them.\n+# Lines starting with # will be removed.\n+#\n+# If the patch applies cleanly, the edited hunk will immediately be\n+# marked for staging. If it does not apply cleanly, you will be given\n+# an opportunity to edit again. If all lines of the hunk are removed,\n+# then the edit is aborted and the hunk is left unchanged.\n+EOF\n+\tclose $t;\n+\n+\tmy $editor = $ENV{GIT_EDITOR} || $repo->config(\"core.editor\")\n+\t\t|| $ENV{VISUAL} || $ENV{EDITOR} || \"vi\";\n+\tsystem('sh', '-c', $editor.' \"$@\"', $editor, $t);\n+\n+\topen my $fh, '<', $t\n+\t\tor die \"failed to open hunk edit file for reading: \" . $!;\n+\tmy @newtext = grep { !/^#/ } <$fh>;\n+\tclose $fh;\n+\n+\t# Abort if nothing remains\n+\tif (!grep { /\\S/ } @newtext) {\n+\t\treturn undef;\n+\t}\n+\n+\t# Reinsert the first hunk header if the user accidentally deleted it\n+\tif ($newtext[0] !~ /^@/) {\n+\t\tunshift @newtext, $oldtext->[0];\n+\t}\n+\treturn \\@newtext;\n+}\n+\n+sub diff_applies {\n+\tmy $fh;\n+\topen $fh, '| git apply --recount --cached --check';\n+\tfor my $h (@_) {\n+\t\tprint $fh @{$h->{TEXT}};\n+\t}\n+\treturn close $fh;\n+}\n+\n+sub prompt_yesno {\n+\tmy ($prompt) = @_;\n+\twhile (1) {\n+\t\tprint colored $prompt_color, $prompt;\n+\t\tmy $line = <STDIN>;\n+\t\treturn 0 if $line =~ /^n/i;\n+\t\treturn 1 if $line =~ /^y/i;\n+\t}\n+}\n+\n+sub edit_hunk_loop {\n+\tmy ($head, $hunk, $ix) = @_;\n+\tmy $text = $hunk->[$ix]->{TEXT};\n+\n+\twhile (1) {\n+\t\t$text = edit_hunk_manually($text);\n+\t\tif (!defined $text) {\n+\t\t\treturn undef;\n+\t\t}\n+\t\tmy $newhunk = { TEXT => $text, USE => 1 };\n+\t\tif (diff_applies($head,\n+\t\t\t\t @{$hunk}[0..$ix-1],\n+\t\t\t\t $newhunk,\n+\t\t\t\t @{$hunk}[$ix+1..$#{$hunk}])) {\n+\t\t\t$newhunk->{DISPLAY} = [color_diff(@{$text})];\n+\t\t\treturn $newhunk;\n+\t\t}\n+\t\telse {\n+\t\t\tprompt_yesno(\n+\t\t\t\t'Your edited hunk does not apply. Edit again '\n+\t\t\t\t. '(saying \"no\" discards!) [y/n]? '\n+\t\t\t\t) or return undef;\n+\t\t}\n+\t}\n+}\n+\n sub help_patch_cmd {\n \tprint colored $help_color, <<\\EOF ;\n y - stage this hunk\n@@ -781,6 +892,7 @@ J - leave this hunk undecided, see next hunk\n k - leave this hunk undecided, see previous undecided hunk\n K - leave this hunk undecided, see previous hunk\n s - split the current hunk into smaller hunks\n+e - manually edit the current hunk\n ? - print help\n EOF\n }\n@@ -846,6 +958,7 @@ sub patch_update_file {\n \n \t$num = scalar @hunk;\n \t$ix = 0;\n+\tmy $need_recount = 0;\n \n \twhile (1) {\n \t\tmy ($prev, $next, $other, $undecided, $i);\n@@ -885,6 +998,7 @@ sub patch_update_file {\n \t\tif (hunk_splittable($hunk[$ix]{TEXT})) {\n \t\t\t$other .= '/s';\n \t\t}\n+\t\t$other .= '/e';\n \t\tfor (@{$hunk[$ix]{DISPLAY}}) {\n \t\t\tprint;\n \t\t}\n@@ -949,6 +1063,13 @@ sub patch_update_file {\n \t\t\t\t$num = scalar @hunk;\n \t\t\t\tnext;\n \t\t\t}\n+\t\t\telsif ($line =~ /^e/) {\n+\t\t\t\tmy $newhunk = edit_hunk_loop($head, \\@hunk, $ix);\n+\t\t\t\tif (defined $newhunk) {\n+\t\t\t\t\tsplice @hunk, $ix, 1, $newhunk;\n+\t\t\t\t\t$need_recount = 1;\n+\t\t\t\t}\n+\t\t\t}\n \t\t\telse {\n \t\t\t\thelp_patch_cmd($other);\n \t\t\t\tnext;\n@@ -1002,7 +1123,8 @@ sub patch_update_file {\n \tif (@result) {\n \t\tmy $fh;\n \n-\t\topen $fh, '| git apply --cached';\n+\t\topen $fh, '| git apply --cached'\n+\t\t\t. ($need_recount ? ' --recount' : '');\n \t\tfor (@{$head->{TEXT}}, @result) {\n \t\t\tprint $fh $_;\n \t\t}\ndiff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh\nindex fae64ea..e95663d 100755\n--- a/t/t3701-add-interactive.sh\n+++ b/t/t3701-add-interactive.sh\n@@ -66,6 +66,73 @@ test_expect_success 'revert works (commit)' '\n \tgrep \"unchanged *+3/-0 file\" output\n '\n \n+cat >expected <<EOF\n+EOF\n+cat >fake_editor.sh <<EOF\n+EOF\n+chmod a+x fake_editor.sh\n+test_set_editor \"$(pwd)/fake_editor.sh\"\n+test_expect_success 'dummy edit works' '\n+\t(echo e; echo a) | git add -p &&\n+\tgit diff > diff &&\n+\ttest_cmp expected diff\n+'\n+\n+cat >patch <<EOF\n+@@ -1,1 +1,4 @@\n+ this\n++patch\n+-doesn't\n+ apply\n+EOF\n+echo \"#!$SHELL_PATH\" >fake_editor.sh\n+cat >>fake_editor.sh <<\\EOF\n+mv -f \"$1\" oldpatch &&\n+mv -f patch \"$1\"\n+EOF\n+chmod a+x fake_editor.sh\n+test_set_editor \"$(pwd)/fake_editor.sh\"\n+test_expect_success 'bad edit rejected' '\n+\tgit reset &&\n+\t(echo e; echo n; echo d) | git add -p >output &&\n+\tgrep \"hunk does not apply\" output\n+'\n+\n+cat >patch <<EOF\n+this patch\n+is garbage\n+EOF\n+test_expect_success 'garbage edit rejected' '\n+\tgit reset &&\n+\t(echo e; echo n; echo d) | git add -p >output &&\n+\tgrep \"hunk does not apply\" output\n+'\n+\n+cat >patch <<EOF\n+@@ -1,0 +1,0 @@\n+ baseline\n++content\n++newcontent\n++lines\n+EOF\n+cat >expected <<EOF\n+diff --git a/file b/file\n+index b5dd6c9..f910ae9 100644\n+--- a/file\n++++ b/file\n+@@ -1,4 +1,4 @@\n+ baseline\n+ content\n+-newcontent\n++more\n+ lines\n+EOF\n+test_expect_success 'real edit works' '\n+\t(echo e; echo n; echo d) | git add -p &&\n+\tgit diff >output &&\n+\ttest_cmp expected output\n+'\n+\n if test \"$(git config --bool core.filemode)\" = false\n then\n     say 'skipping filemode tests (filesystem does not properly support modes)'\n-- \n1.5.4.5\n"},{"id":"81882","messageId":"1214927045.3406.15.camel@gaara.bos.redhat.com","threadId":"12603","inReplyTo":"7vabh2vaav.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Kristian Høgsberg","fromEmail":"krh@redhat.com","sentAt":"2008-07-01T15:44:05Z","receivedAt":"2008-07-01T15:44:05Z","isPatch":false,"sender":{"key":"krh@redhat.com","avatar":"https://gravatar.com/avatar/763dee6f9594ac474f725b137a39565792928e583ddf59b32befc2907409027e?d=mp&s=160"},"body":"On Mon, 2008-06-30 at 15:15 -0700, Junio C Hamano wrote:\n> Kristian Høgsberg <krh@redhat.com> writes:\n> \n> > On Mon, 2008-06-30 at 02:08 -0700, Junio C Hamano wrote:\n> > ...\n> >> It already is beginning to become clear what 1.6.0 will look like.  What's\n> >> already in 'next' all are well intentioned (I do not guarantee they are\n> >> already bug-free --- that is what cooking them in 'next' is for) and are\n> >> good set of feature enhancements.  Bigger changes will be:\n> > ...\n> > A small detail I've suggested scheduling for 1.6 before is removing (or\n> > rather, stop creating) the empty .git/branches directory.  How does that\n> > sound?\n> \n> What's the benefit of the removal that outweighs the downside?  I can\n> imagine two contradicting voices from new end users.\n> \n>  (1) With current git, I ran \"git init\" and I have an empty\n>      .git/branches/, but my remote information created with \"git clone\"\n>      and \"git remote add\" all go to .git/config these days.  Why do I have\n>      to have this empty directory that I do not use?\n\nYeah, that's one reason, my main problem with .git/branches is that for\na user that wants to learn about git and peeks into .git it's pretty\nconfusing.  \"I wonder where and how git stores the information about\nbranches... oh look, .git/branches, that must it... hmm, wait no...\"\nGit is still getting a lot of bad-mouthing for being hard to learn and\ninconsitent.  I think it makes sense to push git towards consistency and\nsimplicity (where is doesn't affect the flexibility) and this seemed\nlike a tiny step towards that.  As Dscho mentioned we have two other\nways of accomplishing what .git/branches did, so maybe it makes sense to\nretire this one?\n\n>  (2) It is documented that \"git fetch\" can use files in .git/branches/ as\n>      the source specification, but when I ran \"git init\", it does not\n>      create the directory with Kristian's git. I need to do an extra\n>      \"mkdir .git/branches/\" myself.  Why?\n\nWe could just change the documentation to ask the user to create\nthe .git/branches directory if they want to use that feature.\n\n> You are obviously coming from the former camp, but do you have a good\n> answer to people from the other camp?\n> \n> I do not recall if Cogito required to have .git/branches created by us or\n> it can create it on demand if we don't.  If the latter, that would be\n> great, otherwise remaining users would be in the latter camp as well, and\n> we may have to make sure Cogito is really dead already (or wait for it to\n> die), or Cogito gets updated for its remaining users to tolerate the\n> initial lack of the directory (and wait for that version percolates down\n> to the users).\n> \n> Some people rely on (or at least \"like\") the convenience of being able to\n> create a single-liner file in .git/branches/ to easily add, and remove\n> such a file to easily remove where they integrate from.  This is\n> especially so when they have dozens of source repositories to fetch from.\n> I do not think we want to remove support for .git/branches as a way to\n> specify fetch sources (this is why I am CC'ing Andrew who I know uses\n> branches, and Stephen who is also a heavy integrator even though I do not\n> know if he is in branches camp or uses more modern style), but they now\n> have to do an extra \"mkdir .git/branches\" after \"git init\" to continue\n> their workflow if we adopt the change you are proposing here.  It is not a\n> big deal, but it still is a backward incompatible change.\n\nYeah... I have to confess, that when I suggested removing it, I was\nunder the impression that git didn't use .git/branches, but only created\nit to be nice to cogito.  I just read the code in remote.c that deals\nwith .git/branches and understand that it's still used by git.  From the\nfeedback from Stephen, Andrew and Pasky, it looks like we can drop\nthe .git/branches from the template for 1.6 and maybe in the future, we\ncould drop the .git/branches support entirely.  Dunno.\n\ncheers,\nKristian\n"},{"id":"81891","messageId":"alpine.LSU.1.00.0807011847140.32725@wbgn129.biozentrum.uni-wuerzburg.de","threadId":"12603","inReplyTo":"1214912674-9443-1-git-send-email-trast@student.ethz.ch","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-01T16:48:31Z","receivedAt":"2008-07-01T16:48:31Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 1 Jul 2008, Thomas Rast wrote:\n\n> (Dscho mentioned in passing he might repost \"add -e\" himself.)\n\nHe will not :-)\n\nCiao,\nDscho\n"},{"id":"81907","messageId":"7vskutkvnk.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214912674-9443-1-git-send-email-trast@student.ethz.ch","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-01T23:54:39Z","receivedAt":"2008-07-01T23:54:39Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thomas Rast <trast@student.ethz.ch> writes:\n\n> Jeff King wrote:\n>> Now that this is in next, maybe it is a good time to repost the\n>> add--interactive patch (it should be independent of Dscho's 2/2 \"add -e\"\n>> patch).\n>\n> It is independent, so I suppose you're right.  (Dscho mentioned in\n> passing he might repost \"add -e\" himself.)\n\nThanks, both.\n"},{"id":"81921","messageId":"7vprpwhp7t.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7v3amv1e8n.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T04:41:58Z","receivedAt":"2008-07-02T04:41:58Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be applied to the maintenance series have \"maint-\" in their\nnames.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  Bigger changes will be:\n\n * MinGW will be in.\n\n * With the default Makefile settings, most of the programs will be\n   installed outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\n   some server side programs that need to be accessible for technical\n   reasons.  Invoking a git subcommand as \"git-xyzzy\" from the command\n   line has been deprecated since early 2006 (and officially announced in\n   1.5.4 release notes); use of them from your scripts after adding\n   output from \"git --exec-path\" to the $PATH will still be supported in\n   1.6.0, but users are again strongly encouraged to adjust their\n   scripts to use \"git xyzzy\" form, as we will stop installing\n   \"git-xyzzy\" hardlinks for built-in commands in later releases.\n\n * git-merge will be rewritten in C.\n\n * default pack and idx versions will be updated as scheduled for some\n   time ago.\n\n * GIT_CONFIG, which was only documented as affecting \"git config\", but\n   actually affected all git commands, now only affects \"git config\".\n   GIT_LOCAL_CONFIG, also only documented as affecting \"git config\" and\n   not different from GIT_CONFIG in a useful way, is removed.\n\n----------------------------------------------------------------\n[New Topics]\n\n* js/import-zip (Mon Jun 30 19:50:44 2008 +0100) 1 commit\n + Add another fast-import example, this time for .zip files\n\n* js/apply-root (Tue Jul 1 00:44:47 2008 +0100) 1 commit\n + Teach \"git apply\" to prepend a prefix with \"--root=<root>\"\n\n* db/no-git-config (Mon Jun 30 03:37:47 2008 -0400) 1 commit\n + Only use GIT_CONFIG in \"git config\", not other programs\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits\n + compat/pread.c: Add a forward declaration to fix a warning\n + Windows: Fix ntohl() related warnings about printf formatting\n + Windows: TMP and TEMP environment variables specify a temporary\n   directory.\n + Windows: Make 'git help -a' work.\n + Windows: Work around an oddity when a pipe with no reader is\n   written to.\n + Windows: Make the pager work.\n + When installing, be prepared that template_dir may be relative.\n + Windows: Use a relative default template_dir and ETC_GITCONFIG\n + Windows: Compute the fallback for exec_path from the program\n   invocation.\n + Turn builtin_exec_path into a function.\n + Windows: Use a customized struct stat that also has the st_blocks\n   member.\n + Windows: Add a custom implementation for utime().\n + Windows: Add a new lstat and fstat implementation based on Win32\n   API.\n + Windows: Implement a custom spawnve().\n + Windows: Implement wrappers for gethostbyname(), socket(), and\n   connect().\n + Windows: Work around incompatible sort and find.\n + Windows: Implement asynchronous functions as threads.\n + Windows: Disambiguate DOS style paths from SSH URLs.\n + Windows: A rudimentary poll() emulation.\n + Windows: Implement start_command().\n + Windows: A pipe() replacement whose ends are not inherited to\n   children.\n + Windows: Wrap execve so that shell scripts can be invoked.\n + Windows: Implement setitimer() and sigaction().\n + Windows: Fix PRIuMAX definition.\n + Windows: Implement gettimeofday().\n + Make my_mktime() public and rename it to tm_to_time_t()\n + Windows: Work around misbehaved rename().\n + Windows: always chmod(, 0666) before unlink().\n + Windows: A minimal implemention of getpwuid().\n + Windows: Implement a wrapper of the open() function.\n + Windows: Strip \".exe\" from the program name.\n + Windows: Handle absolute paths in\n   safe_create_leading_directories().\n + Windows: Treat Windows style path names.\n + setup.c: Prepare for Windows directory separators.\n + Windows: Use the Windows style PATH separator ';'.\n + Add target architecture MinGW.\n + Compile some programs only conditionally.\n + Add compat/regex.[ch] and compat/fnmatch.[ch].\n\nNo explanation necessary ;-)\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits\n - Make default expiration period of reflog used for stash infinite\n - Per-ref reflog expiry configuration\n\nAs 1.6.0 will be a good time to make backward incompatible changes, the\ntip commit makes the default expiry period of stash 'never', unless you\nconfigure them to expire explicitly using gc.refs/stash.* variables.\nNeeds consensus, but I am guessing that enough people would want stash\nthat does not expire.\n\nWe may want to change the commit topology used to represent a stash, as\nproposed in $gmane/85055 by Nana earlier.\n\n* jc/merge-theirs (Mon Jun 30 22:18:57 2008 -0700) 4 commits\n - Make \"subtree\" part more orthogonal to the rest of merge-\n   recursive.\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -Xsubtree=foo/bar/baz -s recursive other\" now.\n\n* mv/merge-in-c (Tue Jul 1 04:37:50 2008 +0200) 14 commits\n - Build in merge\n - git-commit-tree: make it usable from other builtins\n - Add new test case to ensure git-merge prepends the custom merge\n   message\n - Add new test case to ensure git-merge reduces octopus parents when\n   possible\n - Introduce reduce_heads()\n - Introduce get_merge_bases_many()\n - Add new test to ensure git-merge handles more than 25 refs.\n - Introduce get_octopus_merge_bases() in commit.c\n - git-fmt-merge-msg: make it usable from other builtins\n - Move read_cache_unmerged() to read-cache.c\n - Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n - Move parse-options's skip_prefix() to git-compat-util.h\n - Move commit_list_count() to commit.c\n - Move split_cmdline() to alias.c\n\nI think this is getting there.  Will be in 'next' soon.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n + Eliminate an unnecessary chdir(\"..\")\n + Add support for GIT_CEILING_DIRECTORIES\n + Fold test-absolute-path into test-path-utils\n + Implement normalize_absolute_path\n\n* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits\n + rerere.autoupdate\n + t4200: fix rerere test\n + rerere: remove dubious \"tail_optimization\"\n + git-rerere: detect unparsable conflicts\n + rerere: rerere_created_at() and has_resolution() abstraction\n\nA new configuration will allow paths that have been resolved cleanly by\nrerere to be updated in the index automatically.\n\n* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits\n - Migrate git-blame to parse-option partially.\n - parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.\n - parse-opt: fake short strings for callers to believe in.\n - parse-opt: do not print errors on unknown options, return -2\n   intead.\n - parse-opt: create parse_options_step.\n - parse-opt: Export a non NORETURN usage dumper.\n - parse-opt: have parse_options_{start,end}.\n\nI recall Pierre said something about cleaning up the last one when he\nfinds time, but other than that vague recollection, I lost track of this\nseries.  I am tempted to fork a few topics off of the penúltimo one to\nconvert a few more commands as examples and merge the result to 'next'.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit\n + Remove the use of '--' in merge program invocation\n\nI got tired of waiting for success reports from people who use various\nbackends.  We will hear breakages if this breaks things anyway, and if it\ndoes, it is a fairly simple single patch to revert.\n\n* nd/dashless (Tue Jun 24 19:58:11 2008 -0700) 2 commits\n + Keep some git-* programs in $(bindir)\n + Move all dashed-form commands to libexecdir\n\nWe'll leave server-side programs in $(bindir) so that ssh clients can ask\nfor \"git-program\" and find them on the $PATH.  Next major release after\n1.6.0 would most likely remove the hardlinks to built-in commands, but not\nyet.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Prepare execv_git_cmd() for removal of builtins from the\n   filesystem\n + git-shell: accept \"git foo\" form\n\nThe botched \"client asks 'git foo'\" is not included.  It will be long\nafter everybody runs 1.6.0.\n\n* jk/maint-fetch-ref-hier (Fri Jun 27 00:01:41 2008 -0400) 2 commits\n + fetch: give a hint to the user when local refs fail to update\n + fetch: report local storage errors in status table\n\nWhen the remote used to have \"foo\" branch but now has \"foo/bar\", fetch\nrefuses to delete the existing remote tracking branch \"foo\" to create a\nnew remote tracking branch \"foo/bar\", but the error message was\nconfusing.\n\nNeed to backmerge to 'maint' after a while.\n\n* jc/maint-reset (Wed Jun 25 18:16:36 2008 -0700) 1 commit\n + Allow \"git-reset path\" when unambiguous\n\nWe used to require \"git-reset -- path\" even when there is no ambiguity\n(i.e. path cannot be mistaken as a valid tree-ish and it is a filename in\nthe work tree).\n\nNeed to backmerge to 'maint' after a while.\n\n* js/maint-clone-insteadof (Fri Jun 27 13:55:23 2008 +0100) 2 commits\n + clone: respect the settings in $HOME/.gitconfig and /etc/gitconfig\n + clone: respect url.insteadOf setting in global configs\n\n\"git clone\" did not honor \"url.InsteadOf\" in $HOME/.gitconfig.  I think\nDaniel's \"Let's get rid of internal use of GIT_CONFIG\" makes sense (even\nthough it feels very scary), and it would make the solution much simpler,\nbut these two are independently good fix for now.  I'll queue GIT_CONFIG\none in 'next' and when it graduates the unsetenv() solution in these will\nbecome no-op.\n\n* tr/send-email-ssl (Thu Jun 26 23:03:21 2008 +0200) 2 commits\n + git-send-email: prevent undefined variable warnings if no\n   encryption is set\n + git-send-email: add support for TLS via Net::SMTP::SSL\n\n* kb/send-email-fifo (Wed Jun 25 15:44:40 2008 -0700) 1 commit\n + git-send-email: Accept fifos as well as files\n\nTwo minor send-email feature enhancements.\n\n* jc/checkdiff (Sun Jun 29 16:49:06 2008 -0400) 7 commits\n + Fix t4017-diff-retval for white-space from wc\n + Update sample pre-commit hook to use \"diff --check\"\n + diff --check: detect leftover conflict markers\n + Teach \"diff --check\" about new blank lines at end\n + checkdiff: pass diff_options to the callback\n + check_and_emit_line(): rename and refactor\n + diff --check: explain why we do not care whether old side is\n   binary\n\nAllows us to replace the sample pre-commit hook that was not aware of the\nline termination convention per path nor newer whitespace breakage rules.\n\n* np/pack-default (Wed Jun 25 00:25:53 2008 -0400) 2 commits\n + pack.indexversion config option now defaults to 2\n + repack.usedeltabaseoffset config option now defaults to \"true\"\n\nUpdates the default value for pack.indexversion to 2 and use delta-base\noffset encoding of the packfiles by default.\n\n* js/apply-recount (Fri Jun 27 18:43:09 2008 +0100) 1 commit\n + Allow git-apply to recount the lines in a hunk (AKA recountdiff)\n\nA good ingredient for implementing \"apply --edit\".\n\n* dz/apply-again (Fri Jun 27 14:39:12 2008 -0400) 1 commit\n + git-apply: handle a patch that touches the same path more than\n   once better\n\nAllows us to feed a patch that touches the same path more than once.\n\n----------------------------------------------------------------\n[On Hold]\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis was previously in \"will be in master soon\" category, but it turns out\nthat the synonyms to the ones this one deletes are fairly new invention\nthat happend in 1.5.6 timeframe, and we cannot do this just yet.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n\nThis is the \"botched\" one.  Will be resurrected during 1.7.0 or 1.8.0\ntimeframe.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n\n----------------------------------------------------------------\n[Dropped for now]\n\n* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits\n . Introduce fast forward option only\n . Head reduction before selecting merge strategy\n . Restructure git-merge.sh\n . Introduce -ff=<fast forward option>\n . New merge tests\n . Documentation for joining more than two histories\n\nThis will interfere with Miklos's rewrite of merge to C.\n\n* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits\n . Use perl instead of tac\n . Fix t3404 assumption that `wc -l` does not use whitespace.\n . rebase -i: Use : in expr command instead of match.\n . rebase -i: update the implementation of 'mark' command\n . Add option --preserve-tags\n . Teach rebase interactive the tag command\n . Add option --first-parent\n . Do rebase with preserve merges with advanced TODO list\n . Select all lines with fake-editor\n . Unify the length of $SHORT* and the commits in the TODO list\n . Teach rebase interactive the merge command\n . Move redo merge code in a function\n . Teach rebase interactive the reset command\n . Teach rebase interactive the mark command\n . Move cleanup code into it's own function\n . Don't append default merge message to -m message\n . fake-editor: output TODO list if unchanged\n\n* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits\n . WIP: rethink replay merge\n . Start using replay-tree merge in cherry-pick\n . revert/cherry-pick: start refactoring call to merge_recursive\n\nThis is meant to improve cherry-pick's behaviour when renames are\ninvolved, by not using merge-recursive (whose d/f conflict resolution is\nquite broken), but unfortunately has stalled for some time now.\n\n* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits\n . git-am --forge: add Signed-off-by: line for the author\n . git-am: clean-up Signed-off-by: lines\n . stripspace: add --log-clean option to clean up signed-off-by:\n   lines\n . stripspace: use parse_options()\n . Add \"git am -s\" test\n . git-am: refactor code to add signed-off-by line for the committer\n\nJust my toy at this moment.\n\n* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit\n . \"git push\": tellme-more protocol extension\n"},{"id":"81924","messageId":"7v7ic4hmj5.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214912674-9443-1-git-send-email-trast@student.ethz.ch","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T05:39:58Z","receivedAt":"2008-07-02T05:39:58Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thomas Rast <trast@student.ethz.ch> writes:\n\n> diff --git a/git-add--interactive.perl b/git-add--interactive.perl\n> index 903953e..6bb117a 100755\n> --- a/git-add--interactive.perl\n> +++ b/git-add--interactive.perl\n> @@ -2,6 +2,7 @@\n>  \n>  use strict;\n>  use Git;\n> +use File::Temp;\n\nPeople with minimum Perl installation should still be able to use \"add -i\"\nas long as they do not use 'e' subcommand, shouldn't they?  Shouldn't we\ndo something like:\n\n\tmy $can_use_temp = eval {\n        \trequire File::Temp;\n                1;\n\t};\n\nand disable 'e' subcommand unless $can_use_temp?\n\n> +sub edit_hunk_manually {\n> +\tmy ($oldtext) = @_;\n> +\n> +\tmy $t = File::Temp->new(\n> +\t\tTEMPLATE => $repo->repo_path . \"/git-hunk-edit.XXXXXX\",\n> +\t\tSUFFIX => '.diff'\n> +\t);\n> +\tprint $t \"# Manual hunk edit mode -- see bottom for a quick guide\\n\";\n> +\tprint $t @$oldtext;\n> +\tprint $t <<EOF;\n> +# ---\n> +# To remove '-' lines, make them ' ' lines (context).\n> +# To remove '+' lines, delete them.\n> +# Lines starting with # will be removed.\n\nDon't you want to say \"Do not touch lines that begin with ' '\"?\n\n> +\t# Reinsert the first hunk header if the user accidentally deleted it\n> +\tif ($newtext[0] !~ /^@/) {\n> +\t\tunshift @newtext, $oldtext->[0];\n> +\t}\n\nHmm, perhaps not even giving the \"@@ ... @@\" lines to the editor would be\na more robust solution?\n\n> +sub diff_applies {\n> +\tmy $fh;\n> +\topen $fh, '| git apply --recount --cached --check';\n> +\tfor my $h (@_) {\n> +\t\tprint $fh @{$h->{TEXT}};\n> +\t}\n> +\treturn close $fh;\n\nHave to wonder where the potential error message would go, and if it would\nconfuse the end users...\n\n> @@ -1002,7 +1123,8 @@ sub patch_update_file {\n>  \tif (@result) {\n>  \t\tmy $fh;\n>  \n> -\t\topen $fh, '| git apply --cached';\n> +\t\topen $fh, '| git apply --cached'\n> +\t\t\t. ($need_recount ? ' --recount' : '');\n>  \t\tfor (@{$head->{TEXT}}, @result) {\n>  \t\t\tprint $fh $_;\n>  \t\t}\n\nI recall that the original \"add--interactive\" carefully counted numbers in\nhunks it reassembles (as it can let you split and then you can choose to\nuse both parts, which requires it to merge overlapping hunks back), but if\nyou are going to use --recount anyway, perhaps we can discard that logic?\nIt may make the patch application less robust, though.  I dunno.\n\nAn alternative, and probably more robust, approach would be to recount\nwhat we have in @{$mode->{TEXT}}, after letting the user edit some of\nthem, so that \"add--interactive\" still knows what it is doing after\napplying your patch without having to rely on \"apply --recount\".\n"},{"id":"81929","messageId":"200807020900.28690.trast@student.ethz.ch","threadId":"12603","inReplyTo":"7v7ic4hmj5.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Thomas Rast","fromEmail":"trast@student.ethz.ch","sentAt":"2008-07-02T07:00:24Z","receivedAt":"2008-07-02T07:00:24Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"Junio C Hamano wrote:\n> \n> People with minimum Perl installation should still be able to use \"add -i\"\n> as long as they do not use 'e' subcommand, shouldn't they?  Shouldn't we\n> do something like:\n[...]\n> and disable 'e' subcommand unless $can_use_temp?\n\nI can just call the temporary editing file something constant, like\nthe commit message already is.  I don't care much about that point,\nand honestly assumed File::Temp came with every Perl (it's in\nperl-base here).\n\n> > +# To remove '-' lines, make them ' ' lines (context).\n> > +# To remove '+' lines, delete them.\n> > +# Lines starting with # will be removed.\n> \n> Don't you want to say \"Do not touch lines that begin with ' '\"?\n\nWhy?  You can make them '-' instead if you really want to :-)\n\n> > +\t# Reinsert the first hunk header if the user accidentally deleted it\n> \n> Hmm, perhaps not even giving the \"@@ ... @@\" lines to the editor would be\n> a more robust solution?\n\nI originally left it there because Emacs automatically recounts the\nheader, and it also reminds the user of the function the hunk applies\nto.\n\n> > +\topen $fh, '| git apply --recount --cached --check';\n> \n> Have to wonder where the potential error message would go, and if it would\n> confuse the end users...\n\nTo the terminal.  If we eat that error message, the user gets\nabsolutely no indication as to _what_ might be wrong with the edited\npatch, so I kind of deliberately left it there.\n\nThen again the message from git-apply is not exactly transparent\neither.\n\n> I recall that the original \"add--interactive\" carefully counted numbers in\n> hunks it reassembles (as it can let you split and then you can choose to\n> use both parts, which requires it to merge overlapping hunks back), but if\n> you are going to use --recount anyway, perhaps we can discard that logic?\n\nWe briefly talked about that[1], but Jeff thought it should be a\nseparate patch, and I agree.  Can't sneakily rip out two dozen lines\nof otherwise unrelated code in my feature patch, can I?\n\n> It may make the patch application less robust, though.  I dunno.\n\nI've become convinced it can't, apart from making it less likely to\ntrip over bugs in the script itself of course.\n\n> An alternative, and probably more robust, approach would be to recount\n> what we have in @{$mode->{TEXT}}, after letting the user edit some of\n> them, so that \"add--interactive\" still knows what it is doing after\n> applying your patch without having to rely on \"apply --recount\".\n\nYou lost me here.  Why recount the mode part?\n\nIf you mean the _hunk_ headers, that's what the first three versions\nof this patch did, at the expense of a lot of code complication (and\nnow that git-apply implements --recount, actually _duplication_).\n\n- Thomas\n\n\n[1] http://article.gmane.org/gmane.comp.version-control.git/84698\n\n-- \nThomas Rast\ntrast@student.ethz.ch\n\n"},{"id":"81936","messageId":"20080702080200.GA21367@sigill.intra.peff.net","threadId":"12603","inReplyTo":"7v7ic4hmj5.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2008-07-02T08:02:01Z","receivedAt":"2008-07-02T08:02:01Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Tue, Jul 01, 2008 at 10:39:58PM -0700, Junio C Hamano wrote:\n\n> > +use File::Temp;\n> \n> People with minimum Perl installation should still be able to use \"add -i\"\n> as long as they do not use 'e' subcommand, shouldn't they?  Shouldn't we\n> do something like:\n> \n> \tmy $can_use_temp = eval {\n>         \trequire File::Temp;\n>                 1;\n> \t};\n> \n> and disable 'e' subcommand unless $can_use_temp?\n\nAccording to Module::CoreList, File::Temp has shipped as part of core\nperl since 5.006001. \"add -i\" doesn't work with perl < 5.6 already due to\nthings like 3-argument open.\n\nSo if the problem is \"old perl\", I don't think it is an issue. Are there\nmodern perl installations in the wild that don't have File::Temp?\n\n-Peff\n"},{"id":"81937","messageId":"7vd4lwemja.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080702080200.GA21367@sigill.intra.peff.net","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T08:08:09Z","receivedAt":"2008-07-02T08:08:09Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n> According to Module::CoreList, File::Temp has shipped as part of core\n> perl since 5.006001. \"add -i\" doesn't work with perl < 5.6 already due to\n> things like 3-argument open.\n>\n> So if the problem is \"old perl\", I don't think it is an issue. Are there\n> modern perl installations in the wild that don't have File::Temp?\n\nThe thing is, I think I heard quite similar explanation why Test::More is\nsafe to use when the patch to add t/t9700 was submit.  Then what happened?\n"},{"id":"81939","messageId":"15FB2EE9-298D-41D1-B66A-DDC786282ECB@zib.de","threadId":"12603","inReplyTo":"200806302047.56935.johannes.sixt@telecom.at","subject":"Re: How to reduce remaining differences to 4msysgit? (was What's cooking in git.git (topics))","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:31:31Z","receivedAt":"2008-07-02T08:31:31Z","isPatch":false,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jun 30, 2008, at 8:47 PM, Johannes Sixt wrote:\n\n> Then there are the extra patches in 4msysgit. From my POV, they are  \n> not\n> _required_ because I can appearently work with git on Windows  \n> without them. I\n> think some of them are not necessary. Can we go through them again?\n\n\nI'll send a patch series in reply to this mail that contains the\nfollowing patches:\n\n  [PATCH 01/12] Fake reencoding success under NO_ICONV instead of  \nreturning NULL.\n  [PATCH 02/12] Do not complain about \"no common commits\" in an empty  \nrepo\n  [PATCH 03/12] MinGW: Convert CR/LF to LF in tag signatures\n  [PATCH 04/12] Avoid calling signal(SIGPIPE, ..) for MinGW builds.\n  [PATCH 05/12] Windows(msysgit): Per default, display help as HTML in  \ndefault browser\n  [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)\n  [PATCH 07/12] Fixed text file auto-detection: treat EOF character  \n032 at the end of file as printable\n  [PATCH 08/12] fast-import: MinGW does not have getppid().  So do not  \nprint it.\n  [PATCH 09/12] We need to check for msys as well as Windows in add-- \ninteractive.\n  [PATCH 10/12] Add ANSI control code emulation for the Windows console\n  [PATCH 11/12] verify_path(): do not allow absolute paths\n  [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next\n\nThis series would bring *.{c,h,sh,perl} on Junio's next to 4msysgit/ \nnext,\nexcept for some minor differences (whitespace, comments, a workaround in\ngit-parse-remote.sh).\n\n\tSteffen\n"},{"id":"81945","messageId":"1214987532-23640-1-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"15FB2EE9-298D-41D1-B66A-DDC786282ECB@zib.de","subject":"[PATCH 01/12] Fake reencoding success under NO_ICONV instead of returning NULL.","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:01Z","receivedAt":"2008-07-02T08:32:01Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Johannes Sixt <johannes.sixt@telecom.at>\n\ngit-am when invoked from git-rebase seems to rely on successful conversion.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n utf8.c |    7 +++++++\n utf8.h |    4 ----\n 2 files changed, 7 insertions(+), 4 deletions(-)\n\ndiff --git a/utf8.c b/utf8.c\nindex dc37353..b07d43e 100644\n--- a/utf8.c\n+++ b/utf8.c\n@@ -388,4 +388,11 @@ char *reencode_string(const char *in, const char *out_encoding, const char *in_e\n \ticonv_close(conv);\n \treturn out;\n }\n+#else\n+char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding)\n+{\n+\tif (!in_encoding)\n+\t\treturn NULL;\n+\treturn xstrdup(in);\n+}\n #endif\ndiff --git a/utf8.h b/utf8.h\nindex 98cce1b..f22ef31 100644\n--- a/utf8.h\n+++ b/utf8.h\n@@ -10,10 +10,6 @@ int is_encoding_utf8(const char *name);\n \n int print_wrapped_text(const char *text, int indent, int indent2, int len);\n \n-#ifndef NO_ICONV\n char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding);\n-#else\n-#define reencode_string(a,b,c) NULL\n-#endif\n \n #endif\n-- \n1.5.6.1.255.g32571\n"},{"id":"81949","messageId":"1214987532-23640-2-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-1-git-send-email-prohaska@zib.de","subject":"[PATCH 02/12] Do not complain about \"no common commits\" in an empty repo","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:02Z","receivedAt":"2008-07-02T08:32:02Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nIf the repo is empty, we know that already, thank you very much.\nSo shut fetch-pack up about that case.\n\nFixes issue 3, too.\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n builtin-fetch-pack.c |    3 ++-\n 1 files changed, 2 insertions(+), 1 deletions(-)\n\ndiff --git a/builtin-fetch-pack.c b/builtin-fetch-pack.c\nindex f4dbcf0..2175c6d 100644\n--- a/builtin-fetch-pack.c\n+++ b/builtin-fetch-pack.c\n@@ -309,7 +309,8 @@ done:\n \t\t}\n \t\tflushes--;\n \t}\n-\treturn retval;\n+\t/* it is no error to fetch into a completely empty repo */\n+\treturn count ? retval : 0;\n }\n \n static struct commit_list *complete;\n-- \n1.5.6.1.255.g32571\n"},{"id":"81948","messageId":"1214987532-23640-3-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-2-git-send-email-prohaska@zib.de","subject":"[PATCH 03/12] MinGW: Convert CR/LF to LF in tag signatures","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:03Z","receivedAt":"2008-07-02T08:32:03Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nOn Windows, gpg outputs CR/LF signatures.  But since the tag\nmessages are already stripped of the CR by stripspace(), it is\narguably nicer to do the same for the tag signature.  Actually,\nthis patch does not look for CR/LF, but strips all CRs\nfrom the signature.\n\n[ spr: ported code to use strbuf ]\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n builtin-tag.c |   14 ++++++++++++++\n 1 files changed, 14 insertions(+), 0 deletions(-)\n\ndiff --git a/builtin-tag.c b/builtin-tag.c\nindex e675206..77977ba 100644\n--- a/builtin-tag.c\n+++ b/builtin-tag.c\n@@ -241,6 +241,20 @@ static int do_sign(struct strbuf *buffer)\n \tif (finish_command(&gpg) || !len || len < 0)\n \t\treturn error(\"gpg failed to sign the tag\");\n \n+#ifdef __MINGW32__\n+\t/* strip CR from the line endings */\n+\t{\n+\t\tint i, j;\n+\t\tfor (i = j = 0; i < buffer->len; i++)\n+\t\t\tif (buffer->buf[i] != '\\r') {\n+\t\t\t\tif (i != j)\n+\t\t\t\t\tbuffer->buf[j] = buffer->buf[i];\n+\t\t\t\tj++;\n+\t\t\t}\n+\t\tstrbuf_setlen(buffer, j);\n+\t}\n+#endif\n+\n \treturn 0;\n }\n \n-- \n1.5.6.1.255.g32571\n"},{"id":"81942","messageId":"1214987532-23640-4-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-3-git-send-email-prohaska@zib.de","subject":"[PATCH 04/12] Avoid calling signal(SIGPIPE, ..) for MinGW builds.","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:04Z","receivedAt":"2008-07-02T08:32:04Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Marius Storm-Olsen <mstormo_git@storm-olsen.com>\n\nSIGPIPE isn't supported in MinGW.\n\nSigned-off-by: Marius Storm-Olsen <mstormo_git@storm-olsen.com>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n builtin-verify-tag.c |    2 ++\n 1 files changed, 2 insertions(+), 0 deletions(-)\n\ndiff --git a/builtin-verify-tag.c b/builtin-verify-tag.c\nindex 92eaa89..540e3b9 100644\n--- a/builtin-verify-tag.c\n+++ b/builtin-verify-tag.c\n@@ -100,9 +100,11 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)\n \t\ti++;\n \t}\n \n+#ifndef __MINGW32__\n \t/* sometimes the program was terminated because this signal\n \t * was received in the process of writing the gpg input: */\n \tsignal(SIGPIPE, SIG_IGN);\n+#endif\t\n \twhile (i < argc)\n \t\tif (verify_tag(argv[i++], verbose))\n \t\t\thad_error = 1;\n-- \n1.5.6.1.255.g32571\n"},{"id":"81944","messageId":"1214987532-23640-5-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-4-git-send-email-prohaska@zib.de","subject":"[PATCH 05/12] Windows(msysgit): Per default, display help as HTML in default browser","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:05Z","receivedAt":"2008-07-02T08:32:05Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nThe implementation directly calls the Win32 API to launch the browser.\nNote that the specific directory layout of msysgit is required.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n cache.h |    2 ++\n help.c  |   28 ++++++++++++++++++++++++++++\n path.c  |   13 +++++++++++++\n 3 files changed, 43 insertions(+), 0 deletions(-)\n\ndiff --git a/cache.h b/cache.h\nindex 0d8edda..958d257 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -529,6 +529,8 @@ const char *make_nonrelative_path(const char *path);\n const char *make_relative_path(const char *abs, const char *base);\n int normalize_absolute_path(char *buf, const char *path);\n int longest_ancestor_length(const char *path, const char *prefix_list);\n+/* Convert slashes to backslashes on Windows. */\n+char *make_native_separator(char *path);\n \n /* Read and unpack a sha1 file into memory, write memory to a sha1 file */\n extern int sha1_object_info(const unsigned char *, unsigned long *);\ndiff --git a/help.c b/help.c\nindex ca9632b..811f8db 100644\n--- a/help.c\n+++ b/help.c\n@@ -9,6 +9,7 @@\n #include \"common-cmds.h\"\n #include \"parse-options.h\"\n #include \"run-command.h\"\n+#include \"dir.h\"\n \n static struct man_viewer_list {\n \tstruct man_viewer_list *next;\n@@ -28,7 +29,11 @@ enum help_format {\n };\n \n static int show_all = 0;\n+#ifdef __MINGW32__\n+static enum help_format help_format = HELP_FORMAT_WEB;\n+#else\n static enum help_format help_format = HELP_FORMAT_MAN;\n+#endif\n static struct option builtin_help_options[] = {\n \tOPT_BOOLEAN('a', \"all\", &show_all, \"print all available commands\"),\n \tOPT_SET_INT('m', \"man\", &help_format, \"show man page\", HELP_FORMAT_MAN),\n@@ -644,12 +649,35 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)\n \n static void show_html_page(const char *git_cmd)\n {\n+#ifdef __MINGW32__\n+\tconst char* exec_path = git_exec_path();\n+\tchar *htmlpath = make_native_separator(\n+\t\t\t   mkpath(\"%s/../doc/git/html/%s.html\"\n+\t\t\t\t  , exec_path\n+\t\t\t\t  , git_cmd)\n+\t\t\t );\n+\tif (!file_exists(htmlpath)) {\n+\t\thtmlpath = make_native_separator(\n+\t\t\t      mkpath(\"%s/../doc/git/html/git-%s.html\"\n+\t\t\t\t     , exec_path\n+\t\t\t\t     , git_cmd)\n+\t\t\t   );\n+\t\tif (!file_exists(htmlpath)) {\n+\t\t\tfprintf(stderr, \"Can't find HTML help for '%s'.\\n\"\n+\t\t\t\t, git_cmd);\n+\t\t\texit(1);\n+\t\t}\n+\t}\n+\tprintf(\"Launching default browser to display HTML help ...\\n\");\n+\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n+#else\n \tconst char *page = cmd_to_page(git_cmd);\n \tstruct strbuf page_path; /* it leaks but we exec bellow */\n \n \tget_html_page_path(&page_path, page);\n \n \texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", page_path.buf, NULL);\n+#endif\n }\n \n void help_unknown_cmd(const char *cmd)\ndiff --git a/path.c b/path.c\nindex 5983255..2a4a76a 100644\n--- a/path.c\n+++ b/path.c\n@@ -439,3 +439,16 @@ int longest_ancestor_length(const char *path, const char *prefix_list)\n \n \treturn max_len;\n }\n+\n+char *make_native_separator(char* path) {\n+#ifdef __MINGW32__\n+\tchar* c;\n+\tfor (c = path; *c; c++) {\n+\t\tif (*c == '/')\n+\t\t\t*c = '\\\\';\n+\t}\n+\treturn path;\n+#else\n+\treturn path;\n+#endif\n+}\n-- \n1.5.6.1.255.g32571\n"},{"id":"81952","messageId":"1214987532-23640-6-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-5-git-send-email-prohaska@zib.de","subject":"[PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:06Z","receivedAt":"2008-07-02T08:32:06Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Edward Z. Yang <edwardzyang@thewritingpot.com>\n\nPuTTY requires -P while OpenSSH requires -p; if plink is detected\nas GIT_SSH, use the alternate flag.\n\nSigned-off-by: Edward Z. Yang <edwardzyang@thewritingpot.com>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n connect.c |    4 +++-\n 1 files changed, 3 insertions(+), 1 deletions(-)\n\ndiff --git a/connect.c b/connect.c\nindex 574f42f..0d007f3 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2], const char *url_orig,\n \tconn->argv = arg = xcalloc(6, sizeof(*arg));\n \tif (protocol == PROTO_SSH) {\n \t\tconst char *ssh = getenv(\"GIT_SSH\");\n+\t\tint putty = ssh && strstr(ssh, \"plink\");\n \t\tif (!ssh) ssh = \"ssh\";\n \n \t\t*arg++ = ssh;\n \t\tif (port) {\n-\t\t\t*arg++ = \"-p\";\n+\t\t\t/* P is for PuTTY, p is for OpenSSH */\n+\t\t\t*arg++ = putty ? \"-P\" : \"-p\";\n \t\t\t*arg++ = port;\n \t\t}\n \t\t*arg++ = host;\n-- \n1.5.6.1.255.g32571\n"},{"id":"81951","messageId":"1214987532-23640-7-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-6-git-send-email-prohaska@zib.de","subject":"[PATCH 07/12] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:07Z","receivedAt":"2008-07-02T08:32:07Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n\nSigned-off-by: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n convert.c |    4 ++++\n 1 files changed, 4 insertions(+), 0 deletions(-)\n\ndiff --git a/convert.c b/convert.c\nindex 1c66844..f24ac25 100644\n--- a/convert.c\n+++ b/convert.c\n@@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *\n \t\telse\n \t\t\tstats->printable++;\n \t}\n+\n+\t// If file ends with EOF then don't count this EOF as non-printable\n+\tif ( size >= 1 && buf[size-1] == '\\032' )\n+\t\tstats->nonprintable--;\n }\n \n /*\n-- \n1.5.6.1.255.g32571\n"},{"id":"81943","messageId":"1214987532-23640-8-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-7-git-send-email-prohaska@zib.de","subject":"[PATCH 08/12] fast-import: MinGW does not have getppid(). So do not print it.","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:08Z","receivedAt":"2008-07-02T08:32:08Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n fast-import.c |    2 ++\n 1 files changed, 2 insertions(+), 0 deletions(-)\n\ndiff --git a/fast-import.c b/fast-import.c\nindex e72b286..271b93c 100644\n--- a/fast-import.c\n+++ b/fast-import.c\n@@ -391,7 +391,9 @@ static void write_crash_report(const char *err)\n \n \tfprintf(rpt, \"fast-import crash report:\\n\");\n \tfprintf(rpt, \"    fast-import process: %d\\n\", getpid());\n+#ifndef __MINGW32__\n \tfprintf(rpt, \"    parent process     : %d\\n\", getppid());\n+#endif\n \tfprintf(rpt, \"    at %s\\n\", show_date(time(NULL), 0, DATE_LOCAL));\n \tfputc('\\n', rpt);\n \n-- \n1.5.6.1.255.g32571\n"},{"id":"81946","messageId":"1214987532-23640-9-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-8-git-send-email-prohaska@zib.de","subject":"[PATCH 09/12] We need to check for msys as well as Windows in add--interactive.","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:09Z","receivedAt":"2008-07-02T08:32:09Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Mike Pape <dotzenlabs@gmail.com>\n\nSigned-off-by: Mike Pape <dotzenlabs@gmail.com>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n git-add--interactive.perl |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/git-add--interactive.perl b/git-add--interactive.perl\nindex 903953e..78a64e6 100755\n--- a/git-add--interactive.perl\n+++ b/git-add--interactive.perl\n@@ -42,7 +42,7 @@ sub colored {\n my $patch_mode;\n \n sub run_cmd_pipe {\n-\tif ($^O eq 'MSWin32') {\n+\tif ($^O eq 'MSWin32' || $^O eq 'msys') {\n \t\tmy @invalid = grep {m/[\":*]/} @_;\n \t\tdie \"$^O does not support: @invalid\\n\" if @invalid;\n \t\tmy @args = map { m/ /o ? \"\\\"$_\\\"\": $_ } @_;\n-- \n1.5.6.1.255.g32571\n"},{"id":"81947","messageId":"1214987532-23640-10-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-9-git-send-email-prohaska@zib.de","subject":"[PATCH 10/12] Add ANSI control code emulation for the Windows console","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:10Z","receivedAt":"2008-07-02T08:32:10Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Peter <git@peter.is-a-geek.org>\n\nThis adds only the minimum necessary to keep git pull/merge's diffstat from\nwrapping. Notably absent is support for the K (erase) operation, and support\nfor POSIX write.\n\nCygwin does not need the WIN_ANSI define, since it has its own (more complete)\nANSI emulation.\n\nSigned-off-by: Peter Harris <git@peter.is-a-geek.org>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n Makefile          |    6 +\n compat/winansi.c  |  309 +++++++++++++++++++++++++++++++++++++++++++++++++++++\n git-compat-util.h |    7 ++\n 3 files changed, 322 insertions(+), 0 deletions(-)\n create mode 100644 compat/winansi.c\n\ndiff --git a/Makefile b/Makefile\nindex 5914e1a..a7f2dcb 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -737,6 +737,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))\n \tNO_SVN_TESTS = YesPlease\n \tNO_PERL_MAKEMAKER = YesPlease\n \tNO_POSIX_ONLY_PROGRAMS = YesPlease\n+\tWIN_ANSI = YesPlease\n \tCOMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat\n \tCOMPAT_CFLAGS += -DSNPRINTF_SIZE_CORR=1\n \tCOMPAT_CFLAGS += -DSTRIP_EXTENSION=\\\".exe\\\"\n@@ -981,6 +982,11 @@ ifdef NO_EXTERNAL_GREP\n \tBASIC_CFLAGS += -DNO_EXTERNAL_GREP\n endif\n \n+ifdef WIN_ANSI\n+\tCOMPAT_CFLAGS += -DWIN_ANSI\n+\tCOMPAT_OBJS += compat/winansi.o\n+endif\n+\n ifeq ($(TCLTK_PATH),)\n NO_TCLTK=NoThanks\n endif\ndiff --git a/compat/winansi.c b/compat/winansi.c\nnew file mode 100644\nindex 0000000..86c3fd2\n--- /dev/null\n+++ b/compat/winansi.c\n@@ -0,0 +1,309 @@\n+#include <windows.h>\n+#include \"../git-compat-util.h\"\n+\n+/*\n+ Functions to be wrapped:\n+*/\n+#undef printf\n+#undef fputs\n+\n+/*\n+ ANSI codes to implement: m, K\n+*/\n+\n+static HANDLE console;\n+static WORD plain_attr;\n+static WORD attr;\n+static int negative;\n+\n+static void init(void)\n+{\n+    CONSOLE_SCREEN_BUFFER_INFO sbi;\n+\n+    static int initialized = 0;\n+    if (initialized)\n+\treturn;\n+\n+    console = GetStdHandle(STD_OUTPUT_HANDLE);\n+    if (console == INVALID_HANDLE_VALUE)\n+\tconsole = NULL;\n+\n+    if (!console)\n+\treturn;\n+\n+    GetConsoleScreenBufferInfo(console, &sbi);\n+    attr = plain_attr = sbi.wAttributes;\n+    negative = 0;\n+\n+    initialized = 1;\n+}\n+\n+\n+#define FOREGROUND_ALL (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)\n+#define BACKGROUND_ALL (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE)\n+\n+static void set_console_attr(void)\n+{\n+    WORD attributes = attr;\n+    if (negative) {\n+\tattributes &= ~FOREGROUND_ALL;\n+\tattributes &= ~BACKGROUND_ALL;\n+\n+\t/* This could probably use a bitmask instead of a series of ifs */\n+\tif (attr & FOREGROUND_RED)\n+\t    attributes |= BACKGROUND_RED;\n+\tif (attr & FOREGROUND_GREEN)\n+\t    attributes |= BACKGROUND_GREEN;\n+\tif (attr & FOREGROUND_BLUE)\n+\t    attributes |= BACKGROUND_BLUE;\n+\n+\tif (attr & BACKGROUND_RED)\n+\t    attributes |= FOREGROUND_RED;\n+\tif (attr & BACKGROUND_GREEN)\n+\t    attributes |= FOREGROUND_GREEN;\n+\tif (attr & BACKGROUND_BLUE)\n+\t    attributes |= FOREGROUND_BLUE;\n+    }\n+    SetConsoleTextAttribute(console, attributes);\n+}\n+\n+static const char *set_attr(const char *str)\n+{\n+    const char *func;\n+    size_t len = strspn(str, \"0123456789;\");\n+    func = str + len;\n+\n+    switch (*func) {\n+    case 'm':\n+\tdo {\n+\t    long val = strtol(str, (char **)&str, 10);\n+\t    switch (val) {\n+\t    case 0: /* reset */\n+\t\tattr = plain_attr;\n+\t\tnegative = 0;\n+\t\tbreak;\n+\t    case 1: /* bold */\n+\t\tattr |= FOREGROUND_INTENSITY;\n+\t\tbreak;\n+\t    case 2:  /* faint */\n+\t    case 22: /* normal */\n+\t\tattr &= ~FOREGROUND_INTENSITY;\n+\t\tbreak;\n+\t    case 3:  /* italic */\n+\t\t/* Unsupported */\n+\t\tbreak;\n+\t    case 4:  /* underline */\n+\t    case 21: /* double underline */\n+\t\t/* Wikipedia says this flag does nothing */\n+\t\t/* Furthermore, mingw doesn't define this flag\n+\t\tattr |= COMMON_LVB_UNDERSCORE; */\n+\t\tbreak;\n+\t    case 24: /* no underline */\n+\t\t/* attr &= ~COMMON_LVB_UNDERSCORE; */\n+\t\tbreak;\n+\t    case 5:  /* slow blink */\n+\t    case 6:  /* fast blink */\n+\t\t/* We don't have blink, but we do have background intensity */\n+\t\tattr |= BACKGROUND_INTENSITY;\n+\t\tbreak;\n+\t    case 25: /* no blink */\n+\t\tattr &= ~BACKGROUND_INTENSITY;\n+\t\tbreak;\n+\t    case 7:  /* negative */\n+\t\tnegative = 1;\n+\t\tbreak;\n+\t    case 27: /* positive */\n+\t\tnegative = 0;\n+\t\tbreak;\n+\t    case 8:  /* conceal */\n+\t    case 28: /* reveal */\n+\t\t/* Unsupported */\n+\t\tbreak;\n+\t    case 30: /* Black */\n+\t\tattr &= ~FOREGROUND_ALL;\n+\t\tbreak;\n+\t    case 31: /* Red */\n+\t\tattr &= ~FOREGROUND_ALL;\n+\t\tattr |= FOREGROUND_RED;\n+\t\tbreak;\n+\t    case 32: /* Green */\n+\t\tattr &= ~FOREGROUND_ALL;\n+\t\tattr |= FOREGROUND_GREEN;\n+\t\tbreak;\n+\t    case 33: /* Yellow */\n+\t\tattr &= ~FOREGROUND_ALL;\n+\t\tattr |= FOREGROUND_RED | FOREGROUND_GREEN;\n+\t\tbreak;\n+\t    case 34: /* Blue */\n+\t\tattr &= ~FOREGROUND_ALL;\n+\t\tattr |= FOREGROUND_BLUE;\n+\t\tbreak;\n+\t    case 35: /* Magenta */\n+\t\tattr &= ~FOREGROUND_ALL;\n+\t\tattr |= FOREGROUND_RED | FOREGROUND_BLUE;\n+\t\tbreak;\n+\t    case 36: /* Cyan */\n+\t\tattr &= ~FOREGROUND_ALL;\n+\t\tattr |= FOREGROUND_GREEN | FOREGROUND_BLUE;\n+\t\tbreak;\n+\t    case 37: /* White */\n+\t\tattr |= FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;\n+\t\tbreak;\n+\t    case 38: /* Unknown */\n+\t\tbreak;\n+\t    case 39: /* reset */\n+\t\tattr &= ~FOREGROUND_ALL;\n+\t\tattr |= (plain_attr & FOREGROUND_ALL);\n+\t\tbreak;\n+\t    case 40: /* Black */\n+\t\tattr &= ~BACKGROUND_ALL;\n+\t\tbreak;\n+\t    case 41: /* Red */\n+\t\tattr &= ~BACKGROUND_ALL;\n+\t\tattr |= BACKGROUND_RED;\n+\t\tbreak;\n+\t    case 42: /* Green */\n+\t\tattr &= ~BACKGROUND_ALL;\n+\t\tattr |= BACKGROUND_GREEN;\n+\t\tbreak;\n+\t    case 43: /* Yellow */\n+\t\tattr &= ~BACKGROUND_ALL;\n+\t\tattr |= BACKGROUND_RED | BACKGROUND_GREEN;\n+\t\tbreak;\n+\t    case 44: /* Blue */\n+\t\tattr &= ~BACKGROUND_ALL;\n+\t\tattr |= BACKGROUND_BLUE;\n+\t\tbreak;\n+\t    case 45: /* Magenta */\n+\t\tattr &= ~BACKGROUND_ALL;\n+\t\tattr |= BACKGROUND_RED | BACKGROUND_BLUE;\n+\t\tbreak;\n+\t    case 46: /* Cyan */\n+\t\tattr &= ~BACKGROUND_ALL;\n+\t\tattr |= BACKGROUND_GREEN | BACKGROUND_BLUE;\n+\t\tbreak;\n+\t    case 47: /* White */\n+\t\tattr |= BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE;\n+\t\tbreak;\n+\t    case 48: /* Unknown */\n+\t\tbreak;\n+\t    case 49: /* reset */\n+\t\tattr &= ~BACKGROUND_ALL;\n+\t\tattr |= (plain_attr & BACKGROUND_ALL);\n+\t\tbreak;\n+\t    default:\n+\t\t/* Unsupported code */\n+\t\tbreak;\n+\t    }\n+\t    str++;\n+\t} while (*(str-1) == ';');\n+\n+\tset_console_attr();\n+\tbreak;\n+    case 'K':\n+\t/* TODO */\n+\tbreak;\n+    default:\n+\t/* Unsupported code */\n+\tbreak;\n+    }\n+\n+    return func + 1;\n+}\n+\n+static int ansi_emulate(const char *str, FILE *stream)\n+{\n+    int rv = 0;\n+    const char *pos = str;\n+\n+    while (*pos) {\n+\tpos = strstr(str, \"\\033[\");\n+\tif (pos) {\n+\t    size_t len = pos - str;\n+\n+\t    if (len) {\n+\t\tsize_t output_len = fwrite(str, 1, len, stream);\n+\t\trv += output_len;\n+\t\tif (output_len < len)\n+\t\t    return rv;\n+\t    }\n+\n+\t    str = pos + 2;\n+\t    rv += 2;\n+\n+\t    fflush(stream);\n+\n+\t    pos = set_attr(str);\n+\t    rv += pos - str;\n+\t    str = pos;\n+\t} else {\n+\t    rv += strlen(str);\n+\t    fputs(str, stream);\n+\t    return rv;\n+\t}\n+    }\n+    return rv;\n+}\n+\n+int git_fputs(const char *str, FILE *stream)\n+{\n+    int rv;\n+\n+    init();\n+\n+    if (!console)\n+\treturn fputs(str, stream);\n+\n+    if (!isatty(fileno(stream)))\n+\treturn fputs(str, stream);\n+\n+    rv = ansi_emulate(str, stream);\n+\n+    if (rv >= 0)\n+\treturn 0;\n+    else\n+\treturn EOF;\n+}\n+\n+int git_printf(const char *format, ...)\n+{\n+    va_list list;\n+\n+    char small_buf[256];\n+    char *buf = small_buf;\n+    int len, rv;\n+\n+    init();\n+\n+    if (!console)\n+\tgoto abort;\n+\n+    if (!isatty(fileno(stdout)))\n+\tgoto abort;\n+\n+    va_start(list, format);\n+    len = vsnprintf(small_buf, sizeof(small_buf), format, list);\n+    va_end(list);\n+\n+    if (len > sizeof(small_buf) - 1) {\n+\tbuf = malloc(len + 1);\n+\tif (!buf)\n+\t    goto abort;\n+\n+\tva_start(list, format);\n+\tlen = vsnprintf(buf, len + 1, format, list);\n+\tva_end(list);\n+    }\n+\n+    rv = ansi_emulate(buf, stdout);\n+\n+    if (buf != small_buf)\n+\tfree(buf);\n+    return rv;\n+\n+abort:\n+    va_start(list, format);\n+    rv = vprintf(format, list);\n+    va_end(list);\n+    return rv;\n+}\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex 545df59..fc5168e 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -357,4 +357,11 @@ void git_qsort(void *base, size_t nmemb, size_t size,\n # define FORCE_DIR_SET_GID 0\n #endif\n \n+#ifdef WIN_ANSI\n+extern int git_fputs(const char *str, FILE *stream);\n+extern int git_printf(const char *format, ...) __attribute__((format (printf, 1, 2)));\n+#define fputs git_fputs\n+#define printf(...) git_printf(__VA_ARGS__)\n+#endif\n+\n #endif\n-- \n1.5.6.1.255.g32571\n"},{"id":"81950","messageId":"1214987532-23640-11-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-10-git-send-email-prohaska@zib.de","subject":"[PATCH 11/12] verify_path(): do not allow absolute paths","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:11Z","receivedAt":"2008-07-02T08:32:11Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n read-cache.c |    5 +++++\n 1 files changed, 5 insertions(+), 0 deletions(-)\n\ndiff --git a/read-cache.c b/read-cache.c\nindex f83de8c..cb130ef 100644\n--- a/read-cache.c\n+++ b/read-cache.c\n@@ -650,6 +650,11 @@ int verify_path(const char *path)\n {\n \tchar c;\n \n+#ifdef __MINGW32__\n+\tif (is_absolute_path(path))\n+\t\treturn error(\"Cannot handle absolute path: %s\", path);\n+#endif\n+\n \tgoto inside;\n \tfor (;;) {\n \t\tif (!c)\n-- \n1.5.6.1.255.g32571\n"},{"id":"81941","messageId":"1214987532-23640-12-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1214987532-23640-11-git-send-email-prohaska@zib.de","subject":"[PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T08:32:12Z","receivedAt":"2008-07-02T08:32:12Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nFrom: Johannes Sixt <johannes.sixt@telecom.at>\n\nHannes,\nYou introduced \"minoffset\" in 861429a7c37c7.  Here is your original\nmessage:\n\n'''\nAn earlier patch has implemented getcwd() so that it converts the\ndrive letter into the POSIX-like path that is used internally by\nMinGW (C:\\foo => /c/foo), but this style does not work outside\nthe MinGW shell. It is better to just convert the backslashes\nto forward slashes and handle the drive letter explicitly.\n'''\n\nDmitry replaced setenv() with set_git_dir in 855f254b2b5b08.\nHere is his original message:\n\n'''\ngit clone was failing with 'invalid object name HEAD' if ran from\ncmd.exe directly\n\nenvironment.c caches results of many getenv calls.\nUnder MinGW setenv(X) invalidates all previous values returned by\ngetenv(X)\nso cached values become dangling pointers.\n\nReplaced all setenv(GIT_DIR, ...) with set_git_dir\n\nSigned-off-by: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n'''\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n setup.c |    7 +++++--\n 1 files changed, 5 insertions(+), 2 deletions(-)\n\ndiff --git a/setup.c b/setup.c\nindex 6cf9094..1fd30c4 100644\n--- a/setup.c\n+++ b/setup.c\n@@ -381,6 +381,7 @@ const char *setup_git_directory_gently(int *nongit_ok)\n \tconst char *gitdirenv;\n \tconst char *gitfile_dir;\n \tint len, offset, ceil_offset;\n+\tint minoffset = 0;\n \n \t/*\n \t * Let's assume that we are in a git repository.\n@@ -431,6 +432,8 @@ const char *setup_git_directory_gently(int *nongit_ok)\n \n \tif (!getcwd(cwd, sizeof(cwd)-1))\n \t\tdie(\"Unable to read current working directory\");\n+\tif (has_dos_drive_prefix(cwd))\n+\t\tminoffset = 2;\n \n \tceil_offset = longest_ancestor_length(cwd, env_ceiling_dirs);\n \tif (ceil_offset < 0 && has_dos_drive_prefix(cwd))\n@@ -461,11 +464,11 @@ const char *setup_git_directory_gently(int *nongit_ok)\n \t\t\tinside_git_dir = 1;\n \t\t\tif (!work_tree_env)\n \t\t\t\tinside_work_tree = 0;\n-\t\t\tsetenv(GIT_DIR_ENVIRONMENT, \".\", 1);\n+\t\t\tset_git_dir(\".\");\n \t\t\tcheck_repository_format_gently(nongit_ok);\n \t\t\treturn NULL;\n \t\t}\n-\t\twhile (--offset > ceil_offset && cwd[offset] != '/');\n+\t\twhile (offset > minoffset && --offset > ceil_offset && cwd[offset] != '/');\n \t\tif (offset <= ceil_offset) {\n \t\t\tif (nongit_ok) {\n \t\t\t\tif (chdir(cwd))\n-- \n1.5.6.1.255.g32571\n"},{"id":"81940","messageId":"20080702083214.GA22301@sigill.intra.peff.net","threadId":"12603","inReplyTo":"7vd4lwemja.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2008-07-02T08:32:14Z","receivedAt":"2008-07-02T08:32:14Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Wed, Jul 02, 2008 at 01:08:09AM -0700, Junio C Hamano wrote:\n\n> > So if the problem is \"old perl\", I don't think it is an issue. Are there\n> > modern perl installations in the wild that don't have File::Temp?\n> \n> The thing is, I think I heard quite similar explanation why Test::More is\n> safe to use when the patch to add t/t9700 was submit.  Then what happened?\n\nISTR the Test::More problem was reported by Linus, who is a Fedora user?\nI tried searching for any reasonable information on which of the core\nperl modules are installed by default on Fedora systems, but didn't come\nup with anything useful.\n\nI really have no clue as to what is out there, and I suspect we must\neither play it totally safe, or push the limits and wait for people to\ncomplain about breakage.\n\n-Peff\n"},{"id":"81954","messageId":"7v1w2cel4u.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"200807020900.28690.trast@student.ethz.ch","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T08:38:25Z","receivedAt":"2008-07-02T08:38:25Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thomas Rast <trast@student.ethz.ch> writes:\n\n> Junio C Hamano wrote:\n> ...\n>> > +# To remove '-' lines, make them ' ' lines (context).\n>> > +# To remove '+' lines, delete them.\n>> > +# Lines starting with # will be removed.\n>> \n>> Don't you want to say \"Do not touch lines that begin with ' '\"?\n>\n> Why?  You can make them '-' instead if you really want to :-)\n\nIf you change '-' to ' ', or remove '+', then you are temporarily\nreverting the change you have made since HEAD to your working tree copy.\nIf you do not change anything, you are taking something that was in your\nworking tree copy.  Both are simpler and easier to explain operations.\n\nOnce you allow changing ' ' to '-' or insert '+' at random places,\nhowever, you are letting the user commit lines that is neither from HEAD\nnor from the working tree.\n\nIf the goal of \"e\" action in \"add -i\" is to support that operation (I am\nnot saying that it is a bad thing to support), you have to deal with an\nissue that your patch so far did not have to deal with, and it would\nrequire a much larger change to the way how \"add -i\" is structured.\n\nWhen you give the user a hunk like this to edit:\n\n  @@ -4,9 +4,6 @@ GIT v1.6.0 Release Notes\n   User visible changes\n   --------------------\n\n  -[[Note that none of these are not merged to 'master' as of this writing\n  -but they will be before 1.6.0 happens]]\n  -\n   With the default Makefile settings, most of the programs are now\n   installed outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\n   some server side programs that need to be accessible for technical\n\nthe user may want to change the line before the line that has \"User\nvisible changes\", or the lines toward the end of the hunk. The user may\nwant to edit the line that ends with \"for technical\" for rewording the\nsentence, but the rest of the sentence is outside the context, and these\nlines somehow needs to be summoned to the editing session for completing\nthe updated sentence.  In order to support that, you need to be able to\nextend the context on demand in either direction, beyond the original \"git\ndiff\" output you captured in $hunk[$i]{TEXT} (sorry, I misspelled this as\n$mode->{TEXT} in the previous message).\n\nOnce you start to do that, you would need to worry about the case where\nthe hunk extended to include later lines overlaps with the hunk after the\none we are currently looking at, and run coalesce_overlapping_hunks to\nconcatenate them into a larger single hunk.  But to be able to do that,\nyou would need to keep track of the number of lines in a hunk yourself\nanyway, which would mean that you cannot rely on --recount anymore.  The\nextension recently made to \"git apply\" becomes redundant and unused code.\n\nIn short, declaring that you are supporting the use to change ' ' to '-'\nmeans you are opening a whole can of worms, and I asked the question\nbecause I did not know if you are really prepared to deal with it.\n"},{"id":"81956","messageId":"7vskusd5nr.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214987532-23640-2-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 02/12] Do not complain about \"no common commits\" in an empty repo","fromName":"Junio C Hamano","fromEmail":"junio@pobox.com","sentAt":"2008-07-02T08:58:00Z","receivedAt":"2008-07-02T08:58:00Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\nSteffen Prohaska <prohaska@zib.de> writes:\n\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n>\n> If the repo is empty, we know that already, thank you very much.\n> So shut fetch-pack up about that case.\n\nTwo complaints.\n\n * What does this have to do with Windows port?  Please don't hide a\n   general interface change in a larger and mostly unrelated topic.\n\n * Do you think people can tell without reading the code in larger context\n   outside the patch and this commit log text if you are talking about the\n   case you fetch _into_ an empty repository, or if you are attempting to\n   fetch _from_ an empty repository, or what?  Please try to be a bit\n   easier for _readers_.  Being more redundant and verbose is better than\n   being too concise.\n\nAbout the first point, \"no common commits\" is just a friendly reminder and\nnot even an error.  When you see it, you will learn to expect looooooooong\ndownload session.\n\nI personally happen to agree with the logic of this patch, though --- if\nyou are fetching into an empty repository, you would already expect that\nthe download is as big as the other end anyway, so you would not need to\nbe further reminded about that.\n\nBut that is just one-man's opinion.  Maybe somebody knows a reason why I\nam (and the logic I am agreeing with is) wrong.  Maybe not.  So make the\n\"remainder of Windows port\" series 11 commits, and send this as a general\ninterface fix via the normal channel to be discussed, please.\n"},{"id":"81959","messageId":"7vej6cd50v.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214987532-23640-5-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 05/12] Windows(msysgit): Per default, display help as HTML in default browser","fromName":"Junio C Hamano","fromEmail":"junio@pobox.com","sentAt":"2008-07-02T09:11:44Z","receivedAt":"2008-07-02T09:11:44Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Steffen Prohaska <prohaska@zib.de> writes:\n\n> +/* Convert slashes to backslashes on Windows. */\n> +char *make_native_separator(char *path);\n\nMakes one onder why it is not inside #ifdef, but presumably it is no-op on\nother platforms (which is fine, better than fine)?\n\n>  static int show_all = 0;\n> +#ifdef __MINGW32__\n> +static enum help_format help_format = HELP_FORMAT_WEB;\n> +#else\n>  static enum help_format help_format = HELP_FORMAT_MAN;\n> +#endif\n\nThat's Ugly isn't it?  Can't you do this with Makefile macro without\n#ifdef please?\n\n> @@ -644,12 +649,35 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)\n>  \n>  static void show_html_page(const char *git_cmd)\n>  {\n> +#ifdef __MINGW32__\n> +\tconst char* exec_path = git_exec_path();\n> +\tchar *htmlpath = make_native_separator(\n> +\t\t\t   mkpath(\"%s/../doc/git/html/%s.html\"\n> +\t\t\t\t  , exec_path\n> +\t\t\t\t  , git_cmd)\n> +\t\t\t );\n> +\tif (!file_exists(htmlpath)) {\n> +\t\thtmlpath = make_native_separator(\n> +\t\t\t      mkpath(\"%s/../doc/git/html/git-%s.html\"\n> +\t\t\t\t     , exec_path\n> +\t\t\t\t     , git_cmd)\n> +\t\t\t   );\n> +\t\tif (!file_exists(htmlpath)) {\n> +\t\t\tfprintf(stderr, \"Can't find HTML help for '%s'.\\n\"\n> +\t\t\t\t, git_cmd);\n> +\t\t\texit(1);\n> +\t\t}\n> +\t}\n> +\tprintf(\"Launching default browser to display HTML help ...\\n\");\n> +\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n> +#else\n>  \tconst char *page = cmd_to_page(git_cmd);\n>  \tstruct strbuf page_path; /* it leaks but we exec bellow */\n>  \n>  \tget_html_page_path(&page_path, page);\n>  \n>  \texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", page_path.buf, NULL);\n> +#endif\n>  }\n\nHmm.  The above almost makes me barf and suggest making them two totally\nseparate functions (i.e. introduce a new \"show_html_page_on_windows()\"\nfunction and do not bother us Unix folks ;-).\n\nBut I suspect your code is not beyond salvaging.  Why is the htmlpath\ncomputed by hand in this function, instead of having the port specific\nimplementation hidden inside get_html_page_path() function?\n\nAbout the execution part, isn't it the matter of using \"open\" (whatever\nthat is) as one of the supported backend for web--browse to unify these\ntwo independent case arms?\n"},{"id":"81960","messageId":"7vabh0d4t9.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214987532-23640-7-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 07/12] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable","fromName":"Junio C Hamano","fromEmail":"junio@pobox.com","sentAt":"2008-07-02T09:16:18Z","receivedAt":"2008-07-02T09:16:18Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Steffen Prohaska <prohaska@zib.de> writes:\n\n> From: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n>\n> Signed-off-by: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> ---\n>  convert.c |    4 ++++\n>  1 files changed, 4 insertions(+), 0 deletions(-)\n>\n> diff --git a/convert.c b/convert.c\n> index 1c66844..f24ac25 100644\n> --- a/convert.c\n> +++ b/convert.c\n> @@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *\n>  \t\telse\n>  \t\t\tstats->printable++;\n>  \t}\n> +\n> +\t// If file ends with EOF then don't count this EOF as non-printable\n> +\tif ( size >= 1 && buf[size-1] == '\\032' )\n> +\t\tstats->nonprintable--;\n\nStyle.\n\nI debated for 5 seconds with myself if this should be inside #ifdef, but\ndoing this everywhere would give us reproducibility --- otherwise the\nresulting project won't be cross platform, so I think the intention of\nthis change is good.\n"},{"id":"81961","messageId":"7vzlp0bq2l.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214987532-23640-8-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 08/12] fast-import: MinGW does not have getppid(). So do not print it.","fromName":"Junio C Hamano","fromEmail":"junio@pobox.com","sentAt":"2008-07-02T09:20:02Z","receivedAt":"2008-07-02T09:20:02Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Steffen Prohaska <prohaska@zib.de> writes:\n\n> diff --git a/fast-import.c b/fast-import.c\n> index e72b286..271b93c 100644\n> --- a/fast-import.c\n> +++ b/fast-import.c\n> @@ -391,7 +391,9 @@ static void write_crash_report(const char *err)\n>  \n>  \tfprintf(rpt, \"fast-import crash report:\\n\");\n>  \tfprintf(rpt, \"    fast-import process: %d\\n\", getpid());\n> +#ifndef __MINGW32__\n>  \tfprintf(rpt, \"    parent process     : %d\\n\", getppid());\n> +#endif\n>  \tfprintf(rpt, \"    at %s\\n\", show_date(time(NULL), 0, DATE_LOCAL));\n>  \tfputc('\\n', rpt);\n>  \n> -- \n> 1.5.6.1.255.g32571\n\nIt does not matter too much for this part that writes crash report, but\nkeeping the file format the same across platforms will make it easier for\ntools to read output, so as a general principle, I think this is a\nsuboptimal solution to the issue.  How about throwing something like this\nin MinGW specific header files?\n\n        #define getppid() 0\n"},{"id":"81962","messageId":"7vvdzobq0k.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214987532-23640-11-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 11/12] verify_path(): do not allow absolute paths","fromName":"Junio C Hamano","fromEmail":"junio@pobox.com","sentAt":"2008-07-02T09:21:15Z","receivedAt":"2008-07-02T09:21:15Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\nSteffen Prohaska <prohaska@zib.de> writes:\n\n> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n\nNo commit log message?  Justification?\n"},{"id":"81963","messageId":"7vod5gbpza.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1214987532-23640-4-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 04/12] Avoid calling signal(SIGPIPE, ..) for MinGW builds.","fromName":"Junio C Hamano","fromEmail":"junio@pobox.com","sentAt":"2008-07-02T09:22:01Z","receivedAt":"2008-07-02T09:22:01Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Steffen Prohaska <prohaska@zib.de> writes:\n\n> From: Marius Storm-Olsen <mstormo_git@storm-olsen.com>\n>\n> SIGPIPE isn't supported in MinGW.\n\nShouldn't #ifdef be on SIGPIPE not on __MINGW32__?\n\n> @@ -100,9 +100,11 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)\n>  \t\ti++;\n>  \t}\n>  \n> +#ifndef __MINGW32__\n>  \t/* sometimes the program was terminated because this signal\n>  \t * was received in the process of writing the gpg input: */\n>  \tsignal(SIGPIPE, SIG_IGN);\n> +#endif\t\n"},{"id":"81965","messageId":"486B5263.1060805@storm-olsen.com","threadId":"12603","inReplyTo":"7vod5gbpza.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 04/12] Avoid calling signal(SIGPIPE, ..) for MinGW builds.","fromName":"Marius Storm-Olsen","fromEmail":"marius@storm-olsen.com","sentAt":"2008-07-02T10:03:15Z","receivedAt":"2008-07-02T10:03:15Z","isPatch":true,"sender":{"key":"marius@storm-olsen.com","avatar":"https://avatars.githubusercontent.com/u/1500?v=4"},"body":"Junio C Hamano said the following on 02.07.2008 11:22:\n> Steffen Prohaska <prohaska@zib.de> writes:\n> \n>> From: Marius Storm-Olsen <mstormo_git@storm-olsen.com>\n>>\n>> SIGPIPE isn't supported in MinGW.\n> \n> Shouldn't #ifdef be on SIGPIPE not on __MINGW32__?\n\nThat's certainly a good suggestion. :-)\n\n-- \n.marius [@] storm-olsen [.com]\n'if you know what you're doing, it's not research'\n\n"},{"id":"81966","messageId":"20080702195947.6117@nanako3.lavabit.com","threadId":"12603","inReplyTo":"7vskuuoygp.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Disconnect stash from its base commit","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2008-07-02T10:59:47Z","receivedAt":"2008-07-02T10:59:47Z","isPatch":true,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"A stash records the state of the files in the working tree as a merge\nbetween the HEAD and another commit that records the state of the index,\nthat in turn is a child commit of the HEAD commit.  In order to later\napply (or pop) the stash, however, only the tree objects of these three\ncommits are necessary.\n\nThis patch changes the structure of a stash to use a parentless new commit\nthat has the same tree as the HEAD commit, in place of the HEAD commit.\nThis way, a stash does not keep the history that leads to the HEAD commit\nreachable, even if the stash is kept forever.\n\nSigned-off-by: Nanako Shiraishi <nanako3@lavabit.com>\n---\n\n The patch in the message Olivier quoted alone will be insufficient.  This\n is an update to that patch.\n\n Documentation/git-stash.txt |   14 +++++++-------\n git-stash.sh                |    3 +++\n t/t3903-stash.sh            |    2 +-\n 3 files changed, 11 insertions(+), 8 deletions(-)\n\ndiff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt\nindex 23ac331..17c65e9 100644\n--- a/Documentation/git-stash.txt\n+++ b/Documentation/git-stash.txt\n@@ -101,18 +101,18 @@ DISCUSSION\n ----------\n \n A stash is represented as a commit whose tree records the state of the\n-working directory, and its first parent is the commit at `HEAD` when\n-the stash was created.  The tree of the second parent records the\n+working directory, and its first parent is the commit that has the same\n+tree as the `HEAD`.  The tree of the second parent records the\n state of the index when the stash is made, and it is made a child of\n-the `HEAD` commit.  The ancestry graph looks like this:\n+the first commit.  The ancestry graph looks like this:\n \n             .----W\n            /    /\n-     -----H----I\n+\t  H*---I\n \n-where `H` is the `HEAD` commit, `I` is a commit that records the state\n-of the index, and `W` is a commit that records the state of the working\n-tree.\n+where `H{asterisk}` is a commit with the same tree as the `HEAD`, `I` is\n+a commit that records the state of the index, and `W` is a commit that\n+records the state of the working tree.\n \n \n EXAMPLES\ndiff --git a/git-stash.sh b/git-stash.sh\nindex 4938ade..8f374b3 100755\n--- a/git-stash.sh\n+++ b/git-stash.sh\n@@ -54,6 +54,9 @@ create_stash () {\n \tfi\n \tmsg=$(printf '%s: %s' \"$branch\" \"$head\")\n \n+\t# create the base commit that is parentless\n+\tb_commit=$(printf 'base of %s\\n' \"$msg\" | git commit-tree \"HEAD:\")\n+\n \t# state of the index\n \ti_tree=$(git write-tree) &&\n \ti_commit=$(printf 'index on %s\\n' \"$msg\" |\ndiff --git a/t/t3903-stash.sh b/t/t3903-stash.sh\nindex 54d99ed..b083c04 100755\n--- a/t/t3903-stash.sh\n+++ b/t/t3903-stash.sh\n@@ -32,7 +32,7 @@ index 0cfbf08..00750ed 100644\n EOF\n \n test_expect_success 'parents of stash' '\n-\ttest $(git rev-parse stash^) = $(git rev-parse HEAD) &&\n+\ttest $(git rev-parse stash^^{tree}) = $(git rev-parse HEAD^{tree}) &&\n \tgit diff stash^2..stash > output &&\n \ttest_cmp output expect\n '\n-- \n1.5.6\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"81969","messageId":"alpine.DEB.1.00.0807021412300.9925@racer","threadId":"12603","inReplyTo":"20080702083214.GA22301@sigill.intra.peff.net","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-02T13:13:53Z","receivedAt":"2008-07-02T13:13:53Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 2 Jul 2008, Jeff King wrote:\n\n> On Wed, Jul 02, 2008 at 01:08:09AM -0700, Junio C Hamano wrote:\n> \n> > > So if the problem is \"old perl\", I don't think it is an issue. Are \n> > > there modern perl installations in the wild that don't have \n> > > File::Temp?\n> > \n> > The thing is, I think I heard quite similar explanation why Test::More \n> > is safe to use when the patch to add t/t9700 was submit.  Then what \n> > happened?\n> \n> ISTR the Test::More problem was reported by Linus, who is a Fedora user? \n> I tried searching for any reasonable information on which of the core \n> perl modules are installed by default on Fedora systems, but didn't come \n> up with anything useful.\n> \n> I really have no clue as to what is out there, and I suspect we must \n> either play it totally safe, or push the limits and wait for people to \n> complain about breakage.\n\nI wonder why bother trying to import things when you do not need them to \nbegin with!  I mean, it is _obvious_ that in this case, we want .git/ to \nbe writable _anyway_, so why not stick with a fixed name in that?\n\nCiao,\nDscho\n"},{"id":"81976","messageId":"alpine.DEB.1.00.0807021447200.9925@racer","threadId":"12603","inReplyTo":"20080702195947.6117@nanako3.lavabit.com","subject":"Re: [PATCH] Disconnect stash from its base commit","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-02T13:51:34Z","receivedAt":"2008-07-02T13:51:34Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 2 Jul 2008, Nanako Shiraishi wrote:\n\n> A stash records the state of the files in the working tree as a merge \n> between the HEAD and another commit that records the state of the index, \n> that in turn is a child commit of the HEAD commit.  In order to later \n> apply (or pop) the stash, however, only the tree objects of these three \n> commits are necessary.\n> \n> This patch changes the structure of a stash to use a parentless new \n> commit that has the same tree as the HEAD commit, in place of the HEAD \n> commit. This way, a stash does not keep the history that leads to the \n> HEAD commit reachable, even if the stash is kept forever.\n\nMay I register my suspicion that this is the wrong direction to go?\n\nI actually find it quite nice that I can easily see in gitk where I \nspawned off a certain stash, indeed, how the recent stash history \n(manually specified with \"stash@{0} stash@{1} stash@{2}\" [*1*]), relates \nto the current branch's history.\n\nCiao,\nDscho\n\nP.S.: I vaguely remember that I once wrote a patch to turn \"stash@{0..2}\" \ninto exactly the same, but I do not remember why I did not follow up on \nit.  Was it refuted, or unwanted?\n"},{"id":"81977","messageId":"FCE9D8BE-BA1A-46D1-AC45-2DC4E419DE8E@zib.de","threadId":"12603","inReplyTo":"7vskusd5nr.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 02/12] Do not complain about \"no common commits\" in an empty repo","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T14:04:33Z","receivedAt":"2008-07-02T14:04:33Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Jul 2, 2008, at 10:58 AM, Junio C Hamano wrote:\n\n> Steffen Prohaska <prohaska@zib.de> writes:\n>\n>> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n>>\n>> If the repo is empty, we know that already, thank you very much.\n>> So shut fetch-pack up about that case.\n>\n> Two complaints.\n\nYou are right, although I didn't intend to \"hide\" the patch.  I just\nwent through the differences between the mainline and 4msysgit and\ncollected a patch series with all changes I found.  I sent this series\nto the list, so that the remaining differences do not get lost\nunrecognized.\n\nI didn't mean to bother you with incomplete patches.  Maybe I should\nhave made my intention clearer by prefixing the subject lines with\nWIP (or something similar).  Apologies.\n\n\n> * What does this have to do with Windows port?  Please don't hide a\n>   general interface change in a larger and mostly unrelated topic.\n\nI remember that users of msysgit's net installer complaint about this\nwarning.  The warning appeared as part of the output of a sequence of\nautomatically executed commands.  Without context, the users did not\nunderstand what the warning means.\n\n\n> * Do you think people can tell without reading the code in larger  \n> context\n>   outside the patch and this commit log text if you are talking  \n> about the\n>   case you fetch _into_ an empty repository, or if you are  \n> attempting to\n>   fetch _from_ an empty repository, or what?  Please try to be a bit\n>   easier for _readers_.  Being more redundant and verbose is better  \n> than\n>   being too concise.\n>\n> About the first point, \"no common commits\" is just a friendly  \n> reminder and\n> not even an error.  When you see it, you will learn to expect  \n> looooooooong\n> download session.\n>\n> I personally happen to agree with the logic of this patch, though  \n> --- if\n> you are fetching into an empty repository, you would already expect  \n> that\n> the download is as big as the other end anyway, so you would not  \n> need to\n> be further reminded about that.\n>\n> But that is just one-man's opinion.  Maybe somebody knows a reason  \n> why I\n> am (and the logic I am agreeing with is) wrong.  Maybe not.  So make  \n> the\n> \"remainder of Windows port\" series 11 commits, and send this as a  \n> general\n> interface fix via the normal channel to be discussed, please.\n\n\nDscho, will you send it?  You are the original author.\n\t\n\tSteffen\n"},{"id":"81979","messageId":"A1D7E098-B5FD-42F6-8EAD-8AACF0B8D764@zib.de","threadId":"12603","inReplyTo":"7vzlp0bq2l.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 08/12] fast-import: MinGW does not have getppid(). So do not print it.","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T14:22:02Z","receivedAt":"2008-07-02T14:22:02Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jul 2, 2008, at 11:20 AM, Junio C Hamano wrote:\n\n> Steffen Prohaska <prohaska@zib.de> writes:\n>\n>> diff --git a/fast-import.c b/fast-import.c\n>> index e72b286..271b93c 100644\n>> --- a/fast-import.c\n>> +++ b/fast-import.c\n>> @@ -391,7 +391,9 @@ static void write_crash_report(const char *err)\n>>\n>> \tfprintf(rpt, \"fast-import crash report:\\n\");\n>> \tfprintf(rpt, \"    fast-import process: %d\\n\", getpid());\n>> +#ifndef __MINGW32__\n>> \tfprintf(rpt, \"    parent process     : %d\\n\", getppid());\n>> +#endif\n>> \tfprintf(rpt, \"    at %s\\n\", show_date(time(NULL), 0, DATE_LOCAL));\n>> \tfputc('\\n', rpt);\n>>\n>> --  \n>> 1.5.6.1.255.g32571\n>\n> It does not matter too much for this part that writes crash report,  \n> but\n> keeping the file format the same across platforms will make it  \n> easier for\n> tools to read output, so as a general principle, I think this is a\n> suboptimal solution to the issue.  How about throwing something like  \n> this\n> in MinGW specific header files?\n>\n>        #define getppid() 0\n\nHannes added something similar to the compat layer, so this commit\nis no longer needed.  I'll remove it from the series and revert it\nin 4msysgit.\n\n\tSteffen\n"},{"id":"81980","messageId":"A0293E2B-5EED-4D4C-BAF1-AC3A149EF094@zib.de","threadId":"12603","inReplyTo":"7vvdzobq0k.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 11/12] verify_path(): do not allow absolute paths","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T14:24:40Z","receivedAt":"2008-07-02T14:24:40Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jul 2, 2008, at 11:21 AM, Junio C Hamano wrote:\n\n> Steffen Prohaska <prohaska@zib.de> writes:\n>\n>> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n>> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n>\n> No commit log message?  Justification?\n\nHannes,\nDo we still need this change in verify_path().  I am not sure.\nMaybe it should be reverted in 4msysgit?\n\n\tSteffen\n"},{"id":"81981","messageId":"43A38130-39B6-41C8-B57E-A4405476CA34@zib.de","threadId":"12603","inReplyTo":"486B5263.1060805@storm-olsen.com","subject":"Re: [PATCH 04/12] Avoid calling signal(SIGPIPE, ..) for MinGW builds.","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T14:29:09Z","receivedAt":"2008-07-02T14:29:09Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jul 2, 2008, at 12:03 PM, Marius Storm-Olsen wrote:\n\n> Junio C Hamano said the following on 02.07.2008 11:22:\n>> Steffen Prohaska <prohaska@zib.de> writes:\n>>> From: Marius Storm-Olsen <mstormo_git@storm-olsen.com>\n>>>\n>>> SIGPIPE isn't supported in MinGW.\n>> Shouldn't #ifdef be on SIGPIPE not on __MINGW32__?\n>\n> That's certainly a good suggestion. :-)\n\nI reverted this in 4msysgit and will remove the patch from the\nseries.\n\n\tSteffen\n"},{"id":"81992","messageId":"alpine.DEB.1.00.0807021713290.9925@racer","threadId":"12603","inReplyTo":"7vvdzobq0k.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 11/12] verify_path(): do not allow absolute paths","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-02T16:15:29Z","receivedAt":"2008-07-02T16:15:29Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 2 Jul 2008, Junio C Hamano wrote:\n\n> Steffen Prohaska <prohaska@zib.de> writes:\n> \n> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> > Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> \n> No commit log message?  Justification?\n\nJustification: adding absolute paths was not caught properly on Windows, \nand this was the easiest patch.\n\nHowever, IIRC, in the meantime we are nice to the user, and allow absolute \npaths (which we turn into a relative path, or error out if it is not under \nthe current working directory).\n\nSteffen, can you revert the patch and verify that my memory does not fail \nme?\n\nCiao,\nDscho\n"},{"id":"81993","messageId":"alpine.DEB.1.00.0807021716030.9925@racer","threadId":"12603","inReplyTo":"1214987532-23640-12-git-send-email-prohaska@zib.de","subject":"Re: [msysGit] [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-02T16:17:10Z","receivedAt":"2008-07-02T16:17:10Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Wed, 2 Jul 2008, Steffen Prohaska wrote:\n\n> \n> From: Johannes Sixt <johannes.sixt@telecom.at>\n> \n> Hannes,\n> You introduced \"minoffset\" in 861429a7c37c7.\n\nAFAICT it was redone differently in 'next', because 'next' has this \nceiling dir thingie, which allows a different (much smaller) patch.\n\nIt might be more sensible to base your patch series on 'next'...\n\nCiao,\nDscho\n"},{"id":"81998","messageId":"alpine.DEB.1.00.0807021741210.9925@racer","threadId":"12603","inReplyTo":"7vzlp0bq2l.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 08/12] fast-import: MinGW does not have getppid(). So do not print it.","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-02T16:52:42Z","receivedAt":"2008-07-02T16:52:42Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"\nHi,\n\nOn Wed, 2 Jul 2008, Junio C Hamano wrote:\n\n> Steffen Prohaska <prohaska@zib.de> writes:\n> \n> > diff --git a/fast-import.c b/fast-import.c\n> > index e72b286..271b93c 100644\n> > --- a/fast-import.c\n> > +++ b/fast-import.c\n> > @@ -391,7 +391,9 @@ static void write_crash_report(const char *err)\n> >  \n> >  \tfprintf(rpt, \"fast-import crash report:\\n\");\n> >  \tfprintf(rpt, \"    fast-import process: %d\\n\", getpid());\n> > +#ifndef __MINGW32__\n> >  \tfprintf(rpt, \"    parent process     : %d\\n\", getppid());\n> > +#endif\n> >  \tfprintf(rpt, \"    at %s\\n\", show_date(time(NULL), 0, DATE_LOCAL));\n> >  \tfputc('\\n', rpt);\n> >  \n> > -- \n> > 1.5.6.1.255.g32571\n> \n> It does not matter too much for this part that writes crash report, but\n> keeping the file format the same across platforms will make it easier for\n> tools to read output, so as a general principle, I think this is a\n> suboptimal solution to the issue.  How about throwing something like this\n> in MinGW specific header files?\n> \n>         #define getppid() 0\n\nOf course, we could also implement it, using NtQueryInformationProcess() \nas suggested by Google.\n\nCiao,\nDscho\n\n\t\t\n"},{"id":"82001","messageId":"alpine.DEB.1.00.0807021807150.9925@racer","threadId":"12603","inReplyTo":"FCE9D8BE-BA1A-46D1-AC45-2DC4E419DE8E@zib.de","subject":"Re: [PATCH 02/12] Do not complain about \"no common commits\" in an empty repo","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-02T17:07:28Z","receivedAt":"2008-07-02T17:07:28Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"\nHi,\n\nOn Wed, 2 Jul 2008, Steffen Prohaska wrote:\n\n> Dscho, will you send it?  You are the original author.\n\nDone,\nDscho\n"},{"id":"81999","messageId":"D35A2542-3943-4BDB-AEDA-0F8B7052EF7D@zib.de","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807021716030.9925@racer","subject":"Re: [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T17:08:09Z","receivedAt":"2008-07-02T17:08:09Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jul 2, 2008, at 6:17 PM, Johannes Schindelin wrote:\n\n> On Wed, 2 Jul 2008, Steffen Prohaska wrote:\n>\n>>\n>> From: Johannes Sixt <johannes.sixt@telecom.at>\n>>\n>> Hannes,\n>> You introduced \"minoffset\" in 861429a7c37c7.\n>\n> AFAICT it was redone differently in 'next', because 'next' has this\n> ceiling dir thingie, which allows a different (much smaller) patch.\n>\n> It might be more sensible to base your patch series on 'next'...\n\nHmm.. it is based on next.  But obviously I needed to merge\nmingw's master to 4msysgit's master and resolve conflicts.\nMaybe I made the wrong decisions then.\n\nHannes,\nIf you believe that your setup.c is good, then I'll copy your version\nto 4msysgit's master.\n\n\tSteffen\n"},{"id":"82003","messageId":"6F445BD9-CE59-435A-AAF3-F380A7BCE29E@zib.de","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807021713290.9925@racer","subject":"Re: [PATCH 11/12] verify_path(): do not allow absolute paths","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-02T17:20:25Z","receivedAt":"2008-07-02T17:20:25Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jul 2, 2008, at 6:15 PM, Johannes Schindelin wrote:\n\n> Hi,\n>\n> On Wed, 2 Jul 2008, Junio C Hamano wrote:\n>\n>> Steffen Prohaska <prohaska@zib.de> writes:\n>>\n>>> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n>>> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n>>\n>> No commit log message?  Justification?\n>\n> Justification: adding absolute paths was not caught properly on  \n> Windows,\n> and this was the easiest patch.\n>\n> However, IIRC, in the meantime we are nice to the user, and allow  \n> absolute\n> paths (which we turn into a relative path, or error out if it is not  \n> under\n> the current working directory).\n>\n> Steffen, can you revert the patch and verify that my memory does not  \n> fail\n> me?\n\nIs\n\n    git add /c/msysgit/git/read-cache.c\n\nan appropriate test?\n\nIt fails with\n\n    error: 'c:/msysgit/git/read-cache.c' is outside repository\n\nno matter if the commit is reverted or not.\n\n\tSteffen\n"},{"id":"82005","messageId":"alpine.DEB.1.00.0807021830410.9925@racer","threadId":"12603","inReplyTo":"6F445BD9-CE59-435A-AAF3-F380A7BCE29E@zib.de","subject":"Re: [PATCH 11/12] verify_path(): do not allow absolute paths","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-02T17:31:19Z","receivedAt":"2008-07-02T17:31:19Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"\nHi,\n\nOn Wed, 2 Jul 2008, Steffen Prohaska wrote:\n\n> On Jul 2, 2008, at 6:15 PM, Johannes Schindelin wrote:\n> \n> >On Wed, 2 Jul 2008, Junio C Hamano wrote:\n> >\n> > >Steffen Prohaska <prohaska@zib.de> writes:\n> > >\n> > > >Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> \n> > > >Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> > >\n> > >No commit log message?  Justification?\n> >\n> >Justification: adding absolute paths was not caught properly on \n> >Windows, and this was the easiest patch.\n> >\n> >However, IIRC, in the meantime we are nice to the user, and allow \n> >absolute paths (which we turn into a relative path, or error out if it \n> >is not under the current working directory).\n> >\n> >Steffen, can you revert the patch and verify that my memory does not \n> >fail me?\n> \n> Is\n> \n>   git add /c/msysgit/git/read-cache.c\n> \n> an appropriate test?\n> \n> It fails with\n> \n>   error: 'c:/msysgit/git/read-cache.c' is outside repository\n> \n> no matter if the commit is reverted or not.\n\nYes, that is enough.  It proves that the patch 11/12 is unnecessary and \nshould be removed from 4msysgit.git.\n\nThanks,\nDscho\n"},{"id":"82011","messageId":"7viqvob0pj.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807021412300.9925@racer","subject":"Re: [PATCH] git-add--interactive: manual hunk editing mode","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T18:27:52Z","receivedAt":"2008-07-02T18:27:52Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> I wonder why bother trying to import things when you do not need them to \n> begin with!  I mean, it is _obvious_ that in this case, we want .git/ to \n> be writable _anyway_, so why not stick with a fixed name in that?\n\nGood suggestion -- I love that simplicity.  Thomas?\n"},{"id":"82015","messageId":"200807022043.43260.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1214987532-23640-1-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 01/12] Fake reencoding success under NO_ICONV instead of returning NULL.","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-02T18:43:43Z","receivedAt":"2008-07-02T18:43:43Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"\nOn Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> From: Johannes Sixt <johannes.sixt@telecom.at>\n>\n> git-am when invoked from git-rebase seems to rely on successful conversion.\n\n> diff --git a/utf8.h b/utf8.h\n> index 98cce1b..f22ef31 100644\n> --- a/utf8.h\n> +++ b/utf8.h\n> @@ -10,10 +10,6 @@ int is_encoding_utf8(const char *name);\n>\n>  int print_wrapped_text(const char *text, int indent, int indent2, int\n> len);\n>\n> -#ifndef NO_ICONV\n>  char *reencode_string(const char *in, const char *out_encoding, const char\n> *in_encoding); -#else\n> -#define reencode_string(a,b,c) NULL\n> -#endif\n>\n>  #endif\n\nI don't think that this is still needed. It dates back to the origins of \nmingw.git, at which time I did not have a working libiconv.\n\n-- Hannes\n"},{"id":"82016","messageId":"200807022046.28141.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1214987532-23640-3-git-send-email-prohaska@zib.de","subject":"Re: [msysGit] [PATCH 03/12] MinGW: Convert CR/LF to LF in tag signatures","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-02T18:46:28Z","receivedAt":"2008-07-02T18:46:28Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> From: Johannes Schindelin <johannes.schindelin@gmx.de>\n>\n> On Windows, gpg outputs CR/LF signatures.  But since the tag\n> messages are already stripped of the CR by stripspace(), it is\n> arguably nicer to do the same for the tag signature.  Actually,\n> this patch does not look for CR/LF, but strips all CRs\n> from the signature.\n>\n> [ spr: ported code to use strbuf ]\n>\n> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> ---\n>  builtin-tag.c |   14 ++++++++++++++\n>  1 files changed, 14 insertions(+), 0 deletions(-)\n>\n> diff --git a/builtin-tag.c b/builtin-tag.c\n> index e675206..77977ba 100644\n> --- a/builtin-tag.c\n> +++ b/builtin-tag.c\n> @@ -241,6 +241,20 @@ static int do_sign(struct strbuf *buffer)\n>  \tif (finish_command(&gpg) || !len || len < 0)\n>  \t\treturn error(\"gpg failed to sign the tag\");\n>\n> +#ifdef __MINGW32__\n> +\t/* strip CR from the line endings */\n> +\t{\n> +\t\tint i, j;\n> +\t\tfor (i = j = 0; i < buffer->len; i++)\n> +\t\t\tif (buffer->buf[i] != '\\r') {\n> +\t\t\t\tif (i != j)\n> +\t\t\t\t\tbuffer->buf[j] = buffer->buf[i];\n> +\t\t\t\tj++;\n> +\t\t\t}\n> +\t\tstrbuf_setlen(buffer, j);\n> +\t}\n> +#endif\n> +\n>  \treturn 0;\n>  }\n\nDo we need the #ifdef __MINGW32__? Can't we just strip CRs unconditionally? It \nshouldn't hurt on Unix anyway.\n\n-- Hannes\n"},{"id":"82017","messageId":"200807022057.47588.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1214987532-23640-5-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 05/12] Windows(msysgit): Per default, display help as HTML in default browser","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-02T18:57:47Z","receivedAt":"2008-07-02T18:57:47Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"\nOn Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> The implementation directly calls the Win32 API to launch the browser.\n> Note that the specific directory layout of msysgit is required.\n\n> +#ifdef __MINGW32__\n> +\tconst char* exec_path = git_exec_path();\n> +\tchar *htmlpath = make_native_separator(\n> +\t\t\t   mkpath(\"%s/../doc/git/html/%s.html\"\n> +\t\t\t\t  , exec_path\n> +\t\t\t\t  , git_cmd)\n> +\t\t\t );\n> +\tif (!file_exists(htmlpath)) {\n> +\t\thtmlpath = make_native_separator(\n> +\t\t\t      mkpath(\"%s/../doc/git/html/git-%s.html\"\n> +\t\t\t\t     , exec_path\n> +\t\t\t\t     , git_cmd)\n> +\t\t\t   );\n> +\t\tif (!file_exists(htmlpath)) {\n> +\t\t\tfprintf(stderr, \"Can't find HTML help for '%s'.\\n\"\n> +\t\t\t\t, git_cmd);\n> +\t\t\texit(1);\n> +\t\t}\n> +\t}\n> +\tprintf(\"Launching default browser to display HTML help ...\\n\");\n> +\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n> +#else\n\nCan't we move this part into git-web--browse.sh? It should be a matter of \ncalling\n\n\tstart $htmlpath\n\n(and msys-1.0.dll would convert slashes to backslashes for us).\n\n-- Hannes\n"},{"id":"82018","messageId":"7vvdzo9kkw.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807021447200.9925@racer","subject":"Re: [PATCH] Disconnect stash from its base commit","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T19:01:35Z","receivedAt":"2008-07-02T19:01:35Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n>> This patch changes the structure of a stash to use a parentless new \n>> commit that has the same tree as the HEAD commit, in place of the HEAD \n>> commit. This way, a stash does not keep the history that leads to the \n>> HEAD commit reachable, even if the stash is kept forever.\n>\n> May I register my suspicion that this is the wrong direction to go?\n>\n> I actually find it quite nice that I can easily see in gitk where I \n> spawned off a certain stash, indeed, how the recent stash history \n> (manually specified with \"stash@{0} stash@{1} stash@{2}\" [*1*]), relates \n> to the current branch's history.\n\nA stash may primarily be for applying the change to random place, but\nwhere it was created is not a useless information.  The very original use\ncase that was in the discussion \"git stash\" (actually its original form\n\"git save\") was first posted was \"I am in the middle of something, and get\ninterrupted.  Stash the changes away to switch branches to deal with the\nemergency for a while so that I can later come back to where I was, and I\nwant both saving away and coming back easy operations\".  A stash _can_ be\napplied to any random other state, but \"coming back\" is very much part of\nwhat it should have supported, and not recording the base commit means we\nwould lose that capability.\n\n\tSide note.  In addition to the current \"stash apply\" and \"stash\n\tpop\", \"stash branch $stash newbranchname\" that does\n\n        \tgit checkout -b newbranchanme $stash^\n\n\t(i.e. create a new branch starting from the state you were in)\n\tmight be a good ingredient to support a more git-like workflow to\n\tresume.  If your original branch gained extra commits, was\n\trewound, or was rebased during the emergency/distraction, you may\n\tnot have anywhere to apply/pop the stash without conflicts when\n\tyou want to \"come back\" with normal\n\n        \tgit checkout somebranch && git stash pop\n\n\tBut that imaginary \"stash branch\" command would always give you\n\tthe exact state you were in and creates a clean fork to finish\n\twhat you were doing, and continue.\n\nSo the base commit is an integral part of what a stash is, and I agree\nwith you that an unexpiring stash that pins the whole history beind it is\na feature.  It is not unncessary cruft that accumulates that we need to\nworry about.\n"},{"id":"82019","messageId":"200807022104.20146.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1214987532-23640-6-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-02T19:04:20Z","receivedAt":"2008-07-02T19:04:20Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"\nOn Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> From: Edward Z. Yang <edwardzyang@thewritingpot.com>\n>\n> PuTTY requires -P while OpenSSH requires -p; if plink is detected\n> as GIT_SSH, use the alternate flag.\n>\n> Signed-off-by: Edward Z. Yang <edwardzyang@thewritingpot.com>\n> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> ---\n>  connect.c |    4 +++-\n>  1 files changed, 3 insertions(+), 1 deletions(-)\n>\n> diff --git a/connect.c b/connect.c\n> index 574f42f..0d007f3 100644\n> --- a/connect.c\n> +++ b/connect.c\n> @@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2], const\n> char *url_orig, conn->argv = arg = xcalloc(6, sizeof(*arg));\n>  \tif (protocol == PROTO_SSH) {\n>  \t\tconst char *ssh = getenv(\"GIT_SSH\");\n> +\t\tint putty = ssh && strstr(ssh, \"plink\");\n>  \t\tif (!ssh) ssh = \"ssh\";\n>\n>  \t\t*arg++ = ssh;\n>  \t\tif (port) {\n> -\t\t\t*arg++ = \"-p\";\n> +\t\t\t/* P is for PuTTY, p is for OpenSSH */\n> +\t\t\t*arg++ = putty ? \"-P\" : \"-p\";\n>  \t\t\t*arg++ = port;\n>  \t\t}\n>  \t\t*arg++ = host;\n\nWhat about installing a wrapper script, plinkssh, that does this:\n\n#!/bin/bash\n\nif test \"$1\" = -p; then\n\tport=\"-P $2\"\n\tshift; shift\nfi\n\nexec plink $port \"$@\"\n\nand require plink users to set GIT_SSH=plinkssh?\n\n-- Hannes\n"},{"id":"82020","messageId":"200807022117.38166.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1214987532-23640-10-git-send-email-prohaska@zib.de","subject":"Re: [msysGit] [PATCH 10/12] Add ANSI control code emulation for the Windows console","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-02T19:17:38Z","receivedAt":"2008-07-02T19:17:38Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> This adds only the minimum necessary to keep git pull/merge's diffstat from\n> wrapping. Notably absent is support for the K (erase) operation, and\n> support for POSIX write.\n\nIf I understand the patch correctly, it won't affect output that goes to the \npager; only text that goes directly to the console would be colored. This is \na start. I think I'll queue this in mingw.git.\n\n-- Hannes\n"},{"id":"82022","messageId":"200807022132.27751.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"D35A2542-3943-4BDB-AEDA-0F8B7052EF7D@zib.de","subject":"Re: [msysGit] Re: [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-02T19:32:27Z","receivedAt":"2008-07-02T19:32:27Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> On Jul 2, 2008, at 6:17 PM, Johannes Schindelin wrote:\n> > On Wed, 2 Jul 2008, Steffen Prohaska wrote:\n> >> From: Johannes Sixt <johannes.sixt@telecom.at>\n> >>\n> >> Hannes,\n> >> You introduced \"minoffset\" in 861429a7c37c7.\n> >\n> > AFAICT it was redone differently in 'next', because 'next' has this\n> > ceiling dir thingie, which allows a different (much smaller) patch.\n> >\n> > It might be more sensible to base your patch series on 'next'...\n>\n> Hmm.. it is based on next.  But obviously I needed to merge\n> mingw's master to 4msysgit's master and resolve conflicts.\n> Maybe I made the wrong decisions then.\n>\n> Hannes,\n> If you believe that your setup.c is good, then I'll copy your version\n> to 4msysgit's master.\n\nThe setup.c in mingw.git (and soon Junio's master) and Junio's next are \n_different_, but both are correct. If you reverse-apply the patch you \npresented here, then you get the version from Junio's next, which is a good \nstate.\n\n[ Of course, the result will work only as long as you do not set \nGIT_CEILING_DIRECTORIES, because we haven't taken care of the helper \nfunctions that this feature uses, longest_ancestor_length() and \nnormalize_path(). ]\n\nWe have debated about set_git_dir(\".\") in the past. mingw.git doesn't have it, \nand it works (for me). I don't know what it is needed for.\n\n-- Hannes\n"},{"id":"82023","messageId":"eaa105840807021232r17ca03f4y1487a7659eb04da4@mail.gmail.com","threadId":"12603","inReplyTo":"200807022117.38166.johannes.sixt@telecom.at","subject":"Re: [msysGit] [PATCH 10/12] Add ANSI control code emulation for the Windows console","fromName":"Peter Harris","fromEmail":"git@peter.is-a-geek.org","sentAt":"2008-07-02T19:32:56Z","receivedAt":"2008-07-02T19:32:56Z","isPatch":true,"sender":{"key":"git@peter.is-a-geek.org","avatar":null},"body":"On Wed, Jul 2, 2008 at 3:17 PM, Johannes Sixt wrote:\n> On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n>> This adds only the minimum necessary to keep git pull/merge's diffstat from\n>> wrapping. Notably absent is support for the K (erase) operation, and\n>> support for POSIX write.\n>\n> If I understand the patch correctly, it won't affect output that goes to the\n> pager; only text that goes directly to the console would be colored.\n\nYes, that is correct.\n\nNote that an MSYS bash/rxvt is effectively considered a pager by this\npatch, since it fails the isatty() test. This is actually a good\nthing: MSYS has better ANSI support anyway.\n\nPeter Harris\n"},{"id":"82025","messageId":"20080702195401.GA17214@toroid.org","threadId":"12603","inReplyTo":"7vvdzo9kkw.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH] Disconnect stash from its base commit","fromName":"Abhijit Menon-Sen","fromEmail":"ams@toroid.org","sentAt":"2008-07-02T19:54:01Z","receivedAt":"2008-07-02T19:54:01Z","isPatch":true,"sender":{"key":"ams@toroid.org","avatar":null},"body":"At 2008-07-02 12:01:35 -0700, gitster@pobox.com wrote:\n>\n> \tBut that imaginary \"stash branch\" command would always give you\n> \tthe exact state you were in and creates a clean fork to finish\n> \twhat you were doing, and continue.\n\nNice idea. Something as simple as the appended diff?\n\nI reversed the stash/branch arguments so that one need specify only the\nbranch name. Playing with it a little, it feels very useful.\n\n-- ams\n\ndiff --git a/git-stash.sh b/git-stash.sh\nindex 4938ade..d5ecd24 100755\n--- a/git-stash.sh\n+++ b/git-stash.sh\n@@ -218,6 +218,21 @@ drop_stash () {\n \tgit rev-parse --verify \"$ref_stash@{0}\" > /dev/null 2>&1 || clear_stash\n }\n \n+apply_to_branch () {\n+\thave_stash || die 'Nothing to apply'\n+\n+\ttest -n \"$1\" || die 'No branch name specified'\n+\tbranch=$1\n+\n+\tif test -z \"$2\"\n+\tthen\n+\t\tset x \"$ref_stash@{0}\"\n+\tfi\n+\tstash=$2\n+\n+\tgit-checkout -b $branch $stash^ && apply_stash $stash\n+}\n+\n # Main command set\n case \"$1\" in\n list)\n@@ -264,6 +279,10 @@ pop)\n \t\tdrop_stash \"$@\"\n \tfi\n \t;;\n+branch)\n+\tshift\n+\tapply_to_branch \"$@\"\n+\t;;\n *)\n \tif test $# -eq 0\n \tthen\n"},{"id":"82029","messageId":"7vprpw80bw.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080702195401.GA17214@toroid.org","subject":"Re: [PATCH] Disconnect stash from its base commit","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T21:04:19Z","receivedAt":"2008-07-02T21:04:19Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Abhijit Menon-Sen <ams@toroid.org> writes:\n\n> At 2008-07-02 12:01:35 -0700, gitster@pobox.com wrote:\n>>\n>> \tBut that imaginary \"stash branch\" command would always give you\n>> \tthe exact state you were in and creates a clean fork to finish\n>> \twhat you were doing, and continue.\n>\n> Nice idea. Something as simple as the appended diff?\n>\n> I reversed the stash/branch arguments so that one need specify only the\n> branch name. Playing with it a little, it feels very useful.\n\nI'd further suggest to delete the stash automatically when you create a\nnew branch out of it.\n"},{"id":"82035","messageId":"1215035909-26110-1-git-send-email-trast@student.ethz.ch","threadId":"12603","inReplyTo":"7v7ic4hmj5.fsf@gitster.siamese.dyndns.org","subject":"[PATCH 0/3] git-add--interactive: use --recount, editing","fromName":"Thomas Rast","fromEmail":"trast@student.ethz.ch","sentAt":"2008-07-02T21:58:26Z","receivedAt":"2008-07-02T21:58:26Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"Junio C Hamano wrote:\n> \n> I recall that the original \"add--interactive\" carefully counted numbers in\n> hunks it reassembles (as it can let you split and then you can choose to\n> use both parts, which requires it to merge overlapping hunks back), but if\n> you are going to use --recount anyway, perhaps we can discard that logic?\n> It may make the patch application less robust, though.  I dunno.\n\nThis series takes it a bit further.  I played around with 'apply', and\nit seems there is no reason to even merge the hunks.  (It would be\ngreat if someone who knows builtin-apply.c could confirm this.)  So we\ncan get rid of all recounting except for the correct splitting\nboundaries.  These are the first two patches.\n\nJunio C Hamano wrote:\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> > I wonder why bother trying to import things when you do not need them to \n> > begin with!  I mean, it is _obvious_ that in this case, we want .git/ to \n> > be writable _anyway_, so why not stick with a fixed name in that?\n> \n> Good suggestion -- I love that simplicity.  Thomas?\n\nWell, changed that back.\n\nApart from that, no real changes to 3/3, but the $needs_recount code\nhas become unnecessary because 1/3 already forces --recount.\n\n- Thomas\n\n\n\n Documentation/git-add.txt  |    1 +\n git-add--interactive.perl  |  203 ++++++++++++++++++++++---------------------\n t/t3701-add-interactive.sh |   67 +++++++++++++++\n 3 files changed, 172 insertions(+), 99 deletions(-)\n"},{"id":"82036","messageId":"1215035956-26192-1-git-send-email-trast@student.ethz.ch","threadId":"12603","inReplyTo":"1215035909-26110-1-git-send-email-trast@student.ethz.ch","subject":"[PATCH 1/3] git-add--interactive: replace hunk recounting with apply --recount","fromName":"Thomas Rast","fromEmail":"trast@student.ethz.ch","sentAt":"2008-07-02T21:59:16Z","receivedAt":"2008-07-02T21:59:16Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"We recounted the postimage offsets to compensate for hunks that were\nnot selected.  Now apply --recount can do the job for us.\n\nSigned-off-by: Thomas Rast <trast@student.ethz.ch>\n---\n git-add--interactive.perl |   30 +++---------------------------\n 1 files changed, 3 insertions(+), 27 deletions(-)\n\ndiff --git a/git-add--interactive.perl b/git-add--interactive.perl\nindex 903953e..e1964a5 100755\n--- a/git-add--interactive.perl\n+++ b/git-add--interactive.perl\n@@ -970,39 +970,15 @@ sub patch_update_file {\n \t\tpush @result, @{$mode->{TEXT}};\n \t}\n \tfor (@hunk) {\n-\t\tmy $text = $_->{TEXT};\n-\t\tmy ($o_ofs, $o_cnt, $n_ofs, $n_cnt) =\n-\t\t    parse_hunk_header($text->[0]);\n-\n-\t\tif (!$_->{USE}) {\n-\t\t\t# We would have added ($n_cnt - $o_cnt) lines\n-\t\t\t# to the postimage if we were to use this hunk,\n-\t\t\t# but we didn't.  So the line number that the next\n-\t\t\t# hunk starts at would be shifted by that much.\n-\t\t\t$n_lofs -= ($n_cnt - $o_cnt);\n-\t\t\tnext;\n-\t\t}\n-\t\telse {\n-\t\t\tif ($n_lofs) {\n-\t\t\t\t$n_ofs += $n_lofs;\n-\t\t\t\t$text->[0] = (\"@@ -$o_ofs\" .\n-\t\t\t\t\t      (($o_cnt != 1)\n-\t\t\t\t\t       ? \",$o_cnt\" : '') .\n-\t\t\t\t\t      \" +$n_ofs\" .\n-\t\t\t\t\t      (($n_cnt != 1)\n-\t\t\t\t\t       ? \",$n_cnt\" : '') .\n-\t\t\t\t\t      \" @@\\n\");\n-\t\t\t}\n-\t\t\tfor (@$text) {\n-\t\t\t\tpush @result, $_;\n-\t\t\t}\n+\t\tif ($_->{USE}) {\n+\t\t\tpush @result, @{$_->{TEXT}};\n \t\t}\n \t}\n \n \tif (@result) {\n \t\tmy $fh;\n \n-\t\topen $fh, '| git apply --cached';\n+\t\topen $fh, '| git apply --cached --recount';\n \t\tfor (@{$head->{TEXT}}, @result) {\n \t\t\tprint $fh $_;\n \t\t}\n-- \n1.5.6.1.276.gde9a\n"},{"id":"82037","messageId":"1215035984-26263-1-git-send-email-trast@student.ethz.ch","threadId":"12603","inReplyTo":"1215035956-26192-1-git-send-email-trast@student.ethz.ch","subject":"[PATCH 2/3] git-add--interactive: remove hunk coalescing","fromName":"Thomas Rast","fromEmail":"trast@student.ethz.ch","sentAt":"2008-07-02T21:59:44Z","receivedAt":"2008-07-02T21:59:44Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"Current git-apply has no trouble at all applying chunks that have\noverlapping context, as produced by the splitting feature. So we can\ndrop the manual coalescing.\n\nSigned-off-by: Thomas Rast <trast@student.ethz.ch>\n---\n git-add--interactive.perl |   89 ---------------------------------------------\n 1 files changed, 0 insertions(+), 89 deletions(-)\n\ndiff --git a/git-add--interactive.perl b/git-add--interactive.perl\nindex e1964a5..a4234d3 100755\n--- a/git-add--interactive.perl\n+++ b/git-add--interactive.perl\n@@ -682,93 +682,6 @@ sub split_hunk {\n \treturn @split;\n }\n \n-sub find_last_o_ctx {\n-\tmy ($it) = @_;\n-\tmy $text = $it->{TEXT};\n-\tmy ($o_ofs, $o_cnt) = parse_hunk_header($text->[0]);\n-\tmy $i = @{$text};\n-\tmy $last_o_ctx = $o_ofs + $o_cnt;\n-\twhile (0 < --$i) {\n-\t\tmy $line = $text->[$i];\n-\t\tif ($line =~ /^ /) {\n-\t\t\t$last_o_ctx--;\n-\t\t\tnext;\n-\t\t}\n-\t\tlast;\n-\t}\n-\treturn $last_o_ctx;\n-}\n-\n-sub merge_hunk {\n-\tmy ($prev, $this) = @_;\n-\tmy ($o0_ofs, $o0_cnt, $n0_ofs, $n0_cnt) =\n-\t    parse_hunk_header($prev->{TEXT}[0]);\n-\tmy ($o1_ofs, $o1_cnt, $n1_ofs, $n1_cnt) =\n-\t    parse_hunk_header($this->{TEXT}[0]);\n-\n-\tmy (@line, $i, $ofs, $o_cnt, $n_cnt);\n-\t$ofs = $o0_ofs;\n-\t$o_cnt = $n_cnt = 0;\n-\tfor ($i = 1; $i < @{$prev->{TEXT}}; $i++) {\n-\t\tmy $line = $prev->{TEXT}[$i];\n-\t\tif ($line =~ /^\\+/) {\n-\t\t\t$n_cnt++;\n-\t\t\tpush @line, $line;\n-\t\t\tnext;\n-\t\t}\n-\n-\t\tlast if ($o1_ofs <= $ofs);\n-\n-\t\t$o_cnt++;\n-\t\t$ofs++;\n-\t\tif ($line =~ /^ /) {\n-\t\t\t$n_cnt++;\n-\t\t}\n-\t\tpush @line, $line;\n-\t}\n-\n-\tfor ($i = 1; $i < @{$this->{TEXT}}; $i++) {\n-\t\tmy $line = $this->{TEXT}[$i];\n-\t\tif ($line =~ /^\\+/) {\n-\t\t\t$n_cnt++;\n-\t\t\tpush @line, $line;\n-\t\t\tnext;\n-\t\t}\n-\t\t$ofs++;\n-\t\t$o_cnt++;\n-\t\tif ($line =~ /^ /) {\n-\t\t\t$n_cnt++;\n-\t\t}\n-\t\tpush @line, $line;\n-\t}\n-\tmy $head = (\"@@ -$o0_ofs\" .\n-\t\t    (($o_cnt != 1) ? \",$o_cnt\" : '') .\n-\t\t    \" +$n0_ofs\" .\n-\t\t    (($n_cnt != 1) ? \",$n_cnt\" : '') .\n-\t\t    \" @@\\n\");\n-\t@{$prev->{TEXT}} = ($head, @line);\n-}\n-\n-sub coalesce_overlapping_hunks {\n-\tmy (@in) = @_;\n-\tmy @out = ();\n-\n-\tmy ($last_o_ctx);\n-\n-\tfor (grep { $_->{USE} } @in) {\n-\t\tmy $text = $_->{TEXT};\n-\t\tmy ($o_ofs) = parse_hunk_header($text->[0]);\n-\t\tif (defined $last_o_ctx &&\n-\t\t    $o_ofs <= $last_o_ctx) {\n-\t\t\tmerge_hunk($out[-1], $_);\n-\t\t}\n-\t\telse {\n-\t\t\tpush @out, $_;\n-\t\t}\n-\t\t$last_o_ctx = find_last_o_ctx($out[-1]);\n-\t}\n-\treturn @out;\n-}\n \n sub help_patch_cmd {\n \tprint colored $help_color, <<\\EOF ;\n@@ -962,8 +875,6 @@ sub patch_update_file {\n \t\t}\n \t}\n \n-\t@hunk = coalesce_overlapping_hunks(@hunk);\n-\n \tmy $n_lofs = 0;\n \tmy @result = ();\n \tif ($mode->{USE}) {\n-- \n1.5.6.1.276.gde9a\n"},{"id":"82038","messageId":"1215036000-26322-1-git-send-email-trast@student.ethz.ch","threadId":"12603","inReplyTo":"1215035984-26263-1-git-send-email-trast@student.ethz.ch","subject":"[PATCH 3/3] git-add--interactive: manual hunk editing mode","fromName":"Thomas Rast","fromEmail":"trast@student.ethz.ch","sentAt":"2008-07-02T22:00:00Z","receivedAt":"2008-07-02T22:00:00Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"Adds a new option 'e' to the 'add -p' command loop that lets you edit\nthe current hunk in your favourite editor.\n\nIf the resulting patch applies cleanly, the edited hunk will\nimmediately be marked for staging. If it does not apply cleanly, you\nwill be given an opportunity to edit again. If all lines of the hunk\nare removed, then the edit is aborted and the hunk is left unchanged.\n\nApplying the changed hunk(s) relies on Johannes Schindelin's new\n--recount option for git-apply.\n\nNote that the \"real patch\" test intentionally uses\n  (echo e; echo n; echo d) | git add -p\neven though the 'n' and 'd' are superfluous at first sight.  They\nserve to get out of the interaction loop if git add -p wrongly\nconcludes the patch does not apply.\n\nMany thanks to Jeff King <peff@peff.net> for lots of help and\nsuggestions.\n\nSigned-off-by: Thomas Rast <trast@student.ethz.ch>\n---\n Documentation/git-add.txt  |    1 +\n git-add--interactive.perl  |  119 ++++++++++++++++++++++++++++++++++++++++++++\n t/t3701-add-interactive.sh |   67 +++++++++++++++++++++++++\n 3 files changed, 187 insertions(+), 0 deletions(-)\n\ndiff --git a/Documentation/git-add.txt b/Documentation/git-add.txt\nindex 011a743..46dd56c 100644\n--- a/Documentation/git-add.txt\n+++ b/Documentation/git-add.txt\n@@ -236,6 +236,7 @@ patch::\n        k - leave this hunk undecided, see previous undecided hunk\n        K - leave this hunk undecided, see previous hunk\n        s - split the current hunk into smaller hunks\n+       e - manually edit the current hunk\n        ? - print help\n +\n After deciding the fate for all hunks, if there is any hunk\ndiff --git a/git-add--interactive.perl b/git-add--interactive.perl\nindex a4234d3..801d7c0 100755\n--- a/git-add--interactive.perl\n+++ b/git-add--interactive.perl\n@@ -18,6 +18,18 @@ my ($fraginfo_color) =\n \t$diff_use_color ? (\n \t\t$repo->get_color('color.diff.frag', 'cyan'),\n \t) : ();\n+my ($diff_plain_color) =\n+\t$diff_use_color ? (\n+\t\t$repo->get_color('color.diff.plain', ''),\n+\t) : ();\n+my ($diff_old_color) =\n+\t$diff_use_color ? (\n+\t\t$repo->get_color('color.diff.old', 'red'),\n+\t) : ();\n+my ($diff_new_color) =\n+\t$diff_use_color ? (\n+\t\t$repo->get_color('color.diff.new', 'green'),\n+\t) : ();\n \n my $normal_color = $repo->get_color(\"\", \"reset\");\n \n@@ -683,6 +695,105 @@ sub split_hunk {\n }\n \n \n+sub color_diff {\n+\treturn map {\n+\t\tcolored((/^@/  ? $fraginfo_color :\n+\t\t\t /^\\+/ ? $diff_new_color :\n+\t\t\t /^-/  ? $diff_old_color :\n+\t\t\t $diff_plain_color),\n+\t\t\t$_);\n+\t} @_;\n+}\n+\n+sub edit_hunk_manually {\n+\tmy ($oldtext) = @_;\n+\n+\tmy $hunkfile = $repo->repo_path . \"/addp-hunk-edit.diff\";\n+\tmy $fh;\n+\topen $fh, '>', $hunkfile\n+\t\tor die \"failed to open hunk edit file for writing: \" . $!;\n+\tprint $fh \"# Manual hunk edit mode -- see bottom for a quick guide\\n\";\n+\tprint $fh @$oldtext;\n+\tprint $fh <<EOF;\n+# ---\n+# To remove '-' lines, make them ' ' lines (context).\n+# To remove '+' lines, delete them.\n+# Lines starting with # will be removed.\n+#\n+# If the patch applies cleanly, the edited hunk will immediately be\n+# marked for staging. If it does not apply cleanly, you will be given\n+# an opportunity to edit again. If all lines of the hunk are removed,\n+# then the edit is aborted and the hunk is left unchanged.\n+EOF\n+\tclose $fh;\n+\n+\tmy $editor = $ENV{GIT_EDITOR} || $repo->config(\"core.editor\")\n+\t\t|| $ENV{VISUAL} || $ENV{EDITOR} || \"vi\";\n+\tsystem('sh', '-c', $editor.' \"$@\"', $editor, $hunkfile);\n+\n+\topen $fh, '<', $hunkfile\n+\t\tor die \"failed to open hunk edit file for reading: \" . $!;\n+\tmy @newtext = grep { !/^#/ } <$fh>;\n+\tclose $fh;\n+\tunlink $hunkfile;\n+\n+\t# Abort if nothing remains\n+\tif (!grep { /\\S/ } @newtext) {\n+\t\treturn undef;\n+\t}\n+\n+\t# Reinsert the first hunk header if the user accidentally deleted it\n+\tif ($newtext[0] !~ /^@/) {\n+\t\tunshift @newtext, $oldtext->[0];\n+\t}\n+\treturn \\@newtext;\n+}\n+\n+sub diff_applies {\n+\tmy $fh;\n+\topen $fh, '| git apply --recount --cached --check';\n+\tfor my $h (@_) {\n+\t\tprint $fh @{$h->{TEXT}};\n+\t}\n+\treturn close $fh;\n+}\n+\n+sub prompt_yesno {\n+\tmy ($prompt) = @_;\n+\twhile (1) {\n+\t\tprint colored $prompt_color, $prompt;\n+\t\tmy $line = <STDIN>;\n+\t\treturn 0 if $line =~ /^n/i;\n+\t\treturn 1 if $line =~ /^y/i;\n+\t}\n+}\n+\n+sub edit_hunk_loop {\n+\tmy ($head, $hunk, $ix) = @_;\n+\tmy $text = $hunk->[$ix]->{TEXT};\n+\n+\twhile (1) {\n+\t\t$text = edit_hunk_manually($text);\n+\t\tif (!defined $text) {\n+\t\t\treturn undef;\n+\t\t}\n+\t\tmy $newhunk = { TEXT => $text, USE => 1 };\n+\t\tif (diff_applies($head,\n+\t\t\t\t @{$hunk}[0..$ix-1],\n+\t\t\t\t $newhunk,\n+\t\t\t\t @{$hunk}[$ix+1..$#{$hunk}])) {\n+\t\t\t$newhunk->{DISPLAY} = [color_diff(@{$text})];\n+\t\t\treturn $newhunk;\n+\t\t}\n+\t\telse {\n+\t\t\tprompt_yesno(\n+\t\t\t\t'Your edited hunk does not apply. Edit again '\n+\t\t\t\t. '(saying \"no\" discards!) [y/n]? '\n+\t\t\t\t) or return undef;\n+\t\t}\n+\t}\n+}\n+\n sub help_patch_cmd {\n \tprint colored $help_color, <<\\EOF ;\n y - stage this hunk\n@@ -694,6 +805,7 @@ J - leave this hunk undecided, see next hunk\n k - leave this hunk undecided, see previous undecided hunk\n K - leave this hunk undecided, see previous hunk\n s - split the current hunk into smaller hunks\n+e - manually edit the current hunk\n ? - print help\n EOF\n }\n@@ -798,6 +910,7 @@ sub patch_update_file {\n \t\tif (hunk_splittable($hunk[$ix]{TEXT})) {\n \t\t\t$other .= '/s';\n \t\t}\n+\t\t$other .= '/e';\n \t\tfor (@{$hunk[$ix]{DISPLAY}}) {\n \t\t\tprint;\n \t\t}\n@@ -862,6 +975,12 @@ sub patch_update_file {\n \t\t\t\t$num = scalar @hunk;\n \t\t\t\tnext;\n \t\t\t}\n+\t\t\telsif ($line =~ /^e/) {\n+\t\t\t\tmy $newhunk = edit_hunk_loop($head, \\@hunk, $ix);\n+\t\t\t\tif (defined $newhunk) {\n+\t\t\t\t\tsplice @hunk, $ix, 1, $newhunk;\n+\t\t\t\t}\n+\t\t\t}\n \t\t\telse {\n \t\t\t\thelp_patch_cmd($other);\n \t\t\t\tnext;\ndiff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh\nindex fae64ea..e95663d 100755\n--- a/t/t3701-add-interactive.sh\n+++ b/t/t3701-add-interactive.sh\n@@ -66,6 +66,73 @@ test_expect_success 'revert works (commit)' '\n \tgrep \"unchanged *+3/-0 file\" output\n '\n \n+cat >expected <<EOF\n+EOF\n+cat >fake_editor.sh <<EOF\n+EOF\n+chmod a+x fake_editor.sh\n+test_set_editor \"$(pwd)/fake_editor.sh\"\n+test_expect_success 'dummy edit works' '\n+\t(echo e; echo a) | git add -p &&\n+\tgit diff > diff &&\n+\ttest_cmp expected diff\n+'\n+\n+cat >patch <<EOF\n+@@ -1,1 +1,4 @@\n+ this\n++patch\n+-doesn't\n+ apply\n+EOF\n+echo \"#!$SHELL_PATH\" >fake_editor.sh\n+cat >>fake_editor.sh <<\\EOF\n+mv -f \"$1\" oldpatch &&\n+mv -f patch \"$1\"\n+EOF\n+chmod a+x fake_editor.sh\n+test_set_editor \"$(pwd)/fake_editor.sh\"\n+test_expect_success 'bad edit rejected' '\n+\tgit reset &&\n+\t(echo e; echo n; echo d) | git add -p >output &&\n+\tgrep \"hunk does not apply\" output\n+'\n+\n+cat >patch <<EOF\n+this patch\n+is garbage\n+EOF\n+test_expect_success 'garbage edit rejected' '\n+\tgit reset &&\n+\t(echo e; echo n; echo d) | git add -p >output &&\n+\tgrep \"hunk does not apply\" output\n+'\n+\n+cat >patch <<EOF\n+@@ -1,0 +1,0 @@\n+ baseline\n++content\n++newcontent\n++lines\n+EOF\n+cat >expected <<EOF\n+diff --git a/file b/file\n+index b5dd6c9..f910ae9 100644\n+--- a/file\n++++ b/file\n+@@ -1,4 +1,4 @@\n+ baseline\n+ content\n+-newcontent\n++more\n+ lines\n+EOF\n+test_expect_success 'real edit works' '\n+\t(echo e; echo n; echo d) | git add -p &&\n+\tgit diff >output &&\n+\ttest_cmp expected output\n+'\n+\n if test \"$(git config --bool core.filemode)\" = false\n then\n     say 'skipping filemode tests (filesystem does not properly support modes)'\n-- \n1.5.6.1.276.gde9a\n"},{"id":"82040","messageId":"7vtzf77wjp.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1215035984-26263-1-git-send-email-trast@student.ethz.ch","subject":"Re: [PATCH 2/3] git-add--interactive: remove hunk coalescing","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T22:26:02Z","receivedAt":"2008-07-02T22:26:02Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thomas Rast <trast@student.ethz.ch> writes:\n\n> Current git-apply has no trouble at all applying chunks that have\n> overlapping context, as produced by the splitting feature. So we can\n> drop the manual coalescing.\n>\n> Signed-off-by: Thomas Rast <trast@student.ethz.ch>\n> ---\n>  git-add--interactive.perl |   89 ---------------------------------------------\n>  1 files changed, 0 insertions(+), 89 deletions(-)\n>\n> diff --git a/git-add--interactive.perl b/git-add--interactive.perl\n> index e1964a5..a4234d3 100755\n> --- a/git-add--interactive.perl\n> +++ b/git-add--interactive.perl\n> @@ -682,93 +682,6 @@ sub split_hunk {\n>  \treturn @split;\n>  }\n>  \n> -sub find_last_o_ctx {\n> ...\n> -}\n> -\n> -sub merge_hunk {\n> ...\n> -}\n> -\n> -sub coalesce_overlapping_hunks {\n> ...\n> -}\n>  \n>  sub help_patch_cmd {\n>  \tprint colored $help_color, <<\\EOF ;\n> @@ -962,8 +875,6 @@ sub patch_update_file {\n>  \t\t}\n>  \t}\n>  \n> -\t@hunk = coalesce_overlapping_hunks(@hunk);\n> -\n>  \tmy $n_lofs = 0;\n>  \tmy @result = ();\n>  \tif ($mode->{USE}) {\n> -- \n> 1.5.6.1.276.gde9a\n\nI think [1/3] makes sense as we trust --recount anyway (and more\nimportantly if the user did not muck with the patch --recount would be a\nno-op), but I am not sure about this one.  I suspect this change reduces\nthe precision and safety of the patch application, especially when the\nuser does not edit hunks.\n\nWhen you \"[s]plit\" a hunk like this:\n\n\t@@ -n,7 +m,6 @@\n         con\n         text\n        -deleted preimage\n        +replaced postimage\n\t more\n\t line of context\n        -deleted another\n\t context\n\ninto two, we prepare these two hunks internally:\n\n\t@@ -n,5 +m,5 @@\n         con\n         text\n        -deleted preimage\n        +replaced postimage\n\t more\n         line of context\n\n\t@@ -l,4 +k,3 @@  -- l=n+5, k=m+5\n\t more\n         line of context\n        -deleted another\n\t context\n\nSo that applying only one piece without applying the other would still\nhave correct context to locate where to apply.  However, if the user says\n\"I want to apply both after all\", we would need to remove the overlap when\nmerge them back.  If you don't, you would be feeding a nonsense patch to\n\"git apply\" that goes back in context.\n\nBlindly concatenating the above two and feeding them to \"git apply\" *may*\nhappen to work by accident, not by design.  This very much feels like a\nhack of \"This works most of the time for me, your mileage may vary\" kind,\nwhich we would want to avoid when we can.\n"},{"id":"82041","messageId":"7vod5f7w3f.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vtzf77wjp.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 2/3] git-add--interactive: remove hunk coalescing","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-02T22:35:48Z","receivedAt":"2008-07-02T22:35:48Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> Blindly concatenating the above two and feeding them to \"git apply\" *may*\n> happen to work by accident, not by design.  This very much feels like a\n> hack of \"This works most of the time for me, your mileage may vary\" kind,\n> which we would want to avoid when we can.\n\nWell, I changed my mind.  Let's run with this and see what happens.\n\nThe patch application is hunk-by-hunk in nature anyway, and if the user\nmunges the trailing context of the first half of an originally-single hunk\nand the leading context of the latter half in an inconsistent way, we\nwould notice the problem anyway.\n"},{"id":"82062","messageId":"20080703022316.GA25433@toroid.org","threadId":"12603","inReplyTo":"7vprpw80bw.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Implement \"git stash branch <newbranch> <stash>\"","fromName":"Abhijit Menon-Sen","fromEmail":"ams@toroid.org","sentAt":"2008-07-03T02:23:16Z","receivedAt":"2008-07-03T02:23:16Z","isPatch":true,"sender":{"key":"ams@toroid.org","avatar":null},"body":"Restores the stashed state on a new branch rooted at the commit on which\nthe stash was originally created, so that conflicts caused by subsequent\nchanges on the original branch can be dealt with.\n\n(Thanks to Junio for this nice idea.)\n---\n Documentation/git-stash.txt |   19 ++++++++++++++++++-\n git-stash.sh                |   21 +++++++++++++++++++++\n 2 files changed, 39 insertions(+), 1 deletions(-)\n\ndiff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt\nindex 23ac331..cfc1c28 100644\n--- a/Documentation/git-stash.txt\n+++ b/Documentation/git-stash.txt\n@@ -8,8 +8,11 @@ git-stash - Stash the changes in a dirty working directory away\n SYNOPSIS\n --------\n [verse]\n-'git stash' (list | show [<stash>] | apply [<stash>] | clear | drop [<stash>] | pop [<stash>])\n+'git stash' list\n+'git stash' (show | apply | drop | pop ) [<stash>]\n+'git stash' branch <branchname> [<stash>]\n 'git stash' [save [<message>]]\n+'git stash' clear\n \n DESCRIPTION\n -----------\n@@ -81,6 +84,20 @@ tree's changes, but also the index's ones. However, this can fail, when you\n have conflicts (which are stored in the index, where you therefore can no\n longer apply the changes as they were originally).\n \n+branch <branchname> [<stash>]::\n+\n+\tCreates and checks out a new branch named `<branchname>` starting from\n+\tthe commit at which the `<stash>` was originally created, applies the\n+\tchanges recorded in `<stash>` to the new working tree, and drops the\n+\t`<stash>` if that completes successfully. When no `<stash>` is given,\n+\tapplies the latest one.\n++\n+This is useful if the branch on which you ran `git stash save` has\n+changed enough that `git stash apply` fails due to conflicts. Since\n+the stash is applied on top of the commit that was HEAD at the time\n+`git stash` was run, it restores the originally stashed state with\n+no conflicts.\n+\n clear::\n \tRemove all the stashed states. Note that those states will then\n \tbe subject to pruning, and may be difficult or impossible to recover.\ndiff --git a/git-stash.sh b/git-stash.sh\nindex 4938ade..8e50b03 100755\n--- a/git-stash.sh\n+++ b/git-stash.sh\n@@ -218,6 +218,23 @@ drop_stash () {\n \tgit rev-parse --verify \"$ref_stash@{0}\" > /dev/null 2>&1 || clear_stash\n }\n \n+apply_to_branch () {\n+\thave_stash || die 'Nothing to apply'\n+\n+\ttest -n \"$1\" || die 'No branch name specified'\n+\tbranch=$1\n+\n+\tif test -z \"$2\"\n+\tthen\n+\t\tset x \"$ref_stash@{0}\"\n+\tfi\n+\tstash=$2\n+\n+\tgit-checkout -b $branch $stash^ &&\n+\tapply_stash $stash &&\n+\tdrop_stash $stash\n+}\n+\n # Main command set\n case \"$1\" in\n list)\n@@ -264,6 +281,10 @@ pop)\n \t\tdrop_stash \"$@\"\n \tfi\n \t;;\n+branch)\n+\tshift\n+\tapply_to_branch \"$@\"\n+\t;;\n *)\n \tif test $# -eq 0\n \tthen\n-- \n1.5.6\n"},{"id":"82087","messageId":"7v63rn61yj.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080703022316.GA25433@toroid.org","subject":"Re: [PATCH] Implement \"git stash branch <newbranch> <stash>\"","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-03T04:12:04Z","receivedAt":"2008-07-03T04:12:04Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Abhijit Menon-Sen <ams@toroid.org> writes:\n\n> +branch <branchname> [<stash>]::\n> +\n> +\tCreates and checks out a new branch named `<branchname>` starting from\n> +\tthe commit at which the `<stash>` was originally created, applies the\n> +\tchanges recorded in `<stash>` to the new working tree, and drops the\n> +\t`<stash>` if that completes successfully. When no `<stash>` is given,\n> +\tapplies the latest one.\n> ++\n> +This is useful if the branch on which you ran `git stash save` has\n> +changed enough that `git stash apply` fails due to conflicts. Since\n> +the stash is applied on top of the commit that was HEAD at the time\n> +`git stash` was run, it restores the originally stashed state with\n> +no conflicts.\n\nPerhaps we would want to replay the stash always with --index for this\napplication.  By definition this will be conflict-free both in the index\nand in the working tree.\n\nI've also toyed with an idea to make <branchname> optional, and detach the\nHEAD if <branchname> is not given.  It would be a useful mode of operation\nbut one problem is that it is _not_ an operation that should be called\n\"branch\" anymore.\n"},{"id":"82058","messageId":"B01C53C6-6FB6-44EF-987F-1574A77C2F95@zib.de","threadId":"12603","inReplyTo":"200807022132.27751.johannes.sixt@telecom.at","subject":"Re: [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-03T06:06:30Z","receivedAt":"2008-07-03T06:06:30Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jul 2, 2008, at 9:32 PM, Johannes Sixt wrote:\n\n> On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n>> On Jul 2, 2008, at 6:17 PM, Johannes Schindelin wrote:\n>>> On Wed, 2 Jul 2008, Steffen Prohaska wrote:\n>>>> From: Johannes Sixt <johannes.sixt@telecom.at>\n>>>>\n>>>> Hannes,\n>>>> You introduced \"minoffset\" in 861429a7c37c7.\n>>>\n>>> AFAICT it was redone differently in 'next', because 'next' has this\n>>> ceiling dir thingie, which allows a different (much smaller) patch.\n>>>\n>>> It might be more sensible to base your patch series on 'next'...\n>>\n>> Hmm.. it is based on next.  But obviously I needed to merge\n>> mingw's master to 4msysgit's master and resolve conflicts.\n>> Maybe I made the wrong decisions then.\n>>\n>> Hannes,\n>> If you believe that your setup.c is good, then I'll copy your version\n>> to 4msysgit's master.\n>\n> The setup.c in mingw.git (and soon Junio's master) and Junio's next  \n> are\n> _different_, but both are correct. If you reverse-apply the patch you\n> presented here, then you get the version from Junio's next, which is  \n> a good\n> state.\n\nOk, I'll wait until Junio's master has the changes and will remove\nthe changes to 4msysgit then.\n\n\tSteffen\n"},{"id":"82059","messageId":"7v63rn4hr8.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"B01C53C6-6FB6-44EF-987F-1574A77C2F95@zib.de","subject":"Re: [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-03T06:13:47Z","receivedAt":"2008-07-03T06:13:47Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\nSteffen Prohaska <prohaska@zib.de> writes:\n\n> On Jul 2, 2008, at 9:32 PM, Johannes Sixt wrote:\n>\n>> The setup.c in mingw.git (and soon Junio's master) and Junio's next\n>> are\n>> _different_, but both are correct. If you reverse-apply the patch you\n>> presented here, then you get the version from Junio's next, which is\n>> a good\n>> state.\n>\n> Ok, I'll wait until Junio's master has the changes and will remove\n> the changes to 4msysgit then.\n\nThere will be a slight difference between the setup.c in soon-to-be master\nand j6t/mingw (14086b0), due to recent optimization already on 'master'\nfrom Linus, 044bbbc (Make git_dir a path relative to work_tree in\nsetup_work_tree(), 2008-06-19).\n\ndiff --git a/setup.c b/setup.c\nindex 8bb7b10..cc3fb38 100644\n--- a/setup.c\n+++ b/setup.c\n@@ -308,9 +308,10 @@ void setup_work_tree(void)\n \twork_tree = get_git_work_tree();\n \tgit_dir = get_git_dir();\n \tif (!is_absolute_path(git_dir))\n-\t\tset_git_dir(make_absolute_path(git_dir));\n+\t\tgit_dir = make_absolute_path(git_dir);\n \tif (!work_tree || chdir(work_tree))\n \t\tdie(\"This operation must be run in a work tree\");\n+\tset_git_dir(make_relative_path(git_dir, work_tree));\n \tinitialized = 1;\n }\n \n"},{"id":"82073","messageId":"20080703061605.GB3815@toroid.org","threadId":"12603","inReplyTo":"7v63rn61yj.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Implement \"git stash branch <newbranch> <stash>\"","fromName":"Abhijit Menon-Sen","fromEmail":"ams@toroid.org","sentAt":"2008-07-03T06:16:05Z","receivedAt":"2008-07-03T06:16:05Z","isPatch":true,"sender":{"key":"ams@toroid.org","avatar":null},"body":"Restores the stashed state on a new branch rooted at the commit on which\nthe stash was originally created, so that conflicts caused by subsequent\nchanges on the original branch can be dealt with.\n\n(Thanks to Junio for this nice idea.)\n\nSigned-off-by: Abhijit Menon-Sen <ams@toroid.org>\n---\n Documentation/git-stash.txt |   19 ++++++++++++++++++-\n git-stash.sh                |   21 +++++++++++++++++++++\n 2 files changed, 39 insertions(+), 1 deletions(-)\n\n(Reposting with --index and the missing Signed-off-by added.)\n\ndiff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt\nindex 23ac331..a4cbd0c 100644\n--- a/Documentation/git-stash.txt\n+++ b/Documentation/git-stash.txt\n@@ -8,8 +8,11 @@ git-stash - Stash the changes in a dirty working directory away\n SYNOPSIS\n --------\n [verse]\n-'git stash' (list | show [<stash>] | apply [<stash>] | clear | drop [<stash>] | pop [<stash>])\n+'git stash' list\n+'git stash' (show | apply | drop | pop ) [<stash>]\n+'git stash' branch <branchname> [<stash>]\n 'git stash' [save [<message>]]\n+'git stash' clear\n \n DESCRIPTION\n -----------\n@@ -81,6 +84,20 @@ tree's changes, but also the index's ones. However, this can fail, when you\n have conflicts (which are stored in the index, where you therefore can no\n longer apply the changes as they were originally).\n \n+branch <branchname> [<stash>]::\n+\n+\tCreates and checks out a new branch named `<branchname>` starting from\n+\tthe commit at which the `<stash>` was originally created, applies the\n+\tchanges recorded in `<stash>` to the new working tree and index, then\n+\tdrops the `<stash>` if that completes successfully. When no `<stash>`\n+\tis given, applies the latest one.\n++\n+This is useful if the branch on which you ran `git stash save` has\n+changed enough that `git stash apply` fails due to conflicts. Since\n+the stash is applied on top of the commit that was HEAD at the time\n+`git stash` was run, it restores the originally stashed state with\n+no conflicts.\n+\n clear::\n \tRemove all the stashed states. Note that those states will then\n \tbe subject to pruning, and may be difficult or impossible to recover.\ndiff --git a/git-stash.sh b/git-stash.sh\nindex 4938ade..889445c 100755\n--- a/git-stash.sh\n+++ b/git-stash.sh\n@@ -218,6 +218,23 @@ drop_stash () {\n \tgit rev-parse --verify \"$ref_stash@{0}\" > /dev/null 2>&1 || clear_stash\n }\n \n+apply_to_branch () {\n+\thave_stash || die 'Nothing to apply'\n+\n+\ttest -n \"$1\" || die 'No branch name specified'\n+\tbranch=$1\n+\n+\tif test -z \"$2\"\n+\tthen\n+\t\tset x \"$ref_stash@{0}\"\n+\tfi\n+\tstash=$2\n+\n+\tgit-checkout -b $branch $stash^ &&\n+\tapply_stash --index $stash &&\n+\tdrop_stash $stash\n+}\n+\n # Main command set\n case \"$1\" in\n list)\n@@ -264,6 +281,10 @@ pop)\n \t\tdrop_stash \"$@\"\n \tfi\n \t;;\n+branch)\n+\tshift\n+\tapply_to_branch \"$@\"\n+\t;;\n *)\n \tif test $# -eq 0\n \tthen\n-- \n1.5.6\n"},{"id":"82100","messageId":"alpine.DEB.1.00.0807031208050.9925@racer","threadId":"12603","inReplyTo":"200807022046.28141.johannes.sixt@telecom.at","subject":"Re: [PATCH 03/12] MinGW: Convert CR/LF to LF in tag signatures","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-03T11:08:58Z","receivedAt":"2008-07-03T11:08:58Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"\nHi,\n\nOn Wed, 2 Jul 2008, Johannes Sixt wrote:\n\n> On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> > From: Johannes Schindelin <johannes.schindelin@gmx.de>\n> >\n> > On Windows, gpg outputs CR/LF signatures.  But since the tag\n> > messages are already stripped of the CR by stripspace(), it is\n> > arguably nicer to do the same for the tag signature.  Actually,\n> > this patch does not look for CR/LF, but strips all CRs\n> > from the signature.\n> >\n> > [ spr: ported code to use strbuf ]\n> >\n> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\n> > Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> > ---\n> >  builtin-tag.c |   14 ++++++++++++++\n> >  1 files changed, 14 insertions(+), 0 deletions(-)\n> >\n> > diff --git a/builtin-tag.c b/builtin-tag.c\n> > index e675206..77977ba 100644\n> > --- a/builtin-tag.c\n> > +++ b/builtin-tag.c\n> > @@ -241,6 +241,20 @@ static int do_sign(struct strbuf *buffer)\n> >  \tif (finish_command(&gpg) || !len || len < 0)\n> >  \t\treturn error(\"gpg failed to sign the tag\");\n> >\n> > +#ifdef __MINGW32__\n> > +\t/* strip CR from the line endings */\n> > +\t{\n> > +\t\tint i, j;\n> > +\t\tfor (i = j = 0; i < buffer->len; i++)\n> > +\t\t\tif (buffer->buf[i] != '\\r') {\n> > +\t\t\t\tif (i != j)\n> > +\t\t\t\t\tbuffer->buf[j] = buffer->buf[i];\n> > +\t\t\t\tj++;\n> > +\t\t\t}\n> > +\t\tstrbuf_setlen(buffer, j);\n> > +\t}\n> > +#endif\n> > +\n> >  \treturn 0;\n> >  }\n> \n> Do we need the #ifdef __MINGW32__? Can't we just strip CRs unconditionally? It \n> shouldn't hurt on Unix anyway.\n\nI agree, and I would even like to refactor this into its own function.  \nProbably even move it to strbuf.[ch].\n\nCiao,\nDscho\n"},{"id":"82101","messageId":"alpine.DEB.1.00.0807031209440.9925@racer","threadId":"12603","inReplyTo":"200807022104.20146.johannes.sixt@telecom.at","subject":"Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-03T11:10:14Z","receivedAt":"2008-07-03T11:10:14Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"\nHi,\n\nOn Wed, 2 Jul 2008, Johannes Sixt wrote:\n\n> On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> > From: Edward Z. Yang <edwardzyang@thewritingpot.com>\n> >\n> > PuTTY requires -P while OpenSSH requires -p; if plink is detected\n> > as GIT_SSH, use the alternate flag.\n> >\n> > Signed-off-by: Edward Z. Yang <edwardzyang@thewritingpot.com>\n> > Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> > ---\n> >  connect.c |    4 +++-\n> >  1 files changed, 3 insertions(+), 1 deletions(-)\n> >\n> > diff --git a/connect.c b/connect.c\n> > index 574f42f..0d007f3 100644\n> > --- a/connect.c\n> > +++ b/connect.c\n> > @@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2], const\n> > char *url_orig, conn->argv = arg = xcalloc(6, sizeof(*arg));\n> >  \tif (protocol == PROTO_SSH) {\n> >  \t\tconst char *ssh = getenv(\"GIT_SSH\");\n> > +\t\tint putty = ssh && strstr(ssh, \"plink\");\n> >  \t\tif (!ssh) ssh = \"ssh\";\n> >\n> >  \t\t*arg++ = ssh;\n> >  \t\tif (port) {\n> > -\t\t\t*arg++ = \"-p\";\n> > +\t\t\t/* P is for PuTTY, p is for OpenSSH */\n> > +\t\t\t*arg++ = putty ? \"-P\" : \"-p\";\n> >  \t\t\t*arg++ = port;\n> >  \t\t}\n> >  \t\t*arg++ = host;\n> \n> What about installing a wrapper script, plinkssh, that does this:\n> \n> #!/bin/bash\n> \n> if test \"$1\" = -p; then\n> \tport=\"-P $2\"\n> \tshift; shift\n> fi\n> \n> exec plink $port \"$@\"\n> \n> and require plink users to set GIT_SSH=plinkssh?\n\nI like that better than this special-casing of plink.\n\nCiao,\nDscho\n"},{"id":"82144","messageId":"200807032124.22037.trast@student.ethz.ch","threadId":"12603","inReplyTo":"7vod5f7w3f.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 2/3] git-add--interactive: remove hunk coalescing","fromName":"Thomas Rast","fromEmail":"trast@student.ethz.ch","sentAt":"2008-07-03T19:24:13Z","receivedAt":"2008-07-03T19:24:13Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"Junio C Hamano wrote:\n> \n> > Blindly concatenating the above two and feeding them to \"git apply\" *may*\n> > happen to work by accident, not by design.  This very much feels like a\n> > hack of \"This works most of the time for me, your mileage may vary\" kind,\n> > which we would want to avoid when we can.\n> \n> Well, I changed my mind.  Let's run with this and see what happens.\n\nIn support of this being a feature of git-apply, notice that it even\nhandles the situation correctly where the context of a hunk has been\ninfluenced by previous hunks, as in\n\n@@ -1,2 +1,3 @@\n foo\n+quux\n bar\n@@ -1,3 +1,4 @@\n foo\n quux\n+abc\n bar\n\nWith Don Zickus' recent patch, it also handles patches that go over\nthe same file twice.\n\n- Thomas\n\n-- \nThomas Rast\ntrast@student.ethz.ch\n\n\n\n"},{"id":"82163","messageId":"7vwsk2y738.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"200807032124.22037.trast@student.ethz.ch","subject":"Re: [PATCH 2/3] git-add--interactive: remove hunk coalescing","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-03T21:46:03Z","receivedAt":"2008-07-03T21:46:03Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thomas Rast <trast@student.ethz.ch> writes:\n\n> Junio C Hamano wrote:\n>> \n>> > Blindly concatenating the above two and feeding them to \"git apply\" *may*\n>> > happen to work by accident, not by design.  This very much feels like a\n>> > hack of \"This works most of the time for me, your mileage may vary\" kind,\n>> > which we would want to avoid when we can.\n>> \n>> Well, I changed my mind.  Let's run with this and see what happens.\n>\n> In support of this being a feature of git-apply, notice that it even\n> handles the situation correctly where the context of a hunk has been\n> influenced by previous hunks, as in...\n\nThat's what meant by my earlier \"application is hunk-by-hunk in nature\"\nand we are in agreement.  The fact it works that way is not quite by\ndesign and close to being \"by accident\", but I do not foresee anybody\nchanging it in the near future, so...\n"},{"id":"82211","messageId":"579FEE2E-CAED-412D-B4F2-AAEA303A3DAC@zib.de","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807031209440.9925@racer","subject":"Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-04T08:50:49Z","receivedAt":"2008-07-04T08:50:49Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jul 3, 2008, at 1:10 PM, Johannes Schindelin wrote:\n\n> On Wed, 2 Jul 2008, Johannes Sixt wrote:\n>\n>> On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n>>> From: Edward Z. Yang <edwardzyang@thewritingpot.com>\n>>>\n>>> PuTTY requires -P while OpenSSH requires -p; if plink is detected\n>>> as GIT_SSH, use the alternate flag.\n>>>\n>>> Signed-off-by: Edward Z. Yang <edwardzyang@thewritingpot.com>\n>>> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n>>> ---\n>>> connect.c |    4 +++-\n>>> 1 files changed, 3 insertions(+), 1 deletions(-)\n>>>\n>>> diff --git a/connect.c b/connect.c\n>>> index 574f42f..0d007f3 100644\n>>> --- a/connect.c\n>>> +++ b/connect.c\n>>> @@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2],  \n>>> const\n>>> char *url_orig, conn->argv = arg = xcalloc(6, sizeof(*arg));\n>>> \tif (protocol == PROTO_SSH) {\n>>> \t\tconst char *ssh = getenv(\"GIT_SSH\");\n>>> +\t\tint putty = ssh && strstr(ssh, \"plink\");\n>>> \t\tif (!ssh) ssh = \"ssh\";\n>>>\n>>> \t\t*arg++ = ssh;\n>>> \t\tif (port) {\n>>> -\t\t\t*arg++ = \"-p\";\n>>> +\t\t\t/* P is for PuTTY, p is for OpenSSH */\n>>> +\t\t\t*arg++ = putty ? \"-P\" : \"-p\";\n>>> \t\t\t*arg++ = port;\n>>> \t\t}\n>>> \t\t*arg++ = host;\n>>\n>> What about installing a wrapper script, plinkssh, that does this:\n>>\n>> #!/bin/bash\n>>\n>> if test \"$1\" = -p; then\n>> \tport=\"-P $2\"\n>> \tshift; shift\n>> fi\n>>\n>> exec plink $port \"$@\"\n>>\n>> and require plink users to set GIT_SSH=plinkssh?\n>\n> I like that better than this special-casing of plink.\n\n\nI'd prefer to change connect.c.  plinkssh would introduce another\ndependency on the shell, while our overall goal is to avoid shell as\nmuch as possible on Windows, no?  Edward's solution also looks more\nobvious to me than the plinkssh wrapper script.\n\n\tSteffen\n"},{"id":"82213","messageId":"394A4A6F-3D31-4E38-A312-B49DE54FBBDD@zib.de","threadId":"12603","inReplyTo":"200807022057.47588.johannes.sixt@telecom.at","subject":"Re: [PATCH 05/12] Windows(msysgit): Per default, display help as HTML in default browser","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-04T09:06:51Z","receivedAt":"2008-07-04T09:06:51Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Jul 2, 2008, at 8:57 PM, Johannes Sixt wrote:\n\n> On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n>> The implementation directly calls the Win32 API to launch the  \n>> browser.\n>> Note that the specific directory layout of msysgit is required.\n>\n>> +#ifdef __MINGW32__\n>> +\tconst char* exec_path = git_exec_path();\n>> +\tchar *htmlpath = make_native_separator(\n>> +\t\t\t   mkpath(\"%s/../doc/git/html/%s.html\"\n>> +\t\t\t\t  , exec_path\n>> +\t\t\t\t  , git_cmd)\n>> +\t\t\t );\n>> +\tif (!file_exists(htmlpath)) {\n>> +\t\thtmlpath = make_native_separator(\n>> +\t\t\t      mkpath(\"%s/../doc/git/html/git-%s.html\"\n>> +\t\t\t\t     , exec_path\n>> +\t\t\t\t     , git_cmd)\n>> +\t\t\t   );\n>> +\t\tif (!file_exists(htmlpath)) {\n>> +\t\t\tfprintf(stderr, \"Can't find HTML help for '%s'.\\n\"\n>> +\t\t\t\t, git_cmd);\n>> +\t\t\texit(1);\n>> +\t\t}\n>> +\t}\n>> +\tprintf(\"Launching default browser to display HTML help ...\\n\");\n>> +\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n>> +#else\n>\n> Can't we move this part into git-web--browse.sh? It should be a  \n> matter of\n> calling\n>\n> \tstart $htmlpath\n>\n> (and msys-1.0.dll would convert slashes to backslashes for us).\n\nI try to avoid the shell as much as possible on Windows.\n\nHow about the two following patches:\n\n  [PATCH 1/2] help.c: Add support for htmldir relative to  \ngit_exec_path()\n  [PATCH 2/2] help (Windows): Display HTML in default browser using  \nWin32 API\n\nI'll send them as replies to this mail.\n\n\tSteffen\n\n\t\n"},{"id":"82214","messageId":"1215162566-16062-1-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"394A4A6F-3D31-4E38-A312-B49DE54FBBDD@zib.de","subject":"[PATCH 1/2] help.c: Add support for htmldir relative to git_exec_path()","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-04T09:09:25Z","receivedAt":"2008-07-04T09:09:25Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"If htmldir (in the Makefile) is a relative path, this path will be\ninterpreted relative to git_exec_path.  This can be used to create an\ninstallation that can be moved to a different directory without\nre-compiling.  The Windows installer (msysgit) is an example for such\na setup.\n\nNote that the Makefile maps htmldir to the define GIT_HTML_PATH.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n help.c |   14 +++++++++++---\n 1 files changed, 11 insertions(+), 3 deletions(-)\n\ndiff --git a/help.c b/help.c\nindex ca9632b..5586e1d 100644\n--- a/help.c\n+++ b/help.c\n@@ -634,12 +634,20 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)\n {\n \tstruct stat st;\n \n+\tconst char* html_path = GIT_HTML_PATH;\n+\tif (!is_absolute_path(html_path)) {\n+\t\tstruct strbuf d = STRBUF_INIT;\n+\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), html_path);\n+\t\thtml_path = strbuf_detach(&d, NULL);\n+\t}\n+\n \t/* Check that we have a git documentation directory. */\n-\tif (stat(GIT_HTML_PATH \"/git.html\", &st) || !S_ISREG(st.st_mode))\n-\t\tdie(\"'%s': not a documentation directory.\", GIT_HTML_PATH);\n+\tif (stat(mkpath(\"%s/git.html\", html_path), &st)\n+\t    || !S_ISREG(st.st_mode))\n+\t\tdie(\"'%s': not a documentation directory.\", html_path);\n \n \tstrbuf_init(page_path, 0);\n-\tstrbuf_addf(page_path, GIT_HTML_PATH \"/%s.html\", page);\n+\tstrbuf_addf(page_path, \"%s/%s.html\", html_path, page);\n }\n \n static void show_html_page(const char *git_cmd)\n-- \n1.5.6.1.282.gd8a0d\n"},{"id":"82215","messageId":"1215162566-16062-2-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1215162566-16062-1-git-send-email-prohaska@zib.de","subject":"[PATCH 2/2] help (Windows): Display HTML in default browser using Win32 API","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-04T09:09:26Z","receivedAt":"2008-07-04T09:09:26Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"The Win32 API is now called directly to launch the system's default\nbrowser for displaying HTML help pages instead of launching a shell to\nexecute git-web--browser.  Avoiding the MSYS' bash when possible is good\nbecause it avoids potential path translation issues.  In this case it is\nnot too hard to avoid launching a shell, so let's avoid it.\n\nThis commit also adds make_native_separator() to convert slashes to\nbackslashes on Windows.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n cache.h |    2 ++\n help.c  |   18 ++++++++++++++++++\n path.c  |   18 ++++++++++++++++++\n 3 files changed, 38 insertions(+), 0 deletions(-)\n\ndiff --git a/cache.h b/cache.h\nindex 35a9132..747581f 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -527,6 +527,8 @@ static inline int is_absolute_path(const char *path)\n const char *make_absolute_path(const char *path);\n const char *make_nonrelative_path(const char *path);\n const char *make_relative_path(const char *abs, const char *base);\n+/* Convert slashes to backslashes on Windows.  no-op on other platforms. */\n+const char *make_native_separator(const char *path);\n \n /* Read and unpack a sha1 file into memory, write memory to a sha1 file */\n extern int sha1_object_info(const unsigned char *, unsigned long *);\ndiff --git a/help.c b/help.c\nindex 5586e1d..8fcd644 100644\n--- a/help.c\n+++ b/help.c\n@@ -9,6 +9,7 @@\n #include \"common-cmds.h\"\n #include \"parse-options.h\"\n #include \"run-command.h\"\n+#include \"dir.h\"\n \n static struct man_viewer_list {\n \tstruct man_viewer_list *next;\n@@ -650,6 +651,19 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)\n \tstrbuf_addf(page_path, \"%s/%s.html\", html_path, page);\n }\n \n+#ifdef __MINGW32__\n+static void open_html_win(const char *unixpath)\n+{\n+\tconst char *htmlpath = make_native_separator(mkpath(\"%s\",unixpath));\n+\tif (!file_exists(htmlpath)) {\n+\t\tfprintf(stderr, \"HTML file '%s' does not exist.\\n\", htmlpath);\n+\t\texit(1);\n+\t}\n+\tprintf(\"Launching default browser to display HTML help ...\\n\");\n+\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n+}\n+#endif\n+\n static void show_html_page(const char *git_cmd)\n {\n \tconst char *page = cmd_to_page(git_cmd);\n@@ -657,7 +671,11 @@ static void show_html_page(const char *git_cmd)\n \n \tget_html_page_path(&page_path, page);\n \n+#ifdef __MINGW32__\n+\topen_html_win(page_path.buf);\n+#else\n \texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", page_path.buf, NULL);\n+#endif\n }\n \n void help_unknown_cmd(const char *cmd)\ndiff --git a/path.c b/path.c\nindex 496123c..9f2bd91 100644\n--- a/path.c\n+++ b/path.c\n@@ -343,3 +343,21 @@ const char *make_relative_path(const char *abs, const char *base)\n \tstrcpy(buf, abs + baselen);\n \treturn buf;\n }\n+\n+const char *make_native_separator(const char* path) {\n+#ifdef __MINGW32__\n+\tstatic char buf[PATH_MAX + 1];\n+\tchar* c;\n+\n+\tif (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)\n+\t\tdie (\"Too long path: %.*s\", 60, path);\n+\n+\tfor (c = buf; *c; c++) {\n+\t\tif (*c == '/')\n+\t\t\t*c = '\\\\';\n+\t}\n+\treturn buf;\n+#else\n+\treturn path;\n+#endif\n+}\n-- \n1.5.6.1.282.gd8a0d\n"},{"id":"82217","messageId":"7vod5euhw3.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"200807022104.20146.johannes.sixt@telecom.at","subject":"Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-04T09:18:36Z","receivedAt":"2008-07-04T09:18:36Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <johannes.sixt@telecom.at> writes:\n\n> What about installing a wrapper script, plinkssh, that does this:\n>\n> #!/bin/bash\n>\n> if test \"$1\" = -p; then\n> \tport=\"-P $2\"\n> \tshift; shift\n> fi\n>\n> exec plink $port \"$@\"\n>\n> and require plink users to set GIT_SSH=plinkssh?\n\nThat's quite a nice solution with absolute minimum impact.\n"},{"id":"82218","messageId":"7vk5g2uhi9.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1215162566-16062-1-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 1/2] help.c: Add support for htmldir relative to git_exec_path()","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-04T09:26:54Z","receivedAt":"2008-07-04T09:26:54Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Steffen Prohaska <prohaska@zib.de> writes:\n\n> If htmldir (in the Makefile) is a relative path, this path will be\n> interpreted relative to git_exec_path.  This can be used to create an\n> installation that can be moved to a different directory without\n> re-compiling.  The Windows installer (msysgit) is an example for such\n> a setup.\n> ...\n> +\tconst char* html_path = GIT_HTML_PATH;\n\nStyle.  Asterisk sticks to the variable, not type.\n\n> +\tif (!is_absolute_path(html_path)) {\n> +\t\tstruct strbuf d = STRBUF_INIT;\n> +\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), html_path);\n> +\t\thtml_path = strbuf_detach(&d, NULL);\n> +\t}\n\nI've seen similar \"if $this (which is usually an absolute) is relative, it\nis taken as relative to git_exec_path\" solution employed elsewhere in the\nMinGW series, and I think it makes sense, even though initially I thought\nit was somewhat hacky.\n\nCould you check if there are copy-and-pasted duplicated code you can\nfactor out before continuing this direction?  I suspect templates and\netc/gitconfig are specified in similar fashion, and it would probably be\neasier to maintain if you define once:\n\n\tchar *system_path(const char *specified)\n        {\n        \tif (is_absolute_path(specified))\n\t                return specified;\n\t\t... strbuf dance ...\n                return strbuf_detach(...);\n        }\n\nand use it like this:\n\n\tconst char *html_path = system_path(GIT_HTML_PATH);\n"},{"id":"82219","messageId":"7188A895-D5B9-480E-8486-8A69B8861646@zib.de","threadId":"12603","inReplyTo":"7vod5euhw3.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-04T09:29:27Z","receivedAt":"2008-07-04T09:29:27Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\n\nOn Jul 4, 2008, at 11:18 AM, Junio C Hamano wrote:\n\n> Johannes Sixt <johannes.sixt@telecom.at> writes:\n>\n>> What about installing a wrapper script, plinkssh, that does this:\n>>\n>> #!/bin/bash\n>>\n>> if test \"$1\" = -p; then\n>> \tport=\"-P $2\"\n>> \tshift; shift\n>> fi\n>>\n>> exec plink $port \"$@\"\n>>\n>> and require plink users to set GIT_SSH=plinkssh?\n>\n> That's quite a nice solution with absolute minimum impact.\n\nIt has minimum impact on the source code of git.  The same is not\ntrue, however, for the git user and the installer on Windows:\n\n  - The proposed plinkssh requires that plink is in the PATH.  This is\n    not necessarily the case on Windows.  If plink is not in the PATH,\n    then the user needs to modify plinkssh.\n\n  - The msysgit installer supports setting GIT_SSH to the full path\n    of plink.  It automatically detects this path based on Putty's\n    entries in the Windows registry.  If we choose the plinkssh\n    solution the installer has to be modified.\n\nSetting '-P' in connect.c would have some impact on the git source,\nbut would avoid changes elsewhere.\n\n\tSteffen\n"},{"id":"82221","messageId":"alpine.DEB.1.00.0807041334010.9925@racer","threadId":"12603","inReplyTo":"7vk5g2uhi9.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 1/2] help.c: Add support for htmldir relative to git_exec_path()","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-04T12:35:24Z","receivedAt":"2008-07-04T12:35:24Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 4 Jul 2008, Junio C Hamano wrote:\n\n> Could you check if there are copy-and-pasted duplicated code you can \n> factor out before continuing this direction?\n\nNote also that Hannes tried very hard to get rid of those ugly \"#ifdef \n__MINGW32__\"s by declaring/overriding functions in git-compat-util.h.\n\nI think that is such a good practice that we should not stop here.\n\nCiao,\nDscho\n"},{"id":"82237","messageId":"1f748ec60807040909r4022d714s4487f5991f6020dc@mail.gmail.com","threadId":"12603","inReplyTo":"7188A895-D5B9-480E-8486-8A69B8861646@zib.de","subject":"Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)","fromName":"Clifford Caoile","fromEmail":"piyo@users.sourceforge.net","sentAt":"2008-07-04T16:09:07Z","receivedAt":"2008-07-04T16:09:07Z","isPatch":true,"sender":{"key":"piyo@users.sourceforge.net","avatar":null},"body":"\nHi:\n\nOn Fri, Jul 4, 2008 at 6:29 PM, Steffen Prohaska <prohaska@zib.de> wrote:\n>\n> On Jul 4, 2008, at 11:18 AM, Junio C Hamano wrote:\n>\n>> Johannes Sixt <johannes.sixt@telecom.at> writes:\n>>\n>>> What about installing a wrapper script, plinkssh, that does this:\n>>\n>> That's quite a nice solution with absolute minimum impact.\n>\n> It has minimum impact on the source code of git.  The same is not\n> true, however, for the git user and the installer on Windows:\n>\n>  - The proposed plinkssh requires that plink is in the PATH.  This is\n>   not necessarily the case on Windows.  If plink is not in the PATH,\n>   then the user needs to modify plinkssh.\n>\n>  - The msysgit installer supports setting GIT_SSH to the full path\n>   of plink.  It automatically detects this path based on Putty's\n>   entries in the Windows registry.  If we choose the plinkssh\n>   solution the installer has to be modified.\n\nHow about we create one more global environment variable\nMSYSGIT_REAL_PLINK which points to the Windows plink during\ninstallation? Then we set the GIT_SSH to the plinkssh, and the\nproposed plinkssh can point to MSYSGIT_REAL_PLINK?\n\n+ # fall back to plink if MSYSGIT_REAL_PLINK is not defined\n+ # and hope plink is in the path\n+ plink=${MSYSGIT_REAL_PLINK:-plink}\n\n- exec plink $port \"$@\"\n+ exec ${plink} $port \"$@\"\n\nPerhaps I have traded one problem for another, because the msysgit\nuser still has to be aware of MSYSGIT_REAL_PLINK (at least she doesn't\nhave to set it up). And of course, the installer has to be modified to\naccommodate plinkssh and my proposal.\n\nBest regards,\nClifford Caoile\n"},{"id":"82255","messageId":"486E83F7.8070105@thewritingpot.com","threadId":"12603","inReplyTo":"1f748ec60807040909r4022d714s4487f5991f6020dc@mail.gmail.com","subject":"Re: [msysGit] Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)","fromName":"Edward Z. Yang","fromEmail":"edwardzyang@thewritingpot.com","sentAt":"2008-07-04T20:11:35Z","receivedAt":"2008-07-04T20:11:35Z","isPatch":true,"sender":{"key":"edwardzyang@thewritingpot.com","avatar":"https://gravatar.com/avatar/a805a0a3c1d7d36e7fe22270596e4d812723652933c59cac267e67c79126fdd0?d=mp&s=160"},"body":"Clifford Caoile wrote:\n> Perhaps I have traded one problem for another, because the msysgit\n> user still has to be aware of MSYSGIT_REAL_PLINK (at least she doesn't\n> have to set it up). And of course, the installer has to be modified to\n> accommodate plinkssh and my proposal.\n\nThis feels unnecessarily complicated.\n\nWhat would be cool is if we could just set GIT_SSH to plinkssh \n-path-to-plink \"C:\\Path\\To\\plink.exe\" (obviously a shorter flag or \nsomething). Unfortunately, this doesn't seem to work with Git's current \ncommand argument handling.\n"},{"id":"82349","messageId":"7vlk0ffhw3.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vprpwhp7t.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-06T10:04:28Z","receivedAt":"2008-07-06T10:04:28Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be applied to the maintenance series have \"maint-\" in their\nnames.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  Bigger changes will be:\n\n * Port for MinGW.\n\n * With the default Makefile settings, most of the programs will be\n   installed outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\n   some server side programs that need to be accessible for technical\n   reasons.  Invoking a git subcommand as \"git-xyzzy\" from the command\n   line has been deprecated since early 2006 (and officially announced in\n   1.5.4 release notes); use of them from your scripts after adding\n   output from \"git --exec-path\" to the $PATH will still be supported in\n   1.6.0, but users are again strongly encouraged to adjust their\n   scripts to use \"git xyzzy\" form, as we will stop installing\n   \"git-xyzzy\" hardlinks for built-in commands in later releases.\n\n * git-merge will be rewritten in C.\n\n * default pack and idx versions will be updated as scheduled for some\n   time ago.\n\n * GIT_CONFIG, which was only documented as affecting \"git config\", but\n   actually affected all git commands, now only affects \"git config\".\n   GIT_LOCAL_CONFIG, also only documented as affecting \"git config\" and\n   not different from GIT_CONFIG in a useful way, is removed.\n\n----------------------------------------------------------------\n[New Topics]\n\n* js/maint-daemon-syslog (Thu Jul 3 16:27:24 2008 +0100) 1 commit\n - [PARKED improvement suggested not rolled in] git daemon: avoid\n   calling syslog() from a signal handler\n\nThis will eventually appear in 'maint'; currently parked on 'pu', though.\n\n* jc/report-tracking (Sun Jul 6 02:54:56 2008 -0700) 5 commits\n - branch -r -v: do not spit out garbage\n + stat_tracking_info(): clear object flags used during counting\n + git-branch -v: show the remote tracking statistics\n + git-status: show the remote tracking statistics\n + Refactor \"tracking statistics\" code used by \"git checkout\"\n\nMakes the \"your branch is ahead of the tracked one by N commits\" logic and\nmessages available to other commands; status and branch are updated.\n\n* sg/stash-k-i (Fri Jun 27 16:37:15 2008 +0200) 1 commit\n - stash: introduce 'stash save --keep-index' option\n\nOne weakness of our \"partial commit\" workflow support used to be that the\nuser can incrementally build what is to be committed in the index but that\nstate cannot be tested as a whole in the working tree.  This allows you to\ntemporarily stash the remaining changes in the working tree so that the\nindex state before running \"stash save --keep-index\" can be seen in the\nworking tree to be tested and then committed.  A recommended workflow to\nuse after that commit is made needs to be documented (and support needs to\nbe added if necessary).\n\n* tr/add-i-e (Thu Jul 3 00:00:00 2008 +0200) 3 commits\n + git-add--interactive: manual hunk editing mode\n + git-add--interactive: remove hunk coalescing\n + git-add--interactive: replace hunk recounting with apply --recount\n\nAdds 'e/dit' action to interactive add command.\n\n* am/stash-branch (Thu Jul 3 11:46:05 2008 +0530) 1 commit\n + Implement \"git stash branch <newbranch> <stash>\"\n\nCreates a new branch out of the stashed state, after returning from the\ninterrupt that forced you to create the stash in the first place.\n\n* jc/grafts (Wed Jul 2 17:14:12 2008 -0700) 1 commit\n - Ignore graft during object transfer [broken wrt shallow clones]\n\nCloning or fetching from a repository from grafts did not send objects\nthat are hidden by grafts, but the commits in the resulting repository do\nneed these to pass fsck.  This fixes object transfer to ignore grafts.\n\nAnother fix is needed to git-prune so that it ignores grafts but treats\ncommits that are mentioned in grafts as reachable.\n\n* jk/pager-config (Thu Jul 3 07:46:57 2008 -0400) 1 commit\n - Allow per-command pager config\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* js/import-zip (Mon Jun 30 19:50:44 2008 +0100) 1 commit\n + Add another fast-import example, this time for .zip files\n\n* js/apply-root (Wed Jul 2 15:28:22 2008 -0700) 2 commits\n + apply --root: thinkofix.\n + Teach \"git apply\" to prepend a prefix with \"--root=<root>\"\n\n* db/no-git-config (Mon Jun 30 03:37:47 2008 -0400) 1 commit\n + Only use GIT_CONFIG in \"git config\", not other programs\n\n* jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits\n + Make default expiration period of reflog used for stash infinite\n + Per-ref reflog expiry configuration\n\nAs 1.6.0 will be a good time to make backward incompatible changes, the\ntip commit makes the default expiry period of stash 'never', unless you\nconfigure them to expire explicitly using gc.refs/stash.* variables.\nNeeds consensus, but I am guessing that enough people would want stash\nthat does not expire.\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n + Eliminate an unnecessary chdir(\"..\")\n + Add support for GIT_CEILING_DIRECTORIES\n + Fold test-absolute-path into test-path-utils\n + Implement normalize_absolute_path\n\nThis still feels \"because we can\", not \"because we need to\", but it came\nfrom somebody who had the need to, and I do not think it hurts people\nwithout the environment variable set.\n\n* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits\n + rerere.autoupdate\n + t4200: fix rerere test\n + rerere: remove dubious \"tail_optimization\"\n + git-rerere: detect unparsable conflicts\n + rerere: rerere_created_at() and has_resolution() abstraction\n\nA new configuration will allow paths that have been resolved cleanly by\nrerere to be updated in the index automatically.\n\nTo me, this is \"because we can\", but was something requested by Ingo, so\npresumably some people may feel it useful in their workflow.\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* mv/merge-in-c (Tue Jul 1 04:37:50 2008 +0200) 15 commits\n - [REJECT -- over-abuse of path-list] Build in merge\n + Fix t7601-merge-pull-config.sh on AIX\n + git-commit-tree: make it usable from other builtins\n + Add new test case to ensure git-merge prepends the custom merge\n   message\n + Add new test case to ensure git-merge reduces octopus parents when\n   possible\n + Introduce reduce_heads()\n + Introduce get_merge_bases_many()\n + Add new test to ensure git-merge handles more than 25 refs.\n + Introduce get_octopus_merge_bases() in commit.c\n + git-fmt-merge-msg: make it usable from other builtins\n + Move read_cache_unmerged() to read-cache.c\n + Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n + Move parse-options's skip_prefix() to git-compat-util.h\n + Move commit_list_count() to commit.c\n + Move split_cmdline() to alias.c\n\nThe last one is still not quite there, I am afraid.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits\n + compat/pread.c: Add a forward declaration to fix a warning\n + Windows: Fix ntohl() related warnings about printf formatting\n + Windows: TMP and TEMP environment variables specify a temporary\n   directory.\n + Windows: Make 'git help -a' work.\n + Windows: Work around an oddity when a pipe with no reader is\n   written to.\n + Windows: Make the pager work.\n + When installing, be prepared that template_dir may be relative.\n + Windows: Use a relative default template_dir and ETC_GITCONFIG\n + Windows: Compute the fallback for exec_path from the program\n   invocation.\n + Turn builtin_exec_path into a function.\n + Windows: Use a customized struct stat that also has the st_blocks\n   member.\n + Windows: Add a custom implementation for utime().\n + Windows: Add a new lstat and fstat implementation based on Win32\n   API.\n + Windows: Implement a custom spawnve().\n + Windows: Implement wrappers for gethostbyname(), socket(), and\n   connect().\n + Windows: Work around incompatible sort and find.\n + Windows: Implement asynchronous functions as threads.\n + Windows: Disambiguate DOS style paths from SSH URLs.\n + Windows: A rudimentary poll() emulation.\n + Windows: Implement start_command().\n + Windows: A pipe() replacement whose ends are not inherited to\n   children.\n + Windows: Wrap execve so that shell scripts can be invoked.\n + Windows: Implement setitimer() and sigaction().\n + Windows: Fix PRIuMAX definition.\n + Windows: Implement gettimeofday().\n + Make my_mktime() public and rename it to tm_to_time_t()\n + Windows: Work around misbehaved rename().\n + Windows: always chmod(, 0666) before unlink().\n + Windows: A minimal implemention of getpwuid().\n + Windows: Implement a wrapper of the open() function.\n + Windows: Strip \".exe\" from the program name.\n + Windows: Handle absolute paths in\n   safe_create_leading_directories().\n + Windows: Treat Windows style path names.\n + setup.c: Prepare for Windows directory separators.\n + Windows: Use the Windows style PATH separator ';'.\n + Add target architecture MinGW.\n + Compile some programs only conditionally.\n + Add compat/regex.[ch] and compat/fnmatch.[ch].\n\n----------------------------------------------------------------\n[On Hold]\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis was previously in \"will be in master soon\" category, but it turns out\nthat the synonyms to the ones this one deletes are fairly new invention\nthat happend in 1.5.6 timeframe, and we cannot do this just yet.  Perhaps\nin 1.7.0.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n\nThis is the \"botched\" one.  Will be resurrected during 1.7.0 or 1.8.0\ntimeframe.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits\n - Migrate git-blame to parse-option partially.\n + parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.\n + parse-opt: fake short strings for callers to believe in.\n + parse-opt: do not print errors on unknown options, return -2\n   intead.\n + parse-opt: create parse_options_step.\n + parse-opt: Export a non NORETURN usage dumper.\n + parse-opt: have parse_options_{start,end}.\n\nI recall Pierre said something about cleaning up the last one when he\nfinds time, but other than that vague recollection, I lost track of this\nseries.  I am tempted to fork a few topics off of the penúltimo one to\nconvert a few more commands as examples and merge the result to 'next'.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n\n* jc/merge-theirs (Mon Jun 30 22:18:57 2008 -0700) 5 commits\n + Make \"subtree\" part more orthogonal to the rest of merge-\n   recursive.\n + Teach git-pull to pass -X<option> to git-merge\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -Xsubtree=foo/bar/baz -s recursive other\" now.\n\nThe -X<option> part may change, Dscho mentions that a single-letter -X\nthat take stuck option is against syntax rules, and I think he's right.\n\nThis is more \"because we can\", not \"because we need to\".\n"},{"id":"82353","messageId":"alpine.LSU.1.00.0807061309140.32725@wbgn129.biozentrum.uni-wuerzburg.de","threadId":"12603","inReplyTo":"7vlk0ffhw3.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-06T11:10:06Z","receivedAt":"2008-07-06T11:10:06Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 6 Jul 2008, Junio C Hamano wrote:\n\n> * js/apply-root (Wed Jul 2 15:28:22 2008 -0700) 2 commits\n>  + apply --root: thinkofix.\n>  + Teach \"git apply\" to prepend a prefix with \"--root=<root>\"\n\nIf we want to call this \"--directory=<root>\" instead, we should do it \nbefore that commit hits master.\n\nCiao,\nDscho\n"},{"id":"82355","messageId":"20080706112333.GA6477@toroid.org","threadId":"12603","inReplyTo":"20080703061605.GB3815@toroid.org","subject":"[PATCH v3] Implement \"git stash branch <newbranch> <stash>\"","fromName":"Abhijit Menon-Sen","fromEmail":"ams@toroid.org","sentAt":"2008-07-06T11:23:33Z","receivedAt":"2008-07-06T11:23:33Z","isPatch":true,"sender":{"key":"ams@toroid.org","avatar":null},"body":"Restores the stashed state on a new branch rooted at the commit on which\nthe stash was originally created, so that conflicts caused by subsequent\nchanges on the original branch can be dealt with.\n\n(Thanks to Junio for this nice idea.)\n\nSigned-off-by: Abhijit Menon-Sen <ams@toroid.org>\n---\nReposting as requested with a new test included.\n\n Documentation/git-stash.txt |   19 ++++++++++++++++++-\n git-stash.sh                |   21 +++++++++++++++++++++\n t/t3903-stash.sh            |   24 ++++++++++++++++++++++++\n 3 files changed, 63 insertions(+), 1 deletions(-)\n\ndiff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt\nindex 23ac331..a4cbd0c 100644\n--- a/Documentation/git-stash.txt\n+++ b/Documentation/git-stash.txt\n@@ -8,8 +8,11 @@ git-stash - Stash the changes in a dirty working directory away\n SYNOPSIS\n --------\n [verse]\n-'git stash' (list | show [<stash>] | apply [<stash>] | clear | drop [<stash>] | pop [<stash>])\n+'git stash' list\n+'git stash' (show | apply | drop | pop) [<stash>]\n+'git stash' branch <branchname> [<stash>]\n 'git stash' [save [<message>]]\n+'git stash' clear\n \n DESCRIPTION\n -----------\n@@ -81,6 +84,20 @@ tree's changes, but also the index's ones. However, this can fail, when you\n have conflicts (which are stored in the index, where you therefore can no\n longer apply the changes as they were originally).\n \n+branch <branchname> [<stash>]::\n+\n+\tCreates and checks out a new branch named `<branchname>` starting from\n+\tthe commit at which the `<stash>` was originally created, applies the\n+\tchanges recorded in `<stash>` to the new working tree and index, then\n+\tdrops the `<stash>` if that completes successfully. When no `<stash>`\n+\tis given, applies the latest one.\n++\n+This is useful if the branch on which you ran `git stash save` has\n+changed enough that `git stash apply` fails due to conflicts. Since\n+the stash is applied on top of the commit that was HEAD at the time\n+`git stash` was run, it restores the originally stashed state with\n+no conflicts.\n+\n clear::\n \tRemove all the stashed states. Note that those states will then\n \tbe subject to pruning, and may be difficult or impossible to recover.\ndiff --git a/git-stash.sh b/git-stash.sh\nindex 4938ade..889445c 100755\n--- a/git-stash.sh\n+++ b/git-stash.sh\n@@ -218,6 +218,23 @@ drop_stash () {\n \tgit rev-parse --verify \"$ref_stash@{0}\" > /dev/null 2>&1 || clear_stash\n }\n \n+apply_to_branch () {\n+\thave_stash || die 'Nothing to apply'\n+\n+\ttest -n \"$1\" || die 'No branch name specified'\n+\tbranch=$1\n+\n+\tif test -z \"$2\"\n+\tthen\n+\t\tset x \"$ref_stash@{0}\"\n+\tfi\n+\tstash=$2\n+\n+\tgit-checkout -b $branch $stash^ &&\n+\tapply_stash --index $stash &&\n+\tdrop_stash $stash\n+}\n+\n # Main command set\n case \"$1\" in\n list)\n@@ -264,6 +281,10 @@ pop)\n \t\tdrop_stash \"$@\"\n \tfi\n \t;;\n+branch)\n+\tshift\n+\tapply_to_branch \"$@\"\n+\t;;\n *)\n \tif test $# -eq 0\n \tthen\ndiff --git a/t/t3903-stash.sh b/t/t3903-stash.sh\nindex 54d99ed..6d89218 100755\n--- a/t/t3903-stash.sh\n+++ b/t/t3903-stash.sh\n@@ -117,4 +117,28 @@ test_expect_success 'stash pop' '\n \ttest 0 = $(git stash list | wc -l)\n '\n \n+cat > expect << EOF\n+diff --git a/file b/file\n+index 7601807..5716ca5 100644\n+--- a/file\n++++ b/file\n+@@ -1 +1 @@\n+-baz\n++bar\n+EOF\n+\n+test_expect_success 'stash apply' '\n+\techo foo > file &&\n+\tgit commit file -m first\n+\techo bar > file &&\n+\tgit stash &&\n+\techo baz > file &&\n+\tgit commit file -m second &&\n+\tgit stash branch stashbranch &&\n+\tgit commit file -m alternate\\ second &&\n+\tgit diff master..stashbranch > output &&\n+\ttest_cmp output expect &&\n+\ttest 0 = $(git stash list | wc -l)\n+'\n+\n test_done\n-- \n1.5.6\n"},{"id":"82364","messageId":"alpine.LSU.1.00.0807061453540.3486@wbgn129.biozentrum.uni-wuerzburg.de","threadId":"12603","inReplyTo":"20080706112333.GA6477@toroid.org","subject":"Re: [PATCH v3] Implement \"git stash branch <newbranch> <stash>\"","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-06T12:54:44Z","receivedAt":"2008-07-06T12:54:44Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 6 Jul 2008, Abhijit Menon-Sen wrote:\n\n> Restores the stashed state on a new branch rooted at the commit on which\n> the stash was originally created, so that conflicts caused by subsequent\n> changes on the original branch can be dealt with.\n> \n> (Thanks to Junio for this nice idea.)\n> \n> Signed-off-by: Abhijit Menon-Sen <ams@toroid.org>\n> ---\n> Reposting as requested with a new test included.\n\nAFAICS the previous version is in 'next' already: \n656b50345239293929ad8c639c5f1941c6b867ad\n\nHth,\nDscho\n"},{"id":"82371","messageId":"20080706144542.GA8677@toroid.org","threadId":"12603","inReplyTo":"alpine.LSU.1.00.0807061453540.3486@wbgn129.biozentrum.uni-wuerzburg.de","subject":"[PATCH] Add a test for \"git stash branch\"","fromName":"Abhijit Menon-Sen","fromEmail":"ams@toroid.org","sentAt":"2008-07-06T14:45:42Z","receivedAt":"2008-07-06T14:45:42Z","isPatch":true,"sender":{"key":"ams@toroid.org","avatar":null},"body":"Make sure that applying the stash to a new branch after a conflicting\nchange doesn't result in an error when you try to commit.\n\nSigned-off-by: Abhijit Menon-Sen <ams@toroid.org>\n---\n\nAt 2008-07-06 14:54:44 +0200, Johannes.Schindelin@gmx.de wrote:\n>\n> AFAICS the previous version is in 'next' already: \n> 656b50345239293929ad8c639c5f1941c6b867ad\n\nOh, I see, thanks. I misunderstood the request. Here's a separate patch\nto just add the test.\n\nSorry for the noise.\n\n-- ams\n\n t/t3903-stash.sh |   24 ++++++++++++++++++++++++\n 1 files changed, 24 insertions(+), 0 deletions(-)\n\ndiff --git a/t/t3903-stash.sh b/t/t3903-stash.sh\nindex 54d99ed..6d89218 100755\n--- a/t/t3903-stash.sh\n+++ b/t/t3903-stash.sh\n@@ -117,4 +117,28 @@ test_expect_success 'stash pop' '\n \ttest 0 = $(git stash list | wc -l)\n '\n \n+cat > expect << EOF\n+diff --git a/file b/file\n+index 7601807..5716ca5 100644\n+--- a/file\n++++ b/file\n+@@ -1 +1 @@\n+-baz\n++bar\n+EOF\n+\n+test_expect_success 'stash apply' '\n+\techo foo > file &&\n+\tgit commit file -m first\n+\techo bar > file &&\n+\tgit stash &&\n+\techo baz > file &&\n+\tgit commit file -m second &&\n+\tgit stash branch stashbranch &&\n+\tgit commit file -m alternate\\ second &&\n+\tgit diff master..stashbranch > output &&\n+\ttest_cmp output expect &&\n+\ttest 0 = $(git stash list | wc -l)\n+'\n+\n test_done\n-- \n1.5.6\n"},{"id":"82386","messageId":"7v1w26eqn5.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080706144542.GA8677@toroid.org","subject":"Re: [PATCH] Add a test for \"git stash branch\"","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-06T19:53:02Z","receivedAt":"2008-07-06T19:53:02Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Abhijit Menon-Sen <ams@toroid.org> writes:\n\n> At 2008-07-06 14:54:44 +0200, Johannes.Schindelin@gmx.de wrote:\n>>\n>> AFAICS the previous version is in 'next' already: \n>> 656b50345239293929ad8c639c5f1941c6b867ad\n>\n> Oh, I see, thanks. I misunderstood the request. Here's a separate patch\n> to just add the test.\n\nOh, there is no misunderstanding.  You couldn't have possibly known if the\nmain body of the patch will go to 'next' or just be dropped when I said\n\"you might also want to have tests\" to you.\n\n> +test_expect_success 'stash apply' '\n> +\techo foo > file &&\n> +\tgit commit file -m first\n> +\techo bar > file &&\n> +\tgit stash &&\n> +\techo baz > file &&\n> +\tgit commit file -m second &&\n> +\tgit stash branch stashbranch &&\n> +\tgit commit file -m alternate\\ second &&\n> +\tgit diff master..stashbranch > output &&\n> +\ttest_cmp output expect &&\n> +\ttest 0 = $(git stash list | wc -l)\n> +'\n\nThe title is probably not 'stash apply' but 'stash branch'.  Don't you\nwant to also validate that:\n\n - \"stash branch\" command switched to the new branch \"stashbranch\"?\n\n - before making \"alternate second\", the index and the working tree have\n   expected contents?  and\n\n - the final shape of the history looks correctly forked (i.e.\n   \"stashbranch\" branches at the commit before \"-m second\" commit was\n   made)?\n\n>  test_done\n> -- \n> 1.5.6\n"},{"id":"82394","messageId":"20080706212010.GA16343@toroid.org","threadId":"12603","inReplyTo":"7v1w26eqn5.fsf@gitster.siamese.dyndns.org","subject":"[PATCH v2] Add a test for \"git stash branch\"","fromName":"Abhijit Menon-Sen","fromEmail":"ams@toroid.org","sentAt":"2008-07-06T21:20:10Z","receivedAt":"2008-07-06T21:20:10Z","isPatch":true,"sender":{"key":"ams@toroid.org","avatar":null},"body":"Make sure that applying the stash to a new branch after a conflicting\nchange doesn't result in an error when you try to commit.\n\nSigned-off-by: Abhijit Menon-Sen <ams@toroid.org>\n---\n\nAt 2008-07-06 12:53:02 -0700, gitster@pobox.com wrote:\n>\n> The title is probably not 'stash apply' but 'stash branch'.\n\nFixed, thanks.\n\n> Don't you want to also validate that: [...]\n\nDone.\n\n-- ams\n\n t/t3903-stash.sh |   61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++\n 1 files changed, 61 insertions(+), 0 deletions(-)\n\ndiff --git a/t/t3903-stash.sh b/t/t3903-stash.sh\nindex 54d99ed..bd1cdab 100755\n--- a/t/t3903-stash.sh\n+++ b/t/t3903-stash.sh\n@@ -117,4 +117,65 @@ test_expect_success 'stash pop' '\n \ttest 0 = $(git stash list | wc -l)\n '\n \n+cat > expect << EOF\n+diff --git a/file2 b/file2\n+new file mode 100644\n+index 0000000..1fe912c\n+--- /dev/null\n++++ b/file2\n+@@ -0,0 +1 @@\n++bar2\n+EOF\n+\n+cat > expect1 << EOF\n+diff --git a/file b/file\n+index 257cc56..5716ca5 100644\n+--- a/file\n++++ b/file\n+@@ -1 +1 @@\n+-foo\n++bar\n+EOF\n+\n+cat > expect2 << EOF\n+diff --git a/file b/file\n+index 7601807..5716ca5 100644\n+--- a/file\n++++ b/file\n+@@ -1 +1 @@\n+-baz\n++bar\n+diff --git a/file2 b/file2\n+new file mode 100644\n+index 0000000..1fe912c\n+--- /dev/null\n++++ b/file2\n+@@ -0,0 +1 @@\n++bar2\n+EOF\n+\n+test_expect_success 'stash branch' '\n+\techo foo > file &&\n+\tgit commit file -m first\n+\techo bar > file &&\n+\techo bar2 > file2 &&\n+\tgit add file2 &&\n+\tgit stash &&\n+\techo baz > file &&\n+\tgit commit file -m second &&\n+\tgit stash branch stashbranch &&\n+\ttest refs/heads/stashbranch = $(git symbolic-ref HEAD) &&\n+\ttest $(git rev-parse HEAD) = $(git rev-parse master^) &&\n+\tgit diff --cached > output &&\n+\ttest_cmp output expect &&\n+\tgit diff > output &&\n+\ttest_cmp output expect1 &&\n+\tgit add file &&\n+\tgit commit -m alternate\\ second &&\n+\tgit diff master..stashbranch &&\n+\tgit diff master..stashbranch > output &&\n+\ttest_cmp output expect2 &&\n+\ttest 0 = $(git stash list | wc -l)\n+'\n+\n test_done\n-- \n1.5.6\n"},{"id":"82408","messageId":"7vtzf2a326.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.LSU.1.00.0807061309140.32725@wbgn129.biozentrum.uni-wuerzburg.de","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-07T01:36:01Z","receivedAt":"2008-07-07T01:36:01Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> On Sun, 6 Jul 2008, Junio C Hamano wrote:\n>\n>> * js/apply-root (Wed Jul 2 15:28:22 2008 -0700) 2 commits\n>>  + apply --root: thinkofix.\n>>  + Teach \"git apply\" to prepend a prefix with \"--root=<root>\"\n>\n> If we want to call this \"--directory=<root>\" instead, we should do it \n> before that commit hits master.\n\nYeah, perhaps like this?\n\n-- >8 --\ngit-apply --directory: make --root more similar to GNU diff\n\nApplying a patch in the directory that is different from what the patch\nrecords is done with --directory option in GNU diff.  The --root option we\nintroduced previously does the same, and we can call it the same way to\ngive users more familiar feel.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Documentation/git-apply.txt |    8 ++++++--\n builtin-apply.c             |    4 ++--\n t/t4128-apply-root.sh       |    8 ++++----\n 3 files changed, 12 insertions(+), 8 deletions(-)\n\ndiff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt\nindex 63fce53..3cd3179 100644\n--- a/Documentation/git-apply.txt\n+++ b/Documentation/git-apply.txt\n@@ -14,7 +14,7 @@ SYNOPSIS\n \t  [--allow-binary-replacement | --binary] [--reject] [-z]\n \t  [-pNUM] [-CNUM] [--inaccurate-eof] [--cached]\n \t  [--whitespace=<nowarn|warn|fix|error|error-all>]\n-\t  [--exclude=PATH] [--root=<root>] [--verbose] [<patch>...]\n+\t  [--exclude=PATH] [--directory=<root>] [--verbose] [<patch>...]\n \n DESCRIPTION\n -----------\n@@ -177,9 +177,13 @@ behavior:\n \tcurrent patch being applied will be printed. This option will cause\n \tadditional information to be reported.\n \n---root=<root>::\n+--directory=<root>::\n \tPrepend <root> to all filenames.  If a \"-p\" argument was passed, too,\n \tit is applied before prepending the new root.\n++\n+For example, a patch that talks about updating `a/git-gui.sh` to `b/git-gui.sh`\n+can be applied to the file in the working tree `modules/git-gui/git-gui.sh` by\n+running `git apply --directory=modules/git-gui`.\n \n Configuration\n -------------\ndiff --git a/builtin-apply.c b/builtin-apply.c\nindex 6c3db60..c242bbd 100644\n--- a/builtin-apply.c\n+++ b/builtin-apply.c\n@@ -3130,8 +3130,8 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)\n \t\t\tinaccurate_eof = 1;\n \t\t\tcontinue;\n \t\t}\n-\t\tif (!prefixcmp(arg, \"--root=\")) {\n-\t\t\targ += strlen(\"--root=\");\n+\t\tif (!prefixcmp(arg, \"--directory=\")) {\n+\t\t\targ += strlen(\"--directory=\");\n \t\t\troot_len = strlen(arg);\n \t\t\tif (root_len && arg[root_len - 1] != '/') {\n \t\t\t\tchar *new_root;\ndiff --git a/t/t4128-apply-root.sh b/t/t4128-apply-root.sh\nindex b650245..2dd0c75 100755\n--- a/t/t4128-apply-root.sh\n+++ b/t/t4128-apply-root.sh\n@@ -23,18 +23,18 @@ diff a/bla/blub/dir/file b/bla/blub/dir/file\n +Bello\n EOF\n \n-test_expect_success 'apply --root -p (1)' '\n+test_expect_success 'apply --directory -p (1)' '\n \n-\tgit apply --root=some/sub -p3 --index patch &&\n+\tgit apply --directory=some/sub -p3 --index patch &&\n \ttest Bello = $(git show :some/sub/dir/file) &&\n \ttest Bello = $(cat some/sub/dir/file)\n \n '\n \n-test_expect_success 'apply --root -p (2) ' '\n+test_expect_success 'apply --directory -p (2) ' '\n \n \tgit reset --hard initial &&\n-\tgit apply --root=some/sub/ -p3 --index patch &&\n+\tgit apply --directory=some/sub/ -p3 --index patch &&\n \ttest Bello = $(git show :some/sub/dir/file) &&\n \ttest Bello = $(cat some/sub/dir/file)\n \n"},{"id":"82479","messageId":"200807072041.00680.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1214987532-23640-10-git-send-email-prohaska@zib.de","subject":"Re: [msysGit] [PATCH 10/12] Add ANSI control code emulation for the Windows console","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-07T18:41:00Z","receivedAt":"2008-07-07T18:41:00Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"On Mittwoch, 2. Juli 2008, Steffen Prohaska wrote:\n> This adds only the minimum necessary to keep git pull/merge's diffstat from\n> wrapping. Notably absent is support for the K (erase) operation, and\n> support for POSIX write.\n\nI've tested this patch, and it is no longer ready for prime-time in its \ncurrent form. It doesn't do what it advertises (colorize diffstat of merge) \nbecause the diff machinery since some time now uses fprintf, not printf, so \nthe replacements are not called and escape characters are left in the console \nwindow.\n\n> +#ifdef WIN_ANSI\n> +extern int git_fputs(const char *str, FILE *stream);\n> +extern int git_printf(const char *format, ...) __attribute__((format\n> (printf, 1, 2))); +#define fputs git_fputs\n> +#define printf(...) git_printf(__VA_ARGS__)\n> +#endif\n> +\n>  #endif\n\nPut this (without #ifdef WIN_ANSI) in mingw.h and don't change the Makefile.\n\n-- Hannes\n"},{"id":"82530","messageId":"7vtzf1w0rj.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vlk0ffhw3.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-08T02:46:56Z","receivedAt":"2008-07-08T02:46:56Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be applied to the maintenance series have \"maint-\" in their\nnames.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  Bigger changes will be:\n\n * Port for MinGW.\n\n * With the default Makefile settings, most of the programs will be\n   installed outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\n   some server side programs that need to be accessible for technical\n   reasons.  Invoking a git subcommand as \"git-xyzzy\" from the command\n   line has been deprecated since early 2006 (and officially announced in\n   1.5.4 release notes); use of them from your scripts after adding\n   output from \"git --exec-path\" to the $PATH will still be supported in\n   1.6.0, but users are again strongly encouraged to adjust their\n   scripts to use \"git xyzzy\" form, as we will stop installing\n   \"git-xyzzy\" hardlinks for built-in commands in later releases.\n\n * git-merge will be rewritten in C.\n\n * default pack and idx versions will be updated as scheduled for some\n   time ago.\n\n * GIT_CONFIG, which was only documented as affecting \"git config\", but\n   actually affected all git commands, now only affects \"git config\".\n   GIT_LOCAL_CONFIG, also only documented as affecting \"git config\" and\n   not different from GIT_CONFIG in a useful way, is removed.\n\n----------------------------------------------------------------\n[New Topics]\n\n* jc/rebase-orig-head (Mon Jul 7 00:16:38 2008 -0700) 1 commit\n + Teach \"am\" and \"rebase\" to mark the original position with\n   ORIG_HEAD\n\n* sb/sequencer (Tue Jul 1 04:38:34 2008 +0200) 4 commits\n . Migrate git-am to use git-sequencer\n . Add git-sequencer test suite (t3350)\n . Add git-sequencer prototype documentation\n . Add git-sequencer shell prototype\n\n* js/pick-root (Fri Jul 4 16:19:52 2008 +0100) 1 commit\n + Allow cherry-picking root commits\n\n* ab/bundle (Sat Jul 5 17:26:40 2008 -0400) 1 commit\n + Teach git-bundle to read revision arguments from stdin like git-\n   rev-list.\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* js/apply-root (Sun Jul 6 18:36:01 2008 -0700) 3 commits\n + git-apply --directory: make --root more similar to GNU diff\n + apply --root: thinkofix.\n + Teach \"git apply\" to prepend a prefix with \"--root=<root>\"\n\n* jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits\n + Make default expiration period of reflog used for stash infinite\n + Per-ref reflog expiry configuration\n\nAs 1.6.0 will be a good time to make backward incompatible changes, the\ntip commit makes the default expiry period of stash 'never', unless you\nconfigure them to expire explicitly using gc.refs/stash.* variables.\nNeeds consensus, but I am guessing that enough people would want stash\nthat does not expire.\n\n* jk/pager-config (Thu Jul 3 07:46:57 2008 -0400) 1 commit\n + Allow per-command pager config\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* sg/stash-k-i (Fri Jun 27 16:37:15 2008 +0200) 1 commit\n + stash: introduce 'stash save --keep-index' option\n\nOne weakness of our \"partial commit\" workflow support used to be that the\nuser can incrementally build what is to be committed in the index but that\nstate cannot be tested as a whole in the working tree.  This allows you to\ntemporarily stash the remaining changes in the working tree so that the\nindex state before running \"stash save --keep-index\" can be seen in the\nworking tree to be tested and then committed.\n\n* am/stash-branch (Mon Jul 7 02:50:10 2008 +0530) 2 commits\n + Add a test for \"git stash branch\"\n + Implement \"git stash branch <newbranch> <stash>\"\n\nCreates a new branch out of the stashed state, after returning from the\ninterrupt that forced you to create the stash in the first place.\n\n* tr/add-i-e (Thu Jul 3 00:00:00 2008 +0200) 3 commits\n + git-add--interactive: manual hunk editing mode\n + git-add--interactive: remove hunk coalescing\n + git-add--interactive: replace hunk recounting with apply --recount\n\nAdds 'e/dit' action to interactive add command.\n\n* jc/report-tracking (Sun Jul 6 02:54:56 2008 -0700) 5 commits\n + branch -r -v: do not spit out garbage\n + stat_tracking_info(): clear object flags used during counting\n + git-branch -v: show the remote tracking statistics\n + git-status: show the remote tracking statistics\n + Refactor \"tracking statistics\" code used by \"git checkout\"\n\nMakes the \"your branch is ahead of the tracked one by N commits\" logic and\nmessages available to other commands; status and branch are updated.\n\n* jc/merge-theirs (Mon Jun 30 22:18:57 2008 -0700) 5 commits\n + Make \"subtree\" part more orthogonal to the rest of merge-\n   recursive.\n + Teach git-pull to pass -X<option> to git-merge\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -Xsubtree=foo/bar/baz -s recursive other\" now.\n\nThe -X<option> part may change, Dscho mentions that a single-letter -X\nthat take stuck option is against syntax rules, and I think he's right.\n\nThis is more \"because we can\", not \"because we need to\".\n\n* mv/merge-in-c (Mon Jul 7 19:24:20 2008 +0200) 15 commits\n - Build in merge\n + Fix t7601-merge-pull-config.sh on AIX\n + git-commit-tree: make it usable from other builtins\n + Add new test case to ensure git-merge prepends the custom merge\n   message\n + Add new test case to ensure git-merge reduces octopus parents when\n   possible\n + Introduce reduce_heads()\n + Introduce get_merge_bases_many()\n + Add new test to ensure git-merge handles more than 25 refs.\n + Introduce get_octopus_merge_bases() in commit.c\n + git-fmt-merge-msg: make it usable from other builtins\n + Move read_cache_unmerged() to read-cache.c\n + Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n + Move parse-options's skip_prefix() to git-compat-util.h\n + Move commit_list_count() to commit.c\n + Move split_cmdline() to alias.c\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* js/import-zip (Mon Jun 30 19:50:44 2008 +0100) 1 commit\n + Add another fast-import example, this time for .zip files\n\n* db/no-git-config (Mon Jun 30 03:37:47 2008 -0400) 1 commit\n + Only use GIT_CONFIG in \"git config\", not other programs\n\n* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits\n + Eliminate an unnecessary chdir(\"..\")\n + Add support for GIT_CEILING_DIRECTORIES\n + Fold test-absolute-path into test-path-utils\n + Implement normalize_absolute_path\n\n* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits\n + rerere.autoupdate\n + t4200: fix rerere test\n + rerere: remove dubious \"tail_optimization\"\n + git-rerere: detect unparsable conflicts\n + rerere: rerere_created_at() and has_resolution() abstraction\n\nA new configuration will allow paths that have been resolved cleanly by\nrerere to be updated in the index automatically.\n\n* js/maint-daemon-syslog (Thu Jul 3 16:27:24 2008 +0100) 1 commit\n + git daemon: avoid calling syslog() from a signal handler\n\nMeant for 'maint' as well.\n\n----------------------------------------------------------------\n[On Hold]\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis was previously in \"will be in master soon\" category, but it turns out\nthat the synonyms to the ones this one deletes are fairly new invention\nthat happend in 1.5.6 timeframe, and we cannot do this just yet.  Perhaps\nin 1.7.0.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n\nThis is the \"botched\" one.  Will be resurrected during 1.7.0 or 1.8.0\ntimeframe.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* jc/grafts (Wed Jul 2 17:14:12 2008 -0700) 1 commit\n - [BROKEN wrt shallow clones] Ignore graft during object transfer\n\nCloning or fetching from a repository from grafts did not send objects\nthat are hidden by grafts, but the commits in the resulting repository do\nneed these to pass fsck.  This fixes object transfer to ignore grafts.\n\nAnother fix is needed to git-prune so that it ignores grafts but treats\ncommits that are mentioned in grafts as reachable.\n\n* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits\n - Migrate git-blame to parse-option partially.\n + parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.\n + parse-opt: fake short strings for callers to believe in.\n + parse-opt: do not print errors on unknown options, return -2\n   intead.\n + parse-opt: create parse_options_step.\n + parse-opt: Export a non NORETURN usage dumper.\n + parse-opt: have parse_options_{start,end}.\n\nI recall Pierre said something about cleaning up the last one when he\nfinds time, but other than that vague recollection, I lost track of this\nseries.  I am tempted to fork a few topics off of the penúltimo one to\nconvert a few more commands as examples and merge the result to 'next'.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n"},{"id":"82771","messageId":"7vabgqsc37.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vtzf1w0rj.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-10T02:32:44Z","receivedAt":"2008-07-10T02:32:44Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Here are the topics that have been cooking.  Commits prefixed\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be applied to the maintenance series have \"maint-\" in their\nnames.\n\nIt already is beginning to become clear what 1.6.0 will look like.  What's\nalready in 'next' all are well intentioned (I do not guarantee they are\nalready bug-free --- that is what cooking them in 'next' is for) and are\ngood set of feature enhancements.  Bigger changes will be:\n\n * Port for MinGW.\n\n * With the default Makefile settings, most of the programs will be\n   installed outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\n   some server side programs that need to be accessible for technical\n   reasons.  Invoking a git subcommand as \"git-xyzzy\" from the command\n   line has been deprecated since early 2006 (and officially announced in\n   1.5.4 release notes); use of them from your scripts after adding\n   output from \"git --exec-path\" to the $PATH will still be supported in\n   1.6.0, but users are again strongly encouraged to adjust their\n   scripts to use \"git xyzzy\" form, as we will stop installing\n   \"git-xyzzy\" hardlinks for built-in commands in later releases.\n\n * git-merge will be rewritten in C.\n\n * default pack and idx versions will be updated as scheduled for some\n   time ago.\n\n * GIT_CONFIG, which was only documented as affecting \"git config\", but\n   actually affected all git commands, now only affects \"git config\".\n   GIT_LOCAL_CONFIG, also only documented as affecting \"git config\" and\n   not different from GIT_CONFIG in a useful way, is removed.\n\n----------------------------------------------------------------\n[New Topics]\n\n* xx/merge-in-c-into-next (Wed Jul 9 13:51:46 2008 -0700) 4 commits\n + Teach git-merge -X<option> again.\n + Merge branch 'jc/merge-theirs' into xx/merge-in-c-into-next\n + builtin-merge.c: use parse_options_step() \"incremental parsing\"\n   machinery\n + Merge branch 'ph/parseopt-step-blame' into xx/merge-in-c-into-next\n\nI've described what this is in a separate message.\n\n* jc/branch-merged (Tue Jul 8 17:55:47 2008 -0700) 3 commits\n + branch --merged/--no-merged: allow specifying arbitrary commit\n + branch --contains: default to HEAD\n + parse-options: add PARSE_OPT_LASTARG_DEFAULT flag\n\nThis builds on top of the parse-options enhancement series that\nhas been cooking in 'next' for some time.\n\n* rs/imap (Wed Jul 9 22:29:02 2008 +0100) 5 commits\n + Documentation: Improve documentation for git-imap-send(1)\n + imap-send.c: more style fixes\n + imap-send.c: style fixes\n + git-imap-send: Support SSL\n + git-imap-send: Allow the program to be run from subdirectories of\n   a git tree\n\n* om/rerere-careful (Mon Jul 7 14:42:48 2008 +0200) 1 commit\n + builtin-rerere: more carefully find conflict markers\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* js/pick-root (Fri Jul 4 16:19:52 2008 +0100) 1 commit\n + Allow cherry-picking root commits\n\n* ab/bundle (Sat Jul 5 17:26:40 2008 -0400) 1 commit\n + Teach git-bundle to read revision arguments from stdin like git-\n   rev-list.\n\n* sg/stash-k-i (Tue Jul 8 00:40:56 2008 -0700) 2 commits\n + Documentation: tweak use case in \"git stash save --keep-index\"\n + stash: introduce 'stash save --keep-index' option\n\nOne weakness of our \"partial commit\" workflow support used to be that the\nuser can incrementally build what is to be committed in the index but that\nstate cannot be tested as a whole in the working tree.  This allows you to\ntemporarily stash the remaining changes in the working tree so that the\nindex state before running \"stash save --keep-index\" can be seen in the\nworking tree to be tested and then committed.\n\n* am/stash-branch (Mon Jul 7 02:50:10 2008 +0530) 2 commits\n + Add a test for \"git stash branch\"\n + Implement \"git stash branch <newbranch> <stash>\"\n\nCreates a new branch out of the stashed state, after returning from the\ninterrupt that forced you to create the stash in the first place.\n\n* tr/add-i-e (Thu Jul 3 00:00:00 2008 +0200) 3 commits\n + git-add--interactive: manual hunk editing mode\n + git-add--interactive: remove hunk coalescing\n + git-add--interactive: replace hunk recounting with apply --recount\n\nAdds 'e/dit' action to interactive add command.\n\n* jc/report-tracking (Sun Jul 6 02:54:56 2008 -0700) 5 commits\n + branch -r -v: do not spit out garbage\n + stat_tracking_info(): clear object flags used during counting\n + git-branch -v: show the remote tracking statistics\n + git-status: show the remote tracking statistics\n + Refactor \"tracking statistics\" code used by \"git checkout\"\n\nMakes the \"your branch is ahead of the tracked one by N commits\" logic and\nmessages available to other commands; status and branch are updated.\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* jc/rebase-orig-head (Tue Jul 8 00:12:22 2008 -0400) 2 commits\n + Documentation: mention ORIG_HEAD in am, merge, and rebase\n + Teach \"am\" and \"rebase\" to mark the original position with\n   ORIG_HEAD\n\n* ph/parseopt-step-blame (Wed Jul 9 23:38:34 2008 +0200) 18 commits\n + revisions: refactor handle_revision_opt into parse_revision_opt.\n + git-shortlog: migrate to parse-options partially.\n + git-blame: fix lapsus\n + git-blame: migrate to incremental parse-option [2/2]\n + git-blame: migrate to incremental parse-option [1/2]\n + revisions: split handle_revision_opt() from setup_revisions()\n + Merge branch 'jc/blame' (early part) into HEAD\n + parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.\n + parse-opt: fake short strings for callers to believe in.\n + parse-opt: do not print errors on unknown options, return -2\n   intead.\n + parse-opt: create parse_options_step.\n + parse-opt: Export a non NORETURN usage dumper.\n + parse-opt: have parse_options_{start,end}.\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nBecame active again ;-) This probably is ready for 'master' already,\nexcept for the last two which I only looked at the patch and have not\nused heavily in production yet.\n\n* jc/merge-theirs (Mon Jun 30 22:18:57 2008 -0700) 5 commits\n + Make \"subtree\" part more orthogonal to the rest of merge-\n   recursive.\n + Teach git-pull to pass -X<option> to git-merge\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -Xsubtree=foo/bar/baz -s recursive other\" now.\n\n* mv/merge-in-c (Mon Jul 7 19:24:20 2008 +0200) 15 commits\n + Build in merge\n + Fix t7601-merge-pull-config.sh on AIX\n + git-commit-tree: make it usable from other builtins\n + Add new test case to ensure git-merge prepends the custom merge\n   message\n + Add new test case to ensure git-merge reduces octopus parents when\n   possible\n + Introduce reduce_heads()\n + Introduce get_merge_bases_many()\n + Add new test to ensure git-merge handles more than 25 refs.\n + Introduce get_octopus_merge_bases() in commit.c\n + git-fmt-merge-msg: make it usable from other builtins\n + Move read_cache_unmerged() to read-cache.c\n + Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n + Move parse-options's skip_prefix() to git-compat-util.h\n + Move commit_list_count() to commit.c\n + Move split_cmdline() to alias.c\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* js/apply-root (Sun Jul 6 18:36:01 2008 -0700) 3 commits\n + git-apply --directory: make --root more similar to GNU diff\n + apply --root: thinkofix.\n + Teach \"git apply\" to prepend a prefix with \"--root=<root>\"\n\n* jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits\n + Make default expiration period of reflog used for stash infinite\n + Per-ref reflog expiry configuration\n\nAs 1.6.0 will be a good time to make backward incompatible changes, the\ntip commit makes the default expiry period of stash 'never', unless you\nconfigure them to expire explicitly using gc.refs/stash.* variables.\nNeeds consensus, but I am guessing that enough people would want stash\nthat does not expire.\n\n* jk/pager-config (Thu Jul 3 07:46:57 2008 -0400) 1 commit\n + Allow per-command pager config\n\n----------------------------------------------------------------\n[On Hold]\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis was previously in \"will be in master soon\" category, but it turns out\nthat the synonyms to the ones this one deletes are fairly new invention\nthat happend in 1.5.6 timeframe, and we cannot do this just yet.  Perhaps\nin 1.7.0.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n\nThis is the \"botched\" one.  Will be resurrected during 1.7.0 or 1.8.0\ntimeframe.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* sb/sequencer (Tue Jul 1 04:38:34 2008 +0200) 4 commits\n . Migrate git-am to use git-sequencer\n . Add git-sequencer test suite (t3350)\n . Add git-sequencer prototype documentation\n . Add git-sequencer shell prototype\n\n* jc/grafts (Wed Jul 2 17:14:12 2008 -0700) 1 commit\n - [BROKEN wrt shallow clones] Ignore graft during object transfer\n\nCloning or fetching from a repository from grafts did not send objects\nthat are hidden by grafts, but the commits in the resulting repository do\nneed these to pass fsck.  This fixes object transfer to ignore grafts.\n\nAnother fix is needed to git-prune so that it ignores grafts but treats\ncommits that are mentioned in grafts as reachable.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nThe blame that finds where each line in the original lines moved to.  This\nmay help a GSoC project that wants to gather statistical overview of the\nhistory.  The final presentation may need tweaking (see the log message of\nthe commit \"\"git-blame --reverse\" on the series).\n\nThe tip two commits are for peeling to see what's behind the blamed\ncommit, which we should be able to separate out into an independent topic\nfrom the rest.\n"},{"id":"82926","messageId":"4668B2FF-2B2B-4221-8151-F0AEA681983C@zib.de","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807041334010.9925@racer","subject":"Re: [PATCH 1/2] help.c: Add support for htmldir relative to git_exec_path()","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T07:27:56Z","receivedAt":"2008-07-11T07:27:56Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Jul 4, 2008, at 2:35 PM, Johannes Schindelin wrote:\n\n> On Fri, 4 Jul 2008, Junio C Hamano wrote:\n>\n>> Could you check if there are copy-and-pasted duplicated code you can\n>> factor out before continuing this direction?\n>\n> Note also that Hannes tried very hard to get rid of those ugly \"#ifdef\n> __MINGW32__\"s by declaring/overriding functions in git-compat-util.h.\n>\n> I think that is such a good practice that we should not stop here.\n\nI'll send three patches that address Junio's and Dscho's comments:\n\n  [PATCH 1/3] Move code interpreting path relative to exec-dir to new  \nfunction system_path()\n  [PATCH 2/3] help.c: Add support for htmldir relative to  \ngit_exec_path()\n  [PATCH 3/3] help (Windows): Display HTML in default browser using  \nWindows' shell API\n\n\nHannes,\nthe patches I'll send probably conflict with your planned work on\nGIT_EXEC_PATH that has been discussed on the msysgit list.  I think\nyou could built on my series and modify system_path().\n\n\tSteffen\n"},{"id":"82927","messageId":"1215761286-2489-1-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"4668B2FF-2B2B-4221-8151-F0AEA681983C@zib.de","subject":"[PATCH 1/3] Move code interpreting path relative to exec-dir to new function system_path()","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T07:28:04Z","receivedAt":"2008-07-11T07:28:04Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"Expanding system paths relative to git_exec_path can be used for\ncreating an installation that can be moved to a different directory\nwithout re-compiling.  We use this approach for template_dir and the\nsystem wide gitconfig.  The Windows installer (msysgit) is an example\nfor such a setup.\n\nThis commit moves common code to a new function system_path().  System\npaths that are to be interpreted relative to git_exec_path are passed to\nsystem_path() and the return value is used instead of the original path.\nsystem_path() prefixes a relative path with git_exec_path and leaves\nabsolute paths unmodified.  For example, we now write\n\n    template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n builtin-init-db.c |   14 ++------------\n cache.h           |    1 +\n config.c          |   11 ++---------\n path.c            |   11 +++++++++++\n 4 files changed, 16 insertions(+), 21 deletions(-)\n\ndiff --git a/builtin-init-db.c b/builtin-init-db.c\nindex e23b843..5ba213a 100644\n--- a/builtin-init-db.c\n+++ b/builtin-init-db.c\n@@ -115,18 +115,8 @@ static void copy_templates(const char *template_dir)\n \n \tif (!template_dir)\n \t\ttemplate_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);\n-\tif (!template_dir) {\n-\t\t/*\n-\t\t * if the hard-coded template is relative, it is\n-\t\t * interpreted relative to the exec_dir\n-\t\t */\n-\t\ttemplate_dir = DEFAULT_GIT_TEMPLATE_DIR;\n-\t\tif (!is_absolute_path(template_dir)) {\n-\t\t\tstruct strbuf d = STRBUF_INIT;\n-\t\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), template_dir);\n-\t\t\ttemplate_dir = strbuf_detach(&d, NULL);\n-\t\t}\n-\t}\n+\tif (!template_dir)\n+\t\ttemplate_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);\n \tstrcpy(template_path, template_dir);\n \ttemplate_len = strlen(template_path);\n \tif (template_path[template_len-1] != '/') {\ndiff --git a/cache.h b/cache.h\nindex 0d8edda..dafa265 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -529,6 +529,7 @@ const char *make_nonrelative_path(const char *path);\n const char *make_relative_path(const char *abs, const char *base);\n int normalize_absolute_path(char *buf, const char *path);\n int longest_ancestor_length(const char *path, const char *prefix_list);\n+extern const char *system_path(const char *path);\n \n /* Read and unpack a sha1 file into memory, write memory to a sha1 file */\n extern int sha1_object_info(const unsigned char *, unsigned long *);\ndiff --git a/config.c b/config.c\nindex 2862cc4..1e066c7 100644\n--- a/config.c\n+++ b/config.c\n@@ -581,15 +581,8 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)\n const char *git_etc_gitconfig(void)\n {\n \tstatic const char *system_wide;\n-\tif (!system_wide) {\n-\t\tsystem_wide = ETC_GITCONFIG;\n-\t\tif (!is_absolute_path(system_wide)) {\n-\t\t\t/* interpret path relative to exec-dir */\n-\t\t\tstruct strbuf d = STRBUF_INIT;\n-\t\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), system_wide);\n-\t\t\tsystem_wide = strbuf_detach(&d, NULL);\n-\t\t}\n-\t}\n+\tif (!system_wide)\n+\t\tsystem_wide = system_path(ETC_GITCONFIG);\n \treturn system_wide;\n }\n \ndiff --git a/path.c b/path.c\nindex 5983255..141496e 100644\n--- a/path.c\n+++ b/path.c\n@@ -11,6 +11,7 @@\n  * which is what it's designed for.\n  */\n #include \"cache.h\"\n+#include \"exec_cmd.h\"\n \n static char bad_path[] = \"/bad-path/\";\n \n@@ -439,3 +440,13 @@ int longest_ancestor_length(const char *path, const char *prefix_list)\n \n \treturn max_len;\n }\n+\n+const char *system_path(const char *path)\n+{\n+\tif (!is_absolute_path(path)) {\n+\t\tstruct strbuf d = STRBUF_INIT;\n+\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), path);\n+\t\tpath = strbuf_detach(&d, NULL);\n+\t}\n+\treturn path;\n+}\n-- \n1.5.6.1.282.gd8a0d\n"},{"id":"82929","messageId":"1215761286-2489-2-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1215761286-2489-1-git-send-email-prohaska@zib.de","subject":"[PATCH 2/3] help.c: Add support for htmldir relative to git_exec_path()","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T07:28:05Z","receivedAt":"2008-07-11T07:28:05Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"If htmldir (in the Makefile) is a relative path, this path will now be\ninterpreted relative to git_exec_path.  This can be used to create an\ninstallation that can be moved to a different directory without\nre-compiling.  The Windows installer (msysgit) is an example for such\na setup.\n\nNote that the Makefile maps htmldir to the define GIT_HTML_PATH.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n help.c |    8 +++++---\n 1 files changed, 5 insertions(+), 3 deletions(-)\n\ndiff --git a/help.c b/help.c\nindex ca9632b..0f055bf 100644\n--- a/help.c\n+++ b/help.c\n@@ -633,13 +633,15 @@ static void show_info_page(const char *git_cmd)\n static void get_html_page_path(struct strbuf *page_path, const char *page)\n {\n \tstruct stat st;\n+\tconst char *html_path = system_path(GIT_HTML_PATH);\n \n \t/* Check that we have a git documentation directory. */\n-\tif (stat(GIT_HTML_PATH \"/git.html\", &st) || !S_ISREG(st.st_mode))\n-\t\tdie(\"'%s': not a documentation directory.\", GIT_HTML_PATH);\n+\tif (stat(mkpath(\"%s/git.html\", html_path), &st)\n+\t    || !S_ISREG(st.st_mode))\n+\t\tdie(\"'%s': not a documentation directory.\", html_path);\n \n \tstrbuf_init(page_path, 0);\n-\tstrbuf_addf(page_path, GIT_HTML_PATH \"/%s.html\", page);\n+\tstrbuf_addf(page_path, \"%s/%s.html\", html_path, page);\n }\n \n static void show_html_page(const char *git_cmd)\n-- \n1.5.6.1.282.gd8a0d\n"},{"id":"82928","messageId":"1215761286-2489-3-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"1215761286-2489-2-git-send-email-prohaska@zib.de","subject":"[PATCH 3/3] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T07:28:06Z","receivedAt":"2008-07-11T07:28:06Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"The system's default browser for displaying HTML help pages is now used\ndirectly on Windows, instead of launching git-web--browser, which\nrequires a Unix shell.  Avoiding MSYS' bash when possible is good\nbecause it avoids potential path translation issues.  In this case it is\nnot too hard to avoid launching a shell, so let's avoid it.\n\nThe Windows-specific code is implemented in compat/mingw.c to avoid\nplatform-specific code in the main code base.  On Windows, open_html is\nprovided as a define.  If open_html is not defined, git-web--browse is\nused.  This approach avoids platform-specific ifdefs by using\nper-function ifdefs.  The \"ifndef open_html\" together with the\nintroductory comment should sufficiently warn developers, so that they\nhopefully will not break this mechanism.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n compat/mingw.c |   21 +++++++++++++++++++++\n compat/mingw.h |    3 +++\n help.c         |   14 +++++++++++++-\n 3 files changed, 37 insertions(+), 1 deletions(-)\n\ndiff --git a/compat/mingw.c b/compat/mingw.c\nindex 3a05fe7..f7ef545 100644\n--- a/compat/mingw.c\n+++ b/compat/mingw.c\n@@ -1017,3 +1017,24 @@ sig_handler_t mingw_signal(int sig, sig_handler_t handler)\n \ttimer_fn = handler;\n \treturn old;\n }\n+\n+static const char *make_backslash_path(const char* path) {\n+\tstatic char buf[PATH_MAX + 1];\n+\tchar* c;\n+\n+\tif (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)\n+\t\tdie (\"Too long path: %.*s\", 60, path);\n+\n+\tfor (c = buf; *c; c++) {\n+\t\tif (*c == '/')\n+\t\t\t*c = '\\\\';\n+\t}\n+\treturn buf;\n+}\n+\n+void mingw_open_html(const char *unixpath)\n+{\n+\tconst char *htmlpath = make_backslash_path(unixpath);\n+\tprintf(\"Launching default browser to display HTML ...\\n\");\n+\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n+}\ndiff --git a/compat/mingw.h b/compat/mingw.h\nindex 6bc049a..136361e 100644\n--- a/compat/mingw.h\n+++ b/compat/mingw.h\n@@ -193,6 +193,9 @@ static inline unsigned int git_ntohl(unsigned int x)\n sig_handler_t mingw_signal(int sig, sig_handler_t handler);\n #define signal mingw_signal\n \n+void mingw_open_html(const char *path);\n+#define open_html mingw_open_html\n+\n /*\n  * git specific compatibility\n  */\ndiff --git a/help.c b/help.c\nindex 0f055bf..18116f3 100644\n--- a/help.c\n+++ b/help.c\n@@ -644,6 +644,18 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)\n \tstrbuf_addf(page_path, \"%s/%s.html\", html_path, page);\n }\n \n+/*\n+ * If open_html is not defined in a platform-specific way (see for\n+ * example compat/mingw.h), we use the script web--browse to display\n+ * HTML.\n+ */\n+#ifndef open_html\n+void open_html(const char* path)\n+{\n+\texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", path, NULL);\n+}\n+#endif\n+\n static void show_html_page(const char *git_cmd)\n {\n \tconst char *page = cmd_to_page(git_cmd);\n@@ -651,7 +663,7 @@ static void show_html_page(const char *git_cmd)\n \n \tget_html_page_path(&page_path, page);\n \n-\texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", page_path.buf, NULL);\n+\topen_html(page_path.buf);\n }\n \n void help_unknown_cmd(const char *cmd)\n-- \n1.5.6.1.282.gd8a0d\n"},{"id":"82930","messageId":"228FC26D-D318-487A-9BF3-B473096CB0C9@zib.de","threadId":"12603","inReplyTo":"1215761286-2489-3-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 3/3] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T07:35:36Z","receivedAt":"2008-07-11T07:35:36Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Jul 11, 2008, at 9:28 AM, Steffen Prohaska wrote:\n\n> +\n> +static const char *make_backslash_path(const char* path) {\n> +\tstatic char buf[PATH_MAX + 1];\n> +\tchar* c;\n\nStyle :-(.  I'll send a fixed patch in a minute.\n\n\n> +#ifndef open_html\n> +void open_html(const char* path)\n> +{\n\nIt'll fix this too.\n\n\tSteffen\n"},{"id":"82931","messageId":"1215761822-21356-1-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"228FC26D-D318-487A-9BF3-B473096CB0C9@zib.de","subject":"[PATCH 3/3 FIXED] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T07:37:02Z","receivedAt":"2008-07-11T07:37:02Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"The system's default browser for displaying HTML help pages is now used\ndirectly on Windows, instead of launching git-web--browser, which\nrequires a Unix shell.  Avoiding MSYS' bash when possible is good\nbecause it avoids potential path translation issues.  In this case it is\nnot too hard to avoid launching a shell, so let's avoid it.\n\nThe Windows-specific code is implemented in compat/mingw.c to avoid\nplatform-specific code in the main code base.  On Windows, open_html is\nprovided as a define.  If open_html is not defined, git-web--browse is\nused.  This approach avoids platform-specific ifdefs by using\nper-function ifdefs.  The \"ifndef open_html\" together with the\nintroductory comment should sufficiently warn developers, so that they\nhopefully will not break this mechanism.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n compat/mingw.c |   21 +++++++++++++++++++++\n compat/mingw.h |    3 +++\n help.c         |   14 +++++++++++++-\n 3 files changed, 37 insertions(+), 1 deletions(-)\n\ndiff --git a/compat/mingw.c b/compat/mingw.c\nindex 3a05fe7..0ca73f7 100644\n--- a/compat/mingw.c\n+++ b/compat/mingw.c\n@@ -1017,3 +1017,24 @@ sig_handler_t mingw_signal(int sig, sig_handler_t handler)\n \ttimer_fn = handler;\n \treturn old;\n }\n+\n+static const char *make_backslash_path(const char *path) {\n+\tstatic char buf[PATH_MAX + 1];\n+\tchar *c;\n+\n+\tif (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)\n+\t\tdie (\"Too long path: %.*s\", 60, path);\n+\n+\tfor (c = buf; *c; c++) {\n+\t\tif (*c == '/')\n+\t\t\t*c = '\\\\';\n+\t}\n+\treturn buf;\n+}\n+\n+void mingw_open_html(const char *unixpath)\n+{\n+\tconst char *htmlpath = make_backslash_path(unixpath);\n+\tprintf(\"Launching default browser to display HTML ...\\n\");\n+\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n+}\ndiff --git a/compat/mingw.h b/compat/mingw.h\nindex 6bc049a..136361e 100644\n--- a/compat/mingw.h\n+++ b/compat/mingw.h\n@@ -193,6 +193,9 @@ static inline unsigned int git_ntohl(unsigned int x)\n sig_handler_t mingw_signal(int sig, sig_handler_t handler);\n #define signal mingw_signal\n \n+void mingw_open_html(const char *path);\n+#define open_html mingw_open_html\n+\n /*\n  * git specific compatibility\n  */\ndiff --git a/help.c b/help.c\nindex 0f055bf..52d39b8 100644\n--- a/help.c\n+++ b/help.c\n@@ -644,6 +644,18 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)\n \tstrbuf_addf(page_path, \"%s/%s.html\", html_path, page);\n }\n \n+/*\n+ * If open_html is not defined in a platform-specific way (see for\n+ * example compat/mingw.h), we use the script web--browse to display\n+ * HTML.\n+ */\n+#ifndef open_html\n+void open_html(const char *path)\n+{\n+\texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", path, NULL);\n+}\n+#endif\n+\n static void show_html_page(const char *git_cmd)\n {\n \tconst char *page = cmd_to_page(git_cmd);\n@@ -651,7 +663,7 @@ static void show_html_page(const char *git_cmd)\n \n \tget_html_page_path(&page_path, page);\n \n-\texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", page_path.buf, NULL);\n+\topen_html(page_path.buf);\n }\n \n void help_unknown_cmd(const char *cmd)\n-- \n1.5.6.1.282.gd8a0d\n"},{"id":"82938","messageId":"1215766924.4877218c5716b@webmail.eunet.at","threadId":"12603","inReplyTo":"4668B2FF-2B2B-4221-8151-F0AEA681983C@zib.de","subject":"Re: [PATCH 1/2] help.c: Add support for htmldir relative to git_exec_path()","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-11T09:02:04Z","receivedAt":"2008-07-11T09:02:04Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Zitat von Steffen Prohaska <prohaska@zib.de>:\n>\n> On Jul 4, 2008, at 2:35 PM, Johannes Schindelin wrote:\n>\n> > On Fri, 4 Jul 2008, Junio C Hamano wrote:\n> >\n> >> Could you check if there are copy-and-pasted duplicated code you can\n> >> factor out before continuing this direction?\n> >\n> > Note also that Hannes tried very hard to get rid of those ugly \"#ifdef\n> > __MINGW32__\"s by declaring/overriding functions in git-compat-util.h.\n> >\n> > I think that is such a good practice that we should not stop here.\n>\n> I'll send three patches that address Junio's and Dscho's comments:\n>\n>   [PATCH 1/3] Move code interpreting path relative to exec-dir to new\n> function system_path()\n>   [PATCH 2/3] help.c: Add support for htmldir relative to\n> git_exec_path()\n>   [PATCH 3/3] help (Windows): Display HTML in default browser using\n> Windows' shell API\n>\n>\n> Hannes,\n> the patches I'll send probably conflict with your planned work on\n> GIT_EXEC_PATH that has been discussed on the msysgit list.  I think\n> you could built on my series and modify system_path().\n\nThanks. I haven't done a lot in that direction, yet, so your patches will be\nhelpful.\n\nBut according to the conclusion of our recent discussion\n\nhttp://thread.gmane.org/gmane.comp.version-control.msysgit/2633/focus=2669\n\nI shall modify system_path() to construct paths relative to the git executable,\nwhich is essentially Makefile's $(bindir), not git_exec_path().\n\n-- Hannes\n"},{"id":"82981","messageId":"1215794896-31354-1-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"7vabh0d4t9.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T16:48:16Z","receivedAt":"2008-07-11T16:48:16Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"From: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n\nSigned-off-by: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n convert.c |    4 ++++\n 1 files changed, 4 insertions(+), 0 deletions(-)\n\ndiff --git a/convert.c b/convert.c\nindex 352b69d..78efed8 100644\n--- a/convert.c\n+++ b/convert.c\n@@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *\n \t\telse\n \t\t\tstats->printable++;\n \t}\n+\n+\t/* If file ends with EOF then don't count this EOF as non-printable. */\n+\tif (size >= 1 && buf[size-1] == '\\032')\n+\t\tstats->nonprintable--;\n }\n \n /*\n-- \n1.5.6.1.282.gd8a0d\n"},{"id":"82982","messageId":"1215795357-4478-1-git-send-email-prohaska@zib.de","threadId":"12603","inReplyTo":"200807022046.28141.johannes.sixt@telecom.at","subject":"[PATCH] Convert CR/LF to LF in tag signatures","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T16:55:57Z","receivedAt":"2008-07-11T16:55:57Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"From: Johannes Schindelin <johannes.schindelin@gmx.de>\n\nOn Windows, gpg outputs CR/LF signatures.  But since the tag messages\nare already stripped of the CR by stripspace(), it is arguably nicer\nto do the same for the tag signature.  Actually, this patch does not\nlook for CR/LF, but strips all CRs from the signature.  It does so not\nonly on Windows but on all platforms to keep the code simpler.\n\n[ spr: ported code to use strbuf ]\n\nSigned-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\n---\n builtin-tag.c |   10 ++++++++++\n 1 files changed, 10 insertions(+), 0 deletions(-)\n\ndiff --git a/builtin-tag.c b/builtin-tag.c\nindex 3c97c69..a70922b 100644\n--- a/builtin-tag.c\n+++ b/builtin-tag.c\n@@ -202,6 +202,7 @@ static int do_sign(struct strbuf *buffer)\n \tconst char *args[4];\n \tchar *bracket;\n \tint len;\n+\tint i, j;\n \n \tif (!*signingkey) {\n \t\tif (strlcpy(signingkey, git_committer_info(IDENT_ERROR_ON_NO_NAME),\n@@ -241,6 +242,15 @@ static int do_sign(struct strbuf *buffer)\n \tif (finish_command(&gpg) || !len || len < 0)\n \t\treturn error(\"gpg failed to sign the tag\");\n \n+\t/* Strip CR from the line endings, in case we are on Windows. */\n+\tfor (i = j = 0; i < buffer->len; i++)\n+\t\tif (buffer->buf[i] != '\\r') {\n+\t\t\tif (i != j)\n+\t\t\t\tbuffer->buf[j] = buffer->buf[i];\n+\t\t\tj++;\n+\t\t}\n+\tstrbuf_setlen(buffer, j);\n+\n \treturn 0;\n }\n \n-- \n1.5.6.1.282.gd8a0d\n"},{"id":"82991","messageId":"alpine.DEB.1.00.0807111940420.8950@racer","threadId":"12603","inReplyTo":"1215794896-31354-1-git-send-email-prohaska@zib.de","subject":"Re: [PATCH] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-11T18:42:33Z","receivedAt":"2008-07-11T18:42:33Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 11 Jul 2008, Steffen Prohaska wrote:\n\n> From: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n> \n> Signed-off-by: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> ---\n>  convert.c |    4 ++++\n>  1 files changed, 4 insertions(+), 0 deletions(-)\n> \n> diff --git a/convert.c b/convert.c\n> index 352b69d..78efed8 100644\n> --- a/convert.c\n> +++ b/convert.c\n> @@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *\n>  \t\telse\n>  \t\t\tstats->printable++;\n>  \t}\n> +\n> +\t/* If file ends with EOF then don't count this EOF as non-printable. */\n> +\tif (size >= 1 && buf[size-1] == '\\032')\n> +\t\tstats->nonprintable--;\n\nThis is one of the things that are very specific to Windows and should not \naffect other people.\n\nCiao,\nDscho\n\nP.S.: this is one of the examples why I would like to discuss things that \nare Windows-only on the msysGit list, until we have a consensus there.  We \nhave a few Git experts there, you and Hannes in particular, which cover \nthat side, but also some Windows experts such as Peter and Marius, and we \nshould not need to have that discussion on a list where people are not \nexpected to care about Windows _at all_.\n"},{"id":"83007","messageId":"920CBA3F-779D-4861-B447-135690B4E8BD@zib.de","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807111940420.8950@racer","subject":"Re: [PATCH] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-11T20:32:25Z","receivedAt":"2008-07-11T20:32:25Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Jul 11, 2008, at 8:42 PM, Johannes Schindelin wrote:\n\n> On Fri, 11 Jul 2008, Steffen Prohaska wrote:\n>\n>> From: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n>>\n>> Signed-off-by: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n>> Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n>> ---\n>> convert.c |    4 ++++\n>> 1 files changed, 4 insertions(+), 0 deletions(-)\n>>\n>> diff --git a/convert.c b/convert.c\n>> index 352b69d..78efed8 100644\n>> --- a/convert.c\n>> +++ b/convert.c\n>> @@ -61,6 +61,10 @@ static void gather_stats(const char *buf,  \n>> unsigned long size, struct text_stat *\n>> \t\telse\n>> \t\t\tstats->printable++;\n>> \t}\n>> +\n>> +\t/* If file ends with EOF then don't count this EOF as non- \n>> printable. */\n>> +\tif (size >= 1 && buf[size-1] == '\\032')\n>> +\t\tstats->nonprintable--;\n>\n> This is one of the things that are very specific to Windows and  \n> should not\n> affect other people.\n\nDoes this mean you are opposed to this change?\n\nJunio thinks that \"the intention of this change is good\" [1].  Hence,\nI cleaned up the style and re-send the patch.\n\n[1] http://article.gmane.org/gmane.comp.version-control.git/87122\n\n\tSteffen\n"},{"id":"83009","messageId":"alpine.DEB.1.00.0807112136270.8950@racer","threadId":"12603","inReplyTo":"920CBA3F-779D-4861-B447-135690B4E8BD@zib.de","subject":"Re: [PATCH] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-11T20:40:47Z","receivedAt":"2008-07-11T20:40:47Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 11 Jul 2008, Steffen Prohaska wrote:\n\n> On Jul 11, 2008, at 8:42 PM, Johannes Schindelin wrote:\n> \n> >On Fri, 11 Jul 2008, Steffen Prohaska wrote:\n> >\n> > >From: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n> > >\n> > >Signed-off-by: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>\n> > >Signed-off-by: Steffen Prohaska <prohaska@zib.de>\n> > >---\n> > >convert.c |    4 ++++\n> > >1 files changed, 4 insertions(+), 0 deletions(-)\n> > >\n> > >diff --git a/convert.c b/convert.c\n> > >index 352b69d..78efed8 100644\n> > >--- a/convert.c\n> > >+++ b/convert.c\n> > >@@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long\n> > >size, struct text_stat *\n> > >  else\n> > > \t\tstats->printable++;\n> > >\t}\n> > >+\n> > >+\t/* If file ends with EOF then don't count this EOF as non-printable.\n> > >*/\n> > >+\tif (size >= 1 && buf[size-1] == '\\032')\n> > >+\t\tstats->nonprintable--;\n> >\n> >This is one of the things that are very specific to Windows and should not\n> >affect other people.\n> \n> Does this mean you are opposed to this change?\n\nHrm.  Thinking about it again, this _could_ help Unix people who \ncollaborate with DOS people.\n\nOTOH it will just hide the fact that text files were committed that \ncontain silly characters.\n\nOn the third hand, this code path affects only people who set autocrlf.\n\nWell, I guess they asked for it, kind of.\n\nCiao,\nDscho\n"},{"id":"83055","messageId":"7vtzevhjf8.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1215761822-21356-1-git-send-email-prohaska@zib.de","subject":"Re: [PATCH 3/3 FIXED] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-12T03:26:35Z","receivedAt":"2008-07-12T03:26:35Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Steffen Prohaska <prohaska@zib.de> writes:\n\n> diff --git a/compat/mingw.c b/compat/mingw.c\n> index 3a05fe7..0ca73f7 100644\n> --- a/compat/mingw.c\n> +++ b/compat/mingw.c\n> @@ -1017,3 +1017,24 @@ sig_handler_t mingw_signal(int sig, sig_handler_t handler)\n> ...\n> +void mingw_open_html(const char *unixpath)\n> +{\n> +\tconst char *htmlpath = make_backslash_path(unixpath);\n> +\tprintf(\"Launching default browser to display HTML ...\\n\");\n> +\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n> +}\n\nDo you mean to have that printf() or is it a leftover debugging statement?\n"},{"id":"83060","messageId":"8D150442-8B57-4025-9110-BC4C23C2310C@zib.de","threadId":"12603","inReplyTo":"7vtzevhjf8.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 3/3 FIXED] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Steffen Prohaska","fromEmail":"prohaska@zib.de","sentAt":"2008-07-12T06:45:08Z","receivedAt":"2008-07-12T06:45:08Z","isPatch":true,"sender":{"key":"prohaska@zib.de","avatar":"https://avatars.githubusercontent.com/u/217580?v=4"},"body":"\nOn Jul 12, 2008, at 5:26 AM, Junio C Hamano wrote:\n\n> Steffen Prohaska <prohaska@zib.de> writes:\n>\n>> diff --git a/compat/mingw.c b/compat/mingw.c\n>> index 3a05fe7..0ca73f7 100644\n>> --- a/compat/mingw.c\n>> +++ b/compat/mingw.c\n>> @@ -1017,3 +1017,24 @@ sig_handler_t mingw_signal(int sig,  \n>> sig_handler_t handler)\n>> ...\n>> +void mingw_open_html(const char *unixpath)\n>> +{\n>> +\tconst char *htmlpath = make_backslash_path(unixpath);\n>> +\tprintf(\"Launching default browser to display HTML ...\\n\");\n>> +\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n>> +}\n>\n> Do you mean to have that printf() or is it a leftover debugging  \n> statement?\n\nI mean to have it.  It takes some time until a fresh browser starts up\nif no browser has been running before.  Impatient people (like me) could\nstart believing that nothing would happen.  But this certainly depends\non your machine.  I run Windows inside a virtual machine on a Laptop,\nwhich is probably rather slow compared to a desktop machine running\nWindows natively.\n\n\tSteffen\n"},{"id":"83061","messageId":"7vskufy40c.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"8D150442-8B57-4025-9110-BC4C23C2310C@zib.de","subject":"Re: [PATCH 3/3 FIXED] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-12T07:07:31Z","receivedAt":"2008-07-12T07:07:31Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Steffen Prohaska <prohaska@zib.de> writes:\n\n>> Do you mean to have that printf() or is it a leftover debugging\n>> statement?\n>\n> I mean to have it.\n\nOk, I was just checking.  Unless other Windows users complain, will apply\nas-is.  As you might guess, I am completely neutral on this one.\n"},{"id":"83102","messageId":"1215895277.487916ed43464@webmail.nextra.at","threadId":"12603","inReplyTo":"7vskufy40c.fsf@gitster.siamese.dyndns.org","subject":"Re: [PATCH 3/3 FIXED] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-12T20:41:17Z","receivedAt":"2008-07-12T20:41:17Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Zitat von Junio C Hamano <gitster@pobox.com>:\n\n> Steffen Prohaska <prohaska@zib.de> writes:\n>\n> >> Do you mean to have that printf() or is it a leftover debugging\n> >> statement?\n> >\n> > I mean to have it.\n>\n> Ok, I was just checking.  Unless other Windows users complain, will apply\n> as-is.  As you might guess, I am completely neutral on this one.\n\nI'm working on followups to this series, and it turns out to be more\nconvenient to have system_path() in exec_cmd.c instead of path.c.\nIt'll make sense if I resend the series with an updated version of 1/3\n(instead of a patch that merely moves the function around).\n\n-- Hannes\n"},{"id":"83130","messageId":"7v1w1yupn4.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"1215895277.487916ed43464@webmail.nextra.at","subject":"Re: [PATCH 3/3 FIXED] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-13T08:58:23Z","receivedAt":"2008-07-13T08:58:23Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <johannes.sixt@telecom.at> writes:\n\n> Zitat von Junio C Hamano <gitster@pobox.com>:\n>\n>> Steffen Prohaska <prohaska@zib.de> writes:\n>>\n>> >> Do you mean to have that printf() or is it a leftover debugging\n>> >> statement?\n>> >\n>> > I mean to have it.\n>>\n>> Ok, I was just checking.  Unless other Windows users complain, will apply\n>> as-is.  As you might guess, I am completely neutral on this one.\n>\n> I'm working on followups to this series, and it turns out to be more\n> convenient to have system_path() in exec_cmd.c instead of path.c.\n> It'll make sense if I resend the series with an updated version of 1/3\n> (instead of a patch that merely moves the function around).\n\nOk, will drop these three patches and wait for replacement from yours to\nappear, and then we will see which ones to apply.\n"},{"id":"83168","messageId":"1215981083-10815-1-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"7v1w1yupn4.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] Move code interpreting path relative to exec-dir to new function system_path()","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-13T20:31:18Z","receivedAt":"2008-07-13T20:31:18Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"From: Steffen Prohaska <prohaska@zib.de>\n\nExpanding system paths relative to git_exec_path can be used for\ncreating an installation that can be moved to a different directory\nwithout re-compiling.  We use this approach for template_dir and the\nsystem wide gitconfig.  The Windows installer (msysgit) is an example\nfor such a setup.\n\nThis commit moves common code to a new function system_path().  System\npaths that are to be interpreted relative to git_exec_path are passed to\nsystem_path() and the return value is used instead of the original path.\nsystem_path() prefixes a relative path with git_exec_path and leaves\nabsolute paths unmodified.  For example, we now write\n\n    template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);\n\n[j6t: moved from path.c to exec_cmd.c]\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n builtin-init-db.c |   14 ++------------\n config.c          |   11 ++---------\n exec_cmd.c        |   10 ++++++++++\n exec_cmd.h        |    2 +-\n 4 files changed, 15 insertions(+), 22 deletions(-)\n\ndiff --git a/builtin-init-db.c b/builtin-init-db.c\nindex e23b843..5ba213a 100644\n--- a/builtin-init-db.c\n+++ b/builtin-init-db.c\n@@ -115,18 +115,8 @@ static void copy_templates(const char *template_dir)\n \n \tif (!template_dir)\n \t\ttemplate_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);\n-\tif (!template_dir) {\n-\t\t/*\n-\t\t * if the hard-coded template is relative, it is\n-\t\t * interpreted relative to the exec_dir\n-\t\t */\n-\t\ttemplate_dir = DEFAULT_GIT_TEMPLATE_DIR;\n-\t\tif (!is_absolute_path(template_dir)) {\n-\t\t\tstruct strbuf d = STRBUF_INIT;\n-\t\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), template_dir);\n-\t\t\ttemplate_dir = strbuf_detach(&d, NULL);\n-\t\t}\n-\t}\n+\tif (!template_dir)\n+\t\ttemplate_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);\n \tstrcpy(template_path, template_dir);\n \ttemplate_len = strlen(template_path);\n \tif (template_path[template_len-1] != '/') {\ndiff --git a/config.c b/config.c\nindex 2862cc4..1e066c7 100644\n--- a/config.c\n+++ b/config.c\n@@ -581,15 +581,8 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)\n const char *git_etc_gitconfig(void)\n {\n \tstatic const char *system_wide;\n-\tif (!system_wide) {\n-\t\tsystem_wide = ETC_GITCONFIG;\n-\t\tif (!is_absolute_path(system_wide)) {\n-\t\t\t/* interpret path relative to exec-dir */\n-\t\t\tstruct strbuf d = STRBUF_INIT;\n-\t\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), system_wide);\n-\t\t\tsystem_wide = strbuf_detach(&d, NULL);\n-\t\t}\n-\t}\n+\tif (!system_wide)\n+\t\tsystem_wide = system_path(ETC_GITCONFIG);\n \treturn system_wide;\n }\n \ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex da04efe..8899e31 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -40,6 +40,16 @@ static const char *builtin_exec_path(void)\n #endif\n }\n \n+const char *system_path(const char *path)\n+{\n+\tif (!is_absolute_path(path)) {\n+\t\tstruct strbuf d = STRBUF_INIT;\n+\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), path);\n+\t\tpath = strbuf_detach(&d, NULL);\n+\t}\n+\treturn path;\n+}\n+\n void git_set_argv_exec_path(const char *exec_path)\n {\n \targv_exec_path = exec_path;\ndiff --git a/exec_cmd.h b/exec_cmd.h\nindex a892355..7eb94e5 100644\n--- a/exec_cmd.h\n+++ b/exec_cmd.h\n@@ -6,6 +6,6 @@ extern const char* git_exec_path(void);\n extern void setup_path(const char *);\n extern int execv_git_cmd(const char **argv); /* NULL terminated */\n extern int execl_git_cmd(const char *cmd, ...);\n-\n+extern const char *system_path(const char *path);\n \n #endif /* GIT_EXEC_CMD_H */\n-- \n1.5.6.2.300.ga3a9\n"},{"id":"83167","messageId":"1215981083-10815-2-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1215981083-10815-1-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH] help.c: Add support for htmldir relative to git_exec_path()","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-13T20:31:19Z","receivedAt":"2008-07-13T20:31:19Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"From: Steffen Prohaska <prohaska@zib.de>\n\nIf htmldir (in the Makefile) is a relative path, this path will now be\ninterpreted relative to git_exec_path.  This can be used to create an\ninstallation that can be moved to a different directory without\nre-compiling.  The Windows installer (msysgit) is an example for such\na setup.\n\nNote that the Makefile maps htmldir to the define GIT_HTML_PATH.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n help.c |    8 +++++---\n 1 files changed, 5 insertions(+), 3 deletions(-)\n\ndiff --git a/help.c b/help.c\nindex ca9632b..0f055bf 100644\n--- a/help.c\n+++ b/help.c\n@@ -633,13 +633,15 @@ static void show_info_page(const char *git_cmd)\n static void get_html_page_path(struct strbuf *page_path, const char *page)\n {\n \tstruct stat st;\n+\tconst char *html_path = system_path(GIT_HTML_PATH);\n \n \t/* Check that we have a git documentation directory. */\n-\tif (stat(GIT_HTML_PATH \"/git.html\", &st) || !S_ISREG(st.st_mode))\n-\t\tdie(\"'%s': not a documentation directory.\", GIT_HTML_PATH);\n+\tif (stat(mkpath(\"%s/git.html\", html_path), &st)\n+\t    || !S_ISREG(st.st_mode))\n+\t\tdie(\"'%s': not a documentation directory.\", html_path);\n \n \tstrbuf_init(page_path, 0);\n-\tstrbuf_addf(page_path, GIT_HTML_PATH \"/%s.html\", page);\n+\tstrbuf_addf(page_path, \"%s/%s.html\", html_path, page);\n }\n \n static void show_html_page(const char *git_cmd)\n-- \n1.5.6.2.300.ga3a9\n"},{"id":"83169","messageId":"1215981083-10815-3-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1215981083-10815-2-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH] help (Windows): Display HTML in default browser using Windows' shell API","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-13T20:31:20Z","receivedAt":"2008-07-13T20:31:20Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"From: Steffen Prohaska <prohaska@zib.de>\n\nThe system's default browser for displaying HTML help pages is now used\ndirectly on Windows, instead of launching git-web--browser, which\nrequires a Unix shell.  Avoiding MSYS' bash when possible is good\nbecause it avoids potential path translation issues.  In this case it is\nnot too hard to avoid launching a shell, so let's avoid it.\n\nThe Windows-specific code is implemented in compat/mingw.c to avoid\nplatform-specific code in the main code base.  On Windows, open_html is\nprovided as a define.  If open_html is not defined, git-web--browse is\nused.  This approach avoids platform-specific ifdefs by using\nper-function ifdefs.  The \"ifndef open_html\" together with the\nintroductory comment should sufficiently warn developers, so that they\nhopefully will not break this mechanism.\n\nSigned-off-by: Steffen Prohaska <prohaska@zib.de>\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n compat/mingw.c |   21 +++++++++++++++++++++\n compat/mingw.h |    3 +++\n help.c         |   14 +++++++++++++-\n 3 files changed, 37 insertions(+), 1 deletions(-)\n\ndiff --git a/compat/mingw.c b/compat/mingw.c\nindex 3a05fe7..0ca73f7 100644\n--- a/compat/mingw.c\n+++ b/compat/mingw.c\n@@ -1017,3 +1017,24 @@ sig_handler_t mingw_signal(int sig, sig_handler_t handler)\n \ttimer_fn = handler;\n \treturn old;\n }\n+\n+static const char *make_backslash_path(const char *path) {\n+\tstatic char buf[PATH_MAX + 1];\n+\tchar *c;\n+\n+\tif (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)\n+\t\tdie (\"Too long path: %.*s\", 60, path);\n+\n+\tfor (c = buf; *c; c++) {\n+\t\tif (*c == '/')\n+\t\t\t*c = '\\\\';\n+\t}\n+\treturn buf;\n+}\n+\n+void mingw_open_html(const char *unixpath)\n+{\n+\tconst char *htmlpath = make_backslash_path(unixpath);\n+\tprintf(\"Launching default browser to display HTML ...\\n\");\n+\tShellExecute(NULL, \"open\", htmlpath, NULL, \"\\\\\", 0);\n+}\ndiff --git a/compat/mingw.h b/compat/mingw.h\nindex 6bc049a..5a3bcee 100644\n--- a/compat/mingw.h\n+++ b/compat/mingw.h\n@@ -202,6 +202,9 @@ sig_handler_t mingw_signal(int sig, sig_handler_t handler);\n #define PATH_SEP ';'\n #define PRIuMAX \"I64u\"\n \n+void mingw_open_html(const char *path);\n+#define open_html mingw_open_html\n+\n /*\n  * helpers\n  */\ndiff --git a/help.c b/help.c\nindex 0f055bf..52d39b8 100644\n--- a/help.c\n+++ b/help.c\n@@ -644,6 +644,18 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)\n \tstrbuf_addf(page_path, \"%s/%s.html\", html_path, page);\n }\n \n+/*\n+ * If open_html is not defined in a platform-specific way (see for\n+ * example compat/mingw.h), we use the script web--browse to display\n+ * HTML.\n+ */\n+#ifndef open_html\n+void open_html(const char *path)\n+{\n+\texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", path, NULL);\n+}\n+#endif\n+\n static void show_html_page(const char *git_cmd)\n {\n \tconst char *page = cmd_to_page(git_cmd);\n@@ -651,7 +663,7 @@ static void show_html_page(const char *git_cmd)\n \n \tget_html_page_path(&page_path, page);\n \n-\texecl_git_cmd(\"web--browse\", \"-c\", \"help.browser\", page_path.buf, NULL);\n+\topen_html(page_path.buf);\n }\n \n void help_unknown_cmd(const char *cmd)\n-- \n1.5.6.2.300.ga3a9\n"},{"id":"83170","messageId":"1215981083-10815-4-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1215981083-10815-3-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH] Fix relative built-in paths to be relative to the command invocation","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-13T20:31:21Z","receivedAt":"2008-07-13T20:31:21Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"$(gitexecdir) (as defined in the Makefile) has gained another path\ncomponent, but the relative paths in the MINGW section of the Makefile,\nwhich are interpreted relative to it, do not account for it.\n\nInstead of adding another ../ in front of the path, we change the code that\nconstructs the absolute paths to do it relative to the command's directory,\nwhich is essentially $(bindir). We do it this way because we will also\nallow a relative $(gitexecdir) later.\n\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n Makefile       |    2 +-\n exec_cmd.c     |   14 ++++++++++----\n exec_cmd.h     |    3 ++-\n git.c          |    5 ++---\n receive-pack.c |    2 +-\n shell.c        |    4 ++--\n upload-pack.c  |    2 +-\n 7 files changed, 19 insertions(+), 13 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 4796565..2bdb9bf 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1301,7 +1301,7 @@ remove-dashes:\n ### Installation rules\n \n ifeq ($(firstword $(subst /, ,$(template_dir))),..)\n-template_instdir = $(gitexecdir)/$(template_dir)\n+template_instdir = $(shell cd '$(bindir_SQ)/$(template_dir_SQ)' && pwd)\n else\n template_instdir = $(template_dir)\n endif\ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex 8899e31..45f92eb 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -5,6 +5,7 @@\n \n extern char **environ;\n static const char *argv_exec_path;\n+static const char *argv0_path;\n \n static const char *builtin_exec_path(void)\n {\n@@ -42,14 +43,19 @@ static const char *builtin_exec_path(void)\n \n const char *system_path(const char *path)\n {\n-\tif (!is_absolute_path(path)) {\n+\tif (!is_absolute_path(path) && argv0_path) {\n \t\tstruct strbuf d = STRBUF_INIT;\n-\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), path);\n+\t\tstrbuf_addf(&d, \"%s/%s\", argv0_path, path);\n \t\tpath = strbuf_detach(&d, NULL);\n \t}\n \treturn path;\n }\n \n+void git_set_argv0_path(const char *path)\n+{\n+\targv0_path = path;\n+}\n+\n void git_set_argv_exec_path(const char *exec_path)\n {\n \targv_exec_path = exec_path;\n@@ -84,7 +90,7 @@ static void add_path(struct strbuf *out, const char *path)\n \t}\n }\n \n-void setup_path(const char *cmd_path)\n+void setup_path(void)\n {\n \tconst char *old_path = getenv(\"PATH\");\n \tstruct strbuf new_path;\n@@ -94,7 +100,7 @@ void setup_path(const char *cmd_path)\n \tadd_path(&new_path, argv_exec_path);\n \tadd_path(&new_path, getenv(EXEC_PATH_ENVIRONMENT));\n \tadd_path(&new_path, builtin_exec_path());\n-\tadd_path(&new_path, cmd_path);\n+\tadd_path(&new_path, argv0_path);\n \n \tif (old_path)\n \t\tstrbuf_addstr(&new_path, old_path);\ndiff --git a/exec_cmd.h b/exec_cmd.h\nindex 7eb94e5..0c46cd5 100644\n--- a/exec_cmd.h\n+++ b/exec_cmd.h\n@@ -2,8 +2,9 @@\n #define GIT_EXEC_CMD_H\n \n extern void git_set_argv_exec_path(const char *exec_path);\n+extern void git_set_argv0_path(const char *path);\n extern const char* git_exec_path(void);\n-extern void setup_path(const char *);\n+extern void setup_path(void);\n extern int execv_git_cmd(const char **argv); /* NULL terminated */\n extern int execl_git_cmd(const char *cmd, ...);\n extern const char *system_path(const char *path);\ndiff --git a/git.c b/git.c\nindex 7075533..b90c358 100644\n--- a/git.c\n+++ b/git.c\n@@ -470,7 +470,6 @@ int main(int argc, const char **argv)\n {\n \tconst char *cmd = argv[0] && *argv[0] ? argv[0] : \"git-help\";\n \tchar *slash = (char *)cmd + strlen(cmd);\n-\tconst char *cmd_path = NULL;\n \tint done_alias = 0;\n \n \t/*\n@@ -483,7 +482,7 @@ int main(int argc, const char **argv)\n \twhile (cmd <= slash && !is_dir_sep(*slash));\n \tif (cmd <= slash) {\n \t\t*slash++ = 0;\n-\t\tcmd_path = cmd;\n+\t\tgit_set_argv0_path(cmd);\n \t\tcmd = slash;\n \t}\n \n@@ -527,7 +526,7 @@ int main(int argc, const char **argv)\n \t * environment, and the $(gitexecdir) from the Makefile at build\n \t * time.\n \t */\n-\tsetup_path(cmd_path);\n+\tsetup_path();\n \n \twhile (1) {\n \t\t/* See if it's an internal command */\ndiff --git a/receive-pack.c b/receive-pack.c\nindex fa653b4..d44c19e 100644\n--- a/receive-pack.c\n+++ b/receive-pack.c\n@@ -482,7 +482,7 @@ int main(int argc, char **argv)\n \tif (!dir)\n \t\tusage(receive_pack_usage);\n \n-\tsetup_path(NULL);\n+\tsetup_path();\n \n \tif (!enter_repo(dir, 0))\n \t\tdie(\"'%s': unable to chdir or not a git archive\", dir);\ndiff --git a/shell.c b/shell.c\nindex 91ca7de..6a48de0 100644\n--- a/shell.c\n+++ b/shell.c\n@@ -15,7 +15,7 @@ static int do_generic_cmd(const char *me, char *arg)\n {\n \tconst char *my_argv[4];\n \n-\tsetup_path(NULL);\n+\tsetup_path();\n \tif (!arg || !(arg = sq_dequote(arg)))\n \t\tdie(\"bad argument\");\n \tif (prefixcmp(me, \"git-\"))\n@@ -37,7 +37,7 @@ static int do_cvs_cmd(const char *me, char *arg)\n \tif (!arg || strcmp(arg, \"server\"))\n \t\tdie(\"git-cvsserver only handles server: %s\", arg);\n \n-\tsetup_path(NULL);\n+\tsetup_path();\n \treturn execv_git_cmd(cvsserver_argv);\n }\n \ndiff --git a/upload-pack.c b/upload-pack.c\nindex 9f82941..c911e70 100644\n--- a/upload-pack.c\n+++ b/upload-pack.c\n@@ -638,7 +638,7 @@ int main(int argc, char **argv)\n \tif (i != argc-1)\n \t\tusage(upload_pack_usage);\n \n-\tsetup_path(NULL);\n+\tsetup_path();\n \n \tdir = argv[i];\n \n-- \n1.5.6.2.300.ga3a9\n"},{"id":"83172","messageId":"1215981083-10815-5-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1215981083-10815-4-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH] Allow the built-in exec path to be relative to the command invocation path","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-13T20:31:22Z","receivedAt":"2008-07-13T20:31:22Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"If GIT_EXEC_PATH (the macro that is defined in the Makefile) is relative,\nit is interpreted relative to the command's invocation path, which usually\nis $(bindir).\n\nThe Makefile rules were written with the assumption that $(gitexecdir) is\nan absolute path. We introduce a separate variable that names the\n(absolute) installation directory.\n\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n Makefile   |   23 +++++++++++++++--------\n exec_cmd.c |   38 ++------------------------------------\n 2 files changed, 17 insertions(+), 44 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 2bdb9bf..3593e6f 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1307,10 +1307,17 @@ template_instdir = $(template_dir)\n endif\n export template_instdir\n \n+ifeq ($(firstword $(subst /, ,$(gitexecdir))),..)\n+gitexec_instdir = $(shell cd '$(bindir_SQ)/$(gitexecdir_SQ)' && pwd)\n+else\n+gitexec_instdir = $(gitexecdir)\n+endif\n+gitexec_instdir_SQ = $(subst ','\\'',$(gitexec_instdir))\n+\n install: all\n \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'\n-\t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n-\t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n+\t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'\n+\t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'\n \t$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-upload-archive$X '$(DESTDIR_SQ)$(bindir_SQ)'\n \t$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install\n \t$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install\n@@ -1318,18 +1325,18 @@ ifndef NO_TCLTK\n \t$(MAKE) -C gitk-git install\n \t$(MAKE) -C git-gui install\n endif\n-\tif test 'z$(bindir_SQ)' != 'z$(gitexecdir_SQ)'; \\\n+\tif test 'z$(bindir_SQ)' != 'z$(gitexec_instdir_SQ)'; \\\n \tthen \\\n \t\tln -f '$(DESTDIR_SQ)$(bindir_SQ)/git$X' \\\n-\t\t\t'$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' || \\\n+\t\t\t'$(DESTDIR_SQ)$(gitexec_instdir_SQ)/git$X' || \\\n \t\tcp '$(DESTDIR_SQ)$(bindir_SQ)/git$X' \\\n-\t\t\t'$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X'; \\\n+\t\t\t'$(DESTDIR_SQ)$(gitexec_instdir_SQ)/git$X'; \\\n \tfi\n-\t$(foreach p,$(BUILT_INS), $(RM) '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;)\n+\t$(foreach p,$(BUILT_INS), $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p' ;)\n ifneq (,$X)\n-\t$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), $(RM) '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p';)\n+\t$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p';)\n endif\n-\t./check_bindir 'z$(bindir_SQ)' 'z$(gitexecdir_SQ)' '$(DESTDIR_SQ)$(bindir_SQ)/git-shell$X'\n+\t./check_bindir 'z$(bindir_SQ)' 'z$(gitexec_instdir_SQ)' '$(DESTDIR_SQ)$(bindir_SQ)/git-shell$X'\n \n install-doc:\n \t$(MAKE) -C Documentation install\ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex 45f92eb..c236034 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -7,40 +7,6 @@ extern char **environ;\n static const char *argv_exec_path;\n static const char *argv0_path;\n \n-static const char *builtin_exec_path(void)\n-{\n-#ifndef __MINGW32__\n-\treturn GIT_EXEC_PATH;\n-#else\n-\tint len;\n-\tchar *p, *q, *sl;\n-\tstatic char *ep;\n-\tif (ep)\n-\t\treturn ep;\n-\n-\tlen = strlen(_pgmptr);\n-\tif (len < 2)\n-\t\treturn ep = \".\";\n-\n-\tp = ep = xmalloc(len+1);\n-\tq = _pgmptr;\n-\tsl = NULL;\n-\t/* copy program name, turn '\\\\' into '/', skip last part */\n-\twhile ((*p = *q)) {\n-\t\tif (*q == '\\\\' || *q == '/') {\n-\t\t\t*p = '/';\n-\t\t\tsl = p;\n-\t\t}\n-\t\tp++, q++;\n-\t}\n-\tif (sl)\n-\t\t*sl = '\\0';\n-\telse\n-\t\tep[0] = '.', ep[1] = '\\0';\n-\treturn ep;\n-#endif\n-}\n-\n const char *system_path(const char *path)\n {\n \tif (!is_absolute_path(path) && argv0_path) {\n@@ -75,7 +41,7 @@ const char *git_exec_path(void)\n \t\treturn env;\n \t}\n \n-\treturn builtin_exec_path();\n+\treturn system_path(GIT_EXEC_PATH);\n }\n \n static void add_path(struct strbuf *out, const char *path)\n@@ -99,7 +65,7 @@ void setup_path(void)\n \n \tadd_path(&new_path, argv_exec_path);\n \tadd_path(&new_path, getenv(EXEC_PATH_ENVIRONMENT));\n-\tadd_path(&new_path, builtin_exec_path());\n+\tadd_path(&new_path, system_path(GIT_EXEC_PATH));\n \tadd_path(&new_path, argv0_path);\n \n \tif (old_path)\n-- \n1.5.6.2.300.ga3a9\n"},{"id":"83171","messageId":"1215981083-10815-6-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1215981083-10815-5-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH] Allow add_path() to add non-existent directories to the path","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-13T20:31:23Z","receivedAt":"2008-07-13T20:31:23Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"This function had used make_absolute_path(); but this function dies if\nthe directory that contains the entry whose relative path was supplied in\nthe argument does not exist. This is a problem if the argument is, for\nexample, \"../libexec/git-core\", and that \"../libexec\" does not exist.\n\nSince the resolution of symbolic links is not required for elements in\nPATH, we can fall back to using make_nonrelative_path(), which simply\nprepends $PWD to the path.\n\nWe have to move make_nonrelative_path() alongside make_absolute_path() in\nabspath.c so that git-shell can be linked. See 5b8e6f85f.\n\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n abspath.c  |   36 ++++++++++++++++++++++++++++++++++++\n exec_cmd.c |    2 +-\n path.c     |   36 ------------------------------------\n 3 files changed, 37 insertions(+), 37 deletions(-)\n\ndiff --git a/abspath.c b/abspath.c\nindex 4f95a95..99ee1af 100644\n--- a/abspath.c\n+++ b/abspath.c\n@@ -66,3 +66,39 @@ const char *make_absolute_path(const char *path)\n \n \treturn buf;\n }\n+\n+static const char *get_pwd_cwd(void)\n+{\n+\tstatic char cwd[PATH_MAX + 1];\n+\tchar *pwd;\n+\tstruct stat cwd_stat, pwd_stat;\n+\tif (getcwd(cwd, PATH_MAX) == NULL)\n+\t\treturn NULL;\n+\tpwd = getenv(\"PWD\");\n+\tif (pwd && strcmp(pwd, cwd)) {\n+\t\tstat(cwd, &cwd_stat);\n+\t\tif (!stat(pwd, &pwd_stat) &&\n+\t\t    pwd_stat.st_dev == cwd_stat.st_dev &&\n+\t\t    pwd_stat.st_ino == cwd_stat.st_ino) {\n+\t\t\tstrlcpy(cwd, pwd, PATH_MAX);\n+\t\t}\n+\t}\n+\treturn cwd;\n+}\n+\n+const char *make_nonrelative_path(const char *path)\n+{\n+\tstatic char buf[PATH_MAX + 1];\n+\n+\tif (is_absolute_path(path)) {\n+\t\tif (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)\n+\t\t\tdie (\"Too long path: %.*s\", 60, path);\n+\t} else {\n+\t\tconst char *cwd = get_pwd_cwd();\n+\t\tif (!cwd)\n+\t\t\tdie(\"Cannot determine the current working directory\");\n+\t\tif (snprintf(buf, PATH_MAX, \"%s/%s\", cwd, path) >= PATH_MAX)\n+\t\t\tdie (\"Too long path: %.*s\", 60, path);\n+\t}\n+\treturn buf;\n+}\ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex c236034..0ed768d 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -50,7 +50,7 @@ static void add_path(struct strbuf *out, const char *path)\n \t\tif (is_absolute_path(path))\n \t\t\tstrbuf_addstr(out, path);\n \t\telse\n-\t\t\tstrbuf_addstr(out, make_absolute_path(path));\n+\t\t\tstrbuf_addstr(out, make_nonrelative_path(path));\n \n \t\tstrbuf_addch(out, PATH_SEP);\n \t}\ndiff --git a/path.c b/path.c\nindex 5983255..16c1d01 100644\n--- a/path.c\n+++ b/path.c\n@@ -291,42 +291,6 @@ int adjust_shared_perm(const char *path)\n \treturn 0;\n }\n \n-static const char *get_pwd_cwd(void)\n-{\n-\tstatic char cwd[PATH_MAX + 1];\n-\tchar *pwd;\n-\tstruct stat cwd_stat, pwd_stat;\n-\tif (getcwd(cwd, PATH_MAX) == NULL)\n-\t\treturn NULL;\n-\tpwd = getenv(\"PWD\");\n-\tif (pwd && strcmp(pwd, cwd)) {\n-\t\tstat(cwd, &cwd_stat);\n-\t\tif (!stat(pwd, &pwd_stat) &&\n-\t\t    pwd_stat.st_dev == cwd_stat.st_dev &&\n-\t\t    pwd_stat.st_ino == cwd_stat.st_ino) {\n-\t\t\tstrlcpy(cwd, pwd, PATH_MAX);\n-\t\t}\n-\t}\n-\treturn cwd;\n-}\n-\n-const char *make_nonrelative_path(const char *path)\n-{\n-\tstatic char buf[PATH_MAX + 1];\n-\n-\tif (is_absolute_path(path)) {\n-\t\tif (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)\n-\t\t\tdie (\"Too long path: %.*s\", 60, path);\n-\t} else {\n-\t\tconst char *cwd = get_pwd_cwd();\n-\t\tif (!cwd)\n-\t\t\tdie(\"Cannot determine the current working directory\");\n-\t\tif (snprintf(buf, PATH_MAX, \"%s/%s\", cwd, path) >= PATH_MAX)\n-\t\t\tdie (\"Too long path: %.*s\", 60, path);\n-\t}\n-\treturn buf;\n-}\n-\n const char *make_relative_path(const char *abs, const char *base)\n {\n \tstatic char buf[PATH_MAX + 1];\n-- \n1.5.6.2.300.ga3a9\n"},{"id":"83174","messageId":"alpine.DEB.1.00.0807132141130.8950@racer","threadId":"12603","inReplyTo":"1215981083-10815-4-git-send-email-johannes.sixt@telecom.at","subject":"Re: [PATCH] Fix relative built-in paths to be relative to the command invocation","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-13T20:43:07Z","receivedAt":"2008-07-13T20:43:07Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 13 Jul 2008, Johannes Sixt wrote:\n\n> diff --git a/Makefile b/Makefile\n> index 4796565..2bdb9bf 100644\n> --- a/Makefile\n> +++ b/Makefile\n> @@ -1301,7 +1301,7 @@ remove-dashes:\n>  ### Installation rules\n>  \n>  ifeq ($(firstword $(subst /, ,$(template_dir))),..)\n> -template_instdir = $(gitexecdir)/$(template_dir)\n> +template_instdir = $(shell cd '$(bindir_SQ)/$(template_dir_SQ)' && pwd)\n\nWhat is this for?  Did the original line stop working?\n\n> diff --git a/exec_cmd.c b/exec_cmd.c\n> index 8899e31..45f92eb 100644\n> --- a/exec_cmd.c\n> +++ b/exec_cmd.c\n> @@ -5,6 +5,7 @@\n>  \n>  extern char **environ;\n>  static const char *argv_exec_path;\n> +static const char *argv0_path;\n>  \n>  static const char *builtin_exec_path(void)\n>  {\n> @@ -42,14 +43,19 @@ static const char *builtin_exec_path(void)\n>  \n>  const char *system_path(const char *path)\n>  {\n> -\tif (!is_absolute_path(path)) {\n> +\tif (!is_absolute_path(path) && argv0_path) {\n>  \t\tstruct strbuf d = STRBUF_INIT;\n> -\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), path);\n> +\t\tstrbuf_addf(&d, \"%s/%s\", argv0_path, path);\n>  \t\tpath = strbuf_detach(&d, NULL);\n>  \t}\n>  \treturn path;\n>  }\n>  \n> +void git_set_argv0_path(const char *path)\n> +{\n> +\targv0_path = path;\n> +}\n> +\n>  void git_set_argv_exec_path(const char *exec_path)\n>  {\n>  \targv_exec_path = exec_path;\n> @@ -84,7 +90,7 @@ static void add_path(struct strbuf *out, const char *path)\n>  \t}\n>  }\n>  \n> -void setup_path(const char *cmd_path)\n> +void setup_path(void)\n\nIt seems to me that this patch would not do anything different, but with \nless code change, if setup_path() would set argv0_path, and not a new \nfunction was introduced.\n\nCiao,\nDscho\n"},{"id":"83175","messageId":"alpine.DEB.1.00.0807132144250.8950@racer","threadId":"12603","inReplyTo":"1215981083-10815-5-git-send-email-johannes.sixt@telecom.at","subject":"Re: [PATCH] Allow the built-in exec path to be relative to the command invocation path","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-13T20:45:10Z","receivedAt":"2008-07-13T20:45:10Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 13 Jul 2008, Johannes Sixt wrote:\n\n> [a patch series, with 3 patches from Steffen]\n\nWow.  I like this demonstration how a nice patch series looks like.\n\nCiao,\nDscho\n"},{"id":"83213","messageId":"7vtzetjbif.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vabgqsc37.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-14T05:11:20Z","receivedAt":"2008-07-14T05:11:20Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be merged to the maintenance series have \"maint-\" in their names.\n\nI think most of the important stuff is already in 'next'.  Let's start\ntalking about closing the merge window for 1.6.0.\n\n----------------------------------------------------------------\n[New Topics]\n\n* sb/dashless (Sun Jul 13 15:36:15 2008 +0200) 3 commits\n - Make usage strings dash-less\n - t/: Use \"test_must_fail git\" instead of \"! git\"\n - t/test-lib.sh: exit with small negagive int is ok with\n   test_must_fail\n\n* mv/dashless (Fri Jul 11 02:12:06 2008 +0200) 4 commits\n - make remove-dashes: apply to scripts and programs as well, not\n   just to builtins\n - git-bisect: use dash-less form on git bisect log\n - t1007-hash-object.sh: use quotes for the test description\n - t0001-init.sh: change confusing directory name\n\n* sp/maint-bash-completion-optim (Mon Jul 14 00:22:03 2008 +0000) 1 commit\n + bash completion: Append space after file names have been completed\n\nEarly parts are already merged to 'master' and need to be merged down to\nmaint as well, as this is about a \"performance bug\" that has been with us\nalmost forever.\n\n* ag/rewrite_one (Sat Jul 12 22:00:57 2008 +0400) 1 commit\n + Fix quadratic performance in rewrite_one.\n\n* sp/win (Fri Jul 11 18:52:42 2008 +0200) 3 commits\n + We need to check for msys as well as Windows in add--interactive.\n + Convert CR/LF to LF in tag signatures\n + Fixed text file auto-detection: treat EOF character 032 at the end\n   of file as printable\n\n* js/merge-rr (Sat Jul 12 15:56:19 2008 +0100) 2 commits\n + Move MERGE_RR from .git/rr-cache/ into .git/\n + builtin-rerere: more carefully find conflict markers\n\n* sb/rerere-lib (Wed Jul 9 14:58:57 2008 +0200) 2 commits\n + rerere: Separate libgit and builtin functions\n + builtin-rerere: more carefully find conflict markers\n\n* ls/mailinfo (Sun Jul 13 20:30:12 2008 +0200) 3 commits\n - git-mailinfo: use strbuf's instead of fixed buffers\n - Add some useful functions for strbuf manipulation.\n - Make some strbuf_*() struct strbuf arguments const.\n\n* gi/cherry-cache (Sat Jul 12 20:14:51 2008 -0700) 1 commit\n - cherry: cache patch-ids to avoid repeating work\n\nThis does not seem to pass tests even on its own.\n\n* js/maint-pretty-mailmap (Sat Jul 12 00:28:18 2008 +0100) 1 commit\n + Add pretty format %aN which gives the author name, respecting\n   .mailmap\n\n* js/more-win (Sun Jul 13 22:31:23 2008 +0200) 6 commits\n - Allow add_path() to add non-existent directories to the path\n - Allow the built-in exec path to be relative to the command\n   invocation path\n - Fix relative built-in paths to be relative to the command\n   invocation\n + help (Windows): Display HTML in default browser using Windows'\n   shell API\n + help.c: Add support for htmldir relative to git_exec_path()\n + Move code interpreting path relative to exec-dir to new function\n   system_path()\n\nThe earlier parts are obvious; Dscho seemed to have some comments on the\nlater ones that are in 'pu'.\n\n* lw/gitweb (Fri Jul 11 03:11:48 2008 +0200) 3 commits\n - gitweb: use new Git::Repo API, and add optional caching\n - Add new Git::Repo API\n - gitweb: add test suite with Test::WWW::Mechanize::CGI\n\nThis does not pass t9710, at least for me X-<.\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* jc/rebase-orig-head (Tue Jul 8 00:12:22 2008 -0400) 2 commits\n + Documentation: mention ORIG_HEAD in am, merge, and rebase\n + Teach \"am\" and \"rebase\" to mark the original position with\n   ORIG_HEAD\n\n* jc/branch-merged (Tue Jul 8 17:55:47 2008 -0700) 3 commits\n + branch --merged/--no-merged: allow specifying arbitrary commit\n + branch --contains: default to HEAD\n + parse-options: add PARSE_OPT_LASTARG_DEFAULT flag\n\nThis builds on top of the parse-options enhancement series that\nhas been cooking in 'next' for some time.\n\n* om/rerere-careful (Mon Jul 7 14:42:48 2008 +0200) 1 commit\n + builtin-rerere: more carefully find conflict markers\n\n* ls/maint-mailinfo-patch-label (Thu Jul 10 23:41:33 2008 +0200) 1 commit\n + git-mailinfo: Fix getting the subject from the in-body [PATCH]\n   line\n\n----------------------------------------------------------------\n[Actively Cooking]\n\n* xx/merge-in-c-into-next (Wed Jul 9 13:51:46 2008 -0700) 4 commits\n + Teach git-merge -X<option> again.\n + Merge branch 'jc/merge-theirs' into xx/merge-in-c-into-next\n + builtin-merge.c: use parse_options_step() \"incremental parsing\"\n   machinery\n + Merge branch 'ph/parseopt-step-blame' into xx/merge-in-c-into-next\n\nI've described what this is in a separate message.\n\n* rs/imap (Wed Jul 9 22:29:02 2008 +0100) 5 commits\n - Documentation: Improve documentation for git-imap-send(1)\n - imap-send.c: more style fixes\n - imap-send.c: style fixes\n - git-imap-send: Support SSL\n - git-imap-send: Allow the program to be run from subdirectories of\n   a git tree\n\nSome people seem to prefer having this feature available also with gnutls.\nIf such a patch materializes soon, that would be good, but otherwise I'll\nmerge this as-is to 'next'.  Such an enhancement can be done in-tree on\ntop of this series.\n\n* jc/merge-theirs (Mon Jun 30 22:18:57 2008 -0700) 5 commits\n + Make \"subtree\" part more orthogonal to the rest of merge-\n   recursive.\n + Teach git-pull to pass -X<option> to git-merge\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -Xsubtree=foo/bar/baz -s recursive other\" now.\n\n* mv/merge-in-c (Sun Jul 13 08:13:55 2008 +0000) 19 commits\n + reduce_heads(): thinkofix\n + Add a new test for git-merge-resolve\n + t6021: add a new test for git-merge-resolve\n + Teach merge.log to \"git-merge\" again\n + Build in merge\n + Fix t7601-merge-pull-config.sh on AIX\n + git-commit-tree: make it usable from other builtins\n + Add new test case to ensure git-merge prepends the custom merge\n   message\n + Add new test case to ensure git-merge reduces octopus parents when\n   possible\n + Introduce reduce_heads()\n + Introduce get_merge_bases_many()\n + Add new test to ensure git-merge handles more than 25 refs.\n + Introduce get_octopus_merge_bases() in commit.c\n + git-fmt-merge-msg: make it usable from other builtins\n + Move read_cache_unmerged() to read-cache.c\n + Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n + Move parse-options's skip_prefix() to git-compat-util.h\n + Move commit_list_count() to commit.c\n + Move split_cmdline() to alias.c\n\nSverre seems to have a yet another fixup on top of this that came late and\nI haven't looked at.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* js/pick-root (Fri Jul 4 16:19:52 2008 +0100) 1 commit\n + Allow cherry-picking root commits\n\n* ab/bundle (Sat Jul 5 17:26:40 2008 -0400) 1 commit\n + Teach git-bundle to read revision arguments from stdin like git-\n   rev-list.\n\n* sg/stash-k-i (Tue Jul 8 00:40:56 2008 -0700) 2 commits\n + Documentation: tweak use case in \"git stash save --keep-index\"\n + stash: introduce 'stash save --keep-index' option\n\nOne weakness of our \"partial commit\" workflow support used to be that the\nuser can incrementally build what is to be committed in the index but that\nstate cannot be tested as a whole in the working tree.  This allows you to\ntemporarily stash the remaining changes in the working tree so that the\nindex state before running \"stash save --keep-index\" can be seen in the\nworking tree to be tested and then committed.\n\n* am/stash-branch (Mon Jul 7 02:50:10 2008 +0530) 2 commits\n + Add a test for \"git stash branch\"\n + Implement \"git stash branch <newbranch> <stash>\"\n\nCreates a new branch out of the stashed state, after returning from the\ninterrupt that forced you to create the stash in the first place.\n\n* tr/add-i-e (Thu Jul 3 00:00:00 2008 +0200) 3 commits\n + git-add--interactive: manual hunk editing mode\n + git-add--interactive: remove hunk coalescing\n + git-add--interactive: replace hunk recounting with apply --recount\n\nAdds 'e/dit' action to interactive add command.\n\n* jc/report-tracking (Sun Jul 6 02:54:56 2008 -0700) 5 commits\n + branch -r -v: do not spit out garbage\n + stat_tracking_info(): clear object flags used during counting\n + git-branch -v: show the remote tracking statistics\n + git-status: show the remote tracking statistics\n + Refactor \"tracking statistics\" code used by \"git checkout\"\n\nMakes the \"your branch is ahead of the tracked one by N commits\" logic and\nmessages available to other commands; status and branch are updated.\n\n* ph/parseopt-step-blame (Wed Jul 9 23:38:34 2008 +0200) 18 commits\n + revisions: refactor handle_revision_opt into parse_revision_opt.\n + git-shortlog: migrate to parse-options partially.\n + git-blame: fix lapsus\n + git-blame: migrate to incremental parse-option [2/2]\n + git-blame: migrate to incremental parse-option [1/2]\n + revisions: split handle_revision_opt() from setup_revisions()\n + Merge branch 'jc/blame' (early part) into HEAD\n + parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.\n + parse-opt: fake short strings for callers to believe in.\n + parse-opt: do not print errors on unknown options, return -2\n   intead.\n + parse-opt: create parse_options_step.\n + parse-opt: Export a non NORETURN usage dumper.\n + parse-opt: have parse_options_{start,end}.\n + git-blame --reverse\n + builtin-blame.c: allow more than 16 parents\n + builtin-blame.c: move prepare_final() into a separate function.\n + rev-list --children\n + revision traversal: --children option\n\nBecame active again ;-) This probably is ready for 'master' already,\nexcept for the last two which I only looked at the patch and have not\nused heavily in production yet.\n\n----------------------------------------------------------------\n[On Hold]\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis was previously in \"will be in master soon\" category, but it turns out\nthat the synonyms to the ones this one deletes are fairly new invention\nthat happend in 1.5.6 timeframe, and we cannot do this just yet.  Perhaps\nin 1.7.0.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n\nThis is the \"botched\" one.  Will be resurrected during 1.7.0 or 1.8.0\ntimeframe.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* sb/sequencer (Tue Jul 1 04:38:34 2008 +0200) 4 commits\n . Migrate git-am to use git-sequencer\n . Add git-sequencer test suite (t3350)\n . Add git-sequencer prototype documentation\n . Add git-sequencer shell prototype\n\n* jc/grafts (Wed Jul 2 17:14:12 2008 -0700) 1 commit\n - [BROKEN wrt shallow clones] Ignore graft during object transfer\n\nCloning or fetching from a repository from grafts did not send objects\nthat are hidden by grafts, but the commits in the resulting repository do\nneed these to pass fsck.  This fixes object transfer to ignore grafts.\n\nAnother fix is needed to git-prune so that it ignores grafts but treats\ncommits that are mentioned in grafts as reachable.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 2 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n\nThis is for peeling to see what's behind the blamed commit, which may or\nmay not help applications like gitweb.\n"},{"id":"83223","messageId":"7vej5xj758.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vtzetjbif.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-14T06:45:39Z","receivedAt":"2008-07-14T06:45:39Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> * lw/gitweb (Fri Jul 11 03:11:48 2008 +0200) 3 commits\n>  - gitweb: use new Git::Repo API, and add optional caching\n>  - Add new Git::Repo API\n>  - gitweb: add test suite with Test::WWW::Mechanize::CGI\n>\n> This does not pass t9710, at least for me X-<.\n\nThis is getting a bit boring and tiresome.  Obviously I haven't checked\nwhat _else_ is missing because I did not install Carp::Always myself to my\nsystem.\n\n t/t9710-perl-git-repo.sh |    4 ++--\n 1 files changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/t/t9710-perl-git-repo.sh b/t/t9710-perl-git-repo.sh\nindex ca67b87..2da3cd8 100755\n--- a/t/t9710-perl-git-repo.sh\n+++ b/t/t9710-perl-git-repo.sh\n@@ -6,8 +6,8 @@\n test_description='perl interface (Git/*.pm)'\n . ./test-lib.sh\n \n-perl -MTest::More -e 0 2>/dev/null || {\n-\tsay_color skip \"Perl Test::More unavailable, skipping test\"\n+perl -MTest::More -MTest::Exception -MCarp::Always -e 0 2>/dev/null || {\n+\tsay_color skip \"Perl Test::{More,Exception}, Carp::Always unavailable, skipping test\"\n \ttest_done\n }\n \n"},{"id":"83226","messageId":"1216018557.487af87d7bd28@webmail.eunet.at","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807132141130.8950@racer","subject":"Re: [PATCH] Fix relative built-in paths to be relative to the command invocation","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T06:55:57Z","receivedAt":"2008-07-14T06:55:57Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Zitat von Johannes Schindelin <Johannes.Schindelin@gmx.de>:\n\n> Hi,\n>\n> On Sun, 13 Jul 2008, Johannes Sixt wrote:\n>\n> > diff --git a/Makefile b/Makefile\n> > index 4796565..2bdb9bf 100644\n> > --- a/Makefile\n> > +++ b/Makefile\n> > @@ -1301,7 +1301,7 @@ remove-dashes:\n> >  ### Installation rules\n> >\n> >  ifeq ($(firstword $(subst /, ,$(template_dir))),..)\n> > -template_instdir = $(gitexecdir)/$(template_dir)\n> > +template_instdir = $(shell cd '$(bindir_SQ)/$(template_dir_SQ)' && pwd)\n>\n> What is this for?  Did the original line stop working?\n\nI could just have changed $(gitexecdir) to $(bindir), but in the\nmake-execpath-relative patch we will need the normalized gitexec_instdir\nbecause its value is compared to $(bindir). So the extra $(shell...) in\n_this_ patch is only that the final result looks consistent.\n\n> > diff --git a/exec_cmd.c b/exec_cmd.c\n> > index 8899e31..45f92eb 100644\n> > --- a/exec_cmd.c\n> > +++ b/exec_cmd.c\n> > @@ -5,6 +5,7 @@\n> >\n> >  extern char **environ;\n> >  static const char *argv_exec_path;\n> > +static const char *argv0_path;\n> >\n> >  static const char *builtin_exec_path(void)\n> >  {\n> > @@ -42,14 +43,19 @@ static const char *builtin_exec_path(void)\n> >\n> >  const char *system_path(const char *path)\n> >  {\n> > -\tif (!is_absolute_path(path)) {\n> > +\tif (!is_absolute_path(path) && argv0_path) {\n> >  \t\tstruct strbuf d = STRBUF_INIT;\n> > -\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), path);\n> > +\t\tstrbuf_addf(&d, \"%s/%s\", argv0_path, path);\n> >  \t\tpath = strbuf_detach(&d, NULL);\n> >  \t}\n> >  \treturn path;\n> >  }\n> >\n> > +void git_set_argv0_path(const char *path)\n> > +{\n> > +\targv0_path = path;\n> > +}\n> > +\n> >  void git_set_argv_exec_path(const char *exec_path)\n> >  {\n> >  \targv_exec_path = exec_path;\n> > @@ -84,7 +90,7 @@ static void add_path(struct strbuf *out, const char\n> *path)\n> >  \t}\n> >  }\n> >\n> > -void setup_path(const char *cmd_path)\n> > +void setup_path(void)\n>\n> It seems to me that this patch would not do anything different, but with\n> less code change, if setup_path() would set argv0_path, and not a new\n> function was introduced.\n\nThis is just to play a safe game. I had it that way, but I decided to have\nthe call to the new git_set_argv0_path() early in git.c because the call\nto setup_path() in git.c is very late, and it could happen that we call\nsystem_path() (which needs argv0_path) before that. Although I didn't audit\nthe code whether this really happens.\n\n-- Hannes\n"},{"id":"83230","messageId":"487AFC89.8020009@viscovery.net","threadId":"12603","inReplyTo":"1215981083-10815-6-git-send-email-johannes.sixt@telecom.at","subject":"Re: [PATCH] Allow add_path() to add non-existent directories to the path","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2008-07-14T07:13:13Z","receivedAt":"2008-07-14T07:13:13Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"\nJohannes Sixt schrieb:\n> +static const char *get_pwd_cwd(void)\n> +{\n> +\tstatic char cwd[PATH_MAX + 1];\n> +\tchar *pwd;\n> +\tstruct stat cwd_stat, pwd_stat;\n> +\tif (getcwd(cwd, PATH_MAX) == NULL)\n> +\t\treturn NULL;\n> +\tpwd = getenv(\"PWD\");\n> +\tif (pwd && strcmp(pwd, cwd)) {\n> +\t\tstat(cwd, &cwd_stat);\n> +\t\tif (!stat(pwd, &pwd_stat) &&\n> +\t\t    pwd_stat.st_dev == cwd_stat.st_dev &&\n> +\t\t    pwd_stat.st_ino == cwd_stat.st_ino) {\n> +\t\t\tstrlcpy(cwd, pwd, PATH_MAX);\n\ngit-bash users on Windows, please test this patch. The problem is that\nwith our custom stat implementation st_dev and st_ino are not reliable. It\n works in my setup because $PWD is not set and this branch is never\nentered, but with bash it makes a difference.\n\n-- Hannes\n"},{"id":"83231","messageId":"7vzlokhpk7.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vtzetjbif.fsf@gitster.siamese.dyndns.org","subject":"Closing the merge window for 1.6.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-14T07:50:48Z","receivedAt":"2008-07-14T07:50:48Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> I think most of the important stuff is already in 'next'.  Let's start\n> talking about closing the merge window for 1.6.0.\n\nI think by the time we declare -rc0, we will have merged everything we\nhave in \"Actively Cooking\" list from tonight, perhaps except for the\n\"merge -Xtheirs\", as there do not seem to be wide support for this\nfeature.  All the Windows bits and myriad of s/git-foo/git foo/ patches\nsubmitted over the weekend and queued in next/pu, and various smallish\ntopics in \"New Topics\" list will hopefully all appear in 1.6.0.\n\nIn essence, I am saying that the merge window is more-or-less closed, from\nthe point of view of \"what will be in, and what won't be\"; of course some\nof the topics may not be merged in their current shape without further\nfixes.\n\nThe reason I say more-or-less is because I am aware of a handful of\npatches that are not even in 'pu' yet:\n\n * A few patches from Mark Levedahl on git-submodule are still held in my\n   inbox; I haven't decided what to do with them.\n\n    Date: Wed,  9 Jul 2008 21:05:40 -0400\n    Subject: [PATCH] git-submodule - make \"submodule add\" more strict, and document it\n    Message-Id: <1215651941-3460-1-git-send-email-mlevedahl@gmail.com>\n\n    Date: Wed,  9 Jul 2008 21:05:41 -0400\n    Subject: [PATCH] git-submodule - register submodule URL if adding in place\n    Message-ID: <1215651941-3460-2-git-send-email-mlevedahl@gmail.com>\n\n   These two appeared at the end of a discussion, and as far as I can see,\n   there wasn't any objection to them.  Unless somebody makes a convincing\n   argument against them, I am inclined to include them in 1.6.0\n\n * Starting bisect with a forked good and bad pair, from Christian Couder,\n   is not queued yet.  I think it is just the matter of Christian\n   resending the two patches squashed (or me applying them while squashing\n   them myself) --- I was busy cutting 1.5.6.3 release and tending other\n   topics, and haven't got around to do so.\n\n    Date: Thu, 10 Jul 2008 05:41:52 +0200\n    Subject: [PATCH] bisect: test merge base if good rev is not an ancestor of bad rev\n    Message-Id: <20080710054152.b051989c.chriscool@tuxfamily.org>\n\n * Alice and Bob prompt in tutorial, from Ian Katz, is not queued; they\n   should be safe to directly apply to 'master'.  The only reason why I\n   haven't is because it takes a lot of time to generate and concentration\n   to eyeball the documentation markups to catch mistakes.\n\n    Date: Thu, 10 Jul 2008 14:27:30 -0400\n    Subject: Re: [PATCH] tutorial: prefix the prompts with names alice or bob,\n\tto make it clear who is doing what\n    Message-ID: <dc5b80bf0807101127q63e3132fw207baf0d88db3d9d@mail.gmail.com>\n\n    Subject: [PATCH] tutorial: clarify \"pull\" is \"fetch + merge\"\n    Date: Thu, 10 Jul 2008 14:01:57 -0700\n    Message-ID: <7vskuho3lm.fsf_-_@gitster.siamese.dyndns.org>\n\n * A git-svn patch from João Abecasis; I am waiting for Eric to act on it.\n\n    Subject: [PATCH] git-svn: find-rev and rebase for SVN::Mirror repositories\n    Date: Wed, 9 Jul 2008 03:08:27 +0100\n    Message-ID: <7bf6f1d20807081908kdf9f615taa532ae579b457d7@mail.gmail.com>\n\n\nHere is the draft release notes as of tonight.\n\n----------------------------------------------------------------\n\nGIT v1.6.0 Release Notes (draft)\n================================\n\nUser visible changes\n--------------------\n\nWith the default Makefile settings, most of the programs are now\ninstalled outside your $PATH, except for \"git\", \"gitk\", \"git-gui\" and\nsome server side programs that need to be accessible for technical\nreasons.  Invoking a git subcommand as \"git-xyzzy\" from the command\nline has been deprecated since early 2006 (and officially announced in\n1.5.4 release notes); use of them from your scripts after adding\noutput from \"git --exec-path\" to the $PATH is still supported in this\nrelease, but users are again strongly encouraged to adjust their\nscripts to use \"git xyzzy\" form, as we will stop installing\n\"git-xyzzy\" hardlinks for built-in commands in later releases.\n\nSource changes needed for porting to MinGW environment are now all in the\nmain git.git codebase.\n\nBy default, packfiles created with this version uses delta-base-offset\nencoding introduced in v1.4.4.  Pack idx files are using version 2 that\nallows larger packs and added robustness thanks to its CRC checking,\nintroduced in v1.5.2.\n\nGIT_CONFIG, which was only documented as affecting \"git config\", but\nactually affected all git commands, now only affects \"git config\".\nGIT_LOCAL_CONFIG, also only documented as affecting \"git config\" and\nnot different from GIT_CONFIG in a useful way, is removed.\n\nAn ancient merge strategy \"stupid\" has been removed.\n\n\nUpdates since v1.5.6\n--------------------\n\n(subsystems)\n\n* git-p4 in contrib learned \"allowSubmit\" configuration to control on\n  which branch to allow \"submit\" subcommand.\n\n* git-gui learned to stage changes per-line.\n\n(portability)\n\n* Changes for MinGW port have been merged, thanks to Johannes Sixt and\n  gangs.\n\n* Sample hook scripts shipped in templates/ are now suffixed with\n  *.sample.  We used to prevent them from triggering by default by\n  relying on the fact that we install them as unexecutable, but on\n  some filesystems this approach does not work.  Instead of running\n  \"chmod +x\" on them, the users who want to activate these samples\n  as-is can now rename them dropping *.sample suffix.\n\n* perl's in-place edit (-i) does not work well without backup files on Windows;\n  some tests are rewritten to cope with this.\n\n(documentation)\n\n* Updated howto/update-hook-example\n\n* Got rid of usage of \"git-foo\" from the tutorial and made typography\n  more consistent.\n\n* Disambiguating \"--\" between revs and paths is finally documented.\n\n(performance, robustness, sanity etc.)\n\n* even more documentation pages are now accessible via \"man\" and \"git help\".\n\n* reduced excessive inlining to shrink size of the \"git\" binary.\n\n* verify-pack checks the object CRC when using version 2 idx files.\n\n* When an object is corrupt in a pack, the object became unusable even\n  when the same object is available in a loose form,  We now try harder to\n  fall back to these redundant objects when able.  In particular, \"git\n  repack -a -f\" can be used to fix such a corruption as long as necessary\n  objects are available.\n\n* git-clone does not create refs in loose form anymore (it behaves as\n  if you immediately ran git-pack-refs after cloning).  This will help\n  repositories with insanely large number of refs.\n\n* core.fsyncobjectfiles configuration can be used to ensure that the loose\n  objects created will be fsync'ed (this is only useful on filesystems\n  that does not order data writes properly).\n\n* \"git commit-tree\" plumbing can make Octopus with more than 16 parents.\n  \"git commit\" has been capable of this for quite some time.\n\n(usability, bells and whistles)\n\n* A new environment variable GIT_CEILING_DIRECTORIES can be used to stop\n  the discovery process of the toplevel of working tree; this may be useful\n  when you are working in a slow network disk and are outside any working tree,\n  as bash-completion and \"git help\" may still need to run in these places.\n\n* By default, stash entries never expire.  Set reflogexpire in [gc\n  \"refs/stash\"] to a reasonable value to get traditional auto-expiration\n  behaviour back\n\n* Longstanding latency issue with bash completion script has been\n  addressed.  This will need to be backmerged to 'maint' later.\n\n* pager.<cmd> configuration variable can be used to enable/disable the\n  default paging behaviour per command.\n\n* \"git-add -i\" has a new action 'e/dit' to allow you edit the patch hunk\n  manually.\n\n* git-apply can handle a patch that touches the same path more than once\n  much better than before.\n\n* git-apply can be told not to trust the line counts recorded in the input\n  patch but recount, with the new --recount option.\n\n* git-apply can be told to apply a patch to a path deeper than what the\n  patch records with --directory option.\n\n* git-archive can be told to omit certain paths from its output using\n  export-ignore attributes.\n\n* With -v option, git-branch describes the remote tracking statistics\n  similar to the way git-checkout reports by how many commits your branch\n  is ahead/behind.\n\n* git-bundle can read the revision arguments from the standard input.\n\n* git-cherry-pick can replay a root commit now.\n\n* git-clone can clone from a remote whose URL would be rewritten by\n  configuration stored in $HOME/.gitconfig now.\n\n* git-diff --check now checks leftover merge conflict markers.\n\n* When remote side used to have branch 'foo' and git-fetch finds that now\n  it has branch 'foo/bar', it refuses to lose the existing remote tracking\n  branch and its reflog.  The error message has been improved to suggest\n  pruning the remote if the user wants to proceed and get the latest set\n  of branches from the remote, including such 'foo/bar'.\n\n* fast-export learned to export and import marks file; this can be used to\n  interface with fast-import incrementally.\n\n* \"git rerere\" can be told to update the index with auto-reused resolution\n  with rerere.autoupdate configuration variable.\n\n* git-rev-list learned --children option to show child commits it\n  encountered during the traversal, instead of shoing parent commits.\n\n* git-send-mail can talk not just over SSL but over TLS now.\n\n* \"git-stash save\" learned --keep-index option.  This lets you stash away the\n  local changes and bring the changes staged in the index to your working\n  tree for examination and testing.\n\n* git-stash also learned branch subcommand to create a new branch out of\n  stashed changes.\n\n* git-status gives the remote tracking statistics similar to the way\n  git-checkout reports by how many commits your branch is ahead/behind.\n\n* You can tell \"git status -u\" to even more aggressively omit checking\n  untracked files with --untracked-files=no.\n\n* Original SHA-1 value for \"update-ref -d\" is optional now.\n\n* Error codes from gitweb are made more descriptive where possible, rather\n  than \"403 forbidden\" as we used to issue everywhere.\n\n(internal)\n\n\nFixes since v1.5.6\n------------------\n\nAll of the fixes in v1.5.6 maintenance series are included in\nthis release, unless otherwise noted.\n\n * \"git fetch\" into an empty repository used to remind the fetch will\n   be huge by saying \"no common commits\", but it is already known by\n   the user anyway (need to backport 8cb560f to 'maint').\n\n---\nexec >/var/tmp/1\nO=v1.5.6.3-315-g10ce020\necho O=$(git describe refs/heads/master)\ngit shortlog --no-merges $O..refs/heads/master ^refs/heads/maint\n"},{"id":"83234","messageId":"487B0954.6020309@viscovery.net","threadId":"12603","inReplyTo":"7vzlokhpk7.fsf@gitster.siamese.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2008-07-14T08:07:48Z","receivedAt":"2008-07-14T08:07:48Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Junio C Hamano schrieb:\n> * git-gui learned to stage changes per-line.\n\nThis has usability issues. In particular, it is impossible to stage only\nthe change \"old1\"->\"new1\" or unstage the change \"old2\"->\"new2\" of this hunk:\n\n\t@@ -1,4 +1,4 @@\n\t ctxt1\n\t-old1\n\t-old2\n\t+new1\n\t+new2\n\t ctxt2\n\nBeing able to do that was one of the goals, and I missed it :-( Since\nthat's my personal itch, I'll come up with a patch rather sooner than later.\n\n-- Hannes\n"},{"id":"83238","messageId":"1216025226.487b128a031fd@webmail.eunet.at","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807132141130.8950@racer","subject":"Re: [PATCH] Fix relative built-in paths to be relative to the command invocation","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T08:47:06Z","receivedAt":"2008-07-14T08:47:06Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Zitat von Johannes Schindelin <Johannes.Schindelin@gmx.de>:\n\n> Hi,\n>\n> On Sun, 13 Jul 2008, Johannes Sixt wrote:\n>\n> > diff --git a/Makefile b/Makefile\n> > index 4796565..2bdb9bf 100644\n> > --- a/Makefile\n> > +++ b/Makefile\n> > @@ -1301,7 +1301,7 @@ remove-dashes:\n> >  ### Installation rules\n> >\n> >  ifeq ($(firstword $(subst /, ,$(template_dir))),..)\n> > -template_instdir = $(gitexecdir)/$(template_dir)\n> > +template_instdir = $(shell cd '$(bindir_SQ)/$(template_dir_SQ)' && pwd)\n>\n> What is this for?  Did the original line stop working?\n\nHmpf! This new line doesn't work in the intended way if the installation\ndestination does not exist. I'll have to find a better solution...\n\n-- Hannes\n"},{"id":"83239","messageId":"m363r8u9xk.fsf@localhost.localdomain","threadId":"12603","inReplyTo":"7vzlokhpk7.fsf@gitster.siamese.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-07-14T08:50:05Z","receivedAt":"2008-07-14T08:50:05Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n\n> GIT v1.6.0 Release Notes (draft)\n> ================================\n\n> * By default, stash entries never expire.  Set reflogexpire in [gc\n>   \"refs/stash\"] to a reasonable value to get traditional auto-expiration\n>   behaviour back\n\nAnd, of course, one can set up reflog expiration per ref or per \nref type (for example never expiring stash, making expiration for\nHEAD longer than default, and for remote-tracking branches shorter).\n \n\n> * git-stash also learned branch subcommand to create a new branch out of\n>   stashed changes.\n\nTypography: wouldn't it be better to use \"learned 'branch' subcommand\"?\n \n-- \nJakub Narebski\nPoland\nShadeHawk on #git\n"},{"id":"83240","messageId":"20080714085555.GJ32184@machine.or.cz","threadId":"12603","inReplyTo":"7vzlokhpk7.fsf@gitster.siamese.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-07-14T08:55:55Z","receivedAt":"2008-07-14T08:55:55Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"On Mon, Jul 14, 2008 at 12:50:48AM -0700, Junio C Hamano wrote:\n> By default, packfiles created with this version uses delta-base-offset\n> encoding introduced in v1.4.4.  Pack idx files are using version 2 that\n> allows larger packs and added robustness thanks to its CRC checking,\n> introduced in v1.5.2.\n\nOh, I thought this was some earlier change when I noticed it few days\nago on repo.or.cz, but seems there is still a chance to turn this over -\nplease reconsider...? :-)\n\nCan't we by default use the version 2 only in case we actually _need_ to\nstore the larger packs? The CRC checking may be nice, but not critical,\nand we could wait a bit more with it yet.\n\nI'm saying this because I believe the best conservative upper bound for\nbackwards compatibility is Git version in Debian stable. It gets\nprobably the most stale from all the widely used software distributions\nusing Git, and it *is* quite widely used. Etch carries v1.4.4.4, which\nfails miserably on the new packs:\n\nGetting alternates list for http://repo.or.cz/r/repo.git/\nGetting pack list for http://repo.or.cz/r/repo.git/\nGetting index for pack 5111285cac0f895cd9367c9939ced68e2c43dcc0\nerror: non-monotonic index\n/usr/bin/git-fetch: line 297: 30402 Segmentation fault git-http-fetch -v -a \"$head\" \"$remote/\"\n\nP.S.: AFAIK new Debian stable release is scheduled on Fall.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nGNU, n. An animal of South Africa, which in its domesticated state\nresembles a horse, a buffalo and a stag. In its wild condition it is\nsomething like a thunderbolt, an earthquake and a cyclone. -- A. Pierce\n"},{"id":"83250","messageId":"alpine.DEB.1.00.0807141249580.8950@racer","threadId":"12603","inReplyTo":"7vtzetjbif.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-14T11:53:21Z","receivedAt":"2008-07-14T11:53:21Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 13 Jul 2008, Junio C Hamano wrote:\n\n> * js/more-win (Sun Jul 13 22:31:23 2008 +0200) 6 commits\n>  - Allow add_path() to add non-existent directories to the path\n>  - Allow the built-in exec path to be relative to the command\n>    invocation path\n>  - Fix relative built-in paths to be relative to the command\n>    invocation\n>  + help (Windows): Display HTML in default browser using Windows'\n>    shell API\n>  + help.c: Add support for htmldir relative to git_exec_path()\n>  + Move code interpreting path relative to exec-dir to new function\n>    system_path()\n> \n> The earlier parts are obvious; Dscho seemed to have some comments on the\n> later ones that are in 'pu'.\n\nJust one, and it seems that the next patch patched that ;-)  Not really a \nshowstopper.\n\n> * mv/merge-in-c (Sun Jul 13 08:13:55 2008 +0000) 19 commits\n>  + reduce_heads(): thinkofix\n\nHmm.  My earlier response to Sverre was based on an old \"next\", it seems.\n\nCiao,\nDscho\n"},{"id":"83253","messageId":"alpine.DEB.1.00.0807141256310.8950@racer","threadId":"12603","inReplyTo":"20080714085555.GJ32184@machine.or.cz","subject":"Re: Closing the merge window for 1.6.0","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-14T11:57:56Z","receivedAt":"2008-07-14T11:57:56Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 14 Jul 2008, Petr Baudis wrote:\n\n> I'm saying this because I believe the best conservative upper bound for \n> backwards compatibility is Git version in Debian stable. It gets \n> probably the most stale from all the widely used software distributions \n> using Git, and it *is* quite widely used. Etch carries v1.4.4.4, which \n> fails miserably on the new packs.\n\nCan't we just hit Debian's Git maintainer with a clue bat or a bus, \nwhichever is easier, and force them to upgrade _in_ Etch?  It's not like \nwe haven't had _several_ stable releases in-between.\n\nCiao,\nDscho\n"},{"id":"83258","messageId":"alpine.DEB.1.00.0807141319420.8950@racer","threadId":"12603","inReplyTo":"1216018557.487af87d7bd28@webmail.eunet.at","subject":"Re: [PATCH] Fix relative built-in paths to be relative to the command invocation","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-14T12:20:39Z","receivedAt":"2008-07-14T12:20:39Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 14 Jul 2008, Johannes Sixt wrote:\n\n> Zitat von Johannes Schindelin <Johannes.Schindelin@gmx.de>:\n> \n> > On Sun, 13 Jul 2008, Johannes Sixt wrote:\n> >\n> > > @@ -84,7 +90,7 @@ static void add_path(struct strbuf *out, const char\n> > > *path)\n> > >  \t}\n> > >  }\n> > >\n> > > -void setup_path(const char *cmd_path)\n> > > +void setup_path(void)\n> >\n> > It seems to me that this patch would not do anything different, but \n> > with less code change, if setup_path() would set argv0_path, and not a \n> > new function was introduced.\n> \n> This is just to play a safe game. I had it that way, but I decided to have\n> the call to the new git_set_argv0_path() early in git.c because the call\n> to setup_path() in git.c is very late, and it could happen that we call\n> system_path() (which needs argv0_path) before that. Although I didn't audit\n> the code whether this really happens.\n\nWell, okay... I would have rather seen it not change (since there was no \nbug to fix), or as a separate patch, but it's Junio's call.\n\nCiao,\nDscho\n"},{"id":"83261","messageId":"20080714124109.25414.qmail@06d015ec9c6744.315fe32.mid.smarden.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807141256310.8950@racer","subject":"Re: Closing the merge window for 1.6.0","fromName":"Gerrit Pape","fromEmail":"pape@smarden.org","sentAt":"2008-07-14T12:41:09Z","receivedAt":"2008-07-14T12:41:09Z","isPatch":false,"sender":{"key":"pape@smarden.org","avatar":"https://avatars.githubusercontent.com/u/143170252?v=4"},"body":"On Mon, Jul 14, 2008 at 12:57:56PM +0100, Johannes Schindelin wrote:\n> On Mon, 14 Jul 2008, Petr Baudis wrote:\n> > I'm saying this because I believe the best conservative upper bound for \n> > backwards compatibility is Git version in Debian stable. It gets \n> > probably the most stale from all the widely used software distributions \n> > using Git, and it *is* quite widely used. Etch carries v1.4.4.4, which \n> > fails miserably on the new packs.\n> \n> Can't we just hit Debian's Git maintainer with a clue bat or a bus, \n\nPlease don't.  It wouldn't help, rather the opposite I think, espacially\nthe bus.  We don't introduce new upstream versions into a Debian stable\nrelease, there's a great effort done for each stable release to reach\nhigh quality integration of all the software packages available in\nDebian.  Once that status is reached, only security fixes and criticial\nusability fixes are added.\n\nThe freeze of the packages for the next stable release is planned a few\ndays from now, so it looks like Debian 'lenny' will include git 1.5.6.x.\n\nRegards, Gerrit.\n"},{"id":"83262","messageId":"20080714124327.GL10151@machine.or.cz","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807141256310.8950@racer","subject":"Re: Closing the merge window for 1.6.0","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-07-14T12:43:27Z","receivedAt":"2008-07-14T12:43:27Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"  Hi,\n\nOn Mon, Jul 14, 2008 at 12:57:56PM +0100, Johannes Schindelin wrote:\n> On Mon, 14 Jul 2008, Petr Baudis wrote:\n> \n> > I'm saying this because I believe the best conservative upper bound for \n> > backwards compatibility is Git version in Debian stable. It gets \n> > probably the most stale from all the widely used software distributions \n> > using Git, and it *is* quite widely used. Etch carries v1.4.4.4, which \n> > fails miserably on the new packs.\n> \n> Can't we just hit Debian's Git maintainer with a clue bat or a bus, \n> whichever is easier, and force them to upgrade _in_ Etch?  It's not like \n> we haven't had _several_ stable releases in-between.\n\n  the whole point of having a stable distribution is that random version\nupgrades don't happen under your hands; sure, 1.4.4.4 can have plenty of\nbugs, but it's buggy in a well-defined way, which is better than upgrade\nto newer stable version, which may be less buggy, but in a different\nway; also, by upgrading to newer version you might find various subtle\ncompatibility issues, etc.\n\n  Upgrading to newer version, *especially* if it's over then 1.4 - 1.5\nboundary, is not something you could seriously expect Debian to do.\nAt least I actually _hope_ so, as a sysadmin of a network of 40 etch\nworkstations.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nGNU, n. An animal of South Africa, which in its domesticated state\nresembles a horse, a buffalo and a stag. In its wild condition it is\nsomething like a thunderbolt, an earthquake and a cyclone. -- A. Pierce\n"},{"id":"83264","messageId":"alpine.DEB.1.00.0807141354310.8950@racer","threadId":"12603","inReplyTo":"20080714124109.25414.qmail@06d015ec9c6744.315fe32.mid.smarden.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-14T12:56:19Z","receivedAt":"2008-07-14T12:56:19Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 14 Jul 2008, Gerrit Pape wrote:\n\n> On Mon, Jul 14, 2008 at 12:57:56PM +0100, Johannes Schindelin wrote:\n> > On Mon, 14 Jul 2008, Petr Baudis wrote:\n> > > I'm saying this because I believe the best conservative upper bound for \n> > > backwards compatibility is Git version in Debian stable. It gets \n> > > probably the most stale from all the widely used software distributions \n> > > using Git, and it *is* quite widely used. Etch carries v1.4.4.4, which \n> > > fails miserably on the new packs.\n> > \n> > Can't we just hit Debian's Git maintainer with a clue bat or a bus, \n> \n> Please don't.  It wouldn't help, rather the opposite I think, espacially\n> the bus.\n\nHeh.  It was a feeble attempt at humor production ;-)\n\n> We don't introduce new upstream versions into a Debian stable release, \n> there's a great effort done for each stable release to reach high \n> quality integration of all the software packages available in Debian.  \n> Once that status is reached, only security fixes and criticial usability \n> fixes are added.\n\nIf that is the case, we might need to think about fixing that segmentation \nfault to 1.4.4.5...  Which would be a minor pain in the donkey, I guess.\n\n> The freeze of the packages for the next stable release is planned a few \n> days from now, so it looks like Debian 'lenny' will include git 1.5.6.x.\n\n>From my memories of IRC, it seems that quite a few people do not even \nconsider upgrading.\n\nCiao,\nDscho\n"},{"id":"83278","messageId":"alpine.LFD.1.10.0807141351540.12484@xanadu.home","threadId":"12603","inReplyTo":"20080714124109.25414.qmail@06d015ec9c6744.315fe32.mid.smarden.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Nicolas Pitre","fromEmail":"nico@cam.org","sentAt":"2008-07-14T17:54:34Z","receivedAt":"2008-07-14T17:54:34Z","isPatch":false,"sender":{"key":"nico@fluxnic.net","avatar":"https://avatars.githubusercontent.com/u/702790?v=4"},"body":"On Mon, 14 Jul 2008, Gerrit Pape wrote:\n\n> On Mon, Jul 14, 2008 at 12:57:56PM +0100, Johannes Schindelin wrote:\n> > On Mon, 14 Jul 2008, Petr Baudis wrote:\n> > > I'm saying this because I believe the best conservative upper bound for \n> > > backwards compatibility is Git version in Debian stable. It gets \n> > > probably the most stale from all the widely used software distributions \n> > > using Git, and it *is* quite widely used. Etch carries v1.4.4.4, which \n> > > fails miserably on the new packs.\n> > \n> > Can't we just hit Debian's Git maintainer with a clue bat or a bus, \n> \n> Please don't.  It wouldn't help, rather the opposite I think, espacially\n> the bus.  We don't introduce new upstream versions into a Debian stable\n> release, there's a great effort done for each stable release to reach\n> high quality integration of all the software packages available in\n> Debian.  Once that status is reached, only security fixes and criticial\n> usability fixes are added.\n\nPlease consider it as a critical usability problem.\n\nMaybe we can release 1.4.5 with the ability to read index v2?  That \nwouldn't be hard to backport the reading part of it.\n\n\nNicolas\n"},{"id":"83285","messageId":"200807142054.35027.johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807141319420.8950@racer","subject":"Re: [PATCH] Fix relative built-in paths to be relative to the command invocation","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T18:54:34Z","receivedAt":"2008-07-14T18:54:34Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"On Montag, 14. Juli 2008, Johannes Schindelin wrote:\n> Hi,\n>\n> On Mon, 14 Jul 2008, Johannes Sixt wrote:\n> > Zitat von Johannes Schindelin <Johannes.Schindelin@gmx.de>:\n> > > On Sun, 13 Jul 2008, Johannes Sixt wrote:\n> > > > @@ -84,7 +90,7 @@ static void add_path(struct strbuf *out, const char\n> > > > *path)\n> > > >  \t}\n> > > >  }\n> > > >\n> > > > -void setup_path(const char *cmd_path)\n> > > > +void setup_path(void)\n> > >\n> > > It seems to me that this patch would not do anything different, but\n> > > with less code change, if setup_path() would set argv0_path, and not a\n> > > new function was introduced.\n> >\n> > This is just to play a safe game. I had it that way, but I decided to\n> > have the call to the new git_set_argv0_path() early in git.c because the\n> > call to setup_path() in git.c is very late, and it could happen that we\n> > call system_path() (which needs argv0_path) before that. Although I\n> > didn't audit the code whether this really happens.\n>\n> Well, okay... I would have rather seen it not change (since there was no\n> bug to fix), or as a separate patch, but it's Junio's call.\n\nI investigated this, and, yes, there indeed are calls to system_path() before \nsetup_path(), for example:\n\n commit_pager_choice\n   setup_pager\n     git_config\n       git_etc_gitconfig\n         system_path(ETC_GITCONFIG)\n\nJunio, do you want git_set_argv0_path() in a separate patch?\n\n-- Hannes\n"},{"id":"83286","messageId":"7v3amcgujd.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.LFD.1.10.0807141351540.12484@xanadu.home","subject":"Re: Closing the merge window for 1.6.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-14T19:00:54Z","receivedAt":"2008-07-14T19:00:54Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Nicolas Pitre <nico@cam.org> writes:\n\n> On Mon, 14 Jul 2008, Gerrit Pape wrote:\n>\n>> On Mon, Jul 14, 2008 at 12:57:56PM +0100, Johannes Schindelin wrote:\n>> > On Mon, 14 Jul 2008, Petr Baudis wrote:\n>> > > I'm saying this because I believe the best conservative upper bound for \n>> > > backwards compatibility is Git version in Debian stable. It gets \n>> > > probably the most stale from all the widely used software distributions \n>> > > using Git, and it *is* quite widely used. Etch carries v1.4.4.4, which \n>> > > fails miserably on the new packs.\n>> > \n>> > Can't we just hit Debian's Git maintainer with a clue bat or a bus, \n>> \n>> Please don't.  It wouldn't help, rather the opposite I think, espacially\n>> the bus.  We don't introduce new upstream versions into a Debian stable\n>> release, there's a great effort done for each stable release to reach\n>> high quality integration of all the software packages available in\n>> Debian.  Once that status is reached, only security fixes and criticial\n>> usability fixes are added.\n>\n> Please consider it as a critical usability problem.\n>\n> Maybe we can release 1.4.5 with the ability to read index v2?  That \n> wouldn't be hard to backport the reading part of it.\n\nI am of two minds here.\n\nOn one hand, I am sympathetic to distros that want to give long time\nsupport for ancient versions to keep working in an ever-changing new\nworld.  It is a wonderful thing that there are distros that aim for ultra\nconservative stability, and I applaud them.\n\nBut as the upstream, we have our own deprecation schedule.  We should of\ncourse plan carefully not to harm existing users of our releases, but\nfrankly speaking, 18 months since 1.4.4.4 was tagged (early January 2007)\nis an eternity in git timescale.  Maybe we will slow down someday, and\nthis 18-month is not a set-in-stone rule in any way, but at this point\neven without the packfile format issues, I personally think anything\nbefore 1.5.0 is irrelevant --- maybe they are interesting as historical\ncuriosities, but not more than that.\n\nWe could:\n\n\t$ git checkout -b maint-1.4 v1.4.4.4\n        $ git merge maint\n        $ git tag v1.4.4.5\n\nand push the result out.  While I would imagine that the end-user\nexperience after such a maintenance release would be very positive, that\nis not something distros who really want to stay with a stale version for\na good reason would want to swallow ;-).\n\nIf we _were_ to keep v1.4.4.X series alive, serious backporting efforts\nwill be necessary.  For example, recent 'git-shell' futureproofing was\nmade not just to 1.5.6.X series but was backported to 1.5.4.X and 1.5.5.X,\nand we would probably need to give it to 1.4.4.X as well.  What other\nthings are there that are missing in 1.4.4.X?  It would take nontrivial\nengineering resource to even list them, let alone assessing how much\neffort is required for such backporting and actually doing it.\n\nThe remotes/ layout, use of \"git-add\" for new contents (instead of only\nnew files), reflogs, detached HEAD, --pretty=format:%<blah>, bundles,\nmergetool,...  all the things that a modern git workflow revolves around\nand are described in the user manuals the users find on the net are not\nfound in 1.4.4.X series.  If a user of such a conservative distro needs to\nwork with a repository prepared on another platform with newer git,\nperhaps crossmounted, should we backport \"git branch -r\" so that the user\ncan confortably work with remote tracking branches?  Should we backport\nreflogs?\n\nIf a distro chooses to support its users whom they force to pin at 1.4.4.X\nseries, it's primarily _their_ choice.  I do not mind helping them in such\na backport, but the request has to come from the distro first with a\nspecific list of items that need to be supported.\n"},{"id":"83287","messageId":"7vy744ffuo.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"200807142054.35027.johannes.sixt@telecom.at","subject":"Re: [PATCH] Fix relative built-in paths to be relative to the command invocation","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-14T19:03:27Z","receivedAt":"2008-07-14T19:03:27Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Sixt <johannes.sixt@telecom.at> writes:\n\n> On Montag, 14. Juli 2008, Johannes Schindelin wrote:\n>> Hi,\n>>\n>> On Mon, 14 Jul 2008, Johannes Sixt wrote:\n>> > Zitat von Johannes Schindelin <Johannes.Schindelin@gmx.de>:\n>> > > On Sun, 13 Jul 2008, Johannes Sixt wrote:\n>> > > > @@ -84,7 +90,7 @@ static void add_path(struct strbuf *out, const char\n>> > > > *path)\n>> > > >  \t}\n>> > > >  }\n>> > > >\n>> > > > -void setup_path(const char *cmd_path)\n>> > > > +void setup_path(void)\n>> > >\n>> > > It seems to me that this patch would not do anything different, but\n>> > > with less code change, if setup_path() would set argv0_path, and not a\n>> > > new function was introduced.\n>> >\n>> > This is just to play a safe game. I had it that way, but I decided to\n>> > have the call to the new git_set_argv0_path() early in git.c because the\n>> > call to setup_path() in git.c is very late, and it could happen that we\n>> > call system_path() (which needs argv0_path) before that. Although I\n>> > didn't audit the code whether this really happens.\n>>\n>> Well, okay... I would have rather seen it not change (since there was no\n>> bug to fix), or as a separate patch, but it's Junio's call.\n>\n> I investigated this, and, yes, there indeed are calls to system_path() before \n> setup_path(), for example:\n>\n>  commit_pager_choice\n>    setup_pager\n>      git_config\n>        git_etc_gitconfig\n>          system_path(ETC_GITCONFIG)\n>\n> Junio, do you want git_set_argv0_path() in a separate patch?\n\nI think that would be easier to explain in the commit log what is going\non, if it is a separate patch.\n"},{"id":"83288","messageId":"7vtzesff91.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080714085555.GJ32184@machine.or.cz","subject":"Re: Closing the merge window for 1.6.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-14T19:16:26Z","receivedAt":"2008-07-14T19:16:26Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n> Getting alternates list for http://repo.or.cz/r/repo.git/\n> Getting pack list for http://repo.or.cz/r/repo.git/\n> Getting index for pack 5111285cac0f895cd9367c9939ced68e2c43dcc0\n> error: non-monotonic index\n> /usr/bin/git-fetch: line 297: 30402 Segmentation fault git-http-fetch -v -a \"$head\" \"$remote/\"\n\nYeah, I think git-repack, git-gc, git-pack-objects and git-index-pack on\nthe server side need a knob to tell it to stay conservative because the\nrepository may be served over dumb protocols to avoid this problem.\n\nThat knob could even be called\n\n\t[repack]\n        \tusedeltabaseoffset = false\n\t[pack]\n        \tindexversion = 1\n"},{"id":"83289","messageId":"20080714191903.GB5788@mithlond.arda.local","threadId":"12603","inReplyTo":"7v3amcgujd.fsf@gitster.siamese.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Teemu Likonen","fromEmail":"tlikonen@iki.fi","sentAt":"2008-07-14T19:19:03Z","receivedAt":"2008-07-14T19:19:03Z","isPatch":false,"sender":{"key":"tlikonen@iki.fi","avatar":null},"body":"Junio C Hamano wrote (2008-07-14 12:00 -0700):\n\n> Nicolas Pitre <nico@cam.org> writes:\n> \n> > On Mon, 14 Jul 2008, Gerrit Pape wrote:\n\n> >> > On Mon, 14 Jul 2008, Petr Baudis wrote:\n> >> > > I'm saying this because I believe the best conservative upper\n> >> > > bound for backwards compatibility is Git version in Debian\n> >> > > stable. It gets \n\n> > Please consider it as a critical usability problem.\n> >\n> > Maybe we can release 1.4.5 with the ability to read index v2?  That\n> > wouldn't be hard to backport the reading part of it.\n\n> I am of two minds here.\n> \n> On one hand, I am sympathetic to distros that want to give long time\n> support for ancient versions to keep working in an ever-changing new\n> world.  It is a wonderful thing that there are distros that aim for\n> ultra conservative stability, and I applaud them.\n> \n> But as the upstream, we have our own deprecation schedule.\n\nAs Debian stable (4.0 \"Etch\") and its git 1.4.4.4 was mentioned I'd like\nto point out that git 1.5.6 is available for Etch users from\nkind-of-semi-official <www.backports.org>. So I guess Debian stable\nusers aren't left completely behind. Git's web page already advertises\nbackports.org version for Etch.\n"},{"id":"83306","messageId":"1216071689-14823-1-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1216025226.487b128a031fd@webmail.eunet.at","subject":"[PATCH 0/5] replacement for the part of js/more-win that is in pu","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T21:41:24Z","receivedAt":"2008-07-14T21:41:24Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"The interdiff to js/more-win is below. It is mostly the changes\nof 1/5.\n\nJohannes Sixt (5):\n      Makefile: Normalize $(bindir) and $(gitexecdir) before comparing\n      Record the command invocation path early\n      Fix relative built-in paths to be relative to the command\n         invocation\n      Allow the built-in exec path to be relative to the command\n         invocation path\n      Allow add_path() to add non-existent directories to the path\n\n\n Makefile       |   33 +++++++++++++++++-----------\n abspath.c      |   36 ++++++++++++++++++++++++++++++\n exec_cmd.c     |   54 +++++++++++----------------------------------\n exec_cmd.h     |    3 +-\n git.c          |    5 +--\n path.c         |   36 ------------------------------\n receive-pack.c |    2 +-\n shell.c        |    4 +-\n upload-pack.c  |    2 +-\n 9 files changed, 77 insertions(+), 98 deletions(-)\n\n\ndiff --git a/Makefile b/Makefile\nindex 3593e6f..4df6423 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1301,14 +1301,14 @@ remove-dashes:\n ### Installation rules\n \n ifeq ($(firstword $(subst /, ,$(template_dir))),..)\n-template_instdir = $(shell cd '$(bindir_SQ)/$(template_dir_SQ)' && pwd)\n+template_instdir = $(bindir)/$(template_dir)\n else\n template_instdir = $(template_dir)\n endif\n export template_instdir\n \n ifeq ($(firstword $(subst /, ,$(gitexecdir))),..)\n-gitexec_instdir = $(shell cd '$(bindir_SQ)/$(gitexecdir_SQ)' && pwd)\n+gitexec_instdir = $(bindir)/$(gitexecdir)\n else\n gitexec_instdir = $(gitexecdir)\n endif\n@@ -1325,18 +1325,18 @@ ifndef NO_TCLTK\n \t$(MAKE) -C gitk-git install\n \t$(MAKE) -C git-gui install\n endif\n-\tif test 'z$(bindir_SQ)' != 'z$(gitexec_instdir_SQ)'; \\\n-\tthen \\\n-\t\tln -f '$(DESTDIR_SQ)$(bindir_SQ)/git$X' \\\n-\t\t\t'$(DESTDIR_SQ)$(gitexec_instdir_SQ)/git$X' || \\\n-\t\tcp '$(DESTDIR_SQ)$(bindir_SQ)/git$X' \\\n-\t\t\t'$(DESTDIR_SQ)$(gitexec_instdir_SQ)/git$X'; \\\n-\tfi\n-\t$(foreach p,$(BUILT_INS), $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p' ;)\n ifneq (,$X)\n \t$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p';)\n endif\n-\t./check_bindir 'z$(bindir_SQ)' 'z$(gitexec_instdir_SQ)' '$(DESTDIR_SQ)$(bindir_SQ)/git-shell$X'\n+\tbindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \\\n+\texecdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \\\n+\tif test \"z$$bindir\" != \"z$$execdir\"; \\\n+\tthen \\\n+\t\tln -f \"$$bindir/git$X\" \"$$execdir/git$X\" || \\\n+\t\tcp \"$$bindir/git$X\" \"$$execdir/git$X\"; \\\n+\tfi && \\\n+\t{ $(foreach p,$(BUILT_INS), $(RM) \"$$execdir/$p\" && ln \"$$execdir/git$X\" \"$$execdir/$p\" ;) } && \\\n+\t./check_bindir \"z$$bindir\" \"z$$execdir\" \"$$bindir/git-shell$X\"\n \n install-doc:\n \t$(MAKE) -C Documentation install\n"},{"id":"83304","messageId":"1216071689-14823-2-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1216071689-14823-1-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH 1/5] Makefile: Normalize $(bindir) and $(gitexecdir) before comparing","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T21:41:25Z","receivedAt":"2008-07-14T21:41:25Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"The install target needs to check whether the user has opted to make\n$(gitexecdir) equal to $(bindir). It did so by a straight string\ncomparison. Since we are going to allow a relative $(gitexecdir), we have\nto normalize paths before comparison, which we do with $(cd there && pwd).\n\nThe normalized paths are stored in shell variables. These we can now\nreuse in the subsequent install statements, which conveniently shortens\nthe lines a bit.\n\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n Makefile |   18 +++++++++---------\n 1 files changed, 9 insertions(+), 9 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 4796565..4de9271 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1318,18 +1318,18 @@ ifndef NO_TCLTK\n \t$(MAKE) -C gitk-git install\n \t$(MAKE) -C git-gui install\n endif\n-\tif test 'z$(bindir_SQ)' != 'z$(gitexecdir_SQ)'; \\\n-\tthen \\\n-\t\tln -f '$(DESTDIR_SQ)$(bindir_SQ)/git$X' \\\n-\t\t\t'$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' || \\\n-\t\tcp '$(DESTDIR_SQ)$(bindir_SQ)/git$X' \\\n-\t\t\t'$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X'; \\\n-\tfi\n-\t$(foreach p,$(BUILT_INS), $(RM) '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;)\n ifneq (,$X)\n \t$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), $(RM) '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p';)\n endif\n-\t./check_bindir 'z$(bindir_SQ)' 'z$(gitexecdir_SQ)' '$(DESTDIR_SQ)$(bindir_SQ)/git-shell$X'\n+\tbindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \\\n+\texecdir=$$(cd '$(DESTDIR_SQ)$(gitexecdir_SQ)' && pwd) && \\\n+\tif test \"z$$bindir\" != \"z$$execdir\"; \\\n+\tthen \\\n+\t\tln -f \"$$bindir/git$X\" \"$$execdir/git$X\" || \\\n+\t\tcp \"$$bindir/git$X\" \"$$execdir/git$X\"; \\\n+\tfi && \\\n+\t{ $(foreach p,$(BUILT_INS), $(RM) \"$$execdir/$p\" && ln \"$$execdir/git$X\" \"$$execdir/$p\" ;) } && \\\n+\t./check_bindir \"z$$bindir\" \"z$$execdir\" \"$$bindir/git-shell$X\"\n \n install-doc:\n \t$(MAKE) -C Documentation install\n-- \n1.5.6.3.323.g1e58\n"},{"id":"83305","messageId":"1216071689-14823-3-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1216071689-14823-2-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH 2/5] Record the command invocation path early","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T21:41:26Z","receivedAt":"2008-07-14T21:41:26Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"We will need the command invocation path in system_path(). This path was\npassed to setup_path(), but  system_path() can be called earlier, for\nexample via:\n\n    main\n      commit_pager_choice\n        setup_pager\n          git_config\n            git_etc_gitconfig\n              system_path\n\nTherefore, we introduce git_set_argv0_path() and call it as soon as\npossible.\n\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n exec_cmd.c     |   10 ++++++++--\n exec_cmd.h     |    3 ++-\n git.c          |    5 ++---\n receive-pack.c |    2 +-\n shell.c        |    4 ++--\n upload-pack.c  |    2 +-\n 6 files changed, 16 insertions(+), 10 deletions(-)\n\ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex 8899e31..dedb01d 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -5,6 +5,7 @@\n \n extern char **environ;\n static const char *argv_exec_path;\n+static const char *argv0_path;\n \n static const char *builtin_exec_path(void)\n {\n@@ -50,6 +51,11 @@ const char *system_path(const char *path)\n \treturn path;\n }\n \n+void git_set_argv0_path(const char *path)\n+{\n+\targv0_path = path;\n+}\n+\n void git_set_argv_exec_path(const char *exec_path)\n {\n \targv_exec_path = exec_path;\n@@ -84,7 +90,7 @@ static void add_path(struct strbuf *out, const char *path)\n \t}\n }\n \n-void setup_path(const char *cmd_path)\n+void setup_path(void)\n {\n \tconst char *old_path = getenv(\"PATH\");\n \tstruct strbuf new_path;\n@@ -94,7 +100,7 @@ void setup_path(const char *cmd_path)\n \tadd_path(&new_path, argv_exec_path);\n \tadd_path(&new_path, getenv(EXEC_PATH_ENVIRONMENT));\n \tadd_path(&new_path, builtin_exec_path());\n-\tadd_path(&new_path, cmd_path);\n+\tadd_path(&new_path, argv0_path);\n \n \tif (old_path)\n \t\tstrbuf_addstr(&new_path, old_path);\ndiff --git a/exec_cmd.h b/exec_cmd.h\nindex 7eb94e5..0c46cd5 100644\n--- a/exec_cmd.h\n+++ b/exec_cmd.h\n@@ -2,8 +2,9 @@\n #define GIT_EXEC_CMD_H\n \n extern void git_set_argv_exec_path(const char *exec_path);\n+extern void git_set_argv0_path(const char *path);\n extern const char* git_exec_path(void);\n-extern void setup_path(const char *);\n+extern void setup_path(void);\n extern int execv_git_cmd(const char **argv); /* NULL terminated */\n extern int execl_git_cmd(const char *cmd, ...);\n extern const char *system_path(const char *path);\ndiff --git a/git.c b/git.c\nindex 7075533..b90c358 100644\n--- a/git.c\n+++ b/git.c\n@@ -470,7 +470,6 @@ int main(int argc, const char **argv)\n {\n \tconst char *cmd = argv[0] && *argv[0] ? argv[0] : \"git-help\";\n \tchar *slash = (char *)cmd + strlen(cmd);\n-\tconst char *cmd_path = NULL;\n \tint done_alias = 0;\n \n \t/*\n@@ -483,7 +482,7 @@ int main(int argc, const char **argv)\n \twhile (cmd <= slash && !is_dir_sep(*slash));\n \tif (cmd <= slash) {\n \t\t*slash++ = 0;\n-\t\tcmd_path = cmd;\n+\t\tgit_set_argv0_path(cmd);\n \t\tcmd = slash;\n \t}\n \n@@ -527,7 +526,7 @@ int main(int argc, const char **argv)\n \t * environment, and the $(gitexecdir) from the Makefile at build\n \t * time.\n \t */\n-\tsetup_path(cmd_path);\n+\tsetup_path();\n \n \twhile (1) {\n \t\t/* See if it's an internal command */\ndiff --git a/receive-pack.c b/receive-pack.c\nindex fa653b4..d44c19e 100644\n--- a/receive-pack.c\n+++ b/receive-pack.c\n@@ -482,7 +482,7 @@ int main(int argc, char **argv)\n \tif (!dir)\n \t\tusage(receive_pack_usage);\n \n-\tsetup_path(NULL);\n+\tsetup_path();\n \n \tif (!enter_repo(dir, 0))\n \t\tdie(\"'%s': unable to chdir or not a git archive\", dir);\ndiff --git a/shell.c b/shell.c\nindex 91ca7de..6a48de0 100644\n--- a/shell.c\n+++ b/shell.c\n@@ -15,7 +15,7 @@ static int do_generic_cmd(const char *me, char *arg)\n {\n \tconst char *my_argv[4];\n \n-\tsetup_path(NULL);\n+\tsetup_path();\n \tif (!arg || !(arg = sq_dequote(arg)))\n \t\tdie(\"bad argument\");\n \tif (prefixcmp(me, \"git-\"))\n@@ -37,7 +37,7 @@ static int do_cvs_cmd(const char *me, char *arg)\n \tif (!arg || strcmp(arg, \"server\"))\n \t\tdie(\"git-cvsserver only handles server: %s\", arg);\n \n-\tsetup_path(NULL);\n+\tsetup_path();\n \treturn execv_git_cmd(cvsserver_argv);\n }\n \ndiff --git a/upload-pack.c b/upload-pack.c\nindex 9f82941..c911e70 100644\n--- a/upload-pack.c\n+++ b/upload-pack.c\n@@ -638,7 +638,7 @@ int main(int argc, char **argv)\n \tif (i != argc-1)\n \t\tusage(upload_pack_usage);\n \n-\tsetup_path(NULL);\n+\tsetup_path();\n \n \tdir = argv[i];\n \n-- \n1.5.6.3.323.g1e58\n"},{"id":"83303","messageId":"1216071689-14823-4-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1216071689-14823-3-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH 3/5] Fix relative built-in paths to be relative to the command invocation","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T21:41:27Z","receivedAt":"2008-07-14T21:41:27Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"$(gitexecdir) (as defined in the Makefile) has gained another path\ncomponent, but the relative paths in the MINGW section of the Makefile,\nwhich are interpreted relative to it, do not account for it.\n\nInstead of adding another ../ in front of the path, we change the code that\nconstructs the absolute paths to do it relative to the command's directory,\nwhich is essentially $(bindir). We do it this way because we will also\nallow a relative $(gitexecdir) later.\n\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n Makefile   |    2 +-\n exec_cmd.c |    4 ++--\n 2 files changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex 4de9271..b9ea0ea 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1301,7 +1301,7 @@ remove-dashes:\n ### Installation rules\n \n ifeq ($(firstword $(subst /, ,$(template_dir))),..)\n-template_instdir = $(gitexecdir)/$(template_dir)\n+template_instdir = $(bindir)/$(template_dir)\n else\n template_instdir = $(template_dir)\n endif\ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex dedb01d..45f92eb 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -43,9 +43,9 @@ static const char *builtin_exec_path(void)\n \n const char *system_path(const char *path)\n {\n-\tif (!is_absolute_path(path)) {\n+\tif (!is_absolute_path(path) && argv0_path) {\n \t\tstruct strbuf d = STRBUF_INIT;\n-\t\tstrbuf_addf(&d, \"%s/%s\", git_exec_path(), path);\n+\t\tstrbuf_addf(&d, \"%s/%s\", argv0_path, path);\n \t\tpath = strbuf_detach(&d, NULL);\n \t}\n \treturn path;\n-- \n1.5.6.3.323.g1e58\n"},{"id":"83307","messageId":"1216071689-14823-5-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1216071689-14823-4-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH 4/5] Allow the built-in exec path to be relative to the command invocation path","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T21:41:28Z","receivedAt":"2008-07-14T21:41:28Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"If GIT_EXEC_PATH (the macro that is defined in the Makefile) is relative,\nit is interpreted relative to the command's invocation path, which usually\nis $(bindir).\n\nThe Makefile rules were written with the assumption that $(gitexecdir) is\nan absolute path. We introduce a separate variable that names the\n(absolute) installation directory.\n\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n Makefile   |   15 +++++++++++----\n exec_cmd.c |   38 ++------------------------------------\n 2 files changed, 13 insertions(+), 40 deletions(-)\n\ndiff --git a/Makefile b/Makefile\nindex b9ea0ea..4df6423 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1307,10 +1307,17 @@ template_instdir = $(template_dir)\n endif\n export template_instdir\n \n+ifeq ($(firstword $(subst /, ,$(gitexecdir))),..)\n+gitexec_instdir = $(bindir)/$(gitexecdir)\n+else\n+gitexec_instdir = $(gitexecdir)\n+endif\n+gitexec_instdir_SQ = $(subst ','\\'',$(gitexec_instdir))\n+\n install: all\n \t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'\n-\t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n-\t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'\n+\t$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'\n+\t$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'\n \t$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-upload-archive$X '$(DESTDIR_SQ)$(bindir_SQ)'\n \t$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install\n \t$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install\n@@ -1319,10 +1326,10 @@ ifndef NO_TCLTK\n \t$(MAKE) -C git-gui install\n endif\n ifneq (,$X)\n-\t$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), $(RM) '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p';)\n+\t$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p';)\n endif\n \tbindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \\\n-\texecdir=$$(cd '$(DESTDIR_SQ)$(gitexecdir_SQ)' && pwd) && \\\n+\texecdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \\\n \tif test \"z$$bindir\" != \"z$$execdir\"; \\\n \tthen \\\n \t\tln -f \"$$bindir/git$X\" \"$$execdir/git$X\" || \\\ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex 45f92eb..c236034 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -7,40 +7,6 @@ extern char **environ;\n static const char *argv_exec_path;\n static const char *argv0_path;\n \n-static const char *builtin_exec_path(void)\n-{\n-#ifndef __MINGW32__\n-\treturn GIT_EXEC_PATH;\n-#else\n-\tint len;\n-\tchar *p, *q, *sl;\n-\tstatic char *ep;\n-\tif (ep)\n-\t\treturn ep;\n-\n-\tlen = strlen(_pgmptr);\n-\tif (len < 2)\n-\t\treturn ep = \".\";\n-\n-\tp = ep = xmalloc(len+1);\n-\tq = _pgmptr;\n-\tsl = NULL;\n-\t/* copy program name, turn '\\\\' into '/', skip last part */\n-\twhile ((*p = *q)) {\n-\t\tif (*q == '\\\\' || *q == '/') {\n-\t\t\t*p = '/';\n-\t\t\tsl = p;\n-\t\t}\n-\t\tp++, q++;\n-\t}\n-\tif (sl)\n-\t\t*sl = '\\0';\n-\telse\n-\t\tep[0] = '.', ep[1] = '\\0';\n-\treturn ep;\n-#endif\n-}\n-\n const char *system_path(const char *path)\n {\n \tif (!is_absolute_path(path) && argv0_path) {\n@@ -75,7 +41,7 @@ const char *git_exec_path(void)\n \t\treturn env;\n \t}\n \n-\treturn builtin_exec_path();\n+\treturn system_path(GIT_EXEC_PATH);\n }\n \n static void add_path(struct strbuf *out, const char *path)\n@@ -99,7 +65,7 @@ void setup_path(void)\n \n \tadd_path(&new_path, argv_exec_path);\n \tadd_path(&new_path, getenv(EXEC_PATH_ENVIRONMENT));\n-\tadd_path(&new_path, builtin_exec_path());\n+\tadd_path(&new_path, system_path(GIT_EXEC_PATH));\n \tadd_path(&new_path, argv0_path);\n \n \tif (old_path)\n-- \n1.5.6.3.323.g1e58\n"},{"id":"83308","messageId":"1216071689-14823-6-git-send-email-johannes.sixt@telecom.at","threadId":"12603","inReplyTo":"1216071689-14823-5-git-send-email-johannes.sixt@telecom.at","subject":"[PATCH 5/5] Allow add_path() to add non-existent directories to the path","fromName":"Johannes Sixt","fromEmail":"johannes.sixt@telecom.at","sentAt":"2008-07-14T21:41:29Z","receivedAt":"2008-07-14T21:41:29Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"This function had used make_absolute_path(); but this function dies if\nthe directory that contains the entry whose relative path was supplied in\nthe argument does not exist. This is a problem if the argument is, for\nexample, \"../libexec/git-core\", and that \"../libexec\" does not exist.\n\nSince the resolution of symbolic links is not required for elements in\nPATH, we can fall back to using make_nonrelative_path(), which simply\nprepends $PWD to the path.\n\nWe have to move make_nonrelative_path() alongside make_absolute_path() in\nabspath.c so that git-shell can be linked. See 5b8e6f85f.\n\nSigned-off-by: Johannes Sixt <johannes.sixt@telecom.at>\n---\n abspath.c  |   36 ++++++++++++++++++++++++++++++++++++\n exec_cmd.c |    2 +-\n path.c     |   36 ------------------------------------\n 3 files changed, 37 insertions(+), 37 deletions(-)\n\ndiff --git a/abspath.c b/abspath.c\nindex 4f95a95..0d56124 100644\n--- a/abspath.c\n+++ b/abspath.c\n@@ -66,3 +66,39 @@ const char *make_absolute_path(const char *path)\n \n \treturn buf;\n }\n+\n+static const char *get_pwd_cwd(void)\n+{\n+\tstatic char cwd[PATH_MAX + 1];\n+\tchar *pwd;\n+\tstruct stat cwd_stat, pwd_stat;\n+\tif (getcwd(cwd, PATH_MAX) == NULL)\n+\t\treturn NULL;\n+\tpwd = getenv(\"PWD\");\n+\tif (pwd && strcmp(pwd, cwd)) {\n+\t\tstat(cwd, &cwd_stat);\n+\t\tif (!stat(pwd, &pwd_stat) &&\n+\t\t    pwd_stat.st_dev == cwd_stat.st_dev &&\n+\t\t    pwd_stat.st_ino == cwd_stat.st_ino) {\n+\t\t\tstrlcpy(cwd, pwd, PATH_MAX);\n+\t\t}\n+\t}\n+\treturn cwd;\n+}\n+\n+const char *make_nonrelative_path(const char *path)\n+{\n+\tstatic char buf[PATH_MAX + 1];\n+\n+\tif (is_absolute_path(path)) {\n+\t\tif (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)\n+\t\t\tdie(\"Too long path: %.*s\", 60, path);\n+\t} else {\n+\t\tconst char *cwd = get_pwd_cwd();\n+\t\tif (!cwd)\n+\t\t\tdie(\"Cannot determine the current working directory\");\n+\t\tif (snprintf(buf, PATH_MAX, \"%s/%s\", cwd, path) >= PATH_MAX)\n+\t\t\tdie(\"Too long path: %.*s\", 60, path);\n+\t}\n+\treturn buf;\n+}\ndiff --git a/exec_cmd.c b/exec_cmd.c\nindex c236034..0ed768d 100644\n--- a/exec_cmd.c\n+++ b/exec_cmd.c\n@@ -50,7 +50,7 @@ static void add_path(struct strbuf *out, const char *path)\n \t\tif (is_absolute_path(path))\n \t\t\tstrbuf_addstr(out, path);\n \t\telse\n-\t\t\tstrbuf_addstr(out, make_absolute_path(path));\n+\t\t\tstrbuf_addstr(out, make_nonrelative_path(path));\n \n \t\tstrbuf_addch(out, PATH_SEP);\n \t}\ndiff --git a/path.c b/path.c\nindex 504eae0..9df447b 100644\n--- a/path.c\n+++ b/path.c\n@@ -291,42 +291,6 @@ int adjust_shared_perm(const char *path)\n \treturn 0;\n }\n \n-static const char *get_pwd_cwd(void)\n-{\n-\tstatic char cwd[PATH_MAX + 1];\n-\tchar *pwd;\n-\tstruct stat cwd_stat, pwd_stat;\n-\tif (getcwd(cwd, PATH_MAX) == NULL)\n-\t\treturn NULL;\n-\tpwd = getenv(\"PWD\");\n-\tif (pwd && strcmp(pwd, cwd)) {\n-\t\tstat(cwd, &cwd_stat);\n-\t\tif (!stat(pwd, &pwd_stat) &&\n-\t\t    pwd_stat.st_dev == cwd_stat.st_dev &&\n-\t\t    pwd_stat.st_ino == cwd_stat.st_ino) {\n-\t\t\tstrlcpy(cwd, pwd, PATH_MAX);\n-\t\t}\n-\t}\n-\treturn cwd;\n-}\n-\n-const char *make_nonrelative_path(const char *path)\n-{\n-\tstatic char buf[PATH_MAX + 1];\n-\n-\tif (is_absolute_path(path)) {\n-\t\tif (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)\n-\t\t\tdie (\"Too long path: %.*s\", 60, path);\n-\t} else {\n-\t\tconst char *cwd = get_pwd_cwd();\n-\t\tif (!cwd)\n-\t\t\tdie(\"Cannot determine the current working directory\");\n-\t\tif (snprintf(buf, PATH_MAX, \"%s/%s\", cwd, path) >= PATH_MAX)\n-\t\t\tdie (\"Too long path: %.*s\", 60, path);\n-\t}\n-\treturn buf;\n-}\n-\n const char *make_relative_path(const char *abs, const char *base)\n {\n \tstatic char buf[PATH_MAX + 1];\n-- \n1.5.6.3.323.g1e58\n"},{"id":"83314","messageId":"487BDD56.7010505@gmail.com","threadId":"12603","inReplyTo":"7vtzetjbif.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Lea Wiemann","fromEmail":"lewiemann@gmail.com","sentAt":"2008-07-14T23:12:22Z","receivedAt":"2008-07-14T23:12:22Z","isPatch":false,"sender":{"key":"lewiemann@gmail.com","avatar":null},"body":"Junio C Hamano wrote:\n> * lw/gitweb (Fri Jul 11 03:11:48 2008 +0200) 3 commits\n>  - Add new Git::Repo API\n> \n> This does not pass t9710, at least for me X-<.\n\nYikes; I thought I had removed all instanced of Carp::Always (which I\nhad put in for development), but this one apparently slipped through.\nIt'll be fixed in the next version I post (which will also have the\ndependency on the non-core Test::Exception package removed).\n"},{"id":"83317","messageId":"487BDF57.4090900@gmail.com","threadId":"12603","inReplyTo":"487BDD56.7010505@gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Lea Wiemann","fromEmail":"lewiemann@gmail.com","sentAt":"2008-07-14T23:20:55Z","receivedAt":"2008-07-14T23:20:55Z","isPatch":false,"sender":{"key":"lewiemann@gmail.com","avatar":null},"body":"Lea Wiemann wrote:\n> It'll be fixed in the next version I post\n\nBy the way Junio, how do you prefer to get reposts of patch sequences?\nShould I repost the whole sequence under a new common parent message, or\ncan I simply post v2 of each patch in the sequence as a followup to its\nrespective v1?\n"},{"id":"83323","messageId":"7vhcasdnel.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"487BDF57.4090900@gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-15T00:03:14Z","receivedAt":"2008-07-15T00:03:14Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Lea Wiemann <lewiemann@gmail.com> writes:\n\n> Lea Wiemann wrote:\n>> It'll be fixed in the next version I post\n>\n> By the way Junio, how do you prefer to get reposts of patch sequences?\n> Should I repost the whole sequence under a new common parent message, or\n> can I simply post v2 of each patch in the sequence as a followup to its\n> respective v1?\n\nI do not have major preference either way, but for a long series, I'd\nprefer a resend to be independent from the previous series, i.e.\n\n        [PATCH 0/3]\n        .[PATCH 1/3]\n        ..[PATCH 2/3]\n        ...[PATCH 3/3]\n\n        [PATCH 0/4 v2]\n        .[PATCH 1/4 v2]\n        ..[PATCH 2/4 v2]\n        ...[PATCH 3/4 v2]\n        ....[PATCH 4/4 v2]\n        \nI can live with the first one from the new series being a follow-up to the\nfirst one from the old series, i.e.:\n\n        [PATCH 0/3]\n        .[PATCH 1/3]\n        ..[PATCH 2/3]\n        ...[PATCH 3/3]\n        .[PATCH 0/4 v2]\n        ..[PATCH 1/4 v2]\n        ...[PATCH 2/4 v2]\n        ....[PATCH 3/4 v2]\n        .....[PATCH 4/4 v2]\n\nbut _not_ with this, i.e. N/M being followup to old N/M:\n\n        [PATCH 0/3]\n        .[PATCH 0/4 v2]\n        .[PATCH 1/3]\n        ..[PATCH 1/4 v2]\n        ..[PATCH 2/3]\n        ...[PATCH 2/4 v2]\n        ...[PATCH 3/3]\n        ....[PATCH 3/4 v2]\n        .....[PATCH 4/4 v2]\n"},{"id":"83342","messageId":"20080715025127.GC1700@spearce.org","threadId":"12603","inReplyTo":"alpine.LFD.1.10.0807141351540.12484@xanadu.home","subject":"Re: Closing the merge window for 1.6.0","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-07-15T02:51:27Z","receivedAt":"2008-07-15T02:51:27Z","isPatch":false,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Nicolas Pitre <nico@cam.org> wrote:\n> On Mon, 14 Jul 2008, Gerrit Pape wrote:\n> \n> > On Mon, Jul 14, 2008 at 12:57:56PM +0100, Johannes Schindelin wrote:\n> > > On Mon, 14 Jul 2008, Petr Baudis wrote:\n> > > > I'm saying this because I believe the best conservative upper bound for \n> > > > backwards compatibility is Git version in Debian stable. It gets \n> > > > probably the most stale from all the widely used software distributions \n> > > > using Git, and it *is* quite widely used. Etch carries v1.4.4.4, which \n> > > > fails miserably on the new packs.\n> \n> Maybe we can release 1.4.5 with the ability to read index v2?  That \n> wouldn't be hard to backport the reading part of it.\n\nIf we consider that supporting 1.4.4.4 clients is still a priority,\ndue to the widespread distribution of that version in a popular\nversion of Debian, we shouldn't be rushing the index v2 or OFS_DELTA\nfunctionality on by default in 1.6.0.  Instead we would wait until\nDebian stable (and most other widely popular distributions) are on\na modern enough version of Git to understand this format.\n\nReally.  As much as I'd love to see the switch to v2 made by default\nI don't think we can/should do it unless the majority of the user\nbase will be able to grok it.  And Debian etch sounds like it won't.\n\n-- \nShawn.\n"},{"id":"83346","messageId":"46a038f90807142014l2c120467pe4a76b2c35a145f9@mail.gmail.com","threadId":"12603","inReplyTo":"20080714191903.GB5788@mithlond.arda.local","subject":"Re: Closing the merge window for 1.6.0","fromName":"Martin Langhoff","fromEmail":"martin.langhoff@gmail.com","sentAt":"2008-07-15T03:14:47Z","receivedAt":"2008-07-15T03:14:47Z","isPatch":false,"sender":{"key":"martin.langhoff@gmail.com","avatar":"https://gravatar.com/avatar/1e3f311b6c4c15836501901ca58f8c0b0667246488084ba524d8bc9867e22fd9?d=mp&s=160"},"body":"On Tue, Jul 15, 2008 at 7:19 AM, Teemu Likonen <tlikonen@iki.fi> wrote:\n>> But as the upstream, we have our own deprecation schedule.\n>\n> As Debian stable (4.0 \"Etch\") and its git 1.4.4.4 was mentioned I'd like\n> to point out that git 1.5.6 is available for Etch users from\n> kind-of-semi-official <www.backports.org>. So I guess Debian stable\n> users aren't left completely behind. Git's web page already advertises\n> backports.org version for Etch.\n\nI concur. Users of git on Etch are using backports AFAIK.\n\nWe still have the case of the \"casual\" user, who does not know much\nabout git, but installs it to clone & review a project's code. There,\nif v1.4.4 complains with a useful message, the casual user will swear\na bit and grab a backport. If it dies a horrible uninformative death,\nthen we will get  bogus bug reports, flamage, the works.\n\ncheers,\n\n\n\nm\n-- \n martin.langhoff@gmail.com\n martin@laptop.org -- School Server Architect\n - ask interesting questions\n - don't get distracted with shiny stuff - working code first\n - http://wiki.laptop.org/go/User:Martinlanghoff\n"},{"id":"83350","messageId":"alpine.LFD.1.10.0807142307440.12484@xanadu.home","threadId":"12603","inReplyTo":"20080715025127.GC1700@spearce.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Nicolas Pitre","fromEmail":"nico@cam.org","sentAt":"2008-07-15T03:30:39Z","receivedAt":"2008-07-15T03:30:39Z","isPatch":false,"sender":{"key":"nico@fluxnic.net","avatar":"https://avatars.githubusercontent.com/u/702790?v=4"},"body":"On Tue, 15 Jul 2008, Shawn O. Pearce wrote:\n\n> Nicolas Pitre <nico@cam.org> wrote:\n> > On Mon, 14 Jul 2008, Gerrit Pape wrote:\n> > \n> > > On Mon, Jul 14, 2008 at 12:57:56PM +0100, Johannes Schindelin wrote:\n> > > > On Mon, 14 Jul 2008, Petr Baudis wrote:\n> > > > > I'm saying this because I believe the best conservative upper bound for \n> > > > > backwards compatibility is Git version in Debian stable. It gets \n> > > > > probably the most stale from all the widely used software distributions \n> > > > > using Git, and it *is* quite widely used. Etch carries v1.4.4.4, which \n> > > > > fails miserably on the new packs.\n> > \n> > Maybe we can release 1.4.5 with the ability to read index v2?  That \n> > wouldn't be hard to backport the reading part of it.\n> \n> If we consider that supporting 1.4.4.4 clients is still a priority,\n> due to the widespread distribution of that version in a popular\n> version of Debian, we shouldn't be rushing the index v2 or OFS_DELTA\n> functionality on by default in 1.6.0.  \n\nOFS_DELTA is supported by 1.4.4.4 so that's a non issue.\n\n> Instead we would wait until Debian stable (and most other widely \n> popular distributions) are on a modern enough version of Git to \n> understand this format.\n\nI don't think we should have git development be dictated by some \ndiscutable policy from one distribution.\n\nIMHO git prior 1.5.0 is so horrible as general usability goes, and so \ndifferent from what everybody is discussing on the net, that no one sane \nshould still be using it. Even ourselves (i.e. the git community) are \nnot supporting git 1.4.4 anymore so this hardly can be a priority.\n\nAs far as I know, there is no other widely popular distribution other \nthan Debian using git prior 1.5.0 in their latest release. If Debian \npeople want to support git 1.4.4 although we called thatversion obsolete \n_long_ ago then that's their problem.  We should not be bound by that \nexternal policy to which we never agreed with.\n\nNow I proposed a compromise which consists of making 1.4.4.4+1 able to \ncope with index v2.  That should fall into Debian's \"major usability \nfix\" category.  I think that is a far better compromize than delaying \nindex v2 even further.\n\n> Really.  As much as I'd love to see the switch to v2 made by default\n> I don't think we can/should do it unless the majority of the user\n> base will be able to grok it.  And Debian etch sounds like it won't.\n\nI truly hope the majority of the user is _not_ using 1.4.4.4.  Otherwise \nI may only have pity for them.\n\n\nNicolas\n"},{"id":"83351","messageId":"7f9d599f0807142038w62ccb69fv42d6dcf3dd4f2afd@mail.gmail.com","threadId":"12603","inReplyTo":"7vtzetjbif.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Geoffrey Irving","fromEmail":"irving@naml.us","sentAt":"2008-07-15T03:38:00Z","receivedAt":"2008-07-15T03:38:00Z","isPatch":false,"sender":{"key":"irving@naml.us","avatar":"https://gravatar.com/avatar/52d7452fcd134aac0fa12f57a3bb7ef5f3f7e73ca0ab36736d06c6a6132de718?d=mp&s=160"},"body":"On Sun, Jul 13, 2008 at 10:11 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> Here are the topics that have been cooking.  Commits prefixed\n> with '-' are only in 'pu' while commits prefixed with '+' are\n> in 'next'.\n>\n> <snip>\n>\n> * gi/cherry-cache (Sat Jul 12 20:14:51 2008 -0700) 1 commit\n>  - cherry: cache patch-ids to avoid repeating work\n>\n> This does not seem to pass tests even on its own.\n\nThe problem (beyond the basic problem of me not having tried running\nthe tests) is that the current caching code isn't taking into account\nthe changing values of diff_options.  t6007 computes a patch-id for a\ncommit with one value of options.paths, and then tries to compute a\n_different_ patch-id for the same commit using a different value of\noptions.paths.\n\nHere are a few different ways of fixing this:\n\n1. Modify commit_patch_id in patch-ids.c to compute a sha1 of the\ndiff_options structure and xor it with the commit sha1 to get a truly\nunique hash of the input.  This means the optimization can be safely\napplied for all patch-id computations regardless of the diff_options.\nI can add a diff_options_sha1 function in diff.[ch] to compute the\nchecksum.\n\n2. Restrict commit_patch_id in patch-ids.c to apply the optimization\nonly if options.nr_paths is zero, and perhaps a few other conditions.\nThis is rather fragile, since it would mean that the cache would break\nif someone decided to change the default diff options.\n\n3. Add a flag in struct patch_ids defaulting to false which turns the\ncaching on or off, and manually set the flag to true in cmd_cherry.\n\nI'd lean towards (1), but wanted to check before writing the code to\nmake sure that it's reasonable to treat diff_options as stable enough\nthat computing a sha1 hash of it makes sense.  According to \"git help\npatch-id\", it is only \"reasonable stable\", which is sufficient as long\nas we're confident that whenever the diff format changes, the\ndiff_options_sha1 function will be updated to reflect that change.\n\nAs an aside: is it correct that as long as the change is in pu, I\nshould be submitting complete (nonincremental) patches whenever I fix\nbugs?\n\nThanks,\nGeoffrey\n"},{"id":"83373","messageId":"487C58F4.9050000@viscovery.net","threadId":"12603","inReplyTo":"1216071689-14823-1-git-send-email-johannes.sixt@telecom.at","subject":"Re: [PATCH 0/5] replacement for the part of js/more-win that is in pu","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2008-07-15T07:59:48Z","receivedAt":"2008-07-15T07:59:48Z","isPatch":true,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Johannes Sixt schrieb:\n> The interdiff to js/more-win is below. It is mostly the changes\n> of 1/5.\n> \n> Johannes Sixt (5):\n>       Makefile: Normalize $(bindir) and $(gitexecdir) before comparing\n>       Record the command invocation path early\n>       Fix relative built-in paths to be relative to the command\n>          invocation\n>       Allow the built-in exec path to be relative to the command\n>          invocation path\n>       Allow add_path() to add non-existent directories to the path\n\nI retract this series and also the earlier version (the part that is in pu).\n\nIf I had done due diligence, I could have found out earlier that it does\nnot solve the problem it tried to solve. Appologies for the noise. :-(\n\nThe series tries to derive the exec-path from argv[0] (if the built-in\npath is relative). But if a command is invoked from CMD on Windows,\nargv[0] doesn't have a path, there is only the program name, \"git.exe\". In\nthe past, we relied on the global variable _pgmptr (only Windows's C\nruntime has this), which does contain the full path, and if we set\n\n   gitexecdir = $(bindir)\n\nin the Makefile, then we get a working git.exe, but we put back all\ncommands into $PATH.\n\n-- Hannes\n"},{"id":"83380","messageId":"20080715090913.GN10151@machine.or.cz","threadId":"12603","inReplyTo":"7vtzesff91.fsf@gitster.siamese.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-07-15T09:09:13Z","receivedAt":"2008-07-15T09:09:13Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"On Mon, Jul 14, 2008 at 12:16:26PM -0700, Junio C Hamano wrote:\n> Yeah, I think git-repack, git-gc, git-pack-objects and git-index-pack on\n> the server side need a knob to tell it to stay conservative because the\n> repository may be served over dumb protocols to avoid this problem.\n> \n> That knob could even be called\n> \n> \t[repack]\n>         \tusedeltabaseoffset = false\n> \t[pack]\n>         \tindexversion = 1\n\nCan you please mention this in release notes? Until now, I actually\nthought you're speaking about a hypothetical improvement, not a knob we\nactually have. :-) (BTW, turning off the usedeltabaseoffset is not\ncritical at least Debian-wise, and I think that really is the oldest Git\nin widespread use.)\n\nNow, there is of course still the issue of default behaviour, but at\nleast my concern is somewhat eased now. :-)\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nGNU, n. An animal of South Africa, which in its domesticated state\nresembles a horse, a buffalo and a stag. In its wild condition it is\nsomething like a thunderbolt, an earthquake and a cyclone. -- A. Pierce\n"},{"id":"83381","messageId":"20080715092023.GO10151@machine.or.cz","threadId":"12603","inReplyTo":"7v3amcgujd.fsf@gitster.siamese.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-07-15T09:20:23Z","receivedAt":"2008-07-15T09:20:23Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"On Mon, Jul 14, 2008 at 12:00:54PM -0700, Junio C Hamano wrote:\n> But as the upstream, we have our own deprecation schedule.  We should of\n> course plan carefully not to harm existing users of our releases, but\n> frankly speaking, 18 months since 1.4.4.4 was tagged (early January 2007)\n> is an eternity in git timescale.  Maybe we will slow down someday, and\n> this 18-month is not a set-in-stone rule in any way, but at this point\n> even without the packfile format issues, I personally think anything\n> before 1.5.0 is irrelevant --- maybe they are interesting as historical\n> curiosities, but not more than that.\n\nReally, I think this is should be put into certain perspective:\n\n\t(i) This change is special since it affects client-server\n\tcompatibility in bare repositories. AFAIK, none of the others\n\tyou mention does this.\n\n\t(ii) The CRC checking is perhaps quite an improvement, but I\n\tdon't think it is critical-to-have-just-now.\n\n\t(iii) Most importantly, this is not about waiting another few\n\tyears for Debian to catch up, since the next stable release\n\tshould really be upcoming rather soon:\n\n\t\thttp://debian-community.org/LennyReleaseSchedule/\n\n\t(iv) These problems do not concern people who are currently\n\t_actively_ _working_ with Git; these people hopefully do not\n\tuse 1.4 willingly and already use Git from backports.org.\n\tThis is about user experience for casual users who are quite\n\tpossibly interested only in read-only tracking of upstream\n\tusing Git - these people will likely use default Debian Git\n\tversion and that is okay, because frankly, for them, the\n\t1.5 improvements do not really matter much. This is also\n\tlarge class of prospective future real Git users and we might\n\tnot want to ruin Git's reputation in their eyes.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nGNU, n. An animal of South Africa, which in its domesticated state\nresembles a horse, a buffalo and a stag. In its wild condition it is\nsomething like a thunderbolt, an earthquake and a cyclone. -- A. Pierce\n"},{"id":"83382","messageId":"alpine.DEB.1.00.0807151117450.3487@eeepc-johanness","threadId":"12603","inReplyTo":"7f9d599f0807142038w62ccb69fv42d6dcf3dd4f2afd@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-15T09:22:22Z","receivedAt":"2008-07-15T09:22:22Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 14 Jul 2008, Geoffrey Irving wrote:\n\n> The problem (beyond the basic problem of me not having tried running the \n> tests) is that the current caching code isn't taking into account the \n> changing values of diff_options.  t6007 computes a patch-id for a commit \n> with one value of options.paths, and then tries to compute a _different_ \n> patch-id for the same commit using a different value of options.paths.\n> \n> Here are a few different ways of fixing this:\n> \n> 1. Modify commit_patch_id in patch-ids.c to compute a sha1 of the \n>    diff_options structure and xor it with the commit sha1 to get a truly \n>    unique hash of the input.  This means the optimization can be safely \n>    applied for all patch-id computations regardless of the diff_options.  \n>    I can add a diff_options_sha1 function in diff.[ch] to compute the \n>    checksum.\n> \n> 2. Restrict commit_patch_id in patch-ids.c to apply the optimization \n>    only if options.nr_paths is zero, and perhaps a few other conditions.  \n>    This is rather fragile, since it would mean that the cache would \n>    break if someone decided to change the default diff options.\n\nFunnily, (2) contradicts (1).  The patch id is _different_ when you have \nnr_paths > 0.  At least in the general case.\n\nSo what you propose in (1) will not work, unless you also hash the path \nnames (in the correct order, otherwise you'll end up with two hashes).\n\nOTOH I would be really surprised if you needed --cherry-pick with paths \nand/or diff options more than once for the same commits.  So the caching \ndoes not make sense to begin with (especially since we do not have a \nproper way of gc'ing it, right?).\n\nSo I'd suggest saving diff_opts before the command line parsing, and \ndisable the cache when it is different _and/or_ (||) nr_paths.\n\nCiao,\nDscho\n"},{"id":"83400","messageId":"20080715150626.GA2925@dpotapov.dyndns.org","threadId":"12603","inReplyTo":"20080715092023.GO10151@machine.or.cz","subject":"Re: Closing the merge window for 1.6.0","fromName":"Dmitry Potapov","fromEmail":"dpotapov@gmail.com","sentAt":"2008-07-15T15:06:26Z","receivedAt":"2008-07-15T15:06:26Z","isPatch":false,"sender":{"key":"dpotapov@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6568595?v=4"},"body":"On Tue, Jul 15, 2008 at 11:20:23AM +0200, Petr Baudis wrote:\n> \n> \t(iii) Most importantly, this is not about waiting another few\n> \tyears for Debian to catch up, since the next stable release\n> \tshould really be upcoming rather soon:\n> \n> \t\thttp://debian-community.org/LennyReleaseSchedule/\n\nEven if Lenny will be released right on the scheduler (which I seriously\ndoubt), Etch will be around for another year. In fact, the last release\nof oldstable (sarge) happened on April 12 this year.  Thus delaying of\nindexversion=2 does not help much here. Anyone who is more or less\nseriously about using Git grabs it from backports. The downside of\ndelaying is that any incompatible changes are much less welcome by users\nduring minor releases than major ones. People tend to read release notes\nduring major releases more carefully and think whether they prefer new\nfeatures or backward compatibility. This choice will not be the same for\nanyone, but changing default settings on the major release is much more\nappropriate than during minor ones.\n\n> \n> \t(iv) These problems do not concern people who are currently\n> \t_actively_ _working_ with Git; these people hopefully do not\n> \tuse 1.4 willingly and already use Git from backports.org.\n> \tThis is about user experience for casual users who are quite\n> \tpossibly interested only in read-only tracking of upstream\n> \tusing Git - these people will likely use default Debian Git\n> \tversion and that is okay, because frankly, for them, the\n> \t1.5 improvements do not really matter much. This is also\n> \tlarge class of prospective future real Git users and we might\n> \tnot want to ruin Git's reputation in their eyes.\n\nI disagree. It is not Git does not support the old format, but it\nswitches on the new one as default on the next major release, which\nis a sensible thing to do. Those repos that think that access for\nGit 1.4 users is important for them can set indexformat=1. As to\nprospective future real Git users, anyone who is trying to use Git\n1.4 is going to hit by many usability issues that were resolved in\n1.5; and there is no community support for Git 1.4 either -- you can\nask about any problem with Git 1.4 on this list, and the only answer\nyou'll get is that you should upgrade your Git. So, there is no way\nfor newcommers to start using Git 1.4 and be satisfied with it.\n\nFinally, 18 months since 1.4.4 may not appear as a long time ago for\nother projects that are being developed for many years, but for Git,\nwhich was only 21 months when Git 1.4.4 was released, 18 months is\nreally very *long* time ago.\n\nDmitry\n"},{"id":"83404","messageId":"alpine.DEB.1.00.0807151623120.8950@racer","threadId":"12603","inReplyTo":"20080715150626.GA2925@dpotapov.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-15T15:27:02Z","receivedAt":"2008-07-15T15:27:02Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 15 Jul 2008, Dmitry Potapov wrote:\n\n> Those repos that think that access for Git 1.4 users is important for \n> them can set indexformat=1.\n\nUnfortunately, you place quite a high maintenance burden on the repository \nmaintainers here.\n\n>From the time balance sheet, it does not look good at all: a few minutes \nfor Junio to change and commit, up to a few hours (because they missed it \nin the release notes) for probably more than hundred repository \nmaintainers that are not subscribed to the Git mailing list.\n\nAnd I absolutely agree with Pasky that this does _nothing_ in the vague \ndirection of wielding a reputation of being easy to use.\n\nSure, we can make it easy on ourselves.  And it is just as easy to make it \nhard on others.  If you're okay with that, I am not.\n\nCiao,\nDscho\n"},{"id":"83410","messageId":"32541b130807150851v553bca5bo4f61351692c1bc56@mail.gmail.com","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807151623120.8950@racer","subject":"Re: Closing the merge window for 1.6.0","fromName":"Avery Pennarun","fromEmail":"apenwarr@gmail.com","sentAt":"2008-07-15T15:51:34Z","receivedAt":"2008-07-15T15:51:34Z","isPatch":false,"sender":{"key":"apenwarr@gmail.com","avatar":"https://avatars.githubusercontent.com/u/20592?v=4"},"body":"On 7/15/08, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n>  On Tue, 15 Jul 2008, Dmitry Potapov wrote:\n>  > Those repos that think that access for Git 1.4 users is important for\n>  > them can set indexformat=1.\n>\n> Unfortunately, you place quite a high maintenance burden on the repository\n>  maintainers here.\n>\n>  From the time balance sheet, it does not look good at all: a few minutes\n>  for Junio to change and commit, up to a few hours (because they missed it\n>  in the release notes) for probably more than hundred repository\n>  maintainers that are not subscribed to the Git mailing list.\n\nTo take this in a slightly different direction, what exactly is the\nbenefit of the new feature?  Apparently my git doesn't have it enabled\nby default, and git works fine for me.  Am I missing out on something\nthat I should feel inferior about if my non-debian-etch running\nfriends(*) found out about it? :)\n\nHave fun,\n\nAvery\n\n(*) Actually I compile my own git from source anyway.  I never want to\nlive without \"git rebase -i\" and \"git add -p\" ever again.  Life is too\nshort! :)\n"},{"id":"83412","messageId":"alpine.LFD.1.10.0807151213000.12484@xanadu.home","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807151623120.8950@racer","subject":"Re: Closing the merge window for 1.6.0","fromName":"Nicolas Pitre","fromEmail":"nico@cam.org","sentAt":"2008-07-15T16:26:48Z","receivedAt":"2008-07-15T16:26:48Z","isPatch":false,"sender":{"key":"nico@fluxnic.net","avatar":"https://avatars.githubusercontent.com/u/702790?v=4"},"body":"On Tue, 15 Jul 2008, Johannes Schindelin wrote:\n\n> And I absolutely agree with Pasky that this does _nothing_ in the vague \n> direction of wielding a reputation of being easy to use.\n\nStaying with git versions prior 1.5 isn't either.  In fact, git had a \nmuch harder time with its usability reputation in those days.  In other \nwords, if some user of Debian is rebutted by the upgrade path for a later \ngit version, then the awkwardness of git 1.4.4 UI will be even worse.\n\nAnyway this is all hand waving until someone can come with some evidence \nthat git 1.4.4 is actually used by a significant amount of people, and \nthat those people depend on dumb transfer protocols.\n\n\nNicolas\n"},{"id":"83414","messageId":"bd6139dc0807150946j709d9776xf61828d132aa34ad@mail.gmail.com","threadId":"12603","inReplyTo":"alpine.LFD.1.10.0807151213000.12484@xanadu.home","subject":"Re: Closing the merge window for 1.6.0","fromName":"Sverre Rabbelier","fromEmail":"alturin@gmail.com","sentAt":"2008-07-15T16:46:28Z","receivedAt":"2008-07-15T16:46:28Z","isPatch":false,"sender":{"key":"alturin@gmail.com","avatar":null},"body":"On Tue, Jul 15, 2008 at 6:26 PM, Nicolas Pitre <nico@cam.org> wrote:\n> Anyway this is all hand waving until someone can come with some evidence\n> that git 1.4.4 is actually used by a significant amount of people, and\n> that those people depend on dumb transfer protocols.\n\nCan't we add a msg to 1.4.4.x when it finds pack version 2 to upgrade\nto 1.5.x? Gets rid of the problem all together while still giving the\nuser a reasonable message when it finds a repo version 2.\nHey, here's an idea, can't we have 1.4.4.x just give that msg for everything?\n\n$cat git\n#!/bin/sh\n\necho \"Please upgrade to 1.5.x, version 1.4.x is no longer supported\nnor should you even want to use it </cluebat>\"\n\n-- \nCheers,\n\nSverre Rabbelier\n"},{"id":"83415","messageId":"7f9d599f0807150948x14c09b0dmb932e86378f0c46d@mail.gmail.com","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807151117450.3487@eeepc-johanness","subject":"Re: What's cooking in git.git (topics)","fromName":"Geoffrey Irving","fromEmail":"irving@naml.us","sentAt":"2008-07-15T16:48:51Z","receivedAt":"2008-07-15T16:48:51Z","isPatch":false,"sender":{"key":"irving@naml.us","avatar":"https://gravatar.com/avatar/52d7452fcd134aac0fa12f57a3bb7ef5f3f7e73ca0ab36736d06c6a6132de718?d=mp&s=160"},"body":"On Tue, Jul 15, 2008 at 2:22 AM, Johannes Schindelin\n<Johannes.Schindelin@gmx.de> wrote:\n> Hi,\n>\n> On Mon, 14 Jul 2008, Geoffrey Irving wrote:\n>\n>> The problem (beyond the basic problem of me not having tried running the\n>> tests) is that the current caching code isn't taking into account the\n>> changing values of diff_options.  t6007 computes a patch-id for a commit\n>> with one value of options.paths, and then tries to compute a _different_\n>> patch-id for the same commit using a different value of options.paths.\n>>\n>> Here are a few different ways of fixing this:\n>>\n>> 1. Modify commit_patch_id in patch-ids.c to compute a sha1 of the\n>>    diff_options structure and xor it with the commit sha1 to get a truly\n>>    unique hash of the input.  This means the optimization can be safely\n>>    applied for all patch-id computations regardless of the diff_options.\n>>    I can add a diff_options_sha1 function in diff.[ch] to compute the\n>>    checksum.\n>>\n>> 2. Restrict commit_patch_id in patch-ids.c to apply the optimization\n>>    only if options.nr_paths is zero, and perhaps a few other conditions.\n>>    This is rather fragile, since it would mean that the cache would\n>>    break if someone decided to change the default diff options.\n>\n> Funnily, (2) contradicts (1).  The patch id is _different_ when you have\n> nr_paths > 0.  At least in the general case.\n>\n> So what you propose in (1) will not work, unless you also hash the path\n> names (in the correct order, otherwise you'll end up with two hashes).\n\nThe sha1 would include paths, of course, since it's part of diff_options.\n\n> OTOH I would be really surprised if you needed --cherry-pick with paths\n> and/or diff options more than once for the same commits.  So the caching\n> does not make sense to begin with (especially since we do not have a\n> proper way of gc'ing it, right?).\n>\n> So I'd suggest saving diff_opts before the command line parsing, and\n> disable the cache when it is different _and/or_ (||) nr_paths.\n\nI'll attach the patch to the other thread.\n\nGeoffrey\n"},{"id":"83418","messageId":"20080715170412.GB2925@dpotapov.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807151623120.8950@racer","subject":"Re: Closing the merge window for 1.6.0","fromName":"Dmitry Potapov","fromEmail":"dpotapov@gmail.com","sentAt":"2008-07-15T17:04:12Z","receivedAt":"2008-07-15T17:04:12Z","isPatch":false,"sender":{"key":"dpotapov@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6568595?v=4"},"body":"On Tue, Jul 15, 2008 at 04:27:02PM +0100, Johannes Schindelin wrote:\n> \n> >From the time balance sheet, it does not look good at all: a few minutes \n> for Junio to change and commit, up to a few hours (because they missed it \n> in the release notes) for probably more than hundred repository \n> maintainers that are not subscribed to the Git mailing list.\n\nIf you just grab sources and never read release notes, there is nothing\nthat can help you. If Git 1.6.0 is not the right moment to do these\nchanges then Git 1.6.1 is neither, regardless whether Debian will\nrelease Lenny by that time or not. People do not upgrade their distro in\nthe day of release. Some upgraded to Etch not so long ago. So, should we\nwait for another year till 1.7.0?\n\n> \n> And I absolutely agree with Pasky that this does _nothing_ in the vague \n> direction of wielding a reputation of being easy to use.\n\nI don't think Git 1.4 is easy to use. If you want Git that is easy to\nuse install Git 1.5.x. And, it is *much* easier to install Git from\nbackports then to deal with usability issues of Git 1.4 and the lack\nof community support.  So, I don't see how this change may hurt.\n\n> \n> Sure, we can make it easy on ourselves.  And it is just as easy to make it \n> hard on others.  If you're okay with that, I am not.\n\nIt has *nothing* to do with making easy on ourselves and hard on others.\nThe question here is what is the appropriate time to change these default\nsettings, and I believe that *major* releases are the appropriate time\nwhile minor ones are not.\n\n\nDmitry\n"},{"id":"83419","messageId":"20080715172821.GL32184@machine.or.cz","threadId":"12603","inReplyTo":"alpine.LFD.1.10.0807151213000.12484@xanadu.home","subject":"Re: Closing the merge window for 1.6.0","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-07-15T17:28:21Z","receivedAt":"2008-07-15T17:28:21Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"On Tue, Jul 15, 2008 at 12:26:48PM -0400, Nicolas Pitre wrote:\n> Anyway this is all hand waving until someone can come with some evidence \n> that git 1.4.4 is actually used by a significant amount of people, and \n> that those people depend on dumb transfer protocols.\n\nThat will be hard to produce. :-) _My_ personal story is that I have\nGit-1.4.4.4 installed system-wide on repo.or.cz and follow git#next\nlocally, and quite panicked when I was inspecting some repositories\nas root (using the system-wide Git) and these error messages popped up.\nThis may become a similar experience for others on multi-user systems\nwhere people want to share work but don't realize that one of them has\nGit installed locally and the other one doesn't. We can save them the\nhead-slapping and a bit of wasted life.\n\nOut of interest, I did a simple statistics of HTTP user agents on\nrepo.or.cz; the dumb access does not seem very widely used overally,\nit turns out. The stats begin at 19/May/2008:10:54:32 +0200. Here is the\nbreakdown, counting unique clients only:\n\n# zgrep '\"GET /r/.*/info/packs' /var/log/apache2/repo-access.log* | egrep -v bot\\|slurp\\|Gecko\\|Opera |\n\tcut -d \" \" -f 1,12- | sed 's/\\.g[a-f0-9]*\\(\\.dirty\\)*\"/\"/' | sort -u |\n\tcut -d ' ' -f 2 | sort | uniq -c | sort -rn | head -n 50\n   1501 \"git/1.5.4.3\"\t<- Ubuntu Hardy (heh.. is just that it?)\n    278 \"git/1.5.5.1\"\t<- RHEL5 (ditto)\n    151 \"git/1.5.2.5\"\t<- Ubuntu Gutsy\n    133 \"git/1.5.5.3\"\t<- ? (maybe Gentoo ~x86 for some time)\n    125 \"git/1.5.4.5\"\t<- OpenSUSE 11.0, FC9, Gentoo x86, Dapper backports\n    104 \"git/1.5.6\"\t<- Debian Lenny\n     94 \"git/1.5.5\"\n     66 \"git/1.5.3.7\"\n     63 \"git/1.5.5.4\"\n     63 \"git/1.5.5.1015\"\n     55 \"git/1.5.2.4\"\t<- OpenSUSE 10.3\n     51 \"Mozilla/4.0 (compatible;)\"\t<- huh?\n     42 \"git/1.5.3.8\"\n     37 \"git/1.5.5.GIT\"\n     37 \"git/1.5.3.5.2229\"\n     34 \"git/1.5.6.1\"\n     33 \"git/1.5.3.6\"\t<- Feisty backports\n     31 \"git/1.5.4.1\"\n     30 \"git/1.5.6.2\"\n     20 \"git/1.5.6.GIT\"\n     18 \"git/1.5.3\"\n     17 \"git/1.5.2.2\"\n     17 \"git/1.4.4.4\"\n     15 \"git/1.5.6.1.1071\"\n     14 \"git/1.5.3.3\"\n     13 \"git/1.5.4.4\"\n     13 \"git/1.5.4\"\n     11 \"git/1.5.6.1062\"\n     11 \"git/1.5.5.2\"\n     10 \"git/1.5.5.1.316\"\n\n(I also got two 1.4.4.2 (feisty?) fetches from one client. No older\nGit versions.)\n\nSo wrt. keeping backwards compatibility, this is not _very_ convincing,\nI admit. ;-)\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nGNU, n. An animal of South Africa, which in its domesticated state\nresembles a horse, a buffalo and a stag. In its wild condition it is\nsomething like a thunderbolt, an earthquake and a cyclone. -- A. Pierce\n"},{"id":"83423","messageId":"7v3amb0ymg.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807151623120.8950@racer","subject":"Re: Closing the merge window for 1.6.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-15T18:51:35Z","receivedAt":"2008-07-15T18:51:35Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> On Tue, 15 Jul 2008, Dmitry Potapov wrote:\n>\n>> Those repos that think that access for Git 1.4 users is important for \n>> them can set indexformat=1.\n>\n> Unfortunately, you place quite a high maintenance burden on the repository \n> maintainers here.\n>\n> From the time balance sheet, it does not look good at all: a few minutes \n> for Junio to change and commit, up to a few hours (because they missed it \n> in the release notes) for probably more than hundred repository \n> maintainers that are not subscribed to the Git mailing list.\n>\n> And I absolutely agree with Pasky that this does _nothing_ in the vague \n> direction of wielding a reputation of being easy to use.\n>\n> Sure, we can make it easy on ourselves.  And it is just as easy to make it \n> hard on others.  If you're okay with that, I am not.\n\nI was not planning to comment on this issue further as the ball is in\nDebian's court, but I think you are misguided.\n\nWe are not making anything hard on others.  Sticking to 1.4.4.4 codebase\nis forced by Debian (for its policy) and choice made by its users (for not\nknowing or using backports).  1.5.0 and later are vastly better and we\nencourage users to update on every occassion we get.\n\nI do not know the extent of the backporting effort necessary, the size of\npotentially impacted population if Debian keeps shipping unpatched\n1.4.4.4, nor how much Debian cares about supporting their 1.4.4.4 users\ni.e. if they are willing and able to carry distro-only forward\ncompatibility patches, and knowing all of these is necessary before we\ndeclare this is worth handling _ourselves_.  That is why I did not want to\ntake a definitive stance on this issue before hearing from the Debian\nmaintainer about them -- I said \"Debian has to ask with list of items\",\ndidn't I?\n\nWhat troubles me the most is that you seem to be forgetting that we are\nusing git to manage our codebase.  Even if this turns out to be something\nwe would want to handle ourselves, it does not have to come from me.  If\nyou care that much, you could backport whatever change is appropriate to\nkeep 1.4.4.X codebase alive and arrange it to be published as 1.4.4.5.\n\nIn any case, it will _definitely_ *NOT* a few minutes of me nor anybody.\nRelease engineering takes quite a lot of time.\n"},{"id":"83445","messageId":"alpine.DEB.1.00.0807160005540.2990@eeepc-johanness","threadId":"12603","inReplyTo":"7v3amb0ymg.fsf@gitster.siamese.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-15T22:10:42Z","receivedAt":"2008-07-15T22:10:42Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 15 Jul 2008, Junio C Hamano wrote:\n\n> What troubles me the most is that you seem to be forgetting that we are \n> using git to manage our codebase.\n\nI don't.  I have vivid memories of updating an ancient git repository of \nGit itself, which had some almost forgotten changes in it.  That was in \nthe bad old days, when the version number did not even have a \"1\" in it.\n\nIt could not even fetch the current git.git.\n\nI do _not_ want that to happen to anybody else, _even if_ we leave 1.4.4.4 \nBehind as if it was an American Child.\n\nHaving said that, I do not have the resources to test and fix everything \nthat may arise from Debian being seemingly unable to update to Git 1.5.  \nSo I agree completely that the ball is in Debian's half, and if they let \nit rot, it is sad, but I cannot help it.\n\nCiao,\nDscho\n"},{"id":"83448","messageId":"7vd4lezske.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807160005540.2990@eeepc-johanness","subject":"Re: Closing the merge window for 1.6.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-15T22:33:05Z","receivedAt":"2008-07-15T22:33:05Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> On Tue, 15 Jul 2008, Junio C Hamano wrote:\n>\n>> What troubles me the most is that you seem to be forgetting that we are \n>> using git to manage our codebase.\n>\n> I don't.  I have vivid memories of updating an ancient git repository of \n> Git itself, which had some almost forgotten changes in it.  That was in \n> the bad old days, when the version number did not even have a \"1\" in it.\n>\n> It could not even fetch the current git.git.\n>\n> I do _not_ want that to happen to anybody else, _even if_ we leave 1.4.4.4 \n> Behind as if it was an American Child.\n\nMy reference to \"git\" was about \"forking is easy\".  We seem to have to\nagree that talking is even cheaper, though ;-)\n\n> Having said that, I do not have the resources to test and fix everything \n> that may arise from Debian being seemingly unable to update to Git 1.5.  \n\nHeh, what happent to your earlier \"a few minutes for Junio to change and\ncommit\"?\n"},{"id":"83449","messageId":"alpine.DEB.1.00.0807160044480.2990@eeepc-johanness","threadId":"12603","inReplyTo":"7vd4lezske.fsf@gitster.siamese.dyndns.org","subject":"Re: Closing the merge window for 1.6.0","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-15T22:45:42Z","receivedAt":"2008-07-15T22:45:42Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Tue, 15 Jul 2008, Junio C Hamano wrote:\n\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> > Having said that, I do not have the resources to test and fix \n> > everything that may arise from Debian being seemingly unable to update \n> > to Git 1.5.\n> \n> Heh, what happent to your earlier \"a few minutes for Junio to change and \n> commit\"?\n\nThat was meant for the integration of the patch that makes the \nbackwards-incompatible patch.\n\nNot for the necessary forward-compatible changes.\n\nCiao,\nDscho\n"},{"id":"83471","messageId":"7vfxqawlja.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vtzetjbif.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-16T03:33:13Z","receivedAt":"2008-07-16T03:33:13Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be merged to the maintenance series have \"maint-\" in their names.\n\nIt so happens that the topics clearly separated between the ones that are\nobviously ready for 1.6.0 and the others that aren't yet as of tonight.\nIt seems that it is a good time to draw that line and tag -rc0 tomorrow,\nafter merging the remaining topics in 'next'.\n\n----------------------------------------------------------------\n[New Topics]\n\nI could apply these directly to master, but I am just playing it safe.\n\n* sp/maint-index-pack (Tue Jul 15 04:45:34 2008 +0000) 4 commits\n + index-pack: Honor core.deltaBaseCacheLimit when resolving deltas\n + index-pack: Track the object_entry that creates each base_data\n + index-pack: Chain the struct base_data on the stack for traversal\n + index-pack: Refactor base arguments of resolve_delta into a struct\n\n* rs/rebase-checkout-not-so-quiet (Mon Jul 14 14:05:35 2008 -0700) 1 commit\n + git-rebase: report checkout failure\n\n* ag/blame (Wed Jul 16 02:00:58 2008 +0400) 2 commits\n + Do not try to detect move/copy for entries below threshold.\n + Avoid rescanning unchanged entries in search for copies.\n\nThis gives a drastic performance improvement to \"git-blame -C -C\" with\nquite straightforward and obvious code change.\n\n* rs/archive (Mon Jul 14 21:22:05 2008 +0200) 6 commits\n + archive: remove extra arguments parsing code\n + archive: unify file attribute handling\n + archive: centralize archive entry writing\n + archive: add baselen member to struct archiver_args\n + add context pointer to read_tree_recursive()\n + archive: remove args member from struct archiver\n\n----------------------------------------------------------------\n[Will merge to master soon]\n\n* sb/dashless (Sun Jul 13 15:36:15 2008 +0200) 3 commits\n + Make usage strings dash-less\n + t/: Use \"test_must_fail git\" instead of \"! git\"\n + t/test-lib.sh: exit with small negagive int is ok with\n   test_must_fail\n\n* mv/dashless (Fri Jul 11 02:12:06 2008 +0200) 4 commits\n + make remove-dashes: apply to scripts and programs as well, not\n   just to builtins\n + git-bisect: use dash-less form on git bisect log\n + t1007-hash-object.sh: use quotes for the test description\n + t0001-init.sh: change confusing directory name\n\n* ls/mailinfo (Sun Jul 13 20:30:12 2008 +0200) 3 commits\n + git-mailinfo: use strbuf's instead of fixed buffers\n + Add some useful functions for strbuf manipulation.\n + Make some strbuf_*() struct strbuf arguments const.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* sp/maint-bash-completion-optim (Mon Jul 14 00:22:03 2008 +0000) 1 commit\n + bash completion: Append space after file names have been completed\n\nEarly parts were already merged to 'master' and need to be merged down to\nmaint as well, as this is about a \"performance bug\" that has been with us\nalmost forever.\n\n* ag/rewrite_one (Sat Jul 12 22:00:57 2008 +0400) 1 commit\n + Fix quadratic performance in rewrite_one.\n\n* sp/win (Fri Jul 11 18:52:42 2008 +0200) 3 commits\n + We need to check for msys as well as Windows in add--interactive.\n + Convert CR/LF to LF in tag signatures\n + Fixed text file auto-detection: treat EOF character 032 at the end\n   of file as printable\n\n* js/merge-rr (Sat Jul 12 15:56:19 2008 +0100) 2 commits\n + Move MERGE_RR from .git/rr-cache/ into .git/\n + builtin-rerere: more carefully find conflict markers\n\n* sb/rerere-lib (Wed Jul 9 14:58:57 2008 +0200) 2 commits\n + rerere: Separate libgit and builtin functions\n + builtin-rerere: more carefully find conflict markers\n\n* js/maint-pretty-mailmap (Sat Jul 12 00:28:18 2008 +0100) 1 commit\n + Add pretty format %aN which gives the author name, respecting\n   .mailmap\n\n* js/more-win (Sun Jul 13 22:31:23 2008 +0200) 3 commits\n + help (Windows): Display HTML in default browser using Windows'\n   shell API\n + help.c: Add support for htmldir relative to git_exec_path()\n + Move code interpreting path relative to exec-dir to new function\n   system_path()\n\n* jc/rebase-orig-head (Tue Jul 8 00:12:22 2008 -0400) 2 commits\n + Documentation: mention ORIG_HEAD in am, merge, and rebase\n + Teach \"am\" and \"rebase\" to mark the original position with\n   ORIG_HEAD\n\n* jc/branch-merged (Tue Jul 8 17:55:47 2008 -0700) 3 commits\n + branch --merged/--no-merged: allow specifying arbitrary commit\n + branch --contains: default to HEAD\n + parse-options: add PARSE_OPT_LASTARG_DEFAULT flag\n\n* om/rerere-careful (Mon Jul 7 14:42:48 2008 +0200) 1 commit\n + builtin-rerere: more carefully find conflict markers\n\n* ls/maint-mailinfo-patch-label (Thu Jul 10 23:41:33 2008 +0200) 1 commit\n + git-mailinfo: Fix getting the subject from the in-body [PATCH]\n   line\n\n* mv/merge-in-c (Mon Jul 14 00:09:41 2008 -0700) 20 commits\n + reduce_heads(): protect from duplicate input\n + reduce_heads(): thinkofix\n + Add a new test for git-merge-resolve\n + t6021: add a new test for git-merge-resolve\n + Teach merge.log to \"git-merge\" again\n + Build in merge\n + Fix t7601-merge-pull-config.sh on AIX\n + git-commit-tree: make it usable from other builtins\n + Add new test case to ensure git-merge prepends the custom merge\n   message\n + Add new test case to ensure git-merge reduces octopus parents when\n   possible\n + Introduce reduce_heads()\n + Introduce get_merge_bases_many()\n + Add new test to ensure git-merge handles more than 25 refs.\n + Introduce get_octopus_merge_bases() in commit.c\n + git-fmt-merge-msg: make it usable from other builtins\n + Move read_cache_unmerged() to read-cache.c\n + Add new test to ensure git-merge handles pull.twohead and\n   pull.octopus\n + Move parse-options's skip_prefix() to git-compat-util.h\n + Move commit_list_count() to commit.c\n + Move split_cmdline() to alias.c\n\n----------------------------------------------------------------\n[On Hold]\n\n* rs/imap (Wed Jul 9 22:29:02 2008 +0100) 5 commits\n - Documentation: Improve documentation for git-imap-send(1)\n - imap-send.c: more style fixes\n - imap-send.c: style fixes\n - git-imap-send: Support SSL\n - git-imap-send: Allow the program to be run from subdirectories of\n   a git tree\n\nSome people seem to prefer having this feature available also with gnutls.\nIf such a patch materializes soon, that would be good, but otherwise I'll\nmerge this as-is to 'next'.  Such an enhancement can be done in-tree on\ntop of this series.\n\n* xx/merge-in-c-into-next (Wed Jul 9 13:51:46 2008 -0700) 4 commits\n + Teach git-merge -X<option> again.\n + Merge branch 'jc/merge-theirs' into xx/merge-in-c-into-next\n + builtin-merge.c: use parse_options_step() \"incremental parsing\"\n   machinery\n + Merge branch 'ph/parseopt-step-blame' into xx/merge-in-c-into-next\n\nThis needs to be merged to master iff/when merge-theirs gets merged,\nbut I do not think this series is widely supported, so both are on hold.\n\n* jc/merge-theirs (Mon Jun 30 22:18:57 2008 -0700) 5 commits\n + Make \"subtree\" part more orthogonal to the rest of merge-\n   recursive.\n + Teach git-pull to pass -X<option> to git-merge\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -Xsubtree=foo/bar/baz -s recursive other\" now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis was previously in \"will be in master soon\" category, but it turns out\nthat the synonyms to the ones this one deletes are fairly new invention\nthat happend in 1.5.6 timeframe, and we cannot do this just yet.  Perhaps\nin 1.7.0.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n\nThis is the \"botched\" one.  Will be resurrected during 1.7.0 or 1.8.0\ntimeframe.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* gi/cherry-cache (Sat Jul 12 20:14:51 2008 -0700) 1 commit\n . cherry: cache patch-ids to avoid repeating work\n\n* lw/gitweb (Fri Jul 11 03:11:48 2008 +0200) 3 commits\n . gitweb: use new Git::Repo API, and add optional caching\n . Add new Git::Repo API\n . gitweb: add test suite with Test::WWW::Mechanize::CGI\n\n* sb/sequencer (Tue Jul 1 04:38:34 2008 +0200) 4 commits\n . Migrate git-am to use git-sequencer\n . Add git-sequencer test suite (t3350)\n . Add git-sequencer prototype documentation\n . Add git-sequencer shell prototype\n\n* jc/grafts (Wed Jul 2 17:14:12 2008 -0700) 1 commit\n - [BROKEN wrt shallow clones] Ignore graft during object transfer\n\nCloning or fetching from a repository from grafts did not send objects\nthat are hidden by grafts, but the commits in the resulting repository do\nneed these to pass fsck.  This fixes object transfer to ignore grafts.\n\nAnother fix is needed to git-prune so that it ignores grafts but treats\ncommits that are mentioned in grafts as reachable.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 2 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n\nThis is for peeling to see what's behind the blamed commit, which may or\nmay not help applications like gitweb.\n"},{"id":"83652","messageId":"7vlk01hqzz.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vfxqawlja.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-17T08:08:48Z","receivedAt":"2008-07-17T08:08:48Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be merged to the maintenance series have \"maint-\" in their names.\n\nRight now 'next' is very thin.  After today's new topics, perhaps except\nfor the submodule stuff by Pasky, are merged to 'master', we will have the\n1.6.0-rc0, and from there the usual pre-release freeze begins.\n\nDue to increased activity level from people including GSoC students, I\nexpect 'next' to stay somewhat more active than previous rounds during the\n1.6.0-rc cycle.  The request for people who usually follow 'next' is the\nsame as usual, though.  After -rc1 is tagged, please run 'master' for your\ndaily git use instead, in order to make sure 'master' does what it claims\nto do without regression.\n\nTentative schedule, my wishful thinking:\n\n - 1.6.0-rc0 (Jul 20)\n - 1.6.0-rc1 (Jul 23)\n - 1.6.0-rc2 (Jul 30)\n - 1.6.0-rc3 (Aug  6)\n - 1.6.0     (Aug 10)\n\n----------------------------------------------------------------\n[New Topics]\n\n* jc/rerere-auto-more (Wed Jul 16 20:25:18 2008 -0700) 1 commit\n - rerere.autoupdate: change the message when autoupdate is in effect\n\nThis one is for Ingo.\n\nThis changes the message rerere issues after reusing previous conflict\nresolution from \"Resolved\" to \"Staged\" when autoupdate option is in\neffect.\n\nIt is envisioned that in practice, some auto resolutions are trickier and\niffier than others, and we would want to add a feature to mark individual\nresolutions as \"this is ok to autoupdate\" or \"do not autoupdate the result\nusing this resolution even when rerere.autoupdate is in effect\" in the\nfuture.  When that happens, these messages will make the distinction\nclearer.\n\n* ap/trackinfo (Wed Jul 16 15:19:27 2008 -0400) 1 commit\n - Reword \"your branch has diverged...\" lines to reduce line length\n\nYou saw the exchange on the list.  Queued is my \"make it shorter and make\nsure variable parts are closer to left edge of the screen\" version but\nbetter alternatives are welcome.  I suspect not many people would care too\nmuch about details, as long as the message fits and does not waste screen\nreal estate.\n\n* ns/am-abort (Wed Jul 16 19:39:10 2008 +0900) 1 commit\n - git am --abort\n\nThis one is for Ted; builds on top of the recent \"am and rebase leaves\nORIG_HEAD just like reset, merge and pull does\" rather nicely.\n\n* pb/submodule (Wed Jul 16 21:11:40 2008 +0200) 7 commits\n - t7403: Submodule git mv, git rm testsuite\n - git rm: Support for removing submodules\n - git mv: Support moving submodules\n - submodule.*: Introduce simple C interface for submodule lookup by\n   path\n - git submodule add: Fix naming clash handling\n - t7400: Add short \"git submodule add\" testsuite\n - git-mv: Remove dead code branch\n\nLong overdue usability improvement series for submodule.  Very much\nwelcomed.  It would be nice to have some submodule improvements in 1.6.0.\nRealistically speaking, however, I predict that it would take us a few\nmore rounds to hit 'next' with this, and it will not be in 'master' when\n1.6.0 ships.\n\n----------------------------------------------------------------\n[Graduated to \"master\"]\n\n* sp/maint-index-pack (Tue Jul 15 04:45:34 2008 +0000) 4 commits\n + index-pack: Honor core.deltaBaseCacheLimit when resolving deltas\n + index-pack: Track the object_entry that creates each base_data\n + index-pack: Chain the struct base_data on the stack for traversal\n + index-pack: Refactor base arguments of resolve_delta into a struct\n\n* rs/rebase-checkout-not-so-quiet (Mon Jul 14 14:05:35 2008 -0700) 1 commit\n + git-rebase: report checkout failure\n\n* ag/blame (Wed Jul 16 02:00:58 2008 +0400) 2 commits\n + Do not try to detect move/copy for entries below threshold.\n + Avoid rescanning unchanged entries in search for copies.\n\nThis gives a drastic performance improvement to \"git-blame -C -C\" with\nquite straightforward and obvious code change.\n\n* rs/archive (Mon Jul 14 21:22:05 2008 +0200) 6 commits\n + archive: remove extra arguments parsing code\n + archive: unify file attribute handling\n + archive: centralize archive entry writing\n + archive: add baselen member to struct archiver_args\n + add context pointer to read_tree_recursive()\n + archive: remove args member from struct archiver\n\n* sb/dashless (Sun Jul 13 15:36:15 2008 +0200) 3 commits\n + Make usage strings dash-less\n + t/: Use \"test_must_fail git\" instead of \"! git\"\n + t/test-lib.sh: exit with small negagive int is ok with\n   test_must_fail\n\n* mv/dashless (Fri Jul 11 02:12:06 2008 +0200) 4 commits\n + make remove-dashes: apply to scripts and programs as well, not\n   just to builtins\n + git-bisect: use dash-less form on git bisect log\n + t1007-hash-object.sh: use quotes for the test description\n + t0001-init.sh: change confusing directory name\n\n* ls/mailinfo (Sun Jul 13 20:30:12 2008 +0200) 3 commits\n + git-mailinfo: use strbuf's instead of fixed buffers\n + Add some useful functions for strbuf manipulation.\n + Make some strbuf_*() struct strbuf arguments const.\n\nThis actually had a tiny regression I did not discover until I merged it\nto 'master', where a fixup has already been applied.\n\n----------------------------------------------------------------\n[On Hold]\n\n* rs/imap (Wed Jul 9 22:29:02 2008 +0100) 5 commits\n - Documentation: Improve documentation for git-imap-send(1)\n - imap-send.c: more style fixes\n - imap-send.c: style fixes\n - git-imap-send: Support SSL\n - git-imap-send: Allow the program to be run from subdirectories of\n   a git tree\n\nI said: \"Some people seem to prefer having this feature available also\nwith gnutls.  If such a patch materializes soon, that would be good, but\notherwise I'll merge this as-is to 'next'.  Such an enhancement can be\ndone in-tree on top of this series.\"  Anybody?\n\n* xx/merge-in-c-into-next (Wed Jul 9 13:51:46 2008 -0700) 4 commits\n + Teach git-merge -X<option> again.\n + Merge branch 'jc/merge-theirs' into xx/merge-in-c-into-next\n + builtin-merge.c: use parse_options_step() \"incremental parsing\"\n   machinery\n + Merge branch 'ph/parseopt-step-blame' into xx/merge-in-c-into-next\n\nThis needs to be merged to master iff/when merge-theirs gets merged,\nbut I do not think this series is widely supported, so both are on hold.\n\n* jc/merge-theirs (Mon Jun 30 22:18:57 2008 -0700) 5 commits\n + Make \"subtree\" part more orthogonal to the rest of merge-\n   recursive.\n + Teach git-pull to pass -X<option> to git-merge\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nPunting a merge by discarding your own work in conflicting parts but still\nsalvaging the parts that are cleanly automerged.  It is likely that this\nwill result in nonsense mishmash, but somehow often people want this, so\nhere they are.  The interface to the backends is updated so that you can\nsay \"git merge -Xours -Xsubtree=foo/bar/baz -s recursive other\" now.\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis was previously in \"will be in master soon\" category, but it turns out\nthat the synonyms to the ones this one deletes are fairly new invention\nthat happend in 1.5.6 timeframe, and we cannot do this just yet.  Perhaps\nin 1.7.0.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n\nThis is the \"botched\" one.  Will be resurrected during 1.7.0 or 1.8.0\ntimeframe.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* gi/cherry-cache (Sat Jul 12 20:14:51 2008 -0700) 1 commit\n . cherry: cache patch-ids to avoid repeating work\n\nThe discussion suggested that the value of having the cache itself is\niffy, but I should pick up the updated one and look at it.\n\n* lw/gitweb (Fri Jul 11 03:11:48 2008 +0200) 3 commits\n . gitweb: use new Git::Repo API, and add optional caching\n . Add new Git::Repo API\n . gitweb: add test suite with Test::WWW::Mechanize::CGI\n\n* sb/sequencer (Tue Jul 1 04:38:34 2008 +0200) 4 commits\n . Migrate git-am to use git-sequencer\n . Add git-sequencer test suite (t3350)\n . Add git-sequencer prototype documentation\n . Add git-sequencer shell prototype\n\nI haven't looked at the updated series yet.  I should, but nobody else\nseems to be looking at these patches, which is somewhat depressing but\nunderstandable.  Summer is slower ;-)\n\n* jc/grafts (Wed Jul 2 17:14:12 2008 -0700) 1 commit\n - [BROKEN wrt shallow clones] Ignore graft during object transfer\n\nCloning or fetching from a repository from grafts did not send objects\nthat are hidden by grafts, but the commits in the resulting repository do\nneed these to pass fsck.  This fixes object transfer to ignore grafts.\n\nAnother fix is needed to git-prune so that it ignores grafts but treats\ncommits that are mentioned in grafts as reachable.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 2 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n\nThis is for peeling the line from the blamed version to see what's behind\nit, which may or may not help applications like gitweb.\n"},{"id":"83685","messageId":"20080717130900.GB8421@leksak.fem-net","threadId":"12603","inReplyTo":"7vlk01hqzz.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Stephan Beyer","fromEmail":"s-beyer@gmx.net","sentAt":"2008-07-17T13:09:00Z","receivedAt":"2008-07-17T13:09:00Z","isPatch":false,"sender":{"key":"s-beyer@gmx.net","avatar":"https://avatars.githubusercontent.com/u/143889?v=4"},"body":"Hi,\n\nJunio C Hamano wrote:\n> * sb/sequencer (Tue Jul 1 04:38:34 2008 +0200) 4 commits\n>  . Migrate git-am to use git-sequencer\n>  . Add git-sequencer test suite (t3350)\n>  . Add git-sequencer prototype documentation\n>  . Add git-sequencer shell prototype\n> \n> I haven't looked at the updated series yet.  I should, but nobody else\n> seems to be looking at these patches, which is somewhat depressing but\n> understandable.  Summer is slower ;-)\n\nimho there is no need to hurry, but if I can help, just tell me how.\n\nRegards.\n\n-- \nStephan Beyer <s-beyer@gmx.net>, PGP 0x6EDDD207FCC5040F\n"},{"id":"83846","messageId":"20080718175040.6117@nanako3.lavabit.com","threadId":"12603","inReplyTo":"7vlk01hqzz.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2008-07-18T08:50:40Z","receivedAt":"2008-07-18T08:50:40Z","isPatch":false,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"Quoting Junio C Hamano <gitster@pobox.com>:\n\n> * xx/merge-in-c-into-next (Wed Jul 9 13:51:46 2008 -0700) 4 commits\n>  + Teach git-merge -X<option> again.\n>  + Merge branch 'jc/merge-theirs' into xx/merge-in-c-into-next\n>  + builtin-merge.c: use parse_options_step() \"incremental parsing\"\n>    machinery\n>  + Merge branch 'ph/parseopt-step-blame' into xx/merge-in-c-into-next\n>\n> This needs to be merged to master iff/when merge-theirs gets merged,\n> but I do not think this series is widely supported, so both are on hold.\n\nWhy do you say it is not widely supported?  I may be wrong but I think you developed these patches after somebody from the mailing list asked for this feature.\n\nYou may find out people are enthusiastic about this only after you merge it to your master branch.\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"83850","messageId":"7vr69r8sqk.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080718175040.6117@nanako3.lavabit.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-18T09:08:19Z","receivedAt":"2008-07-18T09:08:19Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Nanako Shiraishi <nanako3@lavabit.com> writes:\n\n> Quoting Junio C Hamano <gitster@pobox.com>:\n>\n>> * xx/merge-in-c-into-next (Wed Jul 9 13:51:46 2008 -0700) 4 commits\n>>  + Teach git-merge -X<option> again.\n>>  + Merge branch 'jc/merge-theirs' into xx/merge-in-c-into-next\n>>  + builtin-merge.c: use parse_options_step() \"incremental parsing\"\n>>    machinery\n>>  + Merge branch 'ph/parseopt-step-blame' into xx/merge-in-c-into-next\n>>\n>> This needs to be merged to master iff/when merge-theirs gets merged,\n>> but I do not think this series is widely supported, so both are on hold.\n>\n> Why do you say it is not widely supported?  I may be wrong but I think\n> you developed these patches after somebody from the mailing list asked\n> for this feature.\n\nWell, for one thing, I do not believe in their cause.  As I wrote in the\nlog messages for these commits (actually not these above which is a series\nfor merge fixup, but the other topic), I do not think it is a sensible\nthing to say \"let's take as much automerge results as possible to salvage\nour changes where they do not overlap with what the upstream did, but I\nwould give up our changes to places that the upstream also touched,\nbecause I do not understand what they did well enough to be able to\nresolve the merge conflicts correctly\", and \"merge -Xtheirs\" is exactly\nthat.\n\nThat also was the reason I did not add any documentation to it.  But I do\nlike the change to the infrastructure to allow passing strategy-specific\noptions through git-merge and git-pull.  Perhaps I should write something\nup, if only to salvage that -X<option> part, even though I am very much\ninclined to discard -Xtheirs (and -Xours) part.\n"},{"id":"83855","messageId":"20080718182010.6117@nanako3.lavabit.com","threadId":"12603","inReplyTo":"7vr69r8sqk.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2008-07-18T09:20:10Z","receivedAt":"2008-07-18T09:20:10Z","isPatch":false,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"Quoting Junio C Hamano <gitster@pobox.com>:\n\n> Well, for one thing, I do not believe in their cause.  As I wrote in the\n> log messages for these commits (actually not these above which is a series\n> for merge fixup, but the other topic), I do not think it is a sensible\n> thing to say \"let's take as much automerge results as possible to salvage\n> our changes where they do not overlap with what the upstream did, but I\n> would give up our changes to places that the upstream also touched,\n> because I do not understand what they did well enough to be able to\n> resolve the merge conflicts correctly\", and \"merge -Xtheirs\" is exactly\n> that.\n\nI do not know if \"I do not understand what they did well enough\" is the only reason people would want to use that feature. Isn't it better to let people decide that for themselves?\n\n> That also was the reason I did not add any documentation to it.  But I do\n> like the change to the infrastructure to allow passing strategy-specific\n> options through git-merge and git-pull.  Perhaps I should write something\n> up, if only to salvage that -X<option> part, even though I am very much\n> inclined to discard -Xtheirs (and -Xours) part.\n\nI think such a documentation will help people to decide if 'theirs' option makes sense for their workflow.\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"83857","messageId":"7v63r38r4r.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080718182010.6117@nanako3.lavabit.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-18T09:43:00Z","receivedAt":"2008-07-18T09:43:00Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Nanako Shiraishi <nanako3@lavabit.com> writes:\n\n> Quoting Junio C Hamano <gitster@pobox.com>:\n>\n>> ... I do not think it is a sensible\n>> thing to say \"let's take as much automerge results as possible to salvage\n>> our changes where they do not overlap with what the upstream did, but I\n>> would give up our changes to places that the upstream also touched,\n>> because I do not understand what they did well enough to be able to\n>> resolve the merge conflicts correctly\", and \"merge -Xtheirs\" is exactly\n>> that.\n>\n> I do not know if \"I do not understand what they did well enough\" is the\n> only reason people would want to use that feature. Isn't it better to\n> let people decide that for themselves?\n\nWe have been saying that we will give long enough rope to people, but at\nthe same time I believe there are things that the world is better without,\nand a feature that would only encourage a bad workflow is one of them.\nThe way I try to tell such a (mis)feature from a feature that can be\nuseful to people other than myself is to ask people why they would want\nsuch a feature and what their response to possible downsides of such a\nfeature.\n\nDon't get me wrong.  Choice is good, and it is also good that some people\nmay choose differently from me.  After all, we are different people with\ndifferent workflows.\n\nBut they should be able to explain the reason why they choose something\nclearly, at least well enough to convince themselves to choose it.  If\nthey can't come up with a rational explanation, it becomes an irrational\n\"because I want to\" (and \"because I can, now that you have already coded\nit\").  That leads to feeping creaturism and a bad feature that the world\nis better without.\n\nI haven't heard an explanation other than the one I said above, and I do\nnot think that explanation is rational.\n\n\tSide note. Even though I invented rerere and it turned out to be a\n\tgreat ti[mp]esaver, I do want to validate the reused resolution\n\tmakes sense in the new context every time rerere does its job.\n\tRecently Ingo wanted the auto resolution to be staged\n\tautomatically, and rerere.autoupdate was born.  I was initially\n\tvery much against it, but his description of the workflow where it\n\twould be useful was convincing enough.  This \"convincing\" does not\n\thave to be \"Yeah, it's useful to me as well; thanks for explaining\n\tit to me\".  Even though my workflow might never be helped with\n\tsuch a feature, I can see that the different workflow he presented\n\twould be useful to people other than myself, and I could agree\n\tthat the new feature would help such a workflow.  This was a good\n\texample of \"choosing something I initially thought would be\n\tdetrimental with a good reason, and with a good explanation making\n\tme realize that my initial thought was too narrow\".\n\n> I think such a documentation will help people to decide if 'theirs'\n> option makes sense for their workflow.\n\nSo here it is.\n\n-- >8 --\n[PATCH] Document that merge strategies can now take their own options\n\nAlso document the recently added -Xtheirs, -Xours and -Xsubtree[=path]\noptions to the merge-recursive strategy.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Documentation/merge-options.txt    |    4 ++++\n Documentation/merge-strategies.txt |   26 ++++++++++++++++++++++++++\n 2 files changed, 30 insertions(+), 0 deletions(-)\n\ndiff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt\nindex ffbc6e9..96aec48 100644\n--- a/Documentation/merge-options.txt\n+++ b/Documentation/merge-options.txt\n@@ -58,3 +58,7 @@\n \tIf there is no `-s` option, a built-in list of strategies\n \tis used instead (`git-merge-recursive` when merging a single\n \thead, `git-merge-octopus` otherwise).\n+\n+-X<option>::\n+\tPass merge strategy specific option through to the merge\n+\tstrategy.\ndiff --git a/Documentation/merge-strategies.txt b/Documentation/merge-strategies.txt\nindex 1276f85..39ff0a8 100644\n--- a/Documentation/merge-strategies.txt\n+++ b/Documentation/merge-strategies.txt\n@@ -1,6 +1,11 @@\n MERGE STRATEGIES\n ----------------\n \n+The merge mechanism ('git-merge' and 'git-pull' commands) allows the\n+backend 'merge strategies' to be chosen with `-s` option.  Some strategies\n+can also take their own options, which can be passed by giving `-X<option>`\n+arguments to 'git-merge' and/or 'git-pull'.\n+\n resolve::\n \tThis can only resolve two heads (i.e. the current branch\n \tand another branch you pulled from) using 3-way merge\n@@ -20,6 +25,27 @@ recursive::\n \tAdditionally this can detect and handle merges involving\n \trenames.  This is the default merge strategy when\n \tpulling or merging one branch.\n++\n+The 'recursive' strategy can take the following options:\n+\n+ours;;\n+\tThis option forces conflicting hunks to be auto-resolved cleanly by\n+\tfavoring 'our' version.  Changes from the other tree that do not\n+\tconflict with our side are reflected to the merge result.\n++\n+This should not be confused with the 'ours' merge strategy, which does not\n+even look at what the other tree contains at all.  IOW, it discards everything\n+the other tree did, declaring 'our' history contains all that happened in it.\n+\n+theirs;;\n+\tThis is opposite of 'ours'.\n+\n+subtree[=path];;\n+\tThis option is a more advanced form of 'subtree' strategy, where\n+\tthe strategy makes a guess on how two trees must be shifted to\n+\tmatch with each other when merging.  Instead, the specified path\n+\tis prefixed (or stripped from the beginning) to make the shape of\n+\ttwo trees to match.\n \n octopus::\n \tThis resolves more than two-head case, but refuses to do\n-- \n1.5.6.3.573.gd2d2\n"},{"id":"83858","messageId":"20080718094404.GB32184@machine.or.cz","threadId":"12603","inReplyTo":"20080718182010.6117@nanako3.lavabit.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-07-18T09:44:04Z","receivedAt":"2008-07-18T09:44:04Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"On Fri, Jul 18, 2008 at 06:20:10PM +0900, Nanako Shiraishi wrote:\n> I do not know if \"I do not understand what they did well enough\" is the only reason people would want to use that feature. Isn't it better to let people decide that for themselves?\n\nIt is dangerous to introduce new options just because we think someone,\nsometimes might find it useful, especially if they potentially encourage\na bad workflow. Adding options and commands is expensive since it\ncomplicates the UI further, thus we should add further only when we have\ngood reason for it.\n\n> > That also was the reason I did not add any documentation to it.\n\nI was actually looking for something like this based on some question on\n#git (about git pull -s theirs possibility), and did stumble upon these\npatches, but quickly gave up on them since it wasn't immediately clear\nfor me from the patch description exactly how the workflow looks like\n(it doesn't really seem to work like the opposite of -s ours nor is it a\nseparate strategy... huh) and the options were completely undocumented.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nGNU, n. An animal of South Africa, which in its domesticated state\nresembles a horse, a buffalo and a stag. In its wild condition it is\nsomething like a thunderbolt, an earthquake and a cyclone. -- A. Pierce\n"},{"id":"83860","messageId":"7vtzen7bul.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080718094404.GB32184@machine.or.cz","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-18T09:58:26Z","receivedAt":"2008-07-18T09:58:26Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n> On Fri, Jul 18, 2008 at 06:20:10PM +0900, Nanako Shiraishi wrote:\n>> I do not know if \"I do not understand what they did well enough\" is the only reason people would want to use that feature. Isn't it better to let people decide that for themselves?\n>\n> It is dangerous to introduce new options just because we think someone,\n> sometimes might find it useful, especially if they potentially encourage\n> a bad workflow. Adding options and commands is expensive since it\n> complicates the UI further, thus we should add further only when we have\n> good reason for it.\n>\n>> > That also was the reason I did not add any documentation to it.\n>\n> I was actually looking for something like this based on some question on\n> #git (about git pull -s theirs possibility), and did stumble upon these\n> patches, but quickly gave up on them since it wasn't immediately clear\n> for me from the patch description exactly how the workflow looks like\n> (it doesn't really seem to work like the opposite of -s ours nor is it a\n> separate strategy... huh) and the options were completely undocumented.\n\nHeh, now you have some readings to do ;-)\n\nI tried not to sound too negative when describing -Xours and -Xtheirs\nthere, but actually I think \"-s theirs\" is even worse.  It is how you\nwould discard what you did (perhaps because the other side has much better\nsolution than your hack), but that can be much more easily and cleanly\ndone with:\n\n\t$ git reset --hard origin\n\nSome poeple might say \"But with 'merge -s theirs', I can keep what I did,\ntoo\".  That reset is simply discarding what I did.\n\nThat logic also is flawed.  You can instead:\n\n\t$ git branch i-was-stupid\n        $ git reset --hard origin\n\nif you really want to keep record of your failure.\n\nOne big problem \"-s theirs\" has, compared to the above \"reset to origin,\ndiscarding or setting aside the failed history\" is that your 'master'\nhistory that your further development is based on will keep your failed\ncrap in it forever if you did \"-s theirs\".  Hopefully you will become a\nbetter programmer over time, and you may eventually have something worth\nsharing with the world near the tip of your master branch.  When that\nhappens, however, you _cannot_ offer your master branch to be pulled by\nthe upstream, as the wider world will not be interested in your earlier\nmistakes at all.\n"},{"id":"83868","messageId":"alpine.DEB.1.00.0807181351370.3932@eeepc-johanness","threadId":"12603","inReplyTo":"7v63r38r4r.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-18T11:55:50Z","receivedAt":"2008-07-18T11:55:50Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 18 Jul 2008, Junio C Hamano wrote:\n\n> +The 'recursive' strategy can take the following options:\n> +\n> +ours;;\n\nYou still have not addressed the issue that you can specify multiple \nstrategies, or even a single _wrong_ one.  So:\n\n\t$ git merge -s stupid -Xours\n\nwould not fail at all, but definitely not do the right thing either (it \ndisobeys a direct command of the user).\n\nApart from having to choose different -X option names for the different \nbackends, to avoid them from clashing when you specify multiple \nstrategies, you also deprive the user from being able to try the _same_ \nbackend with different options.\n\nIOW all my objections to the -X option (even that it does not fit with our \nshort option parsing paradigm) still apply.\n\nWe already have the \"-S\" wart, let's not add to that pile.\n\nCiao,\nDscho\n"},{"id":"83869","messageId":"alpine.DEB.1.00.0807181356010.3932@eeepc-johanness","threadId":"12603","inReplyTo":"20080718175040.6117@nanako3.lavabit.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-18T11:56:52Z","receivedAt":"2008-07-18T11:56:52Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 18 Jul 2008, Nanako Shiraishi wrote:\n\n> Quoting Junio C Hamano <gitster@pobox.com>:\n> \n> > * xx/merge-in-c-into-next (Wed Jul 9 13:51:46 2008 -0700) 4 commits\n> >  + Teach git-merge -X<option> again.\n> >  + Merge branch 'jc/merge-theirs' into xx/merge-in-c-into-next\n> >  + builtin-merge.c: use parse_options_step() \"incremental parsing\"\n> >    machinery\n> >  + Merge branch 'ph/parseopt-step-blame' into xx/merge-in-c-into-next\n> >\n> > This needs to be merged to master iff/when merge-theirs gets merged, \n> > but I do not think this series is widely supported, so both are on \n> > hold.\n> \n> Why do you say it is not widely supported?  I may be wrong but I think \n> you developed these patches after somebody from the mailing list asked \n> for this feature.\n\nAsking for a feature, and then not doing a single thing to defend why it \nmakes sense, of a single person, who does not even speak up now, does not \ncount for \"wide support\".\n\nCiao,\nDscho\n"},{"id":"83935","messageId":"20080719141329.6117@nanako3.lavabit.com","threadId":"12603","inReplyTo":"7vtzen7bul.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2008-07-19T05:13:29Z","receivedAt":"2008-07-19T05:13:29Z","isPatch":false,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"Quoting Junio C Hamano <gitster@pobox.com>:\n\n> I tried not to sound too negative when describing -Xours and -Xtheirs\n> there, but actually I think \"-s theirs\" is even worse.  It is how you\n> would discard what you did (perhaps because the other side has much better\n> solution than your hack), but that can be much more easily and cleanly\n> done with:\n>\n> \t$ git reset --hard origin\n>\n> Some poeple might say \"But with 'merge -s theirs', I can keep what I did,\n> too\".  That reset is simply discarding what I did.\n>\n> That logic also is flawed.  You can instead:\n>\n> \t$ git branch i-was-stupid\n>       $ git reset --hard origin\n>\n> if you really want to keep record of your failure.\n>\n> One big problem \"-s theirs\" has, compared to the above \"reset to origin,\n> discarding or setting aside the failed history\" is that your 'master'\n> history that your further development is based on will keep your failed\n> crap in it forever if you did \"-s theirs\".  Hopefully you will become a\n> better programmer over time, and you may eventually have something worth\n> sharing with the world near the tip of your master branch.  When that\n> happens, however, you _cannot_ offer your master branch to be pulled by\n> the upstream, as the wider world will not be interested in your earlier\n> mistakes at all.\n\nThanks for sharing your insight.  Perhaps the above can become a separate pargraph to explains why there is no \"theirs\" merge strategy somewhere in the manual?\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"83936","messageId":"7vabge30dh.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807181351370.3932@eeepc-johanness","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-19T05:32:10Z","receivedAt":"2008-07-19T05:32:10Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> On Fri, 18 Jul 2008, Junio C Hamano wrote:\n>\n>> +The 'recursive' strategy can take the following options:\n>> +\n>> +ours;;\n>\n> You still have not addressed the issue that you can specify multiple \n> strategies,...\n\nEven though multiple -s parameters are supported, I know you have been\nhere long enough in git scene to remember how it came about.  I've seen\nsome third-party documents that talk about our ability to \"try multiple\nstrategies and pick the best one\" as one of the unique features, but\nanybody who was there knows that it was just a failed experiment that we\ndid not bother removing.\n\nThe thing is, trying multiple strategies was a cute idea and it was quite\nstraightforward to implement.  But picking the best one is the much more\nimportant part, and judging whose result is the best shouldn't be done\nwith just a naïve \"how many conflicting paths remain there?\" metric\n(c.f. $gmane/87297 which talks about \"stupid\" but the argument is exactly\nthe same --- smaller number of conflicts may not necessarily be the\neasiest to resolve nor the right resolution).  I would be surprised if\nanybody uses multiple -s options in their daily workflow, even though I\nwould not be surprised if people tried to use it just as an experiment and\nfor its entertainment value once or maybe twice.  After all, I invented\nthe multiple strategy support for amusement, not from any practical real\nworld needs ;-)\n\nSo I do not consider that a convincing argument at all.\n\n> ... or even a single _wrong_ one.  So:\n>\n> \t$ git merge -s stupid -Xours\n>\n> would not fail at all, but definitely not do the right thing either (it \n> disobeys a direct command of the user).\n\nIt does fail gracefully, though.\n\n    $ git merge -s resolve -Xours next\n    Trying really trivial in-index merge...\n    error: Untracked working tree file '.gitattributes' would be overwritten by merge.\n    Nope.\n    fatal: Not a valid object name --ours\n    Merge with strategy resolve failed.\n\nI consider this falls into \"You say it hurts?  Don't do that, then\"\ncategory.\n\nThe error message will naturally improve, once we teach the merge strategy\nbackends that they can be given --<option> in front of the usual\n<base>... -- <ents>... parameters, and there is no risk of ambiguity\nbecause no object names begin with a dash.\n\nHaving said all that, I do not have any reason to push for -Xours/theirs\nmyself.  I've made myself very clear from the beginning that what these\noptions do is a bad idea, just as \"-s theirs\" is a bad idea.  These\nencourage a broken workflow and I do not see a clear upside, however\nnarrow, and you and Pasky seem to agree with me (heh, isn't it a rare\noccasion that all three of us agree on something these days? ;-)\n\nI won't shed tears to see them go.\n\nHowever, I do think it is wrong to deny that it will eventually be\nnecessary for us to be able to pass strategy specific options via the\ngit-merge frontend driver to the strategy backend.  The primary reason why\nI wrote \"subtree\" strategy to _guess_ how to shift trees was because there\nwas no way to pass \"how the end user wants to shift them\" to the strategy\nbackend over \"pull -- merge -- merge-subtree\" callchain.  Coming up with\nthe algorithm was fun, but that was secondary.\n\nIf we allow users to say -Xsubtree=<path>, it would be a true improvement\nto a tool that is used in real life.  Unlike \"multiple -s strategy\"\nsupport that I think nobody ever uses in practice (on which part of your\nobjection is based), \"-s subtree\" has been useful in real life, and you\ncan verify that claim easily by counting how many times I've used that in\ngit.git history yourself.\n\nEven though I do not care deeply about the syntax (and if you do not like\nthe \"-X\" as the external option introducer, you are welcome to pick a\ndifferent notation and send in a patch), it would help for example the\nvanilla \"recursive\" strategy to allow the user, when dealing with really\ntricky merge, to influence the rename threshold score it uses by passing\nit as a strategy-specific option.\n\nAs a conclusion of this discussion, I'll discard xx/merge-in-c-into-next\nbranch from \"next\", at the beginning of post-1.6.0 cycle.  We might in the\nfuture need to resurrect only the -X<option> part to allow us to pass\nstrategy specific options (that are not \"ours/theirs\"), but there is no\nimmediate need for it, other than -Xsubtree=<path>.  If somebody wants to\nstep up and give the custom rename threshold to the recursive strategy,\nkeeping that code to do -X<option> might help that too, though.\n"},{"id":"83942","messageId":"alpine.DEB.1.00.0807191311220.3305@eeepc-johanness","threadId":"12603","inReplyTo":"7vabge30dh.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-19T11:19:46Z","receivedAt":"2008-07-19T11:19:46Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 18 Jul 2008, Junio C Hamano wrote:\n\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> > On Fri, 18 Jul 2008, Junio C Hamano wrote:\n> >\n> >> +The 'recursive' strategy can take the following options:\n> >> +\n> >> +ours;;\n> >\n> > You still have not addressed the issue that you can specify multiple \n> > strategies,...\n> \n> Even though multiple -s parameters are supported, I know you have been \n> here long enough in git scene to remember how it came about.  I've seen \n> some third-party documents that talk about our ability to \"try multiple \n> strategies and pick the best one\" as one of the unique features, but \n> anybody who was there knows that it was just a failed experiment that we \n> did not bother removing.\n\nI think that we made it hard for that experiment to succeed, by \ndisallowing custom merge strategies.\n\nSee\n\nhttp://git.or.cz/gitwiki/SoC2007Ideas#head-cfde15f16950c2579a89cc109762e911546e6fe3\n\nfor an idea that would make complete sense as a _fallback_ strategy.  \nFallback, because it is definitely too slow to be the default.\n\nYes, I agree, if all strategies fail, it is dubitable that we find a \nmetric that will always find the \"best\" one.  But if one fails and the \nnext one does not, it is obvious what is correct.\n\nSo I still feel that \"-s subtree=<blabla>,recursive=theirs\" would be a \nviable way to go.  And more intuitive than \"-X\".\n\nI'll just ask Miklos what he thinks of the idea, and to write the patch if \nhe likes it, once he's back from the saddle. :-)\n\nCiao,\nDscho\n"},{"id":"83949","messageId":"7v4p6l3jbm.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807191311220.3305@eeepc-johanness","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-19T16:55:09Z","receivedAt":"2008-07-19T16:55:09Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> Yes, I agree, if all strategies fail, it is dubitable that we find a \n> metric that will always find the \"best\" one.  But if one fails and the \n> next one does not, it is obvious what is correct.\n\nNot at all.  Imagine the case where one of them is either ours or theirs.\n"},{"id":"83980","messageId":"alpine.DEB.1.00.0807200113440.3305@eeepc-johanness","threadId":"12603","inReplyTo":"7v4p6l3jbm.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-19T23:16:13Z","receivedAt":"2008-07-19T23:16:13Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sat, 19 Jul 2008, Junio C Hamano wrote:\n\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> > Yes, I agree, if all strategies fail, it is dubitable that we find a \n> > metric that will always find the \"best\" one.  But if one fails and the \n> > next one does not, it is obvious what is correct.\n> \n> Not at all.  Imagine the case where one of them is either ours or \n> theirs.\n\nBut then it is not the _default_ at all!\n\nIt is what the _user_ _asked_ for.\n\nSo this is what the user gets.\n\nWith Git, the user is not ignored (like GNOME does, to \"help\" the user).  \nWith Git, the user _gets_ what she asked for, even if the question does \nnot make sense.\n\nCiao,\nDscho\n"},{"id":"83987","messageId":"7v3am5iae8.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"7vlk01hqzz.fsf@gitster.siamese.dyndns.org","subject":"What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-20T01:58:55Z","receivedAt":"2008-07-20T01:58:55Z","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\nwith '-' are only in 'pu' while commits prefixed with '+' are\nin 'next'.\n\nThe topics list the commits in reverse chronological order.  The topics\nmeant to be merged to the maintenance series have \"maint-\" in their names.\n\nDue to increased activity level from people including GSoC students, I\nexpect 'next' to stay somewhat more active than previous rounds during the\n1.6.0-rc cycle.  The request for people who usually follow 'next' is the\nsame as usual, though.  After -rc1 is tagged, please run 'master' for your\ndaily git use instead, in order to make sure 'master' does what it claims\nto do without regression.\n\nTentative schedule, my wishful thinking:\n\n - 1.6.0-rc0 (Jul 20)\n - 1.6.0-rc1 (Jul 23)\n - 1.6.0-rc2 (Jul 30)\n - 1.6.0-rc3 (Aug  6)\n - 1.6.0     (Aug 10)\n\nNo real activity on 'next', as I was busy tending bugfixes and pushing out\nv1.5.6.4 today.\n\n----------------------------------------------------------------\n[Will merge to \"master\" soon]\n\n* ns/am-abort (Wed Jul 16 19:39:10 2008 +0900) 1 commit\n + git am --abort\n\nThis one is for Ted; builds on top of the recent \"am and rebase leaves\nORIG_HEAD just like reset, merge and pull does\" rather nicely.\n\n* jc/rerere-auto-more (Wed Jul 16 20:25:18 2008 -0700) 1 commit\n + rerere.autoupdate: change the message when autoupdate is in effect\n\nThis one is for Ingo.\n\nThis changes the message rerere issues after reusing previous conflict\nresolution from \"Resolved\" to \"Staged\" when autoupdate option is in\neffect.\n\nIt is envisioned that in practice, some auto resolutions are trickier and\niffier than others, and we would want to add a feature to mark individual\nresolutions as \"this is ok to autoupdate\" or \"do not autoupdate the result\nusing this resolution even when rerere.autoupdate is in effect\" in the\nfuture.  When that happens, these messages will make the distinction\nclearer.\n\n* ap/trackinfo (Wed Jul 16 15:19:27 2008 -0400) 1 commit\n + Reword \"your branch has diverged...\" lines to reduce line length\n\n----------------------------------------------------------------\n[Stalled/Needs more work]\n\n* rs/imap (Wed Jul 9 22:29:02 2008 +0100) 5 commits\n - Documentation: Improve documentation for git-imap-send(1)\n - imap-send.c: more style fixes\n - imap-send.c: style fixes\n - git-imap-send: Support SSL\n - git-imap-send: Allow the program to be run from subdirectories of\n   a git tree\n\nI said: \"Some people seem to prefer having this feature available also\nwith gnutls.  If such a patch materializes soon, that would be good, but\notherwise I'll merge this as-is to 'next'.  Such an enhancement can be\ndone in-tree on top of this series.\"  Anybody?\n\n* gi/cherry-cache (Sat Jul 12 20:14:51 2008 -0700) 1 commit\n . cherry: cache patch-ids to avoid repeating work\n\nThe discussion suggested that the value of having the cache itself is\niffy, but I should pick up the updated one and look at it.\n\n* lw/gitweb (Fri Jul 11 03:11:48 2008 +0200) 3 commits\n . gitweb: use new Git::Repo API, and add optional caching\n . Add new Git::Repo API\n . gitweb: add test suite with Test::WWW::Mechanize::CGI\n\n* sb/sequencer (Tue Jul 1 04:38:34 2008 +0200) 4 commits\n . Migrate git-am to use git-sequencer\n . Add git-sequencer test suite (t3350)\n . Add git-sequencer prototype documentation\n . Add git-sequencer shell prototype\n\nI haven't looked at the updated series yet.  I should, but nobody else\nseems to be looking at these patches, which is somewhat depressing but\nunderstandable.  Summer is slower ;-)\n\n* pb/submodule (Wed Jul 16 21:11:40 2008 +0200) 7 commits\n . t7403: Submodule git mv, git rm testsuite\n . git rm: Support for removing submodules\n . git mv: Support moving submodules\n . submodule.*: Introduce simple C interface for submodule lookup by\n   path\n . git submodule add: Fix naming clash handling\n . t7400: Add short \"git submodule add\" testsuite\n . git-mv: Remove dead code branch\n\nLong overdue usability improvement series for submodule.  Very much\nwelcomed.  It would be nice to have some submodule improvements in 1.6.0,\nbut it would take us a few more rounds to hit 'next' with this, and it\nwill not be in 'master' when 1.6.0 ships.\n\n* jc/grafts (Wed Jul 2 17:14:12 2008 -0700) 1 commit\n - [BROKEN wrt shallow clones] Ignore graft during object transfer\n\nCloning or fetching from a repository from grafts did not send objects\nthat are hidden by grafts, but the commits in the resulting repository do\nneed these to pass fsck.  This fixes object transfer to ignore grafts.\n\nAnother fix is needed to git-prune so that it ignores grafts but treats\ncommits that are mentioned in grafts as reachable.\n\n* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 2 commits\n - blame: show \"previous\" information in --porcelain/--incremental\n   format\n - git-blame: refactor code to emit \"porcelain format\" output\n\nThis is for peeling the line from the blamed version to see what's behind\nit, which may or may not help applications like gitweb.\n\n----------------------------------------------------------------\n[Will drop]\n\n* xx/merge-in-c-into-next (Wed Jul 9 13:51:46 2008 -0700) 4 commits\n + Teach git-merge -X<option> again.\n + Merge branch 'jc/merge-theirs' into xx/merge-in-c-into-next\n + builtin-merge.c: use parse_options_step() \"incremental parsing\"\n   machinery\n + Merge branch 'ph/parseopt-step-blame' into xx/merge-in-c-into-next\n\n* jc/merge-theirs (Fri Jul 18 02:43:00 2008 -0700) 6 commits\n - Document that merge strategies can now take their own options\n + Make \"subtree\" part more orthogonal to the rest of merge-\n   recursive.\n + Teach git-pull to pass -X<option> to git-merge\n + Teach git-merge to pass -X<option> to the backend strategy module\n + git-merge-recursive-{ours,theirs}\n + git-merge-file --ours, --theirs\n\nIt appears nobody wants \"theirs\" nor \"ours\", so I'll soon apply a\nwholesale revert for these series to 'next', and then these will be\ndropped when we rewind 'next' after 1.6.0 final.\n\nPlease make sure next time somebody asks \"ours/theirs\" merge on the list\nand #git s/he is quickly told that it was unanimously rejected so that\npeople do not have to waste time rehashing the topic ever again.\n\n----------------------------------------------------------------\n[On Hold]\n\n* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit\n + merge: remove deprecated summary and diffstat options and config\n   variables\n\nThis was previously in \"will be in master soon\" category, but it turns out\nthat the synonyms to the ones this one deletes are fairly new invention\nthat happend in 1.5.6 timeframe, and we cannot do this just yet.  Perhaps\nin 1.7.0.\n\n* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 2 commits\n + Revert \"Make clients ask for \"git program\" over ssh and local\n   transport\"\n + Make clients ask for \"git program\" over ssh and local transport\n\nThis is the \"botched\" one.  Will be resurrected during 1.7.0 or 1.8.0\ntimeframe.\n\n* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit\n - diff: enable \"too large a rename\" warning when -M/-C is explicitly\n   asked for\n\nThis would be the right thing to do for command line use, but gitk will be\nhit due to tcl/tk's limitation, so I am holding this back for now.\n"},{"id":"83988","messageId":"loom.20080720T022105-750@post.gmane.org","threadId":"12603","inReplyTo":"20080714124327.GL10151@machine.or.cz","subject":"Re: Closing the merge window for 1.6.0","fromName":"Nick Andrew","fromEmail":"nick@nick-andrew.net","sentAt":"2008-07-20T02:23:25Z","receivedAt":"2008-07-20T02:23:25Z","isPatch":false,"sender":{"key":"nick@nick-andrew.net","avatar":"https://gravatar.com/avatar/85f25a67ca6eaa4016ed374f6d07f3cd853c886aeb7e1507eb7dbc47b00082fe?d=mp&s=160"},"body":"Petr Baudis <pasky <at> suse.cz> writes:\n\n>   Upgrading to newer version, *especially* if it's over then 1.4 - 1.5\n> boundary, is not something you could seriously expect Debian to do.\n> At least I actually _hope_ so, as a sysadmin of a network of 40 etch\n> workstations.\n\nPerhaps Debian could add a \"git1.5\" package to the etch repository. That\nwill guarantee that no current etch users of git 1.4.4.4 will be affected,\nand they can choose if they want, to install git1.5.\n\nNick.\n"},{"id":"84011","messageId":"20080720192042.6117@nanako3.lavabit.com","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807181356010.3932@eeepc-johanness","subject":"Re: What's cooking in git.git (topics)","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2008-07-20T10:20:42Z","receivedAt":"2008-07-20T10:20:42Z","isPatch":false,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"Quoting Johannes Schindelin <Johannes.Schindelin@gmx.de>:\n\n> On Fri, 18 Jul 2008, Nanako Shiraishi wrote:\n>\n>> Quoting Junio C Hamano <gitster@pobox.com>:\n>> > This needs to be merged to master iff/when merge-theirs gets merged, \n>> > but I do not think this series is widely supported, so both are on \n>> > hold.\n>> \n>> Why do you say it is not widely supported?  I may be wrong but I think \n>> you developed these patches after somebody from the mailing list asked \n>> for this feature.\n>\n> Asking for a feature, and then not doing a single thing to defend why it \n> makes sense, of a single person, who does not even speak up now, does not \n> count for \"wide support\".\n\nFor the record, I was not the one who asked for such a feature.\n\nIt seems that the conclusion of the discussion is that \"theirs\" promotes a bad workflow, and I am happy with that.\n\n-- \nNanako Shiraishi\nhttp://ivory.ap.teacup.com/nanako3/\n"},{"id":"84034","messageId":"20080720130407.GF10347@genesis.frugalware.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807191311220.3305@eeepc-johanness","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-07-20T13:04:07Z","receivedAt":"2008-07-20T13:04:07Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Sat, Jul 19, 2008 at 01:19:46PM +0200, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:\n> So I still feel that \"-s subtree=<blabla>,recursive=theirs\" would be a \n> viable way to go.  And more intuitive than \"-X\".\n> \n> I'll just ask Miklos what he thinks of the idea, and to write the patch if \n> he likes it, once he's back from the saddle. :-)\n\nI think there are three steps here.\n\nFirst, currently you can specify multiple strategies in the config\n(pull.twohead, pull.octopus) using a space separated list. If we want to\nchange it to a coma-separated list, should we care about backwards\ncompatibility? There are tests for this, but it's undocumented (and my\npatch to document it was rejected, saying we should not encourage people\nto use it).\n\nSecond, we could allow custom strategies, as we started to discuss here:\n\nhttp://thread.gmane.org/gmane.comp.version-control.git/86584/focus=87684\n\nThird, it would be nice to allow passing extra parameter(s) to the\nbackends, but I do not know what concept is the best here. The\nstrategy1=foo,stategy2=bar limits the input to a single string. Is that\nenough? Given that recursive=theirs was considered harmful, we don't\nhave too much examples; for subtree the only parameter I could think of\nis the path, so a string there is enough.\n\nHowever, further strategies, like blame, could take more parameters,\nlike git blame -C<num> -M<othernum>. Or do I just overcomplicate it? ;-)\n"},{"id":"84036","messageId":"alpine.DEB.1.00.0807201512560.3305@eeepc-johanness","threadId":"12603","inReplyTo":"20080720130407.GF10347@genesis.frugalware.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-20T13:16:54Z","receivedAt":"2008-07-20T13:16:54Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 20 Jul 2008, Miklos Vajna wrote:\n\n> First, currently you can specify multiple strategies in the config\n> (pull.twohead, pull.octopus) using a space separated list.\n\nOh, I did not mean to change that.  I just misremembered.\n\n> Second, we could allow custom strategies, as we started to discuss here:\n> \n> http://thread.gmane.org/gmane.comp.version-control.git/86584/focus=87684\n\nIn my opinion, this would make it easier for interested parties to start \nimplementing that blame-based merge strategy I mentioned.\n\n> Third, it would be nice to allow passing extra parameter(s) to the\n> backends, but I do not know what concept is the best here. The\n> strategy1=foo,stategy2=bar limits the input to a single string. Is that\n> enough? Given that recursive=theirs was considered harmful, we don't\n> have too much examples; for subtree the only parameter I could think of\n> is the path, so a string there is enough.\n> \n> However, further strategies, like blame, could take more parameters,\n> like git blame -C<num> -M<othernum>. Or do I just overcomplicate it? ;-)\n\nThe common solution is like with gcc's -Wl option, which translates \ncommata into spaces, like so: \"-Wl,--machine,i386\" is added as \"--machine \ni386\" to the linker command line.\n\nOur own cvsimport implements the same principle:\n\n\t$ git cvsimport -p -b,HEAD\n\nwill only update the main branch.\n\nCiao,\nDscho\n"},{"id":"84044","messageId":"7vd4l88l77.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080720130407.GF10347@genesis.frugalware.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-20T18:27:56Z","receivedAt":"2008-07-20T18:27:56Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Miklos Vajna <vmiklos@frugalware.org> writes:\n\n> Third, it would be nice to allow passing extra parameter(s) to the\n> backends, but I do not know what concept is the best here. The\n> strategy1=foo,stategy2=bar limits the input to a single string. Is that\n> enough? Given that recursive=theirs was considered harmful, we don't\n> have too much examples;...\n\nI personally think -sstrategy=string1,string2,... is simply a bad taste.\n\nWhy force yourself to parse things by having the users to concatenate\nsomething that the user could give us separated?  If you care about the\norder and association between strategy and their options, you can always\ndo:\n\n\t-s strategy1 -X option-1-for-strategy-1 -X option-2-for-strategy-1 \\\n\t-s strategy2 -X option-1-for-strategy-2 ...\n"},{"id":"84052","messageId":"alpine.DEB.1.00.0807202102370.3305@eeepc-johanness","threadId":"12603","inReplyTo":"7vd4l88l77.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-20T19:07:06Z","receivedAt":"2008-07-20T19:07:06Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 20 Jul 2008, Junio C Hamano wrote:\n\n> Miklos Vajna <vmiklos@frugalware.org> writes:\n> \n> > Third, it would be nice to allow passing extra parameter(s) to the\n> > backends, but I do not know what concept is the best here. The\n> > strategy1=foo,stategy2=bar limits the input to a single string. Is that\n> > enough? Given that recursive=theirs was considered harmful, we don't\n> > have too much examples;...\n> \n> I personally think -sstrategy=string1,string2,... is simply a bad taste.\n> \n> Why force yourself to parse things by having the users to concatenate\n> something that the user could give us separated?  If you care about the\n> order and association between strategy and their options, you can always\n> do:\n> \n> \t-s strategy1 -X option-1-for-strategy-1 -X option-2-for-strategy-1 \\\n> \t-s strategy2 -X option-1-for-strategy-2 ...\n\nYou mean something like\n\n\t$ git merge -s subtree -X --path -X git-gui/ git-gui/master\n\nWow. :-)\n\nSpeechless,\nDscho\n"},{"id":"84057","messageId":"7vd4l85nv5.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"alpine.DEB.1.00.0807202102370.3305@eeepc-johanness","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-20T19:58:38Z","receivedAt":"2008-07-20T19:58:38Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n>> I personally think -sstrategy=string1,string2,... is simply a bad taste.\n>> \n>> Why force yourself to parse things by having the users to concatenate\n>> something that the user could give us separated?  If you care about the\n>> order and association between strategy and their options, you can always\n>> do:\n>> \n>> \t-s strategy1 -X option-1-for-strategy-1 -X option-2-for-strategy-1 \\\n>> \t-s strategy2 -X option-1-for-strategy-2 ...\n>\n> You mean something like\n>\n> \t$ git merge -s subtree -X --path -X git-gui/ git-gui/master\n>\n> Wow. :-)\n\nI would envision it to be more like:\n\n\t$ git merge -s subtree -Xpath=git-gui git-gui/master\n\nwhich git-merge internally would turn into:\n\n\t$ git-merge-subtree --path=git-gui HEAD -- OURS THEIRS\n\nThat way both the external command line (that the end users do care about)\nand the internal one (that the strategy programmer would care about) look\na lot more sensible than your command line, don't they?\n"},{"id":"84058","messageId":"bd6139dc0807201303u406484e2x127b2391a9920425@mail.gmail.com","threadId":"12603","inReplyTo":"7vd4l85nv5.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Sverre Rabbelier","fromEmail":"alturin@gmail.com","sentAt":"2008-07-20T20:03:24Z","receivedAt":"2008-07-20T20:03:24Z","isPatch":false,"sender":{"key":"alturin@gmail.com","avatar":null},"body":"On Sun, Jul 20, 2008 at 9:58 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n>> You mean something like\n>>\n>>       $ git merge -s subtree -X --path -X git-gui/ git-gui/master\n>>\n>> Wow. :-)\n>\n> I would envision it to be more like:\n>\n>        $ git merge -s subtree -Xpath=git-gui git-gui/master\n\nWhatever happened to quotes?\n\n        $ git merge -s subtree -Xpath=\"git-gui git-gui/master\"\n\n-- \nCheers,\n\nSverre Rabbelier\n"},{"id":"84061","messageId":"20080720203306.GO10347@genesis.frugalware.org","threadId":"12603","inReplyTo":"bd6139dc0807201303u406484e2x127b2391a9920425@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2008-07-20T20:33:06Z","receivedAt":"2008-07-20T20:33:06Z","isPatch":false,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"On Sun, Jul 20, 2008 at 10:03:24PM +0200, Sverre Rabbelier <alturin@gmail.com> wrote:\n> On Sun, Jul 20, 2008 at 9:58 PM, Junio C Hamano <gitster@pobox.com> wrote:\n> > Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> >> You mean something like\n> >>\n> >>       $ git merge -s subtree -X --path -X git-gui/ git-gui/master\n> >>\n> >> Wow. :-)\n> >\n> > I would envision it to be more like:\n> >\n> >        $ git merge -s subtree -Xpath=git-gui git-gui/master\n> \n> Whatever happened to quotes?\n> \n>         $ git merge -s subtree -Xpath=\"git-gui git-gui/master\"\n\nRead again what did you wrote. ;-)\n\nThe current form is\n\ngit merge -s subtree git-gui/master, so at most it could be\n\n        $ git merge -s subtree -Xpath=\"git-gui\" git-gui/master\n"},{"id":"84062","messageId":"7v4p6k5m91.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"bd6139dc0807201303u406484e2x127b2391a9920425@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-20T20:33:30Z","receivedAt":"2008-07-20T20:33:30Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Sverre Rabbelier\" <alturin@gmail.com> writes:\n\n> Whatever happened to quotes?\n>\n>         $ git merge -s subtree -Xpath=\"git-gui git-gui/master\"\n\nNothing special needs to happen.  That would naturally be passed to the\nunderlying strategy as the equivalent of:\n\n\t$ git merge-subtree --path=\"git-gui git-gui/master\"\n\nbut now \"git-merge\" is in C, it does not have to quote nor unquote\nexplicitly itself.  Unquoting will be done by the shell when you call\n\"git-merge\", and quoting is unneeded when you give each argument as a\nseparate string in **argv to call execv().\n"},{"id":"84083","messageId":"alpine.DEB.1.00.0807210020420.3305@eeepc-johanness","threadId":"12603","inReplyTo":"7vd4l85nv5.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-07-20T22:24:07Z","receivedAt":"2008-07-20T22:24:07Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Sun, 20 Jul 2008, Junio C Hamano wrote:\n\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> >> I personally think -sstrategy=string1,string2,... is simply a bad taste.\n> >> \n> >> Why force yourself to parse things by having the users to concatenate\n> >> something that the user could give us separated?  If you care about the\n> >> order and association between strategy and their options, you can always\n> >> do:\n> >> \n> >> \t-s strategy1 -X option-1-for-strategy-1 -X option-2-for-strategy-1 \\\n> >> \t-s strategy2 -X option-1-for-strategy-2 ...\n> >\n> > You mean something like\n> >\n> > \t$ git merge -s subtree -X --path -X git-gui/ git-gui/master\n> >\n> > Wow. :-)\n> \n> I would envision it to be more like:\n> \n> \t$ git merge -s subtree -Xpath=git-gui git-gui/master\n> \n> which git-merge internally would turn into:\n> \n> \t$ git-merge-subtree --path=git-gui HEAD -- OURS THEIRS\n> \n> That way both the external command line (that the end users do care about)\n> and the internal one (that the strategy programmer would care about) look\n> a lot more sensible than your command line, don't they?\n\nI still find it a lot easier to explain\n\n\t$ git -s subtree=git-gui git-gui/master\n\nto a new user than your command line, especially since\n\n\t$ git -X path=git-gui -s subtree git-gui/master\n\nwould be a not so obvious mistake, _and_ especially since the \nimplementation of your option parsing would be rather ugly.\n\nBut the subject has been discussed to death, and you seem to still prefer \nthe -X way, so I give up.\n\nYou win,\nDscho \"who can adapt even to a syntax he does not like\"\n"},{"id":"84088","messageId":"20080720224040.GG32184@machine.or.cz","threadId":"12603","inReplyTo":"7v3am5iae8.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-07-20T22:40:40Z","receivedAt":"2008-07-20T22:40:40Z","isPatch":false,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"On Sat, Jul 19, 2008 at 06:58:55PM -0700, Junio C Hamano wrote:\n> * pb/submodule (Wed Jul 16 21:11:40 2008 +0200) 7 commits\n>  . t7403: Submodule git mv, git rm testsuite\n>  . git rm: Support for removing submodules\n>  . git mv: Support moving submodules\n>  . submodule.*: Introduce simple C interface for submodule lookup by\n>    path\n>  . git submodule add: Fix naming clash handling\n>  . t7400: Add short \"git submodule add\" testsuite\n>  . git-mv: Remove dead code branch\n> \n> Long overdue usability improvement series for submodule.  Very much\n> welcomed.  It would be nice to have some submodule improvements in 1.6.0,\n> but it would take us a few more rounds to hit 'next' with this, and it\n> will not be in 'master' when 1.6.0 ships.\n\nDo you think this would create serious problems?\n\nOne thing this patch series depends on now is changing the git mv\nsemantics in a rather non-trivial way, which is something we might want\nto do in a major release instead of within the 1.6 series.\n\n\t\t\t\tPetr \"Pasky\" Baudis\n"},{"id":"84094","messageId":"bd6139dc0807201558k6e3d85b8u30d214f16e1040bd@mail.gmail.com","threadId":"12603","inReplyTo":"20080720203306.GO10347@genesis.frugalware.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Sverre Rabbelier","fromEmail":"alturin@gmail.com","sentAt":"2008-07-20T22:58:01Z","receivedAt":"2008-07-20T22:58:01Z","isPatch":false,"sender":{"key":"alturin@gmail.com","avatar":null},"body":"On Sun, Jul 20, 2008 at 10:33 PM, Miklos Vajna <vmiklos@frugalware.org> wrote:\n> On Sun, Jul 20, 2008 at 10:03:24PM +0200, Sverre Rabbelier <alturin@gmail.com> wrote:\n>> Whatever happened to quotes?\n>>\n>>         $ git merge -s subtree -Xpath=\"git-gui git-gui/master\"\n>\n> Read again what did you wrote. ;-)\n>\n> The current form is\n>\n> git merge -s subtree git-gui/master, so at most it could be\n>\n>        $ git merge -s subtree -Xpath=\"git-gui\" git-gui/master\n\nMeh, what I ofcourse mean was:\n         $ git merge -s subtree -X\"path=git-gui\" git-gui/master\n\nBut that looks rather awkward, which is probably why I typed it the\nway I did? Maybe something like....\n         $ git merge -s subtree -X(--path=git-gui --foo=bar) git-gui/master\n\n-- \nCheers,\n\nSverre Rabbelier\n"},{"id":"84095","messageId":"7vd4l82m4t.fsf@gitster.siamese.dyndns.org","threadId":"12603","inReplyTo":"20080720224040.GG32184@machine.or.cz","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-07-20T23:04:18Z","receivedAt":"2008-07-20T23:04:18Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n> Do you think this would create serious problems?\n>\n> One thing this patch series depends on now is changing the git mv\n> semantics in a rather non-trivial way, which is something we might want\n> to do in a major release instead of within the 1.6 series.\n\nThe change to git-mv perhaps is necessary to happen between a major\nrelease boundary.  I do not know if the current round of patch to do so\nwill become ready in time for 1.6.0.  The rename-ce-at patch I looked at\ndid not look like it was.\n"},{"id":"84161","messageId":"m3bq0rwrp7.fsf@localhost.localdomain","threadId":"12603","inReplyTo":"bd6139dc0807201558k6e3d85b8u30d214f16e1040bd@mail.gmail.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2008-07-21T08:47:23Z","receivedAt":"2008-07-21T08:47:23Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"\"Sverre Rabbelier\" <alturin@gmail.com> writes:\n\n> On Sun, Jul 20, 2008 at 10:33 PM, Miklos Vajna <vmiklos@frugalware.org> wrote:\n>> On Sun, Jul 20, 2008 at 10:03:24PM +0200, Sverre Rabbelier <alturin@gmail.com> wrote:\n>>> Whatever happened to quotes?\n>>>\n>>>         $ git merge -s subtree -Xpath=\"git-gui git-gui/master\"\n>>\n>> Read again what did you wrote. ;-)\n>>\n>> The current form is\n>>\n>> git merge -s subtree git-gui/master, so at most it could be\n>>\n>>        $ git merge -s subtree -Xpath=\"git-gui\" git-gui/master\n> \n> Meh, what I of course mean was:\n>          $ git merge -s subtree -X\"path=git-gui\" git-gui/master\n> \n> But that looks rather awkward, which is probably why I typed it the\n> way I did? Maybe something like....\n>          $ git merge -s subtree -X(--path=git-gui --foo=bar) git-gui/master\n\nOr perhaps (following -Wx family of GCC options)\n\n           $ git merge -s subtree -X--path=git-gui,--foo=bar git-gui/master\n\n-- \nJakub Narebski\nPoland\nShadeHawk on #git\n"},{"id":"157987","messageId":"loom.20101213T194818-377@post.gmane.org","threadId":"12603","inReplyTo":"7vtzen7bul.fsf@gitster.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Yaroslav Halchenko","fromEmail":"debian@onerussian.com","sentAt":"2010-12-13T19:09:04Z","receivedAt":"2010-12-13T19:09:04Z","isPatch":false,"sender":{"key":"debian@onerussian.com","avatar":"https://gravatar.com/avatar/9d2f005048a0274a9c26bc47a51f580e2bf631dfedfdb18370f65e08e4250317?d=mp&s=160"},"body":"Dear Everyone,\n\n> I tried not to sound too negative when describing -Xours and -Xtheirs\n> there, but actually I think \"-s theirs\" is even worse.  It is how you\n> would discard what you did (perhaps because the other side has much better\n> solution than your hack)\n\nor perhaps this is very well intended, e.g. if you are tracking other project's\ndevelopment and just need to carry a limited portion of the source tree.\n\nSorry for reincarnating this old thread, but  since I have filed Debian\nwishlist bug against GIT for '-s theirs':\n\nhttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=581680\n\nand this thread is linked to it as the ultimate source 'why not (yet)', I want\nto describe a usecase when/why I wanted to have -s theirs:\n\nFor debian packaging, we often need to clean up the upstream source tree so it\ndoes not contain non-free material (binary blobs, components under non-free\nlicenses, etc).  If I want to setup all packaging within GIT, I would follow\nnatively following setup:\n\ngit checkout -b dfsg 0.1\ngit rm non-free-1 non-free-2 ...\ngit commit -m \"DFSG-compliant 0.1\"\ngit tag -a -m 0.1.dfsg\n\nand base my packaging off dfsg branch (in a separate branch, e.g. debian).\n\nUpon release 0.2 of upstream work, in the simplest case, I can do now\n\ngit checkout dfsg\ngit merge 0.2\n\nand there things could get hairy -- if files were modified upstream, I get\nconflicts, so I would need to git rm files again, and only then commit the\nmerge:\n\ngit rm \n\nMoreover, 0.2 might not follow 0.1 -- upstream might release off\n\"release-branches\", then I simply *must not* do \"git merge\" with recursive \nstrategy.\n\nMoreover, if some material finally became free, I would need to re-add it\nsomehow into dfsg branch from 0.2 branch.\n\n\n*All* those complications could easily be avoided if I only had '-s theirs'.\nThen I simply\n\ngit checkout dfsg\ngit merge --no-commit -s theirs 0.2\n# after all I do not, and must not have my modifications\ngit rm -rf non-free-1 ... # probably would be scripted\ngit commit\n\nWith -s theirs now I would be able manage all tricky cases above without hassle\nin a unified way.\n\nWould it be possible to have GIT people reconsider addition of '-s theirs'?\n\nThank you in advance for your time!\n"},{"id":"157997","messageId":"7vbp4pz9hf.fsf@alter.siamese.dyndns.org","threadId":"12603","inReplyTo":"loom.20101213T194818-377@post.gmane.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-12-13T20:46:52Z","receivedAt":"2010-12-13T20:46:52Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Yaroslav Halchenko <debian@onerussian.com> writes:\n\n> git checkout dfsg\n> git merge --no-commit -s theirs 0.2\n> # after all I do not, and must not have my modifications\n> git rm -rf non-free-1 ... # probably would be scripted\n> git commit\n\nThe other day I was talking with Shawn Pearce and said that \"-s theirs\"\nwould make sense only if used with --no-commit.\n\nBut for such a use case, \"git read-tree -m -u 0.2\" would work just as\nwell, and discussion ended there ;-)\n"},{"id":"158006","messageId":"20101213214628.GA13447@onerussian.com","threadId":"12603","inReplyTo":"7vbp4pz9hf.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Yaroslav Halchenko","fromEmail":"debian@onerussian.com","sentAt":"2010-12-13T21:46:28Z","receivedAt":"2010-12-13T21:46:28Z","isPatch":false,"sender":{"key":"debian@onerussian.com","avatar":"https://gravatar.com/avatar/9d2f005048a0274a9c26bc47a51f580e2bf631dfedfdb18370f65e08e4250317?d=mp&s=160"},"body":"\nOn Mon, 13 Dec 2010, Junio C Hamano wrote:\n> would make sense only if used with --no-commit.\n\n> But for such a use case, \"git read-tree -m -u 0.2\" would work just as\n> well, and discussion ended there ;-)\n\nhm -- read-tree sounded like yet another unknown to me feature of GIT I\nwas trying desperately to discover ;)  unfortunately it doesn't produce a merge\nfor me :-/ -- just a simple commit with the state taken from the other tree:\n\n$> git read-tree -m -u origin/master                 \ncached/staged changes: 179 changes  \n\n$> git commit -m 'blunt merge for -s theirs: -m -u origin/master '\n[maint/0.5 b246251] blunt merge for -s theirs: -m -u origin/master\n 175 files changed, 9589 insertions(+), 4914 deletions(-)\n create mode 100644 doc/pics/ex_curvefitting_bold.svg\n create mode 100644 doc/pics/ex_curvefitting_searchlight.svg\n ...\n$> git show HEAD^2                                                \nfatal: ambiguous argument 'HEAD^2': unknown revision or path not in the working tree.\n\nI am using git (Debian amd64): 1:1.7.2.3-2.1 (so it is 1.7.2.3)\n\n-- \nYaroslav O. Halchenko\nPostdoctoral Fellow,   Department of Psychological and Brain Sciences\nDartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755\nPhone: +1 (603) 646-9834                       Fax: +1 (603) 646-1419\nWWW:   http://www.linkedin.com/in/yarik        \n"},{"id":"158005","messageId":"7vlj3txqsz.fsf@alter.siamese.dyndns.org","threadId":"12603","inReplyTo":"20101213214628.GA13447@onerussian.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-12-13T22:15:40Z","receivedAt":"2010-12-13T22:15:40Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Yaroslav Halchenko <debian@onerussian.com> writes:\n\n> On Mon, 13 Dec 2010, Junio C Hamano wrote:\n>> would make sense only if used with --no-commit.\n>\n>> But for such a use case, \"git read-tree -m -u 0.2\" would work just as\n>> well, and discussion ended there ;-)\n>\n> hm -- read-tree sounded like yet another unknown to me feature of GIT I\n> was trying desperately to discover ;)  unfortunately it doesn't produce a merge\n> for me\n\nDidn't I already say it makes sense only with --no-commit?  IOW to shape\nthe tree.\n\nAnd in your use case I do not think you would even want to have a merge.\nEven if you run \"git rm\" to remove non-free stuff from the merge result,\nif you merged the history of 0.2 that contains non-free stuff you are not\nallowed to distribute (forbidden either by upstream or self-imposed dfsg,\nthe reason does not matter), people who gets the merge commit can follow\nits second parent to grab the non-free stuff, no?\n"},{"id":"158007","messageId":"20101213223621.GD13447@onerussian.com","threadId":"12603","inReplyTo":"7vlj3txqsz.fsf@alter.siamese.dyndns.org","subject":"Re: What's cooking in git.git (topics)","fromName":"Yaroslav Halchenko","fromEmail":"debian@onerussian.com","sentAt":"2010-12-13T22:36:22Z","receivedAt":"2010-12-13T22:36:22Z","isPatch":false,"sender":{"key":"debian@onerussian.com","avatar":"https://gravatar.com/avatar/9d2f005048a0274a9c26bc47a51f580e2bf631dfedfdb18370f65e08e4250317?d=mp&s=160"},"body":"\nOn Mon, 13 Dec 2010, Junio C Hamano wrote:\n> > hm -- read-tree sounded like yet another unknown to me feature of GIT I\n> > was trying desperately to discover ;)  unfortunately it doesn't produce a merge\n> > for me\n\n> Didn't I already say it makes sense only with --no-commit?  IOW to shape\n> the tree.\n\nrright -- in my case --no-commit so I could remove the content before\ncommitting.\n\n> And in your use case I do not think you would even want to have a merge.\n> Even if you run \"git rm\" to remove non-free stuff from the merge result,\n> if you merged the history of 0.2 that contains non-free stuff you are not\n> allowed to distribute (forbidden either by upstream or self-imposed dfsg,\n> the reason does not matter), people who gets the merge commit can follow\n> its second parent to grab the non-free stuff, no?\n\nI see your point better now -- so it is yet another dimension of\n\"the feature\".\n\nas for non-free -- I probably should have been more precise --\nnon-DFSG (debian free software guidelines)-free ;) i.e.:\n\n*  free compiled,rendered materials, often binary blobs, without\n   sources (e.g. .dll's, pdfs etc)\n\n*  material under free but not DFSG-free licenses, etc\n\n* if upstream repository already provides that 'non-free' material it\n  would not be much of my misdemeanor to keep them as well buried in the\n  repository history.  What I care is to have a cleaned branch from\n  which I could git archive, and also which I could inspect in regards to\n  changes between releases without visually filtering all changes in\n  non-sources (e.g. those binary blobs) or irrelevant content.\n\n  if ever legal situation causes upstream to rewrite history to remove\n  them -- I will have to do that as well anyways :-/\n\nHaving an actual merge would be useful for making the explicit \"bridge\"\nfrom upstream branch, thus '--no-commit -s theirs' with consecutive\ncleaning before commit looks the way to go IMHO.  But I see now\nthat I could possibly use read-tree at times if a real necessity comes\nto prune non-distributable content, and then obviously I do not want to\ndrag upstream's illegal stuff along.\n\n-- \nYaroslav O. Halchenko\nPostdoctoral Fellow,   Department of Psychological and Brain Sciences\nDartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755\nPhone: +1 (603) 646-9834                       Fax: +1 (603) 646-1419\nWWW:   http://www.linkedin.com/in/yarik        \n"},{"id":"158035","messageId":"4D071B60.2040906@viscovery.net","threadId":"12603","inReplyTo":"20101213214628.GA13447@onerussian.com","subject":"Re: What's cooking in git.git (topics)","fromName":"Johannes Sixt","fromEmail":"j.sixt@viscovery.net","sentAt":"2010-12-14T07:23:12Z","receivedAt":"2010-12-14T07:23:12Z","isPatch":false,"sender":{"key":"j6t@kdbg.org","avatar":"https://avatars.githubusercontent.com/u/14810926?v=4"},"body":"Am 12/13/2010 22:46, schrieb Yaroslav Halchenko:\n> On Mon, 13 Dec 2010, Junio C Hamano wrote:\n>> But for such a use case, \"git read-tree -m -u 0.2\" would work just as\n>> well, and discussion ended there ;-)\n> \n> hm -- read-tree sounded like yet another unknown to me feature of GIT I\n> was trying desperately to discover ;)  unfortunately it doesn't produce a merge\n> for me :-/ -- just a simple commit with the state taken from the other tree:\n\nHow about:\n\n  git merge --no-commit -s ours 0.2\n  git read-tree -m -u 0.2\n  git commit -m \"Reset to 0.2\"\n\n-- Hannes\n"},{"id":"158050","messageId":"20101214142155.GM13447@onerussian.com","threadId":"12603","inReplyTo":"4D071B60.2040906@viscovery.net","subject":"Re: What's cooking in git.git (topics)","fromName":"Yaroslav Halchenko","fromEmail":"debian@onerussian.com","sentAt":"2010-12-14T14:21:55Z","receivedAt":"2010-12-14T14:21:55Z","isPatch":false,"sender":{"key":"debian@onerussian.com","avatar":"https://gravatar.com/avatar/9d2f005048a0274a9c26bc47a51f580e2bf631dfedfdb18370f65e08e4250317?d=mp&s=160"},"body":"\nOn Tue, 14 Dec 2010, Johannes Sixt wrote:\n> > hm -- read-tree sounded like yet another unknown to me feature of GIT I\n> > was trying desperately to discover ;)  unfortunately it doesn't produce a merge\n> > for me :-/ -- just a simple commit with the state taken from the other tree:\n> How about:\n>   git merge --no-commit -s ours 0.2\n>   git read-tree -m -u 0.2\n>   git commit -m \"Reset to 0.2\"\n\nThank you Johannes for chewing it up to ease the digestion by my\nbrainless stomach -- works just fine ;)\n\nI guess this could be the alias for my needs:\n\n    mtheirs = !sh -c 'git merge -s ours --no-commit $1 && git read-tree -m -u \"$1\"' -\n\nbut since it might be a generic pattern for the use case(s) I have\nstated I still see no objective reason why simple '-s theirs' should not\nbe there.\n\n-- \n=------------------------------------------------------------------=\nKeep in touch                                     www.onerussian.com\nYaroslav Halchenko                 www.ohloh.net/accounts/yarikoptic\n"}]}