OSDN Git Service

git-core/git.git
9 years agopretty: make empty userformats truly empty
Jeff King [Tue, 29 Jul 2014 17:56:48 +0000 (13:56 -0400)]
pretty: make empty userformats truly empty

If the user provides an empty format with "--format=", we
end up putting in extra whitespace that the user cannot
prevent. This comes from two places:

  1. If the format is missing a terminating newline, we add
     one automatically. This makes sense for --format=%h, but
     not for a truly empty format.

  2. We add an extra newline between the pretty-printed
     format and a diff or diffstat. If the format is empty,
     there's no point in doing so if there's nothing to
     separate.

With this patch, one can get a diff with no other cruft out
of "diff-tree --format= $commit".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agopretty: treat "--format=" as an empty userformat
Jeff King [Tue, 29 Jul 2014 17:54:46 +0000 (13:54 -0400)]
pretty: treat "--format=" as an empty userformat

Until now, we treated "--pretty=" or "--format=" as "give me
the default format". This was not planned nor documented,
but only what happened to work due to our parsing of
"--pretty" (which should give the default format).

Let's instead let these be an actual empty userformat.
Otherwise one must write out the annoyingly long
"--pretty=tformat:" to get the same behavior.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agorevision: drop useless string offset when parsing "--pretty"
Jeff King [Tue, 29 Jul 2014 17:53:40 +0000 (13:53 -0400)]
revision: drop useless string offset when parsing "--pretty"

Once upon a time, we parsed pretty options by looking for
"--pretty" at the start of the string, and then feeding the
rest (including an "=") to get_commit_format. Later, commit
48ded91 (log --pretty: do not accept bogus "--prettyshort",
2008-05-25) split this into a separate check for "--pretty"
versus "--pretty=".

However, when parsing "--pretty", we still passed "arg+8" to
get_commit_format. This is useless, since it will always
point to the NUL terminator at the end of the string. We can
simply pass NULL instead; both parameters are treated the
same by get_commit_format.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoMerge 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

9 years agot4013: test diff-tree's --stdin commit formatting
Jeff 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>
9 years agoMerge 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

9 years agot1402: check for refs ending with a dot
Jeff 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>
9 years agoRevert "Merge branch 'dt/refs-check-refname-component-sse'"
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.

9 years agoRevert "Merge branch 'dt/refs-check-refname-component-sse-fix'"
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.

9 years agoMerge branch 'jk/alloc-commit-id-maint' into maint
Junio 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

9 years agodiff-tree: avoid lookup_unknown_object
Jeff 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>
9 years agoobject_as_type: set commit index
Jeff 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>
9 years agoalloc: factor out commit index
Jeff 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>
9 years agoadd object_as_type helper for casting objects
Jeff 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>
9 years agoparse_object_buffer: do not set object type
Jeff 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>
9 years agomove setting of object->type to alloc_* functions
Jeff 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>
9 years agoalloc: write out allocator definitions
Jeff 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>
9 years agoalloc.c: remove the alloc_raw_commit_node() function
Ramsay 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>
9 years agoGit 2.1.0-rc0 v2.1.0-rc0
Junio 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>
9 years agoMerge 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

9 years agoMerge 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

9 years agoMerge 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

9 years agoapply: avoid possible bogus pointer
Jeff 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>
9 years agofix memory leak parsing core.commentchar
Jeff 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>
9 years agotransport: fix leaks in refs_from_alternate_cb
Jeff 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>
9 years agofree ref string returned by dwim_ref
Jeff 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>
9 years agoreceive-pack: don't copy "dir" parameter
Jeff 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>
9 years agoSync with v2.0.3
Junio 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

9 years agoMerge 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()

9 years agoMerge 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

9 years agoMerge 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

9 years agoMerge 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

9 years agoGit 2.0.3 v2.0.3
Junio 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>
9 years ago.mailmap: combine Stefan Beller's emails
Stefan 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>
9 years agogit.1: switch homepage for stats
Stefan 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>
9 years agoSync with maint
Junio 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

