2014-07-28

An early preview release Git v2.1.0-rc0 is now available for testing

at the usual places.

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.1.0-rc0'

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 = https://code.google.com/p/git-core/

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

Git v2.1 Release Notes (draft)

==============================

Backward compatibility notes

----------------------------

* The default value we give to the environment variable LESS has been

changed from "FRSX" to "FRX", losing "S" (chop long lines instead

of wrapping). Existing users who prefer not to see line-wrapped

output may want to set

$ git config core.pager "less -S"

to restore the traditional behaviour. It is expected that people

find output from the most subcommands easier to read with the new

default, except for "blame" which tends to produce really long

lines. To override the new default only for "git blame", you can

do this:

$ git config pager.blame "less -S"

* A few disused directories in contrib/ have been retired.

Updates since v2.0

------------------

UI, Workflows & Features

* Since the very beginning of Git, we gave the LESS environment a

default value "FRSX" when we spawn "less" as the pager. "S" (chop

long lines instead of wrapping) has been removed from this default

set of options, because it is more or less a personal taste thing,

as opposed to others that have good justifications (i.e. "R" is

very much justified because many kinds of output we produce are

colored and "FX" is justified because output we produce is often

shorter than a page).

* The logic and data used to compute the display width needed for

UTF-8 strings have been updated to match Unicode 7.0 better.

* HTTP-based transports learned to propagate the error messages from

the webserver better to the client coming over the HTTP transport.

* The completion script for bash (in contrib/) has been updated to

handle aliases that define complex sequence of commands better.

* The "core.preloadindex" configuration variable is by default

enabled, allowing modern platforms to take advantage of the

multiple cores they have.

* "git clone" applies the "if cloning from a local disk, physically

copy repository using hardlinks, unless otherwise told not to with

--no-local" optimization when url.*.insteadOf mechanism rewrites a

"git clone $URL" that refers to a repository over the network to a

clone from a local disk.

* "git commit --date=<date>" option learned to read from more

timestamp formats, including "--date=now".

* The `core.commentChar` configuration variable is used to specify a

custom comment character other than the default "#" to be used in

the commit log editor. This can be set to `auto` to attempt to

choose a different character that does not conflict with what

already starts a line in the message being edited for cases like

"git commit --amend".

* "git format-patch" learned --signature-file=<file> to take the mail

signature from.

* "git grep" learned grep.fullname configuration variable to force

"--full-name" to be default. This may cause regressions on

scripted users that do not expect this new behaviour.

* "git imap-send" learned to ask the credential helper for auth

material.

* "git log" and friends now understand the value "auto" set to the

"log.decorate" configuration variable to enable the "--decorate"

option automatically when the output is sent to tty.

* "git merge" without argument, even when there is an upstream

defined for the current branch, refused to run until

merge.defaultToUpstream is set to true. Flip the default of that

configuration variable to true.

* "git mergetool" learned to drive the vimdiff3 backend.

* mergetool.prompt used to default to 'true', always asking "do you

really want to run the tool on this path?". Among the two

purposes this prompt serves, ignore the use case to confirm that

the user wants to view particular path with the named tool, and

redefine the meaning of the prompt only to confirm the choice of

the tool made by the autodetection (for those who configured the

tool explicitly, the prompt shown for the latter purpose is

simply annoying).

Strictly speaking, this is a backward incompatible change and the

users need to explicitly set the variable to 'true' if they want

to resurrect the now-ignored use case.

* "git replace" learned the "--edit" subcommand to create a

replacement by editing an existing object.

* "git replace" learned a "--graft" option to rewrite parents of a

commit.

* "git send-email" learned "--to-cover" and "--cc-cover" options, to

tell it to copy To: and Cc: headers found in the first input file

when emitting later input files.

* "git svn" learned to cope with malformed timestamps with only one

digit in the hour part, e.g. 2014-01-07T5:01:02.048176Z, emitted

by some broken subversion server implementations.

* "git tag" when editing the tag message shows the name of the tag

being edited as a comment in the editor.

* "git tag" learned to pay attention to "tag.sort" configuration, to

be used as the default sort order when no --sort=<value> the option

is given.

* "git verify-commit" command to check GPG signature in signed

commits, in a way similar to "git verify-tag" is used to check

signed tags, was added.

Performance, Internal Implementation, etc.

* Build procedure for 'subtree' (in contrib/) has been cleaned up.

* The support for the profile-feedback build, which has been left

bit-rotten for quite a while, has been updated.

* An experimental format to use two files (the base file and

incremental changes relative to it) to represent the index has been

introduced; this may reduce I/O cost of rewriting a large index

when only small part of the working tree changes.

* Effort to shrink the size of patches Windows folks maintain on top

by upstreaming them continues.

* Patches maintained by msysgit folks for Windows port are being

upstreamed here a bit by bit.

* The leaf function to check validity of a refname format has been

micro-optimized, using SSE2 instructions when available. A few

breakages during its development have been caught and fixed already

but there might remain some more still; please test and report if

you find any.

* The `core.deltabasecachelimit` used to default to 16 MiB , but this

proved to be too small, and has been bumped to 96 MiB.

* "git blame" has been optimized greatly by reorganising the data

structure that is used to keep track of the work to be done.

* "git diff" that compares 3-or-more trees (e.g. parents and the

result of a merge) have been optimized.

* The API to update/delete references are being converted to handle

updates to multiple references in a transactional way. As an

example, "update-ref --stdin [-z]" has been updated to use this

API.

* skip_prefix() and strip_suffix() API functions are used a lot more

widely throughout the codebase now.

* Parts of the test scripts can be skipped by using a range notation,

e.g. "sh t1234-test.sh --run='1-4 6 8-'" to omit test piece 5 and 7

and run everything else.

Also contains various documentation updates and code clean-ups.

Fixes since v2.0

----------------

Unless otherwise noted, all the fixes since v2.0 in the maintenance

track are contained in this release (see the maintenance releases'

notes for details).

* We used to unconditionally disable the pager in the pager process

we spawn to feed out output, but that prevented people who want to

run "less" within "less" from doing so.

(merge c0459ca je/pager-do-not-recurse later to maint).

* Tools that read diagnostic output in our standard error stream do

not want to see terminal control sequence (e.g. erase-to-eol).

