gitweb.git
date: use strbufs in date-formatting functionsJeff King Wed, 27 Aug 2014 07:57:08 +0000 (03:57 -0400)

date: use strbufs in date-formatting functions

Many of the date functions write into fixed-size buffers.
This is a minor pain, as we have to take special
precautions, and frequently end up copying the result into a
strbuf or heap-allocated buffer anyway (for which we
sometimes use strcpy!).

Let's instead teach parse_date, datestamp, etc to write to a
strbuf. The obvious downside is that we might need to
perform a heap allocation where we otherwise would not need
to. However, it turns out that the only two new allocations
required are:

1. In test-date.c, where we don't care about efficiency.

2. In determine_author_info, which is not performance
critical (and where the use of a strbuf will help later
refactoring).

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

record_author_date(): use find_commit_header()Jeff King Wed, 27 Aug 2014 07:56:55 +0000 (03:56 -0400)

record_author_date(): use find_commit_header()

This saves us some manual parsing and makes the code more
readable.

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

record_author_date(): fix memory leak on malformed... Jeff King Wed, 27 Aug 2014 07:56:31 +0000 (03:56 -0400)

record_author_date(): fix memory leak on malformed commit

If we hit the end-of-header without finding an "author"
line, we just return from the function. We should jump to
the fail_exit path to clean up the buffer that we may have
allocated.

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

commit: provide a function to find a header in a bufferJeff King Wed, 27 Aug 2014 07:56:01 +0000 (03:56 -0400)

commit: provide a function to find a header in a buffer

Usually when we parse a commit, we read it line by line and
handle each individual line (e.g., parse_commit and
parse_commit_header). Sometimes, however, we only care
about extracting a single header. Code in this situation is
stuck doing an ad-hoc parse of the commit buffer.

Let's provide a reusable function to locate a header within
the commit. The code is modeled after pretty.c's
get_header, which is used to extract the encoding.

Since some callers may not have the "struct commit" to go
along with the buffer, we drop that parameter. The only
thing lost is a warning for truncated commits, but that's
OK. This shouldn't happen in practice, and even if it does,
there's no particular reason that this function needs to
complain about it. It either finds the header it was asked
for, or it doesn't (and in the latter case, the caller will
typically complain).

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

Git 2.1 v2.1.0Junio C Hamano Fri, 15 Aug 2014 22:09:12 +0000 (15:09 -0700)

Git 2.1

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

tests: fix negated test_i18ngrep callsJohannes Sixt Wed, 13 Aug 2014 19:30:11 +0000 (21:30 +0200)

tests: fix negated test_i18ngrep calls

The helper function test_i18ngrep pretends that it found the expected
results when it is running under GETTEXT_POISON. For this reason, it must
not be used negated like so

! test_i18ngrep foo bar

because the test case would fail under GETTEXT_POISON. The function offers
a special syntax to test that a pattern is *not* found:

test_i18ngrep ! foo bar

Convert incorrect uses to this syntax.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'master' of git://ozlabs.org/~paulus/gitkJunio C Hamano Sun, 10 Aug 2014 18:03:03 +0000 (11:03 -0700)

Merge branch 'master' of git://ozlabs.org/~paulus/gitk

* 'master' of git://ozlabs.org/~paulus/gitk:
gitk: Updated Bulgarian translation (302t,0f,0u)
gitk: Add keybinding to switch to parent commit

Git 2.1-rc2 v2.1.0-rc2Junio C Hamano Fri, 8 Aug 2014 20:52:16 +0000 (13:52 -0700)

Git 2.1-rc2

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

gitk: Updated Bulgarian translation (302t,0f,0u)Alexander Shopov Sun, 3 Aug 2014 12:36:43 +0000 (15:36 +0300)

gitk: Updated Bulgarian translation (302t,0f,0u)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>

gitk: Add keybinding to switch to parent commitMax Kirillov Tue, 8 Jul 2014 20:45:35 +0000 (23:45 +0300)

gitk: Add keybinding to switch to parent commit

Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>

Merge branch 'mb/relnotes-2.1'Junio C Hamano Thu, 7 Aug 2014 16:44:17 +0000 (09:44 -0700)

Merge branch 'mb/relnotes-2.1'

* mb/relnotes-2.1:
Release notes: grammatical fixes
RelNotes: no more check_ref_format micro-optimization

Release notes: grammatical fixesMarc Branchaud Tue, 5 Aug 2014 16:50:45 +0000 (12:50 -0400)

Release notes: grammatical fixes

Signed-off-by: Marc Branchaud <marcnarc@xiplink.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

various contrib: Fix links in man pagesStefan Beller Thu, 7 Aug 2014 14:27:12 +0000 (16:27 +0200)

various contrib: Fix links in man pages

Inspired by 2147fa7e (2014-07-31 git-push: fix link in man page),
I grepped through the whole tree searching for 'gitlink:' occurrences.

Signed-off-by: Stefan Beller <stefanbeller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes: no more check_ref_format micro-optimizationJunio C Hamano Tue, 5 Aug 2014 18:44:23 +0000 (11:44 -0700)

