What's cooking (2016/12 #04)

todo
Junio C Hamano 2016-12-16 15:41:25 -08:00
parent 1a46792824
commit 27fe017671
1 changed files with 320 additions and 215 deletions

View File

@ -1,10 +1,10 @@
To: git@vger.kernel.org
Bcc: lwn@lwn.net
Subject: What's cooking in git.git (Dec 2016, #03; Tue, 13)
X-master-at: de2efebf7ce2b308ea77d8b06f971e935238cd2f
X-next-at: 3074f9477c394cb6e81d163f738566535afd22ed
Subject: What's cooking in git.git (Dec 2016, #04; Fri, 16)
X-master-at: eff96d7e16a769dca9b0319ccf460a83f514676e
X-next-at: f8bf8f2a7b2b08001fdf3e1c554eef9249e47c19

What's cooking in git.git (Dec 2016, #03; Tue, 13)
What's cooking in git.git (Dec 2016, #04; Fri, 16)
--------------------------------------------------

Here are the topics that have been cooking. Commits prefixed with
@ -12,9 +12,6 @@ Here are the topics that have been cooking. Commits prefixed with
'+' are in 'next'. The ones marked with '.' do not appear in any of
the integration branches, but I am still holding onto them.

A few topics were merged to 'master' and are meant for 'maint' to be
in the first maintenance release for 2.11.x series.

You can find the changes described here in the integration branches
of the repositories listed at

@ -23,65 +20,254 @@ of the repositories listed at
--------------------------------------------------
[Graduated to "master"]

* ew/svn-fixes (2016-12-12) 2 commits
(merged to 'next' on 2016-12-12 at 91ed5b3cf3)
+ git-svn: document useLogAuthor and addAuthorFrom config keys
+ git-svn: allow "0" in SVN path components
* ak/lazy-prereq-mktemp (2016-11-29) 1 commit
(merged to 'next' on 2016-12-12 at f346d1f053)
+ t7610: clean up foo.XXXXXX tmpdir

Meant eventually for 'maint'.
Test code clean-up.


* js/mingw-isatty (2016-12-11) 1 commit
(merged to 'next' on 2016-12-12 at 60c1da6676)
+ mingw: intercept isatty() to handle /dev/null as Git expects it
* bw/push-dry-run (2016-11-23) 2 commits
(merged to 'next' on 2016-12-12 at bde7a0f9ae)
+ push: fix --dry-run to not push submodules
+ push: --dry-run updates submodules when --recurse-submodules=on-demand
(this branch uses hv/submodule-not-yet-pushed-fix; is tangled with sb/push-make-submodule-check-the-default.)

We often decide if a session is interactive by checking if the
standard I/O streams are connected to a TTY, but isatty() that
comes with Windows incorrectly returned true if it is used on NUL
(i.e. an equivalent to /dev/null). This has been fixed.
"git push --dry-run --recurse-submodule=on-demand" wasn't
"--dry-run" in the submodules.

Meant eventually for 'maint'.

* da/mergetool-trust-exit-code (2016-11-29) 2 commits
(merged to 'next' on 2016-12-12 at 28ae202868)
+ mergetools/vimdiff: trust Vim's exit code
+ mergetool: honor mergetool.$tool.trustExitCode for built-in tools

mergetool.<tool>.trustExitCode configuration variable did not apply
to built-in tools, but now it does.


* dt/empty-submodule-in-merge (2016-11-17) 1 commit
(merged to 'next' on 2016-12-12 at 6de2350b2b)
+ submodules: allow empty working-tree dirs in merge/cherry-pick

An empty directory in a working tree that can simply be nuked used
to interfere while merging or cherry-picking a change to create a
submodule directory there, which has been fixed..


* hv/submodule-not-yet-pushed-fix (2016-11-16) 4 commits
(merged to 'next' on 2016-12-05 at c9d729fca2)
+ submodule_needs_pushing(): explain the behaviour when we cannot answer
+ batch check whether submodule needs pushing into one call
+ serialize collection of refs that contain submodule changes
+ serialize collection of changed submodules
(this branch is used by bw/push-dry-run and sb/push-make-submodule-check-the-default.)

Originally merged to 'next' on 2016-11-21