Detect them by checking if the standard error stream is connected

to a tty.

(merge 38de156 mn/sideband-no-ansi later to maint).

* Mishandling of patterns in .gitignore that has trailing SPs quoted

with backslashes (e.g. ones that end with "\ ") have been

corrected.

(merge 97c1364be6b pb/trim-trailing-spaces later to maint).

* Reworded the error message given upon a failure to open an existing

loose object file due to e.g. permission issues; it was reported as

the object being corrupt, but that is not quite true.

(merge d6c8a05 jk/report-fail-to-read-objects-better later to maint).

* "git log -2master" is a common typo that shows two commits starting

from whichever random branch that is not 'master' that happens to

be checked out currently.

(merge e3fa568 jc/revision-dash-count-parsing later to maint).

* Code to avoid adding the same alternate object store twice was

subtly broken for a long time, but nobody seems to have noticed.

(merge 80b4785 rs/fix-alt-odb-path-comparison later to maint).

(merge 539e750 ek/alt-odb-entry-fix later to maint).

* The "%<(10,trunc)%s" pretty format specifier in the log family of

commands is used to truncate the string to a given length (e.g. 10

in the example) with padding to column-align the output, but did

not take into account that number of bytes and number of display

columns are different.

(merge 7d50987 as/pretty-truncate later to maint).

* "%G" (nothing after G) is an invalid pretty format specifier, but

the parser did not notice it as garbage.

(merge 958b2eb jk/pretty-G-format-fixes later to maint).

* A handful of code paths had to read the commit object more than

once when showing header fields that are usually not parsed. The

internal data structure to keep track of the contents of the commit

object has been updated to reduce the need for this double-reading,

and to allow the caller find the length of the object.

(merge 218aa3a jk/commit-buffer-length later to maint).

* The "mailmap.file" configuration option did not support the tilde

expansion (i.e. ~user/path and ~/path).

(merge 9352fd5 ow/config-mailmap-pathname later to maint).

* The completion scripts (in contrib/) did not know about quite a few

options that are common between "git merge" and "git pull", and a

couple of options unique to "git merge".

(merge 8fee872 jk/complete-merge-pull later to maint).

* The unix-domain socket used by the sample credential cache daemon

tried to unlink an existing stale one at a wrong path, if the path

to the socket was given as an overlong path that does not fit in

sun_path member of the sockaddr_un structure.

(merge 2869b3e rs/fix-unlink-unix-socket later to maint).

* An ancient rewrite passed a wrong pointer to a curl library

function in a rarely used code path.

(merge 479eaa8 ah/fix-http-push later to maint).

* "--ignore-space-change" option of "git apply" ignored the spaces

at the beginning of line too aggressively, which is inconsistent

with the option of the same name "diff" and "git diff" have.

(merge 14d3bb4 jc/apply-ignore-whitespace later to maint).

* "git blame" miscounted number of columns needed to show localized

timestamps, resulting in jaggy left-side-edge of the source code

lines in its output.

(merge dd75553 jx/blame-align-relative-time later to maint).

* "git blame" assigned the blame to the copy in the working-tree if

the repository is set to core.autocrlf=input and the file used CRLF

line endings.

(merge 4d4813a bc/blame-crlf-test later to maint).

* "git clone -b brefs/tags/bar" would have mistakenly thought we were

following a single tag, even though it was a name of the branch,

because it incorrectly used strstr().

(merge 60a5f5f jc/fix-clone-single-starting-at-a-tag later to maint).

* "git commit --allow-empty-messag -C $commit" did not work when the

commit did not have any log message.

(merge 076cbd6 jk/commit-C-pick-empty later to maint).

* "git diff --find-copies-harder" sometimes pretended as if the mode

bits have changed for paths that are marked with assume-unchanged

bit.

(merge 5304810 jk/diff-files-assume-unchanged later to maint).

* "filter-branch" left an empty single-parent commit that results when

all parents of a merge commit gets mapped to the same commit, even

under "--prune-empty".

(merge 79bc4ef cb/filter-branch-prune-empty-degenerate-merges later to maint).

* "git format-patch" did not enforce the rule that the "--follow"

option from the log/diff family of commands must be used with

exactly one pathspec.

(merge dd63f16 jk/diff-follow-must-take-one-pathspec later to maint).

* "git gc --auto" was recently changed to run in the background to

give control back early to the end-user sitting in front of the

terminal, but it forgot that housekeeping involving reflogs should

be done without other processes competing for accesses to the refs.

(merge 62aad18 nd/daemonize-gc later to maint).

* "git grep -O" to show the lines that hit in the pager did not work

well with case insensitive search. We now spawn "less" with its

"-I" option when it is used as the pager (which is the default).

(merge f7febbe sk/spawn-less-case-insensitively-from-grep-O-i later to maint).

* We used to disable threaded "git index-pack" on platforms without

thread-safe pread(); use a different workaround for such

platforms to allow threaded "git index-pack".

(merge 3953949 nd/index-pack-one-fd-per-thread later to maint).

* The error reporting from "git index-pack" has been improved to

distinguish missing objects from type errors.

(merge 77583e7 jk/index-pack-report-missing later to maint).

* "log --show-signature" incorrectly decided the color to paint a

mergetag that was and was not correctly validated.

(merge 42c55ce mg/fix-log-mergetag-color later to maint).

* "log --show-signature" did not pay attention to "--graph" option.

(merge cf3983d zk/log-graph-showsig later to maint).

* "git mailinfo" used to read beyond the end of header string while

parsing an incoming e-mail message to extract the patch.

(merge b1a013d rs/mailinfo-header-cmp later to maint).

* On a case insensitive filesystem, merge-recursive incorrectly

deleted the file that is to be renamed to a name that is the same

except for case differences.

(merge baa37bf dt/merge-recursive-case-insensitive later to maint).

* Merging changes into a file that ends in an incomplete line made the

last line into a complete one, even when the other branch did not

change anything around the end of file.

(merge ba31180 mk/merge-incomplete-files later to maint).

* "git pack-objects" unnecessarily copied the previous contents when

extending the hashtable, even though it will populate the table

from scratch anyway.

(merge fb79947 rs/pack-objects-no-unnecessary-realloc later to maint).

* Recent updates to "git repack" started to duplicate objects that