RelNotes: no more check_ref_format micro-optimization

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

Git 2.1.0-rc1 v2.1.0-rc1Junio C Hamano Mon, 4 Aug 2014 21:05:06 +0000 (14:05 -0700)

Git 2.1.0-rc1

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

Merge branch 'tf/maint-doc-push'Junio C Hamano Mon, 4 Aug 2014 21:03:45 +0000 (14:03 -0700)

Merge branch 'tf/maint-doc-push'

* tf/maint-doc-push:
git-push: fix link in man page

Merge branch 'ta/doc-config'Junio C Hamano Mon, 4 Aug 2014 21:03:25 +0000 (14:03 -0700)

Merge branch 'ta/doc-config'

* ta/doc-config:
add documentation for writing config files

git-push: fix link in man pageTony Finch Thu, 31 Jul 2014 15:06:28 +0000 (16:06 +0100)

git-push: fix link in man page

Signed-off-by: Tony Finch <dot@dotat.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with 2.0.4Junio C Hamano Wed, 30 Jul 2014 21:25:46 +0000 (14:25 -0700)

Sync with 2.0.4

* maint:
Git 2.0.4
commit --amend: test specifies authorship but forgets to check

Update draft release notes to 2.1Junio C Hamano Wed, 30 Jul 2014 21:25:14 +0000 (14:25 -0700)

Update draft release notes to 2.1

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

Merge branch 'jk/more-push-completion'Junio C Hamano Wed, 30 Jul 2014 21:21:13 +0000 (14:21 -0700)

Merge branch 'jk/more-push-completion'

* jk/more-push-completion:
completion: complete `git push --force-with-lease=`
completion: add some missing options to `git push`
completion: complete "unstuck" `git push --recurse-submodules`

Merge branch 'sk/mingw-tests-workaround'Junio C Hamano Wed, 30 Jul 2014 21:21:12 +0000 (14:21 -0700)

Merge branch 'sk/mingw-tests-workaround'

Make tests pass on msysgit by mostly disabling ones that are
infeasible on that platform.

* sk/mingw-tests-workaround:
t800[12]: work around MSys limitation
t9902: mingw-specific fix for gitfile link files
t4210: skip command-line encoding tests on mingw
MinGW: disable legacy encoding tests
t0110/MinGW: skip tests that pass arbitrary bytes on the command line
MinGW: Skip test redirecting to fd 4

Merge branch 'sk/mingw-uni-fix-more'Junio C Hamano Wed, 30 Jul 2014 21:21:09 +0000 (14:21 -0700)

Merge branch 'sk/mingw-uni-fix-more'

Most of these are battle-tested in msysgit and are needed to
complete what has been merged to 'master' already.

* sk/mingw-uni-fix-more:
Win32: enable color output in Windows cmd.exe
Win32: patch Windows environment on startup
Win32: keep the environment sorted
Win32: use low-level memory allocation during initialization
Win32: reduce environment array reallocations
Win32: don't copy the environment twice when spawning child processes
Win32: factor out environment block creation
Win32: unify environment function names
Win32: unify environment case-sensitivity
Win32: fix environment memory leaks
Win32: Unicode environment (incoming)
Win32: Unicode environment (outgoing)
Revert "Windows: teach getenv to do a case-sensitive search"
tests: do not pass iso8859-1 encoded parameter

Merge branch 'ep/avoid-test-a-o'Junio C Hamano Wed, 30 Jul 2014 21:21:05 +0000 (14:21 -0700)

Merge branch 'ep/avoid-test-a-o'

* ep/avoid-test-a-o:
t9814: fix misconversion from test $a -o $b to test $a || test $b

Git 2.0.4 v2.0.4Junio C Hamano Wed, 30 Jul 2014 21:19:53 +0000 (14:19 -0700)

Git 2.0.4

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

add documentation for writing config filesTanay Abhra Mon, 28 Jul 2014 10:42:26 +0000 (03:42 -0700)

add documentation for writing config files

Replace TODO introduced in commit 9c3c22 with documentation
explaining Git config API functions for writing configuration
files.

Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit --amend: test specifies authorship but forgets... Fabian Ruch Wed, 30 Jul 2014 09:45:11 +0000 (11:45 +0200)

commit --amend: test specifies authorship but forgets to check

The test case "--amend option copies authorship" specifies that the
git-commit option `--amend` uses the authorship of the replaced
commit for the new commit. Add the omitted check that this property
actually holds.

Signed-off-by: Fabian Ruch <bafain@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Mon, 28 Jul 2014 18:31:46 +0000 (11:31 -0700)

Merge branch 'maint'

* maint:
t4013: test diff-tree's --stdin commit formatting
diff-tree: avoid lookup_unknown_object
object_as_type: set commit index
alloc: factor out commit index
add object_as_type helper for casting objects
parse_object_buffer: do not set object type
move setting of object->type to alloc_* functions
alloc: write out allocator definitions
alloc.c: remove the alloc_raw_commit_node() function