The code in "git push" to compute if any commit being pushed in the
superproject binds a commit in a submodule that hasn't been pushed
out was overly inefficient, making it unusable even for a small
project that does not have any submodule but have a reasonable
number of refs.


* jk/rev-parse-symbolic-parents-fix (2016-11-16) 1 commit
(merged to 'next' on 2016-12-12 at 6839c1ea28)
+ rev-parse: fix parent shorthands with --symbolic

"git rev-parse --symbolic" failed with a more recent notation like
"HEAD^-1" and "HEAD^!".


* ld/p4-update-shelve (2016-12-05) 1 commit
(merged to 'next' on 2016-12-12 at 22f6bec94c)
+ git-p4: support updating an existing shelved changelist
(this branch uses vk/p4-submit-shelve.)

Will merge to 'master'.


* ls/p4-empty-file-on-lfs (2016-12-05) 1 commit
(merged to 'next' on 2016-12-12 at 1fce8e037a)
+ git-p4: fix empty file processing for large file system backend GitLFS

"git p4" LFS support was broken when LFS stores an empty blob.


* ls/p4-retry-thrice (2016-12-05) 1 commit
(merged to 'next' on 2016-12-12 at 9462e660a8)
+ git-p4: add config to retry p4 commands; retry 3 times by default

Will merge to 'master'.


* nd/qsort-in-merge-recursive (2016-11-28) 1 commit
(merged to 'next' on 2016-12-12 at e9700f5b93)
+ merge-recursive.c: use string_list_sort instead of qsort

Code simplification.


* nd/worktree-list-fixup (2016-11-28) 5 commits
(merged to 'next' on 2016-12-12 at 1f46421a59)
+ worktree list: keep the list sorted
+ worktree.c: get_worktrees() takes a new flag argument
+ get_worktrees() must return main worktree as first item even on error
+ worktree: reorder an if statement
+ worktree.c: zero new 'struct worktree' on allocation
(this branch is used by nd/worktree-move and sb/submodule-embed-gitdir.)

The output from "git worktree list" was made in readdir() order,
and was unstable.


* vk/p4-submit-shelve (2016-11-29) 1 commit
(merged to 'next' on 2016-12-12 at 3fce6df117)
+ git-p4: allow submit to create shelved changelists.
(this branch is used by ld/p4-update-shelve.)

Will merge to 'master'.

--------------------------------------------------
[New Topics]

* bw/realpath-wo-chdir (2016-12-12) 4 commits
- real_path: have callers use real_pathdup and strbuf_realpath
- real_path: create real_pathdup
- real_path: convert real_path_internal to strbuf_realpath
- real_path: resolve symlinks by hand
* bw/pathspec-cleanup (2016-12-14) 16 commits
- pathspec: rename prefix_pathspec to init_pathspec_item
- pathspec: small readability changes
- pathspec: create strip submodule slash helpers
- pathspec: create parse_element_magic helper
- pathspec: create parse_long_magic function
- pathspec: create parse_short_magic function
- pathspec: factor global magic into its own function
- pathspec: simpler logic to prefix original pathspec elements
- pathspec: always show mnemonic and name in unsupported_magic
- pathspec: remove unused variable from unsupported_magic
- pathspec: copy and free owned memory
- pathspec: remove the deprecated get_pathspec function
- ls-tree: convert show_recursive to use the pathspec struct interface
- dir: convert fill_directory to use the pathspec struct interface
- dir: remove struct path_simplify
- mv: remove use of deprecated 'get_pathspec()'

The implementation of "real_path()" was to go there with chdir(2)
and call getcwd(3), but this obviously wouldn't be usable in a
threaded environment. Rewrite it to manually resolve relative
paths including symbolic links in path components.
Code clean-up in the pathspec API.

What's the donness of the topic? Is this ready for 'next'?
Waiting for the (hopefully) final round of review before 'next'.


* jk/quote-env-path-list-component (2016-12-13) 4 commits
- t5547-push-quarantine: run the path separator test on Windows, too
- tmp-objdir: quote paths we add to alternates
- alternates: accept double-quoted paths
- Merge branch 'jk/alt-odb-cleanup' into jk/quote-env-path-list-component
* cp/merge-continue (2016-12-15) 4 commits
- merge: mark usage error strings for translation
- merge: ensure '--abort' option takes no arguments
- completion: add --continue option for merge
- merge: add '--continue' option as a synonym for 'git commit'