are in packfiles marked with .keep flag into the new packfile by

mistake.

(merge d078d85 jk/repack-pack-keep-objects later to maint).

* "git rerere forget" did not work well when merge.conflictstyle

was set to a non-default value.

(merge de3d8bb fc/rerere-conflict-style later to maint).

* "git remote rm" and "git remote prune" can involve removing many

refs at once, which is not a very efficient thing to do when very

many refs exist in the packed-refs file.

(merge e6bea66 jl/remote-rm-prune later to maint).

* "git log --exclude=<glob> --all | git shortlog" worked as expected,

but "git shortlog --exclude=<glob> --all", which is supposed to be

identical to the above pipeline, was not accepted at the command

line argument parser level.

(merge eb07774 jc/shortlog-ref-exclude later to maint).

* The autostash mode of "git rebase -i" did not restore the dirty

working tree state if the user aborted the interactive rebase by

emptying the insn sheet.

(merge ddb5432 rr/rebase-autostash-fix later to maint).

* "git rebase --fork-point" did not filter out patch-identical

commits correctly.

* During "git rebase --merge", a conflicted patch could not be

skipped with "--skip" if the next one also conflicted.

(merge 95104c7 bc/fix-rebase-merge-skip later to maint).

* "git show -s" (i.e. show log message only) used to incorrectly emit

an extra blank line after a merge commit.

(merge ad2f725 mk/show-s-no-extra-blank-line-for-merges later to maint).

* "git status", even though it is a read-only operation, tries to

update the index with refreshed lstat(2) info to optimize future

accesses to the working tree opportunistically, but this could

race with a "read-write" operation that modify the index while it

is running. Detect such a race and avoid overwriting the index.

(merge 426ddee ym/fix-opportunistic-index-update-race later to maint).

* "git status" (and "git commit") behaved as if changes in a modified

submodule are not there if submodule.*.ignore configuration is set,

which was misleading. The configuration is only to unclutter diff

output during the course of development, and should not to hide

changes in the "status" output to cause the users forget to commit

them.

(merge c215d3d jl/status-added-submodule-is-never-ignored later to maint).

* Documentation for "git submodule sync" forgot to say that the subcommand

can take the "--recursive" option.

(merge 9393ae7 mc/doc-submodule-sync-recurse later to maint).

* "git update-index --cacheinfo" in 2.0 release crashed on a

malformed command line.

(merge c8e1ee4 jc/rev-parse-argh-dashed-multi-words later to maint).

* The mode to run tests with HTTP server tests disabled was broken.

(merge afa53fe na/no-http-test-in-the-middle later to maint).

----------------------------------------------------------------

Changes since v2.0.0, 643 non-merge changes from 80 contributors,

are as follows:

Abbaad Haider (1):

http-push.c: make CURLOPT_IOCTLDATA a usable pointer

Alexey Shumkin (5):

t4205 (log-pretty-formats): don't hardcode SHA-1 in expected outputs

t4041, t4205, t6006, t7102: don't hardcode tested encoding value

t4205 (log-pretty-format): use `tformat` rather than `format`

t4205, t6006: add tests that fail with i18n.logOutputEncoding set

pretty.c: format string with truncate respects logOutputEncoding

Anders Kaseorg (1):

gitk: Allow displaying time zones from author and commit dates timestamps

Andi Kleen (4):

Use BASIC_FLAGS for profile feedback

Don't define away __attribute__ on gcc

Run the perf test suite for profile feedback too

Fix profile feedback with -jN and add profile-fast

Andreas Schwab (1):

grep: add grep.fullName config variable

Ben Walton (1):

compat/bswap.h: fix endianness detection

Brian Gesiak (14):

strbuf: use _rtrim and _ltrim in strbuf_trim

api-strbuf.txt: add docs for _trim and _ltrim

builtin/ls-remote.c: rearrange xcalloc arguments

builtin/remote.c: rearrange xcalloc arguments

commit.c: rearrange xcalloc arguments

config.c: rearrange xcalloc arguments

diff.c: rearrange xcalloc arguments

http-push.c: rearrange xcalloc arguments

imap-send.c: rearrange xcalloc arguments

notes.c: rearrange xcalloc arguments

pack-revindex.c: rearrange xcalloc arguments

reflog-walk.c: rearrange xcalloc arguments

remote.c: rearrange xcalloc arguments

transport-helper.c: rearrange xcalloc arguments

Cezary Zawadka (1):

Windows: allow using UNC path for git repository

Charles Bailey (3):

compat/bswap.h: detect endianness on more platforms that don't use BYTE_ORDER

filter-branch: eliminate duplicate mapped parents

Fix contrib/subtree Makefile to patch #! line

Christian Couder (16):

replace: make sure --edit results in a different object

replace: refactor checking ref validity

replace: die early if replace ref already exists

replace: add tests for --edit

replace: add --edit to usage string

Documentation: replace: describe new --edit option

commit: add for_each_mergetag()

replace: cleanup redirection style in tests

replace: add --graft option

replace: add test for --graft

Documentation: replace: add --graft option

contrib: add convert-grafts-to-replace-refs.sh

replace: remove signature when using --graft

replace: add test for --graft with signed commit

replace: check mergetags when using --graft

replace: add test for --graft with a mergetag

Dan Albert (1):

imap-send: use git-credential

David Aguilar (3):

gitk: Honor TMPDIR when viewing external diffs

gitk: Use mktemp -d to avoid predictable temporary directories

gitk: Catch mkdtemp errors

David Kastrup (2):

blame: large-scale performance rewrite

Bump core.deltaBaseCacheLimit to 96m

David Turner (7):

docs: document RUN_SETUP_GENTLY and clarify RUN_SETUP

merge-recursive.c: fix case-changing merge bug

mv: allow renaming to fix case on case insensitive filesystems

refs.c: optimize check_refname_component()

refs.c: SSE2 optimizations for check_refname_component

refs.c: handle REFNAME_REFSPEC_PATTERN at end of page

refs: fix valgrind suppression file

Elia Pinto (62):

t9365-continuing-queries.sh: use the $( ... ) construct for command substitution

test-gitmw-lib.sh: use the $( ... ) construct for command substitution

t7900-subtree.sh: use the $( ... ) construct for command substitution