t4013: test diff-tree's --stdin commit formattingJeff King Mon, 28 Jul 2014 18:01:57 +0000 (14:01 -0400)

t4013: test diff-tree's --stdin commit formatting

Once upon a time, git-log was just "rev-list | diff-tree",
and we did not bother to test it separately. These days git-log
is implemented internally, but we want to make sure that the
rev-list to diff-tree pipeline continues to function. Let's
add a basic sanity test.

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

Merge branch 'jk/misc-fixes-maint'Junio C Hamano Mon, 28 Jul 2014 18:30:41 +0000 (11:30 -0700)

Merge branch 'jk/misc-fixes-maint'

* jk/misc-fixes-maint:
apply: avoid possible bogus pointer
fix memory leak parsing core.commentchar
transport: fix leaks in refs_from_alternate_cb
free ref string returned by dwim_ref
receive-pack: don't copy "dir" parameter

t1402: check for refs ending with a dotJeff King Mon, 28 Jul 2014 15:48:11 +0000 (11:48 -0400)

t1402: check for refs ending with a dot

This has been illegal since cbdffe4 (check_ref_format(): tighten
refname rules, 2009-03-21), but we never tested it.

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

Revert "Merge branch 'dt/refs-check-refname-component... Junio C Hamano Mon, 28 Jul 2014 17:41:53 +0000 (10:41 -0700)

Revert "Merge branch 'dt/refs-check-refname-component-sse'"

This reverts commit 6f92e5ff3cdc813de8ef5327fd4bad492fb7d6c9, reversing
changes made to a02ad882a17b9d45f63ea448391ac5e9f7948222.

Revert "Merge branch 'dt/refs-check-refname-component... Junio C Hamano Mon, 28 Jul 2014 17:41:16 +0000 (10:41 -0700)

Revert "Merge branch 'dt/refs-check-refname-component-sse-fix'"

This reverts commit 779c99fd68dcdaff7d996a1985914154a36a272c, reversing
changes made to df4d7d56461c19361a6f32b633e850c7ba6e55e6.

Merge branch 'jk/alloc-commit-id-maint' into maintJunio C Hamano Mon, 28 Jul 2014 17:35:35 +0000 (10:35 -0700)

Merge branch 'jk/alloc-commit-id-maint' into maint

* jk/alloc-commit-id-maint:
diff-tree: avoid lookup_unknown_object
object_as_type: set commit index
alloc: factor out commit index
add object_as_type helper for casting objects
parse_object_buffer: do not set object type
move setting of object->type to alloc_* functions
alloc: write out allocator definitions
alloc.c: remove the alloc_raw_commit_node() function

diff-tree: avoid lookup_unknown_objectJeff King Sun, 13 Jul 2014 06:42:17 +0000 (02:42 -0400)

diff-tree: avoid lookup_unknown_object

We generally want to avoid lookup_unknown_object, because it
results in allocating more memory for the object than may be
strictly necessary.

In this case, it is used to check whether we have an
already-parsed object before calling parse_object, to save
us from reading the object from disk. Using lookup_object
would be fine for that purpose, but we can take it a step
further. Since this code was written, parse_object already
learned the "check lookup_object" optimization, so we can
simply call parse_object directly.

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

object_as_type: set commit indexJeff King Sun, 13 Jul 2014 06:42:12 +0000 (02:42 -0400)

object_as_type: set commit index

The point of the "index" field of struct commit is that
every allocated commit would have one. It is supposed to be
an invariant that whenever object->type is set to
OBJ_COMMIT, we have a unique index.

Commit 969eba6 (commit: push commit_index update into
alloc_commit_node, 2014-06-10) covered this case for
newly-allocated commits. However, we may also allocate an
"unknown" object via lookup_unknown_object, and only later
convert it to a commit. We must make sure that we set the
commit index when we switch the type field.

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

alloc: factor out commit indexJeff King Sun, 13 Jul 2014 06:42:08 +0000 (02:42 -0400)

alloc: factor out commit index

We keep a static counter to set the commit index on newly
allocated objects. However, since we also need to set the
index on any_objects which are converted to commits, let's
make the counter available as a public function.

While we're moving it, let's make sure the counter is
allocated as an unsigned integer to match the index field in
"struct commit".

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

add object_as_type helper for casting objectsJeff King Sun, 13 Jul 2014 06:42:03 +0000 (02:42 -0400)

add object_as_type helper for casting objects

When we call lookup_commit, lookup_tree, etc, the logic goes
something like:

1. Look for an existing object struct. If we don't have
one, allocate and return a new one.

2. Double check that any object we have is the expected
type (and complain and return NULL otherwise).

3. Convert an object with type OBJ_NONE (from a prior
call to lookup_unknown_object) to the expected type.

We can encapsulate steps 2 and 3 in a helper function which
checks whether we have the expected object type, converts
OBJ_NONE as appropriate, and returns the object.