A recent update to receive-pack to make it easier to drop garbage
objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
have a pathname with a colon in it (no surprise!), and this in turn
made it impossible to push into a repository at such a path. This
has been fixed by introducing a quoting mechanism used when
appending such a path to the colon-separated list.
"git merge --continue" has been added as a synonym to "git commit"
to conclude a merge that has stopped due to conflicts.

Will merge to 'next'.


* js/normalize-path-copy-ceil (2016-12-13) 1 commit
- normalize_path_copy(): fix pushing to //server/share/dir paths on Windows
* jk/make-tags-find-sources-tweak (2016-12-14) 4 commits
(merged to 'next' on 2016-12-16 at 06d0b0fbfd)
+ Makefile: exclude contrib from FIND_SOURCE_FILES
+ Makefile: match shell scripts in FIND_SOURCE_FILES
+ Makefile: exclude test cruft from FIND_SOURCE_FILES
+ Makefile: reformat FIND_SOURCE_FILES

A pathname that begins with "//" or "\\" on Windows is special but
path normalization logic was unaware of it.
Update the procedure to generate "tags" for developer support.

Will merge to 'next', but I'd appreciate a second set of eyes on this.
Will merge to 'master'.


* jk/parseopt-usage-msg-opt (2016-12-14) 1 commit
- parse-options: print "fatal:" before usage_msg_opt()

The function usage_msg_opt() has been updated to say "fatal:"
before the custom message programs give, when they want to die
with a message about wrong command line options followed by the
standard usage string.

Will merge to 'next'.


* ld/p4-compare-dir-vs-symlink (2016-12-14) 1 commit
- git-p4: avoid crash adding symlinked directory

"git p4" misbehaved when swapping a directory and a symbolic link.

Will merge to 'next'.


* js/prepare-sequencer-more (2016-12-14) 34 commits
- sequencer (rebase -i): write out the final message
- sequencer (rebase -i): write the progress into files
- sequencer (rebase -i): show the progress
- sequencer (rebase -i): suggest --edit-todo upon unknown command
- sequencer (rebase -i): show only failed cherry-picks' output
- sequencer (rebase -i): show only failed `git commit`'s output
- run_command_opt(): optionally hide stderr when the command succeeds
- sequencer (rebase -i): differentiate between comments and 'noop'
- sequencer (rebase -i): implement the 'drop' command
- sequencer (rebase -i): allow rescheduling commands
- sequencer (rebase -i): respect strategy/strategy_opts settings
- sequencer (rebase -i): respect the rebase.autostash setting
- sequencer (rebase -i): run the post-rewrite hook, if needed
- sequencer (rebase -i): record interrupted commits in rewritten, too
- sequencer (rebase -i): copy commit notes at end
- sequencer (rebase -i): set the reflog message consistently
- sequencer (rebase -i): refactor setting the reflog message
- sequencer (rebase -i): allow fast-forwarding for edit/reword
- sequencer (rebase -i): implement the 'reword' command
- sequencer (rebase -i): leave a patch upon error
- sequencer (rebase -i): update refs after a successful rebase
- sequencer (rebase -i): the todo can be empty when continuing
- sequencer (rebase -i): skip some revert/cherry-pick specific code path
- sequencer (rebase -i): remove CHERRY_PICK_HEAD when no longer needed
- sequencer (rebase -i): allow continuing with staged changes
- sequencer (rebase -i): write an author-script file
- sequencer (rebase -i): implement the short commands
- sequencer (rebase -i): add support for the 'fixup' and 'squash' commands
- sequencer (rebase -i): write the 'done' file
- sequencer (rebase -i): learn about the 'verbose' mode
- sequencer (rebase -i): implement the 'exec' command
- sequencer (rebase -i): implement the 'edit' command
- sequencer (rebase -i): implement the 'noop' command
- sequencer: support a new action: 'interactive rebase'

The sequencer has further been extended in preparation to act as a
back-end for "rebase -i".

Waiting for review.


