I Use This!
Very High Activity

News

Analyzed 28 days ago. based on code collected 28 days ago.
Posted 2 days ago by Johannes Schindelin
MIME-Version: 1.0 Fcc: Sent Dear Git users, It is my pleasure to announce that Git for Windows 2.11.0 is available from: https://git-for-windows.github.io/ Changes since Git for Windows v2.10.2 (November 2nd 2016) New Features * Comes with ... [More] Git v2.11.0. * Performance of git add in large worktrees was improved. * A new, experimental, builtin version of the difftool is available as an opt-in feature. * Support has been added to generate project files for Visual Studio 2010 and later. Bug Fixes * The preload-index feature now behaves much better in conjunction with sparse checkouts. * When encountering a symbolic link, Git now always tries to read it, not only when core.symlinks = true. * The regression where Git would not interpret non-ASCII characters passed from a CMD window correctly has been fixed. * Performance of the cache of case-insensitive file names has been improved. * When building with MS Visual C, release builds are now properly optimized. * git cvsexportcommit now also works with CVSNT. * Git's Perl no longer gets confused by externally-set PERL5LIB. * The uninstaller no longer leaves an empty Git\mingw64 folder behind . * The installer now actually records whether the user chose to enable or disable the Git Credential Manager. * A certain scenario that could cause a crash in cherry-pick no longer causes that. Filename | SHA-256 -------- | ------- Git-2.11.0-64-bit.exe | fd1937ea8468461d35d9cabfcdd2daa3a74509dc9213c43c2b9615e8f0b85086 Git-2.11.0-32-bit.exe | 2a6083479538c4fe454336660fce96346ee3cf46f99ce08a666d4635539239d7 PortableGit-2.11.0-64-bit.7z.exe | a86cc4babfe204cc91408053b517827b4a93e6c659b85ab30910eda0e38bfc19 PortableGit-2.11.0-32-bit.7z.exe | fccec9350c1cb58a5e6d84d307d4f9f43ab9d58d93c8de67056416539d199002 MinGit-2.11.0-64-bit.zip | f31b0135e11e425555fb34779da3345ce8d32490fdd0a33b6f5ae8d74bae20b6 MinGit-2.11.0-32-bit.zip | 48e363cb6ce867a8004056a95da57f7c330ab79dbd26e4895c2aaeb4aec3b3a0 Git-2.11.0-64-bit.tar.bz2 | e62263ff734dbb071819dfcc33e9f443f9a445cde54d0102f6d164d5df5ece6c Git-2.11.0-32-bit.tar.bz2 | 43dda49d4c7305d18b9f0612f66ba096ca2881a8ebf7b41cfb358d9a05fedef9 Ciao, Johannes [Less]
Posted 4 days ago by Junio C Hamano
The latest feature release Git v2.11.0 is now available at the usual places. It is comprised of 673 non-merge commits since v2.10.0, contributed by 74 people, 15 of which are new faces. The tarballs are found at: ... [More] https://www.kernel.org/pub/software/scm/git/ The following public repositories all have a copy of the 'v2.11.0' tag and the 'master' branch that the tag points at: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = git://git.sourceforge.jp/gitroot/git-core/git.git url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core url = https://github.com/gitster/git New contributors whose contributions weren't in v2.10.0 are as follows. Welcome to the Git development community! Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie, Gavin Lambert, Ian Kelling, Jeff Hostetler, jfbu, Mantas Mikulėnas, Petr Stodulka, Satoshi Yasushima, Stefan Christ, Vegard Nossum, yaras, and Younes Khoudli. Returning contributors who helped this release are as follows. Thanks for your continued support. Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie, Alex Riesen, Anders Kaseorg, Andreas Schwab, Beat Bolli, Ben North, brian m. carlson, Changwoo Ryu, Chris Packham, Christian Couder, David Aguilar, David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia Pinto, Eric Wong, Jacob Keller, Jakub Narębski, Jean-Noel Avila, Jean-Noël AVILA, Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Josh Triplett, Junio C Hamano, Karsten Blees, Kevin Daudt, Kirill Smelkov, Lars Schneider, Linus Torvalds, Marc Branchaud, Matthieu Moy, Michael Haggerty, Michael J Gruber, Mike Ralphson, Nguyễn Thái Ngọc Duy, Olaf Hering, Orgad Shaneh, Patrick Steinhardt, Pat Thoyts, Peter Krefting, Philip Oakley, Pranit Bauva, Ralf Thielow, Ray Chen, René Scharfe, Ronnie Sahlberg, Stefan Beller, SZEDER Gábor, Thomas Gummerer, Tobias Klauser, Trần Ngọc Quân, Vasco Almeida, and Дилян Палаузов. ---------------------------------------------------------------- Git 2.11 Release Notes ====================== Backward compatibility notes. * An empty string used as a pathspec element has always meant 'everything matches', but it is too easy to write a script that finds a path to remove in $path and run 'git rm "$paht"' by mistake (when the user meant to give "$path"), which ends up removing everything. This release starts warning about the use of an empty string that is used for 'everything matches' and asks users to use a more explicit '.' for that instead. The hope is that existing users will not mind this change, and eventually the warning can be turned into a hard error, upgrading the deprecation into removal of this (mis)feature. * The historical argument order "git merge HEAD ..." has been deprecated for quite some time, and will be removed in the next release (not this one). * The default abbreviation length, which has historically been 7, now scales as the repository grows, using the approximate number of objects in the repository and a bit of math around the birthday paradox. The logic suggests to use 12 hexdigits for the Linux kernel, and 9 to 10 for Git itself. Updates since v2.10 ------------------- UI, Workflows & Features * Comes with new version of git-gui, now at its 0.21.0 tag. * "git format-patch --cover-letter HEAD^" to format a single patch with a separate cover letter now numbers the output as [PATCH 0/1] and [PATCH 1/1] by default. * An incoming "git push" that attempts to push too many bytes can now be rejected by setting a new configuration variable at the receiving end. * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand", which was not intuitive, given that "git nosuchcommand" said "git: 'nosuchcommand' is not a git command". * "git clone --recurse-submodules --reference $path $URL" is a way to reduce network transfer cost by borrowing objects in an existing $path repository when cloning the superproject from $URL; it learned to also peek into $path for presence of corresponding repositories of submodules and borrow objects from there when able. * The "git diff --submodule={short,log}" mechanism has been enhanced to allow "--submodule=diff" to show the patch between the submodule commits bound to the superproject. * Even though "git hash-objects", which is a tool to take an on-filesystem data stream and put it into the Git object store, can perform "outside-world-to-Git" conversions (e.g. end-of-line conversions and application of the clean-filter), and it has had this feature on by default from very early days, its reverse operation "git cat-file", which takes an object from the Git object store and externalizes it for consumption by the outside world, lacked an equivalent mechanism to run the "Git-to-outside-world" conversion. The command learned the "--filters" option to do so. * Output from "git diff" can be made easier to read by intelligently selecting which lines are common and which lines are added/deleted when the lines before and after the changed section are the same. A command line option (--indent-heuristic) and a configuration variable (diff.indentHeuristic) are added to help with the experiment to find good heuristics. * In some projects, it is common to use "[RFC PATCH]" as the subject prefix for a patch meant for discussion rather than application. A new format-patch option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH" to help the participants of such projects. * "git add --chmod={+,-}x " only changed the executable bit for paths that are either new or modified. This has been corrected to change the executable bit for all paths that match the given pathspec. * When "git format-patch --stdout" output is placed as an in-body header and it uses RFC2822 header folding, "git am" fails to put the header line back into a single logical line. The underlying "git mailinfo" was taught to handle this properly. * "gitweb" can spawn "highlight" to show blob contents with (programming) language-specific syntax highlighting, but only when the language is known. "highlight" can however be told to guess the language itself by giving it "--force" option, which has been enabled. * "git gui" l10n to Portuguese. * When given an abbreviated object name that is not (or more realistically, "no longer") unique, we gave a fatal error "ambiguous argument". This error is now accompanied by a hint that lists the objects beginning with the given prefix. During the course of development of this new feature, numerous minor bugs were uncovered and corrected, the most notable one of which is that we gave "short SHA1 xxxx is ambiguous." twice without good reason. * "git log rev^..rev" is an often-used revision range specification to show what was done on a side branch merged at rev. This has gained a short-hand "rev^-1". In general "rev^-$n" is the same as "^rev^$n rev", i.e. what has happened on other branches while the history leading to nth parent was looking the other way. * In recent versions of cURL, GSSAPI credential delegation is disabled by default due to CVE-2011-2192; introduce a http.delegation configuration variable to selectively allow enabling this. (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint). * "git mergetool" learned to honor "-O" to control the order of paths to present to the end user. * "git diff/log --ws-error-highlight=" lacked the corresponding configuration variable (diff.wsErrorHighlight) to set it by default. * "git ls-files" learned the "--recurse-submodules" option to get a listing of tracked files across submodules (i.e. this only works with the "--cached" option, not for listing untracked or ignored files). This would be a useful tool to sit on the upstream side of a pipe that is read with xargs to work on all working tree files from the top-level superproject. * A new credential helper that talks via "libsecret" with implementations of XDG Secret Service API has been added to contrib/credential/. * The GPG verification status shown by the "%G?" pretty format specifier was not rich enough to differentiate a signature made by an expired key, a signature made by a revoked key, etc. New output letters have been assigned to express them. * In addition to purely abbreviated commit object names, "gitweb" learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787) into clickable links in its output. * "git commit" created an empty commit when invoked with an index consisting solely of intend-to-add paths (added with "git add -N"). It now requires the "--allow-empty" option to create such a commit. The same logic prevented "git status" from showing such paths as "new files" in the "Changes not staged for commit" section. * The smudge/clean filter API spawns an external process to filter the contents of each path that has a filter defined. A new type of "process" filter API has been added to allow the first request to run the filter for a path to spawn a single process, and all filtering is served by this single process for multiple paths, reducing the process creation overhead. * The user always has to say "stash@{$N}" when naming a single element in the default location of the stash, i.e. reflogs in refs/stash. The "git stash" command learned to accept "git stash apply 4" as a short-hand for "git stash apply stash@{4}". Performance, Internal Implementation, Development Support etc. * The delta-base-cache mechanism has been a key to the performance in a repository with a tightly packed packfile, but it did not scale well even with a larger value of core.deltaBaseCacheLimit. * Enhance "git status --porcelain" output by collecting more data on the state of the index and the working tree files, which may further be used to teach git-prompt (in contrib/) to make fewer calls to git. * Extract a small helper out of the function that reads the authors script file "git am" internally uses. (merge a77598e jc/am-read-author-file later to maint). * Lift calls to exit(2) and die() higher in the callchain in sequencer.c files so that more helper functions in it can be used by callers that want to handle error conditions themselves. * "git am" has been taught to make an internal call to "git apply"'s innards without spawning the latter as a separate process. * The ref-store abstraction was introduced to the refs API so that we can plug in different backends to store references. * The "unsigned char sha1[20]" to "struct object_id" conversion continues. Notable changes in this round includes that ce->sha1, i.e. the object name recorded in the cache_entry, turns into an object_id. * JGit can show a fake ref "capabilities^{}" to "git fetch" when it does not advertise any refs, but "git fetch" was not prepared to see such an advertisement. When the other side disconnects without giving any ref advertisement, we used to say "there may not be a repository at that URL", but we may have seen other advertisements like "shallow" and ".have" in which case we definitely know that a repository is there. The code to detect this case has also been updated. * Some codepaths in "git pack-objects" were not ready to use an existing pack bitmap; now they are and as a result they have become faster. * The codepath in "git fsck" to detect malformed tree objects has been updated not to die but keep going after detecting them. * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of the time third parameter is redundant. A new QSORT() macro lets us omit it. * "git pack-objects" in a repository with many packfiles used to spend a lot of time looking for/at objects in them; the accesses to the packfiles are now optimized by checking the most-recently-used packfile first. (merge c9af708b1a jk/pack-objects-optim-mru later to maint). * Codepaths involved in interacting alternate object stores have been cleaned up. * In order for the receiving end of "git push" to inspect the received history and decide to reject the push, the objects sent from the sending end need to be made available to the hook and the mechanism for the connectivity check, and this was done traditionally by storing the objects in the receiving repository and letting "git gc" expire them. Instead, store the newly received objects in a temporary area, and make them available by reusing the alternate object store mechanism to them only while we decide if we accept the check, and once we decide, either migrate them to the repository or purge them immediately. * The require_clean_work_tree() helper was recreated in C when "git pull" was rewritten from shell; the helper is now made available to other callers in preparation for upcoming "rebase -i" work. * "git upload-pack" had its code cleaned-up and performance improved by reducing use of timestamp-ordered commit-list, which was replaced with a priority queue. * "git diff --no-index" codepath has been updated not to try to peek into a .git/ directory that happens to be under the current directory, when we know we are operating outside any repository. * Update of the sequencer codebase to make it reusable to reimplement "rebase -i" continues. * Git generally does not explicitly close file descriptors that were open in the parent process when spawning a child process, but most of the time the child does not want to access them. As Windows does not allow removing or renaming a file that has a file descriptor open, a slow-to-exit child can even break the parent process by holding onto them. Use O_CLOEXEC flag to open files in various codepaths. * Update "interpret-trailers" machinery and teach it that people in the real world write all sorts of cruft in the "trailer" that was originally designed to have the neat-o "Mail-Header: like thing" and nothing else. Also contains various documentation updates and code clean-ups. Fixes since v2.10 ----------------- Unless otherwise noted, all the fixes since v2.9 in the maintenance track are contained in this release (see the maintenance releases' notes for details). * Clarify various ways to specify the "revision ranges" in the documentation. * "diff-highlight" script (in contrib/) learned to work better with "git log -p --graph" output. * The test framework left the number of tests and success/failure count in the t/test-results directory, keyed by the name of the test script plus the process ID. The latter however turned out not to serve any useful purpose. The process ID part of the filename has been removed. * Having a submodule whose ".git" repository is somehow corrupt caused a few commands that recurse into submodules to loop forever. * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but the resulting repository becomes an invalid one. Teach the command to forbid removal of HEAD. * A test spawned a short-lived background process, which sometimes prevented the test directory from getting removed at the end of the script on some platforms. * Update a few tests that used to use GIT_CURL_VERBOSE to use the newer GIT_TRACE_CURL. * "git pack-objects --include-tag" was taught that when we know that we are sending an object C, we want a tag B that directly points at C but also a tag A that points at the tag B. We used to miss the intermediate tag B in some cases. * Update Japanese translation for "git-gui". * "git fetch http::/site/path" did not die correctly and segfaulted instead. * "git commit-tree" stopped reading commit.gpgsign configuration variable that was meant for Porcelain "git commit" in Git 2.9; we forgot to update "git gui" to look at the configuration to match this change. * "git add --chmod={+,-}x" added recently lacked documentation, which has been corrected. * "git log --cherry-pick" used to include merge commits as candidates to be matched up with other commits, resulting a lot of wasted time. The patch-id generation logic has been updated to ignore merges and avoid the wastage. * The http transport (with curl-multi option, which is the default these days) failed to remove curl-easy handle from a curlm session, which led to unnecessary API failures. * There were numerous corner cases in which the configuration files are read and used or not read at all depending on the directory a Git command was run, leading to inconsistent behaviour. The code to set-up repository access at the beginning of a Git process has been updated to fix them. (merge 4d0efa1 jk/setup-sequence-update later to maint). * "git diff -W" output needs to extend the context backward to include the header line of the current function and also forward to include the body of the entire current function up to the header line of the next one. This process may have to merge two adjacent hunks, but the code forgot to do so in some cases. * Performance tests done via "t/perf" did not use the right build configuration if the user relied on autoconf generated configuration. * "git format-patch --base=..." feature that was recently added showed the base commit information after the "-- " e-mail signature line, which turned out to be inconvenient. The base information has been moved above the signature line. * More i18n. * Even when "git pull --rebase=preserve" (and the underlying "git rebase --preserve") can complete without creating any new commits (i.e. fast-forwards), it still insisted on having usable ident information (read: user.email is set correctly), which was less than nice. As the underlying commands used inside "git rebase" would fail with a more meaningful error message and advice text when the bogus ident matters, this extra check was removed. * "git gc --aggressive" used to limit the delta-chain length to 250, which is way too deep for gaining additional space savings and is detrimental for runtime performance. The limit has been reduced to 50. * Documentation for individual configuration variables to control use of color (like `color.grep`) said that their default value is 'false', instead of saying their default is taken from `color.ui`. When we updated the default value for color.ui from 'false' to 'auto' quite a while ago, all of them broke. This has been corrected. * The pretty-format specifier "%C(auto)" used by the "log" family of commands to enable coloring of the output is taught to also issue a color-reset sequence to the output. * A shell script example in check-ref-format documentation has been fixed. * "git checkout " does not follow the usual disambiguation rules when the can be both a rev and a path, to allow checking out a branch 'foo' in a project that happens to have a file 'foo' in the working tree without having to disambiguate. This was poorly documented and the check was incorrect when the command was run from a subdirectory. * Some codepaths in "git diff" used regexec(3) on a buffer that was mmap(2)ed, which may not have a terminating NUL, leading to a read beyond the end of the mapped region. This was fixed by introducing a regexec_buf() helper that takes a pair with REG_STARTEND extension. * The procedure to build Git on Mac OS X for Travis CI hardcoded the internal directory structure we assumed HomeBrew uses, which was a no-no. The procedure has been updated to ask HomeBrew things we need to know to fix this. * When "git rebase -i" is given a broken instruction, it told the user to fix it with "--edit-todo", but didn't say what the step after that was (i.e. "--continue"). * Documentation around tools to import from CVS was fairly outdated. * "git clone --recurse-submodules" lost the progress eye-candy in a recent update, which has been corrected. * A low-level function verify_packfile() was meant to show errors that were detected without dying itself, but under some conditions it didn't and died instead, which has been fixed. * When "git fetch" tries to find where the history of the repository it runs in has diverged from what the other side has, it has a mechanism to avoid digging too deep into irrelevant side branches. This however did not work well over the "smart-http" transport due to a design bug, which has been fixed. * In the codepath that comes up with the hostname to be used in an e-mail when the user didn't tell us, we looked at the ai_canonname field in struct addrinfo without making sure it is not NULL first. * "git worktree", even though it used the default_abbrev setting that ought to be affected by the core.abbrev configuration variable, ignored the variable setting. The command has been taught to read the default set of configuration variables to correct this. * "git init" tried to record core.worktree in the repository's 'config' file when the GIT_WORK_TREE environment variable was set and it was different from where GIT_DIR appears as ".git" at its top, but the logic was faulty when .git is a "gitdir:" file that points at the real place, causing trouble in working trees that are managed by "git worktree". This has been corrected. * Codepaths that read from an on-disk loose object were too loose in validating that they are reading a proper object file and sometimes read past the data they read from the disk, which has been corrected. H/t to Gustavo Grieco for reporting. * The original command line syntax for "git merge", which was "git merge HEAD ...", has been deprecated for quite some time, and "git gui" was the last in-tree user of the syntax. This is finally fixed, so that we can move forward with the deprecation. * An author name that has a backslash-quoted double quote in the human readable part ("My \"double quoted\" name"), was not unquoted correctly while applying a patch from a piece of e-mail. * Doc update to clarify what "log -3 --reverse" does. * Almost everybody uses DEFAULT_ABBREV to refer to the default setting for the abbreviation, but "git blame" peeked into underlying variable bypassing the macro for no good reason. * The "graph" API used in "git log --graph" miscounted the number of output columns consumed so far when drawing a padding line, which has been fixed; this did not affect any existing code as nobody tried to write anything after the padding on such a line, though. * The code that parses the format parameter of the for-each-ref command has seen a micro-optimization. * When we started to use cURL to talk to an imap server, we forgot to explicitly add imap(s):// before the destination. To some folks, that didn't work and the library tried to make HTTP(s) requests instead. * The ./configure script generated from configure.ac was taught how to detect support of SSL by libcurl better. * The command-line completion script (in contrib/) learned to complete "git cmd ^mas" to complete the negative end of reference to "git cmd ^master". (merge 49416ad22a cp/completion-negative-refs later to maint). * The existing "git fetch --depth=" option was hard to use correctly when making the history of an existing shallow clone deeper. A new option, "--deepen=", has been added to make this easier to use. "git clone" also learned "--shallow-since=" and "--shallow-exclude=" options to make it easier to specify "I am interested only in the recent N months worth of history" and "Give me only the history since that version". (merge cccf74e2da nd/shallow-deepen later to maint). * "git blame --reverse OLD path" is now DWIMmed to show how lines in path in an old revision OLD have survived up to the current commit. (merge e1d09701a4 jc/blame-reverse later to maint). * The http.emptyauth configuration variable is a way to allow an empty username to pass when attempting to authenticate using mechanisms like Kerberos. We took an unspecified (NULL) username and sent ":" (i.e. no username, no password) to CURLOPT_USERPWD, but did not do the same when the username is explicitly set to an empty string. * "git clone" of a local repository can be done at the filesystem level, but the codepath did not check errors while copying and adjusting the file that lists alternate object stores. * Documentation for "git commit" was updated to clarify that "commit -p " adds to the current contents of the index to come up with what to commit. * A stray symbolic link in the $GIT_DIR/refs/ directory could make name resolution loop forever, which has been corrected. * The "submodule..path" stored in .gitmodules is never copied to .git/config and such a key in .git/config has no meaning, but the documentation described it next to submodule..url as if both belong to .git/config. This has been fixed. * In a worktree created via "git worktree", "git checkout" attempts to protect users from confusion by refusing to check out a branch that is already checked out in another worktree. However, this also prevented checking out a branch which is designated as the primary branch of a bare repository, in a worktree that is connected to the bare repository. The check has been corrected to allow it. * "git rebase" immediately after "git clone" failed to find the fork point from the upstream. * When fetching from a remote that has many tags that are irrelevant to branches we are following, we used to waste way too many cycles checking if the object pointed at by a tag (that we are not going to fetch!) exists in our repository too carefully. * Protect our code from over-eager compilers. * Recent git allows submodule..branch to use a special token "." instead of the branch name; the documentation has been updated to describe it. * "git send-email" attempts to pick up valid e-mails from the trailers, but people in the real world write non-addresses there, like "Cc: Stable # 4.8+", which broke the output depending on the availability and vintage of the Mail::Address perl module. (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint). * The Travis CI configuration we ship ran the tests with the --verbose option but this risks non-TAP output that happens to be "ok" to be misinterpreted as TAP signalling a test that passed. This resulted in unnecessary failures. This has been corrected by introducing a new mode to run our tests in the test harness to send the verbose output separately to the log file. * Some AsciiDoc formatters mishandle a displayed illustration with tabs in it. Adjust a few of them in merge-base documentation to work around them. * Fixed a minor regression in "git submodule" that was introduced when more helper functions were reimplemented in C. (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint). * The code that we have used for the past 10+ years to cycle 4-element ring buffers turns out to be not quite portable in theoretical world. (merge bb84735c80 rs/ring-buffer-wraparound later to maint). * "git daemon" used fixed-length buffers to turn URLs to the repository the client asked for into the server side directory paths, using snprintf() to avoid overflowing these buffers, but allowed possibly truncated paths to the directory. This has been tightened to reject such a request that causes an overlong path to be served. (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint). * Recent update to git-sh-setup (a library of shell functions that are used by our in-tree scripted Porcelain commands) included another shell library git-sh-i18n without specifying where it is, relying on the $PATH. This has been fixed to be more explicit by prefixing with $(git --exec-path) output. (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint). * Fix for a racy false-positive test failure. (merge fdf4f6c79b as/merge-attr-sleep later to maint). * Portability update and workaround for builds on recent Mac OS X. (merge a296bc0132 ls/macos-update later to maint). * Using a %(HEAD) placeholder in "for-each-ref --format=" option caused the command to segfault when on an unborn branch. (merge 84679d470d jc/for-each-ref-head-segfault-fix later to maint). * "git rebase -i" did not work well with the core.commentchar configuration variable for two reasons, both of which have been fixed. (merge 882cd23777 js/rebase-i-commentchar-fix later to maint). * Other minor doc, test and build updates and code cleanups. (merge 5c238e29a8 jk/common-main later to maint). (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint). (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint). (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint). (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint). (merge 28fab7b23d nd/test-helpers later to maint). (merge c2bb0c1d1e rs/cocci later to maint). (merge 3285b7badb ps/common-info-doc later to maint). (merge 2b090822e8 nd/worktree-lock later to maint). (merge 4bd488ea7c jk/create-branch-remove-unused-param later to maint). (merge 974e0044d6 tk/diffcore-delta-remove-unused later to maint). ---------------------------------------------------------------- Changes since v2.10.0 are as follows: Aaron M Watson (1): stash: allow stashes to be referenced by index only Alex Henrie (6): am: put spaces around pipe in usage string cat-file: put spaces around pipes in usage string git-rebase--interactive: fix English grammar git-merge-octopus: do not capitalize "octopus" unpack-trees: do not capitalize "working" l10n: ca.po: update translation Alex Riesen (2): git-gui: support for $FILENAMES in tool definitions git-gui: ensure the file in the diff pane is in the list of selected files Alexander Shopov (2): git-gui i18n: Updated Bulgarian translation (565,0f,0u) git-gui: Mark 'All' in remote.tcl for translation Anders Kaseorg (3): imap-send: Tell cURL to use imap:// or imaps:// pre-receive.sample: mark it executable git-sh-setup: be explicit where to dot-source git-sh-i18n from. Andreas Schwab (2): t6026-merge-attr: don't fail if sleep exits early t6026-merge-attr: ensure that the merge driver was called Beat Bolli (1): SubmittingPatches: use gitk's "Copy commit summary" format Ben North (1): git-worktree.txt: fix typo "to"/"two", and add comma Brandon Williams (6): pathspec: remove unnecessary function prototypes git: make super-prefix option ls-files: optionally recurse into submodules ls-files: pass through safe options for --recurse-submodules ls-files: add pathspec matching for submodules submodules doc: update documentation for "." used for submodule branches Brian Henderson (3): diff-highlight: add some tests diff-highlight: add failing test for handling --graph output diff-highlight: add support for --graph output Changwoo Ryu (1): l10n: ko.po: Update Korean translation Chris Packham (1): completion: support excluding refs Christian Couder (43): apply: make some names more specific apply: move 'struct apply_state' to apply.h builtin/apply: make apply_patch() return -1 or -128 instead of die()ing builtin/apply: read_patch_file() return -1 instead of die()ing builtin/apply: make find_header() return -128 instead of die()ing builtin/apply: make parse_chunk() return a negative integer on error builtin/apply: make parse_single_patch() return -1 on error builtin/apply: make parse_whitespace_option() return -1 instead of die()ing builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing builtin/apply: move init_apply_state() to apply.c apply: make init_apply_state() return -1 instead of exit()ing builtin/apply: make check_apply_state() return -1 instead of die()ing builtin/apply: move check_apply_state() to apply.c builtin/apply: make apply_all_patches() return 128 or 1 on error builtin/apply: make parse_traditional_patch() return -1 on error builtin/apply: make gitdiff_*() return 1 at end of header builtin/apply: make gitdiff_*() return -1 on error builtin/apply: change die_on_unsafe_path() to check_unsafe_path() builtin/apply: make build_fake_ancestor() return -1 on error builtin/apply: make remove_file() return -1 on error builtin/apply: make add_conflicted_stages_file() return -1 on error builtin/apply: make add_index_file() return -1 on error builtin/apply: make create_file() return -1 on error builtin/apply: make write_out_one_result() return -1 on error builtin/apply: make write_out_results() return -1 on error unpack-objects: add --max-input-size= option builtin/apply: make try_create_file() return -1 on error builtin/apply: make create_one_file() return -1 on error builtin/apply: rename option parsing functions apply: rename and move opt constants to apply.h apply: move libified code from builtin/apply.c to apply.{c,h} apply: make some parsing functions static again apply: use error_errno() where possible apply: make it possible to silently apply apply: don't print on stdout in verbosity_silent mode usage: add set_warn_routine() usage: add get_error_routine() and get_warn_routine() apply: change error_routine when silent apply: refactor `git apply` option parsing apply: pass apply state to build_fake_ancestor() apply: learn to use a different index file builtin/am: use apply API in run_apply() split-index: s/eith/with/ typo fix David Aguilar (4): mergetool: add copyright mergetool: move main program flow into a main() function mergetool: honor diff.orderFile mergetool: honor -O David Turner (11): rename_ref_available(): add docstring refs: add methods for reflog refs: add method for initial ref transaction commit refs: make delete_refs() virtual refs: add methods to init refs db refs: add method to rename refs refs: make lock generic refs: implement iteration over only per-worktree refs add David Turner's Two Sigma address fsck: handle bad trees like other errors http: http.emptyauth should allow empty (not just NULL) usernames Dennis Kaarsemaker (1): worktree: allow the main brach of a bare repository to be checked out Dimitriy Ryazantcev (4): l10n: ru.po: update Russian translation git-gui: Update Russian translation l10n: ru.po: update Russian translation l10n: ru.po: update Russian translation Elia Pinto (6): t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var test-lib.sh: preserve GIT_TRACE_CURL from the environment t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var git-check-ref-format.txt: fixup documentation git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution Emily Xie (1): pathspec: warn on empty strings as pathspec Eric Wong (5): http: warn on curl_multi_add_handle failures http: consolidate #ifdefs for curl_multi_remove_handle http: always remove curl easy from curlm session on release git-svn: reduce scope of input record separator change git-svn: "git worktree" awareness Gavin Lambert (1): git-svn: do not reuse caches memoized for a different architecture Ian Kelling (2): gitweb: remove unused guess_file_syntax() parameter gitweb: use highlight's shebang detection Jacob Keller (9): format-patch: show 0/1 and 1/1 for singleton patch with cover letter cache: add empty_tree_oid object and helper function graph: add support for --line-prefix on all graph-aware output diff: prepare for additional submodule formats allow do_submodule_path to work even if submodule isn't checked out submodule: convert show_submodule_summary to use struct object_id * submodule: refactor show_submodule_summary with helper function diff: teach diff to display submodule difference with an inline diff rev-list: use hdr_termination instead of a always using a newline Jakub Narębski (1): configure.ac: improve description of NO_REGEX test Jean-Noel Avila (1): l10n: fr.po v2.11.0_rnd1 Jean-Noël AVILA (1): i18n: i18n: diff: mark die messages for translation Jeff Hostetler (9): status: rename long-format print routines status: cleanup API to wt_status_print status: support --porcelain[=] status: collect per-file data for --porcelain=v2 status: print per-file porcelain v2 status data status: print branch info with --porcelain=v2 --branch git-status.txt: describe --porcelain=v2 format test-lib-functions.sh: add lf_to_nul helper status: unit tests for --porcelain=v2 Jeff King (117): rebase-interactive: drop early check for valid ident provide an initializer for "struct object_info" sha1_file: make packed_object_info public pack-objects: break delta cycles before delta-search phase pack-objects: use mru list when iterating over packs gc: default aggressive depth to 50 cache_or_unpack_entry: drop keep_cache parameter clear_delta_base_cache_entry: use a more descriptive name release_delta_base_cache: reuse existing detach function delta_base_cache: use list.h for LRU delta_base_cache: drop special treatment of blobs delta_base_cache: use hashmap.h t/perf: add basic perf tests for delta base cache index-pack: add --max-input-size= option receive-pack: allow a maximum input size to be specified test-lib: drop PID from test-results/*.count diff-highlight: ignore test cruft diff-highlight: add multi-byte tests diff-highlight: avoid highlighting combined diffs error_errno: use constant return similar to error() color_parse_mem: initialize "struct color" temporary t5305: move cleanup into test block t5305: drop "dry-run" of unpack-objects t5305: use "git -C" t5305: simplify packname handling pack-objects: walk tag chains for --include-tag remote-curl: handle URLs without protocol patch-ids: turn off rename detection add_delta_base_cache: use list_for_each_safe patch-ids: refuse to compute patch-id for merge commit hash-object: always try to set up the git repository patch-id: use RUN_SETUP_GENTLY diff: skip implicit no-index check when given --no-index diff: handle --no-index prefixes consistently diff: always try to set up the repository pager: remove obsolete comment pager: stop loading git_default_config() pager: make pager_program a file-local static pager: use callbacks instead of configset pager: handle early config t1302: use "git -C" test-config: setup git directory config: only read .git/config from configured repos init: expand comments explaining config trickery init: reset cached config when entering new repo t1007: factor out repeated setup verify_packfile: check pack validity before accessing data clone: pass --progress decision to recursive submodules docs/cvsimport: prefer cvs-fast-export to parsecvs docs/cvs-migration: update link to cvsps homepage docs/cvs-migration: mention cvsimport caveats ident: handle NULL ai_canonname get_sha1: detect buggy calls with multiple disambiguators get_sha1: avoid repeating ourselves via ONLY_TO_DIE get_sha1: propagate flags to child functions get_short_sha1: parse tags when looking for treeish get_short_sha1: refactor init of disambiguation code get_short_sha1: NUL-terminate hex prefix get_short_sha1: mark ambiguity error for translation sha1_array: let callbacks interrupt iteration for_each_abbrev: drop duplicate objects get_short_sha1: list ambiguous objects on error xdiff: rename "struct group" to "struct xdlgroup" get_short_sha1: make default disambiguation configurable tree-walk: be more specific about corrupt tree errors graph: fix extra spaces in graph_padding_line t5613: drop reachable_via function t5613: drop test_valid_repo function t5613: use test_must_fail t5613: whitespace/style cleanups t5613: do not chdir in main process find_unique_abbrev: move logic out of get_short_sha1() clone: detect errors in normalize_path_copy files_read_raw_ref: avoid infinite loop on broken symlinks files_read_raw_ref: prevent infinite retry loops in general t5613: clarify "too deep" recursion tests link_alt_odb_entry: handle normalize_path errors link_alt_odb_entry: refactor string handling alternates: provide helper for adding to alternates list alternates: provide helper for allocating alternate alternates: encapsulate alt->base munging alternates: use a separate scratch space fill_sha1_file: write "boring" characters alternates: store scratch buffer as strbuf fill_sha1_file: write into a strbuf count-objects: report alternates via verbose mode sha1_file: always allow relative paths to alternates alternates: use fspathcmp to detect duplicates check_connected: accept an env argument tmp-objdir: introduce API for temporary object directories receive-pack: quarantine objects until pre-receive accepts tmp-objdir: put quarantine information in the environment tmp-objdir: do not migrate files starting with '.' upload-pack: use priority queue in reachable() check merge-base: handle --fork-point without reflog fetch: use "quick" has_sha1_file for tag following test-lib: handle TEST_OUTPUT_DIRECTORY with spaces test-lib: add --verbose-log option travis: use --verbose-log test option test-lib: bail out when "-v" used under "prove" daemon: detect and reject too-long paths read info/{attributes,exclude} only when in repository test-*-cache-tree: setup git dir find_unique_abbrev: use 4-buffer ring diff_unique_abbrev: rename to diff_aligned_abbrev diff_aligned_abbrev: use "struct oid" diff: handle sha1 abbreviations outside of repository git-compat-util: move content inside ifdef/endif guards doc: fix missing "::" in config list t0021: use write_script to create rot13 shell script t0021: put $TEST_ROOT in $PATH t0021: use $PERL_PATH for rot13-filter.pl t0021: fix filehandle usage on older perl alternates: re-allow relative paths from environment sequencer: silence -Wtautological-constant-out-of-range-compare create_branch: drop unused "head" parameter common-main: stop munging argv[0] path Jiang Xin (7): l10n: zh_CN: fixed some typos for git 2.10.0 l10n: git.pot: v2.11.0 round 1 (209 new, 53 removed) l10n: zh_CN: for git v2.11.0 l10n round 1 i18n: fix unmatched single quote in error message l10n: git.pot: v2.11.0 round 2 (1 new, 1 removed) l10n: Fixed typo of git fetch-pack command l10n: fix unmatched single quote in error message Johannes Schindelin (63): cat-file: fix a grammo in the man page sequencer: lib'ify sequencer_pick_revisions() sequencer: do not die() in do_pick_commit() sequencer: lib'ify write_message() sequencer: lib'ify do_recursive_merge() sequencer: lib'ify do_pick_commit() sequencer: lib'ify walk_revs_populate_todo() sequencer: lib'ify prepare_revs() sequencer: lib'ify read_and_refresh_cache() sequencer: lib'ify read_populate_todo() sequencer: lib'ify read_populate_opts() sequencer: lib'ify create_seq_dir() sequencer: lib'ify save_head() sequencer: lib'ify save_todo() sequencer: lib'ify save_opts() sequencer: lib'ify fast_forward_to() sequencer: lib'ify checkout_fast_forward() sequencer: ensure to release the lock when we could not read the index cat-file: introduce the --filters option cat-file --textconv/--filters: allow specifying the path separately cat-file: support --textconv/--filters in batch mode git-gui: respect commit.gpgsign again regex: -G feeds a non NUL-terminated string to regexec() and fails regex: add regexec_buf() that can work on a non NUL-terminated string regex: use regexec_buf() pull: drop confusing prefix parameter of die_on_unclean_work_tree() pull: make code more similar to the shell script again wt-status: make the require_clean_work_tree() function reusable wt-status: export also the has_un{staged,committed}_changes() functions wt-status: teach has_{unstaged,uncommitted}_changes() about submodules wt-status: begin error messages with lower-case reset: fix usage sequencer: use static initializers for replay_opts sequencer: use memoized sequencer directory path sequencer: avoid unnecessary indirection sequencer: future-proof remove_sequencer_state() sequencer: plug memory leaks for the option values sequencer: future-proof read_populate_todo() sequencer: refactor the code to obtain a short commit name sequencer: completely revamp the "todo" script parsing sequencer: strip CR from the todo script sequencer: avoid completely different messages for different actions sequencer: get rid of the subcommand field sequencer: remember the onelines when parsing the todo file sequencer: prepare for rebase -i's commit functionality sequencer: introduce a helper to read files written by scripts sequencer: allow editing the commit message on a case-by-case basis sequencer: support amending commits sequencer: support cleaning up commit messages sequencer: left-trim lines read from the script sequencer: stop releasing the strbuf in write_message() sequencer: roll back lock file if write_message() failed sequencer: refactor write_message() to take a pointer/length sequencer: teach write_message() to append an optional LF sequencer: remove overzealous assumption in rebase -i mode sequencer: mark action_name() for translation sequencer: quote filenames in error messages sequencer: start error messages consistently with lower case sequencer: mark all error messages for translation t6026: ensure that long-running script really is rebase -i: highlight problems with core.commentchar stripspace: respect repository config rebase -i: handle core.commentChar=auto Johannes Sixt (9): t9903: fix broken && chain t6026-merge-attr: clean up background process at end of test case t3700-add: create subdirectory gently t3700-add: do not check working tree file mode without POSIXPERM t0060: sidestep surprising path mangling results on Windows t0021: expect more variations in the output of uniq -c t0021: compute file size with a single process instead of a pipeline t0021, t5615: use $PWD instead of $(pwd) in PATH-like shell variables t6026: clarify the point of "kill $(cat sleep.pid)" Jonathan Nieder (1): connect: tighten check for unexpected early hang up Jonathan Tan (15): tests: move test_lazy_prereq JGIT to test-lib.sh connect: advertized capability is not a ref mailinfo: separate in-body header processing mailinfo: make is_scissors_line take plain char * mailinfo: handle in-body header continuations fetch-pack: do not reset in_vain on non-novel acks trailer: improve const correctness trailer: use list.h for doubly-linked list trailer: streamline trailer item create and add trailer: make args have their own struct trailer: clarify failure modes in parse_trailer trailer: allow non-trailers in trailer block trailer: forbid leading whitespace in trailers trailer: support values folded to multiple lines doc: mention user-configured trailers Josh Triplett (2): format-patch: show base info before email signature format-patch: add "--rfc" for the common case of [RFC PATCH] Junio C Hamano (54): blame: improve diagnosis for "--reverse NEW" blame: dwim "blame --reverse OLD" as "blame --reverse OLD.." am: refactor read_author_script() diff.c: remove output_prefix_length field submodule: avoid auto-discovery in prepare_submodule_repo_env() symbolic-ref -d: do not allow removal of HEAD Prepare for 2.9.4 Start the 2.11 cycle First batch for 2.11 Second batch for 2.11 Third batch for 2.11 Start preparing for 2.10.1 Fourth batch for 2.11 streaming: make sure to notice corrupt object unpack_sha1_header(): detect malformed object header Fifth batch for 2.11 worktree: honor configuration variables blame: use DEFAULT_ABBREV macro Prepare for 2.10.1 Sixth batch for 2.11 diff_unique_abbrev(): document its assumption and limitation abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing abbrev: prepare for new world order Git 2.10.1 Seventh batch for 2.11 t4015: split out the "setup" part of ws-error-highlight test diff.c: refactor parse_ws_error_highlight() diff.c: move ws-error-highlight parsing helpers up diff: introduce diff.wsErrorHighlight option Eighth batch for 2.11 Ninth batch for 2.11 Start preparing for 2.10.2 cocci: refactor common patterns to use xstrdup_or_null() Tenth batch for 2.11 t3700: fix broken test under !SANITY transport: pass summary_width down the callchain fetch: pass summary_width down the callchain transport: allow summary-width to be computed dynamically transport: compute summary-width dynamically Eleventh batch for 2.11 Getting ready for 2.11-rc0 Git 2.10.2 Git 2.11-rc0 A bit of updates post -rc0 Revert "t6026-merge-attr: ensure that the merge driver was called" Revert "t6026-merge-attr: don't fail if sleep exits early" t0021: remove debugging cruft Git 2.11.0-rc1 Git 2.11-rc2 for-each-ref: do not segv with %(HEAD) on an unborn branch mailinfo: read local configuration archive: read local configuration Git 2.11-rc3 Git 2.11 Karsten Blees (2): git-gui: unicode file name support on windows git-gui: handle the encoding of Git's output correctly Kevin Daudt (2): t5100-mailinfo: replace common path prefix with variable mailinfo: unescape quoted-pair in header fields Kirill Smelkov (3): pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use pack-objects: use reachability bitmap index when generating non-stdout pack t/perf/run: copy config.mak.autogen & friends to build area Lars Schneider (20): travis-ci: ask homebrew for its path instead of hardcoding it convert: quote filter names in error messages convert: modernize tests run-command: move check_pipe() from write_or_die to run_command run-command: add clean_on_exit_handler pkt-line: rename packet_write() to packet_write_fmt() pkt-line: extract set_packet_header() pkt-line: add packet_write_fmt_gently() pkt-line: add packet_flush_gently() pkt-line: add packet_write_gently() pkt-line: add functions to read/write flush terminated packet streams convert: make apply_filter() adhere to standard Git error handling convert: prepare filter..process option convert: add filter..process option contrib/long-running-filter: add long running filter example sha1_file: rename git_open_noatime() to git_open() sha1_file: open window into packfiles with O_CLOEXEC read-cache: make sure file handles are not inherited by child processes Makefile: set NO_OPENSSL on macOS by default travis-ci: disable GIT_TEST_HTTPD for macOS Linus Torvalds (1): abbrev: auto size the default abbreviation Mantas Mikulėnas (1): contrib: add credential helper for libsecret Marc Branchaud (1): RelNotes: spelling and phrasing fixups Matthieu Moy (4): Documentation/config: default for color.* is color.ui parse_mailboxes: accept extra text after address t9000-addresses: update expected results after fix Git.pm: add comment pointing to t9000 Michael Haggerty (36): xdl_change_compact(): fix compaction heuristic to adjust ixo xdl_change_compact(): only use heuristic if group can't be matched is_blank_line(): take a single xrecord_t as argument recs_match(): take two xrecord_t pointers as arguments xdl_change_compact(): introduce the concept of a change group resolve_gitlink_ref(): eliminate temporary variable refs: rename struct ref_cache to files_ref_store refs: create a base class "ref_store" for files_ref_store add_packed_ref(): add a files_ref_store argument get_packed_ref(): add a files_ref_store argument resolve_missing_loose_ref(): add a files_ref_store argument {lock,commit,rollback}_packed_refs(): add files_ref_store arguments refs: reorder definitions resolve_packed_ref(): rename function from resolve_missing_loose_ref() resolve_gitlink_packed_ref(): remove function read_raw_ref(): take a (struct ref_store *) argument resolve_ref_recursively(): new function resolve_gitlink_ref(): implement using resolve_ref_recursively() resolve_gitlink_ref(): avoid memory allocation in many cases resolve_gitlink_ref(): rename path parameter to submodule refs: make read_raw_ref() virtual refs: make verify_refname_available() virtual refs: make pack_refs() virtual refs: make create_symref() virtual refs: make peel_ref() virtual repack_without_refs(): add a files_ref_store argument lock_raw_ref(): add a files_ref_store argument commit_ref_update(): add a files_ref_store argument lock_ref_for_update(): add a files_ref_store argument lock_ref_sha1_basic(): add a files_ref_store argument split_symref_update(): add a files_ref_store argument files_ref_iterator_begin(): take a ref_store argument refs: add method iterator_begin diff: improve positioning of add/delete blocks in diffs parse-options: add parse_opt_unknown_cb() blame: honor the diff heuristic options and config Michael J Gruber (1): gpg-interface: use more status letters Mike Ralphson (1): vcs-svn/fast_export: fix timestamp fmt specifiers Nguyễn Thái Ngọc Duy (40): remote-curl.c: convert fetch_git() to use argv_array transport-helper.c: refactor set_helper_option() upload-pack: move shallow deepen code out of receive_needs() upload-pack: move "shallow" sending code out of deepen() upload-pack: remove unused variable "backup" upload-pack: move "unshallow" sending code out of deepen() upload-pack: use skip_prefix() instead of starts_with() upload-pack: tighten number parsing at "deepen" lines upload-pack: make check_non_tip() clean things up on error upload-pack: move rev-list code out of check_non_tip() fetch-pack: use skip_prefix() instead of starts_with() fetch-pack: use a common function for verbose printing fetch-pack.c: mark strings for translating fetch-pack: use a separate flag for fetch in deepening mode shallow.c: implement a generic shallow boundary finder based on rev-list upload-pack: add deepen-since to cut shallow repos based on time fetch: define shallow boundary with --shallow-since clone: define shallow clone boundary based on time with --shallow-since t5500, t5539: tests for shallow depth since a specific date refs: add expand_ref() upload-pack: support define shallow boundary by excluding revisions fetch: define shallow boundary with --shallow-exclude clone: define shallow clone boundary with --shallow-exclude t5500, t5539: tests for shallow depth excluding a ref upload-pack: split check_unreachable() in two, prep for get_reachable_list() upload-pack: add get_reachable_list() fetch, upload-pack: --deepen=N extends shallow boundary by N commits checkout: add some spaces between code and comment checkout.txt: document a common case that ignores ambiguation rules checkout: fix ambiguity check in subdir init: correct re-initialization from a linked worktree init: call set_git_dir_init() from within init_db() init: kill set_git_dir_init() init: do not set unnecessary core.worktree init: kill git_link variable git-commit.txt: clarify --patch mode with pathspec diff-lib: allow ita entries treated as "not yet exist in index" diff: add --ita-[in]visible-in-index commit: fix empty commit creation when there's no changes but ita entries commit: don't be fooled by ita entries when creating initial commit Olaf Hering (1): git-gui: sort entries in tclIndex Orgad Shaneh (1): git-gui: Do not reset author details on amend Pat Thoyts (7): Allow keyboard control to work in the staging widgets. Amend tab ordering and text widget border and highlighting. git-gui: fix detection of Cygwin git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut` git-gui: maintain backwards compatibility for merge syntax git-gui: avoid persisting modified author identity git-gui: set version 0.21 Patrick Steinhardt (1): doc: fix location of 'info/' with $GIT_COMMON_DIR Peter Krefting (1): l10n: sv.po: Update Swedish translation (2913t0f0u) Petr Stodulka (1): http: control GSSAPI credential delegation Philip Oakley (14): doc: use 'symmetric difference' consistently doc: revisions - name the left and right sides doc: show the actual left, right, and boundary marks doc: revisions: give headings for the two and three dot notations doc: revisions: extra clarification of ^! notation effects doc: revisions: single vs multi-parent notation comparison doc: gitrevisions - use 'reachable' in page description doc: gitrevisions - clarify 'latter case' is revision walk doc: revisions - define `reachable` doc: revisions - clarify reachability examples doc: revisions: show revision expansion in examples doc: revisions: sort examples and fix alignment of the unchanged doc: fix merge-base ASCII art tab spacing doc: fix the 'revert a faulty merge' ASCII art tab spacing Pranit Bauva (2): rev-list-options: clarify the usage of --reverse t0040: convert all possible tests to use `test-parse-options --expect` Ralf Thielow (7): help: introduce option --exclude-guides help: make option --help open man pages only for Git commands rebase -i: improve advice on bad instruction lines l10n: de.po: fix translation of autostash l10n: de.po: translate 260 new messages fetch-pack.c: correct command at the beginning of an error message l10n: de.po: translate 210 new messages Ray Chen (1): l10n: zh_CN: review for git v2.10.0 l10n René Scharfe (36): compat: move strdup(3) replacement to its own file introduce hex2chr() for converting two hexadecimal digits to a character strbuf: use valid pointer in strbuf_remove() checkout: constify parameters of checkout_stage() and checkout_merged() unpack-trees: pass checkout state explicitly to check_updates() sha1_file: use llist_mergesort() for sorting packs xdiff: fix merging of hunks with -W context and -u context contrib/coccinelle: fix semantic patch for oid_to_hex_r() add coccicheck make target use strbuf_addstr() for adding constant strings to a strbuf, part 2 pretty: let %C(auto) reset all attributes introduce CHECKOUT_INIT add COPY_ARRAY use COPY_ARRAY git-gui: stop using deprecated merge syntax gitignore: ignore output files of coccicheck make target use strbuf_addstr() instead of strbuf_addf() with "%s", part 2 use strbuf_add_unique_abbrev() for adding short hashes, part 2 add QSORT use QSORT remove unnecessary check before QSORT coccicheck: use --all-includes by default use QSORT, part 2 pretty: avoid adding reset for %C(auto) if output is empty coccicheck: make transformation for strbuf_addf(sb, "...") more precise show-branch: use QSORT remove unnecessary NULL check before free(3) use strbuf_add_unique_abbrev() for adding short hashes, part 3 pretty: fix document link for color specification avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM inline xalloc_flex() into FLEXPTR_ALLOC_MEM hex: make wraparound of the index into ring-buffer explicit valgrind: support test helpers commit: simplify building parents list sha1_name: make wraparound of the index into ring-buffer explicit cocci: avoid self-references in object_id transformations Ronnie Sahlberg (2): refs: add a backend method structure refs: add a transaction_commit() method SZEDER Gábor (1): ref-filter: strip format option after a field name only once while parsing Satoshi Yasushima (6): git-gui: consistently use the same word for "remote" in Japanese git-gui: consistently use the same word for "blame" in Japanese git-gui: apply po template to Japanese translation git-gui: add Japanese language code git-gui: update Japanese translation git-gui: update Japanese information Stefan Beller (16): t7408: modernize style t7408: merge short tests, factor out testing method submodule--helper module-clone: allow multiple references submodule--helper update-clone: allow multiple references clone: factor out checking for an alternate path clone: clarify option_reference as required clone: implement optional references clone: recursive and reference option triggers submodule alternates xdiff: remove unneeded declarations transport: report missing submodule pushes consistently on stderr diff.c: use diff_options directly diff: omit found pointer from emit_callback diff: remove dead code submodule: ignore trailing slash on superproject URL submodule: ignore trailing slash in relative url documentation: improve submodule..{url, path} description Stefan Christ (1): Documentation/fmt-merge-msg: fix markup in example Thomas Gummerer (4): add: document the chmod option update-index: add test for chmod flags read-cache: introduce chmod_index_entry add: modify already added files when --chmod is given Tobias Klauser (1): diffcore-delta: remove unused parameter to diffcore_count_changes() Trần Ngọc Quân (1): l10n: vi.po: Updated translation to v2.11.0 (2913t) Vasco Almeida (33): l10n: pt_PT: update Portuguese translation l10n: pt_PT: update Portuguese repository info i18n: blame: mark error messages for translation i18n: branch: mark option description for translation i18n: config: mark error message for translation i18n: merge-recursive: mark error messages for translation i18n: merge-recursive: mark verbose message for translation i18n: notes: mark error messages for translation notes: spell first word of error messages in lowercase i18n: receive-pack: mark messages for translation i18n: show-branch: mark error messages for translation i18n: show-branch: mark plural strings for translation i18n: update-index: mark warnings for translation i18n: commit: mark message for translation i18n: connect: mark die messages for translation i18n: ident: mark hint for translation i18n: notes-merge: mark die messages for translation i18n: stash: mark messages for translation git-gui i18n: mark strings for translation git-gui: l10n: add Portuguese translation git-gui i18n: internationalize use of colon punctuation git-gui i18n: mark "usage:" strings for translation git-gui: fix incorrect use of Tcl append command git-gui i18n: mark string in lib/error.tcl for translation t1512: become resilient to GETTEXT_POISON build i18n: apply: mark plural string for translation i18n: apply: mark info messages for translation i18n: apply: mark error messages for translation i18n: apply: mark error message for translation i18n: convert mark error messages for translation i18n: credential-cache--daemon: mark advice for translation i18n: diff: mark warnings for translation l10n: pt_PT: update Portuguese translation Vegard Nossum (1): revision: new rev^-n shorthand for rev^n..rev Younes Khoudli (1): doc: remove reference to the traditional layout in git-tag.txt brian m. carlson (20): cache: convert struct cache_entry to use struct object_id builtin/apply: convert static functions to struct object_id builtin/blame: convert struct origin to use struct object_id builtin/log: convert some static functions to use struct object_id builtin/cat-file: convert struct expand_data to use struct object_id builtin/cat-file: convert some static functions to struct object_id builtin: convert textconv_object to use struct object_id streaming: make stream_blob_to_fd take struct object_id builtin/checkout: convert some static functions to struct object_id notes-merge: convert struct notes_merge_pair to struct object_id Convert read_mmblob to take struct object_id. builtin/blame: convert file to use struct object_id builtin/rm: convert to use struct object_id notes: convert init_notes to use struct object_id builtin/update-index: convert file to struct object_id sha1_name: convert get_sha1_mb to struct object_id refs: add an update_ref_oid function. builtin/am: convert to struct object_id builtin/commit-tree: convert to struct object_id builtin/reset: convert to use struct object_id jfbu (1): l10n: fr.po fix grammar mistakes yaras (1): git-gui: fix initial git gui message encoding Ævar Arnfjörð Bjarmason (3): gitweb: fix a typo in a comment gitweb: link to 7-char+ SHA-1s, not only 8-char+ gitweb: link to "git describe"'d commits in log messages Дилян Палаузов (1): ./configure.ac: detect SSL in libcurl using curl-config [Less]
Posted 5 days ago by Mike Hommey
Hi, Git-cinnabar is a git remote helper to interact with mercurial repositories. It allows to clone, pull and push from/to mercurial remote repositories, using git. Code on https://github.com/glandium/git-cinnabar This release on ... [More] https://github.com/glandium/git-cinnabar/releases/tag/0.4.0rc [ Previous announcements: http://marc.info/?l=git&m=146943537220142 http://marc.info/?l=git&m=146762932928309 http://marc.info/?l=git&m=146179749105388 (...)] What's new since 0.4.0b3? - Updated git to 2.10.2 for cinnabar-helper. - Added a new `git cinnabar download` command to download a helper on platforms where one is available. - Fixed some corner cases with pack windows in the helper. This prevented cloning mozilla-central with the helper. - Fixed bundle2 support that broke cloning from a mercurial 4.0 server in some cases. - Fixed some corner cases involving empty files. This prevented cloning Mozilla's stylo incubator repository. - Fixed some correctness issues in file parenting when pushing changesets pulled from one mercurial repository to another. - Various improvements to the rules to build the helper. - Experimental (and slow) support for pushing merges, with caveats. See https://github.com/glandium/git-cinnabar/issues/20 for details about the current status. And since I realize I didn't announce beta 3: What's new since 0.4.0b2? - Properly handle bundle2 errors, avoiding git to believe a push happened when it didn't. (0.3.x is unaffected) Mike [Less]
Posted 10 days ago by Junio C Hamano
A release candidate Git v2.11.0-rc3 is now available for testing at the usual places. It is comprised of 666 non-merge commits since v2.10.0, contributed by 73 people, 15 of which are new faces. It turns out that one recent fix exposed codepaths ... [More] that have not been using the API correctly, resulting apparent minor regressions in a few programs. This hopefully final release candidate contains fixes to them. The tarballs are found at: https://www.kernel.org/pub/software/scm/git/testing/ The following public repositories all have a copy of the 'v2.11.0-rc3' tag and the 'master' branch that the tag points at: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = git://git.sourceforge.jp/gitroot/git-core/git.git url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core url = https://github.com/gitster/git New contributors whose contributions weren't in v2.10.0 are as follows. Welcome to the Git development community! Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie, Gavin Lambert, Ian Kelling, Jeff Hostetler, jfbu, Mantas Mikulėnas, Petr Stodulka, Satoshi Yasushima, Stefan Christ, Vegard Nossum, yaras, and Younes Khoudli. Returning contributors who helped this release are as follows. Thanks for your continued support. Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie, Alex Riesen, Anders Kaseorg, Andreas Schwab, Beat Bolli, Ben North, brian m. carlson, Changwoo Ryu, Chris Packham, Christian Couder, David Aguilar, David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia Pinto, Eric Wong, Jacob Keller, Jakub Narębski, Jean-Noel Avila, Jean-Noël AVILA, Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Josh Triplett, Junio C Hamano, Karsten Blees, Kevin Daudt, Kirill Smelkov, Lars Schneider, Linus Torvalds, Matthieu Moy, Michael Haggerty, Michael J Gruber, Mike Ralphson, Nguyễn Thái Ngọc Duy, Olaf Hering, Orgad Shaneh, Patrick Steinhardt, Pat Thoyts, Peter Krefting, Philip Oakley, Pranit Bauva, Ralf Thielow, Ray Chen, René Scharfe, Ronnie Sahlberg, Stefan Beller, SZEDER Gábor, Thomas Gummerer, Tobias Klauser, Trần Ngọc Quân, Vasco Almeida, and Дилян Палаузов. ---------------------------------------------------------------- Git 2.11 Release Notes (draft) ============================== Backward compatibility notes. * An empty string used as a pathspec element has always meant 'everything matches', but it is too easy to write a script that finds a path to remove in $path and run 'git rm "$paht"' by mistake (when the user meant to give "$path"), which ends up removing everything. This release starts warning about the use of an empty string that is used for 'everything matches' and asks users to use a more explicit '.' for that instead. The hope is that existing users will not mind this change, and eventually the warning can be turned into a hard error, upgrading the deprecation into removal of this (mis)feature. * The historical argument order "git merge HEAD ..." has been deprecated for quite some time, and will be removed in the next release (not this one). * The default abbreviation length, which has historically been 7, now scales as the repository grows, using the approximate number of objects in the repository and a bit of math around the birthday paradox. The logic suggests to use 12 hexdigits for the Linux kernel, and 9 to 10 for Git itself. Updates since v2.10 ------------------- UI, Workflows & Features * Comes with new version of git-gui, now at its 0.21.0 tag. * "git format-patch --cover-letter HEAD^" to format a single patch with a separate cover letter now numbers the output as [PATCH 0/1] and [PATCH 1/1] by default. * An incoming "git push" that attempts to push too many bytes can now be rejected by setting a new configuration variable at the receiving end. * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand", which was not intuitive, given that "git nosuchcommand" said "git: 'nosuchcommand' is not a git command". * "git clone --recurse-submodules --reference $path $URL" is a way to reduce network transfer cost by borrowing objects in an existing $path repository when cloning the superproject from $URL; it learned to also peek into $path for presence of corresponding repositories of submodules and borrow objects from there when able. * The "git diff --submodule={short,log}" mechanism has been enhanced to allow "--submodule=diff" to show the patch between the submodule commits bound to the superproject. * Even though "git hash-objects", which is a tool to take an on-filesystem data stream and put it into the Git object store, allowed to perform the "outside-world-to-Git" conversions (e.g. end-of-line conversions and application of the clean-filter), and it had the feature on by default from very early days, its reverse operation "git cat-file", which takes an object from the Git object store and externalize for the consumption by the outside world, lacked an equivalent mechanism to run the "Git-to-outside-world" conversion. The command learned the "--filters" option to do so. * Output from "git diff" can be made easier to read by selecting which lines are common and which lines are added/deleted intelligently when the lines before and after the changed section are the same. A command line option is added to help with the experiment to find a good heuristics. * In some projects, it is common to use "[RFC PATCH]" as the subject prefix for a patch meant for discussion rather than application. A new option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH" to help the participants of such projects. * "git add --chmod=+x " added recently only toggled the executable bit for paths that are either new or modified. This has been corrected to flip the executable bit for all paths that match the given pathspec. * When "git format-patch --stdout" output is placed as an in-body header and it uses the RFC2822 header folding, "git am" failed to put the header line back into a single logical line. The underlying "git mailinfo" was taught to handle this properly. * "gitweb" can spawn "highlight" to show blob contents with (programming) language-specific syntax highlighting, but only when the language is known. "highlight" can however be told to make the guess itself by giving it "--force" option, which has been enabled. * "git gui" l10n to Portuguese. * When given an abbreviated object name that is not (or more realistically, "no longer") unique, we gave a fatal error "ambiguous argument". This error is now accompanied by a hint that lists the objects beginning with the given prefix. During the course of development of this new feature, numerous minor bugs were uncovered and corrected, the most notable one of which is that we gave "short SHA1 xxxx is ambiguous." twice without good reason. * "git log rev^..rev" is an often-used revision range specification to show what was done on a side branch merged at rev. This has gained a short-hand "rev^-1". In general "rev^-$n" is the same as "^rev^$n rev", i.e. what has happened on other branches while the history leading to nth parent was looking the other way. * In recent versions of cURL, GSSAPI credential delegation is disabled by default due to CVE-2011-2192; introduce a configuration to selectively allow enabling this. (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint). * "git mergetool" learned to honor "-O" to control the order of paths to present to the end user. * "git diff/log --ws-error-highlight=" lacked the corresponding configuration variable to set it by default. * "git ls-files" learned "--recurse-submodules" option that can be used to get a listing of tracked files across submodules (i.e. this only works with "--cached" option, not for listing untracked or ignored files). This would be a useful tool to sit on the upstream side of a pipe that is read with xargs to work on all working tree files from the top-level superproject. * A new credential helper that talks via "libsecret" with implementations of XDG Secret Service API has been added to contrib/credential/. * The GPG verification status shown in "%G?" pretty format specifier was not rich enough to differentiate a signature made by an expired key, a signature made by a revoked key, etc. New output letters have been assigned to express them. * In addition to purely abbreviated commit object names, "gitweb" learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787) into clickable links in its output. * When new paths were added by "git add -N" to the index, it was enough to circumvent the check by "git commit" to refrain from making an empty commit without "--allow-empty". The same logic prevented "git status" to show such a path as "new file" in the "Changes not staged for commit" section. * The smudge/clean filter API expect an external process is spawned to filter the contents for each path that has a filter defined. A new type of "process" filter API has been added to allow the first request to run the filter for a path to spawn a single process, and all filtering need is served by this single process for multiple paths, reducing the process creation overhead. * The user always has to say "stash@{$N}" when naming a single element in the default location of the stash, i.e. reflogs in refs/stash. The "git stash" command learned to accept "git stash apply 4" as a short-hand for "git stash apply stash@{4}". Performance, Internal Implementation, Development Support etc. * The delta-base-cache mechanism has been a key to the performance in a repository with a tightly packed packfile, but it did not scale well even with a larger value of core.deltaBaseCacheLimit. * Enhance "git status --porcelain" output by collecting more data on the state of the index and the working tree files, which may further be used to teach git-prompt (in contrib/) to make fewer calls to git. * Extract a small helper out of the function that reads the authors script file "git am" internally uses. (merge a77598e jc/am-read-author-file later to maint). * Lifts calls to exit(2) and die() higher in the callchain in sequencer.c files so that more helper functions in it can be used by callers that want to handle error conditions themselves. * "git am" has been taught to make an internal call to "git apply"'s innards without spawning the latter as a separate process. * The ref-store abstraction was introduced to the refs API so that we can plug in different backends to store references. * The "unsigned char sha1[20]" to "struct object_id" conversion continues. Notable changes in this round includes that ce->sha1, i.e. the object name recorded in the cache_entry, turns into an object_id. * JGit can show a fake ref "capabilities^{}" to "git fetch" when it does not advertise any refs, but "git fetch" was not prepared to see such an advertisement. When the other side disconnects without giving any ref advertisement, we used to say "there may not be a repository at that URL", but we may have seen other advertisement like "shallow" and ".have" in which case we definitely know that a repository is there. The code to detect this case has also been updated. * Some codepaths in "git pack-objects" were not ready to use an existing pack bitmap; now they are and as the result they have become faster. * The codepath in "git fsck" to detect malformed tree objects has been updated not to die but keep going after detecting them. * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of the time third parameter is redundant. A new QSORT() macro lets us omit it. * "git pack-objects" in a repository with many packfiles used to spend a lot of time looking for/at objects in them; the accesses to the packfiles are now optimized by checking the most-recently-used packfile first. (merge c9af708b1a jk/pack-objects-optim-mru later to maint). * Codepaths involved in interacting alternate object store have been cleaned up. * In order for the receiving end of "git push" to inspect the received history and decide to reject the push, the objects sent from the sending end need to be made available to the hook and the mechanism for the connectivity check, and this was done traditionally by storing the objects in the receiving repository and letting "git gc" to expire it. Instead, store the newly received objects in a temporary area, and make them available by reusing the alternate object store mechanism to them only while we decide if we accept the check, and once we decide, either migrate them to the repository or purge them immediately. * The require_clean_work_tree() helper was recreated in C when "git pull" was rewritten from shell; the helper is now made available to other callers in preparation for upcoming "rebase -i" work. * "git upload-pack" had its code cleaned-up and performance improved by reducing use of timestamp-ordered commit-list, which was replaced with a priority queue. * "git diff --no-index" codepath has been updated not to try to peek into .git/ directory that happens to be under the current directory, when we know we are operating outside any repository. * Update of the sequencer codebase to make it reusable to reimplement "rebase -i" continues. * Git generally does not explicitly close file descriptors that were open in the parent process when spawning a child process, but most of the time the child does not want to access them. As Windows does not allow removing or renaming a file that has a file descriptor open, a slow-to-exit child can even break the parent process by holding onto them. Use O_CLOEXEC flag to open files in various codepaths. * Update "interpret-trailers" machinery and teaches it that people in real world write all sorts of crufts in the "trailer" that was originally designed to have the neat-o "Mail-Header: like thing" and nothing else. Also contains various documentation updates and code clean-ups. Fixes since v2.10 ----------------- Unless otherwise noted, all the fixes since v2.9 in the maintenance track are contained in this release (see the maintenance releases' notes for details). * Clarify various ways to specify the "revision ranges" in the documentation. * "diff-highlight" script (in contrib/) learned to work better with "git log -p --graph" output. * The test framework left the number of tests and success/failure count in the t/test-results directory, keyed by the name of the test script plus the process ID. The latter however turned out not to serve any useful purpose. The process ID part of the filename has been removed. * Having a submodule whose ".git" repository is somehow corrupt caused a few commands that recurse into submodules loop forever. * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but the resulting repository becomes an invalid one. Teach the command to forbid removal of HEAD. * A test spawned a short-lived background process, which sometimes prevented the test directory from getting removed at the end of the script on some platforms. * Update a few tests that used to use GIT_CURL_VERBOSE to use the newer GIT_TRACE_CURL. * "git pack-objects --include-tag" was taught that when we know that we are sending an object C, we want a tag B that directly points at C but also a tag A that points at the tag B. We used to miss the intermediate tag B in some cases. * Update Japanese translation for "git-gui". * "git fetch http::/site/path" did not die correctly and segfaulted instead. * "git commit-tree" stopped reading commit.gpgsign configuration variable that was meant for Porcelain "git commit" in Git 2.9; we forgot to update "git gui" to look at the configuration to match this change. * "git add --chmod=+x" added recently lacked documentation, which has been corrected. * "git log --cherry-pick" used to include merge commits as candidates to be matched up with other commits, resulting a lot of wasted time. The patch-id generation logic has been updated to ignore merges to avoid the wastage. * The http transport (with curl-multi option, which is the default these days) failed to remove curl-easy handle from a curlm session, which led to unnecessary API failures. * There were numerous corner cases in which the configuration files are read and used or not read at all depending on the directory a Git command was run, leading to inconsistent behaviour. The code to set-up repository access at the beginning of a Git process has been updated to fix them. (merge 4d0efa1 jk/setup-sequence-update later to maint). * "git diff -W" output needs to extend the context backward to include the header line of the current function and also forward to include the body of the entire current function up to the header line of the next one. This process may have to merge two adjacent hunks, but the code forgot to do so in some cases. * Performance tests done via "t/perf" did not use the same set of build configuration if the user relied on autoconf generated configuration. * "git format-patch --base=..." feature that was recently added showed the base commit information after "-- " e-mail signature line, which turned out to be inconvenient. The base information has been moved above the signature line. * More i18n. * Even when "git pull --rebase=preserve" (and the underlying "git rebase --preserve") can complete without creating any new commit (i.e. fast-forwards), it still insisted on having a usable ident information (read: user.email is set correctly), which was less than nice. As the underlying commands used inside "git rebase" would fail with a more meaningful error message and advice text when the bogus ident matters, this extra check was removed. * "git gc --aggressive" used to limit the delta-chain length to 250, which is way too deep for gaining additional space savings and is detrimental for runtime performance. The limit has been reduced to 50. * Documentation for individual configuration variables to control use of color (like `color.grep`) said that their default value is 'false', instead of saying their default is taken from `color.ui`. When we updated the default value for color.ui from 'false' to 'auto' quite a while ago, all of them broke. This has been corrected. * The pretty-format specifier "%C(auto)" used by the "log" family of commands to enable coloring of the output is taught to also issue a color-reset sequence to the output. * A shell script example in check-ref-format documentation has been fixed. * "git checkout " does not follow the usual disambiguation rules when the can be both a rev and a path, to allow checking out a branch 'foo' in a project that happens to have a file 'foo' in the working tree without having to disambiguate. This was poorly documented and the check was incorrect when the command was run from a subdirectory. * Some codepaths in "git diff" used regexec(3) on a buffer that was mmap(2)ed, which may not have a terminating NUL, leading to a read beyond the end of the mapped region. This was fixed by introducing a regexec_buf() helper that takes a pair with REG_STARTEND extension. * The procedure to build Git on Mac OS X for Travis CI hardcoded the internal directory structure we assumed HomeBrew uses, which was a no-no. The procedure has been updated to ask HomeBrew things we need to know to fix this. * When "git rebase -i" is given a broken instruction, it told the user to fix it with "--edit-todo", but didn't say what the step after that was (i.e. "--continue"). * Documentation around tools to import from CVS was fairly outdated. * "git clone --recurse-submodules" lost the progress eye-candy in recent update, which has been corrected. * A low-level function verify_packfile() was meant to show errors that were detected without dying itself, but under some conditions it didn't and died instead, which has been fixed. * When "git fetch" tries to find where the history of the repository it runs in has diverged from what the other side has, it has a mechanism to avoid digging too deep into irrelevant side branches. This however did not work well over the "smart-http" transport due to a design bug, which has been fixed. * In the codepath that comes up with the hostname to be used in an e-mail when the user didn't tell us, we looked at ai_canonname field in struct addrinfo without making sure it is not NULL first. * "git worktree", even though it used the default_abbrev setting that ought to be affected by core.abbrev configuration variable, ignored the variable setting. The command has been taught to read the default set of configuration variables to correct this. * "git init" tried to record core.worktree in the repository's 'config' file when GIT_WORK_TREE environment variable was set and it was different from where GIT_DIR appears as ".git" at its top, but the logic was faulty when .git is a "gitdir:" file that points at the real place, causing trouble in working trees that are managed by "git worktree". This has been corrected. * Codepaths that read from an on-disk loose object were too loose in validating what they are reading is a proper object file and sometimes read past the data they read from the disk, which has been corrected. H/t to Gustavo Grieco for reporting. * The original command line syntax for "git merge", which was "git merge HEAD ...", has been deprecated for quite some time, and "git gui" was the last in-tree user of the syntax. This is finally fixed, so that we can move forward with the deprecation. * An author name, that spelled a backslash-quoted double quote in the human readable part "My \"double quoted\" name", was not unquoted correctly while applying a patch from a piece of e-mail. * Doc update to clarify what "log -3 --reverse" does. * Almost everybody uses DEFAULT_ABBREV to refer to the default setting for the abbreviation, but "git blame" peeked into underlying variable bypassing the macro for no good reason. * The "graph" API used in "git log --graph" miscounted the number of output columns consumed so far when drawing a padding line, which has been fixed; this did not affect any existing code as nobody tried to write anything after the padding on such a line, though. * The code that parses the format parameter of for-each-ref command has seen a micro-optimization. * When we started cURL to talk to imap server when a new enough version of cURL library is available, we forgot to explicitly add imap(s):// before the destination. To some folks, that didn't work and the library tried to make HTTP(s) requests instead. * The ./configure script generated from configure.ac was taught how to detect support of SSL by libcurl better. * The command-line completion script (in contrib/) learned to complete "git cmd ^mas" to complete the negative end of reference to "git cmd ^master". (merge 49416ad22a cp/completion-negative-refs later to maint). * The existing "git fetch --depth=" option was hard to use correctly when making the history of an existing shallow clone deeper. A new option, "--deepen=", has been added to make this easier to use. "git clone" also learned "--shallow-since=" and "--shallow-exclude=" options to make it easier to specify "I am interested only in the recent N months worth of history" and "Give me only the history since that version". (merge cccf74e2da nd/shallow-deepen later to maint). * It is a common mistake to say "git blame --reverse OLD path", expecting that the command line is dwimmed as if asking how lines in path in an old revision OLD have survived up to the current commit. (merge e1d09701a4 jc/blame-reverse later to maint). * http.emptyauth configuration is a way to allow an empty username to pass when attempting to authenticate using mechanisms like Kerberos. We took an unspecified (NULL) username and sent ":" (i.e. no username, no password) to CURLOPT_USERPWD, but did not do the same when the username is explicitly set to an empty string. * "git clone" of a local repository can be done at the filesystem level, but the codepath did not check errors while copying and adjusting the file that lists alternate object stores. * Documentation for "git commit" was updated to clarify that "commit -p " adds to the current contents of the index to come up with what to commit. * A stray symbolic link in $GIT_DIR/refs/ directory could make name resolution loop forever, which has been corrected. * The "submodule..path" stored in .gitmodules is never copied to .git/config and such a key in .git/config has no meaning, but the documentation described it and submodule..url next to each other as if both belong to .git/config. This has been fixed. * In a worktree connected to a repository elsewhere, created via "git worktree", "git checkout" attempts to protect users from confusion by refusing to check out a branch that is already checked out in another worktree. However, this also prevented checking out a branch, which is designated as the primary branch of a bare reopsitory, in a worktree that is connected to the bare repository. The check has been corrected to allow it. * "git rebase" immediately after "git clone" failed to find the fork point from the upstream. * When fetching from a remote that has many tags that are irrelevant to branches we are following, we used to waste way too many cycles when checking if the object pointed at by a tag (that we are not going to fetch!) exists in our repository too carefully. * Protect our code from over-eager compilers. * Recent git allows submodule..branch to use a special token "." instead of the branch name; the documentation has been updated to describe it. * A hot-fix for a test added by a recent topic that went to both 'master' and 'maint' already. * "git send-email" attempts to pick up valid e-mails from the trailers, but people in real world write non-addresses there, like "Cc: Stable # 4.8+", which broke the output depending on the availability and vintage of Mail::Address perl module. (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint). * The Travis CI configuration we ship ran the tests with --verbose option but this risks non-TAP output that happens to be "ok" to be misinterpreted as TAP signalling a test that passed. This resulted in unnecessary failure. This has been corrected by introducing a new mode to run our tests in the test harness to send the verbose output separately to the log file. * Some AsciiDoc formatter mishandles a displayed illustration with tabs in it. Adjust a few of them in merge-base documentation to work around them. * A minor regression fix for "git submodule" that was introduced when more helper functions were reimplemented in C. (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint). * The code that we have used for the past 10+ years to cycle 4-element ring buffers turns out to be not quite portable in theoretical world. (merge bb84735c80 rs/ring-buffer-wraparound later to maint). * "git daemon" used fixed-length buffers to turn URL to the repository the client asked for into the server side directory path, using snprintf() to avoid overflowing these buffers, but allowed possibly truncated paths to the directory. This has been tightened to reject such a request that causes overlong path to be required to serve. (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint). * Recent update to git-sh-setup (a library of shell functions that are used by our in-tree scripted Porcelain commands) included another shell library git-sh-i18n without specifying where it is, relying on the $PATH. This has been fixed to be more explicit by prefixing $(git --exec-path) output in front. (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint). * Fix for a racy false-positive test failure. (merge fdf4f6c79b as/merge-attr-sleep later to maint). * Portability update and workaround for builds on recent Mac OS X. (merge a296bc0132 ls/macos-update later to maint). * Using a %(HEAD) placeholder in "for-each-ref --format=" option caused the command to segfault when on an unborn branch. (merge 84679d470d jc/for-each-ref-head-segfault-fix later to maint). * "git rebase -i" did not work well with core.commentchar configuration variable for two reasons, both of which have been fixed. (merge 882cd23777 js/rebase-i-commentchar-fix later to maint). * Other minor doc, test and build updates and code cleanups. (merge 5c238e29a8 jk/common-main later to maint). (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint). (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint). (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint). (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint). (merge 28fab7b23d nd/test-helpers later to maint). (merge c2bb0c1d1e rs/cocci later to maint). (merge 3285b7badb ps/common-info-doc later to maint). (merge 2b090822e8 nd/worktree-lock later to maint). (merge 4bd488ea7c jk/create-branch-remove-unused-param later to maint). (merge 974e0044d6 tk/diffcore-delta-remove-unused later to maint). ---------------------------------------------------------------- Changes since v2.10.0 are as follows: Aaron M Watson (1): stash: allow stashes to be referenced by index only Alex Henrie (5): am: put spaces around pipe in usage string cat-file: put spaces around pipes in usage string git-rebase--interactive: fix English grammar git-merge-octopus: do not capitalize "octopus" unpack-trees: do not capitalize "working" Alex Riesen (2): git-gui: support for $FILENAMES in tool definitions git-gui: ensure the file in the diff pane is in the list of selected files Alexander Shopov (2): git-gui i18n: Updated Bulgarian translation (565,0f,0u) git-gui: Mark 'All' in remote.tcl for translation Anders Kaseorg (3): imap-send: Tell cURL to use imap:// or imaps:// pre-receive.sample: mark it executable git-sh-setup: be explicit where to dot-source git-sh-i18n from. Andreas Schwab (2): t6026-merge-attr: don't fail if sleep exits early t6026-merge-attr: ensure that the merge driver was called Beat Bolli (1): SubmittingPatches: use gitk's "Copy commit summary" format Ben North (1): git-worktree.txt: fix typo "to"/"two", and add comma Brandon Williams (6): pathspec: remove unnecessary function prototypes git: make super-prefix option ls-files: optionally recurse into submodules ls-files: pass through safe options for --recurse-submodules ls-files: add pathspec matching for submodules submodules doc: update documentation for "." used for submodule branches Brian Henderson (3): diff-highlight: add some tests diff-highlight: add failing test for handling --graph output diff-highlight: add support for --graph output Changwoo Ryu (1): l10n: ko.po: Update Korean translation Chris Packham (1): completion: support excluding refs Christian Couder (43): apply: make some names more specific apply: move 'struct apply_state' to apply.h builtin/apply: make apply_patch() return -1 or -128 instead of die()ing builtin/apply: read_patch_file() return -1 instead of die()ing builtin/apply: make find_header() return -128 instead of die()ing builtin/apply: make parse_chunk() return a negative integer on error builtin/apply: make parse_single_patch() return -1 on error builtin/apply: make parse_whitespace_option() return -1 instead of die()ing builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing builtin/apply: move init_apply_state() to apply.c apply: make init_apply_state() return -1 instead of exit()ing builtin/apply: make check_apply_state() return -1 instead of die()ing builtin/apply: move check_apply_state() to apply.c builtin/apply: make apply_all_patches() return 128 or 1 on error builtin/apply: make parse_traditional_patch() return -1 on error builtin/apply: make gitdiff_*() return 1 at end of header builtin/apply: make gitdiff_*() return -1 on error builtin/apply: change die_on_unsafe_path() to check_unsafe_path() builtin/apply: make build_fake_ancestor() return -1 on error builtin/apply: make remove_file() return -1 on error builtin/apply: make add_conflicted_stages_file() return -1 on error builtin/apply: make add_index_file() return -1 on error builtin/apply: make create_file() return -1 on error builtin/apply: make write_out_one_result() return -1 on error builtin/apply: make write_out_results() return -1 on error unpack-objects: add --max-input-size= option builtin/apply: make try_create_file() return -1 on error builtin/apply: make create_one_file() return -1 on error builtin/apply: rename option parsing functions apply: rename and move opt constants to apply.h apply: move libified code from builtin/apply.c to apply.{c,h} apply: make some parsing functions static again apply: use error_errno() where possible apply: make it possible to silently apply apply: don't print on stdout in verbosity_silent mode usage: add set_warn_routine() usage: add get_error_routine() and get_warn_routine() apply: change error_routine when silent apply: refactor `git apply` option parsing apply: pass apply state to build_fake_ancestor() apply: learn to use a different index file builtin/am: use apply API in run_apply() split-index: s/eith/with/ typo fix David Aguilar (4): mergetool: add copyright mergetool: move main program flow into a main() function mergetool: honor diff.orderFile mergetool: honor -O David Turner (11): rename_ref_available(): add docstring refs: add methods for reflog refs: add method for initial ref transaction commit refs: make delete_refs() virtual refs: add methods to init refs db refs: add method to rename refs refs: make lock generic refs: implement iteration over only per-worktree refs add David Turner's Two Sigma address fsck: handle bad trees like other errors http: http.emptyauth should allow empty (not just NULL) usernames Dennis Kaarsemaker (1): worktree: allow the main brach of a bare repository to be checked out Dimitriy Ryazantcev (3): l10n: ru.po: update Russian translation git-gui: Update Russian translation l10n: ru.po: update Russian translation Elia Pinto (6): t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var test-lib.sh: preserve GIT_TRACE_CURL from the environment t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var git-check-ref-format.txt: fixup documentation git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution Emily Xie (1): pathspec: warn on empty strings as pathspec Eric Wong (5): http: warn on curl_multi_add_handle failures http: consolidate #ifdefs for curl_multi_remove_handle http: always remove curl easy from curlm session on release git-svn: reduce scope of input record separator change git-svn: "git worktree" awareness Gavin Lambert (1): git-svn: do not reuse caches memoized for a different architecture Ian Kelling (2): gitweb: remove unused guess_file_syntax() parameter gitweb: use highlight's shebang detection Jacob Keller (9): format-patch: show 0/1 and 1/1 for singleton patch with cover letter cache: add empty_tree_oid object and helper function graph: add support for --line-prefix on all graph-aware output diff: prepare for additional submodule formats allow do_submodule_path to work even if submodule isn't checked out submodule: convert show_submodule_summary to use struct object_id * submodule: refactor show_submodule_summary with helper function diff: teach diff to display submodule difference with an inline diff rev-list: use hdr_termination instead of a always using a newline Jakub Narębski (1): configure.ac: improve description of NO_REGEX test Jean-Noel Avila (1): l10n: fr.po v2.11.0_rnd1 Jean-Noël AVILA (1): i18n: i18n: diff: mark die messages for translation Jeff Hostetler (9): status: rename long-format print routines status: cleanup API to wt_status_print status: support --porcelain[=] status: collect per-file data for --porcelain=v2 status: print per-file porcelain v2 status data status: print branch info with --porcelain=v2 --branch git-status.txt: describe --porcelain=v2 format test-lib-functions.sh: add lf_to_nul helper status: unit tests for --porcelain=v2 Jeff King (116): rebase-interactive: drop early check for valid ident provide an initializer for "struct object_info" sha1_file: make packed_object_info public pack-objects: break delta cycles before delta-search phase pack-objects: use mru list when iterating over packs gc: default aggressive depth to 50 cache_or_unpack_entry: drop keep_cache parameter clear_delta_base_cache_entry: use a more descriptive name release_delta_base_cache: reuse existing detach function delta_base_cache: use list.h for LRU delta_base_cache: drop special treatment of blobs delta_base_cache: use hashmap.h t/perf: add basic perf tests for delta base cache index-pack: add --max-input-size= option receive-pack: allow a maximum input size to be specified test-lib: drop PID from test-results/*.count diff-highlight: ignore test cruft diff-highlight: add multi-byte tests diff-highlight: avoid highlighting combined diffs error_errno: use constant return similar to error() color_parse_mem: initialize "struct color" temporary t5305: move cleanup into test block t5305: drop "dry-run" of unpack-objects t5305: use "git -C" t5305: simplify packname handling pack-objects: walk tag chains for --include-tag remote-curl: handle URLs without protocol patch-ids: turn off rename detection add_delta_base_cache: use list_for_each_safe patch-ids: refuse to compute patch-id for merge commit hash-object: always try to set up the git repository patch-id: use RUN_SETUP_GENTLY diff: skip implicit no-index check when given --no-index diff: handle --no-index prefixes consistently diff: always try to set up the repository pager: remove obsolete comment pager: stop loading git_default_config() pager: make pager_program a file-local static pager: use callbacks instead of configset pager: handle early config t1302: use "git -C" test-config: setup git directory config: only read .git/config from configured repos init: expand comments explaining config trickery init: reset cached config when entering new repo t1007: factor out repeated setup verify_packfile: check pack validity before accessing data clone: pass --progress decision to recursive submodules docs/cvsimport: prefer cvs-fast-export to parsecvs docs/cvs-migration: update link to cvsps homepage docs/cvs-migration: mention cvsimport caveats ident: handle NULL ai_canonname get_sha1: detect buggy calls with multiple disambiguators get_sha1: avoid repeating ourselves via ONLY_TO_DIE get_sha1: propagate flags to child functions get_short_sha1: parse tags when looking for treeish get_short_sha1: refactor init of disambiguation code get_short_sha1: NUL-terminate hex prefix get_short_sha1: mark ambiguity error for translation sha1_array: let callbacks interrupt iteration for_each_abbrev: drop duplicate objects get_short_sha1: list ambiguous objects on error xdiff: rename "struct group" to "struct xdlgroup" get_short_sha1: make default disambiguation configurable tree-walk: be more specific about corrupt tree errors graph: fix extra spaces in graph_padding_line t5613: drop reachable_via function t5613: drop test_valid_repo function t5613: use test_must_fail t5613: whitespace/style cleanups t5613: do not chdir in main process find_unique_abbrev: move logic out of get_short_sha1() clone: detect errors in normalize_path_copy files_read_raw_ref: avoid infinite loop on broken symlinks files_read_raw_ref: prevent infinite retry loops in general t5613: clarify "too deep" recursion tests link_alt_odb_entry: handle normalize_path errors link_alt_odb_entry: refactor string handling alternates: provide helper for adding to alternates list alternates: provide helper for allocating alternate alternates: encapsulate alt->base munging alternates: use a separate scratch space fill_sha1_file: write "boring" characters alternates: store scratch buffer as strbuf fill_sha1_file: write into a strbuf count-objects: report alternates via verbose mode sha1_file: always allow relative paths to alternates alternates: use fspathcmp to detect duplicates check_connected: accept an env argument tmp-objdir: introduce API for temporary object directories receive-pack: quarantine objects until pre-receive accepts tmp-objdir: put quarantine information in the environment tmp-objdir: do not migrate files starting with '.' upload-pack: use priority queue in reachable() check merge-base: handle --fork-point without reflog fetch: use "quick" has_sha1_file for tag following test-lib: handle TEST_OUTPUT_DIRECTORY with spaces test-lib: add --verbose-log option travis: use --verbose-log test option test-lib: bail out when "-v" used under "prove" daemon: detect and reject too-long paths read info/{attributes,exclude} only when in repository test-*-cache-tree: setup git dir find_unique_abbrev: use 4-buffer ring diff_unique_abbrev: rename to diff_aligned_abbrev diff_aligned_abbrev: use "struct oid" diff: handle sha1 abbreviations outside of repository git-compat-util: move content inside ifdef/endif guards doc: fix missing "::" in config list t0021: use write_script to create rot13 shell script t0021: put $TEST_ROOT in $PATH t0021: use $PERL_PATH for rot13-filter.pl t0021: fix filehandle usage on older perl alternates: re-allow relative paths from environment sequencer: silence -Wtautological-constant-out-of-range-compare create_branch: drop unused "head" parameter Jiang Xin (6): l10n: zh_CN: fixed some typos for git 2.10.0 l10n: git.pot: v2.11.0 round 1 (209 new, 53 removed) l10n: zh_CN: for git v2.11.0 l10n round 1 i18n: fix unmatched single quote in error message l10n: git.pot: v2.11.0 round 2 (1 new, 1 removed) l10n: Fixed typo of git fetch-pack command Johannes Schindelin (63): cat-file: fix a grammo in the man page sequencer: lib'ify sequencer_pick_revisions() sequencer: do not die() in do_pick_commit() sequencer: lib'ify write_message() sequencer: lib'ify do_recursive_merge() sequencer: lib'ify do_pick_commit() sequencer: lib'ify walk_revs_populate_todo() sequencer: lib'ify prepare_revs() sequencer: lib'ify read_and_refresh_cache() sequencer: lib'ify read_populate_todo() sequencer: lib'ify read_populate_opts() sequencer: lib'ify create_seq_dir() sequencer: lib'ify save_head() sequencer: lib'ify save_todo() sequencer: lib'ify save_opts() sequencer: lib'ify fast_forward_to() sequencer: lib'ify checkout_fast_forward() sequencer: ensure to release the lock when we could not read the index cat-file: introduce the --filters option cat-file --textconv/--filters: allow specifying the path separately cat-file: support --textconv/--filters in batch mode git-gui: respect commit.gpgsign again regex: -G feeds a non NUL-terminated string to regexec() and fails regex: add regexec_buf() that can work on a non NUL-terminated string regex: use regexec_buf() pull: drop confusing prefix parameter of die_on_unclean_work_tree() pull: make code more similar to the shell script again wt-status: make the require_clean_work_tree() function reusable wt-status: export also the has_un{staged,committed}_changes() functions wt-status: teach has_{unstaged,uncommitted}_changes() about submodules wt-status: begin error messages with lower-case reset: fix usage sequencer: use static initializers for replay_opts sequencer: use memoized sequencer directory path sequencer: avoid unnecessary indirection sequencer: future-proof remove_sequencer_state() sequencer: plug memory leaks for the option values sequencer: future-proof read_populate_todo() sequencer: refactor the code to obtain a short commit name sequencer: completely revamp the "todo" script parsing sequencer: strip CR from the todo script sequencer: avoid completely different messages for different actions sequencer: get rid of the subcommand field sequencer: remember the onelines when parsing the todo file sequencer: prepare for rebase -i's commit functionality sequencer: introduce a helper to read files written by scripts sequencer: allow editing the commit message on a case-by-case basis sequencer: support amending commits sequencer: support cleaning up commit messages sequencer: left-trim lines read from the script sequencer: stop releasing the strbuf in write_message() sequencer: roll back lock file if write_message() failed sequencer: refactor write_message() to take a pointer/length sequencer: teach write_message() to append an optional LF sequencer: remove overzealous assumption in rebase -i mode sequencer: mark action_name() for translation sequencer: quote filenames in error messages sequencer: start error messages consistently with lower case sequencer: mark all error messages for translation t6026: ensure that long-running script really is rebase -i: highlight problems with core.commentchar stripspace: respect repository config rebase -i: handle core.commentChar=auto Johannes Sixt (9): t9903: fix broken && chain t6026-merge-attr: clean up background process at end of test case t3700-add: create subdirectory gently t3700-add: do not check working tree file mode without POSIXPERM t0060: sidestep surprising path mangling results on Windows t0021: expect more variations in the output of uniq -c t0021: compute file size with a single process instead of a pipeline t0021, t5615: use $PWD instead of $(pwd) in PATH-like shell variables t6026: clarify the point of "kill $(cat sleep.pid)" Jonathan Nieder (1): connect: tighten check for unexpected early hang up Jonathan Tan (15): tests: move test_lazy_prereq JGIT to test-lib.sh connect: advertized capability is not a ref mailinfo: separate in-body header processing mailinfo: make is_scissors_line take plain char * mailinfo: handle in-body header continuations fetch-pack: do not reset in_vain on non-novel acks trailer: improve const correctness trailer: use list.h for doubly-linked list trailer: streamline trailer item create and add trailer: make args have their own struct trailer: clarify failure modes in parse_trailer trailer: allow non-trailers in trailer block trailer: forbid leading whitespace in trailers trailer: support values folded to multiple lines doc: mention user-configured trailers Josh Triplett (2): format-patch: show base info before email signature format-patch: add "--rfc" for the common case of [RFC PATCH] Junio C Hamano (53): blame: improve diagnosis for "--reverse NEW" blame: dwim "blame --reverse OLD" as "blame --reverse OLD.." am: refactor read_author_script() diff.c: remove output_prefix_length field submodule: avoid auto-discovery in prepare_submodule_repo_env() symbolic-ref -d: do not allow removal of HEAD Prepare for 2.9.4 Start the 2.11 cycle First batch for 2.11 Second batch for 2.11 Third batch for 2.11 Start preparing for 2.10.1 Fourth batch for 2.11 streaming: make sure to notice corrupt object unpack_sha1_header(): detect malformed object header Fifth batch for 2.11 worktree: honor configuration variables blame: use DEFAULT_ABBREV macro Prepare for 2.10.1 Sixth batch for 2.11 diff_unique_abbrev(): document its assumption and limitation abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing abbrev: prepare for new world order Git 2.10.1 Seventh batch for 2.11 t4015: split out the "setup" part of ws-error-highlight test diff.c: refactor parse_ws_error_highlight() diff.c: move ws-error-highlight parsing helpers up diff: introduce diff.wsErrorHighlight option Eighth batch for 2.11 Ninth batch for 2.11 Start preparing for 2.10.2 cocci: refactor common patterns to use xstrdup_or_null() Tenth batch for 2.11 t3700: fix broken test under !SANITY transport: pass summary_width down the callchain fetch: pass summary_width down the callchain transport: allow summary-width to be computed dynamically transport: compute summary-width dynamically Eleventh batch for 2.11 Getting ready for 2.11-rc0 Git 2.10.2 Git 2.11-rc0 A bit of updates post -rc0 Revert "t6026-merge-attr: ensure that the merge driver was called" Revert "t6026-merge-attr: don't fail if sleep exits early" t0021: remove debugging cruft Git 2.11.0-rc1 Git 2.11-rc2 for-each-ref: do not segv with %(HEAD) on an unborn branch mailinfo: read local configuration archive: read local configuration Git 2.11-rc3 Karsten Blees (2): git-gui: unicode file name support on windows git-gui: handle the encoding of Git's output correctly Kevin Daudt (2): t5100-mailinfo: replace common path prefix with variable mailinfo: unescape quoted-pair in header fields Kirill Smelkov (3): pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use pack-objects: use reachability bitmap index when generating non-stdout pack t/perf/run: copy config.mak.autogen & friends to build area Lars Schneider (20): travis-ci: ask homebrew for its path instead of hardcoding it convert: quote filter names in error messages convert: modernize tests run-command: move check_pipe() from write_or_die to run_command run-command: add clean_on_exit_handler pkt-line: rename packet_write() to packet_write_fmt() pkt-line: extract set_packet_header() pkt-line: add packet_write_fmt_gently() pkt-line: add packet_flush_gently() pkt-line: add packet_write_gently() pkt-line: add functions to read/write flush terminated packet streams convert: make apply_filter() adhere to standard Git error handling convert: prepare filter..process option convert: add filter..process option contrib/long-running-filter: add long running filter example sha1_file: rename git_open_noatime() to git_open() sha1_file: open window into packfiles with O_CLOEXEC read-cache: make sure file handles are not inherited by child processes Makefile: set NO_OPENSSL on macOS by default travis-ci: disable GIT_TEST_HTTPD for macOS Linus Torvalds (1): abbrev: auto size the default abbreviation Mantas Mikulėnas (1): contrib: add credential helper for libsecret Matthieu Moy (4): Documentation/config: default for color.* is color.ui parse_mailboxes: accept extra text after address t9000-addresses: update expected results after fix Git.pm: add comment pointing to t9000 Michael Haggerty (36): xdl_change_compact(): fix compaction heuristic to adjust ixo xdl_change_compact(): only use heuristic if group can't be matched is_blank_line(): take a single xrecord_t as argument recs_match(): take two xrecord_t pointers as arguments xdl_change_compact(): introduce the concept of a change group resolve_gitlink_ref(): eliminate temporary variable refs: rename struct ref_cache to files_ref_store refs: create a base class "ref_store" for files_ref_store add_packed_ref(): add a files_ref_store argument get_packed_ref(): add a files_ref_store argument resolve_missing_loose_ref(): add a files_ref_store argument {lock,commit,rollback}_packed_refs(): add files_ref_store arguments refs: reorder definitions resolve_packed_ref(): rename function from resolve_missing_loose_ref() resolve_gitlink_packed_ref(): remove function read_raw_ref(): take a (struct ref_store *) argument resolve_ref_recursively(): new function resolve_gitlink_ref(): implement using resolve_ref_recursively() resolve_gitlink_ref(): avoid memory allocation in many cases resolve_gitlink_ref(): rename path parameter to submodule refs: make read_raw_ref() virtual refs: make verify_refname_available() virtual refs: make pack_refs() virtual refs: make create_symref() virtual refs: make peel_ref() virtual repack_without_refs(): add a files_ref_store argument lock_raw_ref(): add a files_ref_store argument commit_ref_update(): add a files_ref_store argument lock_ref_for_update(): add a files_ref_store argument lock_ref_sha1_basic(): add a files_ref_store argument split_symref_update(): add a files_ref_store argument files_ref_iterator_begin(): take a ref_store argument refs: add method iterator_begin diff: improve positioning of add/delete blocks in diffs parse-options: add parse_opt_unknown_cb() blame: honor the diff heuristic options and config Michael J Gruber (1): gpg-interface: use more status letters Mike Ralphson (1): vcs-svn/fast_export: fix timestamp fmt specifiers Nguyễn Thái Ngọc Duy (40): remote-curl.c: convert fetch_git() to use argv_array transport-helper.c: refactor set_helper_option() upload-pack: move shallow deepen code out of receive_needs() upload-pack: move "shallow" sending code out of deepen() upload-pack: remove unused variable "backup" upload-pack: move "unshallow" sending code out of deepen() upload-pack: use skip_prefix() instead of starts_with() upload-pack: tighten number parsing at "deepen" lines upload-pack: make check_non_tip() clean things up on error upload-pack: move rev-list code out of check_non_tip() fetch-pack: use skip_prefix() instead of starts_with() fetch-pack: use a common function for verbose printing fetch-pack.c: mark strings for translating fetch-pack: use a separate flag for fetch in deepening mode shallow.c: implement a generic shallow boundary finder based on rev-list upload-pack: add deepen-since to cut shallow repos based on time fetch: define shallow boundary with --shallow-since clone: define shallow clone boundary based on time with --shallow-since t5500, t5539: tests for shallow depth since a specific date refs: add expand_ref() upload-pack: support define shallow boundary by excluding revisions fetch: define shallow boundary with --shallow-exclude clone: define shallow clone boundary with --shallow-exclude t5500, t5539: tests for shallow depth excluding a ref upload-pack: split check_unreachable() in two, prep for get_reachable_list() upload-pack: add get_reachable_list() fetch, upload-pack: --deepen=N extends shallow boundary by N commits checkout: add some spaces between code and comment checkout.txt: document a common case that ignores ambiguation rules checkout: fix ambiguity check in subdir init: correct re-initialization from a linked worktree init: call set_git_dir_init() from within init_db() init: kill set_git_dir_init() init: do not set unnecessary core.worktree init: kill git_link variable git-commit.txt: clarify --patch mode with pathspec diff-lib: allow ita entries treated as "not yet exist in index" diff: add --ita-[in]visible-in-index commit: fix empty commit creation when there's no changes but ita entries commit: don't be fooled by ita entries when creating initial commit Olaf Hering (1): git-gui: sort entries in tclIndex Orgad Shaneh (1): git-gui: Do not reset author details on amend Pat Thoyts (7): Allow keyboard control to work in the staging widgets. Amend tab ordering and text widget border and highlighting. git-gui: fix detection of Cygwin git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut` git-gui: maintain backwards compatibility for merge syntax git-gui: avoid persisting modified author identity git-gui: set version 0.21 Patrick Steinhardt (1): doc: fix location of 'info/' with $GIT_COMMON_DIR Peter Krefting (1): l10n: sv.po: Update Swedish translation (2913t0f0u) Petr Stodulka (1): http: control GSSAPI credential delegation Philip Oakley (14): doc: use 'symmetric difference' consistently doc: revisions - name the left and right sides doc: show the actual left, right, and boundary marks doc: revisions: give headings for the two and three dot notations doc: revisions: extra clarification of ^! notation effects doc: revisions: single vs multi-parent notation comparison doc: gitrevisions - use 'reachable' in page description doc: gitrevisions - clarify 'latter case' is revision walk doc: revisions - define `reachable` doc: revisions - clarify reachability examples doc: revisions: show revision expansion in examples doc: revisions: sort examples and fix alignment of the unchanged doc: fix merge-base ASCII art tab spacing doc: fix the 'revert a faulty merge' ASCII art tab spacing Pranit Bauva (2): rev-list-options: clarify the usage of --reverse t0040: convert all possible tests to use `test-parse-options --expect` Ralf Thielow (6): help: introduce option --exclude-guides help: make option --help open man pages only for Git commands rebase -i: improve advice on bad instruction lines l10n: de.po: fix translation of autostash l10n: de.po: translate 260 new messages fetch-pack.c: correct command at the beginning of an error message Ray Chen (1): l10n: zh_CN: review for git v2.10.0 l10n René Scharfe (36): compat: move strdup(3) replacement to its own file introduce hex2chr() for converting two hexadecimal digits to a character strbuf: use valid pointer in strbuf_remove() checkout: constify parameters of checkout_stage() and checkout_merged() unpack-trees: pass checkout state explicitly to check_updates() sha1_file: use llist_mergesort() for sorting packs xdiff: fix merging of hunks with -W context and -u context contrib/coccinelle: fix semantic patch for oid_to_hex_r() add coccicheck make target use strbuf_addstr() for adding constant strings to a strbuf, part 2 pretty: let %C(auto) reset all attributes introduce CHECKOUT_INIT add COPY_ARRAY use COPY_ARRAY git-gui: stop using deprecated merge syntax gitignore: ignore output files of coccicheck make target use strbuf_addstr() instead of strbuf_addf() with "%s", part 2 use strbuf_add_unique_abbrev() for adding short hashes, part 2 add QSORT use QSORT remove unnecessary check before QSORT coccicheck: use --all-includes by default use QSORT, part 2 pretty: avoid adding reset for %C(auto) if output is empty coccicheck: make transformation for strbuf_addf(sb, "...") more precise show-branch: use QSORT remove unnecessary NULL check before free(3) use strbuf_add_unique_abbrev() for adding short hashes, part 3 pretty: fix document link for color specification avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM inline xalloc_flex() into FLEXPTR_ALLOC_MEM hex: make wraparound of the index into ring-buffer explicit valgrind: support test helpers commit: simplify building parents list sha1_name: make wraparound of the index into ring-buffer explicit cocci: avoid self-references in object_id transformations Ronnie Sahlberg (2): refs: add a backend method structure refs: add a transaction_commit() method SZEDER Gábor (1): ref-filter: strip format option after a field name only once while parsing Satoshi Yasushima (6): git-gui: consistently use the same word for "remote" in Japanese git-gui: consistently use the same word for "blame" in Japanese git-gui: apply po template to Japanese translation git-gui: add Japanese language code git-gui: update Japanese translation git-gui: update Japanese information Stefan Beller (16): t7408: modernize style t7408: merge short tests, factor out testing method submodule--helper module-clone: allow multiple references submodule--helper update-clone: allow multiple references clone: factor out checking for an alternate path clone: clarify option_reference as required clone: implement optional references clone: recursive and reference option triggers submodule alternates xdiff: remove unneeded declarations transport: report missing submodule pushes consistently on stderr diff.c: use diff_options directly diff: omit found pointer from emit_callback diff: remove dead code submodule: ignore trailing slash on superproject URL submodule: ignore trailing slash in relative url documentation: improve submodule..{url, path} description Stefan Christ (1): Documentation/fmt-merge-msg: fix markup in example Thomas Gummerer (4): add: document the chmod option update-index: add test for chmod flags read-cache: introduce chmod_index_entry add: modify already added files when --chmod is given Tobias Klauser (1): diffcore-delta: remove unused parameter to diffcore_count_changes() Trần Ngọc Quân (1): l10n: vi.po: Updated translation to v2.11.0 (2913t) Vasco Almeida (33): l10n: pt_PT: update Portuguese translation l10n: pt_PT: update Portuguese repository info i18n: blame: mark error messages for translation i18n: branch: mark option description for translation i18n: config: mark error message for translation i18n: merge-recursive: mark error messages for translation i18n: merge-recursive: mark verbose message for translation i18n: notes: mark error messages for translation notes: spell first word of error messages in lowercase i18n: receive-pack: mark messages for translation i18n: show-branch: mark error messages for translation i18n: show-branch: mark plural strings for translation i18n: update-index: mark warnings for translation i18n: commit: mark message for translation i18n: connect: mark die messages for translation i18n: ident: mark hint for translation i18n: notes-merge: mark die messages for translation i18n: stash: mark messages for translation git-gui i18n: mark strings for translation git-gui: l10n: add Portuguese translation git-gui i18n: internationalize use of colon punctuation git-gui i18n: mark "usage:" strings for translation git-gui: fix incorrect use of Tcl append command git-gui i18n: mark string in lib/error.tcl for translation t1512: become resilient to GETTEXT_POISON build i18n: apply: mark plural string for translation i18n: apply: mark info messages for translation i18n: apply: mark error messages for translation i18n: apply: mark error message for translation i18n: convert mark error messages for translation i18n: credential-cache--daemon: mark advice for translation i18n: diff: mark warnings for translation l10n: pt_PT: update Portuguese translation Vegard Nossum (1): revision: new rev^-n shorthand for rev^n..rev Younes Khoudli (1): doc: remove reference to the traditional layout in git-tag.txt brian m. carlson (20): cache: convert struct cache_entry to use struct object_id builtin/apply: convert static functions to struct object_id builtin/blame: convert struct origin to use struct object_id builtin/log: convert some static functions to use struct object_id builtin/cat-file: convert struct expand_data to use struct object_id builtin/cat-file: convert some static functions to struct object_id builtin: convert textconv_object to use struct object_id streaming: make stream_blob_to_fd take struct object_id builtin/checkout: convert some static functions to struct object_id notes-merge: convert struct notes_merge_pair to struct object_id Convert read_mmblob to take struct object_id. builtin/blame: convert file to use struct object_id builtin/rm: convert to use struct object_id notes: convert init_notes to use struct object_id builtin/update-index: convert file to struct object_id sha1_name: convert get_sha1_mb to struct object_id refs: add an update_ref_oid function. builtin/am: convert to struct object_id builtin/commit-tree: convert to struct object_id builtin/reset: convert to use struct object_id jfbu (1): l10n: fr.po fix grammar mistakes yaras (1): git-gui: fix initial git gui message encoding Ævar Arnfjörð Bjarmason (3): gitweb: fix a typo in a comment gitweb: link to 7-char+ SHA-1s, not only 8-char+ gitweb: link to "git describe"'d commits in log messages Дилян Палаузов (1): ./configure.ac: detect SSL in libcurl using curl-config [Less]
Posted 16 days ago by Junio C Hamano
A release candidate Git v2.11.0-rc2 is now available for testing at the usual places. It is comprised of 646 non-merge commits since v2.10.0, contributed by 68 people, 14 of which are new faces. The tarballs are found at: ... [More] https://www.kernel.org/pub/software/scm/git/testing/ The following public repositories all have a copy of the 'v2.11.0-rc2' tag and the 'master' branch that the tag points at: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = git://git.sourceforge.jp/gitroot/git-core/git.git url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core url = https://github.com/gitster/git New contributors whose contributions weren't in v2.10.0 are as follows. Welcome to the Git development community! Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie, Gavin Lambert, Ian Kelling, Jeff Hostetler, Mantas Mikulėnas, Petr Stodulka, Satoshi Yasushima, Stefan Christ, Vegard Nossum, yaras, and Younes Khoudli. Returning contributors who helped this release are as follows. Thanks for your continued support. Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie, Alex Riesen, Anders Kaseorg, Andreas Schwab, Beat Bolli, Ben North, brian m. carlson, Chris Packham, Christian Couder, David Aguilar, David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia Pinto, Eric Wong, Jacob Keller, Jakub Narębski, Jean-Noël AVILA, Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Josh Triplett, Junio C Hamano, Karsten Blees, Kevin Daudt, Kirill Smelkov, Lars Schneider, Linus Torvalds, Matthieu Moy, Michael Haggerty, Michael J Gruber, Mike Ralphson, Nguyễn Thái Ngọc Duy, Olaf Hering, Orgad Shaneh, Patrick Steinhardt, Pat Thoyts, Philip Oakley, Pranit Bauva, Ralf Thielow, Ray Chen, René Scharfe, Ronnie Sahlberg, Stefan Beller, SZEDER Gábor, Thomas Gummerer, Tobias Klauser, Vasco Almeida, and Дилян Палаузов. ---------------------------------------------------------------- Git 2.11 Release Notes (draft) ============================== Backward compatibility notes. * An empty string used as a pathspec element has always meant 'everything matches', but it is too easy to write a script that finds a path to remove in $path and run 'git rm "$paht"' by mistake (when the user meant to give "$path"), which ends up removing everything. This release starts warning about the use of an empty string that is used for 'everything matches' and asks users to use a more explicit '.' for that instead. The hope is that existing users will not mind this change, and eventually the warning can be turned into a hard error, upgrading the deprecation into removal of this (mis)feature. * The historical argument order "git merge HEAD ..." has been deprecated for quite some time, and will be removed in the next release (not this one). * The default abbreviation length, which has historically been 7, now scales as the repository grows, using the approximate number of objects in the repository and a bit of math around the birthday paradox. The logic suggests to use 12 hexdigits for the Linux kernel, and 9 to 10 for Git itself. Updates since v2.10 ------------------- UI, Workflows & Features * Comes with new version of git-gui, now at its 0.21.0 tag. * "git format-patch --cover-letter HEAD^" to format a single patch with a separate cover letter now numbers the output as [PATCH 0/1] and [PATCH 1/1] by default. * An incoming "git push" that attempts to push too many bytes can now be rejected by setting a new configuration variable at the receiving end. * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand", which was not intuitive, given that "git nosuchcommand" said "git: 'nosuchcommand' is not a git command". * "git clone --recurse-submodules --reference $path $URL" is a way to reduce network transfer cost by borrowing objects in an existing $path repository when cloning the superproject from $URL; it learned to also peek into $path for presence of corresponding repositories of submodules and borrow objects from there when able. * The "git diff --submodule={short,log}" mechanism has been enhanced to allow "--submodule=diff" to show the patch between the submodule commits bound to the superproject. * Even though "git hash-objects", which is a tool to take an on-filesystem data stream and put it into the Git object store, allowed to perform the "outside-world-to-Git" conversions (e.g. end-of-line conversions and application of the clean-filter), and it had the feature on by default from very early days, its reverse operation "git cat-file", which takes an object from the Git object store and externalize for the consumption by the outside world, lacked an equivalent mechanism to run the "Git-to-outside-world" conversion. The command learned the "--filters" option to do so. * Output from "git diff" can be made easier to read by selecting which lines are common and which lines are added/deleted intelligently when the lines before and after the changed section are the same. A command line option is added to help with the experiment to find a good heuristics. * In some projects, it is common to use "[RFC PATCH]" as the subject prefix for a patch meant for discussion rather than application. A new option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH" to help the participants of such projects. * "git add --chmod=+x " added recently only toggled the executable bit for paths that are either new or modified. This has been corrected to flip the executable bit for all paths that match the given pathspec. * When "git format-patch --stdout" output is placed as an in-body header and it uses the RFC2822 header folding, "git am" failed to put the header line back into a single logical line. The underlying "git mailinfo" was taught to handle this properly. * "gitweb" can spawn "highlight" to show blob contents with (programming) language-specific syntax highlighting, but only when the language is known. "highlight" can however be told to make the guess itself by giving it "--force" option, which has been enabled. * "git gui" l10n to Portuguese. * When given an abbreviated object name that is not (or more realistically, "no longer") unique, we gave a fatal error "ambiguous argument". This error is now accompanied by a hint that lists the objects beginning with the given prefix. During the course of development of this new feature, numerous minor bugs were uncovered and corrected, the most notable one of which is that we gave "short SHA1 xxxx is ambiguous." twice without good reason. * "git log rev^..rev" is an often-used revision range specification to show what was done on a side branch merged at rev. This has gained a short-hand "rev^-1". In general "rev^-$n" is the same as "^rev^$n rev", i.e. what has happened on other branches while the history leading to nth parent was looking the other way. * In recent versions of cURL, GSSAPI credential delegation is disabled by default due to CVE-2011-2192; introduce a configuration to selectively allow enabling this. (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint). * "git mergetool" learned to honor "-O" to control the order of paths to present to the end user. * "git diff/log --ws-error-highlight=" lacked the corresponding configuration variable to set it by default. * "git ls-files" learned "--recurse-submodules" option that can be used to get a listing of tracked files across submodules (i.e. this only works with "--cached" option, not for listing untracked or ignored files). This would be a useful tool to sit on the upstream side of a pipe that is read with xargs to work on all working tree files from the top-level superproject. * A new credential helper that talks via "libsecret" with implementations of XDG Secret Service API has been added to contrib/credential/. * The GPG verification status shown in "%G?" pretty format specifier was not rich enough to differentiate a signature made by an expired key, a signature made by a revoked key, etc. New output letters have been assigned to express them. * In addition to purely abbreviated commit object names, "gitweb" learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787) into clickable links in its output. * When new paths were added by "git add -N" to the index, it was enough to circumvent the check by "git commit" to refrain from making an empty commit without "--allow-empty". The same logic prevented "git status" to show such a path as "new file" in the "Changes not staged for commit" section. * The smudge/clean filter API expect an external process is spawned to filter the contents for each path that has a filter defined. A new type of "process" filter API has been added to allow the first request to run the filter for a path to spawn a single process, and all filtering need is served by this single process for multiple paths, reducing the process creation overhead. * The user always has to say "stash@{$N}" when naming a single element in the default location of the stash, i.e. reflogs in refs/stash. The "git stash" command learned to accept "git stash apply 4" as a short-hand for "git stash apply stash@{4}". Performance, Internal Implementation, Development Support etc. * The delta-base-cache mechanism has been a key to the performance in a repository with a tightly packed packfile, but it did not scale well even with a larger value of core.deltaBaseCacheLimit. * Enhance "git status --porcelain" output by collecting more data on the state of the index and the working tree files, which may further be used to teach git-prompt (in contrib/) to make fewer calls to git. * Extract a small helper out of the function that reads the authors script file "git am" internally uses. (merge a77598e jc/am-read-author-file later to maint). * Lifts calls to exit(2) and die() higher in the callchain in sequencer.c files so that more helper functions in it can be used by callers that want to handle error conditions themselves. * "git am" has been taught to make an internal call to "git apply"'s innards without spawning the latter as a separate process. * The ref-store abstraction was introduced to the refs API so that we can plug in different backends to store references. * The "unsigned char sha1[20]" to "struct object_id" conversion continues. Notable changes in this round includes that ce->sha1, i.e. the object name recorded in the cache_entry, turns into an object_id. * JGit can show a fake ref "capabilities^{}" to "git fetch" when it does not advertise any refs, but "git fetch" was not prepared to see such an advertisement. When the other side disconnects without giving any ref advertisement, we used to say "there may not be a repository at that URL", but we may have seen other advertisement like "shallow" and ".have" in which case we definitely know that a repository is there. The code to detect this case has also been updated. * Some codepaths in "git pack-objects" were not ready to use an existing pack bitmap; now they are and as the result they have become faster. * The codepath in "git fsck" to detect malformed tree objects has been updated not to die but keep going after detecting them. * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of the time third parameter is redundant. A new QSORT() macro lets us omit it. * "git pack-objects" in a repository with many packfiles used to spend a lot of time looking for/at objects in them; the accesses to the packfiles are now optimized by checking the most-recently-used packfile first. (merge c9af708b1a jk/pack-objects-optim-mru later to maint). * Codepaths involved in interacting alternate object store have been cleaned up. * In order for the receiving end of "git push" to inspect the received history and decide to reject the push, the objects sent from the sending end need to be made available to the hook and the mechanism for the connectivity check, and this was done traditionally by storing the objects in the receiving repository and letting "git gc" to expire it. Instead, store the newly received objects in a temporary area, and make them available by reusing the alternate object store mechanism to them only while we decide if we accept the check, and once we decide, either migrate them to the repository or purge them immediately. * The require_clean_work_tree() helper was recreated in C when "git pull" was rewritten from shell; the helper is now made available to other callers in preparation for upcoming "rebase -i" work. * "git upload-pack" had its code cleaned-up and performance improved by reducing use of timestamp-ordered commit-list, which was replaced with a priority queue. * "git diff --no-index" codepath has been updated not to try to peek into .git/ directory that happens to be under the current directory, when we know we are operating outside any repository. * Update of the sequencer codebase to make it reusable to reimplement "rebase -i" continues. * Git generally does not explicitly close file descriptors that were open in the parent process when spawning a child process, but most of the time the child does not want to access them. As Windows does not allow removing or renaming a file that has a file descriptor open, a slow-to-exit child can even break the parent process by holding onto them. Use O_CLOEXEC flag to open files in various codepaths. * Update "interpret-trailers" machinery and teaches it that people in real world write all sorts of crufts in the "trailer" that was originally designed to have the neat-o "Mail-Header: like thing" and nothing else. Also contains various documentation updates and code clean-ups. Fixes since v2.10 ----------------- Unless otherwise noted, all the fixes since v2.9 in the maintenance track are contained in this release (see the maintenance releases' notes for details). * Clarify various ways to specify the "revision ranges" in the documentation. * "diff-highlight" script (in contrib/) learned to work better with "git log -p --graph" output. * The test framework left the number of tests and success/failure count in the t/test-results directory, keyed by the name of the test script plus the process ID. The latter however turned out not to serve any useful purpose. The process ID part of the filename has been removed. * Having a submodule whose ".git" repository is somehow corrupt caused a few commands that recurse into submodules loop forever. * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but the resulting repository becomes an invalid one. Teach the command to forbid removal of HEAD. * A test spawned a short-lived background process, which sometimes prevented the test directory from getting removed at the end of the script on some platforms. * Update a few tests that used to use GIT_CURL_VERBOSE to use the newer GIT_TRACE_CURL. * "git pack-objects --include-tag" was taught that when we know that we are sending an object C, we want a tag B that directly points at C but also a tag A that points at the tag B. We used to miss the intermediate tag B in some cases. * Update Japanese translation for "git-gui". * "git fetch http::/site/path" did not die correctly and segfaulted instead. * "git commit-tree" stopped reading commit.gpgsign configuration variable that was meant for Porcelain "git commit" in Git 2.9; we forgot to update "git gui" to look at the configuration to match this change. * "git add --chmod=+x" added recently lacked documentation, which has been corrected. * "git log --cherry-pick" used to include merge commits as candidates to be matched up with other commits, resulting a lot of wasted time. The patch-id generation logic has been updated to ignore merges to avoid the wastage. * The http transport (with curl-multi option, which is the default these days) failed to remove curl-easy handle from a curlm session, which led to unnecessary API failures. * There were numerous corner cases in which the configuration files are read and used or not read at all depending on the directory a Git command was run, leading to inconsistent behaviour. The code to set-up repository access at the beginning of a Git process has been updated to fix them. (merge 4d0efa1 jk/setup-sequence-update later to maint). * "git diff -W" output needs to extend the context backward to include the header line of the current function and also forward to include the body of the entire current function up to the header line of the next one. This process may have to merge two adjacent hunks, but the code forgot to do so in some cases. * Performance tests done via "t/perf" did not use the same set of build configuration if the user relied on autoconf generated configuration. * "git format-patch --base=..." feature that was recently added showed the base commit information after "-- " e-mail signature line, which turned out to be inconvenient. The base information has been moved above the signature line. * More i18n. * Even when "git pull --rebase=preserve" (and the underlying "git rebase --preserve") can complete without creating any new commit (i.e. fast-forwards), it still insisted on having a usable ident information (read: user.email is set correctly), which was less than nice. As the underlying commands used inside "git rebase" would fail with a more meaningful error message and advice text when the bogus ident matters, this extra check was removed. * "git gc --aggressive" used to limit the delta-chain length to 250, which is way too deep for gaining additional space savings and is detrimental for runtime performance. The limit has been reduced to 50. * Documentation for individual configuration variables to control use of color (like `color.grep`) said that their default value is 'false', instead of saying their default is taken from `color.ui`. When we updated the default value for color.ui from 'false' to 'auto' quite a while ago, all of them broke. This has been corrected. * The pretty-format specifier "%C(auto)" used by the "log" family of commands to enable coloring of the output is taught to also issue a color-reset sequence to the output. * A shell script example in check-ref-format documentation has been fixed. * "git checkout " does not follow the usual disambiguation rules when the can be both a rev and a path, to allow checking out a branch 'foo' in a project that happens to have a file 'foo' in the working tree without having to disambiguate. This was poorly documented and the check was incorrect when the command was run from a subdirectory. * Some codepaths in "git diff" used regexec(3) on a buffer that was mmap(2)ed, which may not have a terminating NUL, leading to a read beyond the end of the mapped region. This was fixed by introducing a regexec_buf() helper that takes a pair with REG_STARTEND extension. * The procedure to build Git on Mac OS X for Travis CI hardcoded the internal directory structure we assumed HomeBrew uses, which was a no-no. The procedure has been updated to ask HomeBrew things we need to know to fix this. * When "git rebase -i" is given a broken instruction, it told the user to fix it with "--edit-todo", but didn't say what the step after that was (i.e. "--continue"). * Documentation around tools to import from CVS was fairly outdated. * "git clone --recurse-submodules" lost the progress eye-candy in recent update, which has been corrected. * A low-level function verify_packfile() was meant to show errors that were detected without dying itself, but under some conditions it didn't and died instead, which has been fixed. * When "git fetch" tries to find where the history of the repository it runs in has diverged from what the other side has, it has a mechanism to avoid digging too deep into irrelevant side branches. This however did not work well over the "smart-http" transport due to a design bug, which has been fixed. * In the codepath that comes up with the hostname to be used in an e-mail when the user didn't tell us, we looked at ai_canonname field in struct addrinfo without making sure it is not NULL first. * "git worktree", even though it used the default_abbrev setting that ought to be affected by core.abbrev configuration variable, ignored the variable setting. The command has been taught to read the default set of configuration variables to correct this. * "git init" tried to record core.worktree in the repository's 'config' file when GIT_WORK_TREE environment variable was set and it was different from where GIT_DIR appears as ".git" at its top, but the logic was faulty when .git is a "gitdir:" file that points at the real place, causing trouble in working trees that are managed by "git worktree". This has been corrected. * Codepaths that read from an on-disk loose object were too loose in validating what they are reading is a proper object file and sometimes read past the data they read from the disk, which has been corrected. H/t to Gustavo Grieco for reporting. * The original command line syntax for "git merge", which was "git merge HEAD ...", has been deprecated for quite some time, and "git gui" was the last in-tree user of the syntax. This is finally fixed, so that we can move forward with the deprecation. * An author name, that spelled a backslash-quoted double quote in the human readable part "My \"double quoted\" name", was not unquoted correctly while applying a patch from a piece of e-mail. * Doc update to clarify what "log -3 --reverse" does. * Almost everybody uses DEFAULT_ABBREV to refer to the default setting for the abbreviation, but "git blame" peeked into underlying variable bypassing the macro for no good reason. * The "graph" API used in "git log --graph" miscounted the number of output columns consumed so far when drawing a padding line, which has been fixed; this did not affect any existing code as nobody tried to write anything after the padding on such a line, though. * The code that parses the format parameter of for-each-ref command has seen a micro-optimization. * When we started cURL to talk to imap server when a new enough version of cURL library is available, we forgot to explicitly add imap(s):// before the destination. To some folks, that didn't work and the library tried to make HTTP(s) requests instead. * The ./configure script generated from configure.ac was taught how to detect support of SSL by libcurl better. * The command-line completion script (in contrib/) learned to complete "git cmd ^mas" to complete the negative end of reference to "git cmd ^master". (merge 49416ad22a cp/completion-negative-refs later to maint). * The existing "git fetch --depth=" option was hard to use correctly when making the history of an existing shallow clone deeper. A new option, "--deepen=", has been added to make this easier to use. "git clone" also learned "--shallow-since=" and "--shallow-exclude=" options to make it easier to specify "I am interested only in the recent N months worth of history" and "Give me only the history since that version". (merge cccf74e2da nd/shallow-deepen later to maint). * It is a common mistake to say "git blame --reverse OLD path", expecting that the command line is dwimmed as if asking how lines in path in an old revision OLD have survived up to the current commit. (merge e1d09701a4 jc/blame-reverse later to maint). * http.emptyauth configuration is a way to allow an empty username to pass when attempting to authenticate using mechanisms like Kerberos. We took an unspecified (NULL) username and sent ":" (i.e. no username, no password) to CURLOPT_USERPWD, but did not do the same when the username is explicitly set to an empty string. * "git clone" of a local repository can be done at the filesystem level, but the codepath did not check errors while copying and adjusting the file that lists alternate object stores. * Documentation for "git commit" was updated to clarify that "commit -p " adds to the current contents of the index to come up with what to commit. * A stray symbolic link in $GIT_DIR/refs/ directory could make name resolution loop forever, which has been corrected. * The "submodule..path" stored in .gitmodules is never copied to .git/config and such a key in .git/config has no meaning, but the documentation described it and submodule..url next to each other as if both belong to .git/config. This has been fixed. * In a worktree connected to a repository elsewhere, created via "git worktree", "git checkout" attempts to protect users from confusion by refusing to check out a branch that is already checked out in another worktree. However, this also prevented checking out a branch, which is designated as the primary branch of a bare reopsitory, in a worktree that is connected to the bare repository. The check has been corrected to allow it. * "git rebase" immediately after "git clone" failed to find the fork point from the upstream. * When fetching from a remote that has many tags that are irrelevant to branches we are following, we used to waste way too many cycles when checking if the object pointed at by a tag (that we are not going to fetch!) exists in our repository too carefully. * Protect our code from over-eager compilers. * Recent git allows submodule..branch to use a special token "." instead of the branch name; the documentation has been updated to describe it. * A hot-fix for a test added by a recent topic that went to both 'master' and 'maint' already. * "git send-email" attempts to pick up valid e-mails from the trailers, but people in real world write non-addresses there, like "Cc: Stable # 4.8+", which broke the output depending on the availability and vintage of Mail::Address perl module. (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint). * The Travis CI configuration we ship ran the tests with --verbose option but this risks non-TAP output that happens to be "ok" to be misinterpreted as TAP signalling a test that passed. This resulted in unnecessary failure. This has been corrected by introducing a new mode to run our tests in the test harness to send the verbose output separately to the log file. * Some AsciiDoc formatter mishandles a displayed illustration with tabs in it. Adjust a few of them in merge-base documentation to work around them. * A minor regression fix for "git submodule" that was introduced when more helper functions were reimplemented in C. (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint). * The code that we have used for the past 10+ years to cycle 4-element ring buffers turns out to be not quite portable in theoretical world. (merge bb84735c80 rs/ring-buffer-wraparound later to maint). * "git daemon" used fixed-length buffers to turn URL to the repository the client asked for into the server side directory path, using snprintf() to avoid overflowing these buffers, but allowed possibly truncated paths to the directory. This has been tightened to reject such a request that causes overlong path to be required to serve. (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint). * Recent update to git-sh-setup (a library of shell functions that are used by our in-tree scripted Porcelain commands) included another shell library git-sh-i18n without specifying where it is, relying on the $PATH. This has been fixed to be more explicit by prefixing $(git --exec-path) output in front. (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint). * Fix for a racy false-positive test failure. (merge fdf4f6c79b as/merge-attr-sleep later to maint). * Portability update and workaround for builds on recent Mac OS X. (merge a296bc0132 ls/macos-update later to maint). * Other minor doc, test and build updates and code cleanups. (merge 5c238e29a8 jk/common-main later to maint). (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint). (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint). (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint). (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint). (merge 28fab7b23d nd/test-helpers later to maint). (merge c2bb0c1d1e rs/cocci later to maint). (merge 3285b7badb ps/common-info-doc later to maint). (merge 2b090822e8 nd/worktree-lock later to maint). (merge 4bd488ea7c jk/create-branch-remove-unused-param later to maint). (merge 974e0044d6 tk/diffcore-delta-remove-unused later to maint). ---------------------------------------------------------------- Changes since v2.10.0 are as follows: Aaron M Watson (1): stash: allow stashes to be referenced by index only Alex Henrie (5): am: put spaces around pipe in usage string cat-file: put spaces around pipes in usage string git-rebase--interactive: fix English grammar git-merge-octopus: do not capitalize "octopus" unpack-trees: do not capitalize "working" Alex Riesen (2): git-gui: support for $FILENAMES in tool definitions git-gui: ensure the file in the diff pane is in the list of selected files Alexander Shopov (2): git-gui i18n: Updated Bulgarian translation (565,0f,0u) git-gui: Mark 'All' in remote.tcl for translation Anders Kaseorg (3): imap-send: Tell cURL to use imap:// or imaps:// pre-receive.sample: mark it executable git-sh-setup: be explicit where to dot-source git-sh-i18n from. Andreas Schwab (2): t6026-merge-attr: don't fail if sleep exits early t6026-merge-attr: ensure that the merge driver was called Beat Bolli (1): SubmittingPatches: use gitk's "Copy commit summary" format Ben North (1): git-worktree.txt: fix typo "to"/"two", and add comma Brandon Williams (6): pathspec: remove unnecessary function prototypes git: make super-prefix option ls-files: optionally recurse into submodules ls-files: pass through safe options for --recurse-submodules ls-files: add pathspec matching for submodules submodules doc: update documentation for "." used for submodule branches Brian Henderson (3): diff-highlight: add some tests diff-highlight: add failing test for handling --graph output diff-highlight: add support for --graph output Chris Packham (1): completion: support excluding refs Christian Couder (43): apply: make some names more specific apply: move 'struct apply_state' to apply.h builtin/apply: make apply_patch() return -1 or -128 instead of die()ing builtin/apply: read_patch_file() return -1 instead of die()ing builtin/apply: make find_header() return -128 instead of die()ing builtin/apply: make parse_chunk() return a negative integer on error builtin/apply: make parse_single_patch() return -1 on error builtin/apply: make parse_whitespace_option() return -1 instead of die()ing builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing builtin/apply: move init_apply_state() to apply.c apply: make init_apply_state() return -1 instead of exit()ing builtin/apply: make check_apply_state() return -1 instead of die()ing builtin/apply: move check_apply_state() to apply.c builtin/apply: make apply_all_patches() return 128 or 1 on error builtin/apply: make parse_traditional_patch() return -1 on error builtin/apply: make gitdiff_*() return 1 at end of header builtin/apply: make gitdiff_*() return -1 on error builtin/apply: change die_on_unsafe_path() to check_unsafe_path() builtin/apply: make build_fake_ancestor() return -1 on error builtin/apply: make remove_file() return -1 on error builtin/apply: make add_conflicted_stages_file() return -1 on error builtin/apply: make add_index_file() return -1 on error builtin/apply: make create_file() return -1 on error builtin/apply: make write_out_one_result() return -1 on error builtin/apply: make write_out_results() return -1 on error unpack-objects: add --max-input-size= option builtin/apply: make try_create_file() return -1 on error builtin/apply: make create_one_file() return -1 on error builtin/apply: rename option parsing functions apply: rename and move opt constants to apply.h apply: move libified code from builtin/apply.c to apply.{c,h} apply: make some parsing functions static again apply: use error_errno() where possible apply: make it possible to silently apply apply: don't print on stdout in verbosity_silent mode usage: add set_warn_routine() usage: add get_error_routine() and get_warn_routine() apply: change error_routine when silent apply: refactor `git apply` option parsing apply: pass apply state to build_fake_ancestor() apply: learn to use a different index file builtin/am: use apply API in run_apply() split-index: s/eith/with/ typo fix David Aguilar (4): mergetool: add copyright mergetool: move main program flow into a main() function mergetool: honor diff.orderFile mergetool: honor -O David Turner (11): rename_ref_available(): add docstring refs: add methods for reflog refs: add method for initial ref transaction commit refs: make delete_refs() virtual refs: add methods to init refs db refs: add method to rename refs refs: make lock generic refs: implement iteration over only per-worktree refs add David Turner's Two Sigma address fsck: handle bad trees like other errors http: http.emptyauth should allow empty (not just NULL) usernames Dennis Kaarsemaker (1): worktree: allow the main brach of a bare repository to be checked out Dimitriy Ryazantcev (2): l10n: ru.po: update Russian translation git-gui: Update Russian translation Elia Pinto (6): t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var test-lib.sh: preserve GIT_TRACE_CURL from the environment t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var git-check-ref-format.txt: fixup documentation git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution Emily Xie (1): pathspec: warn on empty strings as pathspec Eric Wong (5): http: warn on curl_multi_add_handle failures http: consolidate #ifdefs for curl_multi_remove_handle http: always remove curl easy from curlm session on release git-svn: reduce scope of input record separator change git-svn: "git worktree" awareness Gavin Lambert (1): git-svn: do not reuse caches memoized for a different architecture Ian Kelling (2): gitweb: remove unused guess_file_syntax() parameter gitweb: use highlight's shebang detection Jacob Keller (9): format-patch: show 0/1 and 1/1 for singleton patch with cover letter cache: add empty_tree_oid object and helper function graph: add support for --line-prefix on all graph-aware output diff: prepare for additional submodule formats allow do_submodule_path to work even if submodule isn't checked out submodule: convert show_submodule_summary to use struct object_id * submodule: refactor show_submodule_summary with helper function diff: teach diff to display submodule difference with an inline diff rev-list: use hdr_termination instead of a always using a newline Jakub Narębski (1): configure.ac: improve description of NO_REGEX test Jean-Noël AVILA (1): i18n: i18n: diff: mark die messages for translation Jeff Hostetler (9): status: rename long-format print routines status: cleanup API to wt_status_print status: support --porcelain[=] status: collect per-file data for --porcelain=v2 status: print per-file porcelain v2 status data status: print branch info with --porcelain=v2 --branch git-status.txt: describe --porcelain=v2 format test-lib-functions.sh: add lf_to_nul helper status: unit tests for --porcelain=v2 Jeff King (116): rebase-interactive: drop early check for valid ident provide an initializer for "struct object_info" sha1_file: make packed_object_info public pack-objects: break delta cycles before delta-search phase pack-objects: use mru list when iterating over packs gc: default aggressive depth to 50 cache_or_unpack_entry: drop keep_cache parameter clear_delta_base_cache_entry: use a more descriptive name release_delta_base_cache: reuse existing detach function delta_base_cache: use list.h for LRU delta_base_cache: drop special treatment of blobs delta_base_cache: use hashmap.h t/perf: add basic perf tests for delta base cache index-pack: add --max-input-size= option receive-pack: allow a maximum input size to be specified test-lib: drop PID from test-results/*.count diff-highlight: ignore test cruft diff-highlight: add multi-byte tests diff-highlight: avoid highlighting combined diffs error_errno: use constant return similar to error() color_parse_mem: initialize "struct color" temporary t5305: move cleanup into test block t5305: drop "dry-run" of unpack-objects t5305: use "git -C" t5305: simplify packname handling pack-objects: walk tag chains for --include-tag remote-curl: handle URLs without protocol patch-ids: turn off rename detection add_delta_base_cache: use list_for_each_safe patch-ids: refuse to compute patch-id for merge commit hash-object: always try to set up the git repository patch-id: use RUN_SETUP_GENTLY diff: skip implicit no-index check when given --no-index diff: handle --no-index prefixes consistently diff: always try to set up the repository pager: remove obsolete comment pager: stop loading git_default_config() pager: make pager_program a file-local static pager: use callbacks instead of configset pager: handle early config t1302: use "git -C" test-config: setup git directory config: only read .git/config from configured repos init: expand comments explaining config trickery init: reset cached config when entering new repo t1007: factor out repeated setup verify_packfile: check pack validity before accessing data clone: pass --progress decision to recursive submodules docs/cvsimport: prefer cvs-fast-export to parsecvs docs/cvs-migration: update link to cvsps homepage docs/cvs-migration: mention cvsimport caveats ident: handle NULL ai_canonname get_sha1: detect buggy calls with multiple disambiguators get_sha1: avoid repeating ourselves via ONLY_TO_DIE get_sha1: propagate flags to child functions get_short_sha1: parse tags when looking for treeish get_short_sha1: refactor init of disambiguation code get_short_sha1: NUL-terminate hex prefix get_short_sha1: mark ambiguity error for translation sha1_array: let callbacks interrupt iteration for_each_abbrev: drop duplicate objects get_short_sha1: list ambiguous objects on error xdiff: rename "struct group" to "struct xdlgroup" get_short_sha1: make default disambiguation configurable tree-walk: be more specific about corrupt tree errors graph: fix extra spaces in graph_padding_line t5613: drop reachable_via function t5613: drop test_valid_repo function t5613: use test_must_fail t5613: whitespace/style cleanups t5613: do not chdir in main process find_unique_abbrev: move logic out of get_short_sha1() clone: detect errors in normalize_path_copy files_read_raw_ref: avoid infinite loop on broken symlinks files_read_raw_ref: prevent infinite retry loops in general t5613: clarify "too deep" recursion tests link_alt_odb_entry: handle normalize_path errors link_alt_odb_entry: refactor string handling alternates: provide helper for adding to alternates list alternates: provide helper for allocating alternate alternates: encapsulate alt->base munging alternates: use a separate scratch space fill_sha1_file: write "boring" characters alternates: store scratch buffer as strbuf fill_sha1_file: write into a strbuf count-objects: report alternates via verbose mode sha1_file: always allow relative paths to alternates alternates: use fspathcmp to detect duplicates check_connected: accept an env argument tmp-objdir: introduce API for temporary object directories receive-pack: quarantine objects until pre-receive accepts tmp-objdir: put quarantine information in the environment tmp-objdir: do not migrate files starting with '.' upload-pack: use priority queue in reachable() check merge-base: handle --fork-point without reflog fetch: use "quick" has_sha1_file for tag following test-lib: handle TEST_OUTPUT_DIRECTORY with spaces test-lib: add --verbose-log option travis: use --verbose-log test option test-lib: bail out when "-v" used under "prove" daemon: detect and reject too-long paths read info/{attributes,exclude} only when in repository test-*-cache-tree: setup git dir find_unique_abbrev: use 4-buffer ring diff_unique_abbrev: rename to diff_aligned_abbrev diff_aligned_abbrev: use "struct oid" diff: handle sha1 abbreviations outside of repository git-compat-util: move content inside ifdef/endif guards doc: fix missing "::" in config list t0021: use write_script to create rot13 shell script t0021: put $TEST_ROOT in $PATH t0021: use $PERL_PATH for rot13-filter.pl t0021: fix filehandle usage on older perl alternates: re-allow relative paths from environment sequencer: silence -Wtautological-constant-out-of-range-compare create_branch: drop unused "head" parameter Jiang Xin (1): l10n: zh_CN: fixed some typos for git 2.10.0 Johannes Schindelin (60): cat-file: fix a grammo in the man page sequencer: lib'ify sequencer_pick_revisions() sequencer: do not die() in do_pick_commit() sequencer: lib'ify write_message() sequencer: lib'ify do_recursive_merge() sequencer: lib'ify do_pick_commit() sequencer: lib'ify walk_revs_populate_todo() sequencer: lib'ify prepare_revs() sequencer: lib'ify read_and_refresh_cache() sequencer: lib'ify read_populate_todo() sequencer: lib'ify read_populate_opts() sequencer: lib'ify create_seq_dir() sequencer: lib'ify save_head() sequencer: lib'ify save_todo() sequencer: lib'ify save_opts() sequencer: lib'ify fast_forward_to() sequencer: lib'ify checkout_fast_forward() sequencer: ensure to release the lock when we could not read the index cat-file: introduce the --filters option cat-file --textconv/--filters: allow specifying the path separately cat-file: support --textconv/--filters in batch mode git-gui: respect commit.gpgsign again regex: -G feeds a non NUL-terminated string to regexec() and fails regex: add regexec_buf() that can work on a non NUL-terminated string regex: use regexec_buf() pull: drop confusing prefix parameter of die_on_unclean_work_tree() pull: make code more similar to the shell script again wt-status: make the require_clean_work_tree() function reusable wt-status: export also the has_un{staged,committed}_changes() functions wt-status: teach has_{unstaged,uncommitted}_changes() about submodules wt-status: begin error messages with lower-case reset: fix usage sequencer: use static initializers for replay_opts sequencer: use memoized sequencer directory path sequencer: avoid unnecessary indirection sequencer: future-proof remove_sequencer_state() sequencer: plug memory leaks for the option values sequencer: future-proof read_populate_todo() sequencer: refactor the code to obtain a short commit name sequencer: completely revamp the "todo" script parsing sequencer: strip CR from the todo script sequencer: avoid completely different messages for different actions sequencer: get rid of the subcommand field sequencer: remember the onelines when parsing the todo file sequencer: prepare for rebase -i's commit functionality sequencer: introduce a helper to read files written by scripts sequencer: allow editing the commit message on a case-by-case basis sequencer: support amending commits sequencer: support cleaning up commit messages sequencer: left-trim lines read from the script sequencer: stop releasing the strbuf in write_message() sequencer: roll back lock file if write_message() failed sequencer: refactor write_message() to take a pointer/length sequencer: teach write_message() to append an optional LF sequencer: remove overzealous assumption in rebase -i mode sequencer: mark action_name() for translation sequencer: quote filenames in error messages sequencer: start error messages consistently with lower case sequencer: mark all error messages for translation t6026: ensure that long-running script really is Johannes Sixt (9): t9903: fix broken && chain t6026-merge-attr: clean up background process at end of test case t3700-add: create subdirectory gently t3700-add: do not check working tree file mode without POSIXPERM t0060: sidestep surprising path mangling results on Windows t0021: expect more variations in the output of uniq -c t0021: compute file size with a single process instead of a pipeline t0021, t5615: use $PWD instead of $(pwd) in PATH-like shell variables t6026: clarify the point of "kill $(cat sleep.pid)" Jonathan Nieder (1): connect: tighten check for unexpected early hang up Jonathan Tan (14): tests: move test_lazy_prereq JGIT to test-lib.sh connect: advertized capability is not a ref mailinfo: separate in-body header processing mailinfo: make is_scissors_line take plain char * mailinfo: handle in-body header continuations fetch-pack: do not reset in_vain on non-novel acks trailer: improve const correctness trailer: use list.h for doubly-linked list trailer: streamline trailer item create and add trailer: make args have their own struct trailer: clarify failure modes in parse_trailer trailer: allow non-trailers in trailer block trailer: forbid leading whitespace in trailers trailer: support values folded to multiple lines Josh Triplett (2): format-patch: show base info before email signature format-patch: add "--rfc" for the common case of [RFC PATCH] Junio C Hamano (49): blame: improve diagnosis for "--reverse NEW" blame: dwim "blame --reverse OLD" as "blame --reverse OLD.." am: refactor read_author_script() diff.c: remove output_prefix_length field submodule: avoid auto-discovery in prepare_submodule_repo_env() symbolic-ref -d: do not allow removal of HEAD Prepare for 2.9.4 Start the 2.11 cycle First batch for 2.11 Second batch for 2.11 Third batch for 2.11 Start preparing for 2.10.1 Fourth batch for 2.11 streaming: make sure to notice corrupt object unpack_sha1_header(): detect malformed object header Fifth batch for 2.11 worktree: honor configuration variables blame: use DEFAULT_ABBREV macro Prepare for 2.10.1 Sixth batch for 2.11 diff_unique_abbrev(): document its assumption and limitation abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing abbrev: prepare for new world order Git 2.10.1 Seventh batch for 2.11 t4015: split out the "setup" part of ws-error-highlight test diff.c: refactor parse_ws_error_highlight() diff.c: move ws-error-highlight parsing helpers up diff: introduce diff.wsErrorHighlight option Eighth batch for 2.11 Ninth batch for 2.11 Start preparing for 2.10.2 cocci: refactor common patterns to use xstrdup_or_null() Tenth batch for 2.11 t3700: fix broken test under !SANITY transport: pass summary_width down the callchain fetch: pass summary_width down the callchain transport: allow summary-width to be computed dynamically transport: compute summary-width dynamically Eleventh batch for 2.11 Getting ready for 2.11-rc0 Git 2.10.2 Git 2.11-rc0 A bit of updates post -rc0 Revert "t6026-merge-attr: ensure that the merge driver was called" Revert "t6026-merge-attr: don't fail if sleep exits early" t0021: remove debugging cruft Git 2.11.0-rc1 Git 2.11-rc2 Karsten Blees (2): git-gui: unicode file name support on windows git-gui: handle the encoding of Git's output correctly Kevin Daudt (2): t5100-mailinfo: replace common path prefix with variable mailinfo: unescape quoted-pair in header fields Kirill Smelkov (3): pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use pack-objects: use reachability bitmap index when generating non-stdout pack t/perf/run: copy config.mak.autogen & friends to build area Lars Schneider (20): travis-ci: ask homebrew for its path instead of hardcoding it convert: quote filter names in error messages convert: modernize tests run-command: move check_pipe() from write_or_die to run_command run-command: add clean_on_exit_handler pkt-line: rename packet_write() to packet_write_fmt() pkt-line: extract set_packet_header() pkt-line: add packet_write_fmt_gently() pkt-line: add packet_flush_gently() pkt-line: add packet_write_gently() pkt-line: add functions to read/write flush terminated packet streams convert: make apply_filter() adhere to standard Git error handling convert: prepare filter..process option convert: add filter..process option contrib/long-running-filter: add long running filter example sha1_file: rename git_open_noatime() to git_open() sha1_file: open window into packfiles with O_CLOEXEC read-cache: make sure file handles are not inherited by child processes Makefile: set NO_OPENSSL on macOS by default travis-ci: disable GIT_TEST_HTTPD for macOS Linus Torvalds (1): abbrev: auto size the default abbreviation Mantas Mikulėnas (1): contrib: add credential helper for libsecret Matthieu Moy (4): Documentation/config: default for color.* is color.ui parse_mailboxes: accept extra text after address t9000-addresses: update expected results after fix Git.pm: add comment pointing to t9000 Michael Haggerty (36): xdl_change_compact(): fix compaction heuristic to adjust ixo xdl_change_compact(): only use heuristic if group can't be matched is_blank_line(): take a single xrecord_t as argument recs_match(): take two xrecord_t pointers as arguments xdl_change_compact(): introduce the concept of a change group resolve_gitlink_ref(): eliminate temporary variable refs: rename struct ref_cache to files_ref_store refs: create a base class "ref_store" for files_ref_store add_packed_ref(): add a files_ref_store argument get_packed_ref(): add a files_ref_store argument resolve_missing_loose_ref(): add a files_ref_store argument {lock,commit,rollback}_packed_refs(): add files_ref_store arguments refs: reorder definitions resolve_packed_ref(): rename function from resolve_missing_loose_ref() resolve_gitlink_packed_ref(): remove function read_raw_ref(): take a (struct ref_store *) argument resolve_ref_recursively(): new function resolve_gitlink_ref(): implement using resolve_ref_recursively() resolve_gitlink_ref(): avoid memory allocation in many cases resolve_gitlink_ref(): rename path parameter to submodule refs: make read_raw_ref() virtual refs: make verify_refname_available() virtual refs: make pack_refs() virtual refs: make create_symref() virtual refs: make peel_ref() virtual repack_without_refs(): add a files_ref_store argument lock_raw_ref(): add a files_ref_store argument commit_ref_update(): add a files_ref_store argument lock_ref_for_update(): add a files_ref_store argument lock_ref_sha1_basic(): add a files_ref_store argument split_symref_update(): add a files_ref_store argument files_ref_iterator_begin(): take a ref_store argument refs: add method iterator_begin diff: improve positioning of add/delete blocks in diffs parse-options: add parse_opt_unknown_cb() blame: honor the diff heuristic options and config Michael J Gruber (1): gpg-interface: use more status letters Mike Ralphson (1): vcs-svn/fast_export: fix timestamp fmt specifiers Nguyễn Thái Ngọc Duy (40): remote-curl.c: convert fetch_git() to use argv_array transport-helper.c: refactor set_helper_option() upload-pack: move shallow deepen code out of receive_needs() upload-pack: move "shallow" sending code out of deepen() upload-pack: remove unused variable "backup" upload-pack: move "unshallow" sending code out of deepen() upload-pack: use skip_prefix() instead of starts_with() upload-pack: tighten number parsing at "deepen" lines upload-pack: make check_non_tip() clean things up on error upload-pack: move rev-list code out of check_non_tip() fetch-pack: use skip_prefix() instead of starts_with() fetch-pack: use a common function for verbose printing fetch-pack.c: mark strings for translating fetch-pack: use a separate flag for fetch in deepening mode shallow.c: implement a generic shallow boundary finder based on rev-list upload-pack: add deepen-since to cut shallow repos based on time fetch: define shallow boundary with --shallow-since clone: define shallow clone boundary based on time with --shallow-since t5500, t5539: tests for shallow depth since a specific date refs: add expand_ref() upload-pack: support define shallow boundary by excluding revisions fetch: define shallow boundary with --shallow-exclude clone: define shallow clone boundary with --shallow-exclude t5500, t5539: tests for shallow depth excluding a ref upload-pack: split check_unreachable() in two, prep for get_reachable_list() upload-pack: add get_reachable_list() fetch, upload-pack: --deepen=N extends shallow boundary by N commits checkout: add some spaces between code and comment checkout.txt: document a common case that ignores ambiguation rules checkout: fix ambiguity check in subdir init: correct re-initialization from a linked worktree init: call set_git_dir_init() from within init_db() init: kill set_git_dir_init() init: do not set unnecessary core.worktree init: kill git_link variable git-commit.txt: clarify --patch mode with pathspec diff-lib: allow ita entries treated as "not yet exist in index" diff: add --ita-[in]visible-in-index commit: fix empty commit creation when there's no changes but ita entries commit: don't be fooled by ita entries when creating initial commit Olaf Hering (1): git-gui: sort entries in tclIndex Orgad Shaneh (1): git-gui: Do not reset author details on amend Pat Thoyts (7): Allow keyboard control to work in the staging widgets. Amend tab ordering and text widget border and highlighting. git-gui: fix detection of Cygwin git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut` git-gui: maintain backwards compatibility for merge syntax git-gui: avoid persisting modified author identity git-gui: set version 0.21 Patrick Steinhardt (1): doc: fix location of 'info/' with $GIT_COMMON_DIR Petr Stodulka (1): http: control GSSAPI credential delegation Philip Oakley (14): doc: use 'symmetric difference' consistently doc: revisions - name the left and right sides doc: show the actual left, right, and boundary marks doc: revisions: give headings for the two and three dot notations doc: revisions: extra clarification of ^! notation effects doc: revisions: single vs multi-parent notation comparison doc: gitrevisions - use 'reachable' in page description doc: gitrevisions - clarify 'latter case' is revision walk doc: revisions - define `reachable` doc: revisions - clarify reachability examples doc: revisions: show revision expansion in examples doc: revisions: sort examples and fix alignment of the unchanged doc: fix merge-base ASCII art tab spacing doc: fix the 'revert a faulty merge' ASCII art tab spacing Pranit Bauva (2): rev-list-options: clarify the usage of --reverse t0040: convert all possible tests to use `test-parse-options --expect` Ralf Thielow (6): help: introduce option --exclude-guides help: make option --help open man pages only for Git commands rebase -i: improve advice on bad instruction lines l10n: de.po: fix translation of autostash l10n: de.po: translate 260 new messages fetch-pack.c: correct command at the beginning of an error message Ray Chen (1): l10n: zh_CN: review for git v2.10.0 l10n René Scharfe (36): compat: move strdup(3) replacement to its own file introduce hex2chr() for converting two hexadecimal digits to a character strbuf: use valid pointer in strbuf_remove() checkout: constify parameters of checkout_stage() and checkout_merged() unpack-trees: pass checkout state explicitly to check_updates() sha1_file: use llist_mergesort() for sorting packs xdiff: fix merging of hunks with -W context and -u context contrib/coccinelle: fix semantic patch for oid_to_hex_r() add coccicheck make target use strbuf_addstr() for adding constant strings to a strbuf, part 2 pretty: let %C(auto) reset all attributes introduce CHECKOUT_INIT add COPY_ARRAY use COPY_ARRAY git-gui: stop using deprecated merge syntax gitignore: ignore output files of coccicheck make target use strbuf_addstr() instead of strbuf_addf() with "%s", part 2 use strbuf_add_unique_abbrev() for adding short hashes, part 2 add QSORT use QSORT remove unnecessary check before QSORT coccicheck: use --all-includes by default use QSORT, part 2 pretty: avoid adding reset for %C(auto) if output is empty coccicheck: make transformation for strbuf_addf(sb, "...") more precise show-branch: use QSORT remove unnecessary NULL check before free(3) use strbuf_add_unique_abbrev() for adding short hashes, part 3 pretty: fix document link for color specification avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM inline xalloc_flex() into FLEXPTR_ALLOC_MEM hex: make wraparound of the index into ring-buffer explicit valgrind: support test helpers commit: simplify building parents list sha1_name: make wraparound of the index into ring-buffer explicit cocci: avoid self-references in object_id transformations Ronnie Sahlberg (2): refs: add a backend method structure refs: add a transaction_commit() method SZEDER Gábor (1): ref-filter: strip format option after a field name only once while parsing Satoshi Yasushima (6): git-gui: consistently use the same word for "remote" in Japanese git-gui: consistently use the same word for "blame" in Japanese git-gui: apply po template to Japanese translation git-gui: add Japanese language code git-gui: update Japanese translation git-gui: update Japanese information Stefan Beller (16): t7408: modernize style t7408: merge short tests, factor out testing method submodule--helper module-clone: allow multiple references submodule--helper update-clone: allow multiple references clone: factor out checking for an alternate path clone: clarify option_reference as required clone: implement optional references clone: recursive and reference option triggers submodule alternates xdiff: remove unneeded declarations transport: report missing submodule pushes consistently on stderr diff.c: use diff_options directly diff: omit found pointer from emit_callback diff: remove dead code submodule: ignore trailing slash on superproject URL submodule: ignore trailing slash in relative url documentation: improve submodule..{url, path} description Stefan Christ (1): Documentation/fmt-merge-msg: fix markup in example Thomas Gummerer (4): add: document the chmod option update-index: add test for chmod flags read-cache: introduce chmod_index_entry add: modify already added files when --chmod is given Tobias Klauser (1): diffcore-delta: remove unused parameter to diffcore_count_changes() Vasco Almeida (32): l10n: pt_PT: update Portuguese translation l10n: pt_PT: update Portuguese repository info i18n: blame: mark error messages for translation i18n: branch: mark option description for translation i18n: config: mark error message for translation i18n: merge-recursive: mark error messages for translation i18n: merge-recursive: mark verbose message for translation i18n: notes: mark error messages for translation notes: spell first word of error messages in lowercase i18n: receive-pack: mark messages for translation i18n: show-branch: mark error messages for translation i18n: show-branch: mark plural strings for translation i18n: update-index: mark warnings for translation i18n: commit: mark message for translation i18n: connect: mark die messages for translation i18n: ident: mark hint for translation i18n: notes-merge: mark die messages for translation i18n: stash: mark messages for translation git-gui i18n: mark strings for translation git-gui: l10n: add Portuguese translation git-gui i18n: internationalize use of colon punctuation git-gui i18n: mark "usage:" strings for translation git-gui: fix incorrect use of Tcl append command git-gui i18n: mark string in lib/error.tcl for translation t1512: become resilient to GETTEXT_POISON build i18n: apply: mark plural string for translation i18n: apply: mark info messages for translation i18n: apply: mark error messages for translation i18n: apply: mark error message for translation i18n: convert mark error messages for translation i18n: credential-cache--daemon: mark advice for translation i18n: diff: mark warnings for translation Vegard Nossum (1): revision: new rev^-n shorthand for rev^n..rev Younes Khoudli (1): doc: remove reference to the traditional layout in git-tag.txt brian m. carlson (20): cache: convert struct cache_entry to use struct object_id builtin/apply: convert static functions to struct object_id builtin/blame: convert struct origin to use struct object_id builtin/log: convert some static functions to use struct object_id builtin/cat-file: convert struct expand_data to use struct object_id builtin/cat-file: convert some static functions to struct object_id builtin: convert textconv_object to use struct object_id streaming: make stream_blob_to_fd take struct object_id builtin/checkout: convert some static functions to struct object_id notes-merge: convert struct notes_merge_pair to struct object_id Convert read_mmblob to take struct object_id. builtin/blame: convert file to use struct object_id builtin/rm: convert to use struct object_id notes: convert init_notes to use struct object_id builtin/update-index: convert file to struct object_id sha1_name: convert get_sha1_mb to struct object_id refs: add an update_ref_oid function. builtin/am: convert to struct object_id builtin/commit-tree: convert to struct object_id builtin/reset: convert to use struct object_id yaras (1): git-gui: fix initial git gui message encoding Ævar Arnfjörð Bjarmason (3): gitweb: fix a typo in a comment gitweb: link to 7-char+ SHA-1s, not only 8-char+ gitweb: link to "git describe"'d commits in log messages Дилян Палаузов (1): ./configure.ac: detect SSL in libcurl using curl-config [Less]
Posted 16 days ago by Jonas Fonseca
Hello, A new minor version of tig is available which adds support for diff-highlight (see instructions below) and navigation between merge commits as well as several keybinding tweaks. Tarballs should now be downloaded from GitHub. Either go to ... [More] https://github.com/jonas/tig/releases or use the following pattern: https://github.com/jonas/tig/releases/download/tig-VERSION/tig-VERSION.tar.gz MD5 checksums can be found at: https://github.com/jonas/tig/releases/download/tig-VERSION/tig-VERSION.tar.gz.md5 Similarly, the home page is now also on GitHub at https://jonas.github.io/tig/. A big thanks to Simon L. B. Nielsen for generously hosting Tig on nitro.dk! Release notes ------------- Improvements: - Support Git's 'diff-highlight' program when `diff-highlight` is set to either true or the path of the script to use for post-processing. - Add navigation between merge commits. (GH #525) - Add 'A' as a binding to apply a stash without dropping it. - Bind 'Ctrl-D' and 'Ctrl-U' to half-page movements by default. - manual: Mention how to change default Up/Down behavior in diff view. Bug fixes - Reorganize checking of libraries for termcap functions. - Fix `:goto ` error message. Change summary -------------- The short diffstat and log summary for changes made in this release. 118 files changed, 3765 insertions(+), 3284 deletions(-) 22 Jonas Fonseca 1 Frank Fesevur 1 Jelte Fennema 1 Jeremy Lin 1 Parker Coates 1 Philipp Gesang 1 Ramsay Jones 1 David Lin 1 lightside -- Jonas Fonseca [Less]
Posted 17 days ago by Christian Couder
Hi everyone, I'm happy announce that the 21th edition of Git Rev News is now published: https://git.github.io/rev_news/2016/11/16/edition-21/ Thanks a lot to all the contributors and helpers, especially Jacob, Dscho, Markus, Gábor and Peff! Enjoy, Christian, Thomas and Jakub.
Posted 22 days ago by Junio C Hamano
A release candidate Git v2.11.0-rc1 is now available for testing at the usual places. It is comprised of 642 non-merge commits since v2.10.0, contributed by 66 people, 14 of which are new faces. Due to the last-minute fixups and timezone ... [More] differences, there might be a few more updates to test scripts that are necessary depending on your platform, but otherwise this should be pretty much what the final 2.11 will look like. The tarballs are found at: https://www.kernel.org/pub/software/scm/git/testing/ The following public repositories all have a copy of the 'v2.11.0-rc1' tag and the 'master' branch that the tag points at: url = https://kernel.googlesource.com/pub/scm/git/git url = git://repo.or.cz/alt-git.git url = git://git.sourceforge.jp/gitroot/git-core/git.git url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core url = https://github.com/gitster/git New contributors whose contributions weren't in v2.10.0 are as follows. Welcome to the Git development community! Aaron M Watson, Brandon Williams, Brian Henderson, Emily Xie, Gavin Lambert, Ian Kelling, Jeff Hostetler, Mantas Mikulėnas, Petr Stodulka, Satoshi Yasushima, Stefan Christ, Vegard Nossum, yaras, and Younes Khoudli. Returning contributors who helped this release are as follows. Thanks for your continued support. Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex Henrie, Alex Riesen, Anders Kaseorg, Andreas Schwab, Beat Bolli, brian m. carlson, Chris Packham, Christian Couder, David Aguilar, David Turner, Dennis Kaarsemaker, Dimitriy Ryazantcev, Elia Pinto, Eric Wong, Jacob Keller, Jakub Narębski, Jean-Noël AVILA, Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt, Jonathan Nieder, Jonathan Tan, Josh Triplett, Junio C Hamano, Karsten Blees, Kevin Daudt, Kirill Smelkov, Lars Schneider, Linus Torvalds, Matthieu Moy, Michael Haggerty, Michael J Gruber, Mike Ralphson, Nguyễn Thái Ngọc Duy, Olaf Hering, Orgad Shaneh, Patrick Steinhardt, Pat Thoyts, Philip Oakley, Pranit Bauva, Ralf Thielow, Ray Chen, René Scharfe, Ronnie Sahlberg, Stefan Beller, SZEDER Gábor, Thomas Gummerer, Vasco Almeida, and Дилян Палаузов. ---------------------------------------------------------------- Git 2.11 Release Notes (draft) ============================== Backward compatibility notes. * An empty string used as a pathspec element has always meant 'everything matches', but it is too easy to write a script that finds a path to remove in $path and run 'git rm "$paht"' by mistake (when the user meant to give "$path"), which ends up removing everything. This release starts warning about the use of an empty string that is used for 'everything matches' and asks users to use a more explicit '.' for that instead. The hope is that existing users will not mind this change, and eventually the warning can be turned into a hard error, upgrading the deprecation into removal of this (mis)feature. * The historical argument order "git merge HEAD ..." has been deprecated for quite some time, and will be removed in the next release (not this one). * The default abbreviation length, which has historically been 7, now scales as the repository grows, using the approximate number of objects in the repository and a bit of math around the birthday paradox. The logic suggests to use 12 hexdigits for the Linux kernel, and 9 to 10 for Git itself. Updates since v2.10 ------------------- UI, Workflows & Features * Comes with new version of git-gui, now at its 0.21.0 tag. * "git format-patch --cover-letter HEAD^" to format a single patch with a separate cover letter now numbers the output as [PATCH 0/1] and [PATCH 1/1] by default. * An incoming "git push" that attempts to push too many bytes can now be rejected by setting a new configuration variable at the receiving end. * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand", which was not intuitive, given that "git nosuchcommand" said "git: 'nosuchcommand' is not a git command". * "git clone --recurse-submodules --reference $path $URL" is a way to reduce network transfer cost by borrowing objects in an existing $path repository when cloning the superproject from $URL; it learned to also peek into $path for presence of corresponding repositories of submodules and borrow objects from there when able. * The "git diff --submodule={short,log}" mechanism has been enhanced to allow "--submodule=diff" to show the patch between the submodule commits bound to the superproject. * Even though "git hash-objects", which is a tool to take an on-filesystem data stream and put it into the Git object store, allowed to perform the "outside-world-to-Git" conversions (e.g. end-of-line conversions and application of the clean-filter), and it had the feature on by default from very early days, its reverse operation "git cat-file", which takes an object from the Git object store and externalize for the consumption by the outside world, lacked an equivalent mechanism to run the "Git-to-outside-world" conversion. The command learned the "--filters" option to do so. * Output from "git diff" can be made easier to read by selecting which lines are common and which lines are added/deleted intelligently when the lines before and after the changed section are the same. A command line option is added to help with the experiment to find a good heuristics. * In some projects, it is common to use "[RFC PATCH]" as the subject prefix for a patch meant for discussion rather than application. A new option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH" to help the participants of such projects. * "git add --chmod=+x " added recently only toggled the executable bit for paths that are either new or modified. This has been corrected to flip the executable bit for all paths that match the given pathspec. * When "git format-patch --stdout" output is placed as an in-body header and it uses the RFC2822 header folding, "git am" failed to put the header line back into a single logical line. The underlying "git mailinfo" was taught to handle this properly. * "gitweb" can spawn "highlight" to show blob contents with (programming) language-specific syntax highlighting, but only when the language is known. "highlight" can however be told to make the guess itself by giving it "--force" option, which has been enabled. * "git gui" l10n to Portuguese. * When given an abbreviated object name that is not (or more realistically, "no longer") unique, we gave a fatal error "ambiguous argument". This error is now accompanied by a hint that lists the objects beginning with the given prefix. During the course of development of this new feature, numerous minor bugs were uncovered and corrected, the most notable one of which is that we gave "short SHA1 xxxx is ambiguous." twice without good reason. * "git log rev^..rev" is an often-used revision range specification to show what was done on a side branch merged at rev. This has gained a short-hand "rev^-1". In general "rev^-$n" is the same as "^rev^$n rev", i.e. what has happened on other branches while the history leading to nth parent was looking the other way. * In recent versions of cURL, GSSAPI credential delegation is disabled by default due to CVE-2011-2192; introduce a configuration to selectively allow enabling this. (merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint). * "git mergetool" learned to honor "-O" to control the order of paths to present to the end user. * "git diff/log --ws-error-highlight=" lacked the corresponding configuration variable to set it by default. * "git ls-files" learned "--recurse-submodules" option that can be used to get a listing of tracked files across submodules (i.e. this only works with "--cached" option, not for listing untracked or ignored files). This would be a useful tool to sit on the upstream side of a pipe that is read with xargs to work on all working tree files from the top-level superproject. * A new credential helper that talks via "libsecret" with implementations of XDG Secret Service API has been added to contrib/credential/. * The GPG verification status shown in "%G?" pretty format specifier was not rich enough to differentiate a signature made by an expired key, a signature made by a revoked key, etc. New output letters have been assigned to express them. * In addition to purely abbreviated commit object names, "gitweb" learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787) into clickable links in its output. * When new paths were added by "git add -N" to the index, it was enough to circumvent the check by "git commit" to refrain from making an empty commit without "--allow-empty". The same logic prevented "git status" to show such a path as "new file" in the "Changes not staged for commit" section. * The smudge/clean filter API expect an external process is spawned to filter the contents for each path that has a filter defined. A new type of "process" filter API has been added to allow the first request to run the filter for a path to spawn a single process, and all filtering need is served by this single process for multiple paths, reducing the process creation overhead. * The user always has to say "stash@{$N}" when naming a single element in the default location of the stash, i.e. reflogs in refs/stash. The "git stash" command learned to accept "git stash apply 4" as a short-hand for "git stash apply stash@{4}". Performance, Internal Implementation, Development Support etc. * The delta-base-cache mechanism has been a key to the performance in a repository with a tightly packed packfile, but it did not scale well even with a larger value of core.deltaBaseCacheLimit. * Enhance "git status --porcelain" output by collecting more data on the state of the index and the working tree files, which may further be used to teach git-prompt (in contrib/) to make fewer calls to git. * Extract a small helper out of the function that reads the authors script file "git am" internally uses. (merge a77598e jc/am-read-author-file later to maint). * Lifts calls to exit(2) and die() higher in the callchain in sequencer.c files so that more helper functions in it can be used by callers that want to handle error conditions themselves. * "git am" has been taught to make an internal call to "git apply"'s innards without spawning the latter as a separate process. * The ref-store abstraction was introduced to the refs API so that we can plug in different backends to store references. * The "unsigned char sha1[20]" to "struct object_id" conversion continues. Notable changes in this round includes that ce->sha1, i.e. the object name recorded in the cache_entry, turns into an object_id. * JGit can show a fake ref "capabilities^{}" to "git fetch" when it does not advertise any refs, but "git fetch" was not prepared to see such an advertisement. When the other side disconnects without giving any ref advertisement, we used to say "there may not be a repository at that URL", but we may have seen other advertisement like "shallow" and ".have" in which case we definitely know that a repository is there. The code to detect this case has also been updated. * Some codepaths in "git pack-objects" were not ready to use an existing pack bitmap; now they are and as the result they have become faster. * The codepath in "git fsck" to detect malformed tree objects has been updated not to die but keep going after detecting them. * We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of the time third parameter is redundant. A new QSORT() macro lets us omit it. * "git pack-objects" in a repository with many packfiles used to spend a lot of time looking for/at objects in them; the accesses to the packfiles are now optimized by checking the most-recently-used packfile first. (merge c9af708b1a jk/pack-objects-optim-mru later to maint). * Codepaths involved in interacting alternate object store have been cleaned up. * In order for the receiving end of "git push" to inspect the received history and decide to reject the push, the objects sent from the sending end need to be made available to the hook and the mechanism for the connectivity check, and this was done traditionally by storing the objects in the receiving repository and letting "git gc" to expire it. Instead, store the newly received objects in a temporary area, and make them available by reusing the alternate object store mechanism to them only while we decide if we accept the check, and once we decide, either migrate them to the repository or purge them immediately. * The require_clean_work_tree() helper was recreated in C when "git pull" was rewritten from shell; the helper is now made available to other callers in preparation for upcoming "rebase -i" work. * "git upload-pack" had its code cleaned-up and performance improved by reducing use of timestamp-ordered commit-list, which was replaced with a priority queue. * "git diff --no-index" codepath has been updated not to try to peek into .git/ directory that happens to be under the current directory, when we know we are operating outside any repository. * Update of the sequencer codebase to make it reusable to reimplement "rebase -i" continues. * Git generally does not explicitly close file descriptors that were open in the parent process when spawning a child process, but most of the time the child does not want to access them. As Windows does not allow removing or renaming a file that has a file descriptor open, a slow-to-exit child can even break the parent process by holding onto them. Use O_CLOEXEC flag to open files in various codepaths. * Update "interpret-trailers" machinery and teaches it that people in real world write all sorts of crufts in the "trailer" that was originally designed to have the neat-o "Mail-Header: like thing" and nothing else. Also contains various documentation updates and code clean-ups. Fixes since v2.10 ----------------- Unless otherwise noted, all the fixes since v2.9 in the maintenance track are contained in this release (see the maintenance releases' notes for details). * Clarify various ways to specify the "revision ranges" in the documentation. * "diff-highlight" script (in contrib/) learned to work better with "git log -p --graph" output. * The test framework left the number of tests and success/failure count in the t/test-results directory, keyed by the name of the test script plus the process ID. The latter however turned out not to serve any useful purpose. The process ID part of the filename has been removed. * Having a submodule whose ".git" repository is somehow corrupt caused a few commands that recurse into submodules loop forever. * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but the resulting repository becomes an invalid one. Teach the command to forbid removal of HEAD. * A test spawned a short-lived background process, which sometimes prevented the test directory from getting removed at the end of the script on some platforms. * Update a few tests that used to use GIT_CURL_VERBOSE to use the newer GIT_TRACE_CURL. * "git pack-objects --include-tag" was taught that when we know that we are sending an object C, we want a tag B that directly points at C but also a tag A that points at the tag B. We used to miss the intermediate tag B in some cases. * Update Japanese translation for "git-gui". * "git fetch http::/site/path" did not die correctly and segfaulted instead. * "git commit-tree" stopped reading commit.gpgsign configuration variable that was meant for Porcelain "git commit" in Git 2.9; we forgot to update "git gui" to look at the configuration to match this change. * "git add --chmod=+x" added recently lacked documentation, which has been corrected. * "git log --cherry-pick" used to include merge commits as candidates to be matched up with other commits, resulting a lot of wasted time. The patch-id generation logic has been updated to ignore merges to avoid the wastage. * The http transport (with curl-multi option, which is the default these days) failed to remove curl-easy handle from a curlm session, which led to unnecessary API failures. * There were numerous corner cases in which the configuration files are read and used or not read at all depending on the directory a Git command was run, leading to inconsistent behaviour. The code to set-up repository access at the beginning of a Git process has been updated to fix them. (merge 4d0efa1 jk/setup-sequence-update later to maint). * "git diff -W" output needs to extend the context backward to include the header line of the current function and also forward to include the body of the entire current function up to the header line of the next one. This process may have to merge two adjacent hunks, but the code forgot to do so in some cases. * Performance tests done via "t/perf" did not use the same set of build configuration if the user relied on autoconf generated configuration. * "git format-patch --base=..." feature that was recently added showed the base commit information after "-- " e-mail signature line, which turned out to be inconvenient. The base information has been moved above the signature line. * More i18n. * Even when "git pull --rebase=preserve" (and the underlying "git rebase --preserve") can complete without creating any new commit (i.e. fast-forwards), it still insisted on having a usable ident information (read: user.email is set correctly), which was less than nice. As the underlying commands used inside "git rebase" would fail with a more meaningful error message and advice text when the bogus ident matters, this extra check was removed. * "git gc --aggressive" used to limit the delta-chain length to 250, which is way too deep for gaining additional space savings and is detrimental for runtime performance. The limit has been reduced to 50. * Documentation for individual configuration variables to control use of color (like `color.grep`) said that their default value is 'false', instead of saying their default is taken from `color.ui`. When we updated the default value for color.ui from 'false' to 'auto' quite a while ago, all of them broke. This has been corrected. * The pretty-format specifier "%C(auto)" used by the "log" family of commands to enable coloring of the output is taught to also issue a color-reset sequence to the output. * A shell script example in check-ref-format documentation has been fixed. * "git checkout " does not follow the usual disambiguation rules when the can be both a rev and a path, to allow checking out a branch 'foo' in a project that happens to have a file 'foo' in the working tree without having to disambiguate. This was poorly documented and the check was incorrect when the command was run from a subdirectory. * Some codepaths in "git diff" used regexec(3) on a buffer that was mmap(2)ed, which may not have a terminating NUL, leading to a read beyond the end of the mapped region. This was fixed by introducing a regexec_buf() helper that takes a pair with REG_STARTEND extension. * The procedure to build Git on Mac OS X for Travis CI hardcoded the internal directory structure we assumed HomeBrew uses, which was a no-no. The procedure has been updated to ask HomeBrew things we need to know to fix this. * When "git rebase -i" is given a broken instruction, it told the user to fix it with "--edit-todo", but didn't say what the step after that was (i.e. "--continue"). * Documentation around tools to import from CVS was fairly outdated. * "git clone --recurse-submodules" lost the progress eye-candy in recent update, which has been corrected. * A low-level function verify_packfile() was meant to show errors that were detected without dying itself, but under some conditions it didn't and died instead, which has been fixed. * When "git fetch" tries to find where the history of the repository it runs in has diverged from what the other side has, it has a mechanism to avoid digging too deep into irrelevant side branches. This however did not work well over the "smart-http" transport due to a design bug, which has been fixed. * In the codepath that comes up with the hostname to be used in an e-mail when the user didn't tell us, we looked at ai_canonname field in struct addrinfo without making sure it is not NULL first. * "git worktree", even though it used the default_abbrev setting that ought to be affected by core.abbrev configuration variable, ignored the variable setting. The command has been taught to read the default set of configuration variables to correct this. * "git init" tried to record core.worktree in the repository's 'config' file when GIT_WORK_TREE environment variable was set and it was different from where GIT_DIR appears as ".git" at its top, but the logic was faulty when .git is a "gitdir:" file that points at the real place, causing trouble in working trees that are managed by "git worktree". This has been corrected. * Codepaths that read from an on-disk loose object were too loose in validating what they are reading is a proper object file and sometimes read past the data they read from the disk, which has been corrected. H/t to Gustavo Grieco for reporting. * The original command line syntax for "git merge", which was "git merge HEAD ...", has been deprecated for quite some time, and "git gui" was the last in-tree user of the syntax. This is finally fixed, so that we can move forward with the deprecation. * An author name, that spelled a backslash-quoted double quote in the human readable part "My \"double quoted\" name", was not unquoted correctly while applying a patch from a piece of e-mail. * Doc update to clarify what "log -3 --reverse" does. * Almost everybody uses DEFAULT_ABBREV to refer to the default setting for the abbreviation, but "git blame" peeked into underlying variable bypassing the macro for no good reason. * The "graph" API used in "git log --graph" miscounted the number of output columns consumed so far when drawing a padding line, which has been fixed; this did not affect any existing code as nobody tried to write anything after the padding on such a line, though. * The code that parses the format parameter of for-each-ref command has seen a micro-optimization. * When we started cURL to talk to imap server when a new enough version of cURL library is available, we forgot to explicitly add imap(s):// before the destination. To some folks, that didn't work and the library tried to make HTTP(s) requests instead. * The ./configure script generated from configure.ac was taught how to detect support of SSL by libcurl better. * The command-line completion script (in contrib/) learned to complete "git cmd ^mas" to complete the negative end of reference to "git cmd ^master". (merge 49416ad22a cp/completion-negative-refs later to maint). * The existing "git fetch --depth=" option was hard to use correctly when making the history of an existing shallow clone deeper. A new option, "--deepen=", has been added to make this easier to use. "git clone" also learned "--shallow-since=" and "--shallow-exclude=" options to make it easier to specify "I am interested only in the recent N months worth of history" and "Give me only the history since that version". (merge cccf74e2da nd/shallow-deepen later to maint). * It is a common mistake to say "git blame --reverse OLD path", expecting that the command line is dwimmed as if asking how lines in path in an old revision OLD have survived up to the current commit. (merge e1d09701a4 jc/blame-reverse later to maint). * http.emptyauth configuration is a way to allow an empty username to pass when attempting to authenticate using mechanisms like Kerberos. We took an unspecified (NULL) username and sent ":" (i.e. no username, no password) to CURLOPT_USERPWD, but did not do the same when the username is explicitly set to an empty string. * "git clone" of a local repository can be done at the filesystem level, but the codepath did not check errors while copying and adjusting the file that lists alternate object stores. * Documentation for "git commit" was updated to clarify that "commit -p " adds to the current contents of the index to come up with what to commit. * A stray symbolic link in $GIT_DIR/refs/ directory could make name resolution loop forever, which has been corrected. * The "submodule..path" stored in .gitmodules is never copied to .git/config and such a key in .git/config has no meaning, but the documentation described it and submodule..url next to each other as if both belong to .git/config. This has been fixed. * In a worktree connected to a repository elsewhere, created via "git worktree", "git checkout" attempts to protect users from confusion by refusing to check out a branch that is already checked out in another worktree. However, this also prevented checking out a branch, which is designated as the primary branch of a bare reopsitory, in a worktree that is connected to the bare repository. The check has been corrected to allow it. * "git rebase" immediately after "git clone" failed to find the fork point from the upstream. * When fetching from a remote that has many tags that are irrelevant to branches we are following, we used to waste way too many cycles when checking if the object pointed at by a tag (that we are not going to fetch!) exists in our repository too carefully. * Protect our code from over-eager compilers. * Recent git allows submodule..branch to use a special token "." instead of the branch name; the documentation has been updated to describe it. * A hot-fix for a test added by a recent topic that went to both 'master' and 'maint' already. * "git send-email" attempts to pick up valid e-mails from the trailers, but people in real world write non-addresses there, like "Cc: Stable # 4.8+", which broke the output depending on the availability and vintage of Mail::Address perl module. (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint). * The Travis CI configuration we ship ran the tests with --verbose option but this risks non-TAP output that happens to be "ok" to be misinterpreted as TAP signalling a test that passed. This resulted in unnecessary failure. This has been corrected by introducing a new mode to run our tests in the test harness to send the verbose output separately to the log file. * Some AsciiDoc formatter mishandles a displayed illustration with tabs in it. Adjust a few of them in merge-base documentation to work around them. * A minor regression fix for "git submodule" that was introduced when more helper functions were reimplemented in C. (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint). * The code that we have used for the past 10+ years to cycle 4-element ring buffers turns out to be not quite portable in theoretical world. (merge bb84735c80 rs/ring-buffer-wraparound later to maint). * "git daemon" used fixed-length buffers to turn URL to the repository the client asked for into the server side directory path, using snprintf() to avoid overflowing these buffers, but allowed possibly truncated paths to the directory. This has been tightened to reject such a request that causes overlong path to be required to serve. (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint). * Recent update to git-sh-setup (a library of shell functions that are used by our in-tree scripted Porcelain commands) included another shell library git-sh-i18n without specifying where it is, relying on the $PATH. This has been fixed to be more explicit by prefixing $(git --exec-path) output in front. (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint). * Fix for a racy false-positive test failure. (merge fdf4f6c79b as/merge-attr-sleep later to maint). * Portability update and workaround for builds on recent Mac OS X. (merge a296bc0132 ls/macos-update later to maint). * Other minor doc, test and build updates and code cleanups. (merge 5c238e29a8 jk/common-main later to maint). (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint). (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint). (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint). (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint). (merge 28fab7b23d nd/test-helpers later to maint). (merge c2bb0c1d1e rs/cocci later to maint). (merge 3285b7badb ps/common-info-doc later to maint). ---------------------------------------------------------------- Changes since v2.10.0 are as follows: Aaron M Watson (1): stash: allow stashes to be referenced by index only Alex Henrie (5): am: put spaces around pipe in usage string cat-file: put spaces around pipes in usage string git-rebase--interactive: fix English grammar git-merge-octopus: do not capitalize "octopus" unpack-trees: do not capitalize "working" Alex Riesen (2): git-gui: support for $FILENAMES in tool definitions git-gui: ensure the file in the diff pane is in the list of selected files Alexander Shopov (2): git-gui i18n: Updated Bulgarian translation (565,0f,0u) git-gui: Mark 'All' in remote.tcl for translation Anders Kaseorg (3): imap-send: Tell cURL to use imap:// or imaps:// pre-receive.sample: mark it executable git-sh-setup: be explicit where to dot-source git-sh-i18n from. Andreas Schwab (2): t6026-merge-attr: don't fail if sleep exits early t6026-merge-attr: ensure that the merge driver was called Beat Bolli (1): SubmittingPatches: use gitk's "Copy commit summary" format Brandon Williams (6): pathspec: remove unnecessary function prototypes git: make super-prefix option ls-files: optionally recurse into submodules ls-files: pass through safe options for --recurse-submodules ls-files: add pathspec matching for submodules submodules doc: update documentation for "." used for submodule branches Brian Henderson (3): diff-highlight: add some tests diff-highlight: add failing test for handling --graph output diff-highlight: add support for --graph output Chris Packham (1): completion: support excluding refs Christian Couder (43): apply: make some names more specific apply: move 'struct apply_state' to apply.h builtin/apply: make apply_patch() return -1 or -128 instead of die()ing builtin/apply: read_patch_file() return -1 instead of die()ing builtin/apply: make find_header() return -128 instead of die()ing builtin/apply: make parse_chunk() return a negative integer on error builtin/apply: make parse_single_patch() return -1 on error builtin/apply: make parse_whitespace_option() return -1 instead of die()ing builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ing builtin/apply: move init_apply_state() to apply.c apply: make init_apply_state() return -1 instead of exit()ing builtin/apply: make check_apply_state() return -1 instead of die()ing builtin/apply: move check_apply_state() to apply.c builtin/apply: make apply_all_patches() return 128 or 1 on error builtin/apply: make parse_traditional_patch() return -1 on error builtin/apply: make gitdiff_*() return 1 at end of header builtin/apply: make gitdiff_*() return -1 on error builtin/apply: change die_on_unsafe_path() to check_unsafe_path() builtin/apply: make build_fake_ancestor() return -1 on error builtin/apply: make remove_file() return -1 on error builtin/apply: make add_conflicted_stages_file() return -1 on error builtin/apply: make add_index_file() return -1 on error builtin/apply: make create_file() return -1 on error builtin/apply: make write_out_one_result() return -1 on error builtin/apply: make write_out_results() return -1 on error unpack-objects: add --max-input-size= option builtin/apply: make try_create_file() return -1 on error builtin/apply: make create_one_file() return -1 on error builtin/apply: rename option parsing functions apply: rename and move opt constants to apply.h apply: move libified code from builtin/apply.c to apply.{c,h} apply: make some parsing functions static again apply: use error_errno() where possible apply: make it possible to silently apply apply: don't print on stdout in verbosity_silent mode usage: add set_warn_routine() usage: add get_error_routine() and get_warn_routine() apply: change error_routine when silent apply: refactor `git apply` option parsing apply: pass apply state to build_fake_ancestor() apply: learn to use a different index file builtin/am: use apply API in run_apply() split-index: s/eith/with/ typo fix David Aguilar (4): mergetool: add copyright mergetool: move main program flow into a main() function mergetool: honor diff.orderFile mergetool: honor -O David Turner (11): rename_ref_available(): add docstring refs: add methods for reflog refs: add method for initial ref transaction commit refs: make delete_refs() virtual refs: add methods to init refs db refs: add method to rename refs refs: make lock generic refs: implement iteration over only per-worktree refs add David Turner's Two Sigma address fsck: handle bad trees like other errors http: http.emptyauth should allow empty (not just NULL) usernames Dennis Kaarsemaker (1): worktree: allow the main brach of a bare repository to be checked out Dimitriy Ryazantcev (2): l10n: ru.po: update Russian translation git-gui: Update Russian translation Elia Pinto (6): t5541-http-push-smart.sh: use the GIT_TRACE_CURL environment var test-lib.sh: preserve GIT_TRACE_CURL from the environment t5550-http-fetch-dumb.sh: use the GIT_TRACE_CURL environment var t5551-http-fetch-smart.sh: use the GIT_TRACE_CURL environment var git-check-ref-format.txt: fixup documentation git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution Emily Xie (1): pathspec: warn on empty strings as pathspec Eric Wong (5): http: warn on curl_multi_add_handle failures http: consolidate #ifdefs for curl_multi_remove_handle http: always remove curl easy from curlm session on release git-svn: reduce scope of input record separator change git-svn: "git worktree" awareness Gavin Lambert (1): git-svn: do not reuse caches memoized for a different architecture Ian Kelling (2): gitweb: remove unused guess_file_syntax() parameter gitweb: use highlight's shebang detection Jacob Keller (9): format-patch: show 0/1 and 1/1 for singleton patch with cover letter cache: add empty_tree_oid object and helper function graph: add support for --line-prefix on all graph-aware output diff: prepare for additional submodule formats allow do_submodule_path to work even if submodule isn't checked out submodule: convert show_submodule_summary to use struct object_id * submodule: refactor show_submodule_summary with helper function diff: teach diff to display submodule difference with an inline diff rev-list: use hdr_termination instead of a always using a newline Jakub Narębski (1): configure.ac: improve description of NO_REGEX test Jean-Noël AVILA (1): i18n: i18n: diff: mark die messages for translation Jeff Hostetler (9): status: rename long-format print routines status: cleanup API to wt_status_print status: support --porcelain[=] status: collect per-file data for --porcelain=v2 status: print per-file porcelain v2 status data status: print branch info with --porcelain=v2 --branch git-status.txt: describe --porcelain=v2 format test-lib-functions.sh: add lf_to_nul helper status: unit tests for --porcelain=v2 Jeff King (115): rebase-interactive: drop early check for valid ident provide an initializer for "struct object_info" sha1_file: make packed_object_info public pack-objects: break delta cycles before delta-search phase pack-objects: use mru list when iterating over packs gc: default aggressive depth to 50 cache_or_unpack_entry: drop keep_cache parameter clear_delta_base_cache_entry: use a more descriptive name release_delta_base_cache: reuse existing detach function delta_base_cache: use list.h for LRU delta_base_cache: drop special treatment of blobs delta_base_cache: use hashmap.h t/perf: add basic perf tests for delta base cache index-pack: add --max-input-size= option receive-pack: allow a maximum input size to be specified test-lib: drop PID from test-results/*.count diff-highlight: ignore test cruft diff-highlight: add multi-byte tests diff-highlight: avoid highlighting combined diffs error_errno: use constant return similar to error() color_parse_mem: initialize "struct color" temporary t5305: move cleanup into test block t5305: drop "dry-run" of unpack-objects t5305: use "git -C" t5305: simplify packname handling pack-objects: walk tag chains for --include-tag remote-curl: handle URLs without protocol patch-ids: turn off rename detection add_delta_base_cache: use list_for_each_safe patch-ids: refuse to compute patch-id for merge commit hash-object: always try to set up the git repository patch-id: use RUN_SETUP_GENTLY diff: skip implicit no-index check when given --no-index diff: handle --no-index prefixes consistently diff: always try to set up the repository pager: remove obsolete comment pager: stop loading git_default_config() pager: make pager_program a file-local static pager: use callbacks instead of configset pager: handle early config t1302: use "git -C" test-config: setup git directory config: only read .git/config from configured repos init: expand comments explaining config trickery init: reset cached config when entering new repo t1007: factor out repeated setup verify_packfile: check pack validity before accessing data clone: pass --progress decision to recursive submodules docs/cvsimport: prefer cvs-fast-export to parsecvs docs/cvs-migration: update link to cvsps homepage docs/cvs-migration: mention cvsimport caveats ident: handle NULL ai_canonname get_sha1: detect buggy calls with multiple disambiguators get_sha1: avoid repeating ourselves via ONLY_TO_DIE get_sha1: propagate flags to child functions get_short_sha1: parse tags when looking for treeish get_short_sha1: refactor init of disambiguation code get_short_sha1: NUL-terminate hex prefix get_short_sha1: mark ambiguity error for translation sha1_array: let callbacks interrupt iteration for_each_abbrev: drop duplicate objects get_short_sha1: list ambiguous objects on error xdiff: rename "struct group" to "struct xdlgroup" get_short_sha1: make default disambiguation configurable tree-walk: be more specific about corrupt tree errors graph: fix extra spaces in graph_padding_line t5613: drop reachable_via function t5613: drop test_valid_repo function t5613: use test_must_fail t5613: whitespace/style cleanups t5613: do not chdir in main process find_unique_abbrev: move logic out of get_short_sha1() clone: detect errors in normalize_path_copy files_read_raw_ref: avoid infinite loop on broken symlinks files_read_raw_ref: prevent infinite retry loops in general t5613: clarify "too deep" recursion tests link_alt_odb_entry: handle normalize_path errors link_alt_odb_entry: refactor string handling alternates: provide helper for adding to alternates list alternates: provide helper for allocating alternate alternates: encapsulate alt->base munging alternates: use a separate scratch space fill_sha1_file: write "boring" characters alternates: store scratch buffer as strbuf fill_sha1_file: write into a strbuf count-objects: report alternates via verbose mode sha1_file: always allow relative paths to alternates alternates: use fspathcmp to detect duplicates check_connected: accept an env argument tmp-objdir: introduce API for temporary object directories receive-pack: quarantine objects until pre-receive accepts tmp-objdir: put quarantine information in the environment tmp-objdir: do not migrate files starting with '.' upload-pack: use priority queue in reachable() check merge-base: handle --fork-point without reflog fetch: use "quick" has_sha1_file for tag following test-lib: handle TEST_OUTPUT_DIRECTORY with spaces test-lib: add --verbose-log option travis: use --verbose-log test option test-lib: bail out when "-v" used under "prove" daemon: detect and reject too-long paths read info/{attributes,exclude} only when in repository test-*-cache-tree: setup git dir find_unique_abbrev: use 4-buffer ring diff_unique_abbrev: rename to diff_aligned_abbrev diff_aligned_abbrev: use "struct oid" diff: handle sha1 abbreviations outside of repository git-compat-util: move content inside ifdef/endif guards doc: fix missing "::" in config list t0021: use write_script to create rot13 shell script t0021: put $TEST_ROOT in $PATH t0021: use $PERL_PATH for rot13-filter.pl t0021: fix filehandle usage on older perl alternates: re-allow relative paths from environment sequencer: silence -Wtautological-constant-out-of-range-compare Jiang Xin (1): l10n: zh_CN: fixed some typos for git 2.10.0 Johannes Schindelin (60): cat-file: fix a grammo in the man page sequencer: lib'ify sequencer_pick_revisions() sequencer: do not die() in do_pick_commit() sequencer: lib'ify write_message() sequencer: lib'ify do_recursive_merge() sequencer: lib'ify do_pick_commit() sequencer: lib'ify walk_revs_populate_todo() sequencer: lib'ify prepare_revs() sequencer: lib'ify read_and_refresh_cache() sequencer: lib'ify read_populate_todo() sequencer: lib'ify read_populate_opts() sequencer: lib'ify create_seq_dir() sequencer: lib'ify save_head() sequencer: lib'ify save_todo() sequencer: lib'ify save_opts() sequencer: lib'ify fast_forward_to() sequencer: lib'ify checkout_fast_forward() sequencer: ensure to release the lock when we could not read the index cat-file: introduce the --filters option cat-file --textconv/--filters: allow specifying the path separately cat-file: support --textconv/--filters in batch mode git-gui: respect commit.gpgsign again regex: -G feeds a non NUL-terminated string to regexec() and fails regex: add regexec_buf() that can work on a non NUL-terminated string regex: use regexec_buf() pull: drop confusing prefix parameter of die_on_unclean_work_tree() pull: make code more similar to the shell script again wt-status: make the require_clean_work_tree() function reusable wt-status: export also the has_un{staged,committed}_changes() functions wt-status: teach has_{unstaged,uncommitted}_changes() about submodules wt-status: begin error messages with lower-case reset: fix usage sequencer: use static initializers for replay_opts sequencer: use memoized sequencer directory path sequencer: avoid unnecessary indirection sequencer: future-proof remove_sequencer_state() sequencer: plug memory leaks for the option values sequencer: future-proof read_populate_todo() sequencer: refactor the code to obtain a short commit name sequencer: completely revamp the "todo" script parsing sequencer: strip CR from the todo script sequencer: avoid completely different messages for different actions sequencer: get rid of the subcommand field sequencer: remember the onelines when parsing the todo file sequencer: prepare for rebase -i's commit functionality sequencer: introduce a helper to read files written by scripts sequencer: allow editing the commit message on a case-by-case basis sequencer: support amending commits sequencer: support cleaning up commit messages sequencer: left-trim lines read from the script sequencer: stop releasing the strbuf in write_message() sequencer: roll back lock file if write_message() failed sequencer: refactor write_message() to take a pointer/length sequencer: teach write_message() to append an optional LF sequencer: remove overzealous assumption in rebase -i mode sequencer: mark action_name() for translation sequencer: quote filenames in error messages sequencer: start error messages consistently with lower case sequencer: mark all error messages for translation t6026: ensure that long-running script really is Johannes Sixt (9): t9903: fix broken && chain t6026-merge-attr: clean up background process at end of test case t3700-add: create subdirectory gently t3700-add: do not check working tree file mode without POSIXPERM t0060: sidestep surprising path mangling results on Windows t0021: expect more variations in the output of uniq -c t0021: compute file size with a single process instead of a pipeline t0021, t5615: use $PWD instead of $(pwd) in PATH-like shell variables t6026: clarify the point of "kill $(cat sleep.pid)" Jonathan Nieder (1): connect: tighten check for unexpected early hang up Jonathan Tan (14): tests: move test_lazy_prereq JGIT to test-lib.sh connect: advertized capability is not a ref mailinfo: separate in-body header processing mailinfo: make is_scissors_line take plain char * mailinfo: handle in-body header continuations fetch-pack: do not reset in_vain on non-novel acks trailer: improve const correctness trailer: use list.h for doubly-linked list trailer: streamline trailer item create and add trailer: make args have their own struct trailer: clarify failure modes in parse_trailer trailer: allow non-trailers in trailer block trailer: forbid leading whitespace in trailers trailer: support values folded to multiple lines Josh Triplett (2): format-patch: show base info before email signature format-patch: add "--rfc" for the common case of [RFC PATCH] Junio C Hamano (48): blame: improve diagnosis for "--reverse NEW" blame: dwim "blame --reverse OLD" as "blame --reverse OLD.." am: refactor read_author_script() diff.c: remove output_prefix_length field submodule: avoid auto-discovery in prepare_submodule_repo_env() symbolic-ref -d: do not allow removal of HEAD Prepare for 2.9.4 Start the 2.11 cycle First batch for 2.11 Second batch for 2.11 Third batch for 2.11 Start preparing for 2.10.1 Fourth batch for 2.11 streaming: make sure to notice corrupt object unpack_sha1_header(): detect malformed object header Fifth batch for 2.11 worktree: honor configuration variables blame: use DEFAULT_ABBREV macro Prepare for 2.10.1 Sixth batch for 2.11 diff_unique_abbrev(): document its assumption and limitation abbrev: add FALLBACK_DEFAULT_ABBREV to prepare for auto sizing abbrev: prepare for new world order Git 2.10.1 Seventh batch for 2.11 t4015: split out the "setup" part of ws-error-highlight test diff.c: refactor parse_ws_error_highlight() diff.c: move ws-error-highlight parsing helpers up diff: introduce diff.wsErrorHighlight option Eighth batch for 2.11 Ninth batch for 2.11 Start preparing for 2.10.2 cocci: refactor common patterns to use xstrdup_or_null() Tenth batch for 2.11 t3700: fix broken test under !SANITY transport: pass summary_width down the callchain fetch: pass summary_width down the callchain transport: allow summary-width to be computed dynamically transport: compute summary-width dynamically Eleventh batch for 2.11 Getting ready for 2.11-rc0 Git 2.10.2 Git 2.11-rc0 A bit of updates post -rc0 Revert "t6026-merge-attr: ensure that the merge driver was called" Revert "t6026-merge-attr: don't fail if sleep exits early" t0021: remove debugging cruft Git 2.11.0-rc1 Karsten Blees (2): git-gui: unicode file name support on windows git-gui: handle the encoding of Git's output correctly Kevin Daudt (2): t5100-mailinfo: replace common path prefix with variable mailinfo: unescape quoted-pair in header fields Kirill Smelkov (3): pack-objects: respect --local/--honor-pack-keep/--incremental when bitmap is in use pack-objects: use reachability bitmap index when generating non-stdout pack t/perf/run: copy config.mak.autogen & friends to build area Lars Schneider (20): travis-ci: ask homebrew for its path instead of hardcoding it convert: quote filter names in error messages convert: modernize tests run-command: move check_pipe() from write_or_die to run_command run-command: add clean_on_exit_handler pkt-line: rename packet_write() to packet_write_fmt() pkt-line: extract set_packet_header() pkt-line: add packet_write_fmt_gently() pkt-line: add packet_flush_gently() pkt-line: add packet_write_gently() pkt-line: add functions to read/write flush terminated packet streams convert: make apply_filter() adhere to standard Git error handling convert: prepare filter..process option convert: add filter..process option contrib/long-running-filter: add long running filter example sha1_file: rename git_open_noatime() to git_open() sha1_file: open window into packfiles with O_CLOEXEC read-cache: make sure file handles are not inherited by child processes Makefile: set NO_OPENSSL on macOS by default travis-ci: disable GIT_TEST_HTTPD for macOS Linus Torvalds (1): abbrev: auto size the default abbreviation Mantas Mikulėnas (1): contrib: add credential helper for libsecret Matthieu Moy (4): Documentation/config: default for color.* is color.ui parse_mailboxes: accept extra text after address t9000-addresses: update expected results after fix Git.pm: add comment pointing to t9000 Michael Haggerty (36): xdl_change_compact(): fix compaction heuristic to adjust ixo xdl_change_compact(): only use heuristic if group can't be matched is_blank_line(): take a single xrecord_t as argument recs_match(): take two xrecord_t pointers as arguments xdl_change_compact(): introduce the concept of a change group resolve_gitlink_ref(): eliminate temporary variable refs: rename struct ref_cache to files_ref_store refs: create a base class "ref_store" for files_ref_store add_packed_ref(): add a files_ref_store argument get_packed_ref(): add a files_ref_store argument resolve_missing_loose_ref(): add a files_ref_store argument {lock,commit,rollback}_packed_refs(): add files_ref_store arguments refs: reorder definitions resolve_packed_ref(): rename function from resolve_missing_loose_ref() resolve_gitlink_packed_ref(): remove function read_raw_ref(): take a (struct ref_store *) argument resolve_ref_recursively(): new function resolve_gitlink_ref(): implement using resolve_ref_recursively() resolve_gitlink_ref(): avoid memory allocation in many cases resolve_gitlink_ref(): rename path parameter to submodule refs: make read_raw_ref() virtual refs: make verify_refname_available() virtual refs: make pack_refs() virtual refs: make create_symref() virtual refs: make peel_ref() virtual repack_without_refs(): add a files_ref_store argument lock_raw_ref(): add a files_ref_store argument commit_ref_update(): add a files_ref_store argument lock_ref_for_update(): add a files_ref_store argument lock_ref_sha1_basic(): add a files_ref_store argument split_symref_update(): add a files_ref_store argument files_ref_iterator_begin(): take a ref_store argument refs: add method iterator_begin diff: improve positioning of add/delete blocks in diffs parse-options: add parse_opt_unknown_cb() blame: honor the diff heuristic options and config Michael J Gruber (1): gpg-interface: use more status letters Mike Ralphson (1): vcs-svn/fast_export: fix timestamp fmt specifiers Nguyễn Thái Ngọc Duy (40): remote-curl.c: convert fetch_git() to use argv_array transport-helper.c: refactor set_helper_option() upload-pack: move shallow deepen code out of receive_needs() upload-pack: move "shallow" sending code out of deepen() upload-pack: remove unused variable "backup" upload-pack: move "unshallow" sending code out of deepen() upload-pack: use skip_prefix() instead of starts_with() upload-pack: tighten number parsing at "deepen" lines upload-pack: make check_non_tip() clean things up on error upload-pack: move rev-list code out of check_non_tip() fetch-pack: use skip_prefix() instead of starts_with() fetch-pack: use a common function for verbose printing fetch-pack.c: mark strings for translating fetch-pack: use a separate flag for fetch in deepening mode shallow.c: implement a generic shallow boundary finder based on rev-list upload-pack: add deepen-since to cut shallow repos based on time fetch: define shallow boundary with --shallow-since clone: define shallow clone boundary based on time with --shallow-since t5500, t5539: tests for shallow depth since a specific date refs: add expand_ref() upload-pack: support define shallow boundary by excluding revisions fetch: define shallow boundary with --shallow-exclude clone: define shallow clone boundary with --shallow-exclude t5500, t5539: tests for shallow depth excluding a ref upload-pack: split check_unreachable() in two, prep for get_reachable_list() upload-pack: add get_reachable_list() fetch, upload-pack: --deepen=N extends shallow boundary by N commits checkout: add some spaces between code and comment checkout.txt: document a common case that ignores ambiguation rules checkout: fix ambiguity check in subdir init: correct re-initialization from a linked worktree init: call set_git_dir_init() from within init_db() init: kill set_git_dir_init() init: do not set unnecessary core.worktree init: kill git_link variable git-commit.txt: clarify --patch mode with pathspec diff-lib: allow ita entries treated as "not yet exist in index" diff: add --ita-[in]visible-in-index commit: fix empty commit creation when there's no changes but ita entries commit: don't be fooled by ita entries when creating initial commit Olaf Hering (1): git-gui: sort entries in tclIndex Orgad Shaneh (1): git-gui: Do not reset author details on amend Pat Thoyts (7): Allow keyboard control to work in the staging widgets. Amend tab ordering and text widget border and highlighting. git-gui: fix detection of Cygwin git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut` git-gui: maintain backwards compatibility for merge syntax git-gui: avoid persisting modified author identity git-gui: set version 0.21 Patrick Steinhardt (1): doc: fix location of 'info/' with $GIT_COMMON_DIR Petr Stodulka (1): http: control GSSAPI credential delegation Philip Oakley (14): doc: use 'symmetric difference' consistently doc: revisions - name the left and right sides doc: show the actual left, right, and boundary marks doc: revisions: give headings for the two and three dot notations doc: revisions: extra clarification of ^! notation effects doc: revisions: single vs multi-parent notation comparison doc: gitrevisions - use 'reachable' in page description doc: gitrevisions - clarify 'latter case' is revision walk doc: revisions - define `reachable` doc: revisions - clarify reachability examples doc: revisions: show revision expansion in examples doc: revisions: sort examples and fix alignment of the unchanged doc: fix merge-base ASCII art tab spacing doc: fix the 'revert a faulty merge' ASCII art tab spacing Pranit Bauva (2): rev-list-options: clarify the usage of --reverse t0040: convert all possible tests to use `test-parse-options --expect` Ralf Thielow (6): help: introduce option --exclude-guides help: make option --help open man pages only for Git commands rebase -i: improve advice on bad instruction lines l10n: de.po: fix translation of autostash l10n: de.po: translate 260 new messages fetch-pack.c: correct command at the beginning of an error message Ray Chen (1): l10n: zh_CN: review for git v2.10.0 l10n René Scharfe (36): compat: move strdup(3) replacement to its own file introduce hex2chr() for converting two hexadecimal digits to a character strbuf: use valid pointer in strbuf_remove() checkout: constify parameters of checkout_stage() and checkout_merged() unpack-trees: pass checkout state explicitly to check_updates() sha1_file: use llist_mergesort() for sorting packs xdiff: fix merging of hunks with -W context and -u context contrib/coccinelle: fix semantic patch for oid_to_hex_r() add coccicheck make target use strbuf_addstr() for adding constant strings to a strbuf, part 2 pretty: let %C(auto) reset all attributes introduce CHECKOUT_INIT add COPY_ARRAY use COPY_ARRAY git-gui: stop using deprecated merge syntax gitignore: ignore output files of coccicheck make target use strbuf_addstr() instead of strbuf_addf() with "%s", part 2 use strbuf_add_unique_abbrev() for adding short hashes, part 2 add QSORT use QSORT remove unnecessary check before QSORT coccicheck: use --all-includes by default use QSORT, part 2 pretty: avoid adding reset for %C(auto) if output is empty coccicheck: make transformation for strbuf_addf(sb, "...") more precise show-branch: use QSORT remove unnecessary NULL check before free(3) use strbuf_add_unique_abbrev() for adding short hashes, part 3 pretty: fix document link for color specification avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM inline xalloc_flex() into FLEXPTR_ALLOC_MEM hex: make wraparound of the index into ring-buffer explicit valgrind: support test helpers commit: simplify building parents list sha1_name: make wraparound of the index into ring-buffer explicit cocci: avoid self-references in object_id transformations Ronnie Sahlberg (2): refs: add a backend method structure refs: add a transaction_commit() method SZEDER Gábor (1): ref-filter: strip format option after a field name only once while parsing Satoshi Yasushima (6): git-gui: consistently use the same word for "remote" in Japanese git-gui: consistently use the same word for "blame" in Japanese git-gui: apply po template to Japanese translation git-gui: add Japanese language code git-gui: update Japanese translation git-gui: update Japanese information Stefan Beller (16): t7408: modernize style t7408: merge short tests, factor out testing method submodule--helper module-clone: allow multiple references submodule--helper update-clone: allow multiple references clone: factor out checking for an alternate path clone: clarify option_reference as required clone: implement optional references clone: recursive and reference option triggers submodule alternates xdiff: remove unneeded declarations transport: report missing submodule pushes consistently on stderr diff.c: use diff_options directly diff: omit found pointer from emit_callback diff: remove dead code submodule: ignore trailing slash on superproject URL submodule: ignore trailing slash in relative url documentation: improve submodule..{url, path} description Stefan Christ (1): Documentation/fmt-merge-msg: fix markup in example Thomas Gummerer (4): add: document the chmod option update-index: add test for chmod flags read-cache: introduce chmod_index_entry add: modify already added files when --chmod is given Vasco Almeida (32): l10n: pt_PT: update Portuguese translation l10n: pt_PT: update Portuguese repository info i18n: blame: mark error messages for translation i18n: branch: mark option description for translation i18n: config: mark error message for translation i18n: merge-recursive: mark error messages for translation i18n: merge-recursive: mark verbose message for translation i18n: notes: mark error messages for translation notes: spell first word of error messages in lowercase i18n: receive-pack: mark messages for translation i18n: show-branch: mark error messages for translation i18n: show-branch: mark plural strings for translation i18n: update-index: mark warnings for translation i18n: commit: mark message for translation i18n: connect: mark die messages for translation i18n: ident: mark hint for translation i18n: notes-merge: mark die messages for translation i18n: stash: mark messages for translation git-gui i18n: mark strings for translation git-gui: l10n: add Portuguese translation git-gui i18n: internationalize use of colon punctuation git-gui i18n: mark "usage:" strings for translation git-gui: fix incorrect use of Tcl append command git-gui i18n: mark string in lib/error.tcl for translation t1512: become resilient to GETTEXT_POISON build i18n: apply: mark plural string for translation i18n: apply: mark info messages for translation i18n: apply: mark error messages for translation i18n: apply: mark error message for translation i18n: convert mark error messages for translation i18n: credential-cache--daemon: mark advice for translation i18n: diff: mark warnings for translation Vegard Nossum (1): revision: new rev^-n shorthand for rev^n..rev Younes Khoudli (1): doc: remove reference to the traditional layout in git-tag.txt brian m. carlson (20): cache: convert struct cache_entry to use struct object_id builtin/apply: convert static functions to struct object_id builtin/blame: convert struct origin to use struct object_id builtin/log: convert some static functions to use struct object_id builtin/cat-file: convert struct expand_data to use struct object_id builtin/cat-file: convert some static functions to struct object_id builtin: convert textconv_object to use struct object_id streaming: make stream_blob_to_fd take struct object_id builtin/checkout: convert some static functions to struct object_id notes-merge: convert struct notes_merge_pair to struct object_id Convert read_mmblob to take struct object_id. builtin/blame: convert file to use struct object_id builtin/rm: convert to use struct object_id notes: convert init_notes to use struct object_id builtin/update-index: convert file to struct object_id sha1_name: convert get_sha1_mb to struct object_id refs: add an update_ref_oid function. builtin/am: convert to struct object_id builtin/commit-tree: convert to struct object_id builtin/reset: convert to use struct object_id yaras (1): git-gui: fix initial git gui message encoding Ævar Arnfjörð Bjarmason (3): gitweb: fix a typo in a comment gitweb: link to 7-char+ SHA-1s, not only 8-char+ gitweb: link to "git describe"'d commits in log messages Дилян Палаузов (1): ./configure.ac: detect SSL in libcurl using curl-config [Less]
Posted 28 days ago by Johannes Schindelin
Dear Git users, I finally got around to rebase the Windows-specific patches (which seem to not make it upstream as fast as we get new ones) on top of upstream Git v2.11.0-rc0, and to bundle installers, portable Git and MinGit [*1*]: ... [More] https://github.com/git-for-windows/git/releases/tag/v2.11.0-rc0.windows.1 It would be really nice if those of you who have access to Windows [*2*] could try it out and report bugs before v2.11.0 final. Thanks, Johannes Footnote *1*: https://github.com/git-for-windows/git/wiki/MinGit Footnote *2*: You can get free (time-limited) VMs running Windows here: http://dev.modern.ie/tools/vms/windows/ [Less]
Posted about 1 month ago by Johannes Schindelin
Dear Git users, It is my pleasure to announce that Git for Windows 2.10.2 is available from: https://git-for-windows.github.io/ Changes since Git for Windows v2.10.1(2) (October 13th 2016) Git for windows v2.10.1(2) was a MinGit-only release ... [More] (i.e. there was no Git for windows installer for that version). New Features • Comes with Git v2.10.2. • Comes with Git Credential Manager v1.8.1. • Comes with cURL v7.51.0. • Git for Windows can now be built easily with Visual C++ 2015. • The installer now logs post-install errors more verbosely. • A new option asks the installer to skip installation if Git's files are in use. • A new option asks the installer to quietly skip downgrading Git for Windows, without indicating failure. • There is now an explicit option for symbolic link support, including a link to a more verbose explanation of the issue. Bug Fixes • when upgrading Git for Windows, SSH agent processes are now auto-terminated. • When trying to install/upgrade on a Windows version that is no longer supported, we now refuse to do so. Filename | SHA-256 -------- | ------- Git-2.10.2-64-bit.exe | 57238ebf86f8b51e32cab44bb91c8060e04774676b77b9fb92f78e7bc7e9a179 Git-2.10.2-32-bit.exe | 8b15054a4ea2dd5d2be0471a430d8ae7c772b94e1a1048221083a0040011011c PortableGit-2.10.2-64-bit.7z.exe | 101314826892480043d5b11989726fc8ee448991eb7b0a1c61aca751161bc15b PortableGit-2.10.2-32-bit.7z.exe | edc616817e96a6f15246bb0dd93c97e53d38d3b2a0b7375f26bd0bd082c41a73 MinGit-2.10.2-64-bit.zip | a10de5d5a8e71e207eff20d833ca56902a0668940e3def5f21d089e4f533ea40 MinGit-2.10.2-32-bit.zip | 2b191598bcb37565a2b80729ef8d00c03df02b75f6b9d012080c458999f89cc0 Git-2.10.2-64-bit.tar.bz2 | 7df449ac1813876b5a2e9215d94bca9458c2e0870c65e5b78bd7fc2a448a2a90 Git-2.10.2-32-bit.tar.bz2 | 3f8d0bebc53fabad863b8fe352a317fde61833efa4750f96656cf95017a621e8 Ciao, Johannes -- You received this message because you are subscribed to the Google Groups "git-for-windows" group. To unsubscribe from this group and stop receiving emails from it, send an email to git-for-windows+unsubscribe@googlegroups.com. To post to this group, send email to git-for-windows@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/git-for-windows/20161102204358.6856-1-johannes.schindelin%40gmx.de. For more options, visit https://groups.google.com/d/optout. [Less]