Not only does this shorten the code, but it also provides
one central location for converting OBJ_NONE objects into
objects of other types. Future patches will use that to
enforce type-specific invariants.

Since this is a refactoring, we would want it to behave
exactly as the current code. It takes a little reasoning to
see that this is the case:

- for lookup_{commit,tree,etc} functions, we are just
pulling steps 2 and 3 into a function that does the same
thing.

- for the call in peel_object, we currently only do step 3
(but we want to consolidate it with the others, as
mentioned above). However, step 2 is a noop here, as the
surrounding conditional makes sure we have OBJ_NONE
(which we want to keep to avoid an extraneous call to
sha1_object_info).

- for the call in lookup_commit_reference_gently, we are
currently doing step 2 but not step 3. However, step 3
is a noop here. The object we got will have just come
from deref_tag, which must have figured out the type for
each object in order to know when to stop peeling.
Therefore the type will never be OBJ_NONE.

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

parse_object_buffer: do not set object typeJeff King Sun, 13 Jul 2014 06:42:00 +0000 (02:42 -0400)

parse_object_buffer: do not set object type

The only way that "obj" can be non-NULL is if it came from
one of the lookup_* functions. These functions always ensure
that the object has the expected type (and return NULL
otherwise), so there is no need for us to set the type.

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

move setting of object->type to alloc_* functionsJeff King Sun, 13 Jul 2014 06:41:55 +0000 (02:41 -0400)

move setting of object->type to alloc_* functions

The "struct object" type implements basic object
polymorphism. Individual instances are allocated as
concrete types (or as a union type that can store any
object), and a "struct object *" can be cast into its real
type after examining its "type" enum. This means it is
dangerous to have a type field that does not match the
allocation (e.g., setting the type field of a "struct blob"
to "OBJ_COMMIT" would mean that a reader might read past the
allocated memory).

In most of the current code this is not a problem; the first
thing we do after allocating an object is usually to set its
type field by passing it to create_object. However, the
virtual commits we create in merge-recursive.c do not ever
get their type set. This does not seem to have caused
problems in practice, though (presumably because we always
pass around a "struct commit" pointer and never even look at
the type).

We can fix this oversight and also make it harder for future
code to get it wrong by setting the type directly in the
object allocation functions.

This will also make it easier to fix problems with commit
index allocation, as we know that any object allocated by
alloc_commit_node will meet the invariant that an object
with an OBJ_COMMIT type field will have a unique index
number.

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

alloc: write out allocator definitionsJeff King Sun, 13 Jul 2014 06:41:51 +0000 (02:41 -0400)

alloc: write out allocator definitions

Because the allocator functions for tree, blobs, etc are all
very similar, we originally used a macro to avoid repeating
ourselves. Since the prior commit, though, the heavy lifting
is done by an inline helper function. The macro does still
save us a few lines, but at some readability cost. It
obfuscates the function definitions (and makes them hard to
find via grep).

Much worse, though, is the fact that it isn't used
consistently for all allocators. Somebody coming later may
be tempted to modify DEFINE_ALLOCATOR, but they would miss
alloc_commit_node, which is treated specially.

Let's just drop the macro and write everything out
explicitly.

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

alloc.c: remove the alloc_raw_commit_node() functionRamsay Jones Sun, 13 Jul 2014 06:41:41 +0000 (02:41 -0400)

alloc.c: remove the alloc_raw_commit_node() function

In order to encapsulate the setting of the unique commit index, commit
969eba63 ("commit: push commit_index update into alloc_commit_node",
10-06-2014) introduced a (logically private) intermediary allocator
function. However, this function (alloc_raw_commit_node()) was declared
as a public function, which undermines its entire purpose.

Introduce an inline function, alloc_node(), which implements the main
logic of the allocator used by DEFINE_ALLOCATOR, and redefine the macro
in terms of the new function. In addition, use the new function in the
implementation of the alloc_commit_node() allocator, rather than the
intermediary allocator, which can now be removed.