* jk/index-pack-wo-repo-from-stdin (2016-12-16) 4 commits
- index-pack: skip collision check when not in repository
- t: use nongit() function where applicable
- index-pack: complain when --stdin is used outside of a repo
- t5000: extract nongit function to test-lib-functions.sh

"git index-pack --stdin" needs an access to an existing repository,
but "git index-pack file.pack" to generate an .idx file that
corresponds to a packfile does not.

Will merge to 'next'.


* jk/readme-gmane-is-no-more (2016-12-15) 1 commit
(merged to 'next' on 2016-12-16 at 44ad5c5205)
+ README: replace gmane link with public-inbox

Will merge to 'master'.


* lt/shortlog-by-committer (2016-12-16) 2 commits
- shortlog: test and document --committer option
- shortlog: group by committer information

"git shortlog" learned "--committer" option to group commits by
committer, instead of author.

Will merge to 'next'.

--------------------------------------------------
[Stalled]
@ -129,7 +315,6 @@ of the repositories listed at
. copy.c: convert bb_(p)error_msg to error(_errno)
. copy.c: delete unused code in copy_file()
. copy.c: import copy_file() from busybox
(this branch uses nd/worktree-list-fixup; is tangled with sb/submodule-embed-gitdir.)

"git worktree" learned move and remove subcommands.

@ -223,6 +408,48 @@ of the repositories listed at
--------------------------------------------------
[Cooking]

* bw/realpath-wo-chdir (2016-12-12) 4 commits
- real_path: have callers use real_pathdup and strbuf_realpath
- real_path: create real_pathdup
- real_path: convert real_path_internal to strbuf_realpath
- real_path: resolve symlinks by hand
(this branch is used by bw/grep-recurse-submodules.)

The implementation of "real_path()" was to go there with chdir(2)
and call getcwd(3), but this obviously wouldn't be usable in a
threaded environment. Rewrite it to manually resolve relative
paths including symbolic links in path components.

Will merge to 'next'.


* jk/quote-env-path-list-component (2016-12-13) 4 commits
(merged to 'next' on 2016-12-16 at d2cd6008b9)
+ t5547-push-quarantine: run the path separator test on Windows, too
+ tmp-objdir: quote paths we add to alternates
+ alternates: accept double-quoted paths
+ Merge branch 'jk/alt-odb-cleanup' into jk/quote-env-path-list-component

A recent update to receive-pack to make it easier to drop garbage
objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
have a pathname with a colon in it (no surprise!), and this in turn
made it impossible to push into a repository at such a path. This
has been fixed by introducing a quoting mechanism used when
appending such a path to the colon-separated list.

Will merge to 'master'.


* js/normalize-path-copy-ceil (2016-12-16) 1 commit
(merged to 'next' on 2016-12-16 at 634ba4debc)
+ normalize_path_copy(): fix pushing to //server/share/dir on Windows

A pathname that begins with "//" or "\\" on Windows is special but
path normalization logic was unaware of it.

Will merge to 'master'.


* jc/lock-report-on-error (2016-12-07) 3 commits
(merged to 'next' on 2016-12-13 at cb6c07ee92)
+ lockfile: LOCK_REPORT_ON_ERROR
@ -252,7 +479,9 @@ of the repositories listed at
Will merge to 'master'.


* sb/sequencer-abort-safety (2016-12-09) 5 commits
* sb/sequencer-abort-safety (2016-12-14) 6 commits
(merged to 'next' on 2016-12-16 at ec71fb1217)
+ Revert "sequencer: remove useless get_dir() function"
(merged to 'next' on 2016-12-13 at 6107e43d65)
+ sequencer: remove useless get_dir() function
+ sequencer: make sequencer abort safer
@ -324,26 +553,6 @@ of the repositories listed at
Will merge to 'master'.


* ak/lazy-prereq-mktemp (2016-11-29) 1 commit
(merged to 'next' on 2016-12-12 at f346d1f053)
+ t7610: clean up foo.XXXXXX tmpdir

Test code clean-up.

Will merge to 'master'.


* da/mergetool-trust-exit-code (2016-11-29) 2 commits
(merged to 'next' on 2016-12-12 at 28ae202868)
+ mergetools/vimdiff: trust Vim's exit code
+ mergetool: honor mergetool.$tool.trustExitCode for built-in tools