9 years agoMerge 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

9 years agoMerge 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

9 years agoMerge 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

9 years agoMerge 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

9 years agoMerge branch 'ah/fix-http-push' into maint
Junio 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

9 years agoMerge branch 'po/error-message-style' into maint
Junio 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

9 years agoMerge branch 'zk/log-graph-showsig' into maint
Junio 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

9 years agoMerge branch 'mg/fix-log-mergetag-color' into maint
Junio 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

9 years agoMerge branch 'cb/filter-branch-prune-empty-degenerate-merges' into maint
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

9 years agoMerge branch 'ye/doc-http-proto' into maint
Junio 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

9 years agoMerge branch 'jm/api-strbuf-doc' into maint
Junio 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

9 years agoMerge branch 'jm/dedup-test-config' into maint
Junio 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()

9 years agoMerge branch 'sk/test-cmp-bin' into maint
Junio 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

9 years agoMerge branch 'jm/doc-wording-tweaks' into maint
Junio 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

9 years agoMerge branch 'jm/instaweb-apache-24' into maint
Junio 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

9 years agoMerge branch 'bg/xcalloc-nmemb-then-size' into maint
Junio 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

9 years agoMerge branch 'cb/byte-order' into maint
Junio 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

9 years agoMerge branch 'lt/request-pull' into maint
Junio 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

9 years agoMerge branch 'ep/shell-assign-and-export-vars' into maint
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

9 years agoMerge branch 'maint-1.9' into maint
Junio 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

9 years agoMerge branch 'maint-1.8.5' into maint-1.9
Junio 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

9 years agoDocumentation: fix missing text for rev-parse --verify
brian 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>
9 years agoMerge 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

9 years agoNinth batch for 2.1
Junio 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>
9 years agoreplace: add test for --graft with a mergetag
Christian 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>
9 years agoreplace: check mergetags when using --graft
Christian 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>
9 years agoreplace: add test for --graft with signed commit
Christian 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>
9 years agoreplace: remove signature when using --graft
Christian 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>
9 years agocontrib: add convert-grafts-to-replace-refs.sh
Christian 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>
9 years agoDocumentation: replace: add --graft option
Christian 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>
9 years agoreplace: add test for --graft
Christian 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>
9 years agoreplace: add --graft option
Christian 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>
9 years agoMerge 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

9 years agoMerge 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()

9 years agoMerge 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)

9 years agoMerge 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

9 years agoMerge branch 'kb/hashmap-updates'
Junio C Hamano [Mon, 21 Jul 2014 18:18:44 +0000 (11:18 -0700)]
Merge branch 'kb/hashmap-updates'

* kb/hashmap-updates:
  hashmap: add string interning API
  hashmap: add simplified hashmap_get_from_hash() API
  hashmap: improve struct hashmap member documentation
  hashmap: factor out getting a hash code from a SHA1

9 years agoMerge branch 'jk/remote-curl-squelch-extra-errors'
Junio C Hamano [Mon, 21 Jul 2014 18:18:40 +0000 (11:18 -0700)]
Merge branch 'jk/remote-curl-squelch-extra-errors'

* jk/remote-curl-squelch-extra-errors:
  remote-curl: mark helper-protocol errors more clearly
  remote-curl: use error instead of fprintf(stderr)
  remote-curl: do not complain on EOF from parent git

9 years agoMerge branch 'rs/ref-transaction-0'
Junio C Hamano [Mon, 21 Jul 2014 18:18:37 +0000 (11:18 -0700)]
Merge branch 'rs/ref-transaction-0'

Early part of the "ref transaction" topic.