appp.sh: use the $( ... ) construct for command substitution

git-pull.sh: use the $( ... ) construct for command substitution

git-rebase--merge.sh: use the $( ... ) construct for command substitution

git-rebase.sh: use the $( ... ) construct for command substitution

git-stash.sh: use the $( ... ) construct for command substitution

git-web--browse.sh: use the $( ... ) construct for command substitution

lib-credential.sh: use the $( ... ) construct for command substitution

lib-cvs.sh: use the $( ... ) construct for command substitution

lib-gpg.sh: use the $( ... ) construct for command substitution

p5302-pack-index.sh: use the $( ... ) construct for command substitution

t0001-init.sh: use the $( ... ) construct for command substitution

t0010-racy-git.sh: use the $( ... ) construct for command substitution

t0020-crlf.sh: use the $( ... ) construct for command substitution

t0025-crlf-auto.sh: use the $( ... ) construct for command substitution

t0026-eol-config.sh: use the $( ... ) construct for command substitution

t0030-stripspace.sh: use the $( ... ) construct for command substitution

t0300-credentials.sh: use the $( ... ) construct for command substitution

t1000-read-tree-m-3way.sh: use the $( ... ) construct for command substitution

t1001-read-tree-m-2way.sh: use the $( ... ) construct for command substitution

t1002-read-tree-m-u-2way.sh: use the $( ... ) construct for command substitution

t1003-read-tree-prefix.sh: use the $( ... ) construct for command substitution

t1004-read-tree-m-u-wf.sh: use the $( ... ) construct for command substitution

t1020-subdirectory.sh: use the $( ... ) construct for command substitution

t1050-large.sh: use the $( ... ) construct for command substitution

t3905-stash-include-untracked.sh: use the $( ... ) construct for command substitution

t3910-mac-os-precompose.sh: use the $( ... ) construct for command substitution

t4006-diff-mode.sh: use the $( ... ) construct for command substitution

t4010-diff-pathspec.sh: use the $( ... ) construct for command substitution

t4012-diff-binary.sh: use the $( ... ) construct for command substitution

t4013-diff-various.sh: use the $( ... ) construct for command substitution

t4014-format-patch.sh: use the $( ... ) construct for command substitution

t4036-format-patch-signer-mime.sh: use the $( ... ) construct for command substitution

t4038-diff-combined.sh: use the $( ... ) construct for command substitution

t4057-diff-combined-paths.sh: use the $( ... ) construct for command substitution

t4116-apply-reverse.sh: use the $( ... ) construct for command substitution

t4119-apply-config.sh: use the $( ... ) construct for command substitution

t4204-patch-id.sh: use the $( ... ) construct for command substitution

t5000-tar-tree.sh: use the $( ... ) construct for command substitution

scripts: "export VAR=VALUE" construct is not portable

check_bindir: avoid "test <cond> -a/-o <cond>"

contrib/examples/git-clone.sh: avoid "test <cond> -a/-o <cond>"

contrib/examples/git-commit.sh: avoid "test <cond> -a/-o <cond>"

contrib/examples/git-merge.sh: avoid "test <cond> -a/-o <cond>"

contrib/examples/git-repack.sh: avoid "test <cond> -a/-o <cond>"

contrib/examples/git-resolve.sh: avoid "test <cond> -a/-o <cond>"

git-bisect.sh: avoid "test <cond> -a/-o <cond>"

git-mergetool.sh: avoid "test <cond> -a/-o <cond>"

git-rebase--interactive.sh: avoid "test <cond> -a/-o <cond>"

t/lib-httpd.sh: avoid "test <cond> -a/-o <cond>"

t/t0025-crlf-auto.sh: avoid "test <cond> -a/-o <cond>"

t/t0026-eol-config.sh: avoid "test <cond> -a/-o <cond>"

t/t4102-apply-rename.sh: avoid "test <cond> -a/-o <cond>"

t/t5000-tar-tree.sh: avoid "test <cond> -a/-o <cond>"

t/t5403-post-checkout-hook.sh: avoid "test <cond> -a/-o <cond>"

t/t5538-push-shallow.sh: avoid "test <cond> -a/-o <cond>"

t/t9814-git-p4-rename.sh: avoid "test <cond> -a/-o <cond>"

t/test-lib-functions.sh: avoid "test <cond> -a/-o <cond>"

git-submodule.sh: avoid "test <cond> -a/-o <cond>"

submodule.c: use the ARRAY_SIZE macro

Ephrim Khong (1):

sha1_file: do not add own object directory as alternate

Eric Wong (1):

config: preserve config file permissions on edits

Erik Faye-Lund (1):

send-email: recognize absolute path on Windows

Fabian Ruch (1):

sequencer: signal failed ff as an aborted, not a conflicted merge

Felipe Contreras (13):

fast-export: improve argument parsing

fast-export: add new --refspec option

transport-helper: add support for old:new refspec

transport-helper: add support to push symbolic refs

fast-import: add support to delete refs

fast-export: add support to delete refs

transport-helper: add support to delete branches

transport-helper: remove unnecessary strbuf resets

mergetools: add vimdiff3 mode

mergetool: run prompt only if guessed tool

merge: enable defaulttoupstream by default

rerere: fix for merge.conflictstyle

silence a bunch of format-zero-length warnings

Ilya Bobyr (4):

test-lib: document short options in t/README

test-lib: tests skipped by GIT_SKIP_TESTS say so

test-lib: '--run' to run only specific tests

gitk: Replace SHA1 entry field on keyboard paste

Jacek Konieczny (1):

pull: do not abuse 'break' inside a shell 'case'

Jacob Keller (2):

tag: fix --sort tests to use cat<<-\EOF format

tag: support configuring --sort via .gitconfig

James Denholm (6):

contrib/subtree/Makefile: scrap unused $(gitdir)

contrib/subtree/Makefile: use GIT-VERSION-FILE

contrib/subtree/Makefile: s/libexecdir/gitexecdir/

contrib/subtree/Makefile: clean up rules to generate documentation

contrib/subtree/Makefile: clean up rule for "clean"

contrib/subtree: allow adding an annotated tag

Jason St. John (1):

Documentation: use "command-line" when used as a compound adjective, and fix other minor grammatical issues

Jean-Jacques Lafay (1):