mergetool.<tool>.trustExitCode configuration variable did not apply
to built-in tools, but now it does.

Will merge to 'master'.


* jb/diff-no-index-no-abbrev (2016-12-08) 1 commit
(merged to 'next' on 2016-12-12 at 959981ef50)
+ diff: handle --no-abbrev in no-index case
@ -353,14 +562,6 @@ of the repositories listed at
Will merge to 'master'.


* vk/p4-submit-shelve (2016-11-29) 1 commit
(merged to 'next' on 2016-12-12 at 3fce6df117)
+ git-p4: allow submit to create shelved changelists.
(this branch is used by ld/p4-update-shelve.)

Will merge to 'master'.


* jk/http-walker-limit-redirect-2.9 (2016-12-06) 5 commits
(merged to 'next' on 2016-12-12 at 3e4bcd7bca)
+ http: treat http-alternates like redirects
@ -368,7 +569,7 @@ of the repositories listed at
+ remote-curl: rename shadowed options variable
+ http: always update the base URL for redirects
+ http: simplify update_url_from_redirect
(this branch is used by jk/http-walker-limit-redirect.)
(this branch is used by bw/transport-protocol-policy and jk/http-walker-limit-redirect.)

Transport with dumb http can be fooled into following foreign URLs
that the end user does not intend to, especially with the server
@ -383,7 +584,7 @@ of the repositories listed at
(merged to 'next' on 2016-12-12 at 8b58025e3a)
+ http-walker: complain about non-404 loose object errors
+ Merge branch 'ew/http-walker' into jk/http-walker-limit-redirect
(this branch uses jk/http-walker-limit-redirect-2.9.)
(this branch is used by bw/transport-protocol-policy; uses jk/http-walker-limit-redirect-2.9.)

Update the error messages from the dumb-http client when it fails
to obtain loose objects; we used to give sensible error message
@ -417,50 +618,27 @@ of the repositories listed at
Will merge to 'master'.


* bb/unicode-9.0 (2016-12-13) 6 commits
- unicode_width.h: update the width tables to Unicode 9.0
- update_unicode.sh: remove the plane filter
- update-unicode.sh: automatically download newer definition files
- update_unicode.sh: pin the uniset repo to a known good commit
- update_unicode.sh: remove an unnecessary subshell level
- update_unicode.sh: move it into contrib/update-unicode
* bb/unicode-9.0 (2016-12-14) 6 commits
(merged to 'next' on 2016-12-16 at be2531431a)
+ unicode_width.h: update the width tables to Unicode 9.0
+ update_unicode.sh: remove the plane filter
+ update_unicode.sh: automatically download newer definition files
+ update_unicode.sh: pin the uniset repo to a known good commit
+ update_unicode.sh: remove an unnecessary subshell level
+ update_unicode.sh: move it into contrib/update-unicode

The character width table has been updated to match Unicode 9.0

Will merge to 'next'.


* ld/p4-update-shelve (2016-12-05) 1 commit
(merged to 'next' on 2016-12-12 at 22f6bec94c)
+ git-p4: support updating an existing shelved changelist
(this branch uses vk/p4-submit-shelve.)

Will merge to 'master'.


* ld/p4-worktree (2016-12-13) 1 commit
- git-p4: support git worktrees
(merged to 'next' on 2016-12-16 at 5210ab9973)
+ git-p4: support git worktrees

"git p4" didn't interact with the internal of .git directory
correctly in the modern "git-worktree"-enabled world.

Will merge to 'next'.
Rerolled. Looking good.


* ls/p4-empty-file-on-lfs (2016-12-05) 1 commit
(merged to 'next' on 2016-12-12 at 1fce8e037a)
+ git-p4: fix empty file processing for large file system backend GitLFS

"git p4" LFS support was broken when LFS stores an empty blob.

Will merge to 'master'.


* ls/p4-retry-thrice (2016-12-05) 1 commit
(merged to 'next' on 2016-12-12 at 9462e660a8)
+ git-p4: add config to retry p4 commands; retry 3 times by default

Will merge to 'master'.


@ -580,62 +758,15 @@ of the repositories listed at
What's the doneness of this topic?