* rs/ref-transaction-0:
  refs.c: change ref_transaction_update() to do error checking and return status
  refs.c: remove the onerr argument to ref_transaction_commit
  update-ref: use err argument to get error from ref_transaction_commit
  refs.c: make update_ref_write update a strbuf on failure
  refs.c: make ref_update_reject_duplicates take a strbuf argument for errors
  refs.c: log_ref_write should try to return meaningful errno
  refs.c: make resolve_ref_unsafe set errno to something meaningful on error
  refs.c: commit_packed_refs to return a meaningful errno on failure
  refs.c: make remove_empty_directories always set errno to something sane
  refs.c: verify_lock should set errno to something meaningful
  refs.c: make sure log_ref_setup returns a meaningful errno
  refs.c: add an err argument to repack_without_refs
  lockfile.c: make lock_file return a meaningful errno on failurei
  lockfile.c: add a new public function unable_to_lock_message
  refs.c: add a strbuf argument to ref_transaction_commit for error logging
  refs.c: allow passing NULL to ref_transaction_free
  refs.c: constify the sha arguments for ref_transaction_create|delete|update
  refs.c: ref_transaction_commit should not free the transaction
  refs.c: remove ref_transaction_rollback

9 years agoMerge branch 'jl/submodule-tests'
Junio C Hamano [Mon, 21 Jul 2014 18:18:30 +0000 (11:18 -0700)]
Merge branch 'jl/submodule-tests'

* jl/submodule-tests:
  revert: add t3513 for submodule updates
  stash: add t3906 for submodule updates
  am: add t4255 for submodule updates
  cherry-pick: add t3512 for submodule updates
  pull: add t5572 for submodule updates
  rebase: add t3426 for submodule updates
  merge: add t7613 for submodule updates
  bisect: add t6041 for submodule updates
  reset: add t7112 for submodule updates
  read-tree: add t1013 for submodule updates
  apply: add t4137 for submodule updates
  checkout: call the new submodule update test framework
  submodules: add the lib-submodule-update.sh test library
  test-lib: add test_dir_is_empty()

9 years agoMerge branch 'ak/profile-feedback-build'
Junio C Hamano [Mon, 21 Jul 2014 18:17:47 +0000 (11:17 -0700)]
Merge branch 'ak/profile-feedback-build'

* ak/profile-feedback-build:
  Fix profile feedback with -jN and add profile-fast
  Run the perf test suite for profile feedback too
  Don't define away __attribute__ on gcc
  Use BASIC_FLAGS for profile feedback

9 years agoMerge branch 'cc/for-each-mergetag'
Junio C Hamano [Mon, 21 Jul 2014 18:17:45 +0000 (11:17 -0700)]
Merge branch 'cc/for-each-mergetag'

* cc/for-each-mergetag:
  commit: add for_each_mergetag()

9 years agoFix contrib/subtree Makefile to patch #! line
Charles Bailey [Sat, 19 Jul 2014 16:08:57 +0000 (17:08 +0100)]
Fix contrib/subtree Makefile to patch #! line

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agouse xmemdupz() to allocate copies of strings given by start and length
René Scharfe [Sat, 19 Jul 2014 15:35:34 +0000 (17:35 +0200)]
use xmemdupz() to allocate copies of strings given by start and length

Use xmemdupz() to allocate the memory, copy the data and make sure to
NUL-terminate the result, all in one step.  The resulting code is
shorter, doesn't contain the constants 1 and '\0', and avoids
duplicating function parameters.

For blame, the last copied byte (o->file.ptr[o->file.size]) is always
set to NUL by fake_working_tree_commit() or read_sha1_file(), so no
information is lost by the conversion to using xmemdupz().

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agouse xcalloc() to allocate zero-initialized memory
René Scharfe [Sat, 19 Jul 2014 13:56:26 +0000 (15:56 +0200)]
use xcalloc() to allocate zero-initialized memory

Use xcalloc() instead of xmalloc() followed by memset() to allocate
and zero out memory because it's shorter and avoids duplicating the
function parameters.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoreplace memset with string-list initializers
Tanay Abhra [Fri, 18 Jul 2014 09:19:00 +0000 (02:19 -0700)]
replace memset with string-list initializers

Using memset and then manually setting values of the string-list
members is not future proof as the internal representation of
string-list may change any time.
Use `string_list_init()` or STRING_LIST_INIT_* macros instead of
memset.

Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agostring-list: add string_list initializer helper function
Tanay Abhra [Fri, 18 Jul 2014 09:18:59 +0000 (02:18 -0700)]
string-list: add string_list initializer helper function