git tag --contains: avoid stack overflow

Jeff King (131):

run_external_diff: use an argv_array for the environment

run_external_diff: clean up error handling

run_external_diff: drop fflush(NULL)

run_external_diff: hoist common bits out of conditional

run_external_diff: refactor cmdline setup logic

commit: do not complain of empty messages from -C

t3910: show failure of core.precomposeunicode with decomposed filenames

replace: refactor command-mode determination

replace: use OPT_CMDMODE to handle modes

replace: factor object resolution out of replace_object

replace: add --edit option

commit: use split_ident_line to compare author/committer

pretty: make show_ident_date public

commit: print "Date" line when the user has set date

commit: accept more date formats for "--date"

inline constant return from error() function

let clang use the constant-return error() macro

grep: use run-command's "dir" option for --open-files-in-pager

t/lib-httpd: require SANITY prereq

index-pack: distinguish missing objects from type errors

run_diff_files: do not look at uninitialized stat data

run-command: store an optional argv_array

run_column_filter: use argv_array

git_connect: use argv_array

get_helper: use run-command's internal argv_array

get_exporter: use argv_array

get_importer: use run-command's internal argv_array

argv-array: drop "detach" code

open_sha1_file: report "most interesting" errno

move "--follow needs one pathspec" rule to diff_setup_done

format-patch: make newline after signature conditional

daemon/config: factor out duplicate xstrdup_tolower

test-lib: preserve GIT_CURL_VERBOSE from the environment

t/lib-httpd: use write_script to copy CGI scripts

t5550: test display of remote http error messages

strbuf: add strbuf_tolower function

http: extract type/subtype portion of content-type

http: optionally extract charset parameter from content-type

strbuf: add strbuf_reencode helper

remote-curl: reencode http error messages

http: default text charset to iso-8859-1

t5537: re-drop http tests

error_resolve_conflict: rewrap advice message

error_resolve_conflict: drop quotations around operation

update-index: fix segfault with missing --cacheinfo argument

repack: do not accidentally pack kept objects by default

repack: respect pack.writebitmaps

repack: s/write_bitmap/&s/ in code

pack-objects: stop respecting pack.writebitmaps

repack: simplify handling of --write-bitmap-index

repack: introduce repack.writeBitmaps config option

commit_tree: take a pointer/len pair rather than a const strbuf

replace dangerous uses of strbuf_attach

alloc: include any-object allocations in alloc_report

commit: push commit_index update into alloc_commit_node

do not create "struct commit" with xcalloc

logmsg_reencode: return const buffer

sequencer: use logmsg_reencode in get_message

t7700: drop explicit --no-pack-kept-objects from .keep test

provide a helper to free commit buffer

provide a helper to set the commit buffer

provide helpers to access the commit buffer

use get_cached_commit_buffer where appropriate

use get_commit_buffer to avoid duplicate code

convert logmsg_reencode to get_commit_buffer

use get_commit_buffer everywhere

commit-slab: provide a static initializer

commit: convert commit->buffer to a slab

commit: record buffer length in cache

reuse cached commit buffer when parsing signatures

t7510: stop referring to master in later tests

t7510: test a commit signed by an unknown key

t7510: check %G* pretty-format output

pretty: avoid reading past end-of-string with "%G"

parse_diff_color_slot: drop ofs parameter

daemon: mark some strings as const

avoid using skip_prefix as a boolean

strbuf: add xstrfmt helper

use xstrfmt in favor of manual size calculations

use xstrdup instead of xmalloc + strcpy

use xstrfmt to replace xmalloc + sprintf

use xstrfmt to replace xmalloc + strcpy/strcat

setup_git_env: use git_pathdup instead of xmalloc + sprintf

sequencer: use argv_array_pushf

merge: use argv_array when spawning merge strategy

walker_fetch: fix minor memory leak

unique_path: fix unlikely heap overflow

refactor skip_prefix to return a boolean

apply: use skip_prefix instead of raw addition

fast-import: fix read of uninitialized argv memory

transport-helper: avoid reading past end-of-string

use skip_prefix to avoid magic numbers

use skip_prefix to avoid repeating strings

fast-import: use skip_prefix for parsing input

daemon: use skip_prefix to avoid magic numbers

stat_opt: check extra strlen call

fast-import: refactor parsing of spaces

fetch-pack: refactor parsing in get_ack

git: avoid magic number with skip_prefix

use skip_prefix to avoid repeated calculations

http-push: refactor parsing of remote object names

setup_git_env(): introduce git_path_from_env() helper

move "%G" format test from t7510 to t6006

replace: replace spaces with tabs in indentation

avoid double close of descriptors handed to run_command

replace: use argv_array in export_object

replace: add a --raw mode for --edit

add strip_suffix function

implement ends_with via strip_suffix

replace has_extension with ends_with

use strip_suffix instead of ends_with in simple cases

index-pack: use strip_suffix to avoid magic numbers

strbuf: implement strbuf_strip_suffix

verify-pack: use strbuf_strip_suffix

prepare_packed_git_one: refactor duplicate-pack check

t7300: repair filesystem permissions with test_when_finished

remote-curl: do not complain on EOF from parent git

remote-curl: use error instead of fprintf(stderr)

remote-curl: mark helper-protocol errors more clearly

tag: use skip_prefix instead of magic numbers

alloc: write out allocator definitions

move setting of object->type to alloc_* functions

parse_object_buffer: do not set object type

add object_as_type helper for casting objects

alloc: factor out commit index

object_as_type: set commit index

diff-tree: avoid lookup_unknown_object

prio-queue: factor out compare and swap operations

prio-queue: make output stable with respect to insertion

paint_down_to_common: use prio_queue

t5539: update a flaky test

Jens Lehmann (21):

status/commit: show staged submodules regardless of ignore config

commit -m: commit staged submodules regardless of ignore config

git-gui: show staged submodules regardless of ignore config

git-gui: tolerate major version changes when comparing the git version

gitk: Show staged submodules regardless of ignore config

test-lib: add test_dir_is_empty()

t/Makefile: check helper scripts for non-portable shell commands too

t/Makefile: always test all lint targets when running tests

submodules: add the lib-submodule-update.sh test library

checkout: call the new submodule update test framework

apply: add t4137 for submodule updates

