gitweb.git
Merge branch 'jc/daemon-no-ipv6-for-2.4.1'Junio C Hamano Mon, 11 May 2015 21:23:53 +0000 (14:23 -0700)

Merge branch 'jc/daemon-no-ipv6-for-2.4.1'

"git daemon" fails to build from the source under NO_IPV6
configuration (regression in 2.4).

* jc/daemon-no-ipv6-for-2.4.1:
daemon: unbreak NO_IPV6 build regression

Merge branch 'jn/clean-use-error-not-fprintf-on-stderr'Junio C Hamano Mon, 11 May 2015 21:23:52 +0000 (14:23 -0700)

Merge branch 'jn/clean-use-error-not-fprintf-on-stderr'

Some error messages in "git config" were emitted without calling
the usual error() facility.

* jn/clean-use-error-not-fprintf-on-stderr:
config: use error() instead of fprintf(stderr, ...)

Merge branch 'tb/blame-resurrect-convert-to-git'Junio C Hamano Mon, 11 May 2015 21:23:52 +0000 (14:23 -0700)

Merge branch 'tb/blame-resurrect-convert-to-git'

Some time ago, "git blame" (incorrectly) lost the convert_to_git()
call when synthesizing a fake "tip" commit that represents the
state in the working tree, which broke folks who record the history
with LF line ending to make their project portabile across
platforms while terminating lines in their working tree files with
CRLF for their platform.

* tb/blame-resurrect-convert-to-git:
blame: CRLF in the working tree and LF in the repo

Merge branch 'va/fix-git-p4-tests'Junio C Hamano Mon, 11 May 2015 21:23:51 +0000 (14:23 -0700)

Merge branch 'va/fix-git-p4-tests'

* va/fix-git-p4-tests:
git-p4: t9814: prevent --chain-lint failure

Merge branch 'ld/p4-case-fold'Junio C Hamano Mon, 11 May 2015 21:23:50 +0000 (14:23 -0700)

Merge branch 'ld/p4-case-fold'

* ld/p4-case-fold:
git-p4: add failing tests for case-folding p4d

Merge branch 'jk/rebase-quiet-noop'Junio C Hamano Mon, 11 May 2015 21:23:49 +0000 (14:23 -0700)

Merge branch 'jk/rebase-quiet-noop'

"git rebase --quiet" was not quite quiet when there is nothing to
do.

* jk/rebase-quiet-noop:
rebase: silence "git checkout" for noop rebase

Merge branch 'va/p4-client-path'Junio C Hamano Mon, 11 May 2015 21:23:48 +0000 (14:23 -0700)

Merge branch 'va/p4-client-path'

git p4 attempts to better handle branches in Perforce.

* va/p4-client-path:
git-p4: improve client path detection when branches are used
t9801: check git-p4's branch detection with client spec enabled

Merge branch 'mm/add-p-split-error'Junio C Hamano Mon, 11 May 2015 21:23:47 +0000 (14:23 -0700)

Merge branch 'mm/add-p-split-error'

When "add--interactive" splits a hunk into two overlapping hunks
and then let the user choose only one, it sometimes feeds an
incorrect patch text to "git apply". Add tests to demonstrate
this.