The string-list API has STRING_LIST_INIT_* macros to be used
to define variables with initializers, but lacks functions
to initialize an uninitialized piece of memory to be used as
a string-list at the run-time.
Introduce `string_list_init()` function for that.

Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agounix-socket: remove stale socket before calling chdir()
René Scharfe [Sun, 20 Jul 2014 08:00:41 +0000 (10:00 +0200)]
unix-socket: remove stale socket before calling chdir()

unix_stream_listen() is given a path.  It calls unix_sockaddr_init(),
which in turn can call chdir().  After that a relative path doesn't
mean the same as before.  Any use of the original path should thus
happen before that call.  For that reason, unlink the given path
(to get rid of a possibly existing stale socket) right at the
beginning of the function.

Noticed-by: Karsten Blees <karsten.blees@gmail.com>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoremote-testsvn: use internal argv_array of struct child_process in cmd_import()
René Scharfe [Fri, 18 Jul 2014 15:20:19 +0000 (17:20 +0200)]
remote-testsvn: use internal argv_array of struct child_process in cmd_import()

Use the existing argv_array member instead of providing our own.  This
way we don't have to initialize or clean it up explicitly.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agobundle: use internal argv_array of struct child_process in create_bundle()
René Scharfe [Thu, 17 Jul 2014 23:27:41 +0000 (01:27 +0200)]
bundle: use internal argv_array of struct child_process in create_bundle()

Use the existing argv_array member instead of providing our own.  This
way the argv_array is cleared after use automatically for us; it was
leaking before.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agofast-import: use hashcmp() for SHA1 hash comparison
René Scharfe [Fri, 18 Jul 2014 16:00:51 +0000 (18:00 +0200)]
fast-import: use hashcmp() for SHA1 hash comparison

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agotransport: simplify fetch_objs_via_rsync() using argv_array
René Scharfe [Fri, 18 Jul 2014 15:12:34 +0000 (17:12 +0200)]
transport: simplify fetch_objs_via_rsync() using argv_array

Use the existing argv_array member instead of building the arguments
list using a string array and a strbuf.  This way we don't need magic
number constants and allocations are cleaned up for us automatically
by run_command().

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agorun-command: use internal argv_array of struct child_process in run_hook_ve()
René Scharfe [Wed, 16 Jul 2014 21:57:47 +0000 (23:57 +0200)]
run-command: use internal argv_array of struct child_process in run_hook_ve()

Use the existing argv_array member instead of providing our own.  This
way we don't have to initialize or clean it up explicitly.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agouse commit_list_count() to count the members of commit_lists
René Scharfe [Wed, 16 Jul 2014 23:52:09 +0000 (01:52 +0200)]
use commit_list_count() to count the members of commit_lists

Call commit_list_count() instead of open-coding it repeatedly.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agostrbuf: use strbuf_addstr() for adding C strings
René Scharfe [Wed, 16 Jul 2014 23:38:18 +0000 (01:38 +0200)]
strbuf: use strbuf_addstr() for adding C strings

Avoid code duplication and let strbuf_addstr() call strlen() for us.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agouse local cloning if insteadOf makes a local URL
Michael Barabanov [Thu, 17 Jul 2014 07:09:32 +0000 (00:09 -0700)]
use local cloning if insteadOf makes a local URL

Move the is_local logic to the place where origin remote has been setup and
check if the remote url can be used to do local cloning.

This saves a lot of space (and time) in some of the mirroring scenarios that
involve insteadOf rewrites.

Signed-off-by: Michael Barabanov <michael.barabanov@windriver.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years ago.mailmap: map different names with the same email address together
Stefan Beller [Thu, 10 Jul 2014 12:48:26 +0000 (14:48 +0200)]
.mailmap: map different names with the same email address together

Pretty much one year ago (94b410bba864, Jul 12 2013, .mailmap: Map
email addresses to names) I cleaned up the output of `git shortlog
-sne` of git.git by writing a .mailmap file fot the git.git project.