read-tree: add t1013 for submodule updates

reset: add t7112 for submodule updates

bisect: add t6041 for submodule updates

merge: add t7613 for submodule updates

rebase: add t3426 for submodule updates

pull: add t5572 for submodule updates

cherry-pick: add t3512 for submodule updates

am: add t4255 for submodule updates

stash: add t3906 for submodule updates

revert: add t3513 for submodule updates

Jens Lindström (3):

remote rm: delete remote configuration as the last

remote: repack packed-refs once when deleting multiple refs

remote prune: optimize "dangling symref" check/warning

Jeremiah Mahler (7):

format-patch: add "--signature-file=<file>" option

t9138-git-svn-authors-prog.sh fixups

Documentation: wording fixes in the user manual and glossary

t/t7810-grep.sh: remove duplicate test_config()

api-strbuf.txt minor typos

name-hash.c: replace cache_name_compare() with memcmp(3)

cleanup duplicate name_compare() functions

Jiang Xin (2):

blame: fix broken time_buf paddings in relative timestamp

blame: dynamic blame_date_width for different locales

Johannes Schindelin (2):

git grep -O -i: if the pager is 'less', pass the '-I' option

Win32: let mingw_execve() return an int

Johannes Sixt (1):

fix brown paper bag breakage in t5150-request-pull.sh

John Keeping (4):

completion: add a note that merge options are shared

completion: add missing options for git-merge

rebase--am: use --cherry-pick instead of --ignore-if-in-upstream

rebase: omit patch-identical commits with --fork-point

Jonathan McCrohan (1):

git-instaweb: add support for Apache 2.4

Jonathan Nieder (4):

contrib: remove vim support instructions

contrib: remove git-diffall

test-lint: find unportable sed, echo, test, and export usage after &&

test doc: test_write_lines does not split its arguments

Junio C Hamano (49):

apply --ignore-space-change: lines with and without leading whitespaces do not match

send-email: windows drive prefix (e.g. C:) appears only at the beginning

mergetool: document the default for --[no-]prompt

compat/bswap.h: restore preference __BIG_ENDIAN over BIG_ENDIAN

CodingGuidelines: once it is in, it is not worth the code churn

CodingGuidelines: give an example for case/esac statement

CodingGuidelines: give an example for redirection

CodingGuidelines: give an example for control statements

CodingGuidelines: give an example for shell function preamble

CodingGuidelines: do not call the conditional statement "if()"

CodingGuidelines: on comparison

CodingGuidelines: on splitting a long line

CodingGuidelines: avoid "test <cond> -a/-o <cond>"

scripts: more "export VAR=VALUE" fixes

Git 1.9.4

fetch doc: update introductory part for clarity

fetch doc: update note on '+' in front of the refspec

fetch doc: remove notes on outdated "mixed layout"

First batch for 2.1

shortlog: allow --exclude=<glob> to be passed

fetch doc: on pulling multiple refspecs

fetch doc: update refspec format description

fetch doc: remove "short-cut" section

fetch doc: add a section on configured remote-tracking branches

fetch: allow explicit --refmap to override configuration

Second batch for 2.1

Update draft release notes to 2.1

test: turn EXPENSIVE into a lazy prerequisite

test: turn USR_BIN_TIME into a lazy prerequisite

t3302: coding style updates

t3302: do not chdir around in the primary test process

t3302: drop unnecessary NOT_EXPENSIVE pseudo-prerequisite

t3419: drop unnecessary NOT_EXPENSIVE pseudo-prerequisite

revision: parse "git log -<count>" more carefully

t0008: do not depend on 'echo' handling backslashes specially

Third batch for 2.1

git-submodule.sh: avoid "echo" path-like values

Fourth batch for 2.1

builtin/clone.c: detect a clone starting at a tag correctly

Git 2.0.1

Fifth batch for 2.1

Sixth batch for 2.1

Start preparing for 2.0.2

Seventh batch for 2.1

Git 2.0.2

Eighth batch for 2.1

Ninth batch for 2.1

Git 2.0.3

Git 2.1.0-rc0

Jörn Engel (1):

pager: do allow spawning pager recursively

Karsten Blees (46):

MSVC: link dynamically to the CRT

Win32 dirent: remove unused dirent.d_ino member

Win32 dirent: remove unused dirent.d_reclen member

Win32 dirent: change FILENAME_MAX to MAX_PATH

Win32 dirent: clarify #include directives

Win32 dirent: improve dirent implementation

Win32: move main macro to a function

Win32: support Unicode console output

Win32: detect console streams more reliably

Win32: warn if the console font doesn't support Unicode

Win32: add Unicode conversion functions

Win32: Thread-safe windows console output

Win32: fix broken pipe detection

Win32: reliably detect console pipe handles

Win32: simplify internal mingw_spawn* APIs

Win32: fix potential multi-threading issue

MinGW: disable CRT command line globbing

Win32: Unicode arguments (outgoing)

Win32: Unicode arguments (incoming)

trace: move trace declarations from cache.h to new trace.h

trace: consistently name the format parameter

trace: remove redundant printf format attribute

symlinks: remove PATH_MAX limitation

hashmap: factor out getting a hash code from a SHA1

hashmap: improve struct hashmap member documentation

hashmap: add simplified hashmap_get_from_hash() API

hashmap: add string interning API

cache.h: rename cache_def_free to cache_def_clear

trace: improve trace performance

Documentation/git.txt: improve documentation of 'GIT_TRACE*' variables

sha1_file: change GIT_TRACE_PACK_ACCESS logging to use trace API

trace: add infrastructure to augment trace output with additional info

trace: disable additional trace output for unit tests

trace: add current timestamp to all trace output

trace: move code around, in preparation to file:line output

trace: add 'file:line' to all trace output

trace: add high resolution timer function to debug performance issues

trace: add trace_performance facility to debug performance issues

git: add performance tracing for git's main() function to debug scripts

wt-status: simplify performance measurement by using getnanotime()

progress: simplify performance measurement by using getnanotime()

api-trace.txt: add trace API documentation

Win32: Unicode file name support (except dirent)

Win32: Unicode file name support (dirent)

MinGW: fix compile error due to missing ELOOP

config: use chmod() instead of fchmod()

Kirill Smelkov (20):