* nd/qsort-in-merge-recursive (2016-11-28) 1 commit
(merged to 'next' on 2016-12-12 at e9700f5b93)
+ merge-recursive.c: use string_list_sort instead of qsort

Code simplification.

Will merge to 'master'.


* bw/push-dry-run (2016-11-23) 2 commits
(merged to 'next' on 2016-12-12 at bde7a0f9ae)
+ push: fix --dry-run to not push submodules
+ push: --dry-run updates submodules when --recurse-submodules=on-demand
(this branch uses hv/submodule-not-yet-pushed-fix; is tangled with sb/push-make-submodule-check-the-default.)

"git push --dry-run --recurse-submodule=on-demand" wasn't
"--dry-run" in the submodules.

Will merge to 'master'.


* sb/push-make-submodule-check-the-default (2016-11-29) 2 commits
(merged to 'next' on 2016-12-12 at 1863e05af5)
+ push: change submodule default to check when submodules exist
+ submodule add: extend force flag to add existing repos
(this branch uses hv/submodule-not-yet-pushed-fix; is tangled with bw/push-dry-run.)

Turn the default of "push.recurseSubmodules" to "check" when
submodules seem to be in use.

Will merge to 'master'.


* jk/rev-parse-symbolic-parents-fix (2016-11-16) 1 commit
(merged to 'next' on 2016-12-12 at 6839c1ea28)
+ rev-parse: fix parent shorthands with --symbolic

"git rev-parse --symbolic" failed with a more recent notation like
"HEAD^-1" and "HEAD^!".

Will merge to 'master'.


* nd/worktree-list-fixup (2016-11-28) 5 commits
(merged to 'next' on 2016-12-12 at 1f46421a59)
+ worktree list: keep the list sorted
+ worktree.c: get_worktrees() takes a new flag argument
+ get_worktrees() must return main worktree as first item even on error
+ worktree: reorder an if statement
+ worktree.c: zero new 'struct worktree' on allocation
(this branch is used by nd/worktree-move and sb/submodule-embed-gitdir.)

The output from "git worktree list" was made in readdir() order,
and was unstable.

Will merge to 'master'.
Will cook in 'next'.


* jk/trailers-placeholder-in-pretty (2016-12-11) 2 commits
@ -657,38 +788,28 @@ of the repositories listed at
- test-lib-functions.sh: teach test_commit -C <dir>
- submodule helper: support super prefix
- submodule: use absolute path for computing relative path connecting
(this branch uses nd/worktree-list-fixup; is tangled with nd/worktree-move.)

A new submodule helper "git submodule embedgitdirs" to make it
easier to move embedded .git/ directory for submodules in a
superproject to .git/modules/ (and point the latter with the former
that is turned into a "gitdir:" file) has been added.

Is this now pretty much done and ready for 'next'?
Will merge to 'next'.


* dt/empty-submodule-in-merge (2016-11-17) 1 commit
(merged to 'next' on 2016-12-12 at 6de2350b2b)
+ submodules: allow empty working-tree dirs in merge/cherry-pick

An empty directory in a working tree that can simply be nuked used
to interfere while merging or cherry-picking a change to create a
submodule directory there, which has been fixed..

Will merge to 'master'.


* bw/grep-recurse-submodules (2016-11-22) 6 commits
. grep: search history of moved submodules
. grep: enable recurse-submodules to work on <tree> objects
. grep: optionally recurse into submodules
. grep: add submodules as a grep source type
. submodules: load gitmodules file from commit sha1
. submodules: add helper functions to determine presence of submodules
* bw/grep-recurse-submodules (2016-12-16) 7 commits
- grep: search history of moved submodules
- grep: enable recurse-submodules to work on <tree> objects
- grep: optionally recurse into submodules
- grep: add submodules as a grep source type
- submodules: load gitmodules file from commit sha1
- submodules: add helper to determine if a submodule is initialized
- submodules: add helper to determine if a submodule is populated
(this branch uses bw/realpath-wo-chdir.)

"git grep" learns to optionally recurse into submodules

Will be redone on top of the bw/realpath-wo-chdir.
Will merge to 'next'.