During the year Jens, Kazuki and Trần contributed to git.git using
different names, but the same email address; unify them.

Signed-off-by: Stefan Beller <stefanbeller@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agotag: support configuring --sort via .gitconfig
Jacob Keller [Wed, 16 Jul 2014 21:48:02 +0000 (14:48 -0700)]
tag: support configuring --sort via .gitconfig

Add support for configuring default sort ordering for git tags. Command
line option will override this configured value, using the exact same
syntax.

Cc: Jeff King <peff@peff.net>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agorebase: omit patch-identical commits with --fork-point
John Keeping [Wed, 16 Jul 2014 19:23:49 +0000 (20:23 +0100)]
rebase: omit patch-identical commits with --fork-point

When the `--fork-point` argument was added to `git rebase`, we changed
the value of $upstream to be the fork point instead of the point from
which we want to rebase.  When $orig_head..$upstream is empty this does
not change the behaviour, but when there are new changes in the upstream
we are no longer checking if any of them are patch-identical with
changes in $upstream..$orig_head.

Fix this by introducing a new variable to hold the fork point and using
this to restrict the range as an extra (negative) revision argument so
that the set of desired revisions becomes (in fork-point mode):

git rev-list --cherry-pick --right-only \
$upstream...$orig_head ^$fork_point

This allows us to correctly handle the scenario where we have the
following topology:

    C --- D --- E  <- dev
   /
  B  <- master@{1}
 /
o --- B' --- C* --- D*  <- master

where:
- B' is a fixed-up version of B that is not patch-identical with B;
- C* and D* are patch-identical to C and D respectively and conflict
  textually if applied in the wrong order;
- E depends textually on D.

The correct result of `git rebase master dev` is that B is identified as
the fork-point of dev and master, so that C, D, E are the commits that
need to be replayed onto master; but C and D are patch-identical with C*
and D* and so can be dropped, so that the end result is:

o --- B' --- C* --- D* --- E  <- dev

If the fork-point is not identified, then picking B onto a branch
containing B' results in a conflict and if the patch-identical commits
are not correctly identified then picking C onto a branch containing D
(or equivalently D*) results in a conflict.

This change allows us to handle both of these cases, where previously we
either identified the fork-point (with `--fork-point`) but not the
patch-identical commits *or* (with `--no-fork-point`) identified the
patch-identical commits but not the fact that master had been rewritten.

Reported-by: Ted Felix <ted@tedfelix.com>
Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agorefs.c: add a public is_branch function
Ronnie Sahlberg [Tue, 15 Jul 2014 23:02:38 +0000 (16:02 -0700)]
refs.c: add a public is_branch function

Both refs.c and fsck.c have their own private copies of the is_branch function.
Delete the is_branch function from fsck.c and make the version in refs.c
public.

Signed-off-by: Ronnie Sahlberg <sahlberg@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoconfig: use chmod() instead of fchmod()
Karsten Blees [Tue, 15 Jul 2014 22:54:30 +0000 (00:54 +0200)]
config: use chmod() instead of fchmod()

There is no fchmod() on native Windows platforms (MinGW and MSVC), and the
equivalent Win32 API (SetFileInformationByHandle) requires Windows Vista.

Use chmod() instead.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoSync with 2.0.2
Junio C Hamano [Wed, 16 Jul 2014 18:48:16 +0000 (11:48 -0700)]
Sync with 2.0.2

* maint:
  Git 2.0.2
  annotate: use argv_array

9 years agoEighth batch for 2.1
Junio C Hamano [Wed, 16 Jul 2014 18:47:32 +0000 (11:47 -0700)]
Eighth batch for 2.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
9 years agoMerge branch 'ah/fix-http-push'
Junio C Hamano [Wed, 16 Jul 2014 18:33:11 +0000 (11:33 -0700)]
Merge branch 'ah/fix-http-push'

An ancient rewrite passed a wrong pointer to a curl library
function in a rarely used code path.

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