Noticed by sparse ("symbol 'alloc_raw_commit_node' was not declared.
Should it be static?").

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.1.0-rc0 v2.1.0-rc0Junio C Hamano Sun, 27 Jul 2014 22:22:22 +0000 (15:22 -0700)

Git 2.1.0-rc0

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

Merge branch 'jk/rebase-am-fork-point'Junio C Hamano Sun, 27 Jul 2014 22:14:21 +0000 (15:14 -0700)

Merge branch 'jk/rebase-am-fork-point'

"git rebase --fork-point" did not filter out patch-identical
commits correctly.

* jk/rebase-am-fork-point:
rebase: omit patch-identical commits with --fork-point
rebase--am: use --cherry-pick instead of --ignore-if-in-upstream

Merge branch 'cc/replace-graft'Junio C Hamano Sun, 27 Jul 2014 22:14:18 +0000 (15:14 -0700)

Merge branch 'cc/replace-graft'

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

* cc/replace-graft:
replace: add test for --graft with a mergetag
replace: check mergetags when using --graft
replace: add test for --graft with signed commit
replace: remove signature when using --graft
contrib: add convert-grafts-to-replace-refs.sh
Documentation: replace: add --graft option
replace: add test for --graft
replace: add --graft option
replace: cleanup redirection style in tests

Merge branch 'jk/stable-prio-queue'Junio C Hamano Sun, 27 Jul 2014 22:14:14 +0000 (15:14 -0700)

Merge branch 'jk/stable-prio-queue'

* jk/stable-prio-queue:
t5539: update a flaky test
paint_down_to_common: use prio_queue
prio-queue: make output stable with respect to insertion
prio-queue: factor out compare and swap operations

t9814: fix misconversion from test $a -o $b to test... Junio C Hamano Fri, 25 Jul 2014 19:44:18 +0000 (12:44 -0700)

t9814: fix misconversion from test $a -o $b to test $a || test $b

Spotted-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: avoid possible bogus pointerJeff King Thu, 24 Jul 2014 04:43:23 +0000 (00:43 -0400)

apply: avoid possible bogus pointer

When parsing "index" lines from a git-diff, we look for a
space followed by the mode. If we don't have a space, then
we set our pointer to the end-of-line. However, we don't
double-check that our end-of-line pointer is valid (e.g., if
we got a truncated diff input), which could lead to some
wrap-around pointer arithmetic.

In most cases this would probably get caught by our "40 <
len" check later in the function, but to be on the safe
side, let's just use strchrnul to treat end-of-string the
same as end-of-line.

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

fix memory leak parsing core.commentcharJeff King Thu, 24 Jul 2014 04:42:39 +0000 (00:42 -0400)

fix memory leak parsing core.commentchar

When we see the core.commentchar config option, we extract
the string with git_config_string, which does two things:

1. It complains via config_error_nonbool if there is no
string value.

2. It makes a copy of the string.

Since we immediately parse the string into its
single-character value, we only care about (1). And in fact
(2) is a detriment, as it means we leak the copy. Instead,
let's just check the pointer value ourselves, and parse
directly from the const string we already have.

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

transport: fix leaks in refs_from_alternate_cbJeff King Thu, 24 Jul 2014 04:41:30 +0000 (00:41 -0400)

transport: fix leaks in refs_from_alternate_cb

The function starts by creating a copy of the static buffer
returned by real_path, but forgets to free it in the error
code paths. We can solve this by jumping to the cleanup code
that is already there.

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

free ref string returned by dwim_refJeff King Thu, 24 Jul 2014 04:41:11 +0000 (00:41 -0400)

free ref string returned by dwim_ref

A call to "dwim_ref(name, len, flags, &ref)" will allocate a
new string in "ref" to return the exact ref we found. We do
not consistently free it in all code paths, leading to small
leaks. The worst is in get_sha1_basic, which may be called
many times (e.g., by "cat-file --batch"), though it is
relatively unlikely, as it only triggers on a bogus reflog
specification.

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

receive-pack: don't copy "dir" parameterJeff King Thu, 24 Jul 2014 04:40:43 +0000 (00:40 -0400)

receive-pack: don't copy "dir" parameter

We used to do this so could pass a mutable string to
enter_repo. But since 1c64b48 (enter_repo: do not modify
input, 2011-10-04), this is not necessary.

The resulting code is simpler, and it fixes a minor leak.

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

Sync with v2.0.3Junio C Hamano Wed, 23 Jul 2014 18:36:40 +0000 (11:36 -0700)

Sync with v2.0.3

* maint:
Git 2.0.3
.mailmap: combine Stefan Beller's emails
git.1: switch homepage for stats

Merge branch 'rs/fix-unlink-unix-socket'Junio C Hamano Wed, 23 Jul 2014 18:35:59 +0000 (11:35 -0700)

Merge branch 'rs/fix-unlink-unix-socket'

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.

* rs/fix-unlink-unix-socket:
unix-socket: remove stale socket before calling chdir()

Merge branch 'ta/string-list-init'Junio C Hamano Wed, 23 Jul 2014 18:35:54 +0000 (11:35 -0700)

Merge branch 'ta/string-list-init'

* ta/string-list-init:
replace memset with string-list initializers
string-list: add string_list initializer helper function

Merge branch 'mb/local-clone-after-applying-insteadof'Junio C Hamano Wed, 23 Jul 2014 18:35:49 +0000 (11:35 -0700)

Merge branch 'mb/local-clone-after-applying-insteadof'

Apply 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.

* mb/local-clone-after-applying-insteadof:
use local cloning if insteadOf makes a local URL

Merge branch 'jk/tag-sort'Junio C Hamano Wed, 23 Jul 2014 18:35:45 +0000 (11:35 -0700)

Merge branch 'jk/tag-sort'

* jk/tag-sort:
tag: support configuring --sort via .gitconfig
tag: fix --sort tests to use cat<<-\EOF format

Git 2.0.3 v2.0.3Junio C Hamano Wed, 23 Jul 2014 18:33:16 +0000 (11:33 -0700)

Git 2.0.3

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

.mailmap: combine Stefan Beller's emailsStefan Beller Wed, 23 Jul 2014 12:32:10 +0000 (14:32 +0200)

.mailmap: combine Stefan Beller's emails

Google mail has had the extension @googlemail.com for a long time
in Germany as @gmail.de was already taken by a competitor.
Nowadays the original gmail company isn't there anymore(?), hence
Googlemail also introduced @gmail.com in Germany, which I switched to.

This changed mail address of mine first appeared in 398dd4bd039680b
(2014-07-10, .mailmap: map different names with the same email
address together) ironically.

Signed-off-by: Stefan Beller <stefanbeller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git.1: switch homepage for statsStefan Beller Wed, 23 Jul 2014 12:32:09 +0000 (14:32 +0200)

git.1: switch homepage for stats

According to http://meta.ohloh.net/2014/07/black-duck-open-hub/
the site name of ohloh changed to openhub.

Change the man page accordingly.

Signed-off-by: Stefan Beller <stefanbeller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: complete `git push --force-with-lease=`John Keeping Tue, 22 Jul 2014 18:24:58 +0000 (19:24 +0100)

completion: complete `git push --force-with-lease=`

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: add some missing options to `git push`John Keeping Tue, 22 Jul 2014 18:24:57 +0000 (19:24 +0100)

completion: add some missing options to `git push`

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: complete "unstuck" `git push --recurse... John Keeping Tue, 22 Jul 2014 18:24:56 +0000 (19:24 +0100)

completion: complete "unstuck" `git push --recurse-submodules`

Since the argument to `--recurse-submodules` is mandatory, it does not
need to be stuck to the option with `=`.

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with maintJunio C Hamano Tue, 22 Jul 2014 18:00:23 +0000 (11:00 -0700)

Sync with maint

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

Merge branch 'rs/code-cleaning'Junio C Hamano Tue, 22 Jul 2014 17:59:36 +0000 (10:59 -0700)

Merge branch 'rs/code-cleaning'

* rs/code-cleaning:
remote-testsvn: use internal argv_array of struct child_process in cmd_import()
bundle: use internal argv_array of struct child_process in create_bundle()
fast-import: use hashcmp() for SHA1 hash comparison
transport: simplify fetch_objs_via_rsync() using argv_array
run-command: use internal argv_array of struct child_process in run_hook_ve()
use commit_list_count() to count the members of commit_lists
strbuf: use strbuf_addstr() for adding C strings

Merge branch 'nd/path-max-must-go'Junio C Hamano Tue, 22 Jul 2014 17:59:31 +0000 (10:59 -0700)

Merge branch 'nd/path-max-must-go'

* nd/path-max-must-go:
prep_exclude: remove the artificial PATH_MAX limit
dir.h: move struct exclude declaration to top level
dir.c: coding style fix

Merge branch 'jk/alloc-commit-id'Junio C Hamano Tue, 22 Jul 2014 17:59:24 +0000 (10:59 -0700)

Merge branch 'jk/alloc-commit-id'

Make sure all in-core commit objects are assigned a unique number
so that they can be annotated using the commit-slab API.

* jk/alloc-commit-id:
diff-tree: avoid lookup_unknown_object
object_as_type: set commit index
alloc: factor out commit index
add object_as_type helper for casting objects
parse_object_buffer: do not set object type
move setting of object->type to alloc_* functions
alloc: write out allocator definitions
alloc.c: remove the alloc_raw_commit_node() function

Merge branch 'kb/perf-trace'Junio C Hamano Tue, 22 Jul 2014 17:59:18 +0000 (10:59 -0700)

Merge branch 'kb/perf-trace'

* kb/perf-trace:
api-trace.txt: add trace API documentation
progress: simplify performance measurement by using getnanotime()
wt-status: simplify performance measurement by using getnanotime()
git: add performance tracing for git's main() function to debug scripts
trace: add trace_performance facility to debug performance issues
trace: add high resolution timer function to debug performance issues
trace: add 'file:line' to all trace output
trace: move code around, in preparation to file:line output
trace: add current timestamp to all trace output
trace: disable additional trace output for unit tests
trace: add infrastructure to augment trace output with additional info
sha1_file: change GIT_TRACE_PACK_ACCESS logging to use trace API
Documentation/git.txt: improve documentation of 'GIT_TRACE*' variables
trace: improve trace performance
trace: remove redundant printf format attribute
trace: consistently name the format parameter
trace: move trace declarations from cache.h to new trace.h

Merge branch 'ah/fix-http-push' into maintJunio C Hamano Tue, 22 Jul 2014 17:29:07 +0000 (10:29 -0700)

Merge branch 'ah/fix-http-push' into maint

* ah/fix-http-push:
http-push.c: make CURLOPT_IOCTLDATA a usable pointer

Merge branch 'po/error-message-style' into maintJunio C Hamano Tue, 22 Jul 2014 17:28:59 +0000 (10:28 -0700)

Merge branch 'po/error-message-style' into maint

* po/error-message-style:
doc: give some guidelines for error messages

Merge branch 'zk/log-graph-showsig' into maintJunio C Hamano Tue, 22 Jul 2014 17:28:51 +0000 (10:28 -0700)

Merge branch 'zk/log-graph-showsig' into maint

* zk/log-graph-showsig:
log: fix indentation for --graph --show-signature

Merge branch 'mg/fix-log-mergetag-color' into maintJunio C Hamano Tue, 22 Jul 2014 17:28:43 +0000 (10:28 -0700)

Merge branch 'mg/fix-log-mergetag-color' into maint

* mg/fix-log-mergetag-color:
log: correctly identify mergetag signature verification status

Merge branch 'cb/filter-branch-prune-empty-degenerate... Junio C Hamano Tue, 22 Jul 2014 17:28:30 +0000 (10:28 -0700)

Merge branch 'cb/filter-branch-prune-empty-degenerate-merges' into maint

* cb/filter-branch-prune-empty-degenerate-merges:
filter-branch: eliminate duplicate mapped parents

Merge branch 'ye/doc-http-proto' into maintJunio C Hamano Tue, 22 Jul 2014 17:28:02 +0000 (10:28 -0700)

Merge branch 'ye/doc-http-proto' into maint

* ye/doc-http-proto:
http-protocol.txt: Basic Auth is defined in RFC 2617, not RFC 2616

Merge branch 'jm/api-strbuf-doc' into maintJunio C Hamano Tue, 22 Jul 2014 17:26:52 +0000 (10:26 -0700)

Merge branch 'jm/api-strbuf-doc' into maint

* jm/api-strbuf-doc:
api-strbuf.txt minor typos

Merge branch 'jm/dedup-test-config' into maintJunio C Hamano Tue, 22 Jul 2014 17:26:45 +0000 (10:26 -0700)

Merge branch 'jm/dedup-test-config' into maint

* jm/dedup-test-config:
t/t7810-grep.sh: remove duplicate test_config()

Merge branch 'sk/test-cmp-bin' into maintJunio C Hamano Tue, 22 Jul 2014 17:26:34 +0000 (10:26 -0700)

Merge branch 'sk/test-cmp-bin' into maint

* sk/test-cmp-bin:
t5000, t5003: do not use test_cmp to compare binary files

Merge branch 'jm/doc-wording-tweaks' into maintJunio C Hamano Tue, 22 Jul 2014 17:26:17 +0000 (10:26 -0700)

Merge branch 'jm/doc-wording-tweaks' into maint

* jm/doc-wording-tweaks:
Documentation: wording fixes in the user manual and glossary

Merge branch 'jm/instaweb-apache-24' into maintJunio C Hamano Tue, 22 Jul 2014 17:25:24 +0000 (10:25 -0700)

Merge branch 'jm/instaweb-apache-24' into maint

* jm/instaweb-apache-24:
git-instaweb: add support for Apache 2.4

Merge branch 'bg/xcalloc-nmemb-then-size' into maintJunio C Hamano Tue, 22 Jul 2014 17:25:17 +0000 (10:25 -0700)

Merge branch 'bg/xcalloc-nmemb-then-size' into maint

* bg/xcalloc-nmemb-then-size:
transport-helper.c: rearrange xcalloc arguments
remote.c: rearrange xcalloc arguments
reflog-walk.c: rearrange xcalloc arguments
pack-revindex.c: rearrange xcalloc arguments
notes.c: rearrange xcalloc arguments
imap-send.c: rearrange xcalloc arguments
http-push.c: rearrange xcalloc arguments
diff.c: rearrange xcalloc arguments
config.c: rearrange xcalloc arguments
commit.c: rearrange xcalloc arguments
builtin/remote.c: rearrange xcalloc arguments
builtin/ls-remote.c: rearrange xcalloc arguments

Merge branch 'cb/byte-order' into maintJunio C Hamano Tue, 22 Jul 2014 17:25:02 +0000 (10:25 -0700)

Merge branch 'cb/byte-order' into maint

* cb/byte-order:
compat/bswap.h: fix endianness detection
compat/bswap.h: restore preference __BIG_ENDIAN over BIG_ENDIAN
compat/bswap.h: detect endianness on more platforms that don't use BYTE_ORDER

Merge branch 'lt/request-pull' into maintJunio C Hamano Tue, 22 Jul 2014 17:23:41 +0000 (10:23 -0700)

Merge branch 'lt/request-pull' into maint

* lt/request-pull:
fix brown paper bag breakage in t5150-request-pull.sh

Merge branch 'ep/shell-assign-and-export-vars' into... Junio C Hamano Tue, 22 Jul 2014 17:22:57 +0000 (10:22 -0700)

Merge branch 'ep/shell-assign-and-export-vars' into maint

* ep/shell-assign-and-export-vars:
scripts: more "export VAR=VALUE" fixes
scripts: "export VAR=VALUE" construct is not portable

Merge branch 'maint-1.9' into maintJunio C Hamano Tue, 22 Jul 2014 17:17:34 +0000 (10:17 -0700)

Merge branch 'maint-1.9' into maint

* maint-1.9:
Documentation: fix missing text for rev-parse --verify

Merge branch 'maint-1.8.5' into maint-1.9Junio C Hamano Tue, 22 Jul 2014 17:16:50 +0000 (10:16 -0700)

Merge branch 'maint-1.8.5' into maint-1.9

* maint-1.8.5:
Documentation: fix missing text for rev-parse --verify

Documentation: fix missing text for rev-parse --verifybrian m. carlson Mon, 21 Jul 2014 23:00:35 +0000 (23:00 +0000)

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

The caret (^) is used as a markup symbol in AsciiDoc. Due to the
inability of AsciiDoc to parse a line containing an unmatched caret, it
omitted the line from the output, resulting in the man page missing the
end of a sentence. Escape this caret so that the man page ends up with
the complete text.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'maint'Junio C Hamano Mon, 21 Jul 2014 19:35:39 +0000 (12:35 -0700)

Merge branch 'maint'

* maint:
use xmemdupz() to allocate copies of strings given by start and length
use xcalloc() to allocate zero-initialized memory

Ninth batch for 2.1Junio C Hamano Mon, 21 Jul 2014 19:13:03 +0000 (12:13 -0700)

Ninth batch for 2.1

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

replace: add test for --graft with a mergetagChristian Couder Sat, 19 Jul 2014 15:01:15 +0000 (17:01 +0200)

replace: add test for --graft with a mergetag

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

replace: check mergetags when using --graftChristian Couder Sat, 19 Jul 2014 15:01:14 +0000 (17:01 +0200)

replace: check mergetags when using --graft

When using --graft, with a mergetag in the original
commit, we should check that the commit pointed to by
the mergetag is still a parent of then new commit we
create, otherwise the mergetag could be misleading.

If the commit pointed to by the mergetag is no more
a parent of the new commit, we could remove the
mergetag, but in this case there is a good chance
that the title or other elements of the commit might
also be misleading. So let's just error out and
suggest to use --edit instead on the commit.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

replace: add test for --graft with signed commitChristian Couder Sat, 19 Jul 2014 15:01:13 +0000 (17:01 +0200)

replace: add test for --graft with signed commit

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

replace: remove signature when using --graftChristian Couder Sat, 19 Jul 2014 15:01:12 +0000 (17:01 +0200)

replace: remove signature when using --graft

It could be misleading to keep a signature in a
replacement commit, so let's remove it.

Note that there should probably be a way to sign
the replacement commit created when using --graft,
but this can be dealt with in another commit or
patch series.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

contrib: add convert-grafts-to-replace-refs.shChristian Couder Sat, 19 Jul 2014 15:01:11 +0000 (17:01 +0200)

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

This patch adds into contrib/ an example script to convert
grafts from an existing grafts file into replace refs using
the new --graft option of "git replace".

While at it let's mention this new script in the
"git replace" documentation for the --graft option.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: replace: add --graft optionChristian Couder Sat, 19 Jul 2014 15:01:10 +0000 (17:01 +0200)

Documentation: replace: add --graft option

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

replace: add test for --graftChristian Couder Sat, 19 Jul 2014 15:01:09 +0000 (17:01 +0200)

replace: add test for --graft

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

replace: add --graft optionChristian Couder Sat, 19 Jul 2014 15:01:08 +0000 (17:01 +0200)

replace: add --graft option

The usage string for this option is:

git replace [-f] --graft <commit> [<parent>...]

First we create a new commit that is the same as <commit>
except that its parents are [<parents>...]

Then we create a replace ref that replace <commit> with
the commit we just created.

With this new option, it should be straightforward to
convert grafts to replace refs.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'rs/unify-is-branch'Junio C Hamano Mon, 21 Jul 2014 18:18:57 +0000 (11:18 -0700)

Merge branch 'rs/unify-is-branch'

* rs/unify-is-branch:
refs.c: add a public is_branch function

Merge branch 'kb/avoid-fchmod-for-now'Junio C Hamano Mon, 21 Jul 2014 18:18:54 +0000 (11:18 -0700)

Merge branch 'kb/avoid-fchmod-for-now'

Replaces the only two uses of fchmod() with chmod() because the
former does not work on Windows port and because luckily we can.

* kb/avoid-fchmod-for-now:
config: use chmod() instead of fchmod()

Merge branch 'sk/mingw-uni-fix'Junio C Hamano Mon, 21 Jul 2014 18:18:50 +0000 (11:18 -0700)

Merge branch 'sk/mingw-uni-fix'

* sk/mingw-uni-fix:
Win32: Unicode file name support (dirent)
Win32: Unicode file name support (except dirent)

Merge branch 'ek/alt-odb-entry-fix'Junio C Hamano Mon, 21 Jul 2014 18:18:46 +0000 (11:18 -0700)

Merge branch 'ek/alt-odb-entry-fix'

* ek/alt-odb-entry-fix:
sha1_file: do not add own object directory as alternate