combine-diff: move show_log_first logic/action out of paths scanning

combine-diff: move changed-paths scanning logic into its own function

tree-diff: no need to manually verify that there is no mode change for a path

tree-diff: no need to pass match to skip_uninteresting()

tree-diff: show_tree() is not needed

tree-diff: consolidate code for emitting diffs and recursion in one place

tree-diff: don't assume compare_tree_entry() returns -1,0,1

tree-diff: move all action-taking code out of compare_tree_entry()

tree-diff: rename compare_tree_entry -> tree_entry_pathcmp

tree-diff: show_path prototype is not needed anymore

tree-diff: simplify tree_entry_pathcmp

tree-diff: remove special-case diff-emitting code for empty-tree cases

tree-diff: diff_tree() should now be static

tree-diff: rework diff_tree interface to be sha1 based

tree-diff: no need to call "full" diff_tree_sha1 from show_path()

tree-diff: reuse base str(buf) memory on sub-tree recursion

Portable alloca for Git

tree-diff: rework diff_tree() to generate diffs for multiparent cases as well

combine-diff: speed it up, by using multiparent diff tree-walker directly

mingw: activate alloca

Linus Torvalds (1):

git log: support "auto" decorations

Luis R. Rodriguez (1):

git.c: treat RUN_SETUP_GENTLY and RUN_SETUP as mutually exclusive

Marc Branchaud (2):

fetch doc: move FETCH_HEAD material lower and add an example

docs: Explain the purpose of fetch's and pull's <refspec> parameter.

Matthew Chen (1):

submodule: document "sync --recursive"

Matthieu Moy (4):

git-remote-mediawiki: allow stop/start-ing the test server

git-remote-mediawiki: fix encoding issue for UTF-8 media files

pager: remove 'S' from $LESS by default

rebase -i: test "Nothing to do" case with autostash

Max Kirillov (5):

git-show: fix 'git show -s' to not add extra terminator after merge commit

gitk: Switch to patch mode when searching for line origin

gitk: Add visiblerefs option, which lists always-shown branches

t6023-merge-file.sh: fix and mark as broken invalid tests

git-merge-file: do not add LF at EOF while applying unrelated change

Maxime Coste (2):

git-p4: Do not include diff in spec file when just preparing p4

git-p4: fix submit in non --prepare-p4-only mode

Michael Barabanov (1):

use local cloning if insteadOf makes a local URL

Michael Haggerty (27):

t1400: fix name and expected result of one test

t1400: provide more usual input to the command

parse_arg(): really test that argument is properly terminated

t1400: add some more tests involving quoted arguments

refs.h: rename the action_on_err constants

update_refs(): fix constness

update-ref --stdin: read the whole input at once

parse_cmd_verify(): copy old_sha1 instead of evaluating <oldvalue> twice

update-ref.c: extract a new function, parse_refname()

update-ref --stdin: improve error messages for invalid values

update-ref --stdin: make error messages more consistent

update-ref --stdin: simplify error messages for missing oldvalues

t1400: test that stdin -z update treats empty <newvalue> as zeros

update-ref.c: extract a new function, parse_next_sha1()

update-ref --stdin -z: deprecate interpreting the empty string as zeros

t1400: test one mistake at a time

update-ref --stdin: improve the error message for unexpected EOF

update-ref --stdin: harmonize error messages

refs: add a concept of a reference transaction

update-ref --stdin: reimplement using reference transactions

refs: remove API function update_refs()

struct ref_update: rename field "ref_name" to "refname"

struct ref_update: store refname as a FLEX_ARRAY

ref_transaction_commit(): simplify code using temporary variables

struct ref_update: add a lock field

struct ref_update: add a type field

ref_transaction_commit(): work with transaction->updates in place

Michael J Gruber (7):

t7510: use consistent &&-chains in loop

gpg-interface: provide clear helper for struct signature_check

gpg-interface: provide access to the payload

verify-commit: scriptable commit signature verification

t7510: exit for loop with test result

t7510: test verify-commit

log: correctly identify mergetag signature verification status

Michael Naumov (1):

sideband.c: do not use ANSI control sequence on non-terminal

Michael S. Tsirkin (6):

git-send-email: two new options: to-cover, cc-cover

test/send-email: to-cover, cc-cover tests

rebase --keep-empty -i: add test

test: add test_write_lines helper

patch-id: make it stable against hunk reordering

patch-id-test: test stable and unstable behaviour

Nguyễn Thái Ngọc Duy (40):

index-pack: work around thread-unsafe pread()

ewah: fix constness of ewah_read_mmap

ewah: delete unused ewah_read_mmap_native declaration

sequencer: do not update/refresh index if the lock cannot be held

config: be strict on core.commentChar

commit: allow core.commentChar=auto for character auto selection

gc --auto: do not lock refs in the background

git potty: restore environments after alias expansion

read-cache: new API write_locked_index instead of write_index/write_cache

read-cache: relocate and unexport commit_locked_index()

read-cache: store in-memory flags in the first 12 bits of ce_flags

read-cache: be strict about "changed" in remove_marked_cache_entries()

read-cache: be specific what part of the index has changed

update-index: be specific what part of the index has changed

resolve-undo: be specific what part of the index has changed

unpack-trees: be specific what part of the index has changed

cache-tree: mark istate->cache_changed on cache tree invalidation

cache-tree: mark istate->cache_changed on cache tree update

cache-tree: mark istate->cache_changed on prime_cache_tree()

entry.c: update cache_changed if refresh_cache is set in checkout_entry()

read-cache: save index SHA-1 after reading

read-cache: split-index mode

read-cache: mark new entries for split index

read-cache: save deleted entries in split index

read-cache: mark updated entries for split index

split-index: the writing part

split-index: the reading part

split-index: do not invalidate cache-tree at read time

split-index: strip pathname of on-disk replaced entries

update-index: new options to enable/disable split index mode

update-index --split-index: do not split if $GIT_DIR is read only

rev-parse: add --shared-index-path to get shared index path

read-tree: force split-index mode off on --index-output

read-tree: note about dropping split-index mode or index version

read-cache: force split index mode with GIT_TEST_SPLIT_INDEX

t2104: make sure split index mode is off for the version test

t1700: new tests for split-index mode

dir.c: coding style fix

dir.h: move struct exclude declaration to top level