* dt/smart-http-detect-server-going-away (2016-11-18) 2 commits
@ -745,25 +866,6 @@ of the repositories listed at
Will cook in 'next'.


* hv/submodule-not-yet-pushed-fix (2016-11-16) 4 commits
(merged to 'next' on 2016-12-05 at c9d729fca2)
+ submodule_needs_pushing(): explain the behaviour when we cannot answer
+ batch check whether submodule needs pushing into one call
+ serialize collection of refs that contain submodule changes
+ serialize collection of changed submodules
(this branch is used by bw/push-dry-run and sb/push-make-submodule-check-the-default.)

Originally merged to 'next' on 2016-11-21

The code in "git push" to compute if any commit being pushed in the
superproject binds a commit in a submodule that hasn't been pushed
out was overly inefficient, making it unusable even for a small
project that does not have any submodule but have a reasonable
number of refs.

Will cook in 'next'.


* kn/ref-filter-branch-list (2016-12-08) 20 commits
- branch: implement '--format' option
- branch: use ref-filter printing APIs
@ -793,19 +895,20 @@ of the repositories listed at
and also saw a "squash this in when you reroll", but I lost track.


* bw/transport-protocol-policy (2016-12-05) 5 commits
* bw/transport-protocol-policy (2016-12-15) 6 commits
- http: respect protocol.*.allow=user for http-alternates
- transport: add from_user parameter to is_transport_allowed
- http: create function to get curl allowed protocols
- http: always warn if libcurl version is too old
- transport: add protocol policy config option
- http: always warn if libcurl version is too old
- lib-proto-disable: variable name fix
(this branch uses jk/http-walker-limit-redirect and jk/http-walker-limit-redirect-2.9.)

Finer-grained control of what protocols are allowed for transports
during clone/fetch/push have been enabled via a new configuration
mechanism.

What's the doneness of this topic? Did we agree that it should be
rebased on top of Peff's http-walker-limit-redirect series?
Will merge to 'next'.


* jt/fetch-no-redundant-tag-fetch-map (2016-11-11) 1 commit
@ -997,13 +1100,13 @@ of the repositories listed at


* sb/attr (2016-11-11) 35 commits
- completion: clone can initialize specific submodules
- clone: add --init-submodule=<pathspec> switch
- submodule update: add `--init-default-path` switch
- pathspec: allow escaped query values
- pathspec: allow querying for attributes
- pathspec: move prefix check out of the inner loop
- pathspec: move long magic parsing out of prefix_pathspec
. completion: clone can initialize specific submodules
. clone: add --init-submodule=<pathspec> switch
. submodule update: add `--init-default-path` switch
. pathspec: allow escaped query values
. pathspec: allow querying for attributes
. pathspec: move prefix check out of the inner loop
. pathspec: move long magic parsing out of prefix_pathspec
- Documentation: fix a typo
- attr: keep attr stack for each check
- attr: convert to new threadsafe API
@ -1038,10 +1141,11 @@ of the repositories listed at
Building on top of the updated API, the pathspec machinery learned
to select only paths with given attributes set.

Waiting for review.
The parts near the tip about pathspec would need to work better
with bw/pathspec-cleanup topic and has been dropped for now.


* va/i18n-perl-scripts (2016-11-11) 16 commits
* va/i18n-perl-scripts (2016-12-14) 16 commits
- i18n: difftool: mark warnings for translation
- i18n: send-email: mark composing message for translation
- i18n: send-email: mark string with interpolation for translation
@ -1061,7 +1165,7 @@ of the repositories listed at

Porcelain scripts written in Perl are getting internationalized.

Waiting for review.
Will merge to 'next'.


* jc/latin-1 (2016-09-26) 2 commits
@ -1098,13 +1202,14 @@ of the repositories listed at


* jc/pull-rebase-ff (2016-11-29) 1 commit
- pull: fast-forward "pull --rebase=true"
(merged to 'next' on 2016-12-16 at c1a0cedd9e)
+ pull: fast-forward "pull --rebase=true"

"git pull --rebase", when there is no new commits on our side since
we forked from the upstream, should be able to fast-forward without
invoking "git rebase", but it didn't.

Will merge to 'next'.
Will merge to 'master'.


* jc/merge-drop-old-syntax (2015-04-29) 1 commit