What's cooking in git.git (topics)
Subsystems (2)
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
----------------------------------------------------------------
[New Topics]
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
----------------------------------------------------------------
[Graduated to 'master']
* dp/clean-fix (Fri Mar 7 21:56:56 2008 -0800) 7 commits
+ git-clean: add tests for relative path
+ git-clean: correct printing relative path
+ Make private quote_path() in wt-status.c available as quote_path_relative()
+ Revert part of d089eba (setup: sanitize absolute and funny paths in get_pathspec())
+ Revert part of 1abf095 (git-add: adjust to the get_pathspec() changes)
+ Revert part of 744dacd (builtin-mv: minimum fix to avoid losing files)
+ get_pathspec(): die when an out-of-tree path is given
* sp/fetch-optim (Mon Mar 3 22:27:40 2008 -0500) 11 commits
+ Teach git-fetch to exploit server side automatic tag following
+ Teach fetch-pack/upload-pack about --include-tag
+ git-pack-objects: Automatically pack annotated tags if object was packed
+ Teach git-fetch to grab a tag at the same time as a commit
+ Make git-fetch follow tags we already have objects for sooner
+ Teach upload-pack to log the received need lines to an fd
+ Free the path_lists used to find non-local tags in git-fetch
+ Allow builtin-fetch's find_non_local_tags to append onto a list
+ Ensure tail pointer gets setup correctly when we fetch HEAD only
+ Remove unnecessary delaying of free_refs(ref_map) in builtin-fetch
+ Remove unused variable in builtin-fetch find_non_local_tags
* ml/submodule-add-existing (Tue Mar 4 20:15:02 2008 -0500) 1 commit
+ git-submodule - Allow adding a submodule in-place
* jc/describe-always (Sun Mar 2 08:51:57 2008 -0800) 1 commit
+ describe --always: fall back to showing an abbreviated object name
* aw/maint-shortlog-blank-lines (Wed Mar 5 14:24:10 2008 +0000) 1 commit
+ shortlog: take the first populated line of the description
* jn/gitweb-pickaxe (Wed Mar 5 09:31:55 2008 +0100) 1 commit
+ gitweb: Fix and simplify pickaxe search
* cr/reset-parseopt (Tue Mar 4 23:11:34 2008 +0100) 1 commit
+ Make builtin-reset.c use parse_options.
* mr/compat-snprintf (Wed Mar 5 16:46:13 2008 +0100) 1 commit
+ Add compat/snprintf.c for systems that return bogus
* jc/am (Tue Mar 4 00:25:06 2008 -0800) 3 commits
+ am: --rebasing
+ am: remove support for -d .dotest
+ am: read from the right mailbox when started from a subdirectory
* ph/parseopt (Sun Mar 2 11:35:56 2008 +0100) 2 commits
+ parse-options: new option type to treat an option-like parameter as an argument.
+ parse-opt: bring PARSE_OPT_HIDDEN and NONEG to git-rev-parse -- parseopt
----------------------------------------------------------------
[Actively Cooking]
* lt/unpack-trees (Fri Mar 7 13:48:40 2008 -0800) 10 commits
+ unpack_trees(): minor memory leak fix in unused destination index
+ Make 'unpack_trees()' have a separate source and destination index
+ Make 'unpack_trees()' take the index to work on as an argument
+ Add 'const' where appropriate to index handling functions
+ Fix tree-walking compare_entry() in the presense of --prefix
+ Move 'unpack_trees()' over to 'traverse_trees()' interface
+ Make 'traverse_trees()' traverse conflicting DF entries in parallel
+ Add return value to 'traverse_tree()' callback
+ Make 'traverse_tree()' use linked structure rather than 'const char *base'
+ Add 'df_name_compare()' helper function
* js/remote (Sat Mar 8 23:40:42 2008 +0100) 8 commits
+ builtin remote rm: remove symbolic refs, too
+ remote: fix "update [group...]"
+ remote show: Clean up connection correctly if object fetch wasn't done
+ builtin-remote: prune remotes correctly that were added with -- mirror
+ Make git-remote a builtin
+ Test "git remote show" and "git remote prune"
+ parseopt: add flag to stop on first non option
+ path-list: add functions to work with unsorted lists
Slated for 1.5.5, but probably needs more time to mature.
* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits
+ t5300: add test for "index-pack --strict"
+ receive-pack: allow using --strict mode for unpacking objects
+ unpack-objects: fix --strict handling
+ t5300: add test for "unpack-objects --strict"
+ unpack-objects: prevent writing of inconsistent objects
This would re-instate the "unpack-objects --strict" but we probably should not do this before 1.5.5.
* py/submodule (Sat Mar 8 02:27:19 2008 +0800) 4 commits
- git-submodule summary: documentation
- git-submodule summary: limit summary size
- git-submodule summary: show commit summary
- git-submodule summary: code framework
Looking better. With tests it should be mergeable to 'next'.
----------------------------------------------------------------
[On Hold]
* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits
- Additional tests to capture worktree special cases
- Documentation: update api-builtin and api-setup
- Make setup_git_directory() auto-setup worktree if found
- builtin-archive: mark unused prefix "unused_prefix"
- Completely move out worktree setup from setup_git_directory_gently()
- http-push: Avoid calling setup_git_directory() twice
- Make setup_work_tree() return new prefix
- Make get_git_dir() and 'git rev-parse --git-dir' absolute path
- Make sure setup_git_directory is called before accessing repository
- "git read-tree -m" and the like require worktree
Every time we touch work-tree stuff we seem to unstabilize; this round seems more solid but I am still treading cautiously. Not sure if we want this for 1.5.5.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits
- diffcore-rename: make file_table available outside exact rename detection
+ Optimize rename detection for a huge diff
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
- diff: make --dirstat binary-file safe
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
- Teach GIT-VERSION-GEN about the .git file
- Teach git-submodule.sh about the .git file
- Teach resolve_gitlink_ref() about the .git file
- Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. I am not sure if we should merge this to 'next' before 1.5.5. Most active people will be on 'next' and if we have this there, the resulting 1.5.5 release might end up having issues that come from differences this one introduces.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
- sha1-lookup: make selection of 'middle' less aggressive
- sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 5 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
+ expose a helper function peel_to_type().
+ merge-recursive: split low-level merge functions out.
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
----------------------------------------------------------------
[New Topics]
* cc/help (Tue Mar 11 08:51:12 2008 +0100) 3 commits
+ help: implement multi-valued "man.viewer" config option
+ Documentation: help: describe 'man.viewer' config variable
+ help: add "man.viewer" config var to use "woman" or "konqueror"
* ph/maint-quiltimport (Sat Mar 8 19:27:09 2008 +0100) 1 commit
+ git-quiltimport: better parser to grok "enhanced" series files.
* mr/autoconf-fread (Tue Mar 11 09:48:34 2008 +0100) 1 commit
+ autoconf: Test FREAD_READS_DIRECTORIES
* db/diff-to-fp (Mon Mar 10 13:58:26 2008 -0400) 2 commits
- wt-status.c: no need for dup() dance anymore
- Write diff output to a file in struct diff_options
All of these can be in 1.5.5 (they may or may not need fix-ups); let's close the 1.5.5 merge window now with these.
----------------------------------------------------------------
[Graduated to 'master']
* lt/unpack-trees (Fri Mar 7 13:48:40 2008 -0800) 10 commits
+ unpack_trees(): minor memory leak fix in unused destination index
+ Make 'unpack_trees()' have a separate source and destination index
+ Make 'unpack_trees()' take the index to work on as an argument
+ Add 'const' where appropriate to index handling functions
+ Fix tree-walking compare_entry() in the presense of --prefix
+ Move 'unpack_trees()' over to 'traverse_trees()' interface
+ Make 'traverse_trees()' traverse conflicting DF entries in parallel
+ Add return value to 'traverse_tree()' callback
+ Make 'traverse_tree()' use linked structure rather than 'const char *base'
+ Add 'df_name_compare()' helper function
* js/remote (Sat Mar 8 23:40:42 2008 +0100) 9 commits
+ "remote update": print remote name being fetched from
+ builtin remote rm: remove symbolic refs, too
+ remote: fix "update [group...]"
+ remote show: Clean up connection correctly if object fetch wasn't done
+ builtin-remote: prune remotes correctly that were added with -- mirror
+ Make git-remote a builtin
+ Test "git remote show" and "git remote prune"
+ parseopt: add flag to stop on first non option
+ path-list: add functions to work with unsorted lists
----------------------------------------------------------------
[Actively Cooking]
* py/submodule (Tue Mar 11 21:52:19 2008 +0800) 5 commits
+ git-submodule summary: test
+ git-submodule summary: documentation
+ git-submodule summary: limit summary size
+ git-submodule summary: show commit summary
+ git-submodule summary: code framework
I didn't see anybody very supportive for this series, but I do not think this regresses existing other subcommands to "git submodule", so let's merge this to 'master' before 1.5.5 and see how useful submodule users find this.
----------------------------------------------------------------
[On Hold]
* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits
- Additional tests to capture worktree special cases
- Documentation: update api-builtin and api-setup
- Make setup_git_directory() auto-setup worktree if found
- builtin-archive: mark unused prefix "unused_prefix"
- Completely move out worktree setup from setup_git_directory_gently()
- http-push: Avoid calling setup_git_directory() twice
- Make setup_work_tree() return new prefix
- Make get_git_dir() and 'git rev-parse --git-dir' absolute path
- Make sure setup_git_directory is called before accessing repository
- "git read-tree -m" and the like require worktree
Every time we touch work-tree stuff we seem to unstabilize; this round seems more solid but I am still treading cautiously. Not sure if we want this for 1.5.5.
* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits
+ t5300: add test for "index-pack --strict"
+ receive-pack: allow using --strict mode for unpacking objects
+ unpack-objects: fix --strict handling
+ t5300: add test for "unpack-objects --strict"
+ unpack-objects: prevent writing of inconsistent objects
This would re-instate the "unpack-objects --strict" but we probably should not do this before 1.5.5.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits
- diffcore-rename: make file_table available outside exact rename detection
+ Optimize rename detection for a huge diff
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
- diff: make --dirstat binary-file safe
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
- Teach GIT-VERSION-GEN about the .git file
- Teach git-submodule.sh about the .git file
- Teach resolve_gitlink_ref() about the .git file
- Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. I am not sure if we should merge this to 'next' before 1.5.5. Most active people will be on 'next' and if we have this there, the resulting 1.5.5 release might end up having issues that come from differences this one introduces.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
- sha1-lookup: make selection of 'middle' less aggressive
- sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Hi,
Quoted 14 lines · Junio C Hamano
* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits
- Additional tests to capture worktree special cases
- Documentation: update api-builtin and api-setup
- Makesetup_git_directory()auto-setup worktree if found
- builtin-archive: mark unused prefix "unused_prefix"
- Completely move out worktree setup fromsetup_git_directory_gently()
- http-push: Avoid callingsetup_git_directory()twice
- Makesetup_work_tree()return new prefix
- Makeget_git_dir()and 'git rev-parse --git-dir' absolute path
- Make suresetup_git_directoryis called before accessing repository
- "git read-tree -m" and the like require worktree
Quoted 3 lines
Every time we touch work-tree stuff we seem to unstabilize; this round seems more solid but I am still treading cautiously. Not sure if we want this for 1.5.5.
I am sure we do not want this for 1.5.5.
It is too complicated a patch series to be obviously correct, and as I said earlier, a few design goals are not to my liking, such as trying to separate git_dir from work_tree logic with a sledgehammer.
Ciao,
Dscho
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
The merge window for 1.5.5 is closed as of tonight, except for the promised git-gui (0.10) and gitk updates, and topics still cooking in 'next', and 1.5.5-rc0 will be tagged shortly.
After that we will have quite a lot of regression fixes ahead of us, I am afraid. Since v1.5.4, a few commands have been reimplemented or made built-ins (checkout, remote, merge-recursive), and these inevitably involve "growing pains".
While I am reasonably confident that we have long caught showstopper regressions in key features of these commands while they were cooking in 'next', I am sure there would remain regressions here and there in the periphery. It is unavoidable. POSIX-only people may say "why rewrite, if it involves this much pain", but like it or not, there are people stuck on unfortunate platforms that cannot run scripted versions well enough.
Let's see if our regular contributors are as good at fixing their own screw-ups as they are good at coming up with new code, and hope that we can keep this rc cycle manageably short. Touch wood...
----------------------------------------------------------------
[New Topics]
* jc/makefile (Wed Mar 12 01:46:26 2008 -0700) 2 commits
- Makefile: flatten enumeration of headers, objects and programs
- Makefile: DIFF_OBJS is not special at all these days
I promised to do this immediately after -rc0, so this will shortly be in 'next' and then in 'master'.
* jk/portable (Wed Mar 12 17:42:43 2008 -0400) 13 commits
+ t7505: use SHELL_PATH in hook
+ t9112: add missing #!/bin/sh header
+ filter-branch: use $SHELL_PATH instead of 'sh'
+ filter-branch: don't use xargs -0
+ add NO_EXTERNAL_GREP build option
+ t6000lib: tr portability fix
+ t4020: don't use grep -a
+ add test_cmp function for test scripts
+ remove use of "tail -n 1" and "tail -1"
+ grep portability fix: don't use "-e" or "-q"
+ more tr portability test script fixes
+ t0050: perl portability fix
+ tr portability fixes
Initially triggered by Solaris porting effort but these are harmless portability changes. Perhaps in 1.5.5, perhaps immediately after that.
----------------------------------------------------------------
[Dropped]
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits . tests: convert "cmp" and "cmp -s" to test_cmp . tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
----------------------------------------------------------------
[Graduated to 'master']
* ph/maint-quiltimport (Wed Mar 12 21:07:19 2008 -0700) 2 commits
+ quiltimport: fix misquoting of parsed -p<num> parameter
+ git-quiltimport: better parser to grok "enhanced" series files.
* mr/autoconf-fread (Tue Mar 11 09:48:34 2008 +0100) 1 commit
+ autoconf: Test FREAD_READS_DIRECTORIES
----------------------------------------------------------------
[Actively Cooking]
* cc/help (Thu Mar 13 19:15:30 2008 -0700) 6 commits
+ Documentation/git-help: typofix
+ help: warn if specified 'man.viewer' is unsupported, instead of erroring out
+ Documentation: help: explain 'man.viewer' multiple values
+ help: implement multi-valued "man.viewer" config option
+ Documentation: help: describe 'man.viewer' config variable
+ help: add "man.viewer" config var to use "woman" or "konqueror"
* db/diff-to-fp (Mon Mar 10 13:58:26 2008 -0400) 2 commits
+ wt-status.c: no need for dup() dance anymore
+ Write diff output to a file in struct diff_options
* py/submodule (Wed Mar 12 09:30:01 2008 +0100) 6 commits
+ git-submodule summary: fix that some "wc" flavors produce leading spaces
+ git-submodule summary: test
+ git-submodule summary: documentation
+ git-submodule summary: limit summary size
+ git-submodule summary: show commit summary
+ git-submodule summary: code framework
I didn't see anybody very supportive for this series, but I do not think this regresses existing other subcommands to "git submodule", so let's merge this to 'master' before 1.5.5 and see how useful submodule users find this.
----------------------------------------------------------------
[On Hold]
* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits
- Additional tests to capture worktree special cases
- Documentation: update api-builtin and api-setup
- Make setup_git_directory() auto-setup worktree if found
- builtin-archive: mark unused prefix "unused_prefix"
- Completely move out worktree setup from setup_git_directory_gently()
- http-push: Avoid calling setup_git_directory() twice
- Make setup_work_tree() return new prefix
- Make get_git_dir() and 'git rev-parse --git-dir' absolute path
- Make sure setup_git_directory is called before accessing repository
- "git read-tree -m" and the like require worktree
Every time we touch work-tree stuff we seem to unstabilize; this round seems more solid but I am still treading cautiously. Not sure if we want this for 1.5.5.
* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits
+ t5300: add test for "index-pack --strict"
+ receive-pack: allow using --strict mode for unpacking objects
+ unpack-objects: fix --strict handling
+ t5300: add test for "unpack-objects --strict"
+ unpack-objects: prevent writing of inconsistent objects
This would re-instate the "unpack-objects --strict" but we probably should not do this before 1.5.5.
* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits
- diffcore-rename: make file_table available outside exact rename detection
+ Optimize rename detection for a huge diff
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
- diff: make --dirstat binary-file safe
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
- Teach GIT-VERSION-GEN about the .git file
- Teach git-submodule.sh about the .git file
- Teach resolve_gitlink_ref() about the .git file
- Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. I am not sure if we should merge this to 'next' before 1.5.5. Most active people will be on 'next' and if we have this there, the resulting 1.5.5 release might end up having issues that come from differences this one introduces.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
- sha1-lookup: make selection of 'middle' less aggressive
- sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
Since we tagged -rc0, we've seen regression fixes at a reasonable rate. At -rc1 tonight, I think we are fairly in good shape.
----------------------------------------------------------------
[New Topics]
* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits
+ send-email: Don't require to be called in a repository
+ Git.pm: Don't require repository instance for ident
+ Git.pm: Don't require a repository instance for config
+ var: Don't require to be in a git repository.
People couldn't invoke "git send-email" from outside their repositories, but this series allows them to. I do not think it is urgent, though. This does not look risky, even though it touches Git.pm that is shared with other things. This has been cooking in 'next' for some time and we haven't heard about breakages caused by this. Will probably be the first thing to be merged in 'master' post 1.5.5.
* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit
+ rebase [--onto O] A B: omit needless checkout
We used to "git checkout B && git rebase A" internally to implement this, which meant the work tree was smudged one time too many. This is probably a safe optimization, but it case after -rc0 and is not really a must-have fix. One of the first after post 1.5.5.
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
- Make git-add behave more sensibly in a case-insensitive environment
- When adding files to the index, add support for case-independent matches
- Make unpack-tree update removed files before any updated files
- Make branch merging aware of underlying case-insensitive filsystems
- Add 'core.ignorecase' option
- Make hash_name_lookup able to do case-independent lookups
- Make "index_name_exists()" return the cache_entry it found
- Move name hashing functions into a file of its own
- Make unpack_trees_options bit flags actual bitfields
The beginning of ASCII-only case insensitive filesystem support. It is not complete yet, though. E.g. if you enable core.ignorecase in t0050, the merge test fails.
* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit
+ pretty.c: add %x00 format specifier.
Adds a generic "insert any byte value" to --pretty=format:<> specifier.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
- "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this, but because I have met no real user with shared repository workflow who complained on this issue, I think this is not urgent.
----------------------------------------------------------------
[Graduated to 'master']
* cc/help (Thu Mar 13 19:15:30 2008 -0700) 6 commits
+ Documentation/git-help: typofix
+ help: warn if specified 'man.viewer' is unsupported, instead of erroring out
+ Documentation: help: explain 'man.viewer' multiple values
+ help: implement multi-valued "man.viewer" config option
+ Documentation: help: describe 'man.viewer' config variable
+ help: add "man.viewer" config var to use "woman" or "konqueror"
There are some leftover bits posted after -rc0, but I think they can wait.
* db/diff-to-fp (Mon Mar 10 13:58:26 2008 -0400) 2 commits
+ wt-status.c: no need for dup() dance anymore
+ Write diff output to a file in struct diff_options
* py/submodule (Wed Mar 12 09:30:01 2008 +0100) 6 commits
+ git-submodule summary: fix that some "wc" flavors produce leading spaces
+ git-submodule summary: test
+ git-submodule summary: documentation
+ git-submodule summary: limit summary size
+ git-submodule summary: show commit summary
+ git-submodule summary: code framework
I didn't see anybody very supportive for this series, but I do not think this regresses existing other subcommands to "git submodule", so let's see how useful submodule users find this. Maybe they have improvement ideas for its output before we decide post 1.5.5 if it is a good idea to include it in "git status" output.
* jc/makefile (Wed Mar 12 01:46:26 2008 -0700) 2 commits
- Makefile: flatten enumeration of headers, objects and programs
- Makefile: DIFF_OBJS is not special at all these days
I promised to do this immediately after -rc0, so this will shortly be in 'next' and then in 'master'.
* jk/portable (Wed Mar 12 17:42:43 2008 -0400) 13 commits
+ t7505: use SHELL_PATH in hook
+ t9112: add missing #!/bin/sh header
+ filter-branch: use $SHELL_PATH instead of 'sh'
+ filter-branch: don't use xargs -0
+ add NO_EXTERNAL_GREP build option
+ t6000lib: tr portability fix
+ t4020: don't use grep -a
+ add test_cmp function for test scripts
+ remove use of "tail -n 1" and "tail -1"
+ grep portability fix: don't use "-e" or "-q"
+ more tr portability test script fixes
+ t0050: perl portability fix
+ tr portability fixes
Initially triggered by Solaris porting effort but these are harmless portability changes. Perhaps in 1.5.5, perhaps immediately after that.
----------------------------------------------------------------
[Dropped]
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits . tests: convert "cmp" and "cmp -s" to test_cmp . tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* nd/worktree (Sun Mar 2 17:35:43 2008 +0700) 10 commits . Additional tests to capture worktree special cases
. Documentation: update api-builtin and api-setup
. Make setup_git_directory() auto-setup worktree if found . builtin-archive: mark unused prefix "unused_prefix" . Completely move out worktree setup from
setup_git_directory_gently()
. http-push: Avoid calling setup_git_directory() twice . Make setup_work_tree() return new prefix
. Make get_git_dir() and 'git rev-parse --git-dir' absolute path . Make sure setup_git_directory is called before accessing
repository
. "git read-tree -m" and the like require worktree
Every time we touch work-tree stuff we seem to have unstabilized things. This is excluded from 'pu' for now although I still have copies.
----------------------------------------------------------------
[On Hold]
* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits
+ t5300: add test for "index-pack --strict"
+ receive-pack: allow using --strict mode for unpacking objects
+ unpack-objects: fix --strict handling
+ t5300: add test for "unpack-objects --strict"
+ unpack-objects: prevent writing of inconsistent objects
This would re-instate the "unpack-objects --strict" but we probably should not do this before 1.5.5.
* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits
- diffcore-rename: make file_table available outside exact rename detection
+ Optimize rename detection for a huge diff
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
- diff: make --dirstat binary-file safe
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
- Teach GIT-VERSION-GEN about the .git file
- Teach git-submodule.sh about the .git file
- Teach resolve_gitlink_ref() about the .git file
- Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. I am not sure if we should merge this to 'next' before 1.5.5. Most active people will be on 'next' and if we have this there, the resulting 1.5.5 release might end up having issues that come from differences this one introduces.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
- sha1-lookup: make selection of 'middle' less aggressive
- sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
I don't see your MIME/Content-Type fix in the list (adding the required headers even in presence of user headers). Did I overlook something?
Sam
Signature · 1 line
Samuel Tardieu -- [email protected] -- http://www.rfc1149.net/
Quoted 3 lines · Samuel Tardieu
I don't see your MIME/Content-Type fix in the list (adding the required headers even in presence of user headers). Did I overlook something?
Do you mean 6bf4f1b (format-patch: generate MIME header as needed even when there is format.header, 2008-03-14)?
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Junio" == Junio C Hamano <[email protected]> writes:
Junio> Do you mean 6bf4f1b (format-patch: generate MIME header as Junio> needed even when there is format.header, 2008-03-14)?
Yup. I hadn't seen it was in master and main already :)
Sam
Signature · 1 line
Samuel Tardieu -- [email protected] -- http://www.rfc1149.net/
Quoted 6 lines · Junio C Hamano
* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit
+pretty.c: add %x00 format specifier.Adds a generic "insert any byte value" to --pretty=format:<> specifier.
I also sent out the following patch that could be put in instead of or in addition to this one. The both solve my problem in different ways.
Thanks,
Govind.
---
From: Govind Salinas <[email protected]>
Date: Sun, 23 Mar 2008 16:02:11 -0500
Subject: [PATCH] log-tree.c: Make log_tree_diff_flush() honor line_termination.
--- log-tree.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
log-tree.c +1 -1
@@ -338,7 +338,7 @@ int log_tree_diff_flush(struct rev_info *opt)int pch =DIFF_FORMAT_DIFFSTAT |DIFF_FORMAT_PATCH ;if ((pch & opt->diffopt.output_format) == pch)printf ("---" ); -putchar ('\n' ); +putchar (opt->diffopt.line_termination); } }diff_flush (&opt->diffopt);
Signature · 1 line
1.5.4.4.550.g77e21.dirty
Quoted 1 line · Govind Salinas
I also sent out the following patch that could be put in instead of...
I had an impression that that change would break the existing output that somebody other than you are depending on.
I personally think it is plausible that everybody wants the new behaviour your patch propose, but that kind of change is not appropriate for 1.5.5 cycle (might be Ok for 1.6.0 after we see agreements on the list), and definitely not something we would want to apply after -rc0.
Quoted 14 lines · Junio C Hamano
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
- Make git-add behave more sensibly in a case-insensitive environment
- When adding files to the index, add support for case-independent matches
- Make unpack-tree update removed files before any updated files
- Make branch merging aware of underlying case-insensitive filsystems
- Add 'core.ignorecase' option
- Makehash_name_lookupable to do case-independent lookups
- Make "index_name_exists()" return thecache_entryit found
- Move name hashing functions into a file of its own
- Makeunpack_trees_optionsbit flags actual bitfields
Quoted 3 lines
The beginning of ASCII-only case insensitive filesystem support. It is not complete yet, though. E.g. if you enable core.ignorecase in t0050, the merge test fails.
The merge test passes for me (on hfs+). The "git mv" test still fails; Linus made clear that "git mv" is not yet fixed.
Steffen
Quoted 2 lines · Steffen Prohaska
The merge test passes for me (on hfs+). The "git mv" test still fails; Linus made clear that "git mv" is not yet fixed.
I was actually talking about the case with your patch applied to t0050 on case sensitive systems.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
----------------------------------------------------------------
[New Topics]
* dd/cvsserver (Thu Mar 27 23:18:35 2008 +0100) 7 commits
- cvsserver: Use the user part of the email in log and annotate results
- cvsserver: Add test for update -p
- cvsserver: Implement update -p (print to stdout)
- cvsserver: Add a few tests for 'status' command
- cvsserver: Do not include status output for subdirectories if -l is passed
- cvsserver: Only print the file part of the filename in status header
- cvsserver: Respond to the 'editors' and 'watchers' commands
The changes seem clean and should affect only locking related client commands, so even though this is a new _feature_, I am inclined to merge this in 1.5.5. Testing by interested parties are encouraged.
* mb/prune (Mon Mar 24 23:20:51 2008 -0700) 4 commits
+ builtin-prune: protect objects listed on the command line
+ builtin-prune.c: use parse_options()
+ Add tests for git-prune
+ parse-options.c: introduce OPT_DATE
"git prune $this $that" lost its ability to protect $this and $that from getting pruned when it was rewritten in C; this attempts to resurrect it. This maybe is 1.5.5 material.
* jk/add-i-mode (Thu Mar 27 03:32:25 2008 -0400) 2 commits
+ add--interactive: allow user to choose mode update
+ add--interactive: ignore mode change in 'p'atch command
New feature, will probably be part of the release after 1.5.5
* gp/gitweb (Wed Mar 26 18:11:19 2008 +0000) 1 commit
+ gitweb: fallback to system-wide config file if default config does not exist
New feature, will probably be part of the release after 1.5.5
----------------------------------------------------------------
[On Hold]
* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit
+ pretty.c: add %x00 format specifier.
Adds a generic "insert any byte value" to --pretty=format:<> specifier. New feature, will probably be part of the release after 1.5.5
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
- "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this, but because I have met no real user with shared repository workflow who complained on this issue, I think this is not urgent.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits
+ send-email: Don't require to be called in a repository
+ Git.pm: Don't require repository instance for ident
+ Git.pm: Don't require a repository instance for config
+ var: Don't require to be in a git repository.
People couldn't invoke "git send-email" from outside their repositories, but this series allows them to. I do not think it is urgent, though. This does not look risky, even though it touches Git.pm that is shared with other things. This has been cooking in 'next' for some time and we haven't heard about breakages caused by this. Will probably be the first thing to be merged in 'master' post 1.5.5.
* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit
+ rebase [--onto O] A B: omit needless checkout
We used to "git checkout B && git rebase A" internally to implement this, which meant the work tree was smudged one time too many. This is probably a safe optimization, but it case after -rc0 and is not really a must-have fix. One of the first after post 1.5.5.
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
- Make git-add behave more sensibly in a case-insensitive environment
- When adding files to the index, add support for case-independent matches
- Make unpack-tree update removed files before any updated files
- Make branch merging aware of underlying case-insensitive filsystems
- Add 'core.ignorecase' option
- Make hash_name_lookup able to do case-independent lookups
- Make "index_name_exists()" return the cache_entry it found
- Move name hashing functions into a file of its own
- Make unpack_trees_options bit flags actual bitfields
The beginning of ASCII-only case insensitive filesystem support.
* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits
+ t5300: add test for "index-pack --strict"
+ receive-pack: allow using --strict mode for unpacking objects
+ unpack-objects: fix --strict handling
+ t5300: add test for "unpack-objects --strict"
+ unpack-objects: prevent writing of inconsistent objects
This would re-instate the "unpack-objects --strict" but we probably should not do this before 1.5.5.
* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits
- diffcore-rename: make file_table available outside exact rename detection
+ Optimize rename detection for a huge diff
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
- diff: make --dirstat binary-file safe
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
- Teach GIT-VERSION-GEN about the .git file
- Teach git-submodule.sh about the .git file
- Teach resolve_gitlink_ref() about the .git file
- Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. I am not sure if we should merge this to 'next' before 1.5.5. Most active people will be on 'next' and if we have this there, the resulting 1.5.5 release might end up having issues that come from differences this one introduces.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
- sha1-lookup: make selection of 'middle' less aggressive
- sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
----------------------------------------------------------------
[New Topics]
* bc/mktag (Thu Mar 27 11:16:04 2008 -0500) 1 commit
+ mktag.c: improve verification of tagger field and tests
This is not very urgent but not complex nor risky enough to be worth holding back. Will merge before 1.5.5.
* je/cvsserver (Thu Mar 27 14:02:14 2008 -0700) 1 commit
+ Allow git-cvsserver database table name prefix to be specified.
The changes seem clean; even though this is a new _feature_, I am inclined to merge this in 1.5.5. Testing by interested parties are encouraged.
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
- filter-branch.sh: support nearly proper tag name filtering
New feature, will probably be part of the release after 1.5.5
* js/filter-branch (Mon Mar 31 09:14:15 2008 +0200) 2 commits
+ filter-branch: Fix renaming a directory in the tree-filter
+ filter-branch: Test renaming directories in a tree-filter
Fix for 1.5.5; I ran out of time this weekend to merge this.
----------------------------------------------------------------
[Graduated to "master"]
* mb/prune (Mon Mar 24 23:20:51 2008 -0700) 4 commits
+ builtin-prune: protect objects listed on the command line
+ builtin-prune.c: use parse_options()
+ Add tests for git-prune
+ parse-options.c: introduce OPT_DATE
"git prune $this $that" lost its ability to protect $this and $that from getting pruned when it was rewritten in C; this attempts to resurrect it. This maybe is 1.5.5 material.
----------------------------------------------------------------
[Actively cooking]
* dd/cvsserver (Thu Mar 27 23:18:35 2008 +0100) 7 commits
+ cvsserver: Use the user part of the email in log and annotate results
+ cvsserver: Add test for update -p
+ cvsserver: Implement update -p (print to stdout)
+ cvsserver: Add a few tests for 'status' command
+ cvsserver: Do not include status output for subdirectories if -l is passed
+ cvsserver: Only print the file part of the filename in status header
+ cvsserver: Respond to the 'editors' and 'watchers' commands
The changes seem clean and should affect only locking related client commands, so even though this is a new _feature_, I am inclined to merge this in 1.5.5. Testing by interested parties are encouraged.
* pb/cvsserver (Sun Mar 16 20:00:21 2008 +0100) 1 commit
+ git-cvsserver: handle change type T
This should be 1.5.5 material.
----------------------------------------------------------------
[On Hold]
* jk/add-i-mode (Thu Mar 27 03:32:25 2008 -0400) 2 commits
+ add--interactive: allow user to choose mode update
+ add--interactive: ignore mode change in 'p'atch command
New feature, will probably be part of the release after 1.5.5
* gp/gitweb (Wed Mar 26 18:11:19 2008 +0000) 1 commit
+ gitweb: fallback to system-wide config file if default config does not exist
New feature, will probably be part of the release after 1.5.5
* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit
+ pretty.c: add %x00 format specifier.
Adds a generic "insert any byte value" to --pretty=format:<> specifier. New feature, will probably be part of the release after 1.5.5
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
- "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this, but because I have met no real user with shared repository workflow who complained on this issue, I think this is not urgent.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits
+ send-email: Don't require to be called in a repository
+ Git.pm: Don't require repository instance for ident
+ Git.pm: Don't require a repository instance for config
+ var: Don't require to be in a git repository.
People couldn't invoke "git send-email" from outside their repositories, but this series allows them to. I do not think it is urgent, though. This does not look risky, even though it touches Git.pm that is shared with other things. This has been cooking in 'next' for some time and we haven't heard about breakages caused by this. Will probably be the first thing to be merged in 'master' post 1.5.5.
* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit
+ rebase [--onto O] A B: omit needless checkout
We used to "git checkout B && git rebase A" internally to implement this, which meant the work tree was smudged one time too many. This is probably a safe optimization, but it case after -rc0 and is not really a must-have fix. One of the first after post 1.5.5.
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
- Make git-add behave more sensibly in a case-insensitive environment
- When adding files to the index, add support for case-independent matches
- Make unpack-tree update removed files before any updated files
- Make branch merging aware of underlying case-insensitive filsystems
- Add 'core.ignorecase' option
- Make hash_name_lookup able to do case-independent lookups
- Make "index_name_exists()" return the cache_entry it found
- Move name hashing functions into a file of its own
- Make unpack_trees_options bit flags actual bitfields
The beginning of ASCII-only case insensitive filesystem support.
* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits
+ t5300: add test for "index-pack --strict"
+ receive-pack: allow using --strict mode for unpacking objects
+ unpack-objects: fix --strict handling
+ t5300: add test for "unpack-objects --strict"
+ unpack-objects: prevent writing of inconsistent objects
This would re-instate the "unpack-objects --strict" but we probably should not do this before 1.5.5.
* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits
- diffcore-rename: make file_table available outside exact rename detection
+ Optimize rename detection for a huge diff
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
- diff: make --dirstat binary-file safe
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
- Teach GIT-VERSION-GEN about the .git file
- Teach git-submodule.sh about the .git file
- Teach resolve_gitlink_ref() about the .git file
- Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. I am not sure if we should merge this to 'next' before 1.5.5. Most active people will be on 'next' and if we have this there, the resulting 1.5.5 release might end up having issues that come from differences this one introduces.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
- sha1-lookup: make selection of 'middle' less aggressive
- sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
With a handful topics graduated to "master", we hopefully will have the final 1.5.5 soon.
----------------------------------------------------------------
[New Topics]
* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits
- contrib/hooks: add an example pre-auto-gc hook
- Documentation/hooks: add pre-auto-gc hook
- git-gc --auto: add pre-auto-gc hook
A new hook to stop "git gc --auto" from running.
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
- filter-branch.sh: support nearly proper tag name filtering
New feature, will probably be part of the release after 1.5.5
----------------------------------------------------------------
[Graduated to "master"]
* bc/mktag (Thu Mar 27 11:16:04 2008 -0500) 1 commit
+ mktag.c: improve verification of tagger field and tests
* je/cvsserver (Thu Mar 27 14:02:14 2008 -0700) 1 commit
+ Allow git-cvsserver database table name prefix to be specified.
* dd/cvsserver (Thu Mar 27 23:18:35 2008 +0100) 7 commits
+ cvsserver: Use the user part of the email in log and annotate results
+ cvsserver: Add test for update -p
+ cvsserver: Implement update -p (print to stdout)
+ cvsserver: Add a few tests for 'status' command
+ cvsserver: Do not include status output for subdirectories if -l is passed
+ cvsserver: Only print the file part of the filename in status header
+ cvsserver: Respond to the 'editors' and 'watchers' commands
* pb/cvsserver (Sun Mar 16 20:00:21 2008 +0100) 1 commit
+ git-cvsserver: handle change type T
* js/filter-branch (Mon Mar 31 09:14:15 2008 +0200) 2 commits
+ filter-branch: Fix renaming a directory in the tree-filter
+ filter-branch: Test renaming directories in a tree-filter
----------------------------------------------------------------
[On Hold]
* jk/add-i-mode (Thu Mar 27 03:32:25 2008 -0400) 2 commits
+ add--interactive: allow user to choose mode update
+ add--interactive: ignore mode change in 'p'atch command
New feature, will probably be part of the release after 1.5.5
* gp/gitweb (Wed Mar 26 18:11:19 2008 +0000) 1 commit
+ gitweb: fallback to system-wide config file if default config does not exist
New feature, will probably be part of the release after 1.5.5
* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit
+ pretty.c: add %x00 format specifier.
Adds a generic "insert any byte value" to --pretty=format:<> specifier. New feature, will probably be part of the release after 1.5.5
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
- "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this, but because I have met no real user with shared repository workflow who complained on this issue, I think this is not urgent.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits
+ send-email: Don't require to be called in a repository
+ Git.pm: Don't require repository instance for ident
+ Git.pm: Don't require a repository instance for config
+ var: Don't require to be in a git repository.
People couldn't invoke "git send-email" from outside their repositories, but this series allows them to. I do not think it is urgent, though. This does not look risky, even though it touches Git.pm that is shared with other things. This has been cooking in 'next' for some time and we haven't heard about breakages caused by this. Will probably be the first thing to be merged in 'master' post 1.5.5.
* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit
+ rebase [--onto O] A B: omit needless checkout
We used to "git checkout B && git rebase A" internally to implement this, which meant the work tree was smudged one time too many. This is probably a safe optimization, but it case after -rc0 and is not really a must-have fix. One of the first after post 1.5.5.
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
- Make git-add behave more sensibly in a case-insensitive environment
- When adding files to the index, add support for case-independent matches
- Make unpack-tree update removed files before any updated files
- Make branch merging aware of underlying case-insensitive filsystems
- Add 'core.ignorecase' option
- Make hash_name_lookup able to do case-independent lookups
- Make "index_name_exists()" return the cache_entry it found
- Move name hashing functions into a file of its own
- Make unpack_trees_options bit flags actual bitfields
The beginning of ASCII-only case insensitive filesystem support.
* jc/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits
+ t5300: add test for "index-pack --strict"
+ receive-pack: allow using --strict mode for unpacking objects
+ unpack-objects: fix --strict handling
+ t5300: add test for "unpack-objects --strict"
+ unpack-objects: prevent writing of inconsistent objects
This would re-instate the "unpack-objects --strict" but we probably should not do this before 1.5.5.
* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 2 commits
- diffcore-rename: make file_table available outside exact rename detection
+ Optimize rename detection for a huge diff
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
- diff: make --dirstat binary-file safe
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
- Teach GIT-VERSION-GEN about the .git file
- Teach git-submodule.sh about the .git file
- Teach resolve_gitlink_ref() about the .git file
- Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
- sha1-lookup: make selection of 'middle' less aggressive
- sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 9 lines · Junio C Hamano
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
With a handful topics graduated to "master", we hopefully will have the
final 1.5.5 soon.
What happened to builtin-clone? I know I just threw it over the fence, but Daniel picked it up and got it a lot closer to working? Did it fall through the cracks or is it just 1.5.6 material?
Kristian
Quoted 11 lines · Kristian Høgsberg
Quoted 8 lines · Junio C Hamano
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
With a handful topics graduated to "master", we hopefully will have the final 1.5.5 soon.
What happened to builtin-clone?
Nothing.
Quoted 3 lines
... I know I just threw it over the fence,
but Daniel picked it up and got it a lot closer to working? Did it fall through the cracks or is it just 1.5.6 material?
If I recall correctly, "a lot closer to working" happened way after 1.5.5 merge window closed, so it definitely is not 1.5.5 material.
Judging from the fact that we recently had to deal with the fallouts of C rewrites that happened during the 1.5.4 timeframe, I would have to say that any C rewrite of a substantial and important program needs to be cooked at least for one (or preferably two cycles, especially we are trying to have shorter cycles) in 'next'.
So at this point, I optimistically say that it has a good chance of being deeply in 'next' and all the active git people would hopefully be using it, by the time 1.5.6 (or perhaps that is named 1.6.0, depending on what else we will do) ships, but I cannot say much more than that. It very much depends on how hard the code has been scrutinized already at this point; I haven't personally looked at it in any serious depth yet.
Hi,
Quoted 6 lines · Junio C Hamano
Quoted 3 lines · Kristian Høgsberg
... I know I just threw it over the fence, but Daniel picked it up and got it a lot closer to working? Did it fall through the cracks or is it just 1.5.6 material?
Quoted 8 lines
If I recall correctly, "a lot closer to working" happened way after 1.5.5 merge window closed, so it definitely is not 1.5.5 material.
Judging from the fact that we recently had to deal with the fallouts of C rewrites that happened during the 1.5.4 timeframe, I would have to say that any C rewrite of a substantial and important program needs to be cooked at least for one (or preferably two cycles, especially we are trying to have shorter cycles) in 'next'.
That would mean that you'd have to merge it into 'next'. And rather sooner than later, since everything else would lead to a dragging out of the timeline.
As it happens, until you called out the 'please test master' phase, I was running with builtin clone, and did not find it lacking. Although I have to admit that I have some cleanups, and I haven't merged with Daniel in a long time. And I do not do anything particularly fancy, such as shallow clone or shared clone.
Ciao,
Dscho "who hopes that the please-test-master phase is over soon"
Quoted 11 lines · Johannes Schindelin
Quoted 5 lines · Junio C Hamano
Judging from the fact that we recently had to deal with the fallouts of C rewrites that happened during the 1.5.4 timeframe, I would have to say that any C rewrite of a substantial and important program needs to be cooked at least for one (or preferably two cycles, especially we are trying to have shorter cycles) in 'next'.
That would mean that you'd have to merge it into 'next'. And rather sooner than later, since everything else would lead to a dragging out of the timeline.
Yes, which means somebody needs to present a mergeable history rather sooner than later, and that somebody does not have to be me ;-)
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
Caution. "next" has been rebuilt with the remaining topics on top of "master". "maint" is still for 1.5.4.X maintenance track for tonight.
A rough timeline from now on.
* Brown paper back fixes, if any, for 1.5.5.1 (2008-04-16).
* Discussion and review on new feature and enhancement patch series begins. Please resubmit things that you were cooking in your head during 1.5.5-rc period after cleaning up and retesting.
* 1.5.6 merge window closes (2008-05-14).
* Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).
* 1.5.6 Final (2008-06-08).
----------------------------------------------------------------
[New Topics]
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits
- merge: remove deprecated summary and diffstat options and config variables
- merge, pull: add '--(no-)log' command line option
- fmt-merge-msg: add '--(no-)log' options and 'merge.log' config variable
- add 'merge.stat' config variable
- merge, pull: introduce '--(no-)stat' option
- doc: moved merge.* config variables into separate merge-config.txt
I tried to fix its too-eager deprecation. The last one needs re-review; it should remove "these are still supported but will be removed" comments that earlier ones add, and must be held back until 1.6.0 or later.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
- git-blame --reverse
- builtin-blame.c: allow more than 16 parents
- builtin-blame.c: move prepare_final() into a separate function.
- rev-list --children
- revision traversal: --children option
The reverse blame I talked about earlier.
* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 3 commits
- diff-files: mark an index entry we know is up-to-date as such
- write_index(): optimize ce_smudge_racily_clean_entry() calls with CE_UPTODATE
- lstat: introduce a wrapper xlstat
Further reduce redundant lstat(2) calls during "git status" and other common operations.
----------------------------------------------------------------
[Graduated to "master"]
* jc/rebase (Sat Mar 15 13:17:42 2008 -0700) 1 commit
+ rebase [--onto O] A B: omit needless checkout
We used to "git checkout B && git rebase A" internally to implement this, which meant the work tree was smudged one time too many.
* gs/pretty-hexval (Fri Mar 21 10:05:06 2008 -0500) 1 commit
+ pretty.c: add %x00 format specifier.
Adds a generic "insert any byte value" to --pretty=format:<> specifier.
* jk/add-i-mode (Thu Mar 27 03:32:25 2008 -0400) 2 commits
+ add--interactive: allow user to choose mode update
+ add--interactive: ignore mode change in 'p'atch command
Allows mode change "pseudo hunk" to be staged separately.
NOTE NOTE NOTE! It might be interesting to extend the idea of this patch to treat "new file" as a pseudo hunk to record the much talked about "intent to add". That is, add a new command (or a new submode to patch subcommand) that lets you add a file that is so far untracked, but only with its mode and e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 which is the blob object name for an _empty_ blob. After such an operation is done, "git diff" will show the new contents of the file you build in your work tree that you _could_ commit with "git commit -a".
* fl/send-email-outside (Fri Mar 14 18:29:30 2008 +0100) 4 commits
+ send-email: Don't require to be called in a repository
+ Git.pm: Don't require repository instance for ident
+ Git.pm: Don't require a repository instance for config
+ var: Don't require to be in a git repository.
People couldn't invoke "git send-email" from outside their repositories, but this series allows them to.
* mk/unpack-careful (Fri Mar 7 08:39:53 2008 +0100) 5 commits
+ t5300: add test for "index-pack --strict"
+ receive-pack: allow using --strict mode for unpacking objects
+ unpack-objects: fix --strict handling
+ t5300: add test for "unpack-objects --strict"
+ unpack-objects: prevent writing of inconsistent objects
This would re-instate the "unpack-objects --strict".
* gp/gitweb (Sat Apr 5 16:37:18 2008 +0000) 2 commits
+ gitweb: fallback to system-wide config file (fixup)
+ gitweb: fallback to system-wide config file if default config does not exist
* jc/rename (Fri Mar 7 14:03:19 2008 -0800) 1 commit
+ Optimize rename detection for a huge diff
This makes memory consumption of the rename detection operation for a huge diff (that is, a change that touches many many files). I've been running with this for quite a while in my day-job repository without adverse effects.
----------------------------------------------------------------
[Actively Cooking]
* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits
+ contrib/hooks: add an example pre-auto-gc hook
+ Documentation/hooks: add pre-auto-gc hook
+ git-gc --auto: add pre-auto-gc hook
A new hook to stop "git gc --auto" from running.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this. There recently was a problem report that had a scent of this issue which turned out to be a false alarm (it was about http-push which does not do the native pack protocol optimization and the reporter was pushing into an empty repository which needs full transfer anyway).
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
+ diff: make --dirstat binary-file safe
The current "dirstat" does totally wrong thing when the set of files changed includes a binary one. This uses the same similarity evaluation code as rename heuristics uses to treat text and binary the same way.
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
+ Make git-add behave more sensibly in a case-insensitive environment
+ When adding files to the index, add support for case-independent matches
+ Make unpack-tree update removed files before any updated files
+ Make branch merging aware of underlying case-insensitive filsystems
+ Add 'core.ignorecase' option
+ Make hash_name_lookup able to do case-independent lookups
+ Make "index_name_exists()" return the cache_entry it found
+ Move name hashing functions into a file of its own
+ Make unpack_trees_options bit flags actual bitfields
The beginning of case insensitive filesystem support, currently ASCII-only.
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
+ Teach GIT-VERSION-GEN about the .git file
+ Teach git-submodule.sh about the .git file
+ Teach resolve_gitlink_ref() about the .git file
+ Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
+ sha1-lookup: make selection of 'middle' less aggressive
+ sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven, so let's prove it or revert it by giving it a bit more exposure.
----------------------------------------------------------------
[On Hold]
Some of these will start moving to "next", some I may have to ask for clean-up and resubmission for further discussion. Also the topics raised during the 1.5.5-rc freeze period should be rebased, cleaned-up and resubmit for discussion and review for inclusion in 1.5.6.
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
- filter-branch.sh: support nearly proper tag name filtering
Instead of discarding signed tags, this demotes them to simply annotated, which is technically not that different from signed tags.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* jc/rename-file-table (Fri Mar 7 14:03:19 2008 -0800) 1 commit
- diffcore-rename: make file_table available outside exact rename detection
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
Caution. "next" has been rebuilt with the remaining topics on top of "master".
A rough timeline from now on.
* Brown paper back fixes, if any, for 1.5.5.1 (2008-04-16).
* Discussion and review on new feature and enhancement patch series begins. Please resubmit things that you were cooking in your head during 1.5.5-rc period after cleaning up and retesting.
* 1.5.6 merge window closes (2008-05-14).
* Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).
* 1.5.6 Final (2008-06-08).
----------------------------------------------------------------
[New Topics]
* mk/color (Wed Apr 9 21:32:06 2008 +0200) 1 commit
+ Use color.ui variable in scripts too
* jk/remote-default-show (Wed Apr 9 11:15:51 2008 -0400) 1 commit
+ git-remote: show all remotes with "git remote show"
* jc/terminator-separator (Mon Apr 7 17:11:34 2008 -0700) 1 commit
+ log: teach "terminator" vs "separator" mode to "--pretty=format"
* js/decorate (Mon Apr 7 14:41:12 2008 +0100) 2 commits
- pretty=format: Add %d to show decoration
- decorate: use "const struct object"
* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit
+ git-fetch: always show status of non-tracking-ref fetches
* py/submodule (Sat Apr 12 23:05:33 2008 +0800) 3 commits
+ builtin-status: Add tests for submodule summary
+ builtin-status: submodule summary support
+ git-submodule summary: --for-status option
----------------------------------------------------------------
[Graduated to "master"]
----------------------------------------------------------------
[Actively Cooking]
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits
- merge: remove deprecated summary and diffstat options and config variables
+ merge, pull: add '--(no-)log' command line option
+ fmt-merge-msg: add '--(no-)log' options and 'merge.log' config variable
+ add 'merge.stat' config variable
+ merge, pull: introduce '--(no-)stat' option
+ doc: moved merge.* config variables into separate merge-config.txt
I fixed its too-eager deprecation. The last one needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to.
* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits
+ diff-files: mark an index entry we know is up-to-date as such
+ write_index(): optimize ce_smudge_racily_clean_entry() calls with CE_UPTODATE
Further reduce redundant lstat(2) calls during "git status" and other common operations.
* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits
+ contrib/hooks: add an example pre-auto-gc hook
+ Documentation/hooks: add pre-auto-gc hook
+ git-gc --auto: add pre-auto-gc hook
A new hook to stop "git gc --auto" from running.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this. There recently was a problem report that had a scent of this issue which turned out to be a false alarm (it was about http-push which does not do the native pack protocol optimization and the reporter was pushing into an empty repository which needs full transfer anyway).
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
+ diff: make --dirstat binary-file safe
The current "dirstat" does totally wrong thing when the set of files changed includes a binary one. This uses the same similarity evaluation code as rename heuristics uses to treat text and binary the same way.
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
+ Make git-add behave more sensibly in a case-insensitive environment
+ When adding files to the index, add support for case-independent matches
+ Make unpack-tree update removed files before any updated files
+ Make branch merging aware of underlying case-insensitive filsystems
+ Add 'core.ignorecase' option
+ Make hash_name_lookup able to do case-independent lookups
+ Make "index_name_exists()" return the cache_entry it found
+ Move name hashing functions into a file of its own
+ Make unpack_trees_options bit flags actual bitfields
The beginning of case insensitive filesystem support, currently ASCII-only.
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
+ Teach GIT-VERSION-GEN about the .git file
+ Teach git-submodule.sh about the .git file
+ Teach resolve_gitlink_ref() about the .git file
+ Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
+ sha1-lookup: make selection of 'middle' less aggressive
+ sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven, so let's prove it or revert it by giving it a bit more exposure.
----------------------------------------------------------------
[On Hold]
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
- filter-branch.sh: support nearly proper tag name filtering
Instead of discarding signed tags, this demotes them to simply annotated, which is technically not that different from signed tags.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* jc/rename-file-table (Fri Mar 7 14:03:19 2008 -0800) 1 commit
- diffcore-rename: make file_table available outside exact rename detection
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 3 commits
- lstat: introduce a wrapper xlstat
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 2 lines · Junio C Hamano
* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit
+ git-fetch: always show status of non-tracking-ref fetches
I have been out of touch for a few days. My plan had been to come back with a new version that suppressed the status on pull, but I haven't seen anyone screaming about the change, so maybe it should just be left.
-Peff
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
Caution. "next" has been rebuilt with the remaining topics on top of "master".
A rough timeline from now on.
* 1.5.5.1 this Sunday, with what's in 'maint' tonight.
* Discussion and review on new feature and enhancement patch series begins. Please resubmit things that you were cooking in your head during 1.5.5-rc period after cleaning up and retesting.
* 1.5.6 merge window closes (2008-05-14).
* Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).
* 1.5.6 Final (2008-06-08).
----------------------------------------------------------------
[New Topics]
* ho/shared (Wed Apr 16 11:34:24 2008 +0300) 1 commit
+ Make core.sharedRepository more generic
Looked Ok, and will start cooking soon.
* pb/remote-mirror-config (Thu Apr 17 13:17:20 2008 +0200) 1 commit
- Add a remote.*.mirror configuration option
I haven't gave this very careful review yet.
* ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits
- git-svn: add documentation for --add-author-from option.
- git-svn: Add --add-author-from option.
- git-svn: add documentation for --use-log-author option.
Eric requested a new set of tests for this series.
* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits
- Add tests for branch --[no-]merged
- git-branch.txt: compare --contains, --merged and --no-merged
- git-branch: add support for --merged and --no-merged
Looked Ok, and will start cooking soon.
* py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit
- git-submodule: Extract functions module_info and module_url
I am a bit slow reviewing this series; only managed to queue the first one so far.
----------------------------------------------------------------
[Graduated to "master"]
----------------------------------------------------------------
[Actively Cooking]
* mk/color (Wed Apr 9 21:32:06 2008 +0200) 1 commit
+ Use color.ui variable in scripts too
* jk/remote-default-show (Wed Apr 9 11:15:51 2008 -0400) 1 commit
+ git-remote: show all remotes with "git remote show"
* jc/terminator-separator (Mon Apr 7 17:11:34 2008 -0700) 1 commit
+ log: teach "terminator" vs "separator" mode to "--pretty=format"
* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit
+ git-fetch: always show status of non-tracking-ref fetches
* py/submodule (Sat Apr 12 23:05:33 2008 +0800) 3 commits
+ builtin-status: Add tests for submodule summary
+ builtin-status: submodule summary support
+ git-submodule summary: --for-status option
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits
- merge: remove deprecated summary and diffstat options and config variables
+ merge, pull: add '--(no-)log' command line option
+ fmt-merge-msg: add '--(no-)log' options and 'merge.log' config variable
+ add 'merge.stat' config variable
+ merge, pull: introduce '--(no-)stat' option
+ doc: moved merge.* config variables into separate merge-config.txt
I fixed its too-eager deprecation. The last one needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to.
* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits
+ diff-files: mark an index entry we know is up-to-date as such
+ write_index(): optimize ce_smudge_racily_clean_entry() calls with CE_UPTODATE
Further reduce redundant lstat(2) calls during "git status" and other common operations.
* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits
+ contrib/hooks: add an example pre-auto-gc hook
+ Documentation/hooks: add pre-auto-gc hook
+ git-gc --auto: add pre-auto-gc hook
A new hook to stop "git gc --auto" from running.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this. There recently was a problem report that had a scent of this issue which turned out to be a false alarm (it was about http-push which does not do the native pack protocol optimization and the reporter was pushing into an empty repository which needs full transfer anyway).
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
+ diff: make --dirstat binary-file safe
The current "dirstat" does totally wrong thing when the set of files changed includes a binary one. This uses the same similarity evaluation code as rename heuristics uses to treat text and binary the same way.
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
+ Make git-add behave more sensibly in a case-insensitive environment
+ When adding files to the index, add support for case-independent matches
+ Make unpack-tree update removed files before any updated files
+ Make branch merging aware of underlying case-insensitive filsystems
+ Add 'core.ignorecase' option
+ Make hash_name_lookup able to do case-independent lookups
+ Make "index_name_exists()" return the cache_entry it found
+ Move name hashing functions into a file of its own
+ Make unpack_trees_options bit flags actual bitfields
The beginning of case insensitive filesystem support, currently ASCII-only.
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
+ Teach GIT-VERSION-GEN about the .git file
+ Teach git-submodule.sh about the .git file
+ Teach resolve_gitlink_ref() about the .git file
+ Add platform-independent .git "symlink"
The idea and the implementation seem Ok, but this leaves distinct feeling that it is a solution still waiting for a user (e.g. "git submodule" enhancements to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject).
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
+ sha1-lookup: make selection of 'middle' less aggressive
+ sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven, so let's prove it or revert it by giving it a bit more exposure.
----------------------------------------------------------------
[On Hold]
* js/decorate (Mon Apr 7 14:41:12 2008 +0100) 2 commits
- pretty=format: Add %d to show decoration
- decorate: use "const struct object"
This has stalled, after a petered-out discussion.
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
- filter-branch.sh: support nearly proper tag name filtering
Instead of discarding signed tags, this demotes them to simply annotated, which is technically not that different from signed tags. There was an objection if what this claims to do is the right thing to do to begin with. Also I haven't verified if it does what it claims to do.
Comments?
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* jc/rename-file-table (Fri Mar 7 14:03:19 2008 -0800) 1 commit
- diffcore-rename: make file_table available outside exact rename detection
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 3 commits
- lstat: introduce a wrapper xlstat
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 4 lines · Junio C Hamano
* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits
- Add tests forbranch --[no-]merged
- git-branch.txt: compare --contains, --merged and --no-merged
- git-branch: add support for --merged and --no-merged
I notice that you moved the test script into t3201 while still adding t3202, which probably wasn't your intent.
Would you like me to resend the patches with your fixups to tests and docs (and maybe even squash them into a single patch)?
--
larsh
Quoted 11 lines · Lars Hjemli
Quoted 4 lines · Junio C Hamano
* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits
- Add tests forbranch --[no-]merged
- git-branch.txt: compare --contains, --merged and --no-merged
- git-branch: add support for --merged and --no-mergedI notice that you moved the test script into t3201 while still adding t3202, which probably wasn't your intent.
Would you like me to resend the patches with your fixups to tests and docs (and maybe even squash them into a single patch)?
Thanks, but it's easy enough for me to amend the tip of lh/branch-merged to drop t3202 and that should be sufficient.
Hi,
Quoted 8 lines · Junio C Hamano
----------------------------------------------------------------
[On Hold]* js/decorate (Mon Apr 7 14:41:12 2008 +0100) 2 commits
- pretty=format: Add %d to show decoration
- decorate: use "const struct object"This has stalled, after a petered-out discussion.
I am not personally interested, but I thought that it was easy enough to do. So let's just scrap it, the mailing list has it should anybody need it in the future.
Ciao,
Dscho
Quoted 5 lines · Junio C Hamano
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
-filter-branch.sh: support nearly proper tag name filteringInstead of discarding signed tags, this demotes them to simply annotated, which is technically not that different from signed tags.
I just want to point out that this patch is not exclusively about signed tags.
The patch is about retaining annotated tags rather than demoting them to light-weight tag references as is done currently for _all_ annotated tags, signed and unsigned. When rewriting signed tags, the signature is stripped so that we don't write a tag with a bogus signature.
-brandon
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
Note.
Some commits on 'pu' have [comment] in front of their title, primarily to remind myself not to accidentally merge them to 'next' before issues are resolved. They will be amended either by replacement patch from the author, or when the issue raised on the list gets refuted convincingly enough to justify the original patch (in which case only the comment like "[questionable???]" will be removed without changing the tree of the commit).
The topics list the commits in reverse chronological order.
A rough timeline from now on.
* Discussion and review on new feature and enhancement patch series begins. Please resubmit things that you were cooking in your head during 1.5.5-rc period after cleaning up and retesting.
* 1.5.6 merge window closes (2008-05-14).
* Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).
* 1.5.6 Final (2008-06-08).
----------------------------------------------------------------
[New Topics]
* js/rebase-i-sequencer (Mon Apr 14 02:21:09 2008 +0200) 13 commits
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project.
* db/clone-in-c (Thu Apr 17 19:32:43 2008 -0400) 8 commits
- [mess] Build in clone
- [strdup() and other clean-ups needed] Provide API access to init_db()
- [waiting for response] Add a function to set a non-default work tree
- Allow for having for_each_ref() list extra refs
- Have a constant extern refspec for "--tags"
- Add a library function to add an alternate to the alternates file
- Add a lockfile function to append to a file
- Mark the list of refs to fetch as const
----------------------------------------------------------------
[Graduated to "master"]
* mk/color (Wed Apr 9 21:32:06 2008 +0200) 1 commit
+ Use color.ui variable in scripts too
* jk/remote-default-show (Wed Apr 9 11:15:51 2008 -0400) 1 commit
+ git-remote: show all remotes with "git remote show"
* jc/terminator-separator (Mon Apr 7 17:11:34 2008 -0700) 1 commit
+ log: teach "terminator" vs "separator" mode to "--pretty=format"
* py/submodule (Sat Apr 12 23:05:33 2008 +0800) 3 commits
+ builtin-status: Add tests for submodule summary
+ builtin-status: submodule summary support
+ git-submodule summary: --for-status option
* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits
+ contrib/hooks: add an example pre-auto-gc hook
+ Documentation/hooks: add pre-auto-gc hook
+ git-gc --auto: add pre-auto-gc hook
A new hook to stop "git gc --auto" from running.
* jc/dirstat (Tue Feb 12 17:06:58 2008 -0800) 1 commit
+ diff: make --dirstat binary-file safe
The current "dirstat" does totally wrong thing when the set of files changed includes a binary one. This uses the same similarity evaluation code as rename heuristics uses to treat text and binary the same way.
* jc/sha1-lookup (Sun Dec 30 03:13:27 2007 -0800) 2 commits
+ sha1-lookup: make selection of 'middle' less aggressive
+ sha1-lookup: more memory efficient search in sorted list of SHA-1
Micro-optimization whose real world benefit is not proven, so let's prove it or revert it by giving it a bit more exposure.
----------------------------------------------------------------
[Actively Cooking]
* pb/remote-mirror-config (Thu Apr 17 13:17:20 2008 +0200) 1 commit
+ Add a remote.*.mirror configuration option
* ho/shared (Wed Apr 16 11:34:24 2008 +0300) 1 commit
+ Make core.sharedRepository more generic
* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits
+ Add tests for branch --[no-]merged
+ git-branch.txt: compare --contains, --merged and --no-merged
+ git-branch: add support for --merged and --no-merged
* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit
+ git-fetch: always show status of non-tracking-ref fetches
This changes reporting behaviour of one-shot "git pull $url $branch", which would affect long-time users in integrator role (that's you, Linus ;-). Let's see if we hear anybody screaming.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits
- merge: remove deprecated summary and diffstat options and config variables
+ merge, pull: add '--(no-)log' command line option
+ fmt-merge-msg: add '--(no-)log' options and 'merge.log' config variable
+ add 'merge.stat' config variable
+ merge, pull: introduce '--(no-)stat' option
+ doc: moved merge.* config variables into separate merge-config.txt
The last one needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to.
* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits
+ diff-files: mark an index entry we know is up-to-date as such
+ write_index(): optimize ce_smudge_racily_clean_entry() calls with CE_UPTODATE
Further reduce redundant lstat(2) calls during "git status" and other common operations.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this. There recently was a problem report that had a scent of this issue which turned out to be a false alarm (it was about http-push which does not do the native pack protocol optimization and the reporter was pushing into an empty repository which needs full transfer anyway).
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
+ Make git-add behave more sensibly in a case-insensitive environment
+ When adding files to the index, add support for case-independent matches
+ Make unpack-tree update removed files before any updated files
+ Make branch merging aware of underlying case-insensitive filsystems
+ Add 'core.ignorecase' option
+ Make hash_name_lookup able to do case-independent lookups
+ Make "index_name_exists()" return the cache_entry it found
+ Move name hashing functions into a file of its own
+ Make unpack_trees_options bit flags actual bitfields
The beginning of case insensitive filesystem support, currently ASCII-only.
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
+ Teach GIT-VERSION-GEN about the .git file
+ Teach git-submodule.sh about the .git file
+ Teach resolve_gitlink_ref() about the .git file
+ Add platform-independent .git "symlink"
There was a GSoC project idea to enhance "git submodule" to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject, but it appears nobody took it.
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
+ filter-branch.sh: support nearly proper tag name filtering
Instead of discarding annotated and/or signed tags, this keeps them and demotes the signed ones to simply annotated. It issues warning when it does this demotion. I think the behaviour is sensible.
----------------------------------------------------------------
[Dropped]
* js/decorate (Mon Apr 7 14:41:12 2008 +0100) 2 commits . pretty=format: Add %d to show decoration
. decorate: use "const struct object"
Per author's lack of interest
----------------------------------------------------------------
[On Hold]
* ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits
- git-svn: add documentation for --add-author-from option.
- git-svn: Add --add-author-from option.
- git-svn: add documentation for --use-log-author option.
Eric requested a new set of tests for this series.
* py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit
- git-submodule: Extract functions module_info and module_url
I only managed to queue the first one so far.
It does not help motivating me reviewing the series that the overall tone of it is to ignore .git/config more and make .gitmodules take more active role, either. I have already said number of times why that is not a good idea and why it is against the overall submodule design.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 1 commit
- lstat: introduce a wrapper xlstat
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 6 lines · Junio C Hamano
* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits
+ contrib/hooks: add an example pre-auto-gc hook
+Documentation/hooks: add pre-auto-gc hook
+ git-gc --auto: add pre-auto-gc hookA new hook to stop "git gc --auto" from running.
About "git gc --auto", there was a patch sometime ago:
[PATCH] commit: resurrect "gc --auto" at the end
http://marc.info/?l=git&m=120716427130606&w=2
Was it dropped?
Quoted 8 lines · Michele Ballabio
Quoted 6 lines · Junio C Hamano
* mv/defer-gc (Wed Apr 2 21:35:11 2008 +0200) 3 commits
+ contrib/hooks: add an example pre-auto-gc hook
+Documentation/hooks: add pre-auto-gc hook
+ git-gc --auto: add pre-auto-gc hookA new hook to stop "git gc --auto" from running.
Quoted 7 lines
About "git gc --auto", there was a patch sometime ago:
[PATCH] commit: resurrect "gc --auto" at the end
http://marc.info/?l=git&m=120716427130606&w=2
Was it dropped?
In the thread, addition of an extra hook to "gc --auto" wasdiscussed. It was judged conditionally Ok as long as nobody assumes "gc --auto" is ultra-cheap. We used to have a "gc --auto" at the end of git-commit which violated that condition, but we do not have that anymore.
The patch resurrects the behaviour that makes the extra hook possibly unacceptable again, dosn't it?
Quoted 7 lines · Junio C Hamano
In the thread, addition of an extra hook to "gc --auto" wasdiscussed. It was judged conditionally Ok as long as nobody assumes "gc --auto" is ultra-cheap. We used to have a "gc --auto" at the end of git-commit which violated that condition, but we do not have that anymore.
The patch resurrects the behaviour that makes the extra hook possibly unacceptable again, dosn't it?
Yes. I thought there was an unwanted change in behavior in git-commit. Sorry for the noise.
Quoted 10 lines · Junio C Hamano
Here are the topics that have been cooking. Commits prefixed
with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.* py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit
- git-submodule: Extract functionsmodule_infoandmodule_url
Quoted 6 lines
I only managed to queue the first one so far.
It does not help motivating me reviewing the series that the overall tone of it is to ignore .git/config more and make .gitmodules take more active role, either. I have already said number of times why that is not a good idea and why it is against the overall submodule design.
I summarize junio's points that says $GIT_DIR/config is authoritative.
1. .gitmodules shouldn't be authoritative and should be just a hint to fill $GIT_DIR/config because
a) url may be rewritten with different protocol, such as from
"http://" to "git://"
b) url may be total different between .gitmodules and $GIT_DIR/config
2. When going back to an old HEAD of super project and do "git submodule update", the url recorded in .gitmodules may be stale or not existent anymore, so we should refer to $GIT_DIR/config for the right url.
3. We can record what contents we've seen in the .gitmodules, so that we can give users a chance to adjust what is in $GIT_DIR/config when we notice the entry in .gitmodules has changed.
Any others?
However, i argue the fall back strategy (say fall back to .gitmodules when we can't find an entries in $GIT_DIR/config) doesn't break the authority and isn't in contrast with the cases above. It just attachs more importance to .gitmodules and can make the world better in most cases.
For 1.a, i think we can keep these entries in .gitmodules, and use "url.<thisurl>.insteadof = <otherurl>" to override the urls.
For 1.b, i think this is a rare case. And we can override these urls in $GIT_DIR/config. However, in many cases, we havn't to do that.
For 2, i think it is also a rare case. And before going back, we can override the urls in $GIT_DIR/config.
For 3, i havn't found a good way to do that. And it doesn't conflict with the fall back strategy (say, wh
So, my conclusion
* 1.b, 2 and 3 are all rare cases, and these cases don't conflict with the fall back strategy
* 1.a is a usual case, and fallback + 'url insteadOf" will make things better
* The most common case is that most (even all) entries in .gitmodules are the same as entires in $GIT_DIR/config. So with fallback, we don't have to copy entries from .gitmodules to $GIT_DIR/config.
* And, in a central environment, i think it's common that the super project and sub project use the same protocol. So if we use relative urls in .gitmodules, when changing the url protocol the super project, the urls in .gitmodules needn't change and can be dynamically expanded with the url of the super project (Of course, after applying the 2nd patch of this series)
Signature · 1 line
Ping Yin
Quoted 11 lines · Ping Yin
Quoted 4 lines · Junio C Hamano
It does not help motivating me reviewing the series that the overall tone of it is to ignore .git/config more and make .gitmodules take more active role, either. I have already said number of times why that is not a good idea and why it is against the overall submodule design.
I summarize junio's points that says $GIT_DIR/config is authoritative.
[...]
Any others?
A reason you did not mention is security:
You never want your .git/config to be changed behind your back, which effectivly is the case when using the versioned .gitmodules information (similar problem as with a .gitconfig in-tree).
Another one:
From a design point of view, submodule URLs are project meta information unrelated to source history. So, actually, I think it was wrong to put submodule URLs (even hints only) into the versioned .gitmodules files (*).
The main reason for .gitmodules is to store submodule information which has to be in sync with commits, such as a submodule name related to some path where the submodule happens to be checked out in a given commit, and also related to some config entry holding the URL to allow for fetch/pull. The idea is that submodules have an identity in the supermodule (in contrast to files in git), such that related configuration keeps valid when moving submodules around. This needs simultanous adjusting the path attribute in .gitmodules when a submodule is moved.
Josef
(*) IMHO, it would be far better if such project meta/policy information could be in its own history (e.g. branch "gitconfig" to allow for easy propagation at clone/fetch time). However, any such configuration should need explicit interaction by the user to take over project config into the local git config (e.g. via a "git config merge gitconfig:config" after inspecting via "git show gitconfig:config").
Quoted 10 lines · Josef Weidendorfer
Quoted 9 lines · Ping Yin
Quoted 4 lines · Junio C Hamano
It does not help motivating me reviewing the series that the overall tone of it is to ignore .git/config more and make .gitmodules take more active role, either. I have already said number of times why that is not a good idea and why it is against the overall submodule design.
I summarize junio's points that says $GIT_DIR/config is authoritative.
Quoted 8 lines
Quoted 3 lines
[...]
Any others?
A reason you did not mention is security:
You never want your .git/config to be changed behind your back, which effectivly is the case when using the versioned .gitmodules information (similar problem as with a .gitconfig in-tree).
As discussed in another thread about in-tree .gitconfig, security issues only arise on limited configuration entries. However, there are no entries in .gitmodules falling into any of these entries.
Quoted 5 lines
Another one:
From a design point of view, submodule URLs are project meta information unrelated to source history. So, actually, I think it was wrong to put submodule URLs (even hints only) into the versioned .gitmodules files (*).
But now it actually acts as hints and we don't find a better way. I just propose that the hints become the good default.
Quoted 9 lines
The main reason for .gitmodules is to store submodule information which has to be in sync with commits, such as a submodule name related to some path where the submodule happens to be checked out in a given commit, and also related to some config entry holding the URL to allow for fetch/pull. The idea is that submodules have an identity in the supermodule (in contrast to files in git), such that related configuration keeps valid when moving submodules around. This needs simultanous adjusting the path attribute in .gitmodules when a submodule is moved.
If we go back to a old HEAD or switch to another branch with changed path for a submodule, what should 'git submodule update' do? I think entries in .gitmodules should take precedence.
So url in $GIT_DIR/config is authoritative, and path in .gitmodules is authoritative.
Signature · 1 line
Ping Yin
Quoted 8 lines · Ping Yin
Quoted 4 lines
A reason you did not mention is security:
You never want your .git/config to be changed behind your back, which effectivly is the case when using the versioned .gitmodules information (similar problem as with a .gitconfig in-tree).As discussed in another thread about in-tree .gitconfig, security issues only arise on limited configuration entries. However, there are no entries in .gitmodules falling into any of these entries.
Hmm... At least, it can be very annoying when git fetches data from repositories you did not expect, only because submodule URLs change via this fallback mechanism. Perhaps it is a little far reached, but suppose a project changes its URL, and the old one becomes occupied by a malicious person. The problem is that the URL with the now malicious repository is bound in the history of the project. For sure, you do not want to fetch from that old repository by accident, after you did a checkout of an old commit. And there would be no way to protect other people from this malicious repository other than rewriting the whole history.
Quoted 7 lines
Quoted 4 lines
Another one:
From a design point of view, submodule URLs are project meta information unrelated to source history. So, actually, I think it was wrong to put submodule URLs (even hints only) into the versioned .gitmodules files (*).But now it actually acts as hints and we don't find a better way. I just propose that the hints become the good default.
For me this sounds like: Now that we have made this bad decision, it does not matter to make it even worse.
What was the motivation for this fallback mechanism?
In any way, it is preferable to always use the correct URL for submodules. Thus, when the URL ever changes in the projects livetime (covered by git history), you want to have the correct URL in your .git/config (not to accidently use the wrong URL when checking out an old commit). But then, the fallback mechanism does not trigger anyway.
Quoted 9 lines
Quoted 8 lines
The main reason for .gitmodules is to store submodule information which has to be in sync with commits, such as a submodule name related to some path where the submodule happens to be checked out in a given commit, and also related to some config entry holding the URL to allow for fetch/pull. The idea is that submodules have an identity in the supermodule (in contrast to files in git), such that related configuration keeps valid when moving submodules around. This needs simultanous adjusting the path attribute in .gitmodules when a submodule is moved.
Quoted 3 lines
If we go back to a old HEAD or switch to another branch with changed path for a submodule, what should 'git submodule update' do? I think entries in .gitmodules should take precedence.
Of course. It makes no sense to have submodule path configuration in .git/config, as it has to be in sync with the current commit. That has nothing to do with precedence. The same is true for .gitattributes, for example.
Quoted 2 lines
So url in $GIT_DIR/config is authoritative, and path in .gitmodules is authoritative.
No.
These are totally different types of configurations.
Josef
Quoted 11 lines · Josef Weidendorfer
Quoted 8 lines · Ping Yin
Quoted 4 lines
A reason you did not mention is security:
You never want your .git/config to be changed behind your back, which effectivly is the case when using the versioned .gitmodules information (similar problem as with a .gitconfig in-tree).As discussed in another thread about in-tree .gitconfig, security issues only arise on limited configuration entries. However, there are no entries in .gitmodules falling into any of these entries.
Quoted 6 lines
Hmm... At least, it can be very annoying when git fetches data from repositories you did not expect, only because submodule URLs change via this fallback mechanism. Perhaps it is a little far reached, but suppose a project changes its URL, and the old one becomes occupied by a malicious person. The problem is that the URL with the now malicious repository is bound in the history of the project.
It is always bound now without the fallback patch :)
Quoted 4 lines
For sure, you do not want to fetch from that old repository
by accident, after you did a checkout of an old commit. And there would be no way to protect other people from this malicious repository other than rewriting the whole history.
I wonder how the *malicious* repository can hurt us since only the commit recorded in commit of the super project will be checked out.
Quoted 7 lines
Quoted 7 lines
Quoted 6 lines
Another one:
From a design point of view, submodule URLs are project meta information unrelated to source history. So, actually, I think it was wrong to put submodule URLs (even hints only) into the versioned .gitmodules files (*).
Quoted 5 lines
Quoted 2 lines
But now it actually acts as hints and we don't find a better way. I just propose that the hints become the good default.
For me this sounds like: Now that we have made this bad decision, it does not matter to make it even worse.
I should be like: Now that we have made a bad decision (if it is), we have to improve it to make life better before we can find a better solution.
Quoted 8 lines
What was the motivation for this fallback mechanism?
In any way, it is preferable to always use the correct URL for submodules. Thus, when the URL ever changes in the projects livetime (covered by git history), you want to have the correct URL in your .git/config (not to accidently use the wrong URL when checking out an old commit). But then, the fallback mechanism does not trigger anyway.
I havn't found yet how an incorrect URL can hurt us. The worst case i can imagine is the failure of "git submodule update".
Two of the most common cases which can result in an incorrect/stale url is
* the repository has been moved to another machine
* the directory structure of upstream repositories has changed
However, there are also cases that the old version of url in .gitmodules is correct.
Think about the case that the reposotory maintainer has decided to replace current submodule with a totoally different one. In this case, when back to the old HEAD, the url in .gitmodules is correct while url in $GIT_DIR/config is incorrect.
So, when error happens, we can't judge which url is correct. So just let the user make the decision by refering the change history of .gitmodules or asking the repository maintainer.
Signature · 1 line
Ping Yin
Quoted 10 lines · Ping Yin
On Wed, Apr 23, 2008 at 2:07 AM, Josef Weidendorfer
Quoted 6 lines
Hmm... At least, it can be very annoying when git fetches data from repositories you did not expect, only because submodule URLs change via this fallback mechanism. Perhaps it is a little far reached, but suppose a project changes its URL, and the old one becomes occupied by a malicious person. The problem is that the URL with the now malicious repository is bound in the history of the project.
It is always bound now without the fallback patch :)
Quoted 7 lines
Quoted 4 lines
For sure, you do not want to fetch from that old repository
by accident, after you did a checkout of an old commit. And there would be no way to protect other people from this malicious repository other than rewriting the whole history.I wonder how the *malicious* repository can hurt us since only the commit recorded in commit of the super project will be checked out.
If one manages to hack on repository one can modify it enormous amount of ways, including spoofing on SHA (providing wrong contents for it - does git verify that when getting a pack?), utilizing bugs in git etc...
I doubt somebody would spend that much of an effort but you know, you can not be paranoid *enough* :)
regards,
Fedor.
onsdagen den 23 april 2008 09.47.57 skrev Fedor Sergeev:
Quoted 3 lines
If one manages to hack on repository one can modify it enormous amount of ways, including spoofing on SHA (providing wrong contents for it - does git verify that when getting a pack?), utilizing bugs in git etc...
The pack transfer protocol does not transfer the SHA of objects, only the contents is transferred. The SHA-1 is (has to be since it is not sent) reconstructed on the receiving end.
-- robin
Quoted 8 lines · Robin Rosenberg
onsdagen den 23 april 2008 09.47.57 skrev Fedor Sergeev:
Quoted 3 lines
If one manages to hack on repository one can modify it enormous amount of ways, including spoofing on SHA (providing wrong contents for it - does git verify that when getting a pack?), utilizing bugs in git etc...
The pack transfer protocol does not transfer the SHA of objects, only the contents is transferred. The SHA-1 is (has to be since it is not sent) reconstructed on the receiving end.
Thats nice. Then I agree its difficult to spoil superproject out of submodule other than it just does not checkout.
regards,
Fedor.
Quoted 29 lines · Fedor Sergeev
Quoted 5 lines · Ping Yin
On Wed, Apr 23, 2008 at 2:07 AM, Josef Weidendorfer
Quoted 1 line
Hmm... At least, it can be very annoying when git fetches data from
repositories
Quoted 2 lines
Quoted 2 lines
you did not expect, only because submodule URLs change via this fallback mechanism. Perhaps it is a little far reached, but suppose a
project
Quoted 1 line
Quoted 1 line
changes its URL, and the old one becomes occupied by a malicious
person.
Quoted 1 line
Quoted 1 line
The problem is that the URL with the now malicious repository is bound
in the
Quoted 8 lines
Quoted 2 lines
history of the project.
It is always bound now without the fallback patch :)
Quoted 2 lines
For sure, you do not want to fetch from that old repository by accident, after you did a checkout of an old commit. And there would
be no
Quoted 1 line
Quoted 1 line
way to protect other people from this malicious repository other than
rewriting
Quoted 3 lines
Quoted 2 lines
the whole history.
Quoted 7 lines
Quoted 3 lines
I wonder how the *malicious* repository can hurt us since only the commit recorded in commit of the super project will be checked out.
If one manages to hack on repository one can modify it enormous amount of
ways, including spoofing on SHA (providing wrong contents for it - does git verify that when getting a pack?), utilizing bugs in git etc...
Doable? I dunno.
Signature · 1 line
Ping Yin
Hi,
Quoted 3 lines · Ping Yin
If we go back to a old HEAD or switch to another branch with changed path for a submodule, what should 'git submodule update' do? I think entries in .gitmodules should take precedence.
Literally the most common reason for a _different_ .gitmodules in an older revision is that the repository was moved to another machine.
In this case, your suggestion is actively wrong.
Ciao,
Dscho
Quoted 5 lines · Johannes Schindelin
Hi,
On Wed, 23 Apr 2008, Ping Yin wrote:
Quoted 9 lines
Quoted 3 lines
If we go back to a old HEAD or switch to another branch with changed path for a submodule, what should 'git submodule update' do? I think entries in .gitmodules should take precedence.
Literally the most common reason for a _different_ .gitmodules in an older revision is that the repository was moved to another machine.
In this case, your suggestion is actively wrong.
Another common reason is the adjustment of repository directory in the central environment
so i said *path*, not *url*. I agree what Josef said in the the following reply: "It makes no sense to have submodule path configuration in .git/config, as it has to be in sync with the current commit". So it should be bettter to store path info only in .gitmodules instead of $GIT_DIR/config
Signature · 1 line
Ping Yin
Quoted 12 lines · Ping Yin
Quoted 9 lines · Johannes Schindelin
Hi,
Quoted 3 lines · Ping Yin
If we go back to a old HEAD or switch to another branch with changed path for a submodule, what should 'git submodule update' do? I think entries in .gitmodules should take precedence.
Quoted 7 lines
Quoted 5 lines
Literally the most common reason for a _different_ .gitmodules in an older revision is that the repository was moved to another machine.
In this case, your suggestion is actively wrong.
Another common reason is the adjustment of repository directory in the central environment
I'm wrong, this is the case that *url* changes.
Quoted 6 lines
so i said *path*, not *url*. I agree what Josef said in the the following reply: "It makes no sense to have submodule path configuration in .git/config, as it has to be in sync with the current commit". So it should be bettter to store path info only in .gitmodules instead of $GIT_DIR/config
The case that *path* changes is the submodule is moved to a new path in some commit. But it is a very rare case.
Signature · 1 line
Ping Yin
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
A rough timeline from now on.
* Discussion and review on new feature and enhancement patch series begins. Please resubmit things that you were cooking in your head during 1.5.5-rc period after cleaning up and retesting.
* 1.5.6 merge window closes (2008-05-14).
* Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).
* 1.5.6 Final (2008-06-08).
----------------------------------------------------------------
[New Topics]
* db/learn-HEAD (Sat Apr 26 15:53:12 2008 -0400) 2 commits
- Make ls-remote http://... list HEAD, like for git://...
- Make walker.fetch_ref() take a struct ref.
* cc/help (Fri Apr 25 08:25:41 2008 +0200) 5 commits
- documentation: web--browse: add a note about konqueror
- documentation: help: add info about "man.<tool>.cmd" config var
- help: use "man.<tool>.cmd" as custom man viewer command
- documentation: help: add "man.<tool>.path" config variable
- help: use man viewer path from "man.<tool>.path" config var
* jn/webfeed (Sun Apr 20 22:09:48 2008 +0200) 1 commit
+ gitweb: Use feed link according to current view
* ar/batch-cat (Wed Apr 23 15:17:53 2008 -0400) 11 commits
- git-svn: Speed up fetch
- Git.pm: Add hash_and_insert_object and cat_blob
- Git.pm: Add command_bidi_pipe and command_close_bidi_pipe
- git-hash-object: Add --stdin-paths option
- Add more tests for git hash-object
- Move git-hash-object tests from t5303 to t1007
- git-cat-file: Add --batch option
- git-cat-file: Add --batch-check option
- git-cat-file: Make option parsing a little more flexible
- git-cat-file: Small refactor of cmd_cat_file
- <<REJECT>> Add tests for git cat-file
* lt/dirmatch-optim (Sat Apr 19 14:22:38 2008 -0700) 1 commit
+ Optimize match_pathspec() to avoid fnmatch()
* dm/cherry-pick-s (Sat Apr 26 15:14:28 2008 -0500) 1 commit
+ Allow cherry-pick (and revert) to add signoff line
----------------------------------------------------------------
[Graduated to "master"]
* ho/shared (Wed Apr 16 11:34:24 2008 +0300) 1 commit
+ Make core.sharedRepository more generic
----------------------------------------------------------------
[Will merge to "master" soonish]
* pb/remote-mirror-config (Thu Apr 17 13:17:20 2008 +0200) 1 commit
+ Add a remote.*.mirror configuration option
* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits
+ Add tests for branch --[no-]merged
+ git-branch.txt: compare --contains, --merged and --no-merged
+ git-branch: add support for --merged and --no-merged
* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit
+ git-fetch: always show status of non-tracking-ref fetches
This changes reporting behaviour of one-shot "git pull $url $branch", which would affect long-time users in integrator role (that's you, Linus ;-). Let's see if we hear anybody screaming.
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
+ Teach GIT-VERSION-GEN about the .git file
+ Teach git-submodule.sh about the .git file
+ Teach resolve_gitlink_ref() about the .git file
+ Add platform-independent .git "symlink"
There was a GSoC project idea to enhance "git submodule" to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject, but it appears nobody took it.
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
+ filter-branch.sh: support nearly proper tag name filtering
Instead of discarding annotated and/or signed tags, this keeps them and demotes the signed ones to simply annotated. It issues warning when it does this demotion. I think the behaviour is sensible.
* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits
+ diff-files: mark an index entry we know is up-to-date as such
+ write_index(): optimize ce_smudge_racily_clean_entry() calls with CE_UPTODATE
Further reduce redundant lstat(2) calls during "git status" and other common operations.
----------------------------------------------------------------
[Actively Cooking]
* js/rebase-i-sequencer (Fri Apr 25 22:50:53 2008 -0700) 14 commits
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits
- merge: remove deprecated summary and diffstat options and config variables
+ merge, pull: add '--(no-)log' command line option
+ fmt-merge-msg: add '--(no-)log' options and 'merge.log' config variable
+ add 'merge.stat' config variable
+ merge, pull: introduce '--(no-)stat' option
+ doc: moved merge.* config variables into separate merge-config.txt
The last one needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this. There recently was a problem report that had a scent of this issue which turned out to be a false alarm (it was about http-push which does not do the native pack protocol optimization and the reporter was pushing into an empty repository which needs full transfer anyway).
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
+ Make git-add behave more sensibly in a case-insensitive environment
+ When adding files to the index, add support for case-independent matches
+ Make unpack-tree update removed files before any updated files
+ Make branch merging aware of underlying case-insensitive filsystems
+ Add 'core.ignorecase' option
+ Make hash_name_lookup able to do case-independent lookups
+ Make "index_name_exists()" return the cache_entry it found
+ Move name hashing functions into a file of its own
+ Make unpack_trees_options bit flags actual bitfields
The beginning of case insensitive filesystem support, currently ASCII-only.
----------------------------------------------------------------
[Dropped]
----------------------------------------------------------------
[On Hold]
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* db/clone-in-c (Thu Apr 17 19:32:43 2008 -0400) 8 commits
- [mess] Build in clone
- [strdup() and other clean-ups needed] Provide API access to init_db()
- [waiting for response] Add a function to set a non-default work tree
- Allow for having for_each_ref() list extra refs
- Have a constant extern refspec for "--tags"
- Add a library function to add an alternate to the alternates file
- Add a lockfile function to append to a file
- Mark the list of refs to fetch as const
There were a few comments and suggestions to the ones near the tip that need to be addressed. Earlier ones look Ok.
* ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits
- git-svn: add documentation for --add-author-from option.
- git-svn: Add --add-author-from option.
- git-svn: add documentation for --use-log-author option.
Eric requested a new set of tests for this series.
* py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit
- git-submodule: Extract functions module_info and module_url
Not going well.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 1 commit
- lstat: introduce a wrapper xlstat
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 6 lines · Junio C Hamano
* py/submodule-2 (Wed Apr 16 22:19:31 2008 +0800) 1 commit
- git-submodule: Extract functionsmodule_infoandmodule_urlNot going well.
Hmm, i wonder how this series can go well. Or this series is totoally bad and should be discarded.
Ping Yin
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It's been a while since the last issue of this series. I've been swamped, and haven't had a chance to spend enough time on reviewing and accepting patches.
A good news is that the tip of 'pu' tonight passes all the test --- it has been broken for some time.
A rough timeline from now on.
* Discussion and review on new feature and enhancement patch series begins. Please resubmit things that you were cooking in your head during 1.5.5-rc period after cleaning up and retesting.
* 1.5.6 merge window closes (2008-05-14).
* Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).
* 1.5.6 Final (2008-06-08).
----------------------------------------------------------------
[New Topics]
* bd/tests (Sun May 4 01:38:00 2008 -0400) 10 commits
+ Rename the test trash directory to contain spaces.
+ Fix tests breaking when checkout path contains shell metacharacters
+ Don't use the 'export NAME=value' in the test scripts.
+ lib-git-svn.sh: Fix quoting issues with paths containing shell metacharacters
+ test-lib.sh: Fix some missing path quoting
+ Use test_set_editor in t9001-send-email.sh
+ test-lib.sh: Add a test_set_editor function to safely set $VISUAL
+ git-send-email.perl: Handle shell metacharacters in $EDITOR properly
+ config.c: Escape backslashes in section names properly
+ git-rebase.sh: Fix --merge --abort failures when path contains whitespace
Making sure the tools quote paths correctly and work inside a directory whose pathname contains whitespace. Thanks Bryan, and thanks J6t for reviewing and testing.
* np/pack (Fri May 2 15:11:51 2008 -0400) 7 commits
+ pack-objects: fix early eviction for max depth delta objects
+ pack-objects: allow for early delta deflating
+ pack-objects: move compression code in a separate function
+ pack-objects: clean up write_object() a bit
+ pack-objects: simplify the condition associated with --all- progress
+ pack-objects: remove some double negative logic
+ pack-objects: small cleanup
Every time Nico tweaks pack generation, something good comes out ;-).
* py/diff-submodule (Sat May 3 17:24:28 2008 -0700) 5 commits
+ is_racy_timestamp(): do not check timestamp for gitlinks
+ diff-lib.c: rename check_work_tree_entity()
+ diff: a submodule not checked out is not modified
+ Add t7506 to test submodule related functions for git-status
+ t4027: test diff for submodule with empty directory
A submodule that is not checked out is not modified, but was mistaken as being removed. Thanks Ping for tests and fixes.
* cc/hooks-doc (Fri May 2 05:30:47 2008 +0200) 1 commit
- Documentation: rename "hooks.txt" to "githooks.txt" and make it a man page
I've looked at but not applied most of the patches in the series that built on top of this. I think it probably is a good goal to make everything _accessible_ as manual pages, but at the same time I do not exactly like the HTML rendered results of material that are not really manual pages. E.g. "Everyday" looks much worse to me.
At least, the categorization of sections 1/5/7 should be straightened out. diffcore is not about "file format" at all and do not belong to section 5, for example.
* pb/push (Mon Apr 28 11:32:12 2008 -0400) 1 commit
- add special "matching refs" refspec
This first patch is a good enhancement without hurting any existing users. We need a staged introduction of the second and later patches, and many people including me did not agree the later ones in the series are desirable.
* mv/format-cc (Tue Apr 29 12:56:47 2008 +0200) 3 commits
+ Add tests for sendemail.cc configuration variable
+ git-send-email: add a new sendemail.cc configuration variable
+ git-format-patch: add a new format.cc configuration variable
* as/graph (Mon May 5 00:57:03 2008 -0700) 4 commits
- graph API: eliminate unnecessary indentation
- log and rev-list: add --graph option
- Add history graph API
- revision API: split parent rewriting and parent printing options
Draw "tig 'g'" graph without tig ;-)
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 4 commits
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
+ diff: make "too many files" rename warning optional
+ bump rename limit defaults
+ add merge.renamelimit config option
The documentation part of this series partly depends on another series, but I am expecting both to graduate smoothly to 'master' reasonably soon.
* sv/first-parent (Sun Apr 27 19:32:46 2008 +0200) 1 commit
+ Simplify and fix --first-parent implementation
* gp/bisect-fix (Mon May 5 07:43:00 2008 +0000) 1 commit
+ git-bisect.sh: don't accidentally override existing branch "bisect"
----------------------------------------------------------------
[Graduated to "master"]
* pb/remote-mirror-config (Thu Apr 17 13:17:20 2008 +0200) 1 commit
+ Add a remote.*.mirror configuration option
* lh/branch-merged (Fri Apr 18 18:30:15 2008 +0200) 3 commits
+ Add tests for branch --[no-]merged
+ git-branch.txt: compare --contains, --merged and --no-merged
+ git-branch: add support for --merged and --no-merged
* jk/fetch-status (Wed Apr 9 20:11:52 2008 -0400) 1 commit
+ git-fetch: always show status of non-tracking-ref fetches
This changes reporting behaviour of one-shot "git pull $url $branch", which would affect long-time users in integrator role (that's you, Linus ;-). Let's see if we hear anybody screaming.
* lh/git-file (Wed Feb 20 23:13:16 2008 +0100) 4 commits
+ Teach GIT-VERSION-GEN about the .git file
+ Teach git-submodule.sh about the .git file
+ Teach resolve_gitlink_ref() about the .git file
+ Add platform-independent .git "symlink"
There was a GSoC project idea to enhance "git submodule" to take advantage of this facility to preserve the subrepository while switching between a revision with a submodule and another before the submodule was bound to the superproject, but it appears nobody took it.
* bc/filter-branch (Wed Mar 26 10:47:09 2008 -0500) 1 commit
+ filter-branch.sh: support nearly proper tag name filtering
Instead of discarding annotated and/or signed tags, this keeps them and demotes the signed ones to simply annotated. It issues warning when it does this demotion. I think the behaviour is sensible.
* jc/lstat (Sun Mar 30 12:39:25 2008 -0700) 2 commits
+ diff-files: mark an index entry we know is up-to-date as such
+ write_index(): optimize ce_smudge_racily_clean_entry() calls with CE_UPTODATE
Further reduce redundant lstat(2) calls during "git status" and other common operations.
----------------------------------------------------------------
[Will merge to "master" soonish]
* lt/dirmatch-optim (Sat Apr 19 14:22:38 2008 -0700) 1 commit
+ Optimize match_pathspec() to avoid fnmatch()
* dm/cherry-pick-s (Sat Apr 26 15:14:28 2008 -0500) 1 commit
+ Allow cherry-pick (and revert) to add signoff line
* cc/help (Fri Apr 25 08:25:41 2008 +0200) 5 commits
+ documentation: web--browse: add a note about konqueror
+ documentation: help: add info about "man.<tool>.cmd" config var
+ help: use "man.<tool>.cmd" as custom man viewer command
+ documentation: help: add "man.<tool>.path" config variable
+ help: use man viewer path from "man.<tool>.path" config var
* jn/webfeed (Sun Apr 20 22:09:48 2008 +0200) 1 commit
+ gitweb: Use feed link according to current view
----------------------------------------------------------------
[Actively Cooking]
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption that wc -l does not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project. Dscho seems to have quite a strong objection to the 'mark' syntax and mechanism being unnecessarily complex. Let's wait and see if a less complex but equally expressive alternative materializes...
* db/learn-HEAD (Sat Apr 26 15:53:12 2008 -0400) 2 commits
+ Make ls-remote http://... list HEAD, like for git://...
+ Make walker.fetch_ref() take a struct ref.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 6 commits
- merge: remove deprecated summary and diffstat options and config variables
+ merge, pull: add '--(no-)log' command line option
+ fmt-merge-msg: add '--(no-)log' options and 'merge.log' config variable
+ add 'merge.stat' config variable
+ merge, pull: introduce '--(no-)stat' option
+ doc: moved merge.* config variables into separate merge-config.txt
The last one needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this. There recently was a problem report that had a scent of this issue which turned out to be a false alarm (it was about http-push which does not do the native pack protocol optimization and the reporter was pushing into an empty repository which needs full transfer anyway).
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
+ Make git-add behave more sensibly in a case-insensitive environment
+ When adding files to the index, add support for case-independent matches
+ Make unpack-tree update removed files before any updated files
+ Make branch merging aware of underlying case-insensitive filsystems
+ Add 'core.ignorecase' option
+ Make hash_name_lookup able to do case-independent lookups
+ Make "index_name_exists()" return the cache_entry it found
+ Move name hashing functions into a file of its own
+ Make unpack_trees_options bit flags actual bitfields
The beginning of case insensitive filesystem support, currently ASCII-only.
----------------------------------------------------------------
[Dropped]
* ap/svn (Tue Apr 15 21:04:18 2008 -0400) 3 commits . git-svn: add documentation for --add-author-from option. . git-svn: Add --add-author-from option.
. git-svn: add documentation for --use-log-author option.
Eric requested a new set of tests for this series which never came. I am still holding onto the tip of the topic in case we can resurrect it, but it is not merged to 'pu'.
----------------------------------------------------------------
[On Hold]
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* db/clone-in-c (Sun Apr 27 13:39:30 2008 -0400) 8 commits
- Build in clone
- Provide API access to init_db()
- Add a function to set a non-default work tree
- Allow for having for_each_ref() list extra refs
- Have a constant extern refspec for "--tags"
- Add a library function to add an alternate to the alternates file
- Add a lockfile function to append to a file
- Mark the list of refs to fetch as const
I'd really want this in 1.5.6; will merge to 'next' after giving a final pass sometime this week.
* ar/batch-cat (Wed Apr 23 15:17:47 2008 -0400) 5 commits
- git-cat-file: Add --batch option
- git-cat-file: Add --batch-check option
- git-cat-file: Make option parsing a little more flexible
- git-cat-file: Small refactor of cmd_cat_file
- Add tests for git cat-file
I fixed up the problematic shell script in the first patch in the series but later one introduced the same problematic constructs in another file, at which point I gave up and discarded the rest. At least it now passes its own testsuite without breaking others.
* jc/test (Thu Feb 21 21:17:54 2008 -0800) 2 commits
- tests: convert "cmp" and "cmp -s" to test_cmp
- tests: test_cmp helper function
This one may be more elaborate, but Jeff's patch is much simpler.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour by not using merge-recursive, but unfortunately has stalled for some time now.
* jc/lstat-debug (Thu Mar 27 16:56:53 2008 -0700) 1 commit
- lstat: introduce a wrapper xlstat
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It's been a while since the last issue of this series. I've been swamped, and haven't had a chance to spend enough time on reviewing and accepting patches.
A rough timeline from now on.
* Will merge the remaining topics already on 'next', and perhaps accept a handful minor topics that are not yet in.
* Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21).
* 1.5.6 Final (2008-06-08).
----------------------------------------------------------------
[New Topics]
* bc/tag (Fri May 9 00:03:35 2008 -0500) 3 commits
- ident.c: New function valid_ident for checking ident string formatting
- Make mktag a builtin
- mktag.c: adjust verify_tag parameters
I stopped looking at this after hitting an unappliable patch --- will need to take a look at it again.
* js/config-cb (Wed May 14 18:46:53 2008 +0100) 1 commit
- Provide git_config with a callback-data parameter
This needs to wait until most of the other things graduate for 1.5.6; luckily, unlike the other "path-list" changes, misconversions is much easier to catch for this change and I am not worried about it.
* ds/branch-auto-rebase (Sat May 10 15:36:29 2008 -0700) 1 commit
+ Allow tracking branches to set up rebase by default.
For 1.5.6.
* bc/repack (Wed May 14 01:33:53 2008 -0400) 5 commits
+ let pack-objects do the writing of unreachable objects as loose objects
+ add a force_object_loose() function
+ builtin-gc.c: deprecate --prune, it now really has no effect
+ git-gc: always use -A when manually repacking
+ repack: modify behavior of -A option to leave unreferenced objects unpacked
For 1.5.6.
* sp/ignorecase (Sun May 11 18:16:42 2008 +0200) 4 commits
- t0050: Add test for case insensitive add
- t0050: Set core.ignorecase case to activate case insensitivity
- t0050: Test autodetect core.ignorecase
- git-init: autodetect core.ignorecase
This unfortunately seems to break on natively case sensitive filesystems.
* ar/add-unreadable (Mon May 12 19:59:23 2008 +0200) 5 commits
+ Add a config option to ignore errors for git-add
+ Add a test for git-add --ignore-errors
+ Add --ignore-errors to git-add to allow it to skip files with read errors
+ Extend interface of add_files_to_cache to allow ignore indexing errors
+ Make the exit code of add_file_to_index actually useful
* jc/diff-words (Sun May 11 12:33:48 2008 -0700) 2 commits
- diff --color-words: a bit of tweak
- diff --color-words reimplementation
----------------------------------------------------------------
[Graduated to "master"]
* lt/case-insensitive (Sat Mar 22 14:22:44 2008 -0700) 9 commits
+ Make git-add behave more sensibly in a case-insensitive environment
+ When adding files to the index, add support for case-independent matches
+ Make unpack-tree update removed files before any updated files
+ Make branch merging aware of underlying case-insensitive filsystems
+ Add 'core.ignorecase' option
+ Make hash_name_lookup able to do case-independent lookups
+ Make "index_name_exists()" return the cache_entry it found
+ Move name hashing functions into a file of its own
+ Make unpack_trees_options bit flags actual bitfields
The beginning of case insensitive filesystem support, currently ASCII-only.
* db/learn-HEAD (Sat Apr 26 15:53:12 2008 -0400) 2 commits
+ Make ls-remote http://... list HEAD, like for git://...
+ Make walker.fetch_ref() take a struct ref.
* cc/help (Fri Apr 25 08:25:41 2008 +0200) 5 commits
+ documentation: web--browse: add a note about konqueror
+ documentation: help: add info about "man.<tool>.cmd" config var
+ help: use "man.<tool>.cmd" as custom man viewer command
+ documentation: help: add "man.<tool>.path" config variable
+ help: use man viewer path from "man.<tool>.path" config var
* dm/cherry-pick-s (Sat Apr 26 15:14:28 2008 -0500) 1 commit
+ Allow cherry-pick (and revert) to add signoff line
* lt/dirmatch-optim (Sat Apr 19 14:22:38 2008 -0700) 1 commit
+ Optimize match_pathspec() to avoid fnmatch()
* jn/webfeed (Sun Apr 20 22:09:48 2008 +0200) 1 commit
+ gitweb: Use feed link according to current view
* gp/bisect-fix (Mon May 5 07:43:00 2008 +0000) 1 commit
+ git-bisect.sh: don't accidentally override existing branch "bisect"
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 3 commits
+ diff: make "too many files" rename warning optional
+ bump rename limit defaults
+ add merge.renamelimit config option
* py/diff-submodule (Sat May 3 17:24:28 2008 -0700) 5 commits
+ is_racy_timestamp(): do not check timestamp for gitlinks
+ diff-lib.c: rename check_work_tree_entity()
+ diff: a submodule not checked out is not modified
+ Add t7506 to test submodule related functions for git-status
+ t4027: test diff for submodule with empty directory
A submodule that is not checked out is not modified, but was mistaken as being removed. Thanks Ping for tests and fixes.
* cc/hooks-doc (Fri May 2 05:30:47 2008 +0200) 1 commit
+ Documentation: rename "hooks.txt" to "githooks.txt" and make it a man page
* mv/format-cc (Tue Apr 29 12:56:47 2008 +0200) 3 commits
+ Add tests for sendemail.cc configuration variable
+ git-send-email: add a new sendemail.cc configuration variable
+ git-format-patch: add a new format.cc configuration variable
* bd/tests (Sun May 4 01:38:00 2008 -0400) 10 commits
+ Rename the test trash directory to contain spaces.
+ Fix tests breaking when checkout path contains shell metacharacters
+ Don't use the 'export NAME=value' in the test scripts.
+ lib-git-svn.sh: Fix quoting issues with paths containing shell metacharacters
+ test-lib.sh: Fix some missing path quoting
+ Use test_set_editor in t9001-send-email.sh
+ test-lib.sh: Add a test_set_editor function to safely set $VISUAL
+ git-send-email.perl: Handle shell metacharacters in $EDITOR properly
+ config.c: Escape backslashes in section names properly
+ git-rebase.sh: Fix --merge --abort failures when path contains whitespace
Making sure the tools quote paths correctly and work inside a directory whose pathname contains whitespace. Thanks Bryan, and thanks J6t for reviewing and testing.
* sb/committer (Sun May 4 18:04:51 2008 +0200) 3 commits
+ commit: Show committer if automatic
+ commit: Show author if different from committer
+ Preparation to call determine_author_info from prepare_to_commit
----------------------------------------------------------------
[Will merge to "master" soonish]
* as/graph (Mon May 5 00:57:03 2008 -0700) 4 commits
+ graph API: eliminate unnecessary indentation
+ log and rev-list: add --graph option
+ Add history graph API
+ revision API: split parent rewriting and parent printing options
Draw "tig 'g'" graph without tig ;-)
* np/pack (Fri May 2 15:11:51 2008 -0400) 7 commits
+ pack-objects: fix early eviction for max depth delta objects
+ pack-objects: allow for early delta deflating
+ pack-objects: move compression code in a separate function
+ pack-objects: clean up write_object() a bit
+ pack-objects: simplify the condition associated with --all- progress
+ pack-objects: remove some double negative logic
+ pack-objects: small cleanup
Every time Nico tweaks pack generation, something good comes out ;-).
* db/clone-in-c (Sun Apr 27 13:39:30 2008 -0400) 8 commits
+ Build in clone
+ Provide API access to init_db()
+ Add a function to set a non-default work tree
+ Allow for having for_each_ref() list extra refs
+ Have a constant extern refspec for "--tags"
+ Add a library function to add an alternate to the alternates file
+ Add a lockfile function to append to a file
+ Mark the list of refs to fetch as const
For 1.5.6; please give it a good beating.
----------------------------------------------------------------
[Actively Cooking]
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this.
This needs debugging.
* ap/svn (Mon May 12 17:09:49 2008 -0700) 4 commits
+ git-svn: add test for --add-author-from and --use-log-author
+ git-svn: add documentation for --add-author-from option.
+ git-svn: Add --add-author-from option.
+ git-svn: add documentation for --use-log-author option.
Some tweak for output might be needed, I dunno.
* sv/first-parent (Mon May 12 17:12:36 2008 +0200) 2 commits
+ revision.c: really honor --first-parent
+ Simplify and fix --first-parent implementation
----------------------------------------------------------------
[Stalled]
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the tip commit on the series).
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption that wc -l does not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project. Dscho seems to have quite a strong objection to the 'mark' syntax and mechanism being unnecessarily complex. Let's wait and see if a less complex but equally expressive alternative materializes...
* ar/batch-cat (Wed Apr 23 15:17:47 2008 -0400) 5 commits
- git-cat-file: Add --batch option
- git-cat-file: Add --batch-check option
- git-cat-file: Make option parsing a little more flexible
- git-cat-file: Small refactor of cmd_cat_file
- Add tests for git cat-file
I fixed up the problematic shell script in the first patch in the series but later one introduced the same problematic constructs in another file, at which point I gave up and discarded the rest. At least it now passes its own testsuite without breaking others.
----------------------------------------------------------------
[On Hold]
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
- merge: remove deprecated summary and diffstat options and config variables
This needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* pb/push (Mon Apr 28 11:32:12 2008 -0400) 1 commit
+ add special "matching refs" refspec
This first patch is a good enhancement without hurting any existing users. We need a staged introduction of the second and later patches, and many people including me did not agree the later ones in the series are desirable.
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 11 lines · Junio C Hamano
* db/clone-in-c (Sun Apr 27 13:39:30 2008 -0400) 8 commits
+ Build in clone
+ Provide API access toinit_db()
+ Add a function to set a non-default work tree
+ Allow for havingfor_each_ref()list extra refs
+ Have a constant extern refspec for "--tags"
+ Add a library function to add an alternate to the alternates file
+ Add a lockfile function to append to a file
+ Mark the list of refs to fetch as constFor 1.5.6; please give it a good beating.
Last time, you said you were going to review this again; did you review it and find nothing to comment on, decide to just make sure it gets a beating, or are you still planning to review it more? (Just wondering so I can try to arrange to have time to respond to comments if there's going to be a bunch)
Quoted 5 lines · Daniel Barkalow
Last time, you said you were going to review this again; did you review it and find nothing to comment on, decide to just make sure it gets a beating, or are you still planning to review it more? (Just wondering so I can try to arrange to have time to respond to comments if there's going to be a bunch)
I did not have any further nitpicks on either design nor code in particular.
But keep in mind that I won't be the single source of review comments ;-). .
Quoted 9 lines · Junio C Hamano
For 1.5.6.
* sp/ignorecase (Sun May 11 18:16:42 2008 +0200) 4 commits
- t0050: Add test for case insensitive add
- t0050: Set core.ignorecase case to activate case insensitivity
- t0050: Test autodetect core.ignorecase
- git-init: autodetect core.ignorecase
Quoted 4 lines
This unfortunately seems to break on natively case sensitive filesystems.
From
92ec8c8a12cdc45a69f6612af340a8ce50976ab1Mon Sep 17 00:00:00 2001
From: Steffen Prohaska <[email protected]>
Date: Thu, 15 May 2008 07:19:54 +0200
Subject: [PATCH] t0050: Fix merge test on case sensitive file systems
On a case sensitive filesystem, "git reset --hard" might refuse to overwrite a file whose name differs only by case, even if core.ignorecase is set. It is not clear which circumstances cause this behavior. This commit simply works around the problem by removing the case changing file before running "git reset --hard".
--- t/t0050-filesystem.sh | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
t/t0050-filesystem.sh +2 -0
@@ -72,6 +72,8 @@ $test_case 'rename (case change)' ' $test_case 'merge (case change)' ' + rm -f CamelCase && + rm -f camelcase && git reset --hard initial && git merge topic
Signature · 1 line
1.5.5.1.349.g99d0
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It's been a while since the last issue of this series. I've been swamped, and haven't had a chance to spend enough time on reviewing and accepting patches.
A rough timeline from now on.
* Fixes of 'master' continues; 1.5.6-rc0 gets tagged (2008-05-21 -- need to slip til the weekend).
* 1.5.6 Final (2008-06-08).
There are a few known breakages I want to see addressed that are not in here before 1.5.6 (no not any new features but pure bugfixes).
----------------------------------------------------------------
[New Topics]
* js/config-cb (Wed May 14 18:46:53 2008 +0100) 1 commit
- Provide git_config with a callback-data parameter
This needs to wait until most of the other things graduate for 1.5.6; luckily, unlike the other "path-list" changes, misconversions is much easier to catch for this change and I am not worried about it.
* jc/apply-whitespace (Sat May 17 02:02:44 2008 -0700) 3 commits
+ builtin-apply: do not declare patch is creation when we do not know it
+ builtin-apply: accept patch to an empty file
+ builtin-apply: typofix
We were loose when parsing a patch that adds contents to an empty file. This fix would be nice to have in 1.5.6.
* js/mailinfo (Fri May 16 14:03:30 2008 +0100) 1 commit
- <<PARK - BASE64 and QP still broken>> mailsplit and mailinfo:
gracefully handle NUL characters
When "am" processes a patch that modifies a line with NUL, we used to chomp the patch line there, resulting in rejects. This patch fixes the issue partially, only when the message is not encoded in BASE64 nor Quoted-Printable.
* mo/cvsserver (Wed May 14 22:35:48 2008 -0600) 3 commits
+ git-cvsserver: add ability to guess -kb from contents
+ implement gitcvs.usecrlfattr
+ git-cvsserver: add mechanism for managing working tree and current directory
CVS interoperability improvements, for 1.5.6
* js/cvsexportcommit (Wed May 14 15:29:49 2008 +0100) 2 commits
+ cvsexportcommit: introduce -W for shared working trees (between Git and CVS)
+ cvsexportcommit: chomp only removes trailing whitespace
CVS interoperability improvements, for 1.5.6
* ar/t6031 (Sun May 18 16:57:27 2008 +0200) 1 commit
+ Fix t6031 on filesystems without working exec bit
* jc/unpack-trees-reword (Sat May 17 12:03:49 2008 -0700) 1 commit
+ unpack-trees: allow Porcelain to give different error messages
* jc/add-n-u (Wed May 21 12:04:34 2008 -0700) 1 commit
+ "git-add -n -u" should not add but just report
* js/ignore-submodule (Wed May 14 18:03:59 2008 +0100) 3 commits
+ Ignore dirty submodule states during rebase and stash
+ Teach update-index about --ignore-submodules
+ diff options: Introduce --ignore-submodules
The above are all fixes, meant for 1.5.6.
* dr/ceiling (Fri May 16 00:27:28 2008 +0100) 1 commit
- Add support for GIT_CEILING_DIRECTORIES
I haven't had a chance to take a look at the updated series myself.
* jc/diff-words (Sun May 11 12:33:48 2008 -0700) 2 commits
- diff --color-words: a bit of tweak
- diff --color-words reimplementation
This series did not pan out well. I briefly thought that perhaps I should discard them and replace with the "not just whitespace" one from Ping Yin first, hoping that we can clean the overall logic up later, but perhaps the whole thing can get a fresh restart after 1.5.6.
----------------------------------------------------------------
[Graduated to "master"]
* ar/add-unreadable (Mon May 12 19:59:23 2008 +0200) 5 commits
+ Add a config option to ignore errors for git-add
+ Add a test for git-add --ignore-errors
+ Add --ignore-errors to git-add to allow it to skip files with read errors
+ Extend interface of add_files_to_cache to allow ignore indexing errors
+ Make the exit code of add_file_to_index actually useful
When you sometimes have unreadable path in your own work tree, this allows you to ignore failures to index such path with "git add". Philosophically that whole notion is wrong ("why should you be adding such a file to begin with"), but this has practical value of working around insane systems that locks out the access by the user to a file when the file is in use by somebody else.
I am somewhat skeptical about the last one that enables such a workaround on a permanent basis, though.
* ds/branch-auto-rebase (Sat May 10 15:36:29 2008 -0700) 1 commit
+ Allow tracking branches to set up rebase by default.
For 1.5.6.
* as/graph (Mon May 5 00:57:03 2008 -0700) 4 commits
+ graph API: eliminate unnecessary indentation
+ log and rev-list: add --graph option
+ Add history graph API
+ revision API: split parent rewriting and parent printing options
Draw "tig 'g'" graph without tig ;-)
* np/pack (Fri May 2 15:11:51 2008 -0400) 7 commits
+ pack-objects: fix early eviction for max depth delta objects
+ pack-objects: allow for early delta deflating
+ pack-objects: move compression code in a separate function
+ pack-objects: clean up write_object() a bit
+ pack-objects: simplify the condition associated with --all- progress
+ pack-objects: remove some double negative logic
+ pack-objects: small cleanup
Every time Nico tweaks pack generation, something good comes out ;-).
* sv/first-parent (Mon May 12 17:12:36 2008 +0200) 2 commits
+ revision.c: really honor --first-parent
+ Simplify and fix --first-parent implementation
----------------------------------------------------------------
[Will merge to "master" soonish]
* sp/ignorecase (Thu May 15 07:19:54 2008 +0200) 5 commits
+ t0050: Fix merge test on case sensitive file systems
+ t0050: Add test for case insensitive add
+ t0050: Set core.ignorecase case to activate case insensitivity
+ t0050: Test autodetect core.ignorecase
+ git-init: autodetect core.ignorecase
For 1.5.6.
* bc/repack (Thu May 15 22:37:31 2008 -0400) 6 commits
+ Documentation/git-repack.txt: document new -A behaviour
+ let pack-objects do the writing of unreachable objects as loose objects
+ add a force_object_loose() function
+ builtin-gc.c: deprecate --prune, it now really has no effect
+ git-gc: always use -A when manually repacking
+ repack: modify behavior of -A option to leave unreferenced objects unpacked
For 1.5.6.
* db/clone-in-c (Tue May 20 14:15:14 2008 -0400) 11 commits
+ clone: fall back to copying if hardlinking fails
+ builtin-clone.c: Need to closedir() in copy_or_link_directory()
+ builtin-clone: fix initial checkout
+ Build in clone
+ Provide API access to init_db()
+ Add a function to set a non-default work tree
+ Allow for having for_each_ref() list extra refs
+ Have a constant extern refspec for "--tags"
+ Add a library function to add an alternate to the alternates file
+ Add a lockfile function to append to a file
+ Mark the list of refs to fetch as const
For 1.5.6.
* pb/push (Mon Apr 28 11:32:12 2008 -0400) 1 commit
+ add special "matching refs" refspec
This first patch is a good enhancement without hurting any existing users. We need a staged introduction of the second and later patches, and many people including me did not agree the later ones in the series are desirable.
----------------------------------------------------------------
[Stalled]
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this.
This needs debugging.
* ap/svn (Mon May 12 17:09:49 2008 -0700) 4 commits
+ git-svn: add test for --add-author-from and --use-log-author
+ git-svn: add documentation for --add-author-from option.
+ git-svn: Add --add-author-from option.
+ git-svn: add documentation for --use-log-author option.
Some tweak for output might be needed, I dunno.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the tip commit on the series).
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption that wc -l does not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project. Dscho seems to have quite a strong objection to the 'mark' syntax and mechanism being unnecessarily complex. Let's wait and see if a less complex but equally expressive alternative materializes...
* ar/batch-cat (Wed Apr 23 15:17:47 2008 -0400) 5 commits
- git-cat-file: Add --batch option
- git-cat-file: Add --batch-check option
- git-cat-file: Make option parsing a little more flexible
- git-cat-file: Small refactor of cmd_cat_file
- Add tests for git cat-file
The series was meant to speed up git-svn by avoiding many individual invocations of git-cat-file.
I fixed up the problematic shell script in the first patch in the series but later one introduced the same problematic constructs in another file, at which point I gave up and discarded the rest. At least it now passes its own testsuite without breaking others. The remainder needs to be resubmit for the entire series to be usable for git-svn.
----------------------------------------------------------------
[On Hold]
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
- merge: remove deprecated summary and diffstat options and config variables
This needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
----------------------------------------------------------------
[Dropped]
* bc/tag (Fri May 9 00:03:35 2008 -0500) 3 commits
- ident.c: New function valid_ident for checking ident string formatting
- Make mktag a builtin
- mktag.c: adjust verify_tag parameters
The goal of the series was to unify the internal implementation of git-mktag and git-tag but the patches did not quite apply. Needs rebase/resubmit.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It's been a while since the last issue of this series. I've been swamped, and haven't had a chance to spend enough time on reviewing and accepting patches.
A rough timeline from now on.
* 1.5.6-rc0 has been tagged. Expect a few minor breakages ;-)
* Fixes of 'master' continues, with newer -rcX tagged every once in a while.
* 1.5.6 Final (2008-06-08).
There are a few known breakages I want to see addressed that are not in here before 1.5.6 (no not any new features but pure bugfixes).
----------------------------------------------------------------
[New Topics]
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits
- Introduce fast forward option only
- Head reduction before selecting merge strategy
- Restructure git-merge.sh
- Introduce -ff=<fast forward option>
- New merge tests
- Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C but it appears neither will happen by 1.5.6 anyway.
* jc/diff-no-no-index (Fri May 23 22:28:56 2008 -0700) 3 commits
+ "git diff": do not ignore index without --no-index
+ diff-files: do not play --no-index games
+ tests: do not use implicit "git diff --no-index"
This was done in response to recently discovered interaction with stgit; we were too eater to invoke --no-index behaviour without being asked. Currently it even drops the behaviour when you ask to compare two paths that are outside of git work tree if your current directory is inside it, which I think could safely resurrect, and then the whole thing will be ready for 1.5.6.
----------------------------------------------------------------
[Graduated to "master"]
* js/config-cb (Wed May 14 18:46:53 2008 +0100) 1 commit
+ Provide git_config with a callback-data parameter
* jc/apply-whitespace (Sat May 17 02:02:44 2008 -0700) 3 commits
+ builtin-apply: do not declare patch is creation when we do not know it
+ builtin-apply: accept patch to an empty file
+ builtin-apply: typofix
We were loose when parsing a patch that adds contents to an empty file. This fix would be nice to have in 1.5.6.
* js/mailinfo (Fri May 16 14:03:30 2008 +0100) 3 commits
+ mailsplit: minor clean-up in read_line_with_nul()
+ mailinfo: apply the same fix not to lose NULs in BASE64 and QP codepaths
+ mailsplit and mailinfo: gracefully handle NUL characters
When "am" processes a patch that modifies a line with NUL, we used to chomp the patch line there, resulting in rejects. This patch fixes the issue partially, only when the message is not encoded in BASE64 nor Quoted-Printable. I suspect its handling of a MIME attachment may still wrong, but otherwise this should fix the breakage reported earlier.
* mo/cvsserver (Wed May 14 22:35:48 2008 -0600) 3 commits
+ git-cvsserver: add ability to guess -kb from contents
+ implement gitcvs.usecrlfattr
+ git-cvsserver: add mechanism for managing working tree and current directory
* js/cvsexportcommit (Wed May 14 15:29:49 2008 +0100) 2 commits
+ cvsexportcommit: introduce -W for shared working trees (between Git and CVS)
+ cvsexportcommit: chomp only removes trailing whitespace
CVS interoperability improvements.
* ar/t6031 (Sun May 18 16:57:27 2008 +0200) 1 commit
+ Fix t6031 on filesystems without working exec bit
* jc/unpack-trees-reword (Sat May 17 12:03:49 2008 -0700) 1 commit
+ unpack-trees: allow Porcelain to give different error messages
Makes safety message from "git checkout switch-to-this-branch" a bit easier to read, and opens up the possibility to reword messages from other commands that use unpack-trees machinery.
* jc/add-n-u (Wed May 21 12:04:34 2008 -0700) 1 commit
+ "git-add -n -u" should not add but just report
* js/ignore-submodule (Wed May 14 18:03:59 2008 +0100) 3 commits
+ Ignore dirty submodule states during rebase and stash
+ Teach update-index about --ignore-submodules
+ diff options: Introduce --ignore-submodules
* sp/ignorecase (Thu May 15 07:19:54 2008 +0200) 5 commits
+ t0050: Fix merge test on case sensitive file systems
+ t0050: Add test for case insensitive add
+ t0050: Set core.ignorecase case to activate case insensitivity
+ t0050: Test autodetect core.ignorecase
+ git-init: autodetect core.ignorecase
* bc/repack (Thu May 15 22:37:31 2008 -0400) 6 commits
+ Documentation/git-repack.txt: document new -A behaviour
+ let pack-objects do the writing of unreachable objects as loose objects
+ add a force_object_loose() function
+ builtin-gc.c: deprecate --prune, it now really has no effect
+ git-gc: always use -A when manually repacking
+ repack: modify behavior of -A option to leave unreferenced objects unpacked
* db/clone-in-c (Tue May 20 14:15:14 2008 -0400) 11 commits
+ clone: fall back to copying if hardlinking fails
+ builtin-clone.c: Need to closedir() in copy_or_link_directory()
+ builtin-clone: fix initial checkout
+ Build in clone
+ Provide API access to init_db()
+ Add a function to set a non-default work tree
+ Allow for having for_each_ref() list extra refs
+ Have a constant extern refspec for "--tags"
+ Add a library function to add an alternate to the alternates file
+ Add a lockfile function to append to a file
+ Mark the list of refs to fetch as const
* pb/push (Mon Apr 28 11:32:12 2008 -0400) 1 commit
+ add special "matching refs" refspec
This first patch is a good enhancement without hurting any existing users. We need a staged introduction of the second and later patches, and many people including me did not agree the later ones in the series are desirable.
* ap/svn (Mon May 12 17:09:49 2008 -0700) 4 commits
+ git-svn: add test for --add-author-from and --use-log-author
+ git-svn: add documentation for --add-author-from option.
+ git-svn: Add --add-author-from option.
+ git-svn: add documentation for --use-log-author option.
Some tweak for output might be needed, but I'll leave that to actual git-svn users.
* ar/batch-cat (Wed Apr 23 15:17:47 2008 -0400) 13 commits
+ change quoting in test t1006-cat-file.sh
+ builtin-cat-file.c: use parse_options()
+ git-svn: Speed up fetch
+ Git.pm: Add hash_and_insert_object and cat_blob
+ Git.pm: Add command_bidi_pipe and command_close_bidi_pipe
+ git-hash-object: Add --stdin-paths option
+ Add more tests for git hash-object
+ Move git-hash-object tests from t5303 to t1007
+ git-cat-file: Add --batch option
+ git-cat-file: Add --batch-check option
+ git-cat-file: Make option parsing a little more flexible
+ git-cat-file: Small refactor of cmd_cat_file
+ Add tests for git cat-file
The series is meant to speed up git-svn by avoiding many individual invocations of git-cat-file, started by Adam Roben and finished by Michele Ballabio.
----------------------------------------------------------------
[Stalled]
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this.
This needs debugging.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the tip commit on the series).
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption that wc -l does not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project. Dscho seems to have quite a strong objection to the 'mark' syntax and mechanism being unnecessarily complex. Let's wait and see if a less complex but equally expressive alternative materializes...
----------------------------------------------------------------
[On Hold]
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
- Eliminate an unnecessary chdir("..")
- Add support for GIT_CEILING_DIRECTORIES
- Fold test-absolute-path into test-path-utils
- Implement normalize_absolute_path
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
- merge: remove deprecated summary and diffstat options and config variables
This needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
* jc/diff-words (Sun May 11 12:33:48 2008 -0700) 2 commits
- diff --color-words: a bit of tweak
- diff --color-words reimplementation
This series did not pan out well. I briefly thought that perhaps I should discard them and replace with the "not just whitespace" one from Ping Yin first, hoping that we can clean the overall logic up later, but perhaps the whole thing can get a fresh restart after 1.5.6. I'll drop this altogether the next round.
PATCH 1/1 git-diff: allow --no-index semantics a bit more
Even when inside a git work tree, if two paths are given and at least one is clearly outside the work tree, it cannot be a request to diff a tracked path anyway; allow such an invocation to use --no-index semantics.
---
Quoted 11 lines
* jc/diff-no-no-index (Fri May 23 22:28:56 2008 -0700) 3 commits
+ "git diff": do not ignore index without --no-index
+ diff-files: do not play --no-index games
+ tests: do not use implicit "git diff --no-index"This was done in response to recently discovered interaction with stgit; we were too eater to invoke --no-index behaviour without being asked. Currently it even drops the behaviour when you ask to compare two paths that are outside of git work tree if your current directory is inside it, which I think could safely resurrect, and then the whole thing will be ready for 1.5.6.
And this should hopefully be enough.
diff-no-index.c | 39 ++++++++++++++++++++++++++++++++------- 1 files changed, 32 insertions(+), 7 deletions(-)
diff-no-index.c +32 -7
@@ -144,6 +144,25 @@ static int queue_diff(struct diff_options *o, } } +static int path_outside_repo (const char *path) +{ +/* +* We have already done setup_git_directory_gently() so we +* know we are inside a git work tree already. +*/ +const char *work_tree; +size_t len; + +if (!is_absolute_path (path)) +return 0 ; + work_tree =get_git_work_tree (); + len =strlen (work_tree); +if (strncmp (path, work_tree, len) || + (path[len] !='\0' && path[len] !='/' )) +return 1 ; +return 0 ; +} +void diff_no_index (struct rev_info *revs,int argc,const char **argv,int nongit,const char *prefix)
@@ -162,13 +181,19 @@ void diff_no_index(struct rev_info *revs,break ; } -/* -* No explicit --no-index, but "git diff --opts A B" outside -* a git repository is a cute hack to support. -*/ -if (!no_index && !nongit) -return ; - +if (!no_index && !nongit) { +/* +* Inside a git repository, without --no-index. Only +* when a path outside the repository is given, +* e.g. "git diff /var/tmp/[12]", or "git diff +* Makefile /var/tmp/Makefile", allow it to be used as +* a colourful "diff" replacement. +*/ +if ((argc != i +2 ) || + (!path_outside_repo (argv[i]) && + !path_outside_repo (argv[i+1 ]))) +return ; + }if (argc != i +2 )die ("git diff %s takes two paths" , no_index ?"--no-index" :"[--no-index]" );
Signature · 1 line
1.5.6.rc0.13.g2d392
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It's been a while since the last issue of this series. I've been swamped, and haven't had a chance to spend enough time on reviewing and accepting patches.
A rough timeline from now on.
* Fixes of 'master' continues, with newer -rcX tagged every once in a while.
* 1.5.6 Final (2008-06-08 -- likely to slip by a week or so, though).
There are a few known breakages I want to see addressed that are not in here before 1.5.6 (no not any new features but pure bugfixes).
----------------------------------------------------------------
[New Topics]
* jc/checkout (Wed May 28 16:11:16 2008 -0700) 5 commits
- PARK: NUL hack to entry
- checkout: "best effort" checkout
- unpack_trees(): allow callers to differentiate worktree errors from merge errors
- checkout: consolidate reset_{to_new,clean_to_new|()
- checkout: make reset_clean_to_new() not die by itself
* lr/init-bare (Wed May 28 19:53:57 2008 +0100) 1 commit
- git-init: accept --bare option
This makes both "git --bare init" and "git init --bare" work, which would reduce confusion. I am tempted to include it in 1.5.6. Comments?
----------------------------------------------------------------
[Graduated to "master"]
* jc/diff-no-no-index (Mon May 26 22:35:07 2008 -0700) 5 commits
+ git diff --no-index: default to page like other diff frontends
+ git-diff: allow --no-index semantics a bit more
+ "git diff": do not ignore index without --no-index
+ diff-files: do not play --no-index games
+ tests: do not use implicit "git diff --no-index"
This was done in response to recently discovered interaction with stgit; we were too eater to invoke --no-index behaviour without being asked.
----------------------------------------------------------------
[Stalled]
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this.
This needs debugging.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the tip commit on the series).
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption that wc -l does not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project. Dscho seems to have quite a strong objection to the 'mark' syntax and mechanism being unnecessarily complex. Let's wait and see if a less complex but equally expressive alternative materializes...
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits
- Introduce fast forward option only
- Head reduction before selecting merge strategy
- Restructure git-merge.sh
- Introduce -ff=<fast forward option>
- New merge tests
- Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C but it appears neither will happen by 1.5.6 anyway.
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
- Eliminate an unnecessary chdir("..")
- Add support for GIT_CEILING_DIRECTORIES
- Fold test-absolute-path into test-path-utils
- Implement normalize_absolute_path
----------------------------------------------------------------
[On Hold]
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
- merge: remove deprecated summary and diffstat options and config variables
This needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 24 lines · Junio C Hamano
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption thatwc -ldoes not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
Quoted 4 lines
This may complement the proposed "sequencer" GSoC project. Dscho seems to have quite a strong objection to the 'mark' syntax and mechanism being unnecessarily complex. Let's wait and see if a less complex but equally expressive alternative materializes...
Well, there are the two not-quite facetious suggestions I made off list to Junio. Granted, he though they would be overkill (too), but I guess I could make them here for the general record in any case.
One suggestion was to make a procedural model out of the commit graph and allow something like this:
b :- pick(B)
x :- merge(pick(A), b)
y :- merge(pick(C), b)
z :- merge(x, y)
My second and semi-equivallent suggestion was to allow a lisp-like notation:
(merge (merge (pick A)
(pick B)
(merge (pick B)
(pick C)
As Junio observed, even that could be beyond what most casual git rebase -i users are willing to do to a sequencer edit stream before getting down to business.
Ah well. :-)
jdl
Hi,
Quoted 7 lines
One suggestion was to make a procedural model out of the commit graph and allow something like this:
b :- pick(B) x :- merge(pick(A), b) y :- merge(pick(C), b) z :- merge(x, y)
Nice idea. But imho too hard for casual users. Someone who has to learn a new language won't use the tool.
Quoted 7 lines
My second and semi-equivallent suggestion was to
allow a lisp-like notation:(merge (merge (pick A)
(pick B)
(merge (pick B)
(pick C)
You forgot some right parenthesis here ;-) ...which shows, that it is also not easy enough for users.
Or is it intentional?
:)
Stephan
Signature · 1 line
Stephan Beyer <[email protected]>, PGP 0x6EDDD207FCC5040F
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It's been a while since the last issue of this series. I've been swamped, and haven't had a chance to spend enough time on reviewing and accepting patches.
A rough timeline from now on.
* Fixes of 'master' continues, with newer -rcX tagged every once in a while. I'd like to tag -rc1 in a few days.
* 1.5.6 Final (2008-06-08 -- likely to slip by a week or so, though).
----------------------------------------------------------------
[New Topics]
* lw/gitweb (Sat May 31 16:19:24 2008 +0200) 2 commits
- gitweb: use Git.pm, and use its parse_rev method for git_get_head_hash
- perl/Git.pm: add parse_rev method
I do not necessarily think it is an improvement to name the operation called as "rev-parse" at the plumbing layer with a different name "get_hash" as the later round of this series does.
As I mentioned on the list, I think the "PERL5LIB fix" I squashed in was a misguided workaround to a wrong problem; if we are making gitweb.perl to use Git.pm, I think we should do the same GITPERLLIB trick we do to other perl scripts for consistency.
I've looked at the Git.pm testsuite that uses Test::More briefly but hadn't really reviewed it. Is Test::More commonly used, considered solid and widely available?
----------------------------------------------------------------
[Graduated to "master"]
* lw/test-fix (Sat May 31 23:11:21 2008 +0200) 1 commit
+ t/test-lib.sh: resolve symlinks in working directory, for pathname comparisons
* sb/am-tests (Sun Jun 1 00:11:43 2008 +0200) 2 commits
+ Merge t4150-am-subdir.sh and t4151-am.sh into t4150-am.sh
+ Add test cases for git-am
* lt/pack-sync (Fri May 30 08:54:46 2008 -0700) 2 commits
+ Remove now unnecessary 'sync()' calls
+ Make pack creation always fsync() the result
* sp/remote (Sun Jun 1 00:28:04 2008 -0400) 3 commits
+ Make "git-remote rm" delete refs acccording to fetch specs
+ Make "git-remote prune" delete refs according to fetch specs
+ Remove unused remote_prefix member in builtin-remote
"git-remote" had an unwarranted assumption that everybody uses refs/remotes/$it namespace to track remote repository called $it. This series is a reasonable fix to it.
* np/pack-check (Thu May 29 17:34:50 2008 -0400) 1 commit
+ make verify-pack a bit more useful with bad packs
* lr/init-bare (Wed May 28 19:53:57 2008 +0100) 1 commit
+ git-init: accept --bare option
This makes both "git --bare init" and "git init --bare" work, which would reduce confusion.
* jc/checkout (Wed May 28 16:11:16 2008 -0700) 4 commits
+ checkout: "best effort" checkout
+ unpack_trees(): allow callers to differentiate worktree errors from merge errors
+ checkout: consolidate reset_{to_new,clean_to_new|()
+ checkout: make reset_clean_to_new() not die by itself
This "fix" seems to help real-world users.
* jb/reset-q (Sat May 31 18:10:58 2008 -0700) 1 commit
+ git-reset: honor -q and do not show progress message
----------------------------------------------------------------
[Stalled]
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this.
This needs debugging.
* jc/blame (Wed Apr 2 22:17:53 2008 -0700) 5 commits
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the tip commit on the series).
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption that wc -l does not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project. Dscho seems to have quite a strong objection to the 'mark' syntax and mechanism being unnecessarily complex. Let's wait and see if a less complex but equally expressive alternative materializes...
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits
- Introduce fast forward option only
- Head reduction before selecting merge strategy
- Restructure git-merge.sh
- Introduce -ff=<fast forward option>
- New merge tests
- Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C but it appears neither will happen by 1.5.6 anyway.
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
- Eliminate an unnecessary chdir("..")
- Add support for GIT_CEILING_DIRECTORIES
- Fold test-absolute-path into test-path-utils
- Implement normalize_absolute_path
----------------------------------------------------------------
[On Hold]
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
- merge: remove deprecated summary and diffstat options and config variables
This needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 4 lines · Junio C Hamano
I've looked at the Git.pm testsuite that uses
Test::Morebriefly but hadn't really reviewed it. IsTest::Morecommonly used, considered solid and widely available?
yes it is on all three points. It is the most commonly used test module for Perl, used by thousands of CPAN distributions. Test::More is delivered as core module since 5.8.0 or 5.6.2, so is widely deployed. It is actively maintained and is integrated in a test framework that allows the use and development of further "plug-in" test modules. With that it's conceivable to write a test module specifically for git and its usage scenarios.
Regards,
Sebastian
Hi,
Quoted 8 lines · Junio C Hamano
* sp/remote (Sun Jun 1 00:28:04 2008 -0400) 3 commits
+ Make "git-remote rm" delete refs acccording to fetch specs
+ Make "git-remote prune" delete refs according to fetch specs
+ Remove unusedremote_prefixmember in builtin-remote"git-remote" had an unwarranted assumption that everybody uses refs/remotes/$it namespace to track remote repository called $it. This series is a reasonable fix to it.
AFAIR this limitation was already in the scripted version, and I tried to wrap my head around lifting it. However, I did not end up with the brillian analysis of Shawn, and was almost sending a reply contradicting his logic. However, I agree with Shawn that it is the same issue as contradicting fetches, so if it leads to problems, it is a pilot error.
_However_, I still try to come up with some attic for deleted refs. It is not just a matter of moving the logs to a different namespace because of D/F conflicts.
Ciao,
Dscho
Quoted 3 lines · Johannes Schindelin
_However_, I still try to come up with some attic for deleted refs. It is not just a matter of moving the logs to a different namespace because of D/F conflicts.
Record the delete at the end of the reflog so we have a date/time record and the last SHA-1 value, just in case it doesn't match up with the most recent reflog entry (e.g. user ran some legacy tool that just redirect git-commit-tree output to the branch itself).
Take the SHA-1 hash of the reflog now that the final entry is written. Rename the file to .git/attic/$sha1 and call it a day. I thought about compressing the file too, but its not worth saving the disk space here and it would make tools that inspect the attic expensive to run.
The attic can be easily cleaned out by looking at the timestamp of the last record of each file. Attic log files older than X days can be removed. This is better than reading the modification time of the file as we don't have to worry about some copy tool not saving the modification time if the user moves/copies the repository.
That's all the easy stuff.
The hard stuff is:
- Should the commits listed in attic reflogs be considered reachable when we pack, prune or fsck? Commits in a reflog are, even if they aren't reachable from a transport perspective.
- What command gets the extra options to see what branches are in the attic and when they got there?
- What command gets the extra option to recover a branch from the attic?
- When we recover a branch from the attic is it sufficient to recover it to the name it had at time of deletion? Should we allow you to recover it to a different name?
- Is it sufficient to make you recover the branch from the attic before you can access the rest of its reflog with porcelain?
- What do we do if we recover a branch with stale reflog entries and the attic is deemed to not be reachable (see above).
Signature · 1 line
Shawn.
Hi,
Quoted 9 lines · Shawn O. Pearce
Quoted 3 lines · Johannes Schindelin
_However_, I still try to come up with some attic for deleted refs. It is not just a matter of moving the logs to a different namespace because of D/F conflicts.
Record the delete at the end of the reflog so we have a date/time record and the last SHA-1 value, just in case it doesn't match up with the most recent reflog entry (e.g. user ran some legacy tool that just redirect git-commit-tree output to the branch itself).
That's obvious.
Quoted 10 lines
Take the SHA-1 hash of the reflog now that the final entry is written. Rename the file to .git/attic/$sha1 and call it a day. I thought about compressing the file too, but its not worth saving the disk space here and it would make tools that inspect the attic expensive to run.
The attic can be easily cleaned out by looking at the timestamp of the last record of each file. Attic log files older than X days can be removed. This is better than reading the modification time of the file as we don't have to worry about some copy tool not saving the modification time if the user moves/copies the repository.
I actually would prefer to have the logs in the .git/logs/ directory, so that I can easily reuse all existing reflog handling.
After sending the mail, I actually got an idea:
.git/logs/attic/<timestamp>/<refname>
I think this should work without problems. In that case, git-gc also handles the garbage collection.
Quoted 5 lines
The hard stuff is:
- Should the commits listed in attic reflogs be considered reachable when we pack, prune or fsck? Commits in a reflog are, even if they aren't reachable from a transport perspective.
Yes, they should. That is the whole purpose of keeping the reflogs: I want to be able to resurrect the branch, if I deleted it by accident.
Quoted 2 lines
- What command gets the extra options to see what branches are in the attic and when they got there?
I'd like to have them listed with the other reflogs.
Quoted 1 line
- What command gets the extra option to recover a branch from the attic?
None. It is the user's responsibility to use the information wisely.
git branch resurrected attic/<bla>/refs/heads/accidentally-deleted@{1}
Quoted 3 lines
- When we recover a branch from the attic is it sufficient to recover it to the name it had at time of deletion? Should we allow you to recover it to a different name?
See above. I think resurrecting under the same name would not necessarily be the most frequent operation on deleted refs.
Quoted 5 lines
- Is it sufficient to make you recover the branch from the attic before you can access the rest of its reflog with porcelain?
- What do we do if we recover a branch with stale reflog entries and the attic is deemed to not be reachable (see above).
I'll just go with my idea, implement it, and post it here for discussion.
Ciao,
Dscho
Quoted 6 lines · Johannes Schindelin
After sending the mail, I actually got an idea:
.git/logs/attic/<timestamp>/<refname>
I think this should work without problems. In that case, git-gc also handles the garbage collection.
I do not like that particular color of the bikeshed, but I'd agree that it certainly is the easiest route from both the implementation and the design point of view. All of the "hard stuff" Shawn mentions goes away, and you are left with only one new "hard stuff", which is much easier to solve:
- Should there be a way to really remove the archived reflog?
And my answer is "yes, a new subcommand to 'git-reflog' to list and another subcommand to remove one".
As to default behaviour, probably we would by default archive any local branches, and _not_ archive other things like remote trackers and tags. A new configuration variable reflog.archive = {none,heads,all} would be honored and absense of it defaults to reflog.archive = heads.
Hi,
Quoted 4 lines · Junio C Hamano
Quoted 2 lines · Johannes Schindelin
After sending the mail, I actually got an idea:
Quoted 8 lines
Quoted 4 lines
.git/logs/attic/<timestamp>/<refname>
I think this should work without problems. In that case, git-gc also handles the garbage collection.
I do not like that particular color of the bikeshed, but I'd agree that it certainly is the easiest route from both the implementation and the design point of view.
Okay, how about "deleted-%d.%m.%Y-%H:%M:%S" instead of "attic/%s"?
Quoted 7 lines
All of the "hard stuff" Shawn mentions goes away, and you are left with only one new "hard stuff", which is much easier to solve:
- Should there be a way to really remove the archived reflog?
And my answer is "yes, a new subcommand to 'git-reflog' to list and another subcommand to remove one".
You mean a subcommand to list just the refs that exist in the deleted-* namespace?
As to remove one, how about:
git reflog --expire=now --expire-unreachable=now \ deleted-<date>/<refname>
Hmm?
Quoted 2 lines
As to default behaviour, probably we would by default archive any local branches, and _not_ archive other things like remote trackers and tags.
Unfortunately, this is exactly what I need: remote trackers and tags. Since I have to delete branches from repo.or.cz as long as the pruning of forked projects' objects does not work correctly.
Quoted 2 lines
A new configuration variable reflog.archive = {none,heads,all} would be honored and absense of it defaults to reflog.archive = heads.
Sure, that makes sense. I'd just "git config --global reflog.archive all".
Ciao,
Dscho
Hi,
Quoted 7 lines · Johannes Schindelin
Quoted 5 lines · Junio C Hamano
Quoted 3 lines · Johannes Schindelin
After sending the mail, I actually got an idea:
.git/logs/attic/<timestamp>/<refname>
Just tried that, and for obvious reasons it fails the testsuite: Git is just too darned fast.
Ciao,
Dscho
Quoted 3 lines · Junio C Hamano
I've looked at the Git.pm testsuite that uses
Test::Morebriefly but hadn't really reviewed it. IsTest::Morecommonly used, considered solid and widely available?
It is part of perl-5.8.6-24 RPM package in Fedora Core 4.
It is mentioned in http://www.perlfoundation.org/perl5/index.cgi?testing
Quoted 8 lines
----------------------------------------------------------------
[Graduated to "master"]* lr/init-bare (Wed May 28 19:53:57 2008 +0100) 1 commit
+ git-init: accept --bare optionThis makes both "git --bare init" and "git init --bare" work, which would reduce confusion.
Nice.
Signature · 3 lines
Jakub Narebski Poland ShadeHawk on #git
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It's been a while since the last issue of this series. I've been swamped, and haven't had a chance to spend enough time on reviewing and accepting patches.
A rough timeline from now on.
* 1.5.6-rc3 this weekend.
* 1.5.6 Final (2008-06-20).
----------------------------------------------------------------
[New Topics]
* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits
- gitweb: Separate generating 'sort by' table header
- gitweb: Separate filling list of projects info
* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit
+ Teach new attribute 'export-ignore' to git-archive
* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit
+ gitweb: remove git_blame and rename git_blame2 to git_blame
* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits
+ Make old sha1 optional with git update-ref -d
+ Clean up builtin-update-ref's option parsing
* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits
- Add configuration option for default untracked files mode
- Add argument 'no' commit/status option -u|--untracked-files
- Add an optional <mode> argument to commit/status -u|--untracked- files option
* rs/attr (Sun Jun 8 17:16:11 2008 +0200) 1 commit
+ Ignore .gitattributes in bare repositories
* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits
+ Hook up the result aggregation in the test makefile.
+ A simple script to parse the results from the testcases
+ Modify test-lib.sh to output stats to t/test-results/*
None of the above are 1.5.6 material, except for the "ignore .gitattributes file in bare repositories" from René, which I think we should have.
----------------------------------------------------------------
[Graduated to "master"]
Nothing this week.
----------------------------------------------------------------
[Stalled]
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this.
This needs debugging.
* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
- blame: show "previous" information in --porcelain/--incremental format
- git-blame: refactor code to emit "porcelain format" output
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the commit ""git-blame --reverse" on the series).
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption that wc -l does not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
This may complement the proposed "sequencer" GSoC project. Dscho seems to have quite a strong objection to the 'mark' syntax and mechanism being unnecessarily complex. Let's wait and see if a less complex but equally expressive alternative materializes...
It is very likely that this whole thing will be reverted from 'next' and be replaced with the new sequenser series during 1.6.0 cycle.
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits
- Introduce fast forward option only
- Head reduction before selecting merge strategy
- Restructure git-merge.sh
- Introduce -ff=<fast forward option>
- New merge tests
- Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C but it appears neither will happen by 1.5.6 anyway.
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
- Eliminate an unnecessary chdir("..")
- Add support for GIT_CEILING_DIRECTORIES
- Fold test-absolute-path into test-path-utils
- Implement normalize_absolute_path
----------------------------------------------------------------
[On Hold]
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
- merge: remove deprecated summary and diffstat options and config variables
This needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It's been a while since the last issue of this series. I've been swamped, and haven't had a chance to spend enough time on reviewing and accepting patches.
A rough timeline from now on.
* 1.5.6 Final (late this week).
----------------------------------------------------------------
[New Topics]
* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits
- Teach "git clone" to pack refs
- Prepare testsuite for a "git clone" that packs refs
- Move pack_refs() and friends into libgit
- Incorporate fetched packs in future object traversal
Would be helpful cloning from a repository with insanely large number of refs.
* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit
- Per-ref reflog expiry configuration
Perhaps a good foundation for optionally unexpirable stash.
* lw/perlish (Tue Jun 17 08:59:51 2008 +0200) 2 commits
- Git.pm: add test suite
- t/test-lib.sh: add test_external and test_external_without_stderr
IO::String dependency is a bit worrysome, and the error diagnostic could hopefully be made more obvious, but I do not have a fundamental objection to this series.
* jk/test (Sat Jun 14 03:28:07 2008 -0400) 5 commits
+ enable whitespace checking of test scripts
+ avoid trailing whitespace in zero-change diffstat lines
+ avoid whitespace on empty line in automatic usage message
+ mask necessary whitespace policy violations in test scripts
+ fix whitespace violations in test scripts
Tightens whitespace rules for t/*.sh scripts.
* pb/fast-export (Wed Jun 11 13:17:04 2008 +0200) 1 commit
- builtin-fast-export: Add importing and exporting of revision marks
----------------------------------------------------------------
[Graduated to "master"]
* rs/attr (Sun Jun 8 17:16:11 2008 +0200) 1 commit
+ Ignore .gitattributes in bare repositories
----------------------------------------------------------------
[On Hold]
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
+ "git push": tellme-more protocol extension
Allows common ancestor negotiation for git-push to help people with shared repository workflow in certain minority situations. The lack of protocol support has been bugging me for quite some time, and that was the reason I did this.
This needs debugging.
* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
- blame: show "previous" information in --porcelain/--incremental format
- git-blame: refactor code to emit "porcelain format" output
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the commit ""git-blame --reverse" on the series).
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
+ Use perl instead of tac
+ Fix t3404 assumption that wc -l does not use whitespace.
+ rebase -i: Use : in expr command instead of match.
+ rebase -i: update the implementation of 'mark' command
+ Add option --preserve-tags
+ Teach rebase interactive the tag command
+ Add option --first-parent
+ Do rebase with preserve merges with advanced TODO list
+ Select all lines with fake-editor
+ Unify the length of $SHORT* and the commits in the TODO list
+ Teach rebase interactive the merge command
+ Move redo merge code in a function
+ Teach rebase interactive the reset command
+ Teach rebase interactive the mark command
+ Move cleanup code into it's own function
+ Don't append default merge message to -m message
+ fake-editor: output TODO list if unchanged
It is very likely that this whole thing will be reverted from 'next' and be replaced with the new sequenser series during 1.6.0 cycle.
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits
- Introduce fast forward option only
- Head reduction before selecting merge strategy
- Restructure git-merge.sh
- Introduce -ff=<fast forward option>
- New merge tests
- Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C. There is no fundamental reason to favor one over the other, so I'll be torn after 1.5.6 happens, but not before.
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
- Eliminate an unnecessary chdir("..")
- Add support for GIT_CEILING_DIRECTORIES
- Fold test-absolute-path into test-path-utils
- Implement normalize_absolute_path
* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits
- gitweb: Separate generating 'sort by' table header
- gitweb: Separate filling list of projects info
* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit
+ Teach new attribute 'export-ignore' to git-archive
* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit
+ gitweb: remove git_blame and rename git_blame2 to git_blame
* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits
+ Make old sha1 optional with git update-ref -d
+ Clean up builtin-update-ref's option parsing
* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits
- Add configuration option for default untracked files mode
- Add argument 'no' commit/status option -u|--untracked-files
- Add an optional <mode> argument to commit/status -u|--untracked- files option
* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits
+ Hook up the result aggregation in the test makefile.
+ A simple script to parse the results from the testcases
+ Modify test-lib.sh to output stats to t/test-results/*
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
- merge: remove deprecated summary and diffstat options and config variables
This needs to be held back, as it actually removes the support for features that the main part of the series deprecates, until 1.6.0 or later.
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
- Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 10 lines · Junio C Hamano
[New Topics]
* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits
- Teach "git clone" to pack refs
- Prepare testsuite for a "git clone" that packs refs
- Movepack_refs()and friends into libgit
- Incorporate fetched packs in future object traversalWould be helpful cloning from a repository with insanely large number of refs.
The first 3 patches (i.e. the bottom 3 in the above list) might be considered general cleanup patches, and are independent of each other (i.e. you might want to include them on their own merit, independently of patch #4).
The final patch doesn't make any difference for "regular" repos (e.g. git.git with ~200 refs) on Linux (see below). But once the number of refs increase, the difference becomes obvious.
Here are some numbers to give some more context:
All tests done on 64-bit quad-core Linux, cloning locally (hard-linked):
~200 refs (git.git):
current next: 0.2s w/above patches: 0.2s
~1000 refs (test repo):
current next: 0.16s w/above patches: 0.05s
~11000 refs (test repo):
current next: 1.3s w/above patches: 0.3s
~26000 refs (actual repo at $dayjob):
current next: 3.2s w/above patches: 0.8s
Regards,
...Johan
Signature · 2 lines
Johan Herland, <[email protected]> www.herland.net
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It already is beginning to become clear what 1.6.0 will look like. What's already in 'next' all are well intentioned (I do not guarantee they are already bug-free --- that is what cooking them in 'next' is for) and are good set of feature enhancements. But bigger changes will be:
* MinGW will be in.
* /usr/bin/git-cat-file is no more. The bulk of the git commands will move to /usr/libexec/git-core/ or somesuch.
* git-merge will be rewritten in C.
Currently tip of 'pu' is broken and does not pass tests, as j6t/mingw has interaction with dr/ceiling and jc/merge-theirs has interaction with mv/merge-in-c.
----------------------------------------------------------------
[New Topics]
* jc/merge-theirs (Fri Jun 20 00:17:59 2008 -0700) 2 commits
- git-merge-recursive-{ours,theirs}
- git-merge-file --ours, --theirs
Punting a merge by discarding your own work in conflicting parts but still salvaging the parts that are cleanly automerged. It is likely that this will result in nonsense mishmash, but somehow often people want this, so here they are. The interface to the backends may need to change, though.
* lt/racy-empty (Tue Jun 10 10:44:43 2008 -0700) 1 commit
+ racy-git: an empty blob has a fixed object name
* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit
+ Remove the use of '--' in merge program invocation
* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits
- compat/pread.c: Add a forward declaration to fix a warning
- Windows: Fix ntohl() related warnings about printf formatting
- Windows: TMP and TEMP environment variables specify a temporary directory.
- Windows: Make 'git help -a' work.
- Windows: Work around an oddity when a pipe with no reader is written to.
- Windows: Make the pager work.
- When installing, be prepared that template_dir may be relative.
- Windows: Use a relative default template_dir and ETC_GITCONFIG
- Windows: Compute the fallback for exec_path from the program invocation.
- Turn builtin_exec_path into a function.
- Windows: Use a customized struct stat that also has the st_blocks member.
- Windows: Add a custom implementation for utime().
- Windows: Add a new lstat and fstat implementation based on Win32 API.
- Windows: Implement a custom spawnve().
- Windows: Implement wrappers for gethostbyname(), socket(), and connect().
- Windows: Work around incompatible sort and find.
- Windows: Implement asynchronous functions as threads.
- Windows: Disambiguate DOS style paths from SSH URLs.
- Windows: A rudimentary poll() emulation.
- Windows: Change the name of hook scripts to make them not executable.
- Windows: Implement start_command().
- Windows: A pipe() replacement whose ends are not inherited to children.
- Windows: Wrap execve so that shell scripts can be invoked.
- Windows: Implement setitimer() and sigaction().
- Windows: Fix PRIuMAX definition.
- Windows: Implement gettimeofday().
- Windows: Handle absolute paths in safe_create_leading_directories().
- Windows: Treat Windows style path names.
- setup.c: Prepare for Windows directory separators.
- Windows: Work around misbehaved rename().
- Windows: always chmod(, 0666) before unlink().
- Windows: A minimal implemention of getpwuid().
- Windows: Implement a wrapper of the open() function.
- Windows: Strip ".exe" from the program name.
- Windows: Use the Windows style PATH separator ';'.
- Add target architecture MinGW.
- Compile some programs only conditionally.
- Add compat/regex.[ch] and compat/fnmatch.[ch].
No explanation is necessary ;-).
* sn/static (Thu Jun 19 08:21:11 2008 +0900) 2 commits
+ config.c: make git_env_bool() static
+ environment.c: remove unused function
* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits
+ Add config option to enable 'fsync()' of object files
+ Split up default "i18n" and "branch" config parsing into helper routines
+ Split up default "user" config parsing into helper routine
+ Split up default "core" config parsing into helper routine
* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit
+ gitweb: standarize HTTP status codes
* mv/merge-in-c (Fri Jun 20 01:22:36 2008 +0200) 11 commits
- Add new test to ensure git-merge handles more than 25 refs.
- Build in merge
- Introduce filter_independent() in commit.c
- Introduce get_octopus_merge_bases() in commit.c
- git-fmt-merge-msg: make it usable from other builtins
- Move read_cache_unmerged() to read-cache.c
- parseopt: add a new PARSE_OPT_ARGV0_IS_AN_OPTION option
- Add new test to ensure git-merge handles pull.twohead and pull.octopus
- Move parse-options's skip_prefix() to git-compat-util.h
- Move commit_list_count() to commit.c
- Move split_cmdline() to alias.c
* jc/maint-combine-diff-pre-context (Wed Jun 18 23:59:41 2008 -0700) 1 commit
+ diff -c/--cc: do not include uninteresting deletion before leading context
* lt/maint-gitdir-relative (Thu Jun 19 12:34:06 2008 -0700) 1 commit
+ Make git_dir a path relative to work_tree in setup_work_tree()
----------------------------------------------------------------
[Actively Cooking]
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
+ Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
+ merge: remove deprecated summary and diffstat options and config variables
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
+ Eliminate an unnecessary chdir("..")
+ Add support for GIT_CEILING_DIRECTORIES
+ Fold test-absolute-path into test-path-utils
+ Implement normalize_absolute_path
* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits
+ gitweb: Separate generating 'sort by' table header
+ gitweb: Separate filling list of projects info
* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit
+ Teach new attribute 'export-ignore' to git-archive
* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit
+ gitweb: remove git_blame and rename git_blame2 to git_blame
* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits
+ Make old sha1 optional with git update-ref -d
+ Clean up builtin-update-ref's option parsing
* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits
+ Add configuration option for default untracked files mode
+ Add argument 'no' commit/status option -u|--untracked-files
+ Add an optional <mode> argument to commit/status -u|--untracked- files option
* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits
+ Hook up the result aggregation in the test makefile.
+ A simple script to parse the results from the testcases
+ Modify test-lib.sh to output stats to t/test-results/*
* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits
+ Teach "git clone" to pack refs
+ Prepare testsuite for a "git clone" that packs refs
+ Move pack_refs() and friends into libgit
+ Incorporate fetched packs in future object traversal
This is useful when cloning from a repository with insanely large number of refs.
* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit
- Per-ref reflog expiry configuration
Perhaps a good foundation for optionally unexpirable stash. As 1.6.0 will be a good time to make backward incompatible changes, we might make expiry period of stash 'never' in new repositories. Needs a concensus.
* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits
+ Git.pm: add test suite
+ t/test-lib.sh: add test_external and test_external_without_stderr
Beginning of regression tests for Perl part of the system.
* jk/test (Sat Jun 14 03:28:07 2008 -0400) 5 commits
+ enable whitespace checking of test scripts
+ avoid trailing whitespace in zero-change diffstat lines
+ avoid whitespace on empty line in automatic usage message
+ mask necessary whitespace policy violations in test scripts
+ fix whitespace violations in test scripts
Tightens whitespace rules for t/*.sh scripts.
* pb/fast-export (Wed Jun 11 13:17:04 2008 +0200) 1 commit
+ builtin-fast-export: Add importing and exporting of revision marks
----------------------------------------------------------------
[Graduated to "master"]
Nothing today but expect many small ones to come out of 'next' this weekend.
----------------------------------------------------------------
[On Hold]
* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
- blame: show "previous" information in --porcelain/--incremental format
- git-blame: refactor code to emit "porcelain format" output
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the commit ""git-blame --reverse" on the series).
The tip two commits are for peeling to see what's behind the blamed commit, which we should be able to separate out into an independent topic from the rest.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
- "git push": tellme-more protocol extension
Kicked back to 'pu' for now.
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
- Use perl instead of tac
- Fix t3404 assumption that wc -l does not use whitespace.
- rebase -i: Use : in expr command instead of match.
- rebase -i: update the implementation of 'mark' command
- Add option --preserve-tags
- Teach rebase interactive the tag command
- Add option --first-parent
- Do rebase with preserve merges with advanced TODO list
- Select all lines with fake-editor
- Unify the length of $SHORT* and the commits in the TODO list
- Teach rebase interactive the merge command
- Move redo merge code in a function
- Teach rebase interactive the reset command
- Teach rebase interactive the mark command
- Move cleanup code into it's own function
- Don't append default merge message to -m message
- fake-editor: output TODO list if unchanged
It is very likely that this whole thing will be reverted from 'next' and be replaced with the new sequenser series during 1.6.0 cycle.
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits
- Introduce fast forward option only
- Head reduction before selecting merge strategy
- Restructure git-merge.sh
- Introduce -ff=<fast forward option>
- New merge tests
- Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C.
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
- WIP: rethink replay merge
- Start using replay-tree merge in cherry-pick
- revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
- git-am --forge: add Signed-off-by: line for the author
- git-am: clean-up Signed-off-by: lines
- stripspace: add --log-clean option to clean up signed-off-by:
lines
- stripspace: use parse_options()
- Add "git am -s" test
- git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
Quoted 5 lines · Junio C Hamano
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
+ Move all dashed-form commands to libexecdirScheduled for 1.6.0.
Quoted 7 lines
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepareexecv_git_cmd()for removal of builtins from the filesystem
- git-shell: accept "git foo" formWe do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
I may be wrong, but given that git-upload-pack/receive-pack is now not in PATH, I think it will be problematic to do a pull/push in case the server runs next, the client is 1.5.6 and the user has git-shell as shell, for example.
Or have I missed something?
Thanks
Quoted 11 lines · Miklos Vajna
Quoted 10 lines · Junio C Hamano
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
+ Move all dashed-form commands to libexecdirScheduled for 1.6.0.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepareexecv_git_cmd()for removal of builtins from the filesystem
- git-shell: accept "git foo" form
Quoted 7 lines
Quoted 2 lines
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
I may be wrong, but given that git-upload-pack/receive-pack is now not in PATH, I think it will be problematic to do a pull/push in case the server runs next, the client is 1.5.6 and the user has git-shell as shell, for example.
The idea of the "shell: accept 'git foo' form" patch is that as long as the server end consistently use the same version (i.e. git-shell is from 'next' and it knows where the rest of git is installed), things should work fine. I've merged them to 'next' and pushed it out so that you can try it.
I do not use git-shell in production setting (I do have one user account whose login shell is git-shell from 'next' I use purely for testing), and I do not know how much use it has seen in the real world. My cursory sanity-check ("cvs -d :ext:thatuser@myhost:/path/ co --help", and "git ls-remote ssh://thatuser@myhost/path/") seems to be Ok with $(bindir) that has only git, gitk and nothing else.
Quoted 5 lines · Junio C Hamano
The idea of the "shell: accept 'git foo' form" patch is that as long as the server end consistently use the same version (i.e. git-shell is from 'next' and it knows where the rest of git is installed), things should work fine. I've merged them to 'next' and pushed it out so that you can try it.
Any clone / push operation fails if you use current next:
Vienna:bin pieter$ git --version
git version 1.5.6.129.g274ea
Vienna:bin pieter$ git clone localhost:project/bonnenteller Initialize bonnenteller/.git
Initialized empty Git repository in /opt/git/bin/bonnenteller/.git/ Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
I think that is what Miklos meant. Also, I think the client sends the command to execute on the remote side. At least for v1.5.5 clients and before, that is "git-upload-pack". As this is not in PATH, that command will fail on any server that runs v1.5.6 and has the libexec dir.
- Pieter
Quoted 1 line · Pieter de Bie
I think that is what Miklos meant. Also, I think the client sends the command to execute on the remote side. At least for v1.5.5 clients and before, that is "git-upload-pack". As this is not in PATH, that command will fail on any server that runs v1.5.6 and has the libexec dir.
That is supposed to be "v1.5.6" and "v1.6.0" respectively.
Quoted 10 lines · Pieter de Bie
Vienna:bin pieter$ git --version
git version 1.5.6.129.g274ea
Vienna:bin pieter$ git clone localhost:project/bonnenteller Initialize bonnenteller/.git
Initialized empty Git repository in/opt/git/bin/bonnenteller/.git/Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedlyI think that is what Miklos meant.
Exactly. Thanks for the good description.
Hi,
Quoted 10 lines · Miklos Vajna
Quoted 9 lines · Pieter de Bie
Vienna:bin pieter$ git --version
git version 1.5.6.129.g274ea
Vienna:bin pieter$ git clone localhost:project/bonnenteller Initialize bonnenteller/.git
Initialized empty Git repository in/opt/git/bin/bonnenteller/.git/Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
Quoted 3 lines
Quoted 1 line
I think that is what Miklos meant.
Exactly. Thanks for the good description.
AFAICT these are fixed with ed99a225(Merge branch 'jc/dashless' into next).
Ciao,
Dscho
Quoted 9 lines · Johannes Schindelin
Quoted 9 lines
Quoted 9 lines
Vienna:bin pieter$ git --version
git version 1.5.6.129.g274ea
Vienna:bin pieter$ git clone localhost:project/bonnenteller Initialize bonnenteller/.git
Initialized empty Git repository in/opt/git/bin/bonnenteller/.git/Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
Quoted 6 lines
Quoted 3 lines
Quoted 1 line
I think that is what Miklos meant.
Exactly. Thanks for the good description.
AFAICT these are fixed with ed99a225(Merge branch 'jc/dashless' into next).
Using fc48199 ("Merge branch 'master' into next", which includes ed99a225) on the server, v1.5.6 on the client, I get:
$ git clone server:/home/vmiklos/git/test next Initialize next/.git Initialized empty Git repository in /home/vmiklos/scm/git/next/.git/ vmiklos@server's password: bash: git-upload-pack: command not found fatal: The remote end hung up unexpectedly
Hi,
Quoted 20 lines · Miklos Vajna
Quoted 9 lines · Johannes Schindelin
Quoted 9 lines
Quoted 9 lines
Vienna:bin pieter$ git --version
git version 1.5.6.129.g274ea
Vienna:bin pieter$ git clone localhost:project/bonnenteller Initialize bonnenteller/.git
Initialized empty Git repository in/opt/git/bin/bonnenteller/.git/Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedlyQuoted 6 lines
Quoted 3 lines
Quoted 1 line
I think that is what Miklos meant.
Exactly. Thanks for the good description.
AFAICT these are fixed with ed99a225(Merge branch 'jc/dashless' into next).
Using fc48199 ("Merge branch 'master' into next", which includes
ed99a225) on the server, v1.5.6 on the client, I get:
Quoted 6 lines
$ git clone server:/home/vmiklos/git/test next Initialize next/.git Initialized empty Git repository in /home/vmiklos/scm/git/next/.git/ vmiklos@server's password: bash: git-upload-pack: command not found fatal: The remote end hung up unexpectedly
Hmm. Probably the client needs to be newer, too. This is going to be painful. Junio?
Sorry for the noise,
Dscho
Quoted 10 lines · Johannes Schindelin
Quoted 9 lines
Using fc48199 ("Merge branch 'master' into next", which includes
ed99a225) on the server, v1.5.6 on the client, I get:$ git clone server:/home/vmiklos/git/test next Initialize next/.git Initialized empty Git repository in /home/vmiklos/scm/git/next/.git/ vmiklos@server's password: bash: git-upload-pack: command not found fatal: The remote end hung up unexpectedly
Quoted 2 lines
Hmm. Probably the client needs to be newer, too. This is going to be painful. Junio?
Even with maint client accessing an account with next git-shell as its login shell, I do not get the above failure.
Is git-shell installed and configured correctly at all in Miklos's setup? Why does the other side say "bash: git-upload-pack" when login shell is git-shell and not bash?
Quoted 6 lines · Junio C Hamano
Quoted 5 lines
Quoted 2 lines
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedlyHmm. Probably the client needs to be newer, too. This is going to be painful. Junio?
Quoted 6 lines
Even with maint client accessing an account with next git-shell as its login shell, I do not get the above failure.
Is git-shell installed and configured correctly at all in Miklos's setup? Why does the other side say "bash: git-upload-pack" when login shell is git-shell and not bash?
Sorry for the confusion, this is not about git-shell at all. I have bash as the shell on the server, obviously.
So, in case the server runs next, the client runs master, and I try to clone via ssh, I get the above error.
Quoted 14 lines · Miklos Vajna
Quoted 6 lines · Junio C Hamano
Quoted 5 lines
Quoted 2 lines
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedlyHmm. Probably the client needs to be newer, too. This is going to be painful. Junio?
Quoted 6 lines
Even with maint client accessing an account with next git-shell as its login shell, I do not get the above failure.
Is git-shell installed and configured correctly at all in Miklos's setup? Why does the other side say "bash: git-upload-pack" when login shell is git-shell and not bash?
Quoted 5 lines
Sorry for the confusion, this is not about git-shell at all. I have bash as the shell on the server, obviously.
So, in case the server runs next, the client runs master, and I try to clone via ssh, I get the above error.
Ah, there is not much we can do in that case then. git-upload-pack is what the client asks you to run, and if you do not have it in the path, you can (1) either make sure it is on the path, (2) have the client be more explicit when asking for git-upload-pack (--upload-pack=$where), or
(3) leave the minimum git-* binaries that can remotely be launched directly in the usual $PATH.
It most likely makes sense to do (3) anyway. upload-pack, receive-pack, anything else?
Quoted 2 lines · Junio C Hamano
It most likely makes sense to do (3) anyway. upload-pack, receive-pack, anything else?
I think that's all.
Quoted 5 lines · Miklos Vajna
Quoted 2 lines · Junio C Hamano
It most likely makes sense to do (3) anyway. upload-pack, receive-pack, anything else?
I think that's all.
Then that would be this patch on top of nd/dashless topic.
Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
Makefile +1 -1
@@ -1268,7 +1268,7 @@ install: all $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)' $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)' - $(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)' + $(INSTALL) git$X git-upload-pack$X git-receive-pack$X '$(DESTDIR_SQ)$(bindir_SQ)' $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install $(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install ifndef NO_TCLTK
Quoting Junio C Hamano <[email protected]>:
Quoted 18 lines
Quoted 5 lines · Miklos Vajna
Quoted 2 lines · Junio C Hamano
It most likely makes sense to do (3) anyway. upload-pack, receive-pack, anything else?
I think that's all.
Then that would be this patch on top of nd/dashless topic.
Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)Makefile +0
-0
Makefile install: all · line 1274
Quoted 8 lines
Makefile +1
-1@@ -1268,7 +1268,7 @@ install: all $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)' $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)' - $(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)' + $(INSTALL) git$X git-upload-pack$X git-receive-pack$X '$(DESTDIR_SQ)$(bindir_SQ)' $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install $(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install ifndef NO_TCLTK
Doesn't "git archive --remote=<repo>" also execute git program on a remote machine?
Signature · 2 lines
Nanako Shiraishi http://ivory.ap.teacup.com/nanako3/
Quoted 13 lines · <[email protected]> wrote:
Quoting Junio C Hamano <[email protected]>:
Quoted 12 lines
Quoted 5 lines · Miklos Vajna
Quoted 2 lines · Junio C Hamano
It most likely makes sense to do (3) anyway. upload-pack, receive-pack, anything else?
I think that's all.
Then that would be this patch on top of nd/dashless topic.
Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
Quoted 15 lines
Makefile install: all · line 1274
Quoted 13 lines
Makefile +1
-1@@ -1268,7 +1268,7 @@ install: all $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)' $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)' - $(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)' + $(INSTALL) git$X git-upload-pack$X git-receive-pack$X '$(DESTDIR_SQ)$(bindir_SQ)' $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install $(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install ifndef NO_TCLTKDoesn't "git archive --remote=<repo>" also execute git program on a remote machine?
Yes, it runs git-upload-archive on the remote side. The three primary services for the remote side are documented in daemon.c:
403 static struct daemon_service daemon_service[] = {
404 { "upload-archive", "uploadarch", upload_archive, 0, 1 },
405 { "upload-pack", "uploadpack", upload_pack, 1, 1 },
406 { "receive-pack", "receivepack", receive_pack, 0, 1 },
407 };(with git- prefixes).
IMHO all three need to be in $PATH, along with git and gitk, through at least a major revision release cycle to give clients a chance to upgrade to something that uses "git foo" rather than "git-foo" when talking to the remote.
Signature · 1 line
Shawn.
PATCH 1/1 Keep some git-* programs in $(bindir)
In reply to しらいしななこOtherwise remote executions directly over ssh won't find them as they used to. --upload-pack and --receive-pack options _could_ be used on the client side, but things should keep working out-of-box for older clients.
Later versions of clients (fetch-pack and send-pack) probably could start asking for these programs with dashless form, but that is a different topic.
---
Quoted 1 line · しらいしななこ
Doesn't "git archive --remote=<repo>" also execute git program on a remote machine?
Ok, how about this?
Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
Makefile +1 -1
@@ -1268,7 +1268,7 @@ install: all $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)' $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)' - $(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)' + $(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-archive$X '$(DESTDIR_SQ)$(bindir_SQ)' $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install $(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install ifndef NO_TCLTK
Signature · 1 line
1.5.6.56.g29b0d
Re: [PATCH] Keep some git-* programs in $(bindir)
Makefile install: all · line 1271
Quoted 13 lines · Junio C Hamano
Quoted 1 line · しらいしななこ
Doesn't "git archive --remote=<repo>" also execute git program on a remote machine?
Makefile +1
-1@@ -1268,7 +1268,7 @@ install: all $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)' $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)' - $(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)' + $(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-archive$X '$(DESTDIR_SQ)$(bindir_SQ)'
I think you mean git-upload-archive, given what daemon.c says. Or line 34 of builtin-archive.c, which calls git-upload-archive by way of git_connect().
Signature · 1 line
Shawn.
PATCH 1/1 Ask for "git program" when asking for "git-program" over SSH connection
In reply to Junio C HamanoThe daemon expects to see the dashed form and we cannot change older servers. But when invoking programs on the remote end over SSH, the command line the client side build is under client's control.
---
* This I haven't even compile tested at all, but it feels right. We probably should do this before bindir=>libexecdir move; as long as this is in place on the client side the version running on the server end should not matter.
connect.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
connect.c +4 -0
@@ -589,6 +589,10 @@ struct child_process *git_connect(int fd[2], const char *url_orig, conn =xcalloc (1 ,sizeof (*conn));strbuf_init (&cmd,MAX_CMD_LEN ); +if (protocol !=PROTO_GIT && !strncmp (prog,"git-" ,4 )) { +strbuf_addstr (&cmd,"git " ); + prog +=4 ; + }strbuf_addstr (&cmd, prog);strbuf_addch (&cmd,' ' );sq_quote_buf (&cmd, path);
Signature · 1 line
1.5.6.56.g29b0d
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
Quoted 3 lines · Junio C Hamano
The daemon expects to see the dashed form and we cannot change older servers. But when invoking programs on the remote end over SSH, the command line the client side build is under client's control.
...
connect.c struct child_process *git_connect(int fd[2], const char *url_orig, · line 595
Quoted 12 lines
connect.c +4
-0@@ -589,6 +589,10 @@ struct child_process *git_connect(int fd[2], const char *url_orig, conn =xcalloc (1 ,sizeof (*conn));strbuf_init (&cmd,MAX_CMD_LEN ); +if (protocol !=PROTO_GIT && !strncmp (prog,"git-" ,4 )) { +strbuf_addstr (&cmd,"git " ); + prog +=4 ; + }
Nack on that implementation.
I think this is a problem for systems based on say gitosis, or some pattern like it. Day-job doesn't use gitosis, but has switched to a Perl based forced ssh tool that smells a lot like gitosis. Gitosis is popular.
github probably uses something similar. But nobody knows (or probably cares) since they don't release their source.
gitosis is likely looking for "$git-upload-pack '(.*)'$" to be in the $SSH_ORIGINAL_COMMAND environment variable, if you send "git upload-pack 'path.git'" I think its going to reject.
What's really bad about your patch is you cannot work around it as a user by setting --upload-pack on the command line, or in the config, because down at the very deepest level you are switching the "git-" to "git " and ignoring what the user has supplied you.
Sorry, but I think this change needs to go higher up, to the default values that --upload-pack and remote.$name.uploadpack override, so the user can at least work around it when we break her ability to use github, gitosis, or anything like it.
Signature · 1 line
Shawn.
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
Quoted 4 lines · Shawn O. Pearce
Sorry, but I think this change needs to go higher up, to the default values that --upload-pack and remote.$name.uploadpack override, so the user can at least work around it when we break her ability to use github, gitosis, or anything like it.
Well, the thing is, "higher up" would not have enough clue to see if it needs to give dashed form (for git-daemon) or space form (for ssh), so that suggestion won't help much.
I do not care too much about closed source service, but gitosis should be able to update the pattern to allow "git[ -]upload-pack" reasonably easily.
Any other suggestions that is workable?
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
Quoted 10 lines · Junio C Hamano
Quoted 4 lines · Shawn O. Pearce
Sorry, but I think this change needs to go higher up, to the default values that --upload-pack and remote.$name.uploadpack override, so the user can at least work around it when we break her ability to use github, gitosis, or anything like it.
Well, the thing is, "higher up" would not have enough clue to see if it needs to give dashed form (for git-daemon) or space form (for ssh), so that suggestion won't help much.
Actually I'd go the other direction. Allow the higher up level to supply "git upload-pack" and convert it to git- for the git://
protocol. Possible patch below.
Quoted 3 lines
I do not care too much about closed source service, but gitosis should be able to update the pattern to allow "git[ -]upload-pack" reasonably easily.
Pasky also has to update:
$ git ls-remote --upload-pack='git upload-pack' repo.or.cz:/srv/git/egit.git fatal: unrecognized command 'git upload-pack '/srv/git/egit.git'' fatal: The remote end hung up unexpectedly
;-)
Quoted 1 line
Any other suggestions that is workable?
builtin-clone.c +2 -2
@@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;static int option_local, option_no_hardlinks, option_shared;static char *option_template, *option_reference, *option_depth;static char *option_origin =NULL ; -static char *option_upload_pack ="git-upload-pack" ; +static char *option_upload_pack ="git upload-pack" ;static struct option builtin_clone_options[] = {OPT__QUIET (&option_quiet),
@@ -58,7 +58,7 @@ static struct option builtin_clone_options[] = {OPT_STRING ('o' ,"origin" , &option_origin,"branch" ,"use <branch> instead or 'origin' to track upstream" ),OPT_STRING ('u' ,"upload-pack" , &option_upload_pack,"path" , -"path to git-upload-pack on the remote" ), +"path to git upload-pack on the remote" ),OPT_STRING (0 ,"depth" , &option_depth,"depth" , "create a shallow clone of that depth"),
builtin-fetch-pack.c +1 -1
@@ -14,7 +14,7 @@ static int transfer_unpack_limit = -1;static int fetch_unpack_limit =-1 ;static int unpack_limit =100 ;static struct fetch_pack_args args = { -/* .uploadpack = */ "git-upload-pack" , +/* .uploadpack = */ "git upload-pack" , }; static const char fetch_pack_usage[] =
connect.c +2 -2
@@ -576,8 +576,8 @@ struct child_process *git_connect(int fd[2], const char *url_orig,* from extended components with a NUL byte. */ packet_write (fd[1 ], -"%s %s%chost=%s%c" , - prog, path,0 , +"git-%s %s%chost=%s%c" , + prog +4 , path,0 , target_host,0 );free (target_host);free (url);
git-parse-remote.sh +2 -2
@@ -255,10 +255,10 @@ get_uploadpack () { case "$data_source" in config) uplp=$(git config --get "remote.$1.uploadpack") - echo ${uplp:-git-upload-pack} + echo ${uplp:-git upload-pack} ;; *) - echo "git-upload-pack" + echo "git upload-pack" ;; esac }
transport.c +2 -2
@@ -762,10 +762,10 @@ struct transport *transport_get(struct remote *remote, const char *url) data->thin =1 ; data->conn =NULL ; - data->uploadpack ="git-upload-pack" ; + data->uploadpack ="git upload-pack" ;if (remote && remote->uploadpack) data->uploadpack = remote->uploadpack; - data->receivepack ="git-receive-pack" ; + data->receivepack ="git receive-pack" ;if (remote && remote->receivepack) data->receivepack = remote->receivepack; }
Signature · 1 line
Shawn.
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
builtin-clone.c static int option_quiet, option_no_checkout, option_bare;
Quoted 7 lines · Shawn O. Pearce
Quoted 1 line
Any other suggestions that is workable?
builtin-clone.c +0
-0@@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;
<< a patch to conditionally change "git-program" default to "git program" snipped >>
How would that help client that talk with git-daemon, unlike what I sent earlier?
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
Quoted 4 lines · Junio C Hamano
Quoted 2 lines · Shawn O. Pearce
Quoted 1 line
Any other suggestions that is workable?
Quoted 8 lines
builtin-clone.c static int option_quiet, option_no_checkout, option_bare;
Quoted 5 lines
builtin-clone.c +0
-0@@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;<< a patch to conditionally change "git-program" default to "git program" snipped >>
Typofix: s/cond/uncond/;
Quoted 2 lines
How would that help client that talk with git-daemon, unlike what I sent earlier?
If we force --upload-pack workaround to _everybody_ we are already lost.
Also I think the previous one still lets you work it around by giving a full path, like "/usr/local/bin/git-upload-pack", because "/usr" does not match "git-" ;-)
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
Quoted 5 lines · Junio C Hamano
Quoted 4 lines · Junio C Hamano
Quoted 2 lines · Shawn O. Pearce
Quoted 1 line
Any other suggestions that is workable?
Quoted 8 lines
Quoted 8 lines
builtin-clone.c static int option_quiet, option_no_checkout, option_bare;
Quoted 5 lines
builtin-clone.c +0
-0@@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;<< a patch to conditionally change "git-program" default to "git program" snipped >>
Shouldn't "git upload-pack" work on the server side as far back as 0.99.9k? That's back really old. And my patch fixed "git " to be "git-" when talking to git-daemon, thus keeping clients compatible with all current git:// servers.
For SSH servers that can't handle "git upload-pack" the user can change it to --upload-pack=git-upload-pack and get back to the old behavior, until the server operator can upgrade.
Your patch doesn't offer that work around on the client side.
Quoted 4 lines
Typofix: s/cond/uncond/;
Quoted 2 lines
How would that help client that talk with git-daemon, unlike what I sent earlier?
Check my change in git_connect again:
connect.c +2 -2
@@ -576,8 +576,8 @@ struct child_process *git_connect(int fd[2], const char *url_orig,* from extended components with a NUL byte. */ packet_write (fd[1 ], -"%s %s%chost=%s%c" , - prog, path,0 , +"git-%s %s%chost=%s%c" , + prog +4 , path,0 , target_host,0 );free (target_host);free (url);
Its buggy if the user tried to do "git ls-remote --upload-pack=crp git://"
but if this is the direction we want to go we can obviously work out a better method of forcing "git " to be "git-" when talking to git-daemon.
Quoted 5 lines
If we force --upload-pack workaround to _everybody_ we are already lost.
Also I think the previous one still lets you work it around by giving a full path, like "
/usr/local/bin/git-upload-pack", because "/usr" does not match "git-" ;-)
Please tell me, where is git-upload-pack on repo.or.cz?
$ ssh repo.or.cz which git-upload-pack fatal: unrecognized command 'which git-upload-pack'
I doubt I can pass it '/usr/local/bin/git-upload-pack' and get it to work too. So I don't think this is a good work around.
Obviously pasky will fix repo.or.cz to accept both at some point in the near future, likely before 1.6.0 releases, because he's cool like that. Not everyone is.
Please don't make 1.6.0 unavailable to end-users because their server operator can't currently accept "git upload-pack" without giving them a workaround to force "git-upload-pack" over SSH.
Signature · 1 line
Shawn.
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
Quoted 15 lines · Shawn O. Pearce
Quoted 5 lines · Junio C Hamano
Quoted 4 lines · Junio C Hamano
Quoted 2 lines · Shawn O. Pearce
Quoted 1 line
Any other suggestions that is workable?
Quoted 8 lines
Quoted 8 lines
builtin-clone.c static int option_quiet, option_no_checkout, option_bare;
Quoted 5 lines
builtin-clone.c +0
-0@@ -37,7 +37,7 @@ static int option_quiet, option_no_checkout, option_bare;<< a patch to conditionally change "git-program" default to "git program" snipped >>
Quoted 2 lines
Shouldn't "git upload-pack" work on the server side as far back as 0.99.9k?
Yeah, I missed the patch to connect.c that was buried among other changes. Sorry.
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
In reply to Junio C HamanoQuoted 5 lines · Junio C Hamano
If we force --upload-pack workaround to _everybody_ we are already lost.
Also I think the previous one still lets you work it around by giving a full path, like "
/usr/local/bin/git-upload-pack", because "/usr" does not match "git-" ;-)
Ok, let's map this out seriously.
* 1.6.0 will install the server-side programs in $(bindir) so that people coming over ssh will find them on the $PATH
* In 1.6.0 (and 1.5.6.1), we will change "git daemon" to accept both "git-program" and "git program" forms. When the spaced form is used, it will behave as if the dashed form is requested. This is a prerequisite for client side change to start asking for "git program".
* In the near future, there will no client-side change. "git-program" will be asked for.
* 6 months after 1.6.0 ships, hopefully all the deployed server side will be running that version or newer. Client side will start asking for "git program" by default, but we can still override with --upload-pack and friends.
* 12 months after client side changes, everybody will be running that version or newer. We stop installing the server side programs in $(bindir) but people coming over ssh will be asking for "git program" and "git" will be on the $PATH so there is no issue.
The above 6 and 12 are yanked out of thin air and I am of course open to tweaking them, but I think the above order of events would be workable.
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
Quoted 9 lines · Junio C Hamano
Quoted 5 lines · Junio C Hamano
If we force --upload-pack workaround to _everybody_ we are already lost.
Also I think the previous one still lets you work it around by giving a full path, like "
/usr/local/bin/git-upload-pack", because "/usr" does not match "git-" ;-)Ok, let's map this out seriously.
This plan makes a lot of sense to me. I'm behind it. For whatever that means. At least I'll shutup and stop making noise about this issue if you take this approach. :-)
Quoted 16 lines
* 1.6.0 will install the server-side programs in $(bindir) so that people coming over ssh will find them on the $PATH
* In 1.6.0 (and 1.5.6.1), we will change "git daemon" to accept both "git-program" and "git program" forms. When the spaced form is used, it will behave as if the dashed form is requested. This is a prerequisite for client side change to start asking for "git program".
* In the near future, there will no client-side change. "git-program" will be asked for.
* 6 months after 1.6.0 ships, hopefully all the deployed server side will be running that version or newer. Client side will start asking for "git program" by default, but we can still override with --upload-pack and friends.
Quoted 7 lines
* 12 months after client side changes, everybody will be running that version or newer. We stop installing the server side programs in $(bindir) but people coming over ssh will be asking for "git program" and "git" will be on the $PATH so there is no issue.
The above 6 and 12 are yanked out of thin air and I am of course open to tweaking them, but I think the above order of events would be workable.
Yea, 6 and 12 seem like a good idea. Its a couple of releases and gives people time to migrate their server installations.
Signature · 1 line
Shawn.
PATCH 1/1 daemon: accept "git program" as well
This is a step to futureproof git-daemon to accept clients that ask for "git upload-pack" and friends, instead of using the more traditional dash-form "git-upload-pack". By allowing both, it makes the client side easier to handle, as it makes "git" the only thing necessary to be on $PATH when invoking the remote command directly via ssh.
---
Quoted 29 lines · Shawn O. Pearce
Quoted 1 line · Junio C Hamano
Ok, let's map this out seriously.
This plan makes a lot of sense to me. I'm behind it. For whatever that means. At least I'll shutup and stop making noise about this issue if you take this approach. :-)
Quoted 21 lines
* 1.6.0 will install the server-side programs in $(bindir) so that people coming over ssh will find them on the $PATH
* In 1.6.0 (and 1.5.6.1), we will change "git daemon" to accept both "git-program" and "git program" forms. When the spaced form is used, it will behave as if the dashed form is requested. This is a prerequisite for client side change to start asking for "git program".
* In the near future, there will no client-side change. "git-program" will be asked for.
* 6 months after 1.6.0 ships, hopefully all the deployed server side will be running that version or newer. Client side will start asking for "git program" by default, but we can still override with --upload-pack and friends.
* 12 months after client side changes, everybody will be running that version or newer. We stop installing the server side programs in $(bindir) but people coming over ssh will be asking for "git program" and "git" will be on the $PATH so there is no issue.
Quoted 5 lines
Quoted 2 lines
The above 6 and 12 are yanked out of thin air and I am of course open to tweaking them, but I think the above order of events would be workable.
Yea, 6 and 12 seem like a good idea. Its a couple of releases and gives people time to migrate their server installations.
So this obviously needs to be queued to 'maint' to be included in 1.5.6.1 and 1.6.0.
daemon.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
daemon.c +1 -1
@@ -586,7 +586,7 @@ static int execute(struct sockaddr *addr)for (i =0 ; i <ARRAY_SIZE (daemon_service); i++) {struct daemon_service *s = &(daemon_service[i]);int namelen =strlen (s->name); -if (!prefixcmp (line,"git-" ) && +if ((!prefixcmp (line,"git-" ) || !prefixcmp (line,"git " )) && !strncmp (s->name, line +4 , namelen) && line[namelen +4 ] ==' ' ) {/*
Re: [PATCH] daemon: accept "git program" as well
Quoted 8 lines · Junio C Hamano
This is a step to futureproof git-daemon to accept clients that ask for "git upload-pack" and friends, instead of using the more traditional dash-form "git-upload-pack". By allowing both, it makes the client side easier to handle, as it makes "git" the only thing necessary to be on $PATH when invoking the remote command directly via ssh.
Signed-off-by Junio C Hamano <[email protected]>
Obviously correct. Ack. Thanks Junio.
Quoted 19 lines
So this obviously needs to be queued to 'maint' to be included in 1.5.6.1 and 1.6.0.
daemon.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)daemon.c +1
-1@@ -586,7 +586,7 @@ static int execute(struct sockaddr *addr)for (i =0 ; i <ARRAY_SIZE (daemon_service); i++) {struct daemon_service *s = &(daemon_service[i]);int namelen =strlen (s->name); -if (!prefixcmp (line,"git-" ) && +if ((!prefixcmp (line,"git-" ) || !prefixcmp (line,"git " )) && !strncmp (s->name, line +4 , namelen) && line[namelen +4 ] ==' ' ) {/*
Signature · 1 line
Shawn.
Re: [PATCH] daemon: accept "git program" as well
Quoted 11 lines · Shawn O. Pearce
Quoted 8 lines · Junio C Hamano
This is a step to futureproof git-daemon to accept clients that ask for "git upload-pack" and friends, instead of using the more traditional dash-form "git-upload-pack". By allowing both, it makes the client side easier to handle, as it makes "git" the only thing necessary to be on $PATH when invoking the remote command directly via ssh.
Signed-off-by Junio C Hamano <[email protected]>Obviously correct. Ack. Thanks Junio.
By the way I looked at gitosis (Tommi CC'ed).
http://repo.or.cz/w/gitosis.git?a=blob;f=gitosis/serve.py;h=c0b7135bf45305ee1079b0dcab3b4ed1ce988aab;hb=38561aa6a51a2ef6cc04aa119481df62d213ffa4
In gitosis/serve.py, there are COMMANDS_READONLY and COMMANDS_WRITE array that holds 'git-upload-pack' and 'git-receive-pack' commands, and they are compared with user commands after doing:
verb, args = command.split(None, 1)
(and "verb" is looked up in the set of valid commands). It should not be too involved to notice verb is 'git' and then re-split the args part to see if they are upload-pack/receive-pack, which would be the equivalent change to this patch. It needs to be done before the clients are updated.
Re: [PATCH] daemon: accept "git program" as well
Quoted 7 lines · Junio C Hamano
By the way I looked at gitosis (Tommi CC'ed).
http://repo.or.cz/w/gitosis.git?a=blob;f=gitosis/serve.py;h=c0b7135bf45305ee1079b0dcab3b4ed1ce988aab;hb=38561aa6a51a2ef6cc04aa119481df62d213ffa4In
gitosis/serve.py, there areCOMMANDS_READONLYandCOMMANDS_WRITEarray that holds 'git-upload-pack' and 'git-receive-pack' commands, and they are compared with user commands after doing:
Yeah, that's pretty much a trivial change, doing it now to future-proof gitosis.
Signature · 1 line
:(){ :|:&};:Re: [PATCH] daemon: accept "git program" as well
Hi,
Quoted 9 lines · Tommi Virtanen
Quoted 4 lines · Junio C Hamano
In
gitosis/serve.py, there areCOMMANDS_READONLYandCOMMANDS_WRITEarray that holds 'git-upload-pack' and 'git-receive-pack' commands, and they are compared with user commands after doing:Yeah, that's pretty much a trivial change, doing it now to future-proof gitosis.
This just happened to me with a dashless client, so I tried your patch but it does not work. The problem comes from git-shell that do not support dashless argument, yet (IOW: git shell -c 'git upload-pack ...' give an error).
The following patch on top of yours fix the problem. The s/git-shell/git shell/ part is not really necessary, but why not?
gitosis/serve.py +3 -5
@@ -21,12 +21,10 @@ ALLOW_RE = re.compile("^'/*(?P<path>[a-zA-Z0-9][a-zA-Z0-9@._-]*(/[a-zA-Z0-9][a-z COMMANDS_READONLY = [ 'git-upload-pack', - 'git upload-pack', ] COMMANDS_WRITE = [ 'git-receive-pack', - 'git receive-pack', ] class ServingError(Exception):
@@ -75,7 +73,7 @@ def serve( # all known "git foo" commands take one argument; improve # if/when needed raise UnknownCommandError() - verb = '%s %s' % (verb, subverb) + verb = '%s-%s' % (verb, subverb) if (verb not in COMMANDS_WRITE and verb not in COMMANDS_READONLY):
@@ -201,6 +199,6 @@ class Main(app.App): sys.exit(1) main_log.debug('Serving %s', newcmd) - os.execvp('git-shell', ['git-shell', '-c', newcmd]) - main_log.error('Cannot execute git-shell.') + os.execvp('git', ['git', 'shell', '-c', newcmd]) + main_log.error('Cannot execute git.') sys.exit(1)
Olivier.
Re: [PATCH] daemon: accept "git program" as well
Quoted 47 lines · Olivier Marin
Hi,
Quoted 9 lines · Tommi Virtanen
Quoted 4 lines · Junio C Hamano
In
gitosis/serve.py, there areCOMMANDS_READONLYandCOMMANDS_WRITEarray that holds 'git-upload-pack' and 'git-receive-pack' commands, and they are compared with user commands after doing:Yeah, that's pretty much a trivial change, doing it now to future-proof gitosis.
This just happened to me with a dashless client, so I tried your patch but it does not work. The problem comes from git-shell that do not support dashless argument, yet (IOW: git shell -c 'git upload-pack ...' give an error).
The following patch on top of yours fix the problem. The s/git-shell/git shell/ part is not really necessary, but why not?
gitosis/serve.py +1
-3@@ -21,12 +21,10 @@ ALLOW_RE = re.compile("^'/*(?P<path>[a-zA-Z0-9][a-zA-Z0-9@._-]*(/[a-zA-Z0-9][a-z COMMANDS_READONLY = [ 'git-upload-pack', - 'git upload-pack', ] COMMANDS_WRITE = [ 'git-receive-pack', - 'git receive-pack', ] class ServingError(Exception):@@ -75,7 +73,7 @@ def serve( # all known "git foo" commands take one argument; improve # if/when needed raise UnknownCommandError() - verb = '%s %s' % (verb, subverb) + verb = '%s-%s' % (verb, subverb) if (verb not in COMMANDS_WRITE and verb not in COMMANDS_READONLY):
gitosis/serve.py class Main(app.App): · line 204
Quoted 8 lines
gitosis/serve.py +2
-2@@ -201,6 +199,6 @@ class Main(app.App): sys.exit(1) main_log.debug('Serving %s', newcmd) - os.execvp('git-shell', ['git-shell', '-c', newcmd]) - main_log.error('Cannot execute git-shell.') + os.execvp('git', ['git', 'shell', '-c', newcmd]) + main_log.error('Cannot execute git.') sys.exit(1)
Hmm, Tommi, if you are doing command sanitizing yourself, is there a reason to still invoke the command via git-shell?
PATCH 1/1 Make clients ask for "git program" over ssh and local transport
In reply to Junio C HamanoThis will allow server side programs such as upload-pack to be installed outside $PATH. Connections to git-daemon still ask for "git-program" to retain backward compatibility for daemons before 1.5.6.1 and 1.6.0.
---
* This is essentially your patch. This can be in 1.6.0 clients and it should also be in 1.5.6.1 as people might keep ancient clients to talk to new servers that won't have anything but "git" on $PATH.
builtin-clone.c | 2 +- builtin-fetch-pack.c | 2 +- connect.c | 10 ++++++++-- git-parse-remote.sh | 4 ++-- transport.c | 4 ++-- 5 files changed, 14 insertions(+), 8 deletions(-)
builtin-clone.c +1 -1
@@ -36,7 +36,7 @@ static int option_quiet, option_no_checkout, option_bare;static int option_local, option_no_hardlinks, option_shared;static char *option_template, *option_reference, *option_depth;static char *option_origin =NULL ; -static char *option_upload_pack ="git-upload-pack" ; +static char *option_upload_pack ="git upload-pack" ;static struct option builtin_clone_options[] = {OPT__QUIET (&option_quiet),
builtin-fetch-pack.c +1 -1
@@ -14,7 +14,7 @@ static int transfer_unpack_limit = -1;static int fetch_unpack_limit =-1 ;static int unpack_limit =100 ;static struct fetch_pack_args args = { -/* .uploadpack = */ "git-upload-pack" , +/* .uploadpack = */ "git upload-pack" , }; static const char fetch_pack_usage[] =
connect.c +8 -2
@@ -567,6 +567,8 @@ struct child_process *git_connect(int fd[2], const char *url_orig,* cannot connect. */ char *target_host =xstrdup (host); +const char *program_prefix ="" ; +if (git_use_proxy (host))git_proxy_connect (fd, host);else
@@ -575,9 +577,13 @@ struct child_process *git_connect(int fd[2], const char *url_orig,* Separate original protocol components prog and path * from extended components with a NUL byte. */ +if (!prefixcmp (prog,"git " )) { + program_prefix ="git-" ; + prog +=4 ; + }packet_write (fd[1 ], -"%s %s%chost=%s%c" , - prog, path,0 , +"%s%s %s%chost=%s%c" , + program_prefix, prog, path,0 , target_host,0 );free (target_host);free (url);
git-parse-remote.sh +2 -2
@@ -255,10 +255,10 @@ get_uploadpack () { case "$data_source" in config) uplp=$(git config --get "remote.$1.uploadpack") - echo ${uplp:-git-upload-pack} + echo ${uplp:-git upload-pack} ;; *) - echo "git-upload-pack" + echo "git upload-pack" ;; esac }
transport.c +2 -2
@@ -762,10 +762,10 @@ struct transport *transport_get(struct remote *remote, const char *url) data->thin =1 ; data->conn =NULL ; - data->uploadpack ="git-upload-pack" ; + data->uploadpack ="git upload-pack" ;if (remote && remote->uploadpack) data->uploadpack = remote->uploadpack; - data->receivepack ="git-receive-pack" ; + data->receivepack ="git receive-pack" ;if (remote && remote->receivepack) data->receivepack = remote->receivepack; }
Signature · 1 line
1.5.6.86.ge2da6
Re: [PATCH] Make clients ask for "git program" over ssh and local transport
Quoted 9 lines · Junio C Hamano
This will allow server side programs such as upload-pack to be installed outside $PATH. Connections to git-daemon still ask for "git-program" to retain backward compatibility for daemons before 1.5.6.1 and 1.6.0.
Signed-off-by Junio C Hamano <[email protected]>---
* This is essentially your patch. This can be in 1.6.0 clients and it should also be in 1.5.6.1 as people might keep ancient clients to talk to new servers that won't have anything but "git" on $PATH.
Ack. Thanks for cleaning up the code in connect.c to not segfault or send garbage.
I think you want to squash this in as well:
builtin-send-pack.c +1 -1
@@ -12,7 +12,7 @@ static const char send_pack_usage[] =" --all and explicit <ref> specification are mutually exclusive." ;static struct send_pack_args args = { -/* .receivepack = */ "git-receive-pack" , +/* .receivepack = */ "git receive-pack" , };/*
Signature · 1 line
Shawn.
PATCH 1/1 Ask for "git program" even against git-daemon
In reply to Junio C HamanoThis drops backward compatibility support to ask for "git-program" form when talking to git-daemon. Now all git native requests use "git program" form over ssh, local and git transports.
This needs to be held back until everybody runs git-daemon from 1.5.6.1 or 1.6.0 or newer.
---
* According to the roadmap we exchanged earlier, this should happen in a major release (that increments the second dewey-decimal digit from the left) that ships at least 6 months after 1.5.6.1 and 1.6.0 (which will have the "git daemon preparation" patch included) are released.
connect.c | 9 ++------- 1 files changed, 2 insertions(+), 7 deletions(-)
connect.c +2 -7
@@ -567,7 +567,6 @@ struct child_process *git_connect(int fd[2], const char *url_orig,* cannot connect. */ char *target_host =xstrdup (host); -const char *program_prefix ="" ;if (git_use_proxy (host))git_proxy_connect (fd, host);
@@ -577,13 +576,9 @@ struct child_process *git_connect(int fd[2], const char *url_orig,* Separate original protocol components prog and path * from extended components with a NUL byte. */ -if (!prefixcmp (prog,"git " )) { - program_prefix ="git-" ; - prog +=4 ; - }packet_write (fd[1 ], -"%s%s %s%chost=%s%c" , - program_prefix, prog, path,0 , +"%s %s%chost=%s%c" , + prog, path,0 , target_host,0 );free (target_host);free (url);
Signature · 1 line
1.5.6.86.ge2da6
Re: [PATCH] Ask for "git program" even against git-daemon
Quoted 7 lines · Junio C Hamano
This drops backward compatibility support to ask for "git-program" form when talking to git-daemon. Now all git native requests use "git program" form over ssh, local and git transports.
This needs to be held back until everybody runs git-daemon from 1.5.6.1 or 1.6.0 or newer.
Quoted 6 lines
Signed-off-by Junio C Hamano <[email protected]>---
* According to the roadmap we exchanged earlier, this should happen in a major release (that increments the second dewey-decimal digit from the left) that ships at least 6 months after 1.5.6.1 and 1.6.0 (which will have the "git daemon preparation" patch included) are released.
Agreed about holding back.
But I wonder if this patch is even worth it at some later point in time. Are we also going to change git-daemon to stop accepting "git-" form? Is it a worthwhile change?
Signature · 1 line
Shawn.
Re: [PATCH] Ask for "git program" even against git-daemon
Quoted 7 lines · Shawn O. Pearce
Junio C Hamano <[email protected]> wrote:
...Quoted 4 lines
* According to the roadmap we exchanged earlier, this should happen in a major release (that increments the second dewey-decimal digit from the left) that ships at least 6 months after 1.5.6.1 and 1.6.0 (which will have the "git daemon preparation" patch included) are released.
Quoted 5 lines
Agreed about holding back.
But I wonder if this patch is even worth it at some later point in time. Are we also going to change git-daemon to stop accepting "git-" form? Is it a worthwhile change?
This was merely responding to...
From: "Shawn O. Pearce" <[email protected]>
Subject: Re: [PATCH] Keep some git-* programs in $(bindir)
Date: Wed, 25 Jun 2008 00:37:41 -0400
Message-ID: <[email protected]>
Daniel Barkalow <[email protected]> wrote:
> ...
> Should they use "git upload-pack" or should they look for their helper > programs in a libexec dir? I don't think that either of these programs is > useful to run independantly, but I don't know if finding a program that > doesn't go in $PATH on a remote machine is going to be any fun.
IMHO they should in the future use "git upload-pack".
I do not mind not doing this at all. Remember, I am the one with more inertia than anybody else here (holding back backward incompatible innovations is what maintainers do).
Oh, that inertia does not have much to do with actual body weight, if anybody is wondering ;-)
Re: [PATCH] Ask for "git program" even against git-daemon
Quoted 13 lines · Junio C Hamano
Quoted 4 lines · Shawn O. Pearce
But I wonder if this patch is even worth it at some later point in time. Are we also going to change git-daemon to stop accepting "git-" form? Is it a worthwhile change?
This was merely responding to...
From: "Shawn O. Pearce" <[email protected]>
Subject: Re: [PATCH] Keep some git-* programs in $(bindir)
Date: Wed, 25 Jun 2008 00:37:41 -0400
Message-ID: <[email protected]>
Quoted 5 lines
Daniel Barkalow <[email protected]> wrote:
> ...
> Should they use "git upload-pack" [...]IMHO they should in the future use "git upload-pack".
Sorry I wasn't clear. I was talking about the SSH transport only. For git:// we could just always send git-upload-pack, like your transitional patch does. Then we stay compatible with even very old git:// servers.
Signature · 1 line
Shawn.
Re: [PATCH] Ask for "git program" even against git-daemon
Quoted 18 lines · Shawn O. Pearce
Quoted 17 lines · Junio C Hamano
Quoted 4 lines · Shawn O. Pearce
But I wonder if this patch is even worth it at some later point in time. Are we also going to change git-daemon to stop accepting "git-" form? Is it a worthwhile change?
This was merely responding to...
From: "Shawn O. Pearce" <[email protected]> Subject: Re: [PATCH] Keep some git-* programs in $(bindir) Date: Wed, 25 Jun 2008 00:37:41 -0400 Message-ID: <[email protected]> Daniel Barkalow <[email protected]> wrote: > ... > Should they use "git upload-pack" [...]
Quoted 6 lines
Quoted 1 line
IMHO they should in the future use "git upload-pack".
Sorry I wasn't clear. I was talking about the SSH transport only. For
git://we could just always send git-upload-pack, like your transitional patch does. Then we stay compatible with even very oldgit://servers.
Ok, if that is the plan, then we wouldn't even need to futureproof git-daemon at all.
Not having to change anything is good ;-).
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
In reply to Junio C HamanoQuoted 18 lines · Junio C Hamano
Ok, let's map this out seriously.
* 1.6.0 will install the server-side programs in $(bindir) so that people coming over ssh will find them on the $PATH
* In 1.6.0 (and 1.5.6.1), we will change "git daemon" to accept both "git-program" and "git program" forms. When the spaced form is used, it will behave as if the dashed form is requested. This is a prerequisite for client side change to start asking for "git program".
* In the near future, there will no client-side change. "git-program" will be asked for.
* 6 months after 1.6.0 ships, hopefully all the deployed server side will be running that version or newer. Client side will start asking for "git program" by default, but we can still override with --upload-pack and friends.
Quoted 7 lines
* 12 months after client side changes, everybody will be running that version or newer. We stop installing the server side programs in $(bindir) but people coming over ssh will be asking for "git program" and "git" will be on the $PATH so there is no issue.
The above 6 and 12 are yanked out of thin air and I am of course open to tweaking them, but I think the above order of events would be workable.
Is that really 6 and 12 months, or "6/12 months or at the next major release boundary, whichever is later". i.e., would make some of these changes as part of a minor dot release, such as having the client side change what it starts asking for in 1.6.3 or some such? Presumably the earliest that change would happen is 1.7, and the earliest to make the server side installation changes is 1.8, right? Or did you really mean a hard 6/12 months, regardless of release cycle issues?
- Ted
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
Quoted 7 lines · Theodore Tso
On Tue, Jun 24, 2008 at 10:27:07PM -0700, Junio C Hamano wrote:
...Quoted 2 lines
The above 6 and 12 are yanked out of thin air and I am of course open to tweaking them, but I think the above order of events would be workable.
Is that really 6 and 12 months, or "6/12 months or at the next major release boundary, whichever is later".
Sigh... I thought you by now knew me better than that...
Yes, I didn't say it explicitly because I thought it was too obvious, which was a mistake. These except for the ones that are preparation (such as "prepare daemon so that future clients can ask with non-dash forms") need to happen at release boundaries, but these 6/12 months figures set the minimums. E.g. even if we had 6 week release cycles and 1.7.0 were to be done 6 weeks after 1.6.0, that is still too early for the client side to switch asking for "git program".
Re: [PATCH] Ask for "git program" when asking for "git-program" over SSH connection
In reply to Shawn O. PearceQuoted 5 lines · Shawn O. Pearce
Pasky also has to update:
$ git ls-remote --upload-pack='git upload-pack' repo.or.cz:/srv/git/egit.git fatal: unrecognized command 'git upload-pack '/srv/git/egit.git'' fatal: The remote end hung up unexpectedly
Of course. I am assuming that he runs git-shell for user account, and that's what the change in 'next' is about.
Re: [PATCH] Keep some git-* programs in $(bindir)
In reply to Junio C HamanoQuoted 7 lines · Junio C Hamano
Otherwise remote executions directly over ssh won't find them as they used to. --upload-pack and --receive-pack options _could_ be used on the client side, but things should keep working out-of-box for older clients.
Later versions of clients (fetch-pack and send-pack) probably could start asking for these programs with dashless form, but that is a different topic.
Should they use "git upload-pack" or should they look for their helper programs in a libexec dir? I don't think that either of these programs is useful to run independantly, but I don't know if finding a program that doesn't go in $PATH on a remote machine is going to be any fun.
-Daniel
*This .sig lefti ntentionally blank*
Re: [PATCH] Keep some git-* programs in $(bindir)
Quoted 6 lines · Daniel Barkalow
Quoted 4 lines · Junio C Hamano
Otherwise remote executions directly over ssh won't find them as they used to. --upload-pack and --receive-pack options _could_ be used on the client side, but things should keep working out-of-box for older clients.
Quoted 8 lines
Quoted 3 lines
Later versions of clients (fetch-pack and send-pack) probably could start asking for these programs with dashless form, but that is a different topic.
Should they use "git upload-pack" or should they look for their helper programs in a libexec dir? I don't think that either of these programs is useful to run independantly, but I don't know if finding a program that doesn't go in $PATH on a remote machine is going to be any fun.
IMHO they should in the future use "git upload-pack".
But this may not work with all servers, especially those that use $SSH_ORIGINAL_COMMAND to dispatch to the correct command, or abort if the user tries to request something dangerous. Gitosis comes to mind.
I'm not sure we can get away with doing this in 1.6.0 as it is effectively a network protocol breakage. We have thus far never caused a newer client to fail talking to an older server. I'm not sure we should start doing that in 1.6.0.
My vote is we keep the dashed form of these 3 commands in the $PATH during 1.6 and remove them in 1.7, but when we do it we must ensure there is a way to still request dashed form found through $PATH when passing --upload-pack as an argument.
Signature · 1 line
Shawn.
Quoted 9 lines · Junio C Hamano
Ah, there is not much we can do in that case then. git-upload-pack is what the client asks you to run, and if you do not have it in the path, you can (1) either make sure it is on the path, (2) have the client be more explicit when asking for git-upload-pack (--upload-pack=$where), or
(3) leave the minimum git-* binaries that can remotely be launched directly in the usual $PATH.It most likely makes sense to do (3) anyway. upload-pack, receive-pack, anything else?
What does "git ls-remote server:/home/vmiklos/git/test" invoke on server?
Signature · 3 lines
Jakub Narebski Poland ShadeHawk on #git
Quoted 2 lines · Jakub Narebski
What does "git ls-remote server:/home/vmiklos/git/test" invoke on server?
FYI, it actually runs git-upload-pack, gets the list of advertised refs, then closes the connection immediately. The other side sees the client hang up and just terminates silently, since the client didn't "want" anything packed and sent.
Signature · 1 line
Shawn.
Quoted 1 line · Jakub Narebski
What does "git ls-remote server:/home/vmiklos/git/test" invoke on server?
$ git ls-remote server:/home/vmiklos/git/test bash: git-upload-pack: command not found fatal: The remote end hung up unexpectedly
Quoted 12 lines · Johannes Schindelin
Quoted 10 lines · Miklos Vajna
Using fc48199 ("Merge branch 'master' into next", which includes
ed99a225) on the server, v1.5.6 on the client, I get:$ git clone server:/home/vmiklos/git/test next Initialize next/.git Initialized empty Git repository in /home/vmiklos/scm/git/next/.git/ vmiklos@server's password: bash: git-upload-pack: command not found fatal: The remote end hung up unexpectedly
Quoted 2 lines
Hmm. Probably the client needs to be newer, too. This is going to be painful. Junio?
It looks like git-upload-pack and git-receive-pack would have to be left in $PATH, at least till old clients die of old age ;-)
git-shell hackery won't solve problem, because not everybody is using git-shell.
Signature · 3 lines
Jakub Narebski Poland ShadeHawk on #git
Hi,
Quoted 2 lines · Jakub Narebski
git-shell hackery won't solve problem, because not everybody is using git-shell.
The problem is not git-shell vs git potty.
The problem is that not everybody magically updates their clients to ask for dash-less form.
Ciao,
Dscho
Hello!
Quoted 9 lines · Johannes Schindelin
Quoted 2 lines · Jakub Narebski
git-shell hackery won't solve problem, because not everybody is using git-shell.
The problem is not git-shell vs git potty.
The problem is that not everybody magically updates their clients to ask for dash-less form.
What I meant here by "git-shell hackery" was for git-shell to automagically redirect request for "git-receive-pack" to "git receive-pack" (or "$GIT_EXEC_PATH/git-receive-pack").
But, as I said, it isn't complete solution. Leaving git-*-pack in $PATH for the time being (what I said) is.
Signature · 2 lines
Jakub Narebski Poland
Quoted 11 lines · Johannes Schindelin
Hi,
Quoted 2 lines · Jakub Narebski
git-shell hackery won't solve problem, because not everybody is using git-shell.
The problem is not git-shell vs git potty.
The problem is that not everybody magically updates their clients to ask for dash-less form.
With git-shell even if client uses dashed form it can find git commands ("hackery" is too strong a word for having git-shell search $GIT_EXEC_PATH). But if one uses only SSH, server must have dashed form in a $PATH
Signature · 2 lines
Jakub Narebski Poland
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It already is beginning to become clear what 1.6.0 will look like. What's already in 'next' all are well intentioned (I do not guarantee they are already bug-free --- that is what cooking them in 'next' is for) and are good set of feature enhancements. But bigger changes will be:
* MinGW will be in.
* /usr/bin/git-cat-file is no more. The bulk of the git commands will move to /usr/libexec/git-core/ or somesuch.
* git-merge will be rewritten in C.
Currently tip of 'pu' is broken and does not pass tests, as j6t/mingw has interaction with dr/ceiling and jc/merge-theirs has interaction with mv/merge-in-c.
----------------------------------------------------------------
[New Topics]
* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits
- rerere.autoupdate
- t4200: fix rerere test
- rerere: remove dubious "tail_optimization"
- git-rerere: detect unparsable conflicts
- rerere: rerere_created_at() and has_resolution() abstraction
* sb/rebase (Sun Jun 22 01:55:50 2008 +0200) 2 commits
+ t3404: stricter tests for git-rebase--interactive
+ api-builtin.txt: update and fix typo
* sb/maint-rebase (Sun Jun 22 16:07:02 2008 +0200) 1 commit
+ git-rebase.sh: Add check if rebase is in progress
----------------------------------------------------------------
[Will merge to master soon]
* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit
+ gitweb: standarize HTTP status codes
* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits
+ Add config option to enable 'fsync()' of object files
+ Split up default "i18n" and "branch" config parsing into helper routines
+ Split up default "user" config parsing into helper routine
+ Split up default "core" config parsing into helper routine
* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
+ Move all dashed-form commands to libexecdir
Scheduled for 1.6.0.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
+ merge: remove deprecated summary and diffstat options and config variables
* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits
+ Hook up the result aggregation in the test makefile.
+ A simple script to parse the results from the testcases
+ Modify test-lib.sh to output stats to t/test-results/*
* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits
+ Teach "git clone" to pack refs
+ Prepare testsuite for a "git clone" that packs refs
+ Move pack_refs() and friends into libgit
+ Incorporate fetched packs in future object traversal
This is useful when cloning from a repository with insanely large number of refs.
* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits
+ Git.pm: add test suite
+ t/test-lib.sh: add test_external and test_external_without_stderr
Beginning of regression tests for Perl part of the system.
----------------------------------------------------------------
[Actively Cooking]
* mv/merge-in-c (Sat Jun 21 19:15:35 2008 +0200) 14 commits
- Add new test case to ensure git-merge reduces octopus parents when possible
- Add new test case to ensure git-merge filters for independent parents
- Build in merge
- Introduce reduce_heads()
- Introduce get_merge_bases_many()
- Add new test to ensure git-merge handles more than 25 refs.
- Introduce get_octopus_merge_bases() in commit.c
- git-fmt-merge-msg: make it usable from other builtins
- Move read_cache_unmerged() to read-cache.c
- parseopt: add a new PARSE_OPT_ARGV0_IS_AN_OPTION option
- Add new test to ensure git-merge handles pull.twohead and pull.octopus
- Move parse-options's skip_prefix() to git-compat-util.h
- Move commit_list_count() to commit.c
- Move split_cmdline() to alias.c
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
- Prepare execv_git_cmd() for removal of builtins from the filesystem
- git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
+ Eliminate an unnecessary chdir("..")
+ Add support for GIT_CEILING_DIRECTORIES
+ Fold test-absolute-path into test-path-utils
+ Implement normalize_absolute_path
----------------------------------------------------------------
[Graduated to "master"]
* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit
+ Teach new attribute 'export-ignore' to git-archive
* lt/racy-empty (Tue Jun 10 10:44:43 2008 -0700) 1 commit
+ racy-git: an empty blob has a fixed object name
* sn/static (Thu Jun 19 08:21:11 2008 +0900) 2 commits
+ config.c: make git_env_bool() static
+ environment.c: remove unused function
* jc/maint-combine-diff-pre-context (Wed Jun 18 23:59:41 2008 -0700) 1 commit
+ diff -c/--cc: do not include uninteresting deletion before leading context
* lt/maint-gitdir-relative (Thu Jun 19 12:34:06 2008 -0700) 1 commit
+ Make git_dir a path relative to work_tree in setup_work_tree()
* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits
+ gitweb: Separate generating 'sort by' table header
+ gitweb: Separate filling list of projects info
* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit
+ gitweb: remove git_blame and rename git_blame2 to git_blame
* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits
+ Make old sha1 optional with git update-ref -d
+ Clean up builtin-update-ref's option parsing
* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits
+ Add configuration option for default untracked files mode
+ Add argument 'no' commit/status option -u|--untracked-files
+ Add an optional <mode> argument to commit/status -u|--untracked- files option
* jk/test (Sat Jun 14 03:28:07 2008 -0400) 5 commits
+ enable whitespace checking of test scripts
+ avoid trailing whitespace in zero-change diffstat lines
+ avoid whitespace on empty line in automatic usage message
+ mask necessary whitespace policy violations in test scripts
+ fix whitespace violations in test scripts
Tightens whitespace rules for t/*.sh scripts.
* pb/fast-export (Wed Jun 11 13:17:04 2008 +0200) 1 commit
+ builtin-fast-export: Add importing and exporting of revision marks
----------------------------------------------------------------
[On Hold]
* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit
+ Remove the use of '--' in merge program invocation
Waiting for success reports from people who use various backends.
* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits
- compat/pread.c: Add a forward declaration to fix a warning
- Windows: Fix ntohl() related warnings about printf formatting
- Windows: TMP and TEMP environment variables specify a temporary directory.
- Windows: Make 'git help -a' work.
- Windows: Work around an oddity when a pipe with no reader is written to.
- Windows: Make the pager work.
- When installing, be prepared that template_dir may be relative.
- Windows: Use a relative default template_dir and ETC_GITCONFIG
- Windows: Compute the fallback for exec_path from the program invocation.
- Turn builtin_exec_path into a function.
- Windows: Use a customized struct stat that also has the st_blocks member.
- Windows: Add a custom implementation for utime().
- Windows: Add a new lstat and fstat implementation based on Win32 API.
- Windows: Implement a custom spawnve().
- Windows: Implement wrappers for gethostbyname(), socket(), and connect().
- Windows: Work around incompatible sort and find.
- Windows: Implement asynchronous functions as threads.
- Windows: Disambiguate DOS style paths from SSH URLs.
- Windows: A rudimentary poll() emulation.
- Windows: Change the name of hook scripts to make them not executable.
- Windows: Implement start_command().
- Windows: A pipe() replacement whose ends are not inherited to children.
- Windows: Wrap execve so that shell scripts can be invoked.
- Windows: Implement setitimer() and sigaction().
- Windows: Fix PRIuMAX definition.
- Windows: Implement gettimeofday().
- Windows: Handle absolute paths in safe_create_leading_directories().
- Windows: Treat Windows style path names.
- setup.c: Prepare for Windows directory separators.
- Windows: Work around misbehaved rename().
- Windows: always chmod(, 0666) before unlink().
- Windows: A minimal implemention of getpwuid().
- Windows: Implement a wrapper of the open() function.
- Windows: Strip ".exe" from the program name.
- Windows: Use the Windows style PATH separator ';'.
- Add target architecture MinGW.
- Compile some programs only conditionally.
- Add compat/regex.[ch] and compat/fnmatch.[ch].
No explanation is necessary ;-). The series is probably 'next' worthy as-is.
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
----------------------------------------------------------------
[Stalled/Needs more work]
* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit
- Per-ref reflog expiry configuration
Perhaps a good foundation for optionally unexpirable stash. As 1.6.0 will be a good time to make backward incompatible changes, we might make expiry period of stash 'never' in new repositories. Needs a concensus.
* jc/merge-theirs (Fri Jun 20 00:17:59 2008 -0700) 2 commits
- git-merge-recursive-{ours,theirs}
- git-merge-file --ours, --theirs
Punting a merge by discarding your own work in conflicting parts but still salvaging the parts that are cleanly automerged. It is likely that this will result in nonsense mishmash, but somehow often people want this, so here they are. The interface to the backends may need to change, though.
* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
- blame: show "previous" information in --porcelain/--incremental format
- git-blame: refactor code to emit "porcelain format" output
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the commit ""git-blame --reverse" on the series).
The tip two commits are for peeling to see what's behind the blamed commit, which we should be able to separate out into an independent topic from the rest.
----------------------------------------------------------------
[Dropped for now]
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits . Introduce fast forward option only
. Head reduction before selecting merge strategy . Restructure git-merge.sh
. Introduce -ff=<fast forward option>
. New merge tests
. Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C.
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits . Use perl instead of tac
. Fix t3404 assumption that wc -l does not use whitespace. . rebase -i: Use : in expr command instead of match.
. rebase -i: update the implementation of 'mark' command . Add option --preserve-tags
. Teach rebase interactive the tag command
. Add option --first-parent
. Do rebase with preserve merges with advanced TODO list . Select all lines with fake-editor
. Unify the length of $SHORT* and the commits in the TODO list . Teach rebase interactive the merge command
. Move redo merge code in a function
. Teach rebase interactive the reset command
. Teach rebase interactive the mark command
. Move cleanup code into it's own function
. Don't append default merge message to -m message
. fake-editor: output TODO list if unchanged
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits . WIP: rethink replay merge
. Start using replay-tree merge in cherry-pick
. revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits . git-am --forge: add Signed-off-by: line for the author . git-am: clean-up Signed-off-by: lines
. stripspace: add --log-clean option to clean up signed-off-by:
lines
. stripspace: use parse_options()
. Add "git am -s" test
. git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit . "git push": tellme-more protocol extension
Quoted 10 lines · Junio C Hamano
* mv/merge-in-c (Sat Jun 21 19:15:35 2008 +0200) 14 commits
- Add new test case to ensure git-merge reduces octopus parents when possible
- Add new test case to ensure git-merge filters for independent parents
- Build in merge
- Introducereduce_heads()
- Introduceget_merge_bases_many()
- Add new test to ensure git-merge handles more than 25 refs.
- Introduceget_octopus_merge_bases()incommit.c
Quoted 8 lines
- git-fmt-merge-msg: make it usable from other builtins
- Moveread_cache_unmerged()toread-cache.c
- parseopt: add a newPARSE_OPT_ARGV0_IS_AN_OPTIONoption
- Add new test to ensure git-merge handles pull.twohead and pull.octopus
- Move parse-options'sskip_prefix()togit-compat-util.h
- Movecommit_list_count()tocommit.c
- Movesplit_cmdline()toalias.c
"Add new test case to ensure git-merge reduces octopus parents when possible" does exactly the same as "Add new test case to ensure git-merge filters for independent parents", so I think you should drop the later. Only the name of the test and the commit message differs, and I think we want to avoid redundancy in the testsuite. ;-)
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order.
It already is beginning to become clear what 1.6.0 will look like. What's already in 'next' all are well intentioned (I do not guarantee they are already bug-free --- that is what cooking them in 'next' is for) and are good set of feature enhancements. But bigger changes will be:
* MinGW will be in.
* /usr/bin/git-cat-file is no more. The bulk of the git commands will move to /usr/libexec/git-core/ or somesuch.
* git-merge will be rewritten in C.
* default pack and idx versions will be updated as scheduled for some time ago.
----------------------------------------------------------------
[New Topics]
* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits
- Migrate git-blame to parse-option partially.
- parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.
- parse-opt: fake short strings for callers to believe in.
- parse-opt: do not pring errors on unknown options, return -2 intead.
- parse-opt: create parse_options_step.
- parse-opt: Export a non NORETURN usage dumper.
- parse-opt: have parse_options_{start,end}.
----------------------------------------------------------------
[Will merge to master soon]
* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit
+ gitweb: standarize HTTP status codes
* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits
+ Add config option to enable 'fsync()' of object files
+ Split up default "i18n" and "branch" config parsing into helper routines
+ Split up default "user" config parsing into helper routine
+ Split up default "core" config parsing into helper routine
* nd/dashless (Tue Jun 24 19:58:11 2008 -0700) 2 commits
+ Keep some git-* programs in $(bindir)
+ Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. We'll leave server-side programs in $(bindir) so that ssh clients can ask for "git-program" and find them on the $PATH.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
+ merge: remove deprecated summary and diffstat options and config variables
* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits
+ Hook up the result aggregation in the test makefile.
+ A simple script to parse the results from the testcases
+ Modify test-lib.sh to output stats to t/test-results/*
* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits
+ Teach "git clone" to pack refs
+ Prepare testsuite for a "git clone" that packs refs
+ Move pack_refs() and friends into libgit
+ Incorporate fetched packs in future object traversal
This is useful when cloning from a repository with insanely large number of refs.
* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits
+ Git.pm: add test suite
+ t/test-lib.sh: add test_external and test_external_without_stderr
Beginning of regression tests for Perl part of the system.
----------------------------------------------------------------
[Actively Cooking]
* mv/merge-in-c (Sat Jun 21 19:15:35 2008 +0200) 12 commits
- Add new test case to ensure git-merge reduces octopus parents when possible
- Build in merge
- Introduce reduce_heads()
- Introduce get_merge_bases_many()
- Add new test to ensure git-merge handles more than 25 refs.
- Introduce get_octopus_merge_bases() in commit.c
- git-fmt-merge-msg: make it usable from other builtins
- Move read_cache_unmerged() to read-cache.c
- Add new test to ensure git-merge handles pull.twohead and pull.octopus
- Move parse-options's skip_prefix() to git-compat-util.h
- Move commit_list_count() to commit.c
- Move split_cmdline() to alias.c
I dropped the change to parseopt in this series and fixed up the caller.
* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
+ Prepare execv_git_cmd() for removal of builtins from the filesystem
+ git-shell: accept "git foo" form
We do not plan to remove git-foo form completely from the filesystem at this point, but git-shell may need to be updated.
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
+ Eliminate an unnecessary chdir("..")
+ Add support for GIT_CEILING_DIRECTORIES
+ Fold test-absolute-path into test-path-utils
+ Implement normalize_absolute_path
* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits
- rerere.autoupdate
- t4200: fix rerere test
- rerere: remove dubious "tail_optimization"
- git-rerere: detect unparsable conflicts
- rerere: rerere_created_at() and has_resolution() abstraction
* sb/rebase (Sun Jun 22 01:55:50 2008 +0200) 2 commits
+ t3404: stricter tests for git-rebase--interactive
+ api-builtin.txt: update and fix typo
* sb/maint-rebase (Sun Jun 22 16:07:02 2008 +0200) 1 commit
+ git-rebase.sh: Add check if rebase is in progress
----------------------------------------------------------------
[Graduated to "master"]
----------------------------------------------------------------
[On Hold]
* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit
+ Remove the use of '--' in merge program invocation
Waiting for success reports from people who use various backends.
* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 39 commits
- compat/pread.c: Add a forward declaration to fix a warning
- Windows: Fix ntohl() related warnings about printf formatting
- Windows: TMP and TEMP environment variables specify a temporary directory.
- Windows: Make 'git help -a' work.
- Windows: Work around an oddity when a pipe with no reader is written to.
- Windows: Make the pager work.
- When installing, be prepared that template_dir may be relative.
- Windows: Use a relative default template_dir and ETC_GITCONFIG
- Windows: Compute the fallback for exec_path from the program invocation.
- Turn builtin_exec_path into a function.
- Windows: Use a customized struct stat that also has the st_blocks member.
- Windows: Add a custom implementation for utime().
- Windows: Add a new lstat and fstat implementation based on Win32 API.
- Windows: Implement a custom spawnve().
- Windows: Implement wrappers for gethostbyname(), socket(), and connect().
- Windows: Work around incompatible sort and find.
- Windows: Implement asynchronous functions as threads.
- Windows: Disambiguate DOS style paths from SSH URLs.
- Windows: A rudimentary poll() emulation.
- Windows: Change the name of hook scripts to make them not executable.
- Windows: Implement start_command().
- Windows: A pipe() replacement whose ends are not inherited to children.
- Windows: Wrap execve so that shell scripts can be invoked.
- Windows: Implement setitimer() and sigaction().
- Windows: Fix PRIuMAX definition.
- Windows: Implement gettimeofday().
- Make my_mktime() public and rename it to tm_to_time_t()
- Windows: Work around misbehaved rename().
- Windows: always chmod(, 0666) before unlink().
- Windows: A minimal implemention of getpwuid().
- Windows: Implement a wrapper of the open() function.
- Windows: Strip ".exe" from the program name.
- Windows: Handle absolute paths in safe_create_leading_directories().
- Windows: Treat Windows style path names.
- setup.c: Prepare for Windows directory separators.
- Windows: Use the Windows style PATH separator ';'.
- Add target architecture MinGW.
- Compile some programs only conditionally.
- Add compat/regex.[ch] and compat/fnmatch.[ch].
No explanation is necessary ;-). The series is probably 'next' worthy as-is, except that template renaming hack won't be needed anymore.
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
----------------------------------------------------------------
[Stalled/Needs more work]
* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit
- Per-ref reflog expiry configuration
Perhaps a good foundation for optionally unexpirable stash. As 1.6.0 will be a good time to make backward incompatible changes, we might make expiry period of stash 'never' in new repositories. Needs a concensus.
* jc/merge-theirs (Fri Jun 20 00:17:59 2008 -0700) 2 commits
- git-merge-recursive-{ours,theirs}
- git-merge-file --ours, --theirs
Punting a merge by discarding your own work in conflicting parts but still salvaging the parts that are cleanly automerged. It is likely that this will result in nonsense mishmash, but somehow often people want this, so here they are. The interface to the backends may need to change, though.
* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
- blame: show "previous" information in --porcelain/--incremental format
- git-blame: refactor code to emit "porcelain format" output
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the commit ""git-blame --reverse" on the series).
The tip two commits are for peeling to see what's behind the blamed commit, which we should be able to separate out into an independent topic from the rest.
----------------------------------------------------------------
[Dropped for now]
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits . Introduce fast forward option only
. Head reduction before selecting merge strategy . Restructure git-merge.sh
. Introduce -ff=<fast forward option>
. New merge tests
. Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C.
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits . Use perl instead of tac
. Fix t3404 assumption that wc -l does not use whitespace. . rebase -i: Use : in expr command instead of match.
. rebase -i: update the implementation of 'mark' command . Add option --preserve-tags
. Teach rebase interactive the tag command
. Add option --first-parent
. Do rebase with preserve merges with advanced TODO list . Select all lines with fake-editor
. Unify the length of $SHORT* and the commits in the TODO list . Teach rebase interactive the merge command
. Move redo merge code in a function
. Teach rebase interactive the reset command
. Teach rebase interactive the mark command
. Move cleanup code into it's own function
. Don't append default merge message to -m message
. fake-editor: output TODO list if unchanged
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits . WIP: rethink replay merge
. Start using replay-tree merge in cherry-pick
. revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits . git-am --forge: add Signed-off-by: line for the author . git-am: clean-up Signed-off-by: lines
. stripspace: add --log-clean option to clean up signed-off-by:
lines
. stripspace: use parse_options()
. Add "git am -s" test
. git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit . "git push": tellme-more protocol extension
PATCH 1/1 Make default expiration period of reflog used for stash infinite
This makes the default expiration period for the reflog that implements stash infinite.
The original behaviour to autoexpire old stashes can be restored by using the gc.refs/stash.{reflogexpire,reflogexpireunreachable} configration variables introduced by the previous commit.
---
Quoted 8 lines
[Stalled/Needs more work]
* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit
- Per-ref reflog expiry configurationPerhaps a good foundation for optionally unexpirable stash. As 1.6.0 will be a good time to make backward incompatible changes, we might make expiry period of stash 'never' in new repositories. Needs a concensus.
builtin-reflog.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
builtin-reflog.c +11 -0
@@ -441,6 +441,17 @@ static void set_reflog_expiry_param(struct cmd_reflog_expire_cb *cb, int slot, c } } +/* +* If unconfigured, make stash never expire +*/ +if (!strcmp (ref,"refs/stash" )) { +if (!(slot &EXPIRE_TOTAL )) + cb->expire_total =0 ; +if (!(slot &EXPIRE_UNREACH )) + cb->expire_unreachable =0 ; +return ; + } +/* Nothing matched -- use the default value */ if (!(slot &EXPIRE_TOTAL )) cb->expire_total = default_reflog_expire;
Signature · 1 line
1.5.6.1.102.g8e69d
Re: [PATCH] Make default expiration period of reflog used for stash infinite
Quoted 2 lines · Junio C Hamano
This makes the default expiration period for the reflog that implements stash infinite.
I did not read the whole thread so maybe I missed something but I though you wanted to apply Nanako's patch before?
The patch: http://article.gmane.org/gmane.comp.version-control.git/85055
Olivier.
Re: [PATCH] Make default expiration period of reflog used for stash infinite
Quoted 8 lines · Olivier Marin
Quoted 2 lines · Junio C Hamano
This makes the default expiration period for the reflog that implements stash infinite.
I did not read the whole thread so maybe I missed something but I though you wanted to apply Nanako's patch before?
The patch: http://article.gmane.org/gmane.comp.version-control.git/85055
Thanks for reminding, but I am of two minds about the change.
(1) The change would untie the base tree of the stash from the history behind it and allow previously rewound tips of branches that these stashes were built on top of. Without the patch, these otherwise unreachable commits will never be reclaimed.
(2) Today, you can say "git log stash" (note the lack of "-g" option) to view the history behind the stash through two artificial commits that stash creates. This will become impossible with the patch.
Probably I am worrying too much; I do not personally think the second point matters in the real life. If "git log stash" _were_ any useful, it means the history behind the stash entries are not useless at all, but in that case the user would be using regular branches to store them anyway.
PATCH 1/1 Disconnect stash from its base commit
A stash records the state of the files in the working tree as a merge between the HEAD and another commit that records the state of the index, that in turn is a child commit of the HEAD commit. In order to later apply (or pop) the stash, however, only the tree objects of these three commits are necessary.
This patch changes the structure of a stash to use a parentless new commit that has the same tree as the HEAD commit, in place of the HEAD commit. This way, a stash does not keep the history that leads to the HEAD commit reachable, even if the stash is kept forever.
---
The patch in the message Olivier quoted alone will be insufficient. This is an update to that patch.
Documentation/git-stash.txt | 14 +++++++------- git-stash.sh | 3 +++ t/t3903-stash.sh | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-)
Documentation/git-stash.txt +7 -7
@@ -101,18 +101,18 @@ DISCUSSION ---------- A stash is represented as a commit whose tree records the state of the -working directory, and its first parent is the commit at `HEAD` when -the stash was created. The tree of the second parent records the +working directory, and its first parent is the commit that has the same +tree as the `HEAD`. The tree of the second parent records the state of the index when the stash is made, and it is made a child of -the `HEAD` commit. The ancestry graph looks like this: +the first commit. The ancestry graph looks like this: .----W / / - -----H----I + H*---I -where `H` is the `HEAD` commit, `I` is a commit that records the state -of the index, and `W` is a commit that records the state of the working -tree. +where `H{asterisk}` is a commit with the same tree as the `HEAD`, `I` is +a commit that records the state of the index, and `W` is a commit that +records the state of the working tree. EXAMPLES
git-stash.sh +3 -0
@@ -54,6 +54,9 @@ create_stash () { fi msg=$(printf '%s: %s' "$branch" "$head") + # create the base commit that is parentless + b_commit=$(printf 'base of %s\n' "$msg" | git commit-tree "HEAD:") + # state of the index i_tree=$(git write-tree) && i_commit=$(printf 'index on %s\n' "$msg" |
t/t3903-stash.sh +1 -1
@@ -32,7 +32,7 @@ index 0cfbf08..00750ed 100644 EOF test_expect_success 'parents of stash' ' - test $(git rev-parse stash^) = $(git rev-parse HEAD) && + test $(git rev-parse stash^^{tree}) = $(git rev-parse HEAD^{tree}) && git diff stash^2..stash > output && test_cmp output expect '
Signature · 5 lines
1.5.6 -- Nanako Shiraishi http://ivory.ap.teacup.com/nanako3/
Re: [PATCH] Disconnect stash from its base commit
Hi,
Quoted 10 lines · Nanako Shiraishi
A stash records the state of the files in the working tree as a merge between the HEAD and another commit that records the state of the index, that in turn is a child commit of the HEAD commit. In order to later apply (or pop) the stash, however, only the tree objects of these three commits are necessary.
This patch changes the structure of a stash to use a parentless new commit that has the same tree as the HEAD commit, in place of the HEAD commit. This way, a stash does not keep the history that leads to the HEAD commit reachable, even if the stash is kept forever.
May I register my suspicion that this is the wrong direction to go?
I actually find it quite nice that I can easily see in gitk where I spawned off a certain stash, indeed, how the recent stash history (manually specified with "stash@{0} stash@{1} stash@{2}" [*1*]), relates to the current branch's history.
Ciao,
Dscho
P.S.: I vaguely remember that I once wrote a patch to turn "stash@{0..2}" into exactly the same, but I do not remember why I did not follow up on it. Was it refuted, or unwanted?
Re: [PATCH] Disconnect stash from its base commit
Quoted 11 lines · Johannes Schindelin
Quoted 4 lines
This patch changes the structure of a stash to use a parentless new commit that has the same tree as the HEAD commit, in place of the HEAD commit. This way, a stash does not keep the history that leads to the HEAD commit reachable, even if the stash is kept forever.
May I register my suspicion that this is the wrong direction to go?
I actually find it quite nice that I can easily see in gitk where I spawned off a certain stash, indeed, how the recent stash history (manually specified with "stash@{0} stash@{1} stash@{2}" [*1*]), relates to the current branch's history.
A stash may primarily be for applying the change to random place, but where it was created is not a useless information. The very original use case that was in the discussion "git stash" (actually its original form "git save") was first posted was "I am in the middle of something, and get interrupted. Stash the changes away to switch branches to deal with the emergency for a while so that I can later come back to where I was, and I want both saving away and coming back easy operations". A stash _can_ be applied to any random other state, but "coming back" is very much part of what it should have supported, and not recording the base commit means we would lose that capability.
Side note. In addition to the current "stash apply" and "stash pop", "stash branch $stash newbranchname" that does
git checkout -b newbranchanme $stash^
(i.e. create a new branch starting from the state you were in) might be a good ingredient to support a more git-like workflow to resume. If your original branch gained extra commits, was rewound, or was rebased during the emergency/distraction, you may not have anywhere to apply/pop the stash without conflicts when you want to "come back" with normal
git checkout somebranch && git stash pop
But that imaginary "stash branch" command would always give you the exact state you were in and creates a clean fork to finish what you were doing, and continue.
So the base commit is an integral part of what a stash is, and I agree with you that an unexpiring stash that pins the whole history beind it is a feature. It is not unncessary cruft that accumulates that we need to worry about.
Re: [PATCH] Disconnect stash from its base commit
Quoted 4 lines · At 2008-07-02 12:01:35 -0700, [email protected] wrote:
But that imaginary "stash branch" command would always give you the exact state you were in and creates a clean fork to finish what you were doing, and continue.
Nice idea. Something as simple as the appended diff?
I reversed the stash/branch arguments so that one need specify only the branch name. Playing with it a little, it feels very useful.
-- ams
git-stash.sh +19 -0
@@ -218,6 +218,21 @@ drop_stash () { git rev-parse --verify "$ref_stash@{0}" > /dev/null 2>&1 || clear_stash } +apply_to_branch () { + have_stash || die 'Nothing to apply' + + test -n "$1" || die 'No branch name specified' + branch=$1 + + if test -z "$2" + then + set x "$ref_stash@{0}" + fi + stash=$2 + + git-checkout -b $branch $stash^ && apply_stash $stash +} + # Main command set case "$1" in list)
@@ -264,6 +279,10 @@ pop) drop_stash "$@" fi ;; +branch) + shift + apply_to_branch "$@" + ;; *) if test $# -eq 0 then
Re: [PATCH] Disconnect stash from its base commit
Quoted 10 lines · Abhijit Menon-Sen
Quoted 4 lines · At 2008-07-02 12:01:35 -0700, [email protected] wrote:
But that imaginary "stash branch" command would always give you the exact state you were in and creates a clean fork to finish what you were doing, and continue.
Nice idea. Something as simple as the appended diff?
I reversed the stash/branch arguments so that one need specify only the branch name. Playing with it a little, it feels very useful.
I'd further suggest to delete the stash automatically when you create a new branch out of it.
PATCH 1/1 Implement "git stash branch <newbranch> <stash>"
Restores the stashed state on a new branch rooted at the commit on which the stash was originally created, so that conflicts caused by subsequent changes on the original branch can be dealt with.
(Thanks to Junio for this nice idea.)
--- Documentation/git-stash.txt | 19 ++++++++++++++++++- git-stash.sh | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletions(-)
Documentation/git-stash.txt +18 -1
@@ -8,8 +8,11 @@ git-stash - Stash the changes in a dirty working directory away SYNOPSIS -------- [verse] -'git stash' (list | show [<stash>] | apply [<stash>] | clear | drop [<stash>] | pop [<stash>]) +'git stash' list +'git stash' (show | apply | drop | pop ) [<stash>] +'git stash' branch <branchname> [<stash>] 'git stash' [save [<message>]] +'git stash' clear DESCRIPTION -----------
@@ -81,6 +84,20 @@ tree's changes, but also the index's ones. However, this can fail, when you have conflicts (which are stored in the index, where you therefore can no longer apply the changes as they were originally). +branch <branchname> [<stash>]:: + + Creates and checks out a new branch named `<branchname>` starting from + the commit at which the `<stash>` was originally created, applies the + changes recorded in `<stash>` to the new working tree, and drops the + `<stash>` if that completes successfully. When no `<stash>` is given, + applies the latest one. ++ +This is useful if the branch on which you ran `git stash save` has +changed enough that `git stash apply` fails due to conflicts. Since +the stash is applied on top of the commit that was HEAD at the time +`git stash` was run, it restores the originally stashed state with +no conflicts. + clear:: Remove all the stashed states. Note that those states will then be subject to pruning, and may be difficult or impossible to recover.
git-stash.sh +21 -0
@@ -218,6 +218,23 @@ drop_stash () { git rev-parse --verify "$ref_stash@{0}" > /dev/null 2>&1 || clear_stash } +apply_to_branch () { + have_stash || die 'Nothing to apply' + + test -n "$1" || die 'No branch name specified' + branch=$1 + + if test -z "$2" + then + set x "$ref_stash@{0}" + fi + stash=$2 + + git-checkout -b $branch $stash^ && + apply_stash $stash && + drop_stash $stash +} + # Main command set case "$1" in list)
@@ -264,6 +281,10 @@ pop) drop_stash "$@" fi ;; +branch) + shift + apply_to_branch "$@" + ;; *) if test $# -eq 0 then
Signature · 1 line
1.5.6
Re: [PATCH] Implement "git stash branch <newbranch> <stash>"
Documentation/git-stash.txt tree's changes, but also the index's ones. However, this can fail, when you · line 99
Quoted 13 lines · Abhijit Menon-Sen
Documentation/git-stash.txt +13
-0+branch <branchname> [<stash>]:: + + Creates and checks out a new branch named `<branchname>` starting from + the commit at which the `<stash>` was originally created, applies the + changes recorded in `<stash>` to the new working tree, and drops the + `<stash>` if that completes successfully. When no `<stash>` is given, + applies the latest one. ++ +This is useful if the branch on which you ran `git stash save` has +changed enough that `git stash apply` fails due to conflicts. Since +the stash is applied on top of the commit that was HEAD at the time +`git stash` was run, it restores the originally stashed state with +no conflicts.
Perhaps we would want to replay the stash always with --index for this application. By definition this will be conflict-free both in the index and in the working tree.
I've also toyed with an idea to make <branchname> optional, and detach the HEAD if <branchname> is not given. It would be a useful mode of operation but one problem is that it is _not_ an operation that should be called "branch" anymore.
PATCH 1/1 Implement "git stash branch <newbranch> <stash>"
Restores the stashed state on a new branch rooted at the commit on which the stash was originally created, so that conflicts caused by subsequent changes on the original branch can be dealt with.
(Thanks to Junio for this nice idea.)
--- Documentation/git-stash.txt | 19 ++++++++++++++++++- git-stash.sh | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletions(-)
(Reposting with --index and the missing Signed-off-by added.)
Documentation/git-stash.txt +18 -1
@@ -8,8 +8,11 @@ git-stash - Stash the changes in a dirty working directory away SYNOPSIS -------- [verse] -'git stash' (list | show [<stash>] | apply [<stash>] | clear | drop [<stash>] | pop [<stash>]) +'git stash' list +'git stash' (show | apply | drop | pop ) [<stash>] +'git stash' branch <branchname> [<stash>] 'git stash' [save [<message>]] +'git stash' clear DESCRIPTION -----------
@@ -81,6 +84,20 @@ tree's changes, but also the index's ones. However, this can fail, when you have conflicts (which are stored in the index, where you therefore can no longer apply the changes as they were originally). +branch <branchname> [<stash>]:: + + Creates and checks out a new branch named `<branchname>` starting from + the commit at which the `<stash>` was originally created, applies the + changes recorded in `<stash>` to the new working tree and index, then + drops the `<stash>` if that completes successfully. When no `<stash>` + is given, applies the latest one. ++ +This is useful if the branch on which you ran `git stash save` has +changed enough that `git stash apply` fails due to conflicts. Since +the stash is applied on top of the commit that was HEAD at the time +`git stash` was run, it restores the originally stashed state with +no conflicts. + clear:: Remove all the stashed states. Note that those states will then be subject to pruning, and may be difficult or impossible to recover.
git-stash.sh +21 -0
@@ -218,6 +218,23 @@ drop_stash () { git rev-parse --verify "$ref_stash@{0}" > /dev/null 2>&1 || clear_stash } +apply_to_branch () { + have_stash || die 'Nothing to apply' + + test -n "$1" || die 'No branch name specified' + branch=$1 + + if test -z "$2" + then + set x "$ref_stash@{0}" + fi + stash=$2 + + git-checkout -b $branch $stash^ && + apply_stash --index $stash && + drop_stash $stash +} + # Main command set case "$1" in list)
@@ -264,6 +281,10 @@ pop) drop_stash "$@" fi ;; +branch) + shift + apply_to_branch "$@" + ;; *) if test $# -eq 0 then
Signature · 1 line
1.5.6
PATCH v3 1/1 Implement "git stash branch <newbranch> <stash>"
Restores the stashed state on a new branch rooted at the commit on which the stash was originally created, so that conflicts caused by subsequent changes on the original branch can be dealt with.
(Thanks to Junio for this nice idea.)
---
Reposting as requested with a new test included.
Documentation/git-stash.txt | 19 ++++++++++++++++++- git-stash.sh | 21 +++++++++++++++++++++ t/t3903-stash.sh | 24 ++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletions(-)
Documentation/git-stash.txt +18 -1
@@ -8,8 +8,11 @@ git-stash - Stash the changes in a dirty working directory away SYNOPSIS -------- [verse] -'git stash' (list | show [<stash>] | apply [<stash>] | clear | drop [<stash>] | pop [<stash>]) +'git stash' list +'git stash' (show | apply | drop | pop) [<stash>] +'git stash' branch <branchname> [<stash>] 'git stash' [save [<message>]] +'git stash' clear DESCRIPTION -----------
@@ -81,6 +84,20 @@ tree's changes, but also the index's ones. However, this can fail, when you have conflicts (which are stored in the index, where you therefore can no longer apply the changes as they were originally). +branch <branchname> [<stash>]:: + + Creates and checks out a new branch named `<branchname>` starting from + the commit at which the `<stash>` was originally created, applies the + changes recorded in `<stash>` to the new working tree and index, then + drops the `<stash>` if that completes successfully. When no `<stash>` + is given, applies the latest one. ++ +This is useful if the branch on which you ran `git stash save` has +changed enough that `git stash apply` fails due to conflicts. Since +the stash is applied on top of the commit that was HEAD at the time +`git stash` was run, it restores the originally stashed state with +no conflicts. + clear:: Remove all the stashed states. Note that those states will then be subject to pruning, and may be difficult or impossible to recover.
git-stash.sh +21 -0
@@ -218,6 +218,23 @@ drop_stash () { git rev-parse --verify "$ref_stash@{0}" > /dev/null 2>&1 || clear_stash } +apply_to_branch () { + have_stash || die 'Nothing to apply' + + test -n "$1" || die 'No branch name specified' + branch=$1 + + if test -z "$2" + then + set x "$ref_stash@{0}" + fi + stash=$2 + + git-checkout -b $branch $stash^ && + apply_stash --index $stash && + drop_stash $stash +} + # Main command set case "$1" in list)
@@ -264,6 +281,10 @@ pop) drop_stash "$@" fi ;; +branch) + shift + apply_to_branch "$@" + ;; *) if test $# -eq 0 then
t/t3903-stash.sh +24 -0
@@ -117,4 +117,28 @@ test_expect_success 'stash pop' ' test 0 = $(git stash list | wc -l) ' +cat > expect << EOF +diff --git a/file b/file +index 7601807..5716ca5 100644 +--- a/file ++++ b/file +@@ -1 +1 @@ +-baz ++bar +EOF + +test_expect_success 'stash apply' ' + echo foo > file && + git commit file -m first + echo bar > file && + git stash && + echo baz > file && + git commit file -m second && + git stash branch stashbranch && + git commit file -m alternate\ second && + git diff master..stashbranch > output && + test_cmp output expect && + test 0 = $(git stash list | wc -l) +' + test_done
Signature · 1 line
1.5.6
Re: [PATCH v3] Implement "git stash branch <newbranch> <stash>"
Hi,
Quoted 9 lines · Abhijit Menon-Sen
Restores the stashed state on a new branch rooted at the commit on which the stash was originally created, so that conflicts caused by subsequent changes on the original branch can be dealt with.
(Thanks to Junio for this nice idea.)
Signed-off-by Abhijit Menon-Sen <[email protected]>---
Reposting as requested with a new test included.
AFAICS the previous version is in 'next' already:656b50345239293929ad8c639c5f1941c6b867ad
Hth,
Dscho
PATCH 1/1 Add a test for "git stash branch"
Make sure that applying the stash to a new branch after a conflicting change doesn't result in an error when you try to commit.
---
Quoted 3 lines · At 2008-07-06 14:54:44 +0200, [email protected] wrote:
AFAICS the previous version is in 'next' already:
656b50345239293929ad8c639c5f1941c6b867ad
Oh, I see, thanks. I misunderstood the request. Here's a separate patch to just add the test.
Sorry for the noise.
-- ams
t/t3903-stash.sh | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-)
t/t3903-stash.sh +24 -0
@@ -117,4 +117,28 @@ test_expect_success 'stash pop' ' test 0 = $(git stash list | wc -l) ' +cat > expect << EOF +diff --git a/file b/file +index 7601807..5716ca5 100644 +--- a/file ++++ b/file +@@ -1 +1 @@ +-baz ++bar +EOF + +test_expect_success 'stash apply' ' + echo foo > file && + git commit file -m first + echo bar > file && + git stash && + echo baz > file && + git commit file -m second && + git stash branch stashbranch && + git commit file -m alternate\ second && + git diff master..stashbranch > output && + test_cmp output expect && + test 0 = $(git stash list | wc -l) +' + test_done
Signature · 1 line
1.5.6
Re: [PATCH] Add a test for "git stash branch"
Quoted 7 lines · Abhijit Menon-Sen
Quoted 3 lines · At 2008-07-06 14:54:44 +0200, [email protected] wrote:
AFAICS the previous version is in 'next' already:
656b50345239293929ad8c639c5f1941c6b867adOh, I see, thanks. I misunderstood the request. Here's a separate patch to just add the test.
Oh, there is no misunderstanding. You couldn't have possibly known if the main body of the patch will go to 'next' or just be dropped when I said "you might also want to have tests" to you.
t/t3903-stash.sh test_expect_success 'stash pop' ' · line 142
Quoted 13 lines
t/t3903-stash.sh +13
-0+test_expect_success 'stash apply' ' + echo foo > file && + git commit file -m first + echo bar > file && + git stash && + echo baz > file && + git commit file -m second && + git stash branch stashbranch && + git commit file -m alternate\ second && + git diff master..stashbranch > output && + test_cmp output expect && + test 0 = $(git stash list | wc -l) +'
The title is probably not 'stash apply' but 'stash branch'. Don't you want to also validate that:
- "stash branch" command switched to the new branch "stashbranch"?
- before making "alternate second", the index and the working tree have expected contents? and
- the final shape of the history looks correctly forked (i.e. "stashbranch" branches at the commit before "-m second" commit was made)?
Quoted 3 lines
test_doneSignature · 1 line
1.5.6
PATCH v2 1/1 Add a test for "git stash branch"
Make sure that applying the stash to a new branch after a conflicting change doesn't result in an error when you try to commit.
---
Quoted 2 lines · At 2008-07-06 12:53:02 -0700, [email protected] wrote:
The title is probably not 'stash apply' but 'stash branch'.
Fixed, thanks.
Quoted 1 line
Don't you want to also validate that: [...]
Done.
-- ams
t/t3903-stash.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 61 insertions(+), 0 deletions(-)
t/t3903-stash.sh +61 -0
@@ -117,4 +117,65 @@ test_expect_success 'stash pop' ' test 0 = $(git stash list | wc -l) ' +cat > expect << EOF +diff --git a/file2 b/file2 +new file mode 100644 +index 0000000..1fe912c +--- /dev/null ++++ b/file2 +@@ -0,0 +1 @@ ++bar2 +EOF + +cat > expect1 << EOF +diff --git a/file b/file +index 257cc56..5716ca5 100644 +--- a/file ++++ b/file +@@ -1 +1 @@ +-foo ++bar +EOF + +cat > expect2 << EOF +diff --git a/file b/file +index 7601807..5716ca5 100644 +--- a/file ++++ b/file +@@ -1 +1 @@ +-baz ++bar +diff --git a/file2 b/file2 +new file mode 100644 +index 0000000..1fe912c +--- /dev/null ++++ b/file2 +@@ -0,0 +1 @@ ++bar2 +EOF + +test_expect_success 'stash branch' ' + echo foo > file && + git commit file -m first + echo bar > file && + echo bar2 > file2 && + git add file2 && + git stash && + echo baz > file && + git commit file -m second && + git stash branch stashbranch && + test refs/heads/stashbranch = $(git symbolic-ref HEAD) && + test $(git rev-parse HEAD) = $(git rev-parse master^) && + git diff --cached > output && + test_cmp output expect && + git diff > output && + test_cmp output expect1 && + git add file && + git commit -m alternate\ second && + git diff master..stashbranch && + git diff master..stashbranch > output && + test_cmp output expect2 && + test 0 = $(git stash list | wc -l) +' + test_done
Signature · 1 line
1.5.6
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order. The topics meant to be applied to the maintenance series have "maint-" in their names.
It already is beginning to become clear what 1.6.0 will look like. What's already in 'next' all are well intentioned (I do not guarantee they are already bug-free --- that is what cooking them in 'next' is for) and are good set of feature enhancements. Bigger changes will be:
* MinGW will be in.
* /usr/bin/git-cat-file is no more. The bulk of the git commands will move to /usr/libexec/git-core/ or somesuch.
* git-merge will be rewritten in C.
* default pack and idx versions will be updated as scheduled for some time ago.
----------------------------------------------------------------
[New Topics]
* jk/maint-fetch-ref-hier (Thu Jun 26 23:59:50 2008 -0400) 1 commit
+ fetch: report local storage errors in status table
When the remote used to have "foo" branch but now has "foo/bar", fetch refuses to delete the existing remote tracking branch "foo" to create a new remote tracking branch "foo/bar", but the error message was confusing.
* jc/maint-reset (Wed Jun 25 18:16:36 2008 -0700) 1 commit
+ Allow "git-reset path" when unambiguous
We used to require "git-reset -- path" even when there is no ambiguity (i.e. path cannot be mistaken as a valid tree-ish and it is a filename in the work tree).
* js/maint-clone-insteadof (Fri Jun 27 13:56:05 2008 +0100) 1 commit . clone: respect url.insteadOf setting in global configs
"git clone" does not honor "url.InsteadOf" in $HOME/.gitconfig; Daniel seems to have ideas for a better fix than this, but this is worth fixing on 'maint'.
* tr/send-email-ssl (Thu Jun 26 23:03:21 2008 +0200) 2 commits
+ git-send-email: prevent undefined variable warnings if no encryption is set
+ git-send-email: add support for TLS via Net::SMTP::SSL
* kb/send-email-fifo (Wed Jun 25 15:44:40 2008 -0700) 1 commit
+ git-send-email: Accept fifos as well as files
Two minor send-email feature enhancements for 1.6.0.
* jc/checkdiff (Thu Jun 26 16:08:05 2008 -0700) 6 commits
+ Update sample pre-commit hook to use "diff --check"
+ diff --check: detect leftover conflict markers
+ Teach "diff --check" about new blank lines at end
+ checkdiff: pass diff_options to the callback
+ check_and_emit_line(): rename and refactor
+ diff --check: explain why we do not care whether old side is binary
Allows us to replace the sample pre-commit hook that was not aware of the line termination convention per path nor newer whitespace breakage rules.
* np/pack-default (Wed Jun 25 00:25:53 2008 -0400) 2 commits
+ pack.indexversion config option now defaults to 2
+ repack.usedeltabaseoffset config option now defaults to "true"
Updates the default value for pack.indexversion to 2 and use delta-base offset encoding of the packfiles by default.
* js/apply-recount (Fri Jun 27 18:43:09 2008 +0100) 1 commit
+ Allow git-apply to recount the lines in a hunk (AKA recountdiff)
A good ingredient for implementing "apply --edit".
* dz/apply-again (Fri Jun 27 14:39:12 2008 -0400) 1 commit
+ git-apply: handle a patch that touches the same path more than once better
Allows us to feed a patch that touches the same path more than once.
* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits
- Migrate git-blame to parse-option partially.
- parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.
- parse-opt: fake short strings for callers to believe in.
- parse-opt: do not pring errors on unknown options, return -2 intead.
- parse-opt: create parse_options_step.
- parse-opt: Export a non NORETURN usage dumper.
- parse-opt: have parse_options_{start,end}.
----------------------------------------------------------------
[Will merge to master soon]
* nd/dashless (Tue Jun 24 19:58:11 2008 -0700) 2 commits
+ Keep some git-* programs in $(bindir)
+ Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. We'll leave server-side programs in $(bindir) so that ssh clients can ask for "git-program" and find them on the $PATH.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
+ merge: remove deprecated summary and diffstat options and config variables
* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 4 commits
+ Revert "Make clients ask for "git program" over ssh and local transport"
+ Make clients ask for "git program" over ssh and local transport
+ Prepare execv_git_cmd() for removal of builtins from the filesystem
+ git-shell: accept "git foo" form
----------------------------------------------------------------
[Actively Cooking]
* jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits
- Make default expiration period of reflog used for stash infinite
- Per-ref reflog expiry configuration
As 1.6.0 will be a good time to make backward incompatible changes, the tip commit makes the default expiry period of stash 'never', unless you configure them to expire explicitly using gc.refs/stash.* variables. Needs consensus, but I am guessing that enough people would want stash that does not expire.
* jc/merge-theirs (Sat Jun 28 17:28:22 2008 -0700) 3 commits
- Teach git-merge to pass -X<option> to the backend strategy module
- git-merge-recursive-{ours,theirs}
- git-merge-file --ours, --theirs
Punting a merge by discarding your own work in conflicting parts but still salvaging the parts that are cleanly automerged. It is likely that this will result in nonsense mishmash, but somehow often people want this, so here they are. The interface to the backends is updated so that you can say "git merge -Xours -s recursive other" now.
* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits
+ compat/pread.c: Add a forward declaration to fix a warning
+ Windows: Fix ntohl() related warnings about printf formatting
+ Windows: TMP and TEMP environment variables specify a temporary directory.
+ Windows: Make 'git help -a' work.
+ Windows: Work around an oddity when a pipe with no reader is written to.
+ Windows: Make the pager work.
+ When installing, be prepared that template_dir may be relative.
+ Windows: Use a relative default template_dir and ETC_GITCONFIG
+ Windows: Compute the fallback for exec_path from the program invocation.
+ Turn builtin_exec_path into a function.
+ Windows: Use a customized struct stat that also has the st_blocks member.
+ Windows: Add a custom implementation for utime().
+ Windows: Add a new lstat and fstat implementation based on Win32 API.
+ Windows: Implement a custom spawnve().
+ Windows: Implement wrappers for gethostbyname(), socket(), and connect().
+ Windows: Work around incompatible sort and find.
+ Windows: Implement asynchronous functions as threads.
+ Windows: Disambiguate DOS style paths from SSH URLs.
+ Windows: A rudimentary poll() emulation.
+ Windows: Implement start_command().
+ Windows: A pipe() replacement whose ends are not inherited to children.
+ Windows: Wrap execve so that shell scripts can be invoked.
+ Windows: Implement setitimer() and sigaction().
+ Windows: Fix PRIuMAX definition.
+ Windows: Implement gettimeofday().
+ Make my_mktime() public and rename it to tm_to_time_t()
+ Windows: Work around misbehaved rename().
+ Windows: always chmod(, 0666) before unlink().
+ Windows: A minimal implemention of getpwuid().
+ Windows: Implement a wrapper of the open() function.
+ Windows: Strip ".exe" from the program name.
+ Windows: Handle absolute paths in safe_create_leading_directories().
+ Windows: Treat Windows style path names.
+ setup.c: Prepare for Windows directory separators.
+ Windows: Use the Windows style PATH separator ';'.
+ Add target architecture MinGW.
+ Compile some programs only conditionally.
+ Add compat/regex.[ch] and compat/fnmatch.[ch].
No explanation necessary ;-)
* mv/merge-in-c (Sat Jun 28 04:38:19 2008 +0200) 13 commits
- Build in merge
- Add new test case to ensure git-merge prepends the custom merge message
- Add new test case to ensure git-merge reduces octopus parents when possible
- Introduce reduce_heads()
- Introduce get_merge_bases_many()
- Add new test to ensure git-merge handles more than 25 refs.
- Introduce get_octopus_merge_bases() in commit.c
- git-fmt-merge-msg: make it usable from other builtins
- Move read_cache_unmerged() to read-cache.c
- Add new test to ensure git-merge handles pull.twohead and pull.octopus
- Move parse-options's skip_prefix() to git-compat-util.h
- Move commit_list_count() to commit.c
- Move split_cmdline() to alias.c
The last one is a huge patch and it will take some time to review and get details sorted out.
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
+ Eliminate an unnecessary chdir("..")
+ Add support for GIT_CEILING_DIRECTORIES
+ Fold test-absolute-path into test-path-utils
+ Implement normalize_absolute_path
* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits
+ rerere.autoupdate
+ t4200: fix rerere test
+ rerere: remove dubious "tail_optimization"
+ git-rerere: detect unparsable conflicts
+ rerere: rerere_created_at() and has_resolution() abstraction
A new configuration will allow paths that have been resolved cleanly by rerere to be updated in the index automatically.
----------------------------------------------------------------
[Graduated to "master"]
* sb/rebase (Sun Jun 22 01:55:50 2008 +0200) 2 commits
+ t3404: stricter tests for git-rebase--interactive
+ api-builtin.txt: update and fix typo
* sb/maint-rebase (Sun Jun 22 16:07:02 2008 +0200) 1 commit
+ git-rebase.sh: Add check if rebase is in progress
* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit
+ gitweb: standarize HTTP status codes
* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits
+ Add config option to enable 'fsync()' of object files
+ Split up default "i18n" and "branch" config parsing into helper routines
+ Split up default "user" config parsing into helper routine
+ Split up default "core" config parsing into helper routine
* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits
+ Hook up the result aggregation in the test makefile.
+ A simple script to parse the results from the testcases
+ Modify test-lib.sh to output stats to t/test-results/*
* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits
+ Teach "git clone" to pack refs
+ Prepare testsuite for a "git clone" that packs refs
+ Move pack_refs() and friends into libgit
+ Incorporate fetched packs in future object traversal
This is useful when cloning from a repository with insanely large number of refs.
* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits
+ Git.pm: add test suite
+ t/test-lib.sh: add test_external and test_external_without_stderr
Beginning of regression tests for Perl part of the system.
----------------------------------------------------------------
[On Hold]
* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit
+ Remove the use of '--' in merge program invocation
Waiting for success reports from people who use various backends.
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
----------------------------------------------------------------
[Stalled/Needs more work]
* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
- blame: show "previous" information in --porcelain/--incremental format
- git-blame: refactor code to emit "porcelain format" output
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the commit ""git-blame --reverse" on the series).
The tip two commits are for peeling to see what's behind the blamed commit, which we should be able to separate out into an independent topic from the rest.
----------------------------------------------------------------
[Dropped for now]
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits . Introduce fast forward option only
. Head reduction before selecting merge strategy . Restructure git-merge.sh
. Introduce -ff=<fast forward option>
. New merge tests
. Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C.
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits . Use perl instead of tac
. Fix t3404 assumption that wc -l does not use whitespace. . rebase -i: Use : in expr command instead of match.
. rebase -i: update the implementation of 'mark' command . Add option --preserve-tags
. Teach rebase interactive the tag command
. Add option --first-parent
. Do rebase with preserve merges with advanced TODO list . Select all lines with fake-editor
. Unify the length of $SHORT* and the commits in the TODO list . Teach rebase interactive the merge command
. Move redo merge code in a function
. Teach rebase interactive the reset command
. Teach rebase interactive the mark command
. Move cleanup code into it's own function
. Don't append default merge message to -m message
. fake-editor: output TODO list if unchanged
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits . WIP: rethink replay merge
. Start using replay-tree merge in cherry-pick
. revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits . git-am --forge: add Signed-off-by: line for the author . git-am: clean-up Signed-off-by: lines
. stripspace: add --log-clean option to clean up signed-off-by:
lines
. stripspace: use parse_options()
. Add "git am -s" test
. git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit . "git push": tellme-more protocol extension
Quoted 7 lines · Junio C Hamano
* jk/maint-fetch-ref-hier (Thu Jun 26 23:59:50 2008 -0400) 1 commit
+ fetch: report local storage errors in status tableWhen the remote used to have "foo" branch but now has "foo/bar", fetch refuses to delete the existing remote tracking branch "foo" to create a new remote tracking branch "foo/bar", but the error message was confusing.
Where do we want to take this? The conversation went something like:
me: here's a patch where we hint about "remote prune"
you: why not just fix the refs, it's no worse than a rewind
me: we kill reflogs, so it is different than a rewind
you: oh, right
So I'm not sure if that was "Oh, right, it's not a good idea to remove the conflicting ref" or "Oh, right, but it's probably still fine."
-Peff
Quoted 12 lines · Jeff King
Quoted 7 lines · Junio C Hamano
* jk/maint-fetch-ref-hier (Thu Jun 26 23:59:50 2008 -0400) 1 commit
+ fetch: report local storage errors in status tableWhen the remote used to have "foo" branch but now has "foo/bar", fetch refuses to delete the existing remote tracking branch "foo" to create a new remote tracking branch "foo/bar", but the error message was confusing.
Where do we want to take this? The conversation went something like:
Quoted 7 lines
me: here's a patch where we hint about "remote prune"
you: why not just fix the refs, it's no worse than a rewind
me: we kill reflogs, so it is different than a rewind
you: oh, rightSo I'm not sure if that was "Oh, right, it's not a good idea to remove the conflicting ref" or "Oh, right, but it's probably still fine."
It is "Oh right, it is Ok. Let's cook it in 'next', have it in 'master' and then backmerge to 'maint'".
Quoted 7 lines · Junio C Hamano
Quoted 7 lines
Where do we want to take this? The conversation went something like:
me: here's a patch where we hint about "remote prune"
you: why not just fix the refs, it's no worse than a rewind
me: we kill reflogs, so it is different than a rewind
you: oh, right
Quoted 5 lines
Quoted 2 lines
So I'm not sure if that was "Oh, right, it's not a good idea to remove the conflicting ref" or "Oh, right, but it's probably still fine."
It is "Oh right, it is Ok. Let's cook it in 'next', have it in 'master' and then backmerge to 'maint'".
Sorry if I'm being slow, but what is "it" here? The "warning" patch I sent, or a to-be-posted patch that deletes the conflicting ref?
-Peff
Quoted 9 lines · Jeff King
Quoted 7 lines · Junio C Hamano
Quoted 7 lines
Where do we want to take this? The conversation went something like:
me: here's a patch where we hint about "remote prune"
you: why not just fix the refs, it's no worse than a rewind
me: we kill reflogs, so it is different than a rewind
you: oh, right
Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
So I'm not sure if that was "Oh, right, it's not a good idea to remove the conflicting ref" or "Oh, right, but it's probably still fine."
It is "Oh right, it is Ok. Let's cook it in 'next', have it in 'master' and then backmerge to 'maint'".
Sorry if I'm being slow, but what is "it" here? The "warning" patch I sent, or a to-be-posted patch that deletes the conflicting ref?
Sorry, my fingers outpaced my brain and gave you gibberish.
Oh right, we should hint about "remote prune" and stop there, at least for now, as it is not nice to just delete the refs and lose their reflogs without user's consent.
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order. The topics meant to be applied to the maintenance series have "maint-" in their names.
It already is beginning to become clear what 1.6.0 will look like. What's already in 'next' all are well intentioned (I do not guarantee they are already bug-free --- that is what cooking them in 'next' is for) and are good set of feature enhancements. Bigger changes will be:
* MinGW will be in.
* With the default Makefile settings, most of the programs will be installed outside your $PATH, except for "git", "gitk", "git-gui" and some server side programs that need to be accessible for technical reasons. Invoking a git subcommand as "git-xyzzy" from the command line has been deprecated since early 2006 (and officially announced in 1.5.4 release notes); use of them from your scripts after adding output from "git --exec-path" to the $PATH will still be supported in 1.6.0, but users are again strongly encouraged to adjust their scripts to use "git xyzzy" form, as we will stop installing "git-xyzzy" hardlinks for built-in commands in later releases.
* git-merge will be rewritten in C.
* default pack and idx versions will be updated as scheduled for some time ago.
----------------------------------------------------------------
[Will merge to master soon]
* nd/dashless (Tue Jun 24 19:58:11 2008 -0700) 2 commits
+ Keep some git-* programs in $(bindir)
+ Move all dashed-form commands to libexecdir
Scheduled for 1.6.0. We'll leave server-side programs in $(bindir) so that ssh clients can ask for "git-program" and find them on the $PATH. Next major release after 1.6.0 would most likely remove the hardlinks to built-in commands, but not yet.
* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
+ merge: remove deprecated summary and diffstat options and config variables
* jc/dashless (Thu Jun 26 16:43:34 2008 -0700) 4 commits
+ Revert "Make clients ask for "git program" over ssh and local transport"
+ Make clients ask for "git program" over ssh and local transport
+ Prepare execv_git_cmd() for removal of builtins from the filesystem
+ git-shell: accept "git foo" form
----------------------------------------------------------------
[Actively Cooking]
* jk/maint-fetch-ref-hier (Fri Jun 27 00:01:41 2008 -0400) 2 commits
+ fetch: give a hint to the user when local refs fail to update
+ fetch: report local storage errors in status table
When the remote used to have "foo" branch but now has "foo/bar", fetch refuses to delete the existing remote tracking branch "foo" to create a new remote tracking branch "foo/bar", but the error message was confusing.
* jc/maint-reset (Wed Jun 25 18:16:36 2008 -0700) 1 commit
+ Allow "git-reset path" when unambiguous
We used to require "git-reset -- path" even when there is no ambiguity (i.e. path cannot be mistaken as a valid tree-ish and it is a filename in the work tree).
* js/maint-clone-insteadof (Fri Jun 27 13:55:23 2008 +0100) 2 commits
+ clone: respect the settings in $HOME/.gitconfig and /etc/gitconfig
+ clone: respect url.insteadOf setting in global configs
"git clone" did not honor "url.InsteadOf" in $HOME/.gitconfig. I think Daniel's "Let's get rid of internal use of GIT_CONFIG" makes sense (even though it feels very scary), and it would make the solution much simpler, but it came late and it is already past my bedtime, so...
* tr/send-email-ssl (Thu Jun 26 23:03:21 2008 +0200) 2 commits
+ git-send-email: prevent undefined variable warnings if no encryption is set
+ git-send-email: add support for TLS via Net::SMTP::SSL
* kb/send-email-fifo (Wed Jun 25 15:44:40 2008 -0700) 1 commit
+ git-send-email: Accept fifos as well as files
Two minor send-email feature enhancements for 1.6.0.
* jc/checkdiff (Sun Jun 29 16:49:06 2008 -0400) 7 commits
+ Fix t4017-diff-retval for white-space from wc
+ Update sample pre-commit hook to use "diff --check"
+ diff --check: detect leftover conflict markers
+ Teach "diff --check" about new blank lines at end
+ checkdiff: pass diff_options to the callback
+ check_and_emit_line(): rename and refactor
+ diff --check: explain why we do not care whether old side is binary
Allows us to replace the sample pre-commit hook that was not aware of the line termination convention per path nor newer whitespace breakage rules.
* np/pack-default (Wed Jun 25 00:25:53 2008 -0400) 2 commits
+ pack.indexversion config option now defaults to 2
+ repack.usedeltabaseoffset config option now defaults to "true"
Updates the default value for pack.indexversion to 2 and use delta-base offset encoding of the packfiles by default.
* js/apply-recount (Fri Jun 27 18:43:09 2008 +0100) 1 commit
+ Allow git-apply to recount the lines in a hunk (AKA recountdiff)
A good ingredient for implementing "apply --edit".
* dz/apply-again (Fri Jun 27 14:39:12 2008 -0400) 1 commit
+ git-apply: handle a patch that touches the same path more than once better
Allows us to feed a patch that touches the same path more than once.
* jc/reflog-expire (Sat Jun 28 22:24:49 2008 -0700) 2 commits
- Make default expiration period of reflog used for stash infinite
- Per-ref reflog expiry configuration
As 1.6.0 will be a good time to make backward incompatible changes, the tip commit makes the default expiry period of stash 'never', unless you configure them to expire explicitly using gc.refs/stash.* variables. Needs consensus, but I am guessing that enough people would want stash that does not expire.
* jc/merge-theirs (Sat Jun 28 17:28:22 2008 -0700) 3 commits
+ Teach git-merge to pass -X<option> to the backend strategy module
+ git-merge-recursive-{ours,theirs}
+ git-merge-file --ours, --theirs
Punting a merge by discarding your own work in conflicting parts but still salvaging the parts that are cleanly automerged. It is likely that this will result in nonsense mishmash, but somehow often people want this, so here they are. The interface to the backends is updated so that you can say "git merge -Xours -s recursive other" now.
* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits
+ compat/pread.c: Add a forward declaration to fix a warning
+ Windows: Fix ntohl() related warnings about printf formatting
+ Windows: TMP and TEMP environment variables specify a temporary directory.
+ Windows: Make 'git help -a' work.
+ Windows: Work around an oddity when a pipe with no reader is written to.
+ Windows: Make the pager work.
+ When installing, be prepared that template_dir may be relative.
+ Windows: Use a relative default template_dir and ETC_GITCONFIG
+ Windows: Compute the fallback for exec_path from the program invocation.
+ Turn builtin_exec_path into a function.
+ Windows: Use a customized struct stat that also has the st_blocks member.
+ Windows: Add a custom implementation for utime().
+ Windows: Add a new lstat and fstat implementation based on Win32 API.
+ Windows: Implement a custom spawnve().
+ Windows: Implement wrappers for gethostbyname(), socket(), and connect().
+ Windows: Work around incompatible sort and find.
+ Windows: Implement asynchronous functions as threads.
+ Windows: Disambiguate DOS style paths from SSH URLs.
+ Windows: A rudimentary poll() emulation.
+ Windows: Implement start_command().
+ Windows: A pipe() replacement whose ends are not inherited to children.
+ Windows: Wrap execve so that shell scripts can be invoked.
+ Windows: Implement setitimer() and sigaction().
+ Windows: Fix PRIuMAX definition.
+ Windows: Implement gettimeofday().
+ Make my_mktime() public and rename it to tm_to_time_t()
+ Windows: Work around misbehaved rename().
+ Windows: always chmod(, 0666) before unlink().
+ Windows: A minimal implemention of getpwuid().
+ Windows: Implement a wrapper of the open() function.
+ Windows: Strip ".exe" from the program name.
+ Windows: Handle absolute paths in safe_create_leading_directories().
+ Windows: Treat Windows style path names.
+ setup.c: Prepare for Windows directory separators.
+ Windows: Use the Windows style PATH separator ';'.
+ Add target architecture MinGW.
+ Compile some programs only conditionally.
+ Add compat/regex.[ch] and compat/fnmatch.[ch].
No explanation necessary ;-)
* mv/merge-in-c (Mon Jun 30 03:39:58 2008 +0200) 13 commits
- Build in merge
- Add new test case to ensure git-merge prepends the custom merge message
- Add new test case to ensure git-merge reduces octopus parents when possible
- Introduce reduce_heads()
- Introduce get_merge_bases_many()
- Add new test to ensure git-merge handles more than 25 refs.
- Introduce get_octopus_merge_bases() in commit.c
- git-fmt-merge-msg: make it usable from other builtins
- Move read_cache_unmerged() to read-cache.c
- Add new test to ensure git-merge handles pull.twohead and pull.octopus
- Move parse-options's skip_prefix() to git-compat-util.h
- Move commit_list_count() to commit.c
- Move split_cmdline() to alias.c
The last one is still in flux.
* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
+ Eliminate an unnecessary chdir("..")
+ Add support for GIT_CEILING_DIRECTORIES
+ Fold test-absolute-path into test-path-utils
+ Implement normalize_absolute_path
* jc/rerere (Sun Jun 22 02:04:31 2008 -0700) 5 commits
+ rerere.autoupdate
+ t4200: fix rerere test
+ rerere: remove dubious "tail_optimization"
+ git-rerere: detect unparsable conflicts
+ rerere: rerere_created_at() and has_resolution() abstraction
A new configuration will allow paths that have been resolved cleanly by rerere to be updated in the index automatically.
* ph/parseopt-step-blame (Tue Jun 24 11:12:12 2008 +0200) 7 commits
- Migrate git-blame to parse-option partially.
- parse-opt: add PARSE_OPT_KEEP_ARGV0 parser option.
- parse-opt: fake short strings for callers to believe in.
- parse-opt: do not pring errors on unknown options, return -2 intead.
- parse-opt: create parse_options_step.
- parse-opt: Export a non NORETURN usage dumper.
- parse-opt: have parse_options_{start,end}.
----------------------------------------------------------------
[Graduated to "master"]
----------------------------------------------------------------
[On Hold]
* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit
+ Remove the use of '--' in merge program invocation
Waiting for success reports from people who use various backends.
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
- diff: enable "too large a rename" warning when -M/-C is explicitly asked for
This would be the right thing to do for command line use, but gitk will be hit due to tcl/tk's limitation, so I am holding this back for now.
----------------------------------------------------------------
[Stalled/Needs more work]
* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
- blame: show "previous" information in --porcelain/--incremental format
- git-blame: refactor code to emit "porcelain format" output
+ git-blame --reverse
+ builtin-blame.c: allow more than 16 parents
+ builtin-blame.c: move prepare_final() into a separate function.
+ rev-list --children
+ revision traversal: --children option
The blame that finds where each line in the original lines moved to. This may help a GSoC project that wants to gather statistical overview of the history. The final presentation may need tweaking (see the log message of the commit ""git-blame --reverse" on the series).
The tip two commits are for peeling to see what's behind the blamed commit, which we should be able to separate out into an independent topic from the rest.
----------------------------------------------------------------
[Dropped for now]
* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits . Introduce fast forward option only
. Head reduction before selecting merge strategy . Restructure git-merge.sh
. Introduce -ff=<fast forward option>
. New merge tests
. Documentation for joining more than two histories
This will interfere with Miklos's rewrite of merge to C.
* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits . Use perl instead of tac
. Fix t3404 assumption that wc -l does not use whitespace. . rebase -i: Use : in expr command instead of match.
. rebase -i: update the implementation of 'mark' command . Add option --preserve-tags
. Teach rebase interactive the tag command
. Add option --first-parent
. Do rebase with preserve merges with advanced TODO list . Select all lines with fake-editor
. Unify the length of $SHORT* and the commits in the TODO list . Teach rebase interactive the merge command
. Move redo merge code in a function
. Teach rebase interactive the reset command
. Teach rebase interactive the mark command
. Move cleanup code into it's own function
. Don't append default merge message to -m message
. fake-editor: output TODO list if unchanged
* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits . WIP: rethink replay merge
. Start using replay-tree merge in cherry-pick
. revert/cherry-pick: start refactoring call to merge_recursive
This is meant to improve cherry-pick's behaviour when renames are involved, by not using merge-recursive (whose d/f conflict resolution is quite broken), but unfortunately has stalled for some time now.
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits . git-am --forge: add Signed-off-by: line for the author . git-am: clean-up Signed-off-by: lines
. stripspace: add --log-clean option to clean up signed-off-by:
lines
. stripspace: use parse_options()
. Add "git am -s" test
. git-am: refactor code to add signed-off-by line for the committer
Just my toy at this moment.
* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit . "git push": tellme-more protocol extension
Quoted 26 lines · Junio C Hamano
Here are the topics that have been cooking. Commits prefixed with '-' are only in 'pu' while commits prefixed with '+' are in 'next'.
The topics list the commits in reverse chronological order. The topics meant to be applied to the maintenance series have "maint-" in their names.
It already is beginning to become clear what 1.6.0 will look like. What's already in 'next' all are well intentioned (I do not guarantee they are already bug-free --- that is what cooking them in 'next' is for) and are good set of feature enhancements. Bigger changes will be:
* MinGW will be in.
* With the default
Makefilesettings, most of the programs will be installed outside your $PATH, except for "git", "gitk", "git-gui" and some server side programs that need to be accessible for technical reasons. Invoking a git subcommand as "git-xyzzy" from the command line has been deprecated since early 2006 (and officially announced in 1.5.4 release notes); use of them from your scripts after adding output from "git --exec-path" to the $PATH will still be supported in 1.6.0, but users are again strongly encouraged to adjust their scripts to use "git xyzzy" form, as we will stop installing "git-xyzzy" hardlinks for built-in commands in later releases.
Quoted 4 lines
* git-merge will be rewritten in C.
* default pack and idx versions will be updated as scheduled for some time ago.
A small detail I've suggested scheduling for 1.6 before is removing (or rather, stop creating) the empty .git/branches directory. How does that sound?
cheers,
Kristian
Quoted 4 lines · Kristian Høgsberg
A small detail I've suggested scheduling for 1.6 before is removing (or rather, stop creating) the empty .git/branches directory. How does that sound?
Perhaps also stop creating .git/description (remove 'templates/this--description' file), now that it is mentioned in gitweb/README and/or gitweb/INSTALL?
(Do you want a patch?)
Signature · 3 lines
Jakub Narebski Poland ShadeHawk on #git
Quoted 7 lines · Jakub Narebski
Quoted 4 lines · Kristian Høgsberg
A small detail I've suggested scheduling for 1.6 before is removing (or rather, stop creating) the empty .git/branches directory. How does that sound?
Quoted 5 lines
Perhaps also stop creating .git/description (remove 'templates/this--description' file), now that it is mentioned in gitweb/README and/or gitweb/INSTALL?
(Do you want a patch?)
Not yet. I would first like to see a justification that makes sense.
I do not see much connection between your mentioning the file in README and the file's removal. You currently say "By default it is set to ..." and you would have to change it to "By default it does not exist so you have to create one". Does it have much difference? Either way the user needs to open the file with the editor and edit it, and the current file at least says "Please edit me". I am not sure if removal is an improvement.
The sample templates/hooks--update.sample seems to check if the contents of the description file makes sense, without even checking if it exists. That also needs to be updated.
Actually, the sample hook should be updated independent of this issue. I'd suggest to simply remove the check from the sample hook. Setting description and installing the hook is part of the initial public repository deployment task, and once the description is set, the hook does not have to check it over and over again. Allowing arrival of new commits while the description is not set won't hurt anything (somebody would notice and tell "please set a better description" to the repository owner, and doing so at that point will fix things without anybody having to redo any old pushes), and forbidding push from the hook for lack of description does not make any sense.
Quoted 10 lines · Kristian Høgsberg
On Mon, 2008-06-30 at 02:08 -0700, Junio C Hamano wrote:
...Quoted 4 lines
It already is beginning to become clear what 1.6.0 will look like. What's already in 'next' all are well intentioned (I do not guarantee they are already bug-free --- that is what cooking them in 'next' is for) and are good set of feature enhancements. Bigger changes will be:
...
A small detail I've suggested scheduling for 1.6 before is removing (or rather, stop creating) the empty .git/branches directory. How does that sound?
What's the benefit of the removal that outweighs the downside? I can imagine two contradicting voices from new end users.
(1) With current git, I ran "git init" and I have an empty .git/branches/, but my remote information created with "git clone" and "git remote add" all go to .git/config these days. Why do I have to have this empty directory that I do not use?
(2) It is documented that "git fetch" can use files in .git/branches/ as the source specification, but when I ran "git init", it does not create the directory with Kristian's git. I need to do an extra "mkdir .git/branches/" myself. Why?
You are obviously coming from the former camp, but do you have a good answer to people from the other camp?
I do not recall if Cogito required to have .git/branches created by us or it can create it on demand if we don't. If the latter, that would be great, otherwise remaining users would be in the latter camp as well, and we may have to make sure Cogito is really dead already (or wait for it to die), or Cogito gets updated for its remaining users to tolerate the initial lack of the directory (and wait for that version percolates down to the users).
Some people rely on (or at least "like") the convenience of being able to create a single-liner file in .git/branches/ to easily add, and remove such a file to easily remove where they integrate from. This is especially so when they have dozens of source repositories to fetch from. I do not think we want to remove support for .git/branches as a way to specify fetch sources (this is why I am CC'ing Andrew who I know uses branches, and Stephen who is also a heavy integrator even though I do not know if he is in branches camp or uses more modern style), but they now have to do an extra "mkdir .git/branches" after "git init" to continue their workflow if we adopt the change you are proposing here. It is not a big deal, but it still is a backward incompatible change.
Quoted 13 lines · Junio C Hamano
Quoted 10 lines · Kristian Høgsberg
On Mon, 2008-06-30 at 02:08 -0700, Junio C Hamano wrote:
...Quoted 4 lines
It already is beginning to become clear what 1.6.0 will look like. What's already in 'next' all are well intentioned (I do not guarantee they are already bug-free --- that is what cooking them in 'next' is for) and are good set of feature enhancements. Bigger changes will be:
...
A small detail I've suggested scheduling for 1.6 before is removing (or rather, stop creating) the empty .git/branches directory. How does that sound?
Quoted 7 lines
What's the benefit of the removal that outweighs the downside? I can imagine two contradicting voices from new end users.
(1) With current git, I ran "git init" and I have an empty .git/branches/, but my remote information created with "git clone" and "git remote add" all go to .git/config these days. Why do I have to have this empty directory that I do not use?
Yeah, that's one reason, my main problem with .git/branches is that for a user that wants to learn about git and peeks into .git it's pretty confusing. "I wonder where and how git stores the information about branches... oh look, .git/branches, that must it... hmm, wait no..." Git is still getting a lot of bad-mouthing for being hard to learn and inconsitent. I think it makes sense to push git towards consistency and simplicity (where is doesn't affect the flexibility) and this seemed like a tiny step towards that. As Dscho mentioned we have two other ways of accomplishing what .git/branches did, so maybe it makes sense to retire this one?
Quoted 4 lines
(2) It is documented that "git fetch" can use files in .git/branches/ as the source specification, but when I ran "git init", it does not create the directory with Kristian's git. I need to do an extra "mkdir .git/branches/" myself. Why?
We could just change the documentation to ask the user to create the .git/branches directory if they want to use that feature.
Quoted 11 lines
You are obviously coming from the former camp, but do you have a good answer to people from the other camp?
I do not recall if Cogito required to have .git/branches created by us or it can create it on demand if we don't. If the latter, that would be great, otherwise remaining users would be in the latter camp as well, and we may have to make sure Cogito is really dead already (or wait for it to die), or Cogito gets updated for its remaining users to tolerate the initial lack of the directory (and wait for that version percolates down to the users).
Quoted 11 lines
Some people rely on (or at least "like") the convenience of being able to create a single-liner file in .git/branches/ to easily add, and remove such a file to easily remove where they integrate from. This is especially so when they have dozens of source repositories to fetch from. I do not think we want to remove support for .git/branches as a way to specify fetch sources (this is why I am CC'ing Andrew who I know uses branches, and Stephen who is also a heavy integrator even though I do not know if he is in branches camp or uses more modern style), but they now have to do an extra "mkdir .git/branches" after "git init" to continue their workflow if we adopt the change you are proposing here. It is not a big deal, but it still is a backward incompatible change.
Yeah... I have to confess, that when I suggested removing it, I was under the impression that git didn't use .git/branches, but only created it to be nice to cogito. I just read the code in remote.c that deals with .git/branches and understand that it's still used by git. From the feedback from Stephen, Andrew and Pasky, it looks like we can drop the .git/branches from the template for 1.6 and maybe in the future, we could drop the .git/branches support entirely. Dunno.
cheers,
Kristian
Quoted 11 lines · On Mon, 30 Jun 2008 15:15:52 -0700 Junio C Hamano <[email protected]> wrote:
Some people rely on (or at least "like") the convenience of being able to create a single-liner file in .git/branches/ to easily add, and remove such a file to easily remove where they integrate from. This is especially so when they have dozens of source repositories to fetch from. I do not think we want to remove support for .git/branches as a way to specify fetch sources (this is why I am CC'ing Andrew who I know uses branches, and Stephen who is also a heavy integrator even though I do not know if he is in branches camp or uses more modern style), but they now have to do an extra "mkdir .git/branches" after "git init" to continue their workflow if we adopt the change you are proposing here. It is not a big deal, but it still is a backward incompatible change.
I do find the more compact format of .git/branches/git-foo to be convenient. For example, my scripts go looking in there for the URL and add that to the patch changelog so that people can reconstruct -mm's git-foo.patch from the relevant git tree.
That being said,
- It wouldn't bother me to have to type mkdir .git/branches' after git init'!
- It's bad to have the same info in two places, and to have to support two different ways of doing the same thing for ever. So I could understand a wish to remove .git/branches/ support completely. I'll cope :)
For me the biggest part of migrating would be working out what on earth the format of the new files is. Maybe it's documented somewhere undiscoverable, dunno.
Hi,
Quoted 2 lines · Andrew Morton
- It's bad to have the same info in two places, and to have to support two different ways of doing the same thing for ever.
It is actually worse: we have three places.
Quoted 3 lines
For me the biggest part of migrating would be working out what on earth the format of the new files is. Maybe it's documented somewhere undiscoverable, dunno.
The easiest way is to
git config remote.$NICKNAME.url $URL
where you said
echo $URL > .git/branches/$NICKNAME
Actually, you might even like this command better:
git remote add $NICKNAME $URL
Many ways to go to Rome,
Dscho
Quoted 7 lines · Junio C Hamano
I do not recall if Cogito required to have .git/branches created by us or it can create it on demand if we don't. If the latter, that would be great, otherwise remaining users would be in the latter camp as well, and we may have to make sure Cogito is really dead already (or wait for it to die), or Cogito gets updated for its remaining users to tolerate the initial lack of the directory (and wait for that version percolates down to the users).
Cogito is getting somewhat broken by removing of the git- plumbing from $PATH anyway (you have to hack around it; and I'm not saying it's bad thing).
But it is actually quite resilient against this kind of stuff (as it was constructed to be able to run on very rudimental repositories dating early to the dawn of time). All versions supporting .git/branches [*] will autocreate the .git/branches directory if missing.
[*] .git/branches was actually called .git/remotes even earlier; yay, how rich our history is. ;-)
Quoted 11 lines
Some people rely on (or at least "like") the convenience of being able to create a single-liner file in .git/branches/ to easily add, and remove such a file to easily remove where they integrate from. This is especially so when they have dozens of source repositories to fetch from. I do not think we want to remove support for .git/branches as a way to specify fetch sources (this is why I am CC'ing Andrew who I know uses branches, and Stephen who is also a heavy integrator even though I do not know if he is in branches camp or uses more modern style), but they now have to do an extra "mkdir .git/branches" after "git init" to continue their workflow if we adopt the change you are proposing here. It is not a big deal, but it still is a backward incompatible change.
Now, I think it would be nice to keep backward compatibility here. I'm still _regularly_ running into people who still use Cogito (and it's not because they know me :-)) and are only now doing the switch, or only planning to yet.
(On the other hand, using Git on repositories created by old Git versions or Cogito can be quite a confusing experience for non-expert users - things related to remote repositories behave differently to what the documentation describes, obviously. Maybe it _would_ be reasonable option to do something radical when hitting old repository, like "(Re-)clone me for non-confusing user experience, pretty please, or git-config force_old_repo 1 if you know what are you doing.")
Signature · 2 lines
Petr "Pasky" Baudis The last good thing written in C++ was the Pachelbel Canon. -- J. Olson
Quoted 3 lines · On Mon, 30 Jun 2008 15:15:52 -0700 Junio C Hamano <[email protected]> wrote:
branches, and Stephen who is also a heavy integrator even though I do not know if he is in branches camp or uses more modern style), but they now
I use "git remote add" for each new repository and haven't had anything in the branches directory of any of my trees for a long time ...
Signature · 3 lines
Cheers, Stephen Rothwell [email protected] http://www.canb.auug.org.au/~sfr/
How to reduce remaining differences to 4msysgit? (was What's cooking in git.git (topics))
In reply to Junio C HamanoQuoted 1 line · Junio C Hamano
* MinGW will be in.
If this is done, we should be able to create the msysgit release directly from Junio's master. Hannes changes alone, however, are not sufficient, because some commits have been parked in 4msysgit. Now that MinGW is on Junio's next and Junio's next is also on 4msysgit's next, it it easy to see how much is left to do by running:
git diff --stat junio/next..4msysgit/next
junio is a remote pointing to git://git.kernel.org/pub/scm/git/git.git.
4msysgit is a remote pointing to git://repo.or.cz/git/mingw/4msysgit.git.
I attached the output below.
How should we proceed to get rid of the differences?
Should we prepare and send patches directly to the official git list now? Should we wait until the first MinGW branch is on master? Should we prepare a whole patch series? Maybe Hannes would maintain this patch series.
I have not yet looked at the remaining differences in detail. I expect most of them to be trivial. But some might require discussion on the list, so at some point we should send the patches to the official list.
Steffen
$ git diff --stat junio/next..4msysgit/next Makefile | 23 ++- README.MinGW | 77 ++++++++ RelNotes | 1 - builtin-fetch-pack.c | 3 +- builtin-tag.c | 14 ++ builtin-verify-tag.c | 2 + cache.h | 2 + check-builtins.sh | 2 +- compat/mingw.c | 4 +- compat/winansi.c | 309 +++++++++++++++++++++++ +++++++++ connect.c | 5 +- convert.c | 4 + fast-import.c | 2 + git-add--interactive.perl | 2 +- git-compat-util.h | 7 + git-parse-remote.sh | 3 +- gitk-git/Makefile | 4 + gitk-git/gitk | 2 + help.c | 30 +++- path.c | 13 ++ read-cache.c | 5 + setup.c | 7 +- t/t0000-basic.sh | 31 +++- t/t0001-init.sh | 2 +- t/t0004-unwritable.sh | 7 + t/t1002-read-tree-m-u-2way.sh | 6 + t/t1003-read-tree-prefix.sh | 4 + t/t1004-read-tree-m-u-wf.sh | 2 + t/t1300-repo-config.sh | 1 + t/t1301-shared-repo.sh | 4 + t/t2001-checkout-cache-clash.sh | 2 + t/t2003-checkout-cache-mkdir.sh | 4 + t/t2004-checkout-cache-temp.sh | 2 + t/t2007-checkout-symlink.sh | 7 + t/t2100-update-cache-badpath.sh | 2 + t/t2201-add-update-typechange.sh | 11 +- t/t3000-ls-files-others.sh | 1 + t/t3010-ls-files-killed-modified.sh | 7 + t/t3100-ls-tree-restrict.sh | 12 ++ t/t3200-branch.sh | 2 + t/t3700-add.sh | 10 + t/t3901-i18n-patch.sh | 4 + t/t3903-stash.sh | 12 +- t/t4004-diff-rename-symlink.sh | 7 + t/t4008-diff-break-rewrite.sh | 4 + t/t4011-diff-symlink.sh | 7 + t/t4023-diff-rename-typechange.sh | 5 + t/t4109-apply-multifrag.sh | 4 + t/t4110-apply-scan.sh | 4 + t/t4114-apply-typechange.sh | 5 + t/t4115-apply-symlink.sh | 7 + t/t4116-apply-reverse.sh | 3 +- t/t4122-apply-symlink-inside.sh | 7 + t/t4150-am.sh | 6 +- t/t5000-tar-tree.sh | 7 + t/t5300-pack-object.sh | 62 +++---- t/t5502-quickfetch.sh | 3 + t/t5503-tagfollow.sh | 25 +++- t/t5505-remote.sh | 3 + t/t5511-refspec.sh | 11 +- t/t5512-ls-remote.sh | 3 + t/t5520-pull.sh | 1 + t/t5530-upload-pack-error.sh | 1 + t/t7004-tag.sh | 5 +- t/t7005-editor.sh | 1 + t/t7201-co.sh | 6 +- t/t7401-submodule-summary.sh | 30 ++-- t/t7501-commit.sh | 1 + t/t7502-status.sh | 4 + t/t7503-pre-commit-hook.sh | 6 + t/t7504-commit-msg-hook.sh | 6 + t/t9001-send-email.sh | 4 + t/t9200-git-cvsexportcommit.sh | 4 + t/t9500-gitweb-standalone-no-errors.sh | 3 + t/test-lib.sh | 17 ++ templates/Makefile | 3 + utf8.c | 7 + utf8.h | 4 - 78 files changed, 844 insertions(+), 86 deletions(-)
Re: [msysGit] How to reduce remaining differences to 4msysgit? (was What's cooking in git.git (topics))
Quoted 17 lines · Steffen Prohaska
Quoted 1 line · Junio C Hamano
* MinGW will be in.
If this is done, we should be able to create the msysgit release directly
from Junio's master. Hannes changes alone, however, are not sufficient, because some commits have been parked in 4msysgit. Now that MinGW is on Junio's next and Junio's next is also on 4msysgit's next, it it easy to see how much is left to do by running:git diff --stat junio/next..4msysgit/nextjunio is a remote pointing to
git://git.kernel.org/pub/scm/git/git.git.
4msysgit is a remote pointing togit://repo.or.cz/git/mingw/
4msysgit.git.
I attached the output below.
Quoted 8 lines
How should we proceed to get rid of the differences?
Should we prepare and send patches directly to the official git list now?
Should we wait until the first MinGW branch is on master? Should we prepare a whole patch series? Maybe Hannes would maintain this
patch series.
Until 1.6.0 is released, a number of _required_ patches will have to be included. There are two sorts of them:
* Patches that touch generic code, like replacing c == '/' by is_dir_sep(c).
* Patches that are purly Windows specific.
The former I intend to submit to the mailing list directly and as soon as possible (but if I can intervene on newly submitted patches early so that a fixup is not even necessary, then even better). The latter I intend to collect in a branch and submit as a batch. Let's see how this works out.
Then there are the extra patches in 4msysgit. From my POV, they are not _required_ because I can appearently work with git on Windows without them. I think some of them are not necessary. Can we go through them again?
And then there are the patches to the t/ directory. I do not target them for 1.6.0, but I do want to prepare another series with them.
-- Hannes
Re: How to reduce remaining differences to 4msysgit? (was What's cooking in git.git (topics))
Quoted 3 lines · Johannes Sixt
Then there are the extra patches in 4msysgit. From my POV, they are not _required_ because I can appearently work with git on Windows without them. I think some of them are not necessary. Can we go through them again?
I'll send a patch series in reply to this mail that contains the following patches:
[PATCH 01/12] Fake reencoding success under NO_ICONV instead of
returning NULL.
[PATCH 02/12] Do not complain about "no common commits" in an empty
repo
[PATCH 03/12] MinGW: Convert CR/LF to LF in tag signatures [PATCH 04/12] Avoid calling signal(SIGPIPE, ..) for MinGW builds. [PATCH 05/12] Windows(msysgit): Per default, display help as HTML in
default browser
[PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh) [PATCH 07/12] Fixed text file auto-detection: treat EOF character
032 at the end of file as printable
[PATCH 08/12] fast-import: MinGW does not have getppid(). So do not
print it.
[PATCH 09/12] We need to check for msys as well as Windows in add--
interactive.
[PATCH 10/12] Add ANSI control code emulation for the Windows console [PATCH 11/12] verify_path(): do not allow absolute paths [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next
This series would bring *.{c,h,sh,perl} on Junio's next to 4msysgit/next, except for some minor differences (whitespace, comments, a workaround in git-parse-remote.sh).
Steffen
PATCH 1/12 Fake reencoding success under NO_ICONV instead of returning NULL.
From: Johannes Sixt <[email protected]>
git-am when invoked from git-rebase seems to rely on successful conversion.
--- utf8.c | 7 +++++++ utf8.h | 4 ---- 2 files changed, 7 insertions(+), 4 deletions(-)
utf8.c +7 -0
@@ -388,4 +388,11 @@ char *reencode_string(const char *in, const char *out_encoding, const char *in_eiconv_close (conv); return out; } +#else +char *reencode_string (const char *in,const char *out_encoding,const char *in_encoding) +{ +if (!in_encoding) +return NULL ; +return xstrdup (in); +}#endif
utf8.h +0 -4
@@ -10,10 +10,6 @@ int is_encoding_utf8(const char *name);int print_wrapped_text (const char *text,int indent,int indent2,int len); -#ifndef NO_ICONV char *reencode_string (const char *in,const char *out_encoding,const char *in_encoding); -#else -#define reencode_string (a,b,c) NULL -#endif #endif
Signature · 1 line
1.5.6.1.255.g32571
PATCH 2/12 Do not complain about "no common commits" in an empty repo
From: Johannes Schindelin <[email protected]>
If the repo is empty, we know that already, thank you very much. So shut fetch-pack up about that case.
Fixes issue 3, too.
--- builtin-fetch-pack.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
builtin-fetch-pack.c +2 -1
@@ -309,7 +309,8 @@ done: } flushes--; } -return retval; +/* it is no error to fetch into a completely empty repo */ +return count ? retval :0 ; }static struct commit_list *complete;
Signature · 1 line
1.5.6.1.255.g32571
PATCH 3/12 MinGW: Convert CR/LF to LF in tag signatures
From: Johannes Schindelin <[email protected]>
On Windows, gpg outputs CR/LF signatures. But since the tag messages are already stripped of the CR by stripspace(), it is arguably nicer to do the same for the tag signature. Actually, this patch does not look for CR/LF, but strips all CRs from the signature.
[ spr: ported code to use strbuf ]
--- builtin-tag.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)
builtin-tag.c +14 -0
@@ -241,6 +241,20 @@ static int do_sign(struct strbuf *buffer)if (finish_command (&gpg) || !len || len <0 )return error ("gpg failed to sign the tag" ); +#ifdef __MINGW32__ +/* strip CR from the line endings */ + { +int i, j; +for (i = j =0 ; i < buffer->len; i++) +if (buffer->buf[i] !='\r' ) { +if (i != j) + buffer->buf[j] = buffer->buf[i]; + j++; + } +strbuf_setlen (buffer, j); + } +#endif +return 0 ; }
Signature · 1 line
1.5.6.1.255.g32571
PATCH 4/12 Avoid calling signal(SIGPIPE, ..) for MinGW builds.
From: Marius Storm-Olsen <[email protected]>
SIGPIPE isn't supported in MinGW.
--- builtin-verify-tag.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
builtin-verify-tag.c +2 -0
@@ -100,9 +100,11 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix) i++; } +#ifndef __MINGW32__/* sometimes the program was terminated because this signal * was received in the process of writing the gpg input: */ signal (SIGPIPE ,SIG_IGN ); +#endif while (i < argc)if (verify_tag (argv[i++], verbose)) had_error =1 ;
Signature · 1 line
1.5.6.1.255.g32571
PATCH 5/12 Windows(msysgit): Per default, display help as HTML in default browser
The implementation directly calls the Win32 API to launch the browser. Note that the specific directory layout of msysgit is required.
--- cache.h | 2 ++ help.c | 28 ++++++++++++++++++++++++++++ path.c | 13 +++++++++++++ 3 files changed, 43 insertions(+), 0 deletions(-)
cache.h +2 -0
@@ -529,6 +529,8 @@ const char *make_nonrelative_path(const char *path);const char *make_relative_path (const char *abs,const char *base);int normalize_absolute_path (char *buf,const char *path);int longest_ancestor_length (const char *path,const char *prefix_list); +/* Convert slashes to backslashes on Windows. */ +char *make_native_separator (char *path);/* Read and unpack a sha1 file into memory, write memory to a sha1 file */ extern int sha1_object_info (const unsigned char *,unsigned long *);
help.c +28 -0
@@ -9,6 +9,7 @@#include "common-cmds.h" #include "parse-options.h" #include "run-command.h" +#include "dir.h" static struct man_viewer_list { struct man_viewer_list *next;
@@ -28,7 +29,11 @@ enum help_format { };static int show_all =0 ; +#ifdef __MINGW32__ +static enum help_format help_format =HELP_FORMAT_WEB ; +#else static enum help_format help_format =HELP_FORMAT_MAN ; +#endif static struct option builtin_help_options[] = {OPT_BOOLEAN ('a' ,"all" , &show_all,"print all available commands" ),OPT_SET_INT ('m' ,"man" , &help_format,"show man page" ,HELP_FORMAT_MAN ),
@@ -644,12 +649,35 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)static void show_html_page (const char *git_cmd) { +#ifdef __MINGW32__ +const char * exec_path =git_exec_path (); +char *htmlpath =make_native_separator ( +mkpath ("%s/../doc/git/html/%s.html" + , exec_path + , git_cmd) + ); +if (!file_exists (htmlpath)) { + htmlpath =make_native_separator ( +mkpath ("%s/../doc/git/html/git-%s.html" + , exec_path + , git_cmd) + ); +if (!file_exists (htmlpath)) { +fprintf (stderr,"Can't find HTML help for '%s'.\n" + , git_cmd); +exit (1 ); + } + } +printf ("Launching default browser to display HTML help ...\n" ); +ShellExecute (NULL ,"open" , htmlpath,NULL ,"\\" ,0 ); +#else const char *page =cmd_to_page (git_cmd);struct strbuf page_path;/* it leaks but we exec bellow */ get_html_page_path (&page_path, page);execl_git_cmd ("web--browse" ,"-c" ,"help.browser" , page_path.buf,NULL ); +#endif }void help_unknown_cmd (const char *cmd)
path.c +13 -0
@@ -439,3 +439,16 @@ int longest_ancestor_length(const char *path, const char *prefix_list)return max_len; } + +char *make_native_separator (char * path) { +#ifdef __MINGW32__ +char * c; +for (c = path; *c; c++) { +if (*c =='/' ) + *c ='\\' ; + } +return path; +#else +return path; +#endif +}
Signature · 1 line
1.5.6.1.255.g32571
PATCH 6/12 connect: Fix custom ports with plink (Putty's ssh)
From: Edward Z. Yang <[email protected]>
PuTTY requires -P while OpenSSH requires -p; if plink is detected as GIT_SSH, use the alternate flag.
--- connect.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
connect.c +3 -1
@@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2], const char *url_orig, conn->argv = arg =xcalloc (6 ,sizeof (*arg));if (protocol ==PROTO_SSH ) {const char *ssh =getenv ("GIT_SSH" ); +int putty = ssh &&strstr (ssh,"plink" );if (!ssh) ssh ="ssh" ; *arg++ = ssh;if (port) { - *arg++ ="-p" ; +/* P is for PuTTY, p is for OpenSSH */ + *arg++ = putty ?"-P" :"-p" ; *arg++ = port; } *arg++ = host;
Signature · 1 line
1.5.6.1.255.g32571
PATCH 7/12 Fixed text file auto-detection: treat EOF character 032 at the end of file as printable
From: Dmitry Kakurin <[email protected]>
--- convert.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
convert.c +4 -0
@@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *else stats->printable++; } + +// If file ends with EOF then don't count this EOF as non-printable +if ( size >=1 && buf[size-1 ] =='\032' ) + stats->nonprintable--; }/*
Signature · 1 line
1.5.6.1.255.g32571
PATCH 8/12 fast-import: MinGW does not have getppid(). So do not print it.
From: Johannes Schindelin <[email protected]>
--- fast-import.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
fast-import.c +2 -0
@@ -391,7 +391,9 @@ static void write_crash_report(const char *err)fprintf (rpt,"fast-import crash report:\n" );fprintf (rpt," fast-import process: %d\n" ,getpid ()); +#ifndef __MINGW32__fprintf (rpt," parent process : %d\n" ,getppid ()); +#endif fprintf (rpt," at %s\n" ,show_date (time (NULL ),0 ,DATE_LOCAL ));fputc ('\n' , rpt);
Signature · 1 line
1.5.6.1.255.g32571
PATCH 9/12 We need to check for msys as well as Windows in add--interactive.
From: Mike Pape <[email protected]>
--- git-add--interactive.perl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
git-add--interactive.perl +1 -1
@@ -42,7 +42,7 @@ sub colored { my $patch_mode; sub run_cmd_pipe { - if ($^O eq 'MSWin32') { + if ($^O eq 'MSWin32' || $^O eq 'msys') { my @invalid = grep {m/[":*]/} @_; die "$^O does not support: @invalid\n" if @invalid; my @args = map { m/ /o ? "\"$_\"": $_ } @_;
Signature · 1 line
1.5.6.1.255.g32571
PATCH 10/12 Add ANSI control code emulation for the Windows console
From: Peter <[email protected]>
This adds only the minimum necessary to keep git pull/merge's diffstat from wrapping. Notably absent is support for the K (erase) operation, and support for POSIX write.
Cygwin does not need the WIN_ANSI define, since it has its own (more complete) ANSI emulation.
--- Makefile | 6 + compat/winansi.c | 309 +++++++++++++++++++++++++++++++++++++++++++++++++++++ git-compat-util.h | 7 ++ 3 files changed, 322 insertions(+), 0 deletions(-) create mode 100644 compat/winansi.c
Makefile +6 -0
@@ -737,6 +737,7 @@ ifneq (,$(findstring MINGW,$(uname_S))) NO_SVN_TESTS = YesPlease NO_PERL_MAKEMAKER = YesPlease NO_POSIX_ONLY_PROGRAMS = YesPlease + WIN_ANSI = YesPlease COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat COMPAT_CFLAGS += -DSNPRINTF_SIZE_CORR=1 COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
@@ -981,6 +982,11 @@ ifdef NO_EXTERNAL_GREP BASIC_CFLAGS += -DNO_EXTERNAL_GREP endif +ifdef WIN_ANSI + COMPAT_CFLAGS += -DWIN_ANSI + COMPAT_OBJS += compat/winansi.o +endif + ifeq ($(TCLTK_PATH),) NO_TCLTK=NoThanks endif
compat/winansi.c new file +309 -0
309 lines not on this page · raw message
git-compat-util.h +7 -0
@@ -357,4 +357,11 @@ void git_qsort(void *base, size_t nmemb, size_t size,# define FORCE_DIR_SET_GID 0#endif +#ifdef WIN_ANSI +extern int git_fputs (const char *str,FILE *stream); +extern int git_printf (const char *format, ...) __attribute__((format (printf,1 ,2 ))); +#define fputs git_fputs +#define printf (...) git_printf(__VA_ARGS__) +#endif +#endif
Signature · 1 line
1.5.6.1.255.g32571
PATCH 11/12 verify_path(): do not allow absolute paths
From: Johannes Schindelin <[email protected]>
--- read-cache.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
read-cache.c +5 -0
@@ -650,6 +650,11 @@ int verify_path(const char *path) {char c; +#ifdef __MINGW32__ +if (is_absolute_path (path)) +return error ("Cannot handle absolute path: %s" , path); +#endif + goto inside;for (;;) {if (!c)
Signature · 1 line
1.5.6.1.255.g32571
PATCH 12/12 setup: bring changes from 4msysgit/next to next
From: Johannes Sixt <[email protected]>
Hannes,
You introduced "minoffset" in 861429a7c37c7. Here is your original message:
'''
An earlier patch has implemented getcwd() so that it converts the drive letter into the POSIX-like path that is used internally by MinGW (C:\foo => /c/foo), but this style does not work outside the MinGW shell. It is better to just convert the backslashes to forward slashes and handle the drive letter explicitly. '''
Dmitry replaced setenv() with set_git_dir in 855f254b2b5b08. Here is his original message:
'''
git clone was failing with 'invalid object name HEAD' if ran from cmd.exe directly
environment.c caches results of many getenv calls. Under MinGW setenv(X) invalidates all previous values returned by getenv(X)
so cached values become dangling pointers.
Replaced all setenv(GIT_DIR, ...) with set_git_dir
'''
--- setup.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)
setup.c +5 -2
@@ -381,6 +381,7 @@ const char *setup_git_directory_gently(int *nongit_ok)const char *gitdirenv;const char *gitfile_dir;int len, offset, ceil_offset; +int minoffset =0 ;/* * Let's assume that we are in a git repository.
@@ -431,6 +432,8 @@ const char *setup_git_directory_gently(int *nongit_ok)if (!getcwd (cwd,sizeof (cwd)-1 ))die ("Unable to read current working directory" ); +if (has_dos_drive_prefix (cwd)) + minoffset =2 ; ceil_offset =longest_ancestor_length (cwd, env_ceiling_dirs);if (ceil_offset <0 &&has_dos_drive_prefix (cwd))
@@ -461,11 +464,11 @@ const char *setup_git_directory_gently(int *nongit_ok) inside_git_dir =1 ;if (!work_tree_env) inside_work_tree =0 ; -setenv (GIT_DIR_ENVIRONMENT ,"." ,1 ); +set_git_dir ("." );check_repository_format_gently (nongit_ok);return NULL ; } -while (--offset > ceil_offset && cwd[offset] !='/' ); +while (offset > minoffset && --offset > ceil_offset && cwd[offset] !='/' );if (offset <= ceil_offset) {if (nongit_ok) {if (chdir (cwd))
Signature · 1 line
1.5.6.1.255.g32571
Re: [msysGit] [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next
Hi,
Quoted 5 lines · Steffen Prohaska
From: Johannes Sixt <[email protected]>
Hannes,
You introduced "minoffset" in861429a7c37c7.
AFAICT it was redone differently in 'next', because 'next' has this ceiling dir thingie, which allows a different (much smaller) patch.
It might be more sensible to base your patch series on 'next'...
Ciao,
Dscho
Re: [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next
Quoted 5 lines · Johannes Schindelin
Quoted 3 lines · Steffen Prohaska
From: Johannes Sixt <[email protected]>
Quoted 7 lines
Quoted 2 lines
Hannes,
You introduced "minoffset" in861429a7c37c7.AFAICT it was redone differently in 'next', because 'next' has this ceiling dir thingie, which allows a different (much smaller) patch.
It might be more sensible to base your patch series on 'next'...
Hmm.. it is based on next. But obviously I needed to merge mingw's master to 4msysgit's master and resolve conflicts. Maybe I made the wrong decisions then.
Hannes,
If you believe that your setup.c is good, then I'll copy your version to 4msysgit's master.
Steffen
Re: [msysGit] Re: [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next
Quoted 12 lines · Steffen Prohaska
Quoted 10 lines · Johannes Schindelin
Quoted 4 lines · Steffen Prohaska
From: Johannes Sixt <[email protected]>
Hannes,
You introduced "minoffset" in861429a7c37c7.AFAICT it was redone differently in 'next', because 'next' has this ceiling dir thingie, which allows a different (much smaller) patch.
It might be more sensible to base your patch series on 'next'...
Quoted 7 lines
Hmm.. it is based on next. But obviously I needed to merge mingw's master to 4msysgit's master and resolve conflicts. Maybe I made the wrong decisions then.
Hannes,
If you believe that yoursetup.cis good, then I'll copy your version to 4msysgit's master.
The setup.c in mingw.git (and soon Junio's master) and Junio's next are _different_, but both are correct. If you reverse-apply the patch you presented here, then you get the version from Junio's next, which is a good state.
[ Of course, the result will work only as long as you do not set GIT_CEILING_DIRECTORIES, because we haven't taken care of the helper functions that this feature uses, longest_ancestor_length() and normalize_path(). ]
We have debated about set_git_dir(".") in the past. mingw.git doesn't have it, and it works (for me). I don't know what it is needed for.
-- Hannes
Re: [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next
Quoted 17 lines · Johannes Sixt
Quoted 16 lines · Steffen Prohaska
Quoted 10 lines · Johannes Schindelin
Quoted 4 lines · Steffen Prohaska
From: Johannes Sixt <[email protected]>
Hannes,
You introduced "minoffset" in861429a7c37c7.AFAICT it was redone differently in 'next', because 'next' has this ceiling dir thingie, which allows a different (much smaller) patch.
It might be more sensible to base your patch series on 'next'...
Hmm.. it is based on next. But obviously I needed to merge mingw's master to 4msysgit's master and resolve conflicts. Maybe I made the wrong decisions then.
Quoted 8 lines
Quoted 3 lines
Hannes,
If you believe that yoursetup.cis good, then I'll copy your version to 4msysgit's master.The
setup.cin mingw.git (and soon Junio's master) and Junio's next are _different_, but both are correct. If you reverse-apply the patch you presented here, then you get the version from Junio's next, which is a good state.
Ok, I'll wait until Junio's master has the changes and will remove the changes to 4msysgit then.
Steffen
Re: [PATCH 12/12] [TODO] setup: bring changes from 4msysgit/next to next
Quoted 11 lines · Steffen Prohaska
Quoted 6 lines · Johannes Sixt
The
setup.cin mingw.git (and soon Junio's master) and Junio's next are
_different_, but both are correct. If you reverse-apply the patch you presented here, then you get the version from Junio's next, which is a good
state.Ok, I'll wait until Junio's master has the changes and will remove the changes to 4msysgit then.
There will be a slight difference between the setup.c in soon-to-be master and j6t/mingw (14086b0), due to recent optimization already on 'master' from Linus, 044bbbc (Make git_dir a path relative to work_tree in setup_work_tree(), 2008-06-19).
setup.c +2 -1
@@ -308,9 +308,10 @@ void setup_work_tree(void) work_tree =get_git_work_tree (); git_dir =get_git_dir ();if (!is_absolute_path (git_dir)) -set_git_dir (make_absolute_path (git_dir)); + git_dir =make_absolute_path (git_dir);if (!work_tree ||chdir (work_tree))die ("This operation must be run in a work tree" ); +set_git_dir (make_relative_path (git_dir, work_tree)); initialized =1 ; }
Re: [PATCH 11/12] verify_path(): do not allow absolute paths
In reply to Steffen ProhaskaQuoted 2 lines · Steffen Prohaska
Signed-off-by Johannes Schindelin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>
No commit log message? Justification?
Re: [PATCH 11/12] verify_path(): do not allow absolute paths
Quoted 6 lines · Junio C Hamano
Quoted 2 lines · Steffen Prohaska
Signed-off-by Johannes Schindelin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>No commit log message? Justification?
Hannes,
Do we still need this change in verify_path(). I am not sure. Maybe it should be reverted in 4msysgit?
Steffen
Re: [PATCH 11/12] verify_path(): do not allow absolute paths
In reply to Junio C HamanoHi,
Quoted 6 lines · Junio C Hamano
Quoted 2 lines · Steffen Prohaska
Signed-off-by Johannes Schindelin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>No commit log message? Justification?
Justification: adding absolute paths was not caught properly on Windows, and this was the easiest patch.
However, IIRC, in the meantime we are nice to the user, and allow absolute paths (which we turn into a relative path, or error out if it is not under the current working directory).
Steffen, can you revert the patch and verify that my memory does not fail me?
Ciao,
Dscho
Re: [PATCH 11/12] verify_path(): do not allow absolute paths
Quoted 14 lines · Johannes Schindelin
Hi,
Quoted 6 lines · Junio C Hamano
Quoted 2 lines · Steffen Prohaska
Signed-off-by Johannes Schindelin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>No commit log message? Justification?
Justification: adding absolute paths was not caught properly on Windows, and this was the easiest patch.
Quoted 6 lines
However, IIRC, in the meantime we are nice to the user, and allow absolute paths (which we turn into a relative path, or error out if it is not under the current working directory).
Steffen, can you revert the patch and verify that my memory does not fail me?
Is
git add /c/msysgit/git/read-cache.c
an appropriate test?
It fails with
error: 'c:/msysgit/git/read-cache.c' is outside repository
no matter if the commit is reverted or not.
Steffen
Re: [PATCH 11/12] verify_path(): do not allow absolute paths
Hi,
Quoted 25 lines · Steffen Prohaska
Quoted 12 lines · Johannes Schindelin
Quoted 6 lines · Junio C Hamano
Quoted 2 lines · Steffen Prohaska
Signed-off-by Johannes Schindelin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>No commit log message? Justification?
Justification: adding absolute paths was not caught properly on Windows, and this was the easiest patch.
Quoted 6 lines
However, IIRC, in the meantime we are nice to the user, and allow absolute paths (which we turn into a relative path, or error out if it is not under the current working directory).
Steffen, can you revert the patch and verify that my memory does not fail me?
Is
git add /c/msysgit/git/read-cache.c
Quoted 7 lines
an appropriate test?
It fails with
error: 'c:/msysgit/git/read-cache.c' is outside repository
no matter if the commit is reverted or not.
Yes, that is enough. It proves that the patch 11/12 is unnecessary and should be removed from 4msysgit.git.
Thanks,
Dscho
Re: [msysGit] [PATCH 10/12] Add ANSI control code emulation for the Windows console
In reply to Steffen ProhaskaQuoted 3 lines · Steffen Prohaska
This adds only the minimum necessary to keep git pull/merge's diffstat from wrapping. Notably absent is support for the K (erase) operation, and support for POSIX write.
If I understand the patch correctly, it won't affect output that goes to the pager; only text that goes directly to the console would be colored. This is a start. I think I'll queue this in mingw.git.
-- Hannes
Re: [msysGit] [PATCH 10/12] Add ANSI control code emulation for the Windows console
Quoted 7 lines · Johannes Sixt
Quoted 3 lines · Steffen Prohaska
This adds only the minimum necessary to keep git pull/merge's diffstat from wrapping. Notably absent is support for the K (erase) operation, and support for POSIX write.
If I understand the patch correctly, it won't affect output that goes to the pager; only text that goes directly to the console would be colored.
Yes, that is correct.
Note that an MSYS bash/rxvt is effectively considered a pager by this patch, since it fails the isatty() test. This is actually a good
thing: MSYS has better ANSI support anyway.
Peter Harris
Re: [msysGit] [PATCH 10/12] Add ANSI control code emulation for the Windows console
In reply to Steffen ProhaskaQuoted 3 lines · Steffen Prohaska
This adds only the minimum necessary to keep git pull/merge's diffstat from wrapping. Notably absent is support for the K (erase) operation, and support for POSIX write.
I've tested this patch, and it is no longer ready for prime-time in its current form. It doesn't do what it advertises (colorize diffstat of merge) because the diff machinery since some time now uses fprintf, not printf, so the replacements are not called and escape characters are left in the console window.
git-compat-util.h void git_qsort(void *base, size_t nmemb, size_t size, · line 367
Quoted 8 lines
git-compat-util.h +3
-0+#ifdef WIN_ANSI +extern int git_fputs (const char *str,FILE *stream); +extern int git_printf(const char *format, ...) __attribute__((format(printf, 1, 2))); +#define fputs
git_fputsgit-compat-util.h +3
-0+#define printf (...) git_printf(__VA_ARGS__) +#endif +#endif
Put this (without #ifdef WIN_ANSI) in mingw.h and don't change the Makefile.
-- Hannes
Re: [PATCH 08/12] fast-import: MinGW does not have getppid(). So do not print it.
In reply to Steffen ProhaskaQuoted 16 lines · Steffen Prohaska
fast-import.c +2
-0@@ -391,7 +391,9 @@ static void write_crash_report(const char *err)fprintf (rpt,"fast-import crash report:\n" );fprintf (rpt," fast-import process: %d\n" ,getpid ()); +#ifndef __MINGW32__fprintf (rpt," parent process : %d\n" ,getppid ()); +#endif fprintf (rpt," at %s\n" ,show_date (time (NULL ),0 ,DATE_LOCAL ));fputc ('\n' , rpt);Signature · 1 line
1.5.6.1.255.g32571
It does not matter too much for this part that writes crash report, but keeping the file format the same across platforms will make it easier for tools to read output, so as a general principle, I think this is a suboptimal solution to the issue. How about throwing something like this in MinGW specific header files?
#define getppid() 0
Re: [PATCH 08/12] fast-import: MinGW does not have getppid(). So do not print it.
Quoted 25 lines · Junio C Hamano
Quoted 16 lines · Steffen Prohaska
fast-import.c +2
-0@@ -391,7 +391,9 @@ static void write_crash_report(const char *err)fprintf (rpt,"fast-import crash report:\n" );fprintf (rpt," fast-import process: %d\n" ,getpid ()); +#ifndef __MINGW32__fprintf (rpt," parent process : %d\n" ,getppid ()); +#endif fprintf (rpt," at %s\n" ,show_date (time (NULL ),0 ,DATE_LOCAL ));fputc ('\n' , rpt);Signature · 1 line
1.5.6.1.255.g32571It does not matter too much for this part that writes crash report, but keeping the file format the same across platforms will make it easier for tools to read output, so as a general principle, I think this is a suboptimal solution to the issue. How about throwing something like this in MinGW specific header files?
Quoted 1 line
#define getppid() 0
Hannes added something similar to the compat layer, so this commit is no longer needed. I'll remove it from the series and revert it in 4msysgit.
Steffen
Re: [PATCH 08/12] fast-import: MinGW does not have getppid(). So do not print it.
In reply to Junio C HamanoHi,
Quoted 25 lines · Junio C Hamano
Quoted 16 lines · Steffen Prohaska
fast-import.c +2
-0@@ -391,7 +391,9 @@ static void write_crash_report(const char *err)fprintf (rpt,"fast-import crash report:\n" );fprintf (rpt," fast-import process: %d\n" ,getpid ()); +#ifndef __MINGW32__fprintf (rpt," parent process : %d\n" ,getppid ()); +#endif fprintf (rpt," at %s\n" ,show_date (time (NULL ),0 ,DATE_LOCAL ));fputc ('\n' , rpt);Signature · 1 line
1.5.6.1.255.g32571It does not matter too much for this part that writes crash report, but keeping the file format the same across platforms will make it easier for tools to read output, so as a general principle, I think this is a suboptimal solution to the issue. How about throwing something like this in MinGW specific header files?
Quoted 1 line
#define getppid() 0
Of course, we could also implement it, using NtQueryInformationProcess() as suggested by Google.
Ciao,
Dscho
Re: [PATCH 07/12] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable
In reply to Steffen ProhaskaQuoted 13 lines · Steffen Prohaska
From: Dmitry Kakurin <[email protected]>
Signed-off-by Dmitry Kakurin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>--- convert.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)convert.c +0
-0
convert.c static void gather_stats(const char *buf, unsigned long size, struct text_stat * · line 67
Quoted 7 lines
convert.c +4
-0@@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *else stats->printable++; } + +// If file ends with EOF then don't count this EOF as non-printable +if ( size >=1 && buf[size-1 ] =='\032' ) + stats->nonprintable--;
Style.
I debated for 5 seconds with myself if this should be inside #ifdef, but doing this everywhere would give us reproducibility --- otherwise the resulting project won't be cross platform, so I think the intention of this change is good.
PATCH 1/1 Fixed text file auto-detection: treat EOF character 032 at the end of file as printable
From: Dmitry Kakurin <[email protected]>
--- convert.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
convert.c +4 -0
@@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *else stats->printable++; } + +/* If file ends with EOF then don't count this EOF as non-printable. */ +if (size >=1 && buf[size-1 ] =='\032' ) + stats->nonprintable--; }/*
Signature · 1 line
1.5.6.1.282.gd8a0d
Re: [PATCH] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable
Hi,
Quoted 13 lines · Steffen Prohaska
From: Dmitry Kakurin <[email protected]>
Signed-off-by Dmitry Kakurin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>--- convert.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)convert.c +0
-0
convert.c static void gather_stats(const char *buf, unsigned long size, struct text_stat * · line 67
Quoted 7 lines
convert.c +4
-0@@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *else stats->printable++; } + +/* If file ends with EOF then don't count this EOF as non-printable. */ +if (size >=1 && buf[size-1 ] =='\032' ) + stats->nonprintable--;
This is one of the things that are very specific to Windows and should not affect other people.
Ciao,
Dscho
P.S.: this is one of the examples why I would like to discuss things that are Windows-only on the msysGit list, until we have a consensus there. We have a few Git experts there, you and Hannes in particular, which cover that side, but also some Windows experts such as Peter and Marius, and we should not need to have that discussion on a list where people are not expected to care about Windows _at all_.
Re: [PATCH] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable
Quoted 19 lines · Johannes Schindelin
Quoted 17 lines · Steffen Prohaska
From: Dmitry Kakurin <[email protected]>
Signed-off-by Dmitry Kakurin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>---
convert.c| 4 ++++1 files changed, 4 insertions(+), 0 deletions(-)convert.c +0
-0@@ -61,6 +61,10 @@ static void gather_stats(const char *buf,unsigned long size, struct
text_stat*else stats->printable++; }
Quoted 8 lines
convert.c static void gather_stats(const char *buf, unsigned long size, struct text_stat * · line 67
Quoted 5 lines
convert.c +2
-0+ +/* If file ends with EOF then don't count this EOF as non- printable. */
convert.c +2
-0+if (size >=1 && buf[size-1 ] =='\032' ) + stats->nonprintable--;This is one of the things that are very specific to Windows and should not affect other people.
Does this mean you are opposed to this change?
Junio thinks that "the intention of this change is good" [1]. Hence, I cleaned up the style and re-send the patch.
[1] http://article.gmane.org/gmane.comp.version-control.git/87122
Steffen
Re: [PATCH] Fixed text file auto-detection: treat EOF character 032 at the end of file as printable
Hi,
Quoted 30 lines · Steffen Prohaska
Quoted 19 lines · Johannes Schindelin
Quoted 17 lines · Steffen Prohaska
From: Dmitry Kakurin <[email protected]>
Signed-off-by Dmitry Kakurin <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>---
convert.c| 4 ++++1 files changed, 4 insertions(+), 0 deletions(-)convert.c +0
-0@@ -61,6 +61,10 @@ static void gather_stats(const char *buf, unsigned longsize, struct
text_stat*
elsestats->printable++; }Quoted 8 lines
convert.c static void gather_stats(const char *buf, unsigned long size, struct text_stat * · line 67
Quoted 5 lines
convert.c +2
-0+ +/* If file ends with EOF then don't count this EOF as non-printable. */
convert.c +2
-0+if (size >=1 && buf[size-1 ] =='\032' ) + stats->nonprintable--;This is one of the things that are very specific to Windows and should not affect other people.
Quoted 1 line
Does this mean you are opposed to this change?
Hrm. Thinking about it again, this _could_ help Unix people who collaborate with DOS people.
OTOH it will just hide the fact that text files were committed that contain silly characters.
On the third hand, this code path affects only people who set autocrlf.
Well, I guess they asked for it, kind of.
Ciao,
Dscho
Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)
In reply to Steffen ProhaskaQuoted 20 lines · Steffen Prohaska
From: Edward Z. Yang <[email protected]>
PuTTY requires -P while OpenSSH requires -p; if plink is detected as
GIT_SSH, use the alternate flag.Signed-off-by Edward Z. Yang <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>--- connect.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)connect.c +1
-0@@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2], const char *url_orig, conn->argv = arg = xcalloc(6, sizeof(*arg));if (protocol ==PROTO_SSH ) {const char *ssh =getenv ("GIT_SSH" ); +int putty = ssh &&strstr (ssh,"plink" );
connect.c struct child_process *git_connect(int fd[2], const · line 611
Quoted 10 lines
connect.c +2
-1if (!ssh) ssh ="ssh" ; *arg++ = ssh;if (port) { - *arg++ ="-p" ; +/* P is for PuTTY, p is for OpenSSH */ + *arg++ = putty ?"-P" :"-p" ; *arg++ = port; } *arg++ = host;
What about installing a wrapper script, plinkssh, that does this:
#!/bin/bash
if test "$1" = -p; then
port="-P $2" shift; shift
fi
exec plink $port "$@"
and require plink users to set GIT_SSH=plinkssh?
-- Hannes
Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)
Quoted 4 lines · Johannes Sixt
What about installing a wrapper script, plinkssh, that does this:
#!/bin/bash
Quoted 8 lines
if test "$1" = -p; then
port="-P $2" shift; shiftfi
exec plink $port "$@"
and require plink users to set GIT_SSH=plinkssh?
That's quite a nice solution with absolute minimum impact.
Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)
Quoted 11 lines · Junio C Hamano
Quoted 9 lines · Johannes Sixt
What about installing a wrapper script, plinkssh, that does this:
#!/bin/bash
if test "$1" = -p; then
port="-P $2" shift; shiftfi
Quoted 5 lines
Quoted 3 lines
exec plink $port "$@"
and require plink users to set GIT_SSH=plinkssh?
That's quite a nice solution with absolute minimum impact.
It has minimum impact on the source code of git. The same is not true, however, for the git user and the installer on Windows:
- The proposed plinkssh requires that plink is in the PATH. This is not necessarily the case on Windows. If plink is not in the PATH, then the user needs to modify plinkssh.
- The msysgit installer supports setting GIT_SSH to the full path of plink. It automatically detects this path based on Putty's entries in the Windows registry. If we choose the plinkssh solution the installer has to be modified.
Setting '-P' in connect.c would have some impact on the git source, but would avoid changes elsewhere.
Steffen
Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)
Hi:
Quoted 12 lines · Steffen Prohaska
Quoted 5 lines · Junio C Hamano
Quoted 1 line · Johannes Sixt
What about installing a wrapper script, plinkssh, that does this:
That's quite a nice solution with absolute minimum impact.
It has minimum impact on the source code of git. The same is not true, however, for the git user and the installer on Windows:
Quoted 8 lines
- The proposed plinkssh requires that plink is in the PATH. This is not necessarily the case on Windows. If plink is not in the PATH, then the user needs to modify plinkssh.
- The msysgit installer supports setting
GIT_SSHto the full path of plink. It automatically detects this path based on Putty's entries in the Windows registry. If we choose the plinkssh solution the installer has to be modified.
How about we create one more global environment variable MSYSGIT_REAL_PLINK which points to the Windows plink during installation? Then we set the GIT_SSH to the plinkssh, and the proposed plinkssh can point to MSYSGIT_REAL_PLINK?
+ # fall back to plink if MSYSGIT_REAL_PLINK is not defined
+ # and hope plink is in the path
+ plink=${MSYSGIT_REAL_PLINK:-plink}
- exec plink $port "$@"
+ exec ${plink} $port "$@"
Perhaps I have traded one problem for another, because the msysgit user still has to be aware of MSYSGIT_REAL_PLINK (at least she doesn't have to set it up). And of course, the installer has to be modified to accommodate plinkssh and my proposal.
Best regards,
Clifford Caoile
Re: [msysGit] Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)
Quoted 4 lines · Clifford Caoile
Perhaps I have traded one problem for another, because the msysgit user still has to be aware of
MSYSGIT_REAL_PLINK(at least she doesn't have to set it up). And of course, the installer has to be modified to accommodate plinkssh and my proposal.
This feels unnecessarily complicated.
What would be cool is if we could just set GIT_SSH to plinkssh -path-to-plink "C:\Path\To\plink.exe" (obviously a shorter flag or something). Unfortunately, this doesn't seem to work with Git's current command argument handling.
Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)
In reply to Johannes SixtHi,
Quoted 36 lines · Johannes Sixt
Quoted 20 lines · Steffen Prohaska
From: Edward Z. Yang <[email protected]>
PuTTY requires -P while OpenSSH requires -p; if plink is detected as
GIT_SSH, use the alternate flag.Signed-off-by Edward Z. Yang <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>--- connect.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)connect.c +1
-0@@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2], const char *url_orig, conn->argv = arg = xcalloc(6, sizeof(*arg));if (protocol ==PROTO_SSH ) {const char *ssh =getenv ("GIT_SSH" ); +int putty = ssh &&strstr (ssh,"plink" );connect.c struct child_process *git_connect(int fd[2], const · line 611
Quoted 10 lines
connect.c +2
-1if (!ssh) ssh ="ssh" ; *arg++ = ssh;if (port) { - *arg++ ="-p" ; +/* P is for PuTTY, p is for OpenSSH */ + *arg++ = putty ?"-P" :"-p" ; *arg++ = port; } *arg++ = host;What about installing a wrapper script, plinkssh, that does this:
#!/bin/bash
Quoted 8 lines
if test "$1" = -p; then
port="-P $2" shift; shiftfi
exec plink $port "$@"
and require plink users to set GIT_SSH=plinkssh?
I like that better than this special-casing of plink.
Ciao,
Dscho
Re: [PATCH 06/12] connect: Fix custom ports with plink (Putty's ssh)
Quoted 44 lines · Johannes Schindelin
Quoted 42 lines · Johannes Sixt
Quoted 28 lines · Steffen Prohaska
From: Edward Z. Yang <[email protected]>
PuTTY requires -P while OpenSSH requires -p; if plink is detected as
GIT_SSH, use the alternate flag.Signed-off-by Edward Z. Yang <[email protected]>Signed-off-by Steffen Prohaska <[email protected]>---
connect.c| 4 +++-1 files changed, 3 insertions(+), 1 deletions(-)connect.c +0
-0@@ -599,11 +599,13 @@ struct child_process *git_connect(int fd[2],const
char *url_orig, conn->argv = arg = xcalloc(6, sizeof(*arg)); if (protocol == PROTO_SSH) { const char *ssh = getenv("GIT_SSH");connect.c +1
-0+int putty = ssh &&strstr (ssh,"plink" );if (!ssh) ssh = "ssh"; *arg++ = ssh; if (port) {connect.c +2
-1- *arg++ ="-p" ; +/* P is for PuTTY, p is for OpenSSH */ + *arg++ = putty ?"-P" :"-p" ;Quoted 3 lines
*arg++ = port; } *arg++ = host;What about installing a wrapper script, plinkssh, that does this:
#!/bin/bash
if test "$1" = -p; then
port="-P $2" shift; shiftfi
Quoted 5 lines
Quoted 3 lines
exec plink $port "$@"
and require plink users to set GIT_SSH=plinkssh?
I like that better than this special-casing of plink.
I'd prefer to change connect.c. plinkssh would introduce another dependency on the shell, while our overall goal is to avoid shell as much as possible on Windows, no? Edward's solution also looks more obvious to me than the plinkssh wrapper script.
Steffen
Re: [PATCH 05/12] Windows(msysgit): Per default, display help as HTML in default browser
In reply to Steffen Prohaskacache.h const char *make_nonrelative_path(const char *path); · line 533
Quoted 2 lines · Steffen Prohaska
cache.h +2
-0+/* Convert slashes to backslashes on Windows. */ +char *make_native_separator (char *path);
Makes one onder why it is not inside #ifdef, but presumably it is no-op on other platforms (which is fine, better than fine)?
help.c enum help_format { · line 36
Quoted 6 lines
static int
show_all= 0;help.c +4
-0+#ifdef __MINGW32__ +static enum help_format help_format =HELP_FORMAT_WEB ; +#else static enum help_format help_format =HELP_FORMAT_MAN ; +#endif
That's Ugly isn't it? Can't you do this with Makefile macro without #ifdef please?
Quoted 24 lines
help.c +20
-0@@ -644,12 +649,35 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)static void show_html_page (const char *git_cmd) { +#ifdef __MINGW32__ +const char * exec_path =git_exec_path (); +char *htmlpath =make_native_separator ( +mkpath ("%s/../doc/git/html/%s.html" + , exec_path + , git_cmd) + ); +if (!file_exists (htmlpath)) { + htmlpath =make_native_separator ( +mkpath ("%s/../doc/git/html/git-%s.html" + , exec_path + , git_cmd) + ); +if (!file_exists (htmlpath)) { +fprintf (stderr,"Can't find HTML help for '%s'.\n" + , git_cmd); +exit (1 ); + } + } +printf ("Launching default browser to display HTML help ...\n" );
help.c static void get_html_page_path(struct strbuf *page_path, const char *page) · line 681
Quoted 10 lines
help.c +3
-0+ShellExecute (NULL ,"open" , htmlpath,NULL ,"\\" ,0 ); +#else const char *page =cmd_to_page (git_cmd);struct strbuf page_path;/* it leaks but we exec bellow */ get_html_page_path (&page_path, page);execl_git_cmd ("web--browse" ,"-c" ,"help.browser" , page_path.buf,NULL ); +#endif }
Hmm. The above almost makes me barf and suggest making them two totally separate functions (i.e. introduce a new "show_html_page_on_windows()" function and do not bother us Unix folks ;-).
But I suspect your code is not beyond salvaging. Why is the htmlpath computed by hand in this function, instead of having the port specific implementation hidden inside get_html_page_path() function?
About the execution part, isn't it the matter of using "open" (whatever that is) as one of the supported backend for web--browse to unify these two independent case arms?
Re: [PATCH 05/12] Windows(msysgit): Per default, display help as HTML in default browser
In reply to Steffen ProhaskaQuoted 15 lines · Steffen Prohaska
The implementation directly calls the Win32 API to launch the browser. Note that the specific directory layout of msysgit is required.
help.c +12
-0+#ifdef __MINGW32__ +const char * exec_path =git_exec_path (); +char *htmlpath =make_native_separator ( +mkpath ("%s/../doc/git/html/%s.html" + , exec_path + , git_cmd) + ); +if (!file_exists (htmlpath)) { + htmlpath =make_native_separator ( +mkpath ("%s/../doc/git/html/git-%s.html" + , exec_path + , git_cmd)
help.c static void get_html_page_path(struct strbuf *page_path, const char *page) · line 673
Quoted 10 lines
help.c +10
-0+ ); +if (!file_exists (htmlpath)) { +fprintf (stderr,"Can't find HTML help for '%s'.\n" + , git_cmd); +exit (1 ); + } + } +printf ("Launching default browser to display HTML help ...\n" ); +ShellExecute (NULL ,"open" , htmlpath,NULL ,"\\" ,0 ); +#else
Can't we move this part into git-web--browse.sh? It should be a matter of calling
start $htmlpath
(and msys-1.0.dll would convert slashes to backslashes for us).
-- Hannes
Re: [PATCH 05/12] Windows(msysgit): Per default, display help as HTML in default browser
Quoted 30 lines · Johannes Sixt
Quoted 15 lines · Steffen Prohaska
The implementation directly calls the Win32 API to launch the browser. Note that the specific directory layout of msysgit is required.
help.c +12
-0+#ifdef __MINGW32__ +const char * exec_path =git_exec_path (); +char *htmlpath =make_native_separator ( +mkpath ("%s/../doc/git/html/%s.html" + , exec_path + , git_cmd) + ); +if (!file_exists (htmlpath)) { + htmlpath =make_native_separator ( +mkpath ("%s/../doc/git/html/git-%s.html" + , exec_path + , git_cmd)help.c static void get_html_page_path(struct strbuf *page_path, const char *page) · line 673
Quoted 10 lines
help.c +10
-0+ ); +if (!file_exists (htmlpath)) { +fprintf (stderr,"Can't find HTML help for '%s'.\n" + , git_cmd); +exit (1 ); + } + } +printf ("Launching default browser to display HTML help ...\n" ); +ShellExecute (NULL ,"open" , htmlpath,NULL ,"\\" ,0 ); +#else Can't we move this part into
git-web--browse.sh? It should be a matter of calling
Quoted 3 lines
start $htmlpath
(and msys-1.0.dll would convert slashes to backslashes for us).
I try to avoid the shell as much as possible on Windows.
How about the two following patches:
[PATCH 1/2] help.c: Add support for htmldir relative togit_exec_path()
[PATCH 2/2] help (Windows): Display HTML in default browser using
Win32 API
I'll send them as replies to this mail.
Steffen
PATCH 1/2 help.c: Add support for htmldir relative to git_exec_path()
If htmldir (in the Makefile) is a relative path, this path will be interpreted relative to git_exec_path. This can be used to create an installation that can be moved to a different directory without re-compiling. The Windows installer (msysgit) is an example for such a setup.
Note that the Makefile maps htmldir to the define GIT_HTML_PATH.
--- help.c | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-)
help.c +11 -3
@@ -634,12 +634,20 @@ static void get_html_page_path(struct strbuf *page_path, const char *page) {struct stat st; +const char * html_path =GIT_HTML_PATH ; +if (!is_absolute_path (html_path)) { +struct strbuf d =STRBUF_INIT ; +strbuf_addf (&d,"%s/%s" ,git_exec_path (), html_path); + html_path =strbuf_detach (&d,NULL ); + } +/* Check that we have a git documentation directory. */ -if (stat (GIT_HTML_PATH "/git.html" , &st) || !S_ISREG (st.st_mode)) -die ("'%s': not a documentation directory." ,GIT_HTML_PATH ); +if (stat (mkpath ("%s/git.html" , html_path), &st) + || !S_ISREG (st.st_mode)) +die ("'%s': not a documentation directory." , html_path);strbuf_init (page_path,0 ); -strbuf_addf (page_path,GIT_HTML_PATH "/%s.html" , page); +strbuf_addf (page_path,"%s/%s.html" , html_path, page); }static void show_html_page (const char *git_cmd)
Signature · 1 line
1.5.6.1.282.gd8a0d
PATCH 2/2 help (Windows): Display HTML in default browser using Win32 API
The Win32 API is now called directly to launch the system's default browser for displaying HTML help pages instead of launching a shell to execute git-web--browser. Avoiding the MSYS' bash when possible is good because it avoids potential path translation issues. In this case it is not too hard to avoid launching a shell, so let's avoid it.
This commit also adds make_native_separator() to convert slashes to backslashes on Windows.
--- cache.h | 2 ++ help.c | 18 ++++++++++++++++++ path.c | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 0 deletions(-)
cache.h +2 -0
@@ -527,6 +527,8 @@ static inline int is_absolute_path(const char *path)const char *make_absolute_path (const char *path);const char *make_nonrelative_path (const char *path);const char *make_relative_path (const char *abs,const char *base); +/* Convert slashes to backslashes on Windows. no-op on other platforms. */ +const char *make_native_separator (const char *path);/* Read and unpack a sha1 file into memory, write memory to a sha1 file */ extern int sha1_object_info (const unsigned char *,unsigned long *);
help.c +18 -0
@@ -9,6 +9,7 @@#include "common-cmds.h" #include "parse-options.h" #include "run-command.h" +#include "dir.h" static struct man_viewer_list { struct man_viewer_list *next;
@@ -650,6 +651,19 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)strbuf_addf (page_path,"%s/%s.html" , html_path, page); } +#ifdef __MINGW32__ +static void open_html_win (const char *unixpath) +{ +const char *htmlpath =make_native_separator (mkpath ("%s" ,unixpath)); +if (!file_exists (htmlpath)) { +fprintf (stderr,"HTML file '%s' does not exist.\n" , htmlpath); +exit (1 ); + } +printf ("Launching default browser to display HTML help ...\n" ); +ShellExecute (NULL ,"open" , htmlpath,NULL ,"\\" ,0 ); +} +#endif +static void show_html_page (const char *git_cmd) {const char *page =cmd_to_page (git_cmd);
@@ -657,7 +671,11 @@ static void show_html_page(const char *git_cmd)get_html_page_path (&page_path, page); +#ifdef __MINGW32__ +open_html_win (page_path.buf); +#else execl_git_cmd ("web--browse" ,"-c" ,"help.browser" , page_path.buf,NULL ); +#endif }void help_unknown_cmd (const char *cmd)
path.c +18 -0
@@ -343,3 +343,21 @@ const char *make_relative_path(const char *abs, const char *base)strcpy (buf, abs + baselen);return buf; } + +const char *make_native_separator (const char * path) { +#ifdef __MINGW32__ +static char buf[PATH_MAX +1 ]; +char * c; + +if (strlcpy (buf, path,PATH_MAX ) >=PATH_MAX ) +die ("Too long path: %.*s" ,60 , path); + +for (c = buf; *c; c++) { +if (*c =='/' ) + *c ='\\' ; + } +return buf; +#else +return path; +#endif +}
Signature · 1 line
1.5.6.1.282.gd8a0d
Re: [PATCH 1/2] help.c: Add support for htmldir relative to git_exec_path()
In reply to Steffen Prohaskahelp.c static void get_html_page_path(struct strbuf *page_path, const char *page) · line 637
Quoted 7 lines · Steffen Prohaska
If htmldir (in the
Makefile) is a relative path, this path will be interpreted relative togit_exec_path. This can be used to create an installation that can be moved to a different directory without re-compiling. The Windows installer (msysgit) is an example for such a setup.
...help.c +1
-0+const char * html_path =GIT_HTML_PATH ;
Style. Asterisk sticks to the variable, not type.
help.c static void get_html_page_path(struct strbuf *page_path, const char *page) · line 642
Quoted 5 lines
help.c +5
-0+if (!is_absolute_path (html_path)) { +struct strbuf d =STRBUF_INIT ; +strbuf_addf (&d,"%s/%s" ,git_exec_path (), html_path); + html_path =strbuf_detach (&d,NULL ); + }
I've seen similar "if $this (which is usually an absolute) is relative, it is taken as relative to git_exec_path" solution employed elsewhere in the MinGW series, and I think it makes sense, even though initially I thought it was somewhat hacky.
Could you check if there are copy-and-pasted duplicated code you can factor out before continuing this direction? I suspect templates and etc/gitconfig are specified in similar fashion, and it would probably be easier to maintain if you define once:
char *system_path(const char *specified)
{
if (is_absolute_path(specified))
return specified;
... strbuf dance ...
return strbuf_detach(...);
}and use it like this:
const char *html_path = system_path(GIT_HTML_PATH);
Re: [PATCH 1/2] help.c: Add support for htmldir relative to git_exec_path()
Hi,
Quoted 2 lines · Junio C Hamano
Could you check if there are copy-and-pasted duplicated code you can factor out before continuing this direction?
Note also that Hannes tried very hard to get rid of those ugly "#ifdef __MINGW32__"s by declaring/overriding functions in git-compat-util.h.
I think that is such a good practice that we should not stop here.
Ciao,
Dscho
Re: [PATCH 1/2] help.c: Add support for htmldir relative to git_exec_path()
Quoted 9 lines · Johannes Schindelin
Quoted 2 lines · Junio C Hamano
Could you check if there are copy-and-pasted duplicated code you can factor out before continuing this direction?
Note also that Hannes tried very hard to get rid of those ugly "#ifdef __MINGW32__"s by declaring/overriding functions in
git-compat-util.h.I think that is such a good practice that we should not stop here.
I'll send three patches that address Junio's and Dscho's comments:
[PATCH 1/3] Move code interpreting path relative to exec-dir to new
function system_path()
[PATCH 2/3] help.c: Add support for htmldir relative togit_exec_path()
[PATCH 3/3] help (Windows): Display HTML in default browser using
Windows' shell API
Hannes,
the patches I'll send probably conflict with your planned work on GIT_EXEC_PATH that has been discussed on the msysgit list. I think you could built on my series and modify system_path().
Steffen
PATCH 1/3 Move code interpreting path relative to exec-dir to new function system_path()
Expanding system paths relative to git_exec_path can be used for creating an installation that can be moved to a different directory without re-compiling. We use this approach for template_dir and the system wide gitconfig. The Windows installer (msysgit) is an example for such a setup.
This commit moves common code to a new function system_path(). System paths that are to be interpreted relative to git_exec_path are passed to system_path() and the return value is used instead of the original path. system_path() prefixes a relative path with git_exec_path and leaves absolute paths unmodified. For example, we now write
template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);
--- builtin-init-db.c | 14 ++------------ cache.h | 1 + config.c | 11 ++--------- path.c | 11 +++++++++++ 4 files changed, 16 insertions(+), 21 deletions(-)
builtin-init-db.c +2 -12
@@ -115,18 +115,8 @@ static void copy_templates(const char *template_dir)if (!template_dir) template_dir =getenv (TEMPLATE_DIR_ENVIRONMENT ); -if (!template_dir) { -/* -* if the hard-coded template is relative, it is -* interpreted relative to the exec_dir -*/ - template_dir =DEFAULT_GIT_TEMPLATE_DIR ; -if (!is_absolute_path (template_dir)) { -struct strbuf d =STRBUF_INIT ; -strbuf_addf (&d,"%s/%s" ,git_exec_path (), template_dir); - template_dir =strbuf_detach (&d,NULL ); - } - } +if (!template_dir) + template_dir =system_path (DEFAULT_GIT_TEMPLATE_DIR );strcpy (template_path, template_dir); template_len =strlen (template_path);if (template_path[template_len-1 ] !='/' ) {
cache.h +1 -0
@@ -529,6 +529,7 @@ const char *make_nonrelative_path(const char *path);const char *make_relative_path (const char *abs,const char *base);int normalize_absolute_path (char *buf,const char *path);int longest_ancestor_length (const char *path,const char *prefix_list); +extern const char *system_path (const char *path);/* Read and unpack a sha1 file into memory, write memory to a sha1 file */ extern int sha1_object_info (const unsigned char *,unsigned long *);
config.c +2 -9
@@ -581,15 +581,8 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)const char *git_etc_gitconfig (void ) {static const char *system_wide; -if (!system_wide) { - system_wide =ETC_GITCONFIG ; -if (!is_absolute_path (system_wide)) { -/* interpret path relative to exec-dir */ -struct strbuf d =STRBUF_INIT ; -strbuf_addf (&d,"%s/%s" ,git_exec_path (), system_wide); - system_wide =strbuf_detach (&d,NULL ); - } - } +if (!system_wide) + system_wide =system_path (ETC_GITCONFIG );return system_wide; }
path.c +11 -0
@@ -11,6 +11,7 @@* which is what it's designed for. */ #include "cache.h" +#include "exec_cmd.h" static char bad_path[] ="/bad-path/" ;
@@ -439,3 +440,13 @@ int longest_ancestor_length(const char *path, const char *prefix_list)return max_len; } + +const char *system_path (const char *path) +{ +if (!is_absolute_path (path)) { +struct strbuf d =STRBUF_INIT ; +strbuf_addf (&d,"%s/%s" ,git_exec_path (), path); + path =strbuf_detach (&d,NULL ); + } +return path; +}
Signature · 1 line
1.5.6.1.282.gd8a0d
PATCH 2/3 help.c: Add support for htmldir relative to git_exec_path()
If htmldir (in the Makefile) is a relative path, this path will now be interpreted relative to git_exec_path. This can be used to create an installation that can be moved to a different directory without re-compiling. The Windows installer (msysgit) is an example for such a setup.
Note that the Makefile maps htmldir to the define GIT_HTML_PATH.
--- help.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
help.c +5 -3
@@ -633,13 +633,15 @@ static void show_info_page(const char *git_cmd)static void get_html_page_path (struct strbuf *page_path,const char *page) {struct stat st; +const char *html_path =system_path (GIT_HTML_PATH );/* Check that we have a git documentation directory. */ -if (stat (GIT_HTML_PATH "/git.html" , &st) || !S_ISREG (st.st_mode)) -die ("'%s': not a documentation directory." ,GIT_HTML_PATH ); +if (stat (mkpath ("%s/git.html" , html_path), &st) + || !S_ISREG (st.st_mode)) +die ("'%s': not a documentation directory." , html_path);strbuf_init (page_path,0 ); -strbuf_addf (page_path,GIT_HTML_PATH "/%s.html" , page); +strbuf_addf (page_path,"%s/%s.html" , html_path, page); }static void show_html_page (const char *git_cmd)
Signature · 1 line
1.5.6.1.282.gd8a0d
PATCH 3/3 help (Windows): Display HTML in default browser using Windows' shell API
The system's default browser for displaying HTML help pages is now used directly on Windows, instead of launching git-web--browser, which requires a Unix shell. Avoiding MSYS' bash when possible is good because it avoids potential path translation issues. In this case it is not too hard to avoid launching a shell, so let's avoid it.
The Windows-specific code is implemented in compat/mingw.c to avoid platform-specific code in the main code base. On Windows, open_html is provided as a define. If open_html is not defined, git-web--browse is used. This approach avoids platform-specific ifdefs by using per-function ifdefs. The "ifndef open_html" together with the introductory comment should sufficiently warn developers, so that they hopefully will not break this mechanism.
--- compat/mingw.c | 21 +++++++++++++++++++++ compat/mingw.h | 3 +++ help.c | 14 +++++++++++++- 3 files changed, 37 insertions(+), 1 deletions(-)
compat/mingw.c +21 -0
@@ -1017,3 +1017,24 @@ sig_handler_t mingw_signal(int sig, sig_handler_t handler) timer_fn = handler;return old; } + +static const char *make_backslash_path (const char * path) { +static char buf[PATH_MAX +1 ]; +char * c; + +if (strlcpy (buf, path,PATH_MAX ) >=PATH_MAX ) +die ("Too long path: %.*s" ,60 , path); + +for (c = buf; *c; c++) { +if (*c =='/' ) + *c ='\\' ; + } +return buf; +} + +void mingw_open_html (const char *unixpath) +{ +const char *htmlpath =make_backslash_path (unixpath); +printf ("Launching default browser to display HTML ...\n" ); +ShellExecute (NULL ,"open" , htmlpath,NULL ,"\\" ,0 ); +}
compat/mingw.h +3 -0
@@ -193,6 +193,9 @@ static inline unsigned int git_ntohl(unsigned int x)sig_handler_t mingw_signal (int sig,sig_handler_t handler);#define signal mingw_signal +void mingw_open_html (const char *path); +#define open_html mingw_open_html +/* * git specific compatibility */
help.c +13 -1
@@ -644,6 +644,18 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)strbuf_addf (page_path,"%s/%s.html" , html_path, page); } +/* +* If open_html is not defined in a platform-specific way (see for +* example compat/mingw.h), we use the script web--browse to display +* HTML. +*/ +#ifndef open_html +void open_html (const char * path) +{ +execl_git_cmd ("web--browse" ,"-c" ,"help.browser" , path,NULL ); +} +#endif +static void show_html_page (const char *git_cmd) {const char *page =cmd_to_page (git_cmd);
@@ -651,7 +663,7 @@ static void show_html_page(const char *git_cmd)get_html_page_path (&page_path, page); -execl_git_cmd ("web--browse" ,"-c" ,"help.browser" , page_path.buf,NULL ); +open_html (page_path.buf); }void help_unknown_cmd (const char *cmd)
Signature · 1 line
1.5.6.1.282.gd8a0d
Re: [PATCH 3/3] help (Windows): Display HTML in default browser using Windows' shell API
compat/mingw.c sig_handler_t mingw_signal(int sig, sig_handler_t handler) · line 1023
Quoted 4 lines · Steffen Prohaska
compat/mingw.c +4
-0+ +static const char *make_backslash_path (const char * path) { +static char buf[PATH_MAX +1 ]; +char * c;
Style :-(. I'll send a fixed patch in a minute.
help.c static void get_html_page_path(struct strbuf *page_path, const char *page) · line 654
Quoted 3 lines
help.c +3
-0+#ifndef open_html +void open_html (const char * path) +{
It'll fix this too.
Steffen