I have a slight suspicion that this may be $gmane/87202 coming back
and biting us (I seem to have said "let's run with this and see
what happens" back then).

* mm/add-p-split-error:
stash -p: demonstrate failure of split with mixed y/n
t3904-stash-patch: factor PERL prereq at the top of the file
t3904-stash-patch: fix test description
add -p: demonstrate failure when running 'edit' after a split
t3701-add-interactive: simplify code

Merge branch 'tb/t0027-crlf'Junio C Hamano Mon, 11 May 2015 21:23:47 +0000 (14:23 -0700)

Merge branch 'tb/t0027-crlf'

More line-ending tests.

* tb/t0027-crlf:
t0027: Add repoMIX and LF_nul
t0027: support NATIVE_CRLF platforms
t0027: cleanup: rename functions; avoid non-leading TABs

Merge branch 'ls/p4-changes-block-size'Junio C Hamano Mon, 11 May 2015 21:23:46 +0000 (14:23 -0700)

Merge branch 'ls/p4-changes-block-size'

"git p4" learned "--changes-block-size <n>" to read the changes in
chunks from Perforce, instead of making one call to "p4 changes"
that may trigger "too many rows scanned" error from Perforce.

* ls/p4-changes-block-size:
git-p4: use -m when running p4 changes

Merge branch 'jc/plug-fmt-merge-msg-leak'Junio C Hamano Mon, 11 May 2015 21:23:45 +0000 (14:23 -0700)

Merge branch 'jc/plug-fmt-merge-msg-leak'

* jc/plug-fmt-merge-msg-leak:
fmt-merge-msg: plug small leak of commit buffer

Merge branch 'nd/slim-index-pack-memory-usage'Junio C Hamano Mon, 11 May 2015 21:23:44 +0000 (14:23 -0700)

Merge branch 'nd/slim-index-pack-memory-usage'

Memory usage of "git index-pack" has been trimmed by tens of
per-cent.

* nd/slim-index-pack-memory-usage:
index-pack: kill union delta_base to save memory
index-pack: reduce object_entry size to save memory

Merge branch 'jk/still-interesting'Junio C Hamano Mon, 11 May 2015 21:23:43 +0000 (14:23 -0700)

Merge branch 'jk/still-interesting'

"git rev-list --objects $old --not --all" to see if everything that
is reachable from $old is already connected to the existing refs
was very inefficient.

* jk/still-interesting:
limit_list: avoid quadratic behavior from still_interesting

Merge branch 'jk/reading-packed-refs'Junio C Hamano Mon, 11 May 2015 21:23:42 +0000 (14:23 -0700)

Merge branch 'jk/reading-packed-refs'

An earlier rewrite to use strbuf_getwholeline() instead of fgets(3)
to read packed-refs file revealed that the former is unacceptably
inefficient.

* jk/reading-packed-refs:
t1430: add another refs-escape test
read_packed_refs: avoid double-checking sane refs
strbuf_getwholeline: use getdelim if it is available
strbuf_getwholeline: avoid calling strbuf_grow
strbuf_addch: avoid calling strbuf_grow
config: use getc_unlocked when reading from file
strbuf_getwholeline: use getc_unlocked
git-compat-util: add fallbacks for unlocked stdio
strbuf_getwholeline: use getc macro

Merge branch 'lm/squelch-bg-progress'Junio C Hamano Mon, 11 May 2015 21:23:42 +0000 (14:23 -0700)

Merge branch 'lm/squelch-bg-progress'

Many long-running operations show progress eye-candy, even when
they are later backgrounded. Hide the eye-candy when the process
is sent to the background instead.

* lm/squelch-bg-progress:
compat/mingw: stubs for getpgid() and tcgetpgrp()
progress: no progress in background

Merge branch 'jk/sha1-file-reduce-useless-warnings'Junio C Hamano Mon, 11 May 2015 21:23:40 +0000 (14:23 -0700)

Merge branch 'jk/sha1-file-reduce-useless-warnings'

* jk/sha1-file-reduce-useless-warnings:
sha1_file: squelch "packfile cannot be accessed" warnings

Merge branch 'nd/multiple-work-trees'Junio C Hamano Mon, 11 May 2015 21:23:39 +0000 (14:23 -0700)

Merge branch 'nd/multiple-work-trees'

A replacement for contrib/workdir/git-new-workdir that does not
rely on symbolic links and make sharing of objects and refs safer
by making the borrowee and borrowers aware of each other.

* nd/multiple-work-trees: (41 commits)
prune --worktrees: fix expire vs worktree existence condition
t1501: fix test with split index
t2026: fix broken &&-chain
t2026 needs procondition SANITY
git-checkout.txt: a note about multiple checkout support for submodules
checkout: add --ignore-other-wortrees
checkout: pass whole struct to parse_branchname_arg instead of individual flags
git-common-dir: make "modules/" per-working-directory directory
checkout: do not fail if target is an empty directory
t2025: add a test to make sure grafts is working from a linked checkout
checkout: don't require a work tree when checking out into a new one
git_path(): keep "info/sparse-checkout" per work-tree
count-objects: report unused files in $GIT_DIR/worktrees/...
gc: support prune --worktrees
gc: factor out gc.pruneexpire parsing code
gc: style change -- no SP before closing parenthesis
checkout: clean up half-prepared directories in --to mode
checkout: reject if the branch is already checked out elsewhere
prune: strategies for linked checkouts
checkout: support checking out into a new working directory
...

Merge branch 'pt/credential-xdg'Junio C Hamano Mon, 11 May 2015 21:23:38 +0000 (14:23 -0700)

Merge branch 'pt/credential-xdg'

Tweak the sample "store" backend of the credential helper to honor
XDG configuration file locations when specified.

* pt/credential-xdg:
t0302: "unreadable" test needs POSIXPERM
t0302: test credential-store support for XDG_CONFIG_HOME
git-credential-store: support XDG_CONFIG_HOME
git-credential-store: support multiple credential files

First batch for 2.5 cycleJunio C Hamano Wed, 6 May 2015 04:13:30 +0000 (21:13 -0700)

First batch for 2.5 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jk/prune-mtime'Junio C Hamano Wed, 6 May 2015 04:00:37 +0000 (21:00 -0700)

Merge branch 'jk/prune-mtime'

Access to objects in repositories that borrow from another one on a
slow NFS server unnecessarily got more expensive due to recent code
becoming more cautious in a naive way not to lose objects to pruning.

* jk/prune-mtime:
sha1_file: only freshen packs once per run
sha1_file: freshen pack objects before loose
reachable: only mark local objects as recent

Merge branch 'mm/usage-log-l-can-take-regex'Junio C Hamano Wed, 6 May 2015 04:00:36 +0000 (21:00 -0700)

Merge branch 'mm/usage-log-l-can-take-regex'

Documentation fix.

* mm/usage-log-l-can-take-regex:
log -L: improve error message on malformed argument
Documentation: change -L:<regex> to -L:<funcname>

Merge branch 'ep/fix-test-lib-functions-report'Junio C Hamano Wed, 6 May 2015 04:00:35 +0000 (21:00 -0700)

Merge branch 'ep/fix-test-lib-functions-report'

* ep/fix-test-lib-functions-report:
test-lib-functions.sh: fix the second argument to some helper functions

Merge branch 'cn/bom-in-gitignore'Junio C Hamano Wed, 6 May 2015 04:00:34 +0000 (21:00 -0700)

Merge branch 'cn/bom-in-gitignore'

Teach the codepaths that read .gitignore and .gitattributes files
that these files encoded in UTF-8 may have UTF-8 BOM marker at the
beginning; this makes it in line with what we do for configuration
files already.

* cn/bom-in-gitignore:
attr: skip UTF8 BOM at the beginning of the input file
config: use utf8_bom[] from utf.[ch] in git_parse_source()
utf8-bom: introduce skip_utf8_bom() helper
add_excludes_from_file: clarify the bom skipping logic
dir: allow a BOM at the beginning of exclude files

Merge branch 'jc/epochtime-wo-tz'Junio C Hamano Wed, 6 May 2015 04:00:33 +0000 (21:00 -0700)

Merge branch 'jc/epochtime-wo-tz'

"git commit --date=now" or anything that relies on approxidate lost
the daylight-saving-time offset.

* jc/epochtime-wo-tz:
parse_date_basic(): let the system handle DST conversion
parse_date_basic(): return early when given a bogus timestamp

Merge branch 'nd/t1509-chroot-test'Junio C Hamano Wed, 6 May 2015 04:00:31 +0000 (21:00 -0700)

Merge branch 'nd/t1509-chroot-test'

Correct test bitrot.

* nd/t1509-chroot-test:
t1509: update prepare script to be able to run t1509 in chroot again

Merge branch 'oh/fix-config-default-user-name-section'Junio C Hamano Wed, 6 May 2015 04:00:30 +0000 (21:00 -0700)

Merge branch 'oh/fix-config-default-user-name-section'

The default $HOME/.gitconfig file created upon "git config --global"
that edits it had incorrectly spelled user.name and user.email
entries in it.

* oh/fix-config-default-user-name-section:
config: fix settings in default_user_config template

Merge branch 'jk/type-from-string-gently'Junio C Hamano Wed, 6 May 2015 04:00:29 +0000 (21:00 -0700)

Merge branch 'jk/type-from-string-gently'

"git cat-file bl $blob" failed to barf even though there is no
object type that is "bl".

* jk/type-from-string-gently:
type_from_string_gently: make sure length matches

Merge branch 'sb/test-bitmap-free-at-end'Junio C Hamano Wed, 6 May 2015 04:00:28 +0000 (21:00 -0700)

Merge branch 'sb/test-bitmap-free-at-end'

* sb/test-bitmap-free-at-end:
pack-bitmap.c: fix a memleak

Merge branch 'ld/p4-filetype-detection'Junio C Hamano Wed, 6 May 2015 04:00:27 +0000 (21:00 -0700)

Merge branch 'ld/p4-filetype-detection'

* ld/p4-filetype-detection:
git-p4: fix filetype detection on files opened exclusively
git-p4: small fix for locked-file-move-test
git-p4: fix small bug in locked test scripts

Merge branch 'ts/checkout-advice-plural'Junio C Hamano Wed, 6 May 2015 04:00:27 +0000 (21:00 -0700)

Merge branch 'ts/checkout-advice-plural'

* ts/checkout-advice-plural:
checkout: call a single commit "it" intead of "them"

Merge branch 'jk/init-core-worktree-at-root'Junio C Hamano Wed, 6 May 2015 04:00:26 +0000 (21:00 -0700)

Merge branch 'jk/init-core-worktree-at-root'

We avoid setting core.worktree when the repository location is the
".git" directory directly at the top level of the working tree, but
the code misdetected the case in which the working tree is at the
root level of the filesystem (which arguably is a silly thing to
do, but still valid).

* jk/init-core-worktree-at-root:
init: don't set core.worktree when initializing /.git

Merge branch 'mh/show-branch-topic'Junio C Hamano Wed, 6 May 2015 04:00:25 +0000 (21:00 -0700)

Merge branch 'mh/show-branch-topic'

"git show-branch --topics HEAD" (with no other arguments) did not
do anything interesting. Instead, contrast the given revision
against all the local branches by default.

* mh/show-branch-topic:
show-branch: show all local heads when only giving one rev along --topics

Merge branch 'sb/line-log-plug-pairdiff-leak'Junio C Hamano Wed, 6 May 2015 04:00:25 +0000 (21:00 -0700)

Merge branch 'sb/line-log-plug-pairdiff-leak'

* sb/line-log-plug-pairdiff-leak:
line-log.c: fix a memleak

Merge branch 'jc/diff-no-index-d-f'Junio C Hamano Wed, 6 May 2015 04:00:24 +0000 (21:00 -0700)

Merge branch 'jc/diff-no-index-d-f'

The usual "git diff" when seeing a file turning into a directory
showed a patchset to remove the file and create all files in the
directory, but "git diff --no-index" simply refused to work. Also,
when asked to compare a file and a directory, imitate POSIX "diff"
and compare the file with the file with the same name in the
directory, instead of refusing to run.

* jc/diff-no-index-d-f:
diff-no-index: align D/F handling with that of normal Git
diff-no-index: DWIM "diff D F" into "diff D/F F"

Merge branch 'bc/object-id'Junio C Hamano Wed, 6 May 2015 04:00:23 +0000 (21:00 -0700)

Merge branch 'bc/object-id'

Identify parts of the code that knows that we use SHA-1 hash to
name our objects too much, and use (1) symbolic constants instead
of hardcoded 20 as byte count and/or (2) use struct object_id
instead of unsigned char [20] for object names.

* bc/object-id:
apply: convert threeway_stage to object_id
patch-id: convert to use struct object_id
commit: convert parts to struct object_id
diff: convert struct combine_diff_path to object_id
bulk-checkin.c: convert to use struct object_id
zip: use GIT_SHA1_HEXSZ for trailers
archive.c: convert to use struct object_id
bisect.c: convert leaf functions to use struct object_id
define utility functions for object IDs
define a structure for object IDs

daemon: unbreak NO_IPV6 build regressionJunio C Hamano Tue, 5 May 2015 18:03:24 +0000 (11:03 -0700)

daemon: unbreak NO_IPV6 build regression

When 01cec54e (daemon: deglobalize hostname information, 2015-03-07)
wrapped the global variables such as hostname inside a struct, it
forgot to convert one location that spelled "hostname" that needs to
be updated to "hi->hostname".

This was inside NO_IPV6 block, and was not caught by anybody.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

config: use error() instead of fprintf(stderr, ...)Jonathan Nieder Mon, 4 May 2015 21:18:39 +0000 (14:18 -0700)

config: use error() instead of fprintf(stderr, ...)

The die() / error() / warning() helpers put a fatal: / error: /
warning: prefix in front of the error message they print describing
the message's severity, which users are likely to be accustomed to
seeing these days.

This change will also be useful when marking the message for
translation: the argument to error() includes no newline at the end,
so it is less fussy for translators to translate without lines running
together in the translated output.

While we're here, start the error messages with a lowercase letter to
match the usual typography of error messages.

A quick web search and a code search at codesearch.debian.net finds no
scripts trying to parse these error messages, so this change should be
safe.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

blame: CRLF in the working tree and LF in the repoTorsten Bögershausen Sun, 3 May 2015 16:38:01 +0000 (18:38 +0200)

blame: CRLF in the working tree and LF in the repo

A typical setup under Windows is to set core.eol to CRLF, and text
files are marked as "text" in .gitattributes, or core.autocrlf is
set to true.

After 4d4813a5 "git blame" no longer works as expected for such a
set-up. Every line is annotated as "Not Committed Yet", even though
the working directory is clean. This is because the commit removed
the conversion in blame.c for all files, with or without CRLF in the
repo.

Having files with CRLF in the repo and core.autocrlf=input is a
temporary situation, and the files, if committed as is, will be
normalized in the repo, which _will_ be a notable change. Blaming
them with "Not Committed Yet" is the right result. Revert commit
4d4813a5 which was a misguided attempt to "solve" a non-problem.

Add two test cases in t8003 to verify the correct CRLF conversion.

Suggested-By: Stepan Kasal <kasal@ucw.cz>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.4 v2.4.0Junio C Hamano Thu, 30 Apr 2015 18:25:06 +0000 (11:25 -0700)

Git 2.4

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'mh/multimail-renewal'Junio C Hamano Tue, 28 Apr 2015 20:01:29 +0000 (13:01 -0700)

Merge branch 'mh/multimail-renewal'

* mh/multimail-renewal:
Update git-multimail to version 1.0.2

Merge branch 'mg/show-notes-doc'Junio C Hamano Tue, 28 Apr 2015 20:00:20 +0000 (13:00 -0700)

Merge branch 'mg/show-notes-doc'

Documentation fix.

* mg/show-notes-doc:
rev-list-options.txt: complete sentence about notes matching

Merge branch 'nd/versioncmp-prereleases'Junio C Hamano Tue, 28 Apr 2015 20:00:19 +0000 (13:00 -0700)

Merge branch 'nd/versioncmp-prereleases'

* nd/versioncmp-prereleases:
git tag: mention versionsort.prereleaseSuffix in manpage

Merge branch 'mg/status-v-v'Junio C Hamano Tue, 28 Apr 2015 20:00:18 +0000 (13:00 -0700)

Merge branch 'mg/status-v-v'

* mg/status-v-v:
status: document the -v/--verbose option

git-p4: add failing tests for case-folding p4dLuke Diamand Tue, 28 Apr 2015 09:08:01 +0000 (10:08 +0100)

git-p4: add failing tests for case-folding p4d

When p4d runs on a case-folding OS, git-p4 can end up getting
very confused. This adds failing tests to demonstrate the problem.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: t9814: prevent --chain-lint failureLuke Diamand Tue, 28 Apr 2015 07:21:22 +0000 (08:21 +0100)

git-p4: t9814: prevent --chain-lint failure

Use test_lazy_prereq to setup prerequisites for the p4 move
test. This both makes the test simpler and clearer, and also
means it no longer fails the new --chain-lint tests.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rebase: silence "git checkout" for noop rebaseJeff King Tue, 28 Apr 2015 05:17:37 +0000 (01:17 -0400)

rebase: silence "git checkout" for noop rebase

When the branch to be rebased is already up to date, we
"git checkout" the branch, print an "up to date" message,
and end the rebase early. However, our checkout may print
"Switched to branch 'foo'" or "Already on 'foo'", even if
the user has asked for "--quiet".

We should avoid printing these messages at all, "--quiet" or
no. Since the rebase is a noop, this checkout can be seen as
optimizing out these other two checkout operations (that
happen in a real rebase):

1. Moving to the detached HEAD to start the rebase; we
always feed "-q" to checkout there, and instead rely on
our own custom message (which respects --quiet).

2. Finishing a rebase, where we move to the final branch.
Here we actually use update-ref rather than
git-checkout, and produce no messages.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update git-multimail to version 1.0.2Michael Haggerty Mon, 27 Apr 2015 11:17:25 +0000 (13:17 +0200)

Update git-multimail to version 1.0.2

The only changes are to the README files, most notably the list of
maintainers and the project URL.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with 2.3.7Junio C Hamano Mon, 27 Apr 2015 19:26:21 +0000 (12:26 -0700)

Sync with 2.3.7

Git 2.3.7 v2.3.7Junio C Hamano Mon, 27 Apr 2015 19:25:36 +0000 (12:25 -0700)

Git 2.3.7

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'tb/connect-ipv6-parse-fix' into maintJunio C Hamano Mon, 27 Apr 2015 19:23:53 +0000 (12:23 -0700)

Merge branch 'tb/connect-ipv6-parse-fix' into maint

An earlier update to the parser that disects a URL broke an
address, followed by a colon, followed by an empty string (instead
of the port number), e.g. ssh://example.com:/path/to/repo.

* tb/connect-ipv6-parse-fix:
connect.c: ignore extra colon after hostname

Merge branch 'ma/bash-completion-leaking-x' into maintJunio C Hamano Mon, 27 Apr 2015 19:23:51 +0000 (12:23 -0700)

Merge branch 'ma/bash-completion-leaking-x' into maint

The completion script (in contrib/) contaminated global namespace
and clobbered on a shell variable $x.

* ma/bash-completion-leaking-x:
completion: fix global bash variable leak on __gitcompappend

Merge branch 'jc/push-cert' into maintJunio C Hamano Mon, 27 Apr 2015 19:23:47 +0000 (12:23 -0700)

Merge branch 'jc/push-cert' into maint

The "git push --signed" protocol extension did not limit what the
"nonce" that is a server-chosen string can contain or how long it
can be, which was unnecessarily lax. Limit both the length and the
alphabet to a reasonably small space that can still have enough
entropy.

* jc/push-cert:
push --signed: tighten what the receiving end can ask to sign

t0027: Add repoMIX and LF_nulTorsten Bögershausen Sat, 25 Apr 2015 06:47:13 +0000 (08:47 +0200)

t0027: Add repoMIX and LF_nul

"new safer autocrlf handling":

- Check if eols in a file are converted at commit, when the file has
CR (or CRLF) in the repo (technically speaking in the index).
- Add a test-file repoMIX with mixed line-endings.
- When converting LF->CRLF or CRLF->LF: check the warnings

checkout_files():

- Checking out CRLF_nul and checking for eol coversion does not
make much sense (CRLF will stay CRLF).
- Use the file LF_nul instead: It is handled a binary in "auto" modes,
and when declared as text the LF may be replaced with CRLF, depending
on the configuration.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

status: document the -v/--verbose optionMichael Haggerty Thu, 23 Apr 2015 12:27:46 +0000 (14:27 +0200)

status: document the -v/--verbose option

Document `git status -v`, including its new doubled `-vv` form.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: wordsmithingMichael Haggerty Thu, 23 Apr 2015 12:27:50 +0000 (14:27 +0200)

RelNotes: wordsmithing

Make many textual tweaks to the 2.4.0 release notes.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: refer to the rebase -i "todo list", not ... Michael Haggerty Thu, 23 Apr 2015 12:27:49 +0000 (14:27 +0200)

RelNotes: refer to the rebase -i "todo list", not "insn sheet"

"Todo list" is the name that is used in the user-facing documentation.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: correct name of versionsort.prereleaseSuffixMichael Haggerty Thu, 23 Apr 2015 12:27:48 +0000 (14:27 +0200)

RelNotes: correct name of versionsort.prereleaseSuffix

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git tag: mention versionsort.prereleaseSuffix in manpageMichael Haggerty Thu, 23 Apr 2015 12:27:47 +0000 (14:27 +0200)

git tag: mention versionsort.prereleaseSuffix in manpage

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: improve client path detection when branches... Vitor Antunes Tue, 21 Apr 2015 22:49:30 +0000 (23:49 +0100)

git-p4: improve client path detection when branches are used

Perforce allows client side file/directory remapping through
the use of the client view definition that is part of the
user's client spec.

To support this functionality while branch detection is
enabled it is important to determine the branch location in
the workspace such that the correct files are patched before
Perforce submission. Perforce provides a command that
facilitates this process: p4 where.

This patch does two things to fix improve file location
detection when git-p4 has branch detection and use of client
spec enabled:

1. Enable usage of "p4 where" when Perforce branches exist
in the git repository, even when client specification is
used. This makes use of the already existing function
p4Where.

2. Allow identifying partial matches of the branch's depot
path while processing the output of "p4 where". For
robustness, paths will only match if ending in "/...".

Signed-off-by: Vitor Antunes <vitor.hda@gmail.com>
Acked-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.4.0-rc3 v2.4.0-rc3Junio C Hamano Wed, 22 Apr 2015 20:52:43 +0000 (13:52 -0700)

Git 2.4.0-rc3

Signed-off-by: Junio C Hamano <gitster@pobox.com>

t9801: check git-p4's branch detection with client... Vitor Antunes Tue, 21 Apr 2015 22:49:29 +0000 (23:49 +0100)

t9801: check git-p4's branch detection with client spec enabled

Add failing scenario when branch detection (--detect-branches) is
enabled together with use client spec (--use-client-spec). In this
specific scenario git-p4 will break when the Perforce client view
removes part of the depot path, as in the following example:

//depot/branch1/base/... //client/branch1/...

The test case also includes an extra sub-file mapping to enforce
robustness check of git-p4's client view support:

//depot/branch1/base/dir/sub_file1 //client/branch1/sub_file1

Signed-off-by: Vitor Antunes <vitor.hda@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with maintJunio C Hamano Tue, 21 Apr 2015 19:58:50 +0000 (12:58 -0700)

Sync with maint

Git 2.3.6 v2.3.6Junio C Hamano Tue, 21 Apr 2015 19:17:09 +0000 (12:17 -0700)

Git 2.3.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jk/colors' into maintJunio C Hamano Tue, 21 Apr 2015 19:12:25 +0000 (12:12 -0700)

Merge branch 'jk/colors' into maint

"diff-highlight" (in contrib/) used to show byte-by-byte
differences, which meant that multi-byte characters can be chopped
in the middle. It learned to pay attention to character boundaries
(assuming the UTF-8 payload).

* jk/colors:
diff-highlight: do not split multibyte characters

Merge branch 'jk/test-annoyances' into maintJunio C Hamano Tue, 21 Apr 2015 19:12:24 +0000 (12:12 -0700)

Merge branch 'jk/test-annoyances' into maint

Test fixes.

* jk/test-annoyances:
t5551: make EXPENSIVE test cheaper
t5541: move run_with_cmdline_limit to test-lib.sh
t: pass GIT_TRACE through Apache
t: redirect stderr GIT_TRACE to descriptor 4
t: translate SIGINT to an exit

Merge branch 'pt/enter-repo-comment-fix' into maintJunio C Hamano Tue, 21 Apr 2015 19:12:23 +0000 (12:12 -0700)

Merge branch 'pt/enter-repo-comment-fix' into maint

Documentation update.

* pt/enter-repo-comment-fix:
enter_repo(): fix docs to match code

Merge branch 'jz/gitweb-conf-doc-fix' into maintJunio C Hamano Tue, 21 Apr 2015 19:12:22 +0000 (12:12 -0700)

Merge branch 'jz/gitweb-conf-doc-fix' into maint

Documentation update.

* jz/gitweb-conf-doc-fix:
gitweb.conf.txt: say "build-time", not "built-time"

Merge branch 'jk/cherry-pick-docfix' into maintJunio C Hamano Tue, 21 Apr 2015 19:12:21 +0000 (12:12 -0700)

Merge branch 'jk/cherry-pick-docfix' into maint

* jk/cherry-pick-docfix:
cherry-pick: fix docs describing handling of empty commits

Merge branch 'iu/fix-parse-options-h-comment' into... Junio C Hamano Tue, 21 Apr 2015 19:12:20 +0000 (12:12 -0700)

Merge branch 'iu/fix-parse-options-h-comment' into maint

* iu/fix-parse-options-h-comment:
parse-options.h: OPTION_{BIT,SET_INT} do not store pointer to defval

Merge branch 'jg/cguide-we-cannot-count' into maintJunio C Hamano Tue, 21 Apr 2015 19:12:19 +0000 (12:12 -0700)

Merge branch 'jg/cguide-we-cannot-count' into maint

* jg/cguide-we-cannot-count:
CodingGuidelines: update 'rough' rule count

Merge branch 'jk/pack-corruption-post-mortem' into... Junio C Hamano Tue, 21 Apr 2015 19:12:18 +0000 (12:12 -0700)

Merge branch 'jk/pack-corruption-post-mortem' into maint

Documentation update.

* jk/pack-corruption-post-mortem:
howto: document more tools for recovery corruption

Merge branch 'jn/doc-fast-import-no-16-octopus-limit... Junio C Hamano Tue, 21 Apr 2015 19:12:17 +0000 (12:12 -0700)

Merge branch 'jn/doc-fast-import-no-16-octopus-limit' into maint

Documentation update.

* jn/doc-fast-import-no-16-octopus-limit:
fast-import doc: remove suggested 16-parent limit

RelNotes: "merge --quiet" change has been revertedJunio C Hamano Tue, 21 Apr 2015 18:09:19 +0000 (11:09 -0700)

RelNotes: "merge --quiet" change has been reverted

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Hopefully the last batch for 2.4Junio C Hamano Mon, 20 Apr 2015 22:30:13 +0000 (15:30 -0700)

Hopefully the last batch for 2.4

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'ps/grep-help-all-callback-arg'Junio C Hamano Mon, 20 Apr 2015 22:28:34 +0000 (15:28 -0700)

Merge branch 'ps/grep-help-all-callback-arg'

Code clean-up.

* ps/grep-help-all-callback-arg:
grep: correctly initialize help-all option

Merge branch 'tb/connect-ipv6-parse-fix'Junio C Hamano Mon, 20 Apr 2015 22:28:33 +0000 (15:28 -0700)

Merge branch 'tb/connect-ipv6-parse-fix'

An earlier update to the parser that disects an address broke an
address, followed by a colon, followed by an empty string (instead
of the port number).

* tb/connect-ipv6-parse-fix:
connect.c: ignore extra colon after hostname

Merge branch 'va/fix-git-p4-tests'Junio C Hamano Mon, 20 Apr 2015 22:28:32 +0000 (15:28 -0700)

Merge branch 'va/fix-git-p4-tests'

Test fixes for git-p4.

* va/fix-git-p4-tests:
t9814: guarantee only one source exists in git-p4 copy tests
git-p4: fix copy detection test
t9814: fix broken shell syntax in git-p4 rename test

Merge branch 'jc/push-cert'Junio C Hamano Mon, 20 Apr 2015 22:28:31 +0000 (15:28 -0700)

Merge branch 'jc/push-cert'

The "git push --signed" protocol extension did not limit what the
"nonce" that is a server-chosen string can contain or how long it
can be, which was unnecessarily lax. Limit both the length and the
alphabet to a reasonably small space that can still have enough
entropy.

* jc/push-cert:
push --signed: tighten what the receiving end can ask to sign

Merge branch 'ma/bash-completion-leaking-x'Junio C Hamano Mon, 20 Apr 2015 22:28:29 +0000 (15:28 -0700)

Merge branch 'ma/bash-completion-leaking-x'

The completion script (in contrib/) contaminated global namespace
and clobbered on a shell variable $x.

* ma/bash-completion-leaking-x:
completion: fix global bash variable leak on __gitcompappend

fmt-merge-msg: plug small leak of commit bufferJunio C Hamano Wed, 15 Apr 2015 21:18:37 +0000 (14:18 -0700)

fmt-merge-msg: plug small leak of commit buffer

A broken or badly formatted commit might not record author or
committer lines or we may not find a valid name on them. The
function record_person() returned after calling get_commit_buffer()
without calling unuse_commit_buffer() on the memory it obtained in
such cases, potentially leaking it.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file: only freshen packs once per runJeff King Mon, 20 Apr 2015 19:55:00 +0000 (15:55 -0400)

sha1_file: only freshen packs once per run

Since 33d4221 (write_sha1_file: freshen existing objects,
2014-10-15), we update the mtime of existing objects that we
would have written out (had they not existed). For the
common case in which many objects are packed, we may update
the mtime on a single packfile repeatedly. This can result
in a noticeable performance problem if calling utime() is
expensive (e.g., because your storage is on NFS).

We can fix this by keeping a per-pack flag that lets us
freshen only once per program invocation.

An alternative would be to keep the packed_git.mtime flag up
to date as we freshen, and freshen only once every N
seconds. In practice, it's not worth the complexity. We are
racing against prune expiration times here, which inherently
must be set to accomodate reasonable program running times
(because they really care about the time between an object
being written and it becoming referenced, and the latter is
typically the last step a program takes).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_file: freshen pack objects before looseJeff King Mon, 20 Apr 2015 19:54:03 +0000 (15:54 -0400)

sha1_file: freshen pack objects before loose

When writing out an object file, we first check whether it
already exists and if so optimize out the write. Prior to
33d4221, we did this by calling has_sha1_file(), which will
check for packed objects followed by loose. Since that
commit, we check loose objects first.

For the common case of a repository whose objects are mostly
packed, this means we will make a lot of extra access()
system calls checking for loose objects. We should follow
the same packed-then-loose order that all of our other
lookups use.

Reported-by: Stefan Saasen <ssaasen@atlassian.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

reachable: only mark local objects as recentJeff King Fri, 27 Mar 2015 11:32:41 +0000 (07:32 -0400)

reachable: only mark local objects as recent

When pruning and repacking a repository that has an
alternate object store configured, we may traverse a large
number of objects in the alternate. This serves no purpose,
and may be expensive to do. A longer explanation is below.

Commits d3038d2 and abcb865 taught prune and pack-objects
(respectively) to treat "recent" objects as tips for
reachability, so that we keep whole chunks of history. They
built on the object traversal in 660c889 (sha1_file: add
for_each iterators for loose and packed objects,
2014-10-15), which covers both local and alternate objects.

In both cases, covering alternate objects is unnecessary, as
both commands can only drop objects from the local
repository. In the case of prune, we traverse only the local
object directory. And in the case of repacking, while we may
or may not include local objects in our pack, we will never
reach into the alternate with "repack -d". The "-l" option
is only a question of whether we are migrating objects from
the alternate into our repository, or leaving them
untouched.

It is possible that we may drop an object that is depended
upon by another object in the alternate. For example,
imagine two repositories, A and B, with A pointing to B as
an alternate. Now imagine a commit that is in B which
references a tree that is only in A. Traversing from recent
objects in B might prevent A from dropping that tree. But
this case isn't worth covering. Repo B should take
responsibility for its own objects. It would never have had
the commit in the first place if it did not also have the
tree, and assuming it is using the same "keep recent chunks
of history" scheme, then it would itself keep the tree, as
well.

So checking the alternate objects is not worth doing, and
come with a significant performance impact. In both cases,
we skip any recent objects that have already been marked
SEEN (i.e., that we know are already reachable for prune, or
included in the pack for a repack). So there is a slight
waste of time in opening the alternate packs at all, only to
notice that we have already considered each object. But much
worse, the alternate repository may have a large number of
objects that are not reachable from the local repository at
all, and we end up adding them to the traversal.

We can fix this by considering only local unseen objects.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: use -m when running p4 changesLex Spoon Mon, 20 Apr 2015 15:00:20 +0000 (11:00 -0400)

git-p4: use -m when running p4 changes

Simply running "p4 changes" on a large branch can result in a "too
many rows scanned" error from the Perforce server. It is better to
use a sequence of smaller calls to "p4 changes", using the "-m"
option to limit the size of each call.

Signed-off-by: Lex Spoon <lex@lexspoon.org>
Acked-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log -L: improve error message on malformed argumentMatthieu Moy Mon, 20 Apr 2015 12:09:07 +0000 (14:09 +0200)

log -L: improve error message on malformed argument

The old message did not mention the :regex:file form.

To avoid overly long lines, split the message into two lines (in case
item->string is long, it will be the only part truncated in a narrow
terminal).

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: change -L:<regex> to -L:<funcname>Matthieu Moy Mon, 20 Apr 2015 12:09:06 +0000 (14:09 +0200)

Documentation: change -L:<regex> to -L:<funcname>

The old wording was somehow implying that <start> and <end> were not
regular expressions. Also, the common case is to use a plain function
name here so <funcname> makes sense (the fact that it is a regular
expression is documented in line-range-format.txt).

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge tag 'gitgui-0.20.0' of repo.or.cz/r/git-guiJunio C Hamano Sun, 19 Apr 2015 01:35:48 +0000 (18:35 -0700)

Merge tag 'gitgui-0.20.0' of repo.or.cz/r/git-gui

git-gui 0.20.0

* tag 'gitgui-0.20.0' of http://repo.or.cz/r/git-gui:
git-gui: set version 0.20
git-gui: sv.po: Update Swedish translation (547t0f0u)
git-gui i18n: Updated Bulgarian translation (547t,0f,0u)
git-gui: Makes chooser set 'gitdir' to the resolved path
git-gui: Fixes chooser not accepting gitfiles
git-gui: reinstate support for Tcl 8.4
git-gui: fix problem with gui.maxfilesdisplayed
git-gui: fix verbose loading when git path contains spaces.
git-gui/gitk: Do not depend on Cygwin's "kill" command on Windows
git-gui: add configurable tab size to the diff view
git-gui: Make git-gui lib dir configurable at runime
git-gui i18n: Updated Bulgarian translation (520t,0f,0u)
L10n: vi.po (543t): Init translation for Vietnamese
git-gui: align the new recursive checkbox with the radiobuttons.
git-gui: Add a 'recursive' checkbox in the clone menu.

t1509: update prepare script to be able to run t1509... Nguyễn Thái Ngọc Duy Sat, 18 Apr 2015 11:22:53 +0000 (18:22 +0700)

t1509: update prepare script to be able to run t1509 in chroot again

Tested on Gentoo and OpenSUSE 13.1, both x86-64

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

index-pack: kill union delta_base to save memoryNguyễn Thái Ngọc Duy Sat, 18 Apr 2015 10:47:05 +0000 (17:47 +0700)

index-pack: kill union delta_base to save memory

Once we know the number of objects in the input pack, we allocate an
array of nr_objects of struct delta_entry. On x86-64, this struct is
32 bytes long. The union delta_base, which is part of struct
delta_entry, provides enough space to store either ofs-delta (8 bytes)
or ref-delta (20 bytes).

Because ofs-delta encoding is more efficient space-wise and more
performant at runtime than ref-delta encoding, Git packers try to use
ofs-delta whenever possible, and it is expected that objects encoded
as ref-delta are minority.

In the best clone case where no ref-delta object is present, we waste
(20-8) * nr_objects bytes because of this union. That's about 38MB out
of 100MB for deltas[] with 3.4M objects, or 38%. deltas[] would be
around 62MB without the waste.

This patch attempts to eliminate that. deltas[] array is split into
two: one for ofs-delta and one for ref-delta. Many functions are also
duplicated because of this split. With this patch, ofs_deltas[] array
takes 51MB. ref_deltas[] should remain unallocated in clone case (0
bytes). This array grows as we see ref-delta. We save about half in
this case, or 25% of total bookkeeping.

The saving is more than the calculation above because some padding in
the old delta_entry struct is removed. ofs_delta_entry is 16 bytes,
including the 4 bytes padding. That's 13MB for padding, but packing
the struct could break platforms that do not support unaligned
access. If someone on 32-bit is really low on memory and only deals
with packs smaller than 2G, using 32-bit off_t would eliminate the
padding and save 27MB on top.

A note about ofs_deltas allocation. We could use ref_deltas memory
allocation strategy for ofs_deltas. But that probably just adds more
overhead on top. ofs-deltas are generally the majority (1/2 to 2/3) in
any pack. Incremental realloc may lead to too many memcpy. And if we
preallocate, say 1/2 or 2/3 of nr_objects initially, the growth rate
of ALLOC_GROW() could make this array larger than nr_objects, wasting
more memory.

Brought-up-by: Matthew Sporleder <msporleder@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t0027: support NATIVE_CRLF platformsTorsten Bögershausen Fri, 17 Apr 2015 15:44:05 +0000 (17:44 +0200)

t0027: support NATIVE_CRLF platforms

t0027 expects the native end-of-lines to be a single line feed
character. On Windows, however, we set it to a carriage return
character followed by a line feed character. Thus, we have to
modify t0027 to expect different warnings depending on the
end-of-line markers.

Adjust the check of the warnings and use these macros:

WILC: Warn if LF becomes CRLF
WICL: Warn if CRLF becomes LF
WAMIX: Mixed line endings: either CRLF->LF or LF->CRLF

Improve the information given by check_warning().

Use test_cmp to show which warning is missing (or shouldn't be
there).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t0027: cleanup: rename functions; avoid non-leading... Torsten Bögershausen Fri, 17 Apr 2015 15:43:43 +0000 (17:43 +0200)

t0027: cleanup: rename functions; avoid non-leading TABs

Make more clear what the tests are doing:

commit_check_warn():
Commit files and checks for conversion warnings.
Old name: create_file_in_repo()

checkout_files():
Checkout files from the repo and check if they have
the appropriate line endings in the work space.
Old name: check_files_in_ws()

Replace non-leading TABS with spaces

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-gui: set version 0.20 gitgui-0.20.0Pat Thoyts Sat, 18 Apr 2015 11:15:32 +0000 (12:15 +0100)

git-gui: set version 0.20

Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

git-gui: sv.po: Update Swedish translation (547t0f0u)Peter Krefting Fri, 27 Mar 2015 09:25:32 +0000 (10:25 +0100)

git-gui: sv.po: Update Swedish translation (547t0f0u)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

git-gui i18n: Updated Bulgarian translation (547t,0f,0u)Alexander Shopov Tue, 7 Apr 2015 15:29:46 +0000 (18:29 +0300)

git-gui i18n: Updated Bulgarian translation (547t,0f,0u)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>

limit_list: avoid quadratic behavior from still_interestingJeff King Fri, 17 Apr 2015 22:11:04 +0000 (18:11 -0400)

limit_list: avoid quadratic behavior from still_interesting

When we are limiting a rev-list traversal due to
UNINTERESTING refs, we have to walk down the tips (both
interesting and uninteresting) to find where they intersect.
We keep a queue of commits to examine, pop commits off
the queue one by one, and potentially add their parents. The
size of the queue will naturally fluctuate based on the
"width" of the history graph; i.e., the number of
simultaneous lines of development. But for the most part it
will stay in the same ballpark as the initial number of tips
we fed, shrinking over time (as we hit common ancestors of
the tips). So roughly speaking, if we start with `N` tips,
we'll spend much of the time with a queue around `N` items.

For each UNINTERESTING commit we pop, we call
still_interesting to check whether marking its parents as
UNINTERESTING has made the whole queue uninteresting (in
which case we can quit early). Because the queue is stored
as a linked list, this is `O(N)`, where `N` is the number of
items in the queue. So processing a queue with `N` commits
marked UNINTERESTING (and one or more interesting commits)
will take `O(N^2)`.

If you feed a lot of positive tips, this isn't a problem.
They aren't UNINTERESTING, so they don't incur the
still_interesting check. It also isn't a problem if you
traverse from an interesting tip to some UNINTERESTING
bases. We order the queue by recency, so the interesting
commits stay at the front of the queue as we walk down them.
The linear check can exit early as soon as it sees one
interesting commit left in the queue.

But if you want to know whether an older commit is reachable
from a set of newer tips, we end up processing in the
opposite direction: from the UNINTERESTING ones down to the
interesting one. This may happen when we call:

git rev-list $commits --not --all

in check_everything_connected after a fetch. If we fetched
something much older than most of our refs, and if we have a
large number of refs, the traversal cost is dominated by the
quadratic behavior.

These commands simulate the connectivity check of such a
fetch, when you have `$n` distinct refs in the receiver:

# positive ref is 100,000 commits deep
git rev-list --all | head -100000 | tail -1 >input

# huge number of more recent negative refs
git rev-list --all | head -$n | sed s/^/^/ >>input

time git rev-list --stdin <input

Here are timings for various `n` on the linux.git
repository. The `n=1` case provides a baseline for just
walking the commits, which lets us see the still_interesting
overhead. The times marked with `+` subtract that baseline
to show just the extra time growth due to the large number
of refs. The `x` numbers show the slowdown of the adjusted
time versus the prior trial.

n | before | after
--------------------------------------------------------
1 | 0.991s | 0.848s
10000 | 1.120s (+0.129s) | 0.885s (+0.037s)
20000 | 1.451s (+0.460s, 3.5x) | 0.923s (+0.075s, 2.0x)
40000 | 2.731s (+1.740s, 3.8x) | 0.994s (+0.146s, 1.9x)
80000 | 8.235s (+7.244s, 4.2x) | 1.123s (+0.275s, 1.9x)

Each trial doubles `n`, so you can see the quadratic (`4x`)
behavior before this patch. Afterwards, we have a roughly
linear relationship.

The implementation is fairly straightforward. Whenever we do
the linear search, we cache the interesting commit we find,
and next time check it before doing another linear search.
If that commit is removed from the list or becomes
UNINTERESTING itself, then we fall back to the linear
search. This is very similar to the trick used by fce87ae
(Fix quadratic performance in rewrite_one., 2008-07-12).

I considered and rejected several possible alternatives:

1. Keep a count of UNINTERESTING commits in the queue.
This requires managing the count not only when removing
an item from the queue, but also when marking an item
as UNINTERESTING. That requires touching the other
functions which mark commits, and would require knowing
quickly which commits are in the queue (lookup in the
queue is linear, so we would need an auxiliary
structure or to also maintain an IN_QUEUE flag in each
commit object).

2. Keep a separate list of interesting commits. Drop items
from it when they are dropped from the queue, or if
they become UNINTERESTING. This again suffers from
extra complexity to maintain the list, not to mention
CPU and memory.

3. Use a better data structure for the queue. This is
something that could help the fix in fce87ae, because
we order the queue by recency, and it is about
inserting quickly in recency order. So a normal
priority queue would help there. But here, we cannot
disturb the order of the queue, which makes things
harder. We really do need an auxiliary index to track
the flag we care about, which is basically option (2)
above.

The "cache" trick is simple, and the numbers above show that
it works well in practice. This is because the length of
time it takes to find an interesting commit is proportional
to the length of time it will remain cached (i.e., if we
have to walk a long way to find it, it also means we have to
pop a lot of elements in the queue until we get rid of it
and have to find another interesting commit).

The worst case is still quadratic, though. We could have `N`
uninteresting commits at the front of the queue, followed by
`N` interesting commits, where commit `i` has parent `i+N`.
When we pop commit `i`, we will notice that the parent of
the next commit, `i+1+N` is still interesting and cache it.
But then handling commit `i+1`, we will mark its parent
`i+1+N` uninteresting, and immediately invalidate our cache.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

type_from_string_gently: make sure length matchesJeff King Fri, 17 Apr 2015 14:52:48 +0000 (10:52 -0400)

type_from_string_gently: make sure length matches

When commit fe8e3b7 refactored type_from_string to allow
input that was not NUL-terminated, it switched to using
strncmp instead of strcmp. But this means we check only the
first "len" bytes of the strings, and ignore any remaining
bytes in the object_type_string. We should make sure that it
is also "len" bytes, or else we would accept "comm" as
"commit", and so forth.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config: fix settings in default_user_config templateOssi Herrala Fri, 17 Apr 2015 14:50:10 +0000 (17:50 +0300)

config: fix settings in default_user_config template

The name (not user) and email setting should be in config section
"user" and not in "core" as documented in Documentation/config.txt.

Signed-off-by: Ossi Herrala <oherrala@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-list-options.txt: complete sentence about notes... Michael J Gruber Fri, 17 Apr 2015 14:28:56 +0000 (16:28 +0200)

rev-list-options.txt: complete sentence about notes matching

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

stash -p: demonstrate failure of split with mixed y/nMatthieu Moy Thu, 16 Apr 2015 07:02:31 +0000 (09:02 +0200)

stash -p: demonstrate failure of split with mixed y/n

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t3904-stash-patch: factor PERL prereq at the top of... Matthieu Moy Thu, 16 Apr 2015 07:02:30 +0000 (09:02 +0200)

t3904-stash-patch: factor PERL prereq at the top of the file

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>