prep_exclude: remove the artificial PATH_MAX limit

Nick Alcock (1):

t5538: move http push tests out to t5542

Pasha Bolokhov (1):

dir.c:trim_trailing_spaces(): fix for " \ " sequence

Pat Thoyts (2):

wincred: add install target

wincred: avoid overwriting configured variables

Philip Oakley (1):

doc: give some guidelines for error messages

Ramkumar Ramachandra (1):

rebase -i: handle "Nothing to do" case with autostash

Ramsay Allan Jones (2):

t0000-*.sh: fix the GIT_SKIP_TESTS sub-tests

alloc.c: remove the alloc_raw_commit_node() function

René Scharfe (28):

mailinfo: use strcmp() for string comparison

pack-objects: use free()+xcalloc() instead of xrealloc()+memset()

Use starts_with() for C strings instead of memcmp()

blame: factor out get_next_line()

blame: simplify prepare_lines()

wt-status: use argv_array for environment

wt-status: simplify building of summary limit argument

sha1_file: replace PATH_MAX buffer with strbuf in prepare_packed_git_one()

sha1_file: avoid overrunning alternate object base string

t5000, t5003: simplify commit

diff-tree: call free_commit_list() instead of duplicating its code

line-log: use commit_list_append() instead of duplicating its code

use strbuf_addbuf for adding strbufs

use strbuf_addch for adding single characters

merge: simplify merge_trivial() by using commit_list_append()

commit: use commit_list_append() instead of duplicating its code

fsck: simplify fsck_commit_buffer() by using commit_list_count()

annotate: use argv_array

strbuf: use strbuf_addstr() for adding C strings

use commit_list_count() to count the members of commit_lists

run-command: use internal argv_array of struct child_process in run_hook_ve()

transport: simplify fetch_objs_via_rsync() using argv_array

fast-import: use hashcmp() for SHA1 hash comparison

bundle: use internal argv_array of struct child_process in create_bundle()

remote-testsvn: use internal argv_array of struct child_process in cmd_import()

unix-socket: remove stale socket before calling chdir()

use xcalloc() to allocate zero-initialized memory

use xmemdupz() to allocate copies of strings given by start and length

RomanBelinsky (1):

SVN.pm::parse_svn_date: allow timestamps with a single-digit hour

Ronnie Sahlberg (27):

sequencer.c: check for lock failure and bail early in fast_forward_to

commit.c: check for lock error and return early

refs.c: add new functions reflog_exists and delete_reflog

checkout.c: use ref_exists instead of file_exist

refs.c: change read_ref_at to use the reflog iterators

enums: remove trailing ',' after last item in enum

enums: remove trailing ',' after last item in enum

refs.c: remove ref_transaction_rollback

refs.c: ref_transaction_commit should not free the transaction

refs.c: constify the sha arguments for ref_transaction_create|delete|update

refs.c: allow passing NULL to ref_transaction_free

refs.c: add a strbuf argument to ref_transaction_commit for error logging

lockfile.c: add a new public function unable_to_lock_message

lockfile.c: make lock_file return a meaningful errno on failurei

refs.c: add an err argument to repack_without_refs

refs.c: make sure log_ref_setup returns a meaningful errno

refs.c: verify_lock should set errno to something meaningful

refs.c: make remove_empty_directories always set errno to something sane

refs.c: commit_packed_refs to return a meaningful errno on failure

refs.c: make resolve_ref_unsafe set errno to something meaningful on error

refs.c: log_ref_write should try to return meaningful errno

refs.c: make ref_update_reject_duplicates take a strbuf argument for errors

refs.c: make update_ref_write update a strbuf on failure

update-ref: use err argument to get error from ref_transaction_commit

refs.c: remove the onerr argument to ref_transaction_commit

refs.c: change ref_transaction_update() to do error checking and return status

refs.c: add a public is_branch function

Stefan Beller (3):

.mailmap: map different names with the same email address together

git.1: switch homepage for stats

.mailmap: combine Stefan Beller's emails

Steffen Prohaska (1):

completion: handle '!f() { ... }; f' and "!sh -c '...' -" aliases

Stepan Kasal (3):

Revert "submodules: fix ambiguous absolute paths under Windows"

t5000, t5003: do not use test_cmp to compare binary files

mingw: avoid const warning

Stephen P. Smith (1):

How to keep a project's canonical history correct.

Steve Hoelzer (1):

environment.c: enable core.preloadindex by default

Tanay Abhra (4):

string-list: spell all values out that are given to a string_list initializer

imap-send: use skip_prefix instead of using magic numbers

string-list: add string_list initializer helper function

replace memset with string-list initializers

Theodore Leblond (1):

compat/poll: sleep 1 millisecond to avoid busy wait

Thorsten Glaser (1):

builtin/tag.c: show tag name to hint in the message editor

Torsten Bögershausen (7):

utf8.c: use a table for double_width

utf8: make it easier to auto-update git_wcwidth()

t5551: fix the 50,000 tag test

t9001: avoid non-portable '\n' with sed

Update of unicode_width.h to Unicode Version 7.0

t0025: rename the test files

t0027: combinations of core.autocrlf, core.eol and text

Trần Ngọc Quân (1):

l10n: Init Vietnamese translation

W. Trevor King (1):

Documentation: mention config sources for @{upstream}

William Giokas (1):

svn-fe: conform to pep8

Yi EungJun (2):

http-protocol.txt: Basic Auth is defined in RFC 2617, not RFC 2616

http: fix charset detection of extract_content_type()

Yiannis Marangos (2):

wrapper.c: add xpread() similar to xread()

read-cache.c: verify index file before we opportunistically update it

Zoltan Klinger (1):

log: fix indentation for --graph --show-signature

brian m. carlson (3):

blame: correctly handle files regardless of autocrlf

rebase--merge: fix --skip with two conflicts in a row

Documentation: fix missing text for rev-parse --verify

Øystein Walle (1):

config: respect '~' and '~user' in mailmap.file

Øyvind A. Holm (1):

.gitignore: "git-verify-commit" is a generated file

--

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in

the body of a message to majordomo@vger.kernel.org

More majordomo info at http://vger.kernel.org/majordomo-info.html

Please read the FAQ at http://www.tux.org/lkml/

Show more