git/git.git
2 years agoshallow: migrate shallow information into the object parser
Stefan Beller [Thu, 17 May 2018 22:51:52 +0000 (15:51 -0700)]
shallow: migrate shallow information into the object parser

We need to convert the shallow functions all at the same time
as we move the data structures they operate on into the repository.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopath.c: migrate global git_path_* to take a repository argument
Stefan Beller [Thu, 17 May 2018 22:51:51 +0000 (15:51 -0700)]
path.c: migrate global git_path_* to take a repository argument

Migrate all git_path_* functions that are defined in path.c to take a
repository argument. Unlike other patches in this series, do not use the
 #define trick, as we rewrite the whole function, which is rather small.

This doesn't migrate all the functions, as other builtins have their own
local path functions defined using GIT_PATH_FUNC. So keep that macro
around to serve the other locations.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocache: convert get_graft_file to handle arbitrary repositories
Stefan Beller [Thu, 17 May 2018 22:51:50 +0000 (15:51 -0700)]
cache: convert get_graft_file to handle arbitrary repositories

This conversion was done without the #define trick used in the earlier
series refactoring to have better repository access, because this function
is easy to review, as all lines are converted and it has only one caller.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocommit: convert read_graft_file to handle arbitrary repositories
Brandon Williams [Thu, 17 May 2018 22:51:49 +0000 (15:51 -0700)]
commit: convert read_graft_file to handle arbitrary repositories

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocommit: convert register_commit_graft to handle arbitrary repositories
Brandon Williams [Thu, 17 May 2018 22:51:48 +0000 (15:51 -0700)]
commit: convert register_commit_graft to handle arbitrary repositories

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocommit: convert commit_graft_pos() to handle arbitrary repositories
Brandon Williams [Thu, 17 May 2018 22:51:47 +0000 (15:51 -0700)]
commit: convert commit_graft_pos() to handle arbitrary repositories

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoshallow: add repository argument to is_repository_shallow
Stefan Beller [Thu, 17 May 2018 22:51:46 +0000 (15:51 -0700)]
shallow: add repository argument to is_repository_shallow

Add a repository argument to allow callers of is_repository_shallow
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoshallow: add repository argument to check_shallow_file_for_update
Stefan Beller [Thu, 17 May 2018 22:51:45 +0000 (15:51 -0700)]
shallow: add repository argument to check_shallow_file_for_update

Add a repository argument to allow callers of check_shallow_file_for_update
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoshallow: add repository argument to register_shallow
Stefan Beller [Thu, 17 May 2018 22:51:44 +0000 (15:51 -0700)]
shallow: add repository argument to register_shallow

Add a repository argument to allow callers of register_shallow
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoshallow: add repository argument to set_alternate_shallow_file
Stefan Beller [Thu, 17 May 2018 22:51:43 +0000 (15:51 -0700)]
shallow: add repository argument to set_alternate_shallow_file

Add a repository argument to allow callers of set_alternate_shallow_file
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocommit: add repository argument to lookup_commit_graft
Jonathan Nieder [Thu, 17 May 2018 22:51:42 +0000 (15:51 -0700)]
commit: add repository argument to lookup_commit_graft

Add a repository argument to allow callers of lookup_commit_graft to
be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocommit: add repository argument to prepare_commit_graft
Jonathan Nieder [Tue, 15 May 2018 23:42:20 +0000 (16:42 -0700)]
commit: add repository argument to prepare_commit_graft

Add a repository argument to allow the caller of prepare_commit_graft
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocommit: add repository argument to read_graft_file
Jonathan Nieder [Tue, 15 May 2018 23:42:19 +0000 (16:42 -0700)]
commit: add repository argument to read_graft_file

Add a repository argument to allow the caller of read_graft_file to be
more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocommit: add repository argument to register_commit_graft
Jonathan Nieder [Tue, 15 May 2018 23:42:18 +0000 (16:42 -0700)]
commit: add repository argument to register_commit_graft

Add a repository argument to allow callers of register_commit_graft to
be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocommit: add repository argument to commit_graft_pos
Jonathan Nieder [Tue, 15 May 2018 23:42:17 +0000 (16:42 -0700)]
commit: add repository argument to commit_graft_pos

Add a repository argument to allow callers of commit_graft_pos to be
more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoobject: move grafts to object parser
Jonathan Nieder [Tue, 15 May 2018 23:42:16 +0000 (16:42 -0700)]
object: move grafts to object parser

Grafts are only meaningful in the context of a single repository.
Therefore they cannot be global.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoobject-store: move object access functions to object-store.h
Stefan Beller [Tue, 15 May 2018 23:42:15 +0000 (16:42 -0700)]
object-store: move object access functions to object-store.h

This should make these functions easier to find and cache.h less
overwhelming to read.

In particular, this moves:
- read_object_file
- oid_object_info
- write_object_file

As a result, most of the codebase needs to #include object-store.h.
In this patch the #include is only added to files that would fail to
compile otherwise.  It would be better to #include wherever
identifiers from the header are used.  That can happen later
when we have better tooling for it.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoalloc: allow arbitrary repositories for alloc functions
Stefan Beller [Tue, 15 May 2018 21:48:42 +0000 (14:48 -0700)]
alloc: allow arbitrary repositories for alloc functions

We have to convert all of the alloc functions at once, because alloc_report
uses a funky macro for reporting. It is better for the sake of mechanical
conversion to convert multiple functions at once rather than changing the
structure of the reporting function.

We record all memory allocation in alloc.c, and free them in
clear_alloc_state, which is called for all repositories except
the_repository.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoobject: allow create_object to handle arbitrary repositories
Stefan Beller [Tue, 8 May 2018 19:37:35 +0000 (12:37 -0700)]
object: allow create_object to handle arbitrary repositories

Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoobject: allow grow_object_hash to handle arbitrary repositories
Stefan Beller [Tue, 8 May 2018 19:37:34 +0000 (12:37 -0700)]
object: allow grow_object_hash to handle arbitrary repositories

Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoalloc: add repository argument to alloc_commit_index
Stefan Beller [Tue, 8 May 2018 19:37:33 +0000 (12:37 -0700)]
alloc: add repository argument to alloc_commit_index

This is a small mechanical change; it doesn't change the
implementation to handle repositories other than the_repository yet.
Use a macro to catch callers passing a repository other than
the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoalloc: add repository argument to alloc_report
Stefan Beller [Tue, 8 May 2018 19:37:32 +0000 (12:37 -0700)]
alloc: add repository argument to alloc_report

This is a small mechanical change; it doesn't change the
implementation to handle repositories other than the_repository yet.
Use a macro to catch callers passing a repository other than
the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoalloc: add repository argument to alloc_object_node
Stefan Beller [Tue, 8 May 2018 19:37:31 +0000 (12:37 -0700)]
alloc: add repository argument to alloc_object_node

This is a small mechanical change; it doesn't change the
implementation to handle repositories other than the_repository yet.
Use a macro to catch callers passing a repository other than
the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoalloc: add repository argument to alloc_tag_node
Stefan Beller [Tue, 8 May 2018 19:37:30 +0000 (12:37 -0700)]
alloc: add repository argument to alloc_tag_node

This is a small mechanical change; it doesn't change the
implementation to handle repositories other than the_repository yet.
Use a macro to catch callers passing a repository other than
the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoalloc: add repository argument to alloc_commit_node
Stefan Beller [Tue, 8 May 2018 19:37:29 +0000 (12:37 -0700)]
alloc: add repository argument to alloc_commit_node

This is a small mechanical change; it doesn't change the
implementation to handle repositories other than the_repository yet.
Use a macro to catch callers passing a repository other than
the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoalloc: add repository argument to alloc_tree_node
Stefan Beller [Tue, 8 May 2018 19:37:28 +0000 (12:37 -0700)]
alloc: add repository argument to alloc_tree_node

This is a small mechanical change; it doesn't change the
implementation to handle repositories other than the_repository yet.
Use a macro to catch callers passing a repository other than
the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoalloc: add repository argument to alloc_blob_node
Stefan Beller [Tue, 8 May 2018 19:37:27 +0000 (12:37 -0700)]
alloc: add repository argument to alloc_blob_node

This is a small mechanical change; it doesn't change the
implementation to handle repositories other than the_repository yet.
Use a macro to catch callers passing a repository other than
the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoobject: add repository argument to grow_object_hash
Jonathan Nieder [Tue, 8 May 2018 19:37:26 +0000 (12:37 -0700)]
object: add repository argument to grow_object_hash

Add a repository argument to allow the caller of grow_object_hash to
be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoobject: add repository argument to create_object
Stefan Beller [Tue, 8 May 2018 19:37:25 +0000 (12:37 -0700)]
object: add repository argument to create_object

Add a repository argument to allow the callers of create_object
to be more specific about which repository to act on. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agorepository: introduce parsed objects field
Stefan Beller [Tue, 8 May 2018 19:37:24 +0000 (12:37 -0700)]
repository: introduce parsed objects field

Convert the existing global cache for parsed objects (obj_hash) into
repository-specific parsed object caches. Existing code that uses
obj_hash are modified to use the parsed object cache of
the_repository; future patches will use the parsed object caches of
other repositories.

Another future use case for a pool of objects is ease of memory management
in revision walking: If we can free the rev-list related memory early in
pack-objects (e.g. part of repack operation) then it could lower memory
pressure significantly when running on large repos. While this has been
discussed on the mailing list lately, this series doesn't implement this.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocache.h: allow oid_object_info to handle arbitrary repositories
Stefan Beller [Wed, 25 Apr 2018 18:21:06 +0000 (11:21 -0700)]
cache.h: allow oid_object_info to handle arbitrary repositories

This involves also adapting oid_object_info_extended and a some
internal functions that are used to implement these. It all has to
happen in one patch, because of a single recursive chain of calls visits
all these functions.

oid_object_info_extended is also used in partial clones, which allow
fetching missing objects. As this series will not add the repository
struct to the transport code and fetch_object(), add a TODO note and
omit fetching if a user tries to use a partial clone in a repository
other than the_repository.

Among the functions modified to handle arbitrary repositories,
unpack_entry() is one of them. Note that it still references the globals
"delta_base_cache" and "delta_base_cached", but those are safe to be
referenced (the former is indexed partly by "struct packed_git *", which
is repo-specific, and the latter is only used to limit the size of the
former as an optimization).

Helped-by: Brandon Williams <bmwill@google.com>
Helped-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopackfile: add repository argument to cache_or_unpack_entry
Stefan Beller [Wed, 25 Apr 2018 18:21:05 +0000 (11:21 -0700)]
packfile: add repository argument to cache_or_unpack_entry

Add a repository argument to allow the callers of cache_or_unpack_entry
to be more specific about which repository to act on. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopackfile: add repository argument to unpack_entry
Stefan Beller [Wed, 25 Apr 2018 18:21:04 +0000 (11:21 -0700)]
packfile: add repository argument to unpack_entry

Add a repository argument to allow the callers of unpack_entry
to be more specific about which repository to act on. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopackfile: add repository argument to read_object
Stefan Beller [Wed, 25 Apr 2018 18:21:03 +0000 (11:21 -0700)]
packfile: add repository argument to read_object

Add a repository argument to allow the callers of read_object
to be more specific about which repository to act on. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopackfile: add repository argument to packed_object_info
Jonathan Nieder [Wed, 25 Apr 2018 18:21:02 +0000 (11:21 -0700)]
packfile: add repository argument to packed_object_info

Add a repository argument to allow callers of packed_object_info to be
more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopackfile: add repository argument to packed_to_object_type
Stefan Beller [Wed, 25 Apr 2018 18:21:01 +0000 (11:21 -0700)]
packfile: add repository argument to packed_to_object_type

Add a repository argument to allow the callers of packed_to_object_type
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopackfile: add repository argument to retry_bad_packed_offset
Stefan Beller [Wed, 25 Apr 2018 18:21:00 +0000 (11:21 -0700)]
packfile: add repository argument to retry_bad_packed_offset

Add a repository argument to allow the callers of retry_bad_packed_offset
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocache.h: add repository argument to oid_object_info
Stefan Beller [Wed, 25 Apr 2018 18:20:59 +0000 (11:20 -0700)]
cache.h: add repository argument to oid_object_info

Add a repository argument to allow the callers of oid_object_info
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocache.h: add repository argument to oid_object_info_extended
Stefan Beller [Wed, 25 Apr 2018 18:20:58 +0000 (11:20 -0700)]
cache.h: add repository argument to oid_object_info_extended

Add a repository argument to allow oid_object_info_extended callers
to be more specific about which repository to act on. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: allow lookup_replace_object to handle arbitrary repositories
Stefan Beller [Thu, 12 Apr 2018 00:21:18 +0000 (17:21 -0700)]
replace-object: allow lookup_replace_object to handle arbitrary repositories

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: allow do_lookup_replace_object to handle arbitrary repositories
Stefan Beller [Thu, 12 Apr 2018 00:21:17 +0000 (17:21 -0700)]
replace-object: allow do_lookup_replace_object to handle arbitrary repositories

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: allow prepare_replace_object to handle arbitrary repositories
Stefan Beller [Thu, 12 Apr 2018 00:21:16 +0000 (17:21 -0700)]
replace-object: allow prepare_replace_object to handle arbitrary repositories

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agorefs: allow for_each_replace_ref to handle arbitrary repositories
Stefan Beller [Thu, 12 Apr 2018 00:21:15 +0000 (17:21 -0700)]
refs: allow for_each_replace_ref to handle arbitrary repositories

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agorefs: store the main ref store inside the repository struct
Stefan Beller [Thu, 12 Apr 2018 00:21:14 +0000 (17:21 -0700)]
refs: store the main ref store inside the repository struct

This moves the 'main_ref_store', which was a global variable in refs.c
into the repository struct.

This patch does not deal with the parts in the refs subsystem which deal
with the submodules there. A later patch needs to get rid of the submodule
exposure in the refs API, such as 'get_submodule_ref_store(path)'.

Acked-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: add repository argument to lookup_replace_object
Stefan Beller [Thu, 12 Apr 2018 00:21:13 +0000 (17:21 -0700)]
replace-object: add repository argument to lookup_replace_object

Add a repository argument to allow callers of lookup_replace_object
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: add repository argument to do_lookup_replace_object
Stefan Beller [Thu, 12 Apr 2018 00:21:12 +0000 (17:21 -0700)]
replace-object: add repository argument to do_lookup_replace_object

Add a repository argument to allow the do_lookup_replace_object caller
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: add repository argument to prepare_replace_object
Stefan Beller [Thu, 12 Apr 2018 00:21:11 +0000 (17:21 -0700)]
replace-object: add repository argument to prepare_replace_object

Add a repository argument to allow the prepare_replace_object caller
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agorefs: add repository argument to for_each_replace_ref
Stefan Beller [Thu, 12 Apr 2018 00:21:10 +0000 (17:21 -0700)]
refs: add repository argument to for_each_replace_ref

Add a repository argument to allow for_each_replace_ref callers to be
more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agorefs: add repository argument to get_main_ref_store
Stefan Beller [Thu, 12 Apr 2018 00:21:09 +0000 (17:21 -0700)]
refs: add repository argument to get_main_ref_store

Add a repository argument to allow the get_main_ref_store caller
to be more specific about which repository to handle. This is a small
mechanical change; it doesn't change the implementation to handle
repositories other than the_repository yet.

As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: check_replace_refs is safe in multi repo environment
Stefan Beller [Thu, 12 Apr 2018 00:21:08 +0000 (17:21 -0700)]
replace-object: check_replace_refs is safe in multi repo environment

In e1111cef23 (inline lookup_replace_object() calls, 2011-05-15) a shortcut
for checking the object replacement was added by setting check_replace_refs
to 0 once the replacements were evaluated to not exist. This works fine in
with the assumption of only one repository in existence.

The assumption won't hold true any more when we work on multiple instances
of a repository structs (e.g. one struct per submodule), as the first
repository to be inspected may have no replacements and would set the
global variable. Other repositories would then completely omit their
evaluation of replacements.

This reverts back the meaning of the flag `check_replace_refs` of
"Do we need to check with the lookup table?" to "Do we need to read
the replacement definition?", adding the bypassing logic to
lookup_replace_object after the replacement definition was read.
As with the original patch, delay the renaming of the global variable

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: eliminate replace objects prepared flag
Stefan Beller [Thu, 12 Apr 2018 00:21:07 +0000 (17:21 -0700)]
replace-object: eliminate replace objects prepared flag

Make the oidmap a pointer.

That way we eliminate the need for the global boolean
variable 'replace_object_prepared' as we can put this information
into the pointer being NULL or not.

Another advantage of this is that we would more quickly catch
code that tries to access replace-map without initializing it.

This also allows the '#include "oidmap.h"' introduced in a previous
patch to be replaced by the forward declaration of 'struct oidmap;'.
Keeping the type opaque discourages circumventing accessor functions;
not dragging in other headers avoids some compile time overhead.

One disadvantage of this is change is performance as we need to
pay the overhead for a malloc. The alternative of moving the
global variable into the object store is less modular code.

Helped-by: René Scharfe <l.s.r@web.de>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoobject-store: move lookup_replace_object to replace-object.h
Stefan Beller [Thu, 12 Apr 2018 00:21:06 +0000 (17:21 -0700)]
object-store: move lookup_replace_object to replace-object.h

lookup_replace_object is a low-level function that most users of the
object store do not need to use directly.

Move it to replace-object.h to avoid a dependency loop in an upcoming
change to its inline definition that will make use of repository.h.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace-object: move replace_map to object store
Stefan Beller [Thu, 12 Apr 2018 00:21:05 +0000 (17:21 -0700)]
replace-object: move replace_map to object store

The relationship between an object X and another object Y that
replaces the object X is defined only within the scope of a
single repository.

The exception in reachability rule around these replacement objects
is also local to a repository (i.e. if traversal from refs reaches
X, then both X and Y are reachable and need to be kept from gc).

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoreplace_object: use oidmap
René Scharfe [Thu, 12 Apr 2018 00:21:04 +0000 (17:21 -0700)]
replace_object: use oidmap

Load the replace objects into an oidmap to allow for easy lookups in
constant time.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'svn/authors-prog-2' of git://bogomips.org/git-svn
Junio C Hamano [Wed, 11 Apr 2018 23:05:28 +0000 (08:05 +0900)]
Merge branch 'svn/authors-prog-2' of git://bogomips.org/git-svn

* 'svn/authors-prog-2' of git://bogomips.org/git-svn:
  git-svn: allow empty email-address using authors-prog and authors-file
  git-svn: search --authors-prog in PATH too

2 years agoRevert "Merge branch 'en/rename-directory-detection'"
Junio C Hamano [Wed, 11 Apr 2018 09:07:11 +0000 (18:07 +0900)]
Revert "Merge branch 'en/rename-directory-detection'"

This reverts commit e4bb62fa1eeee689744b413e29a50b4d1dae6886, reversing
changes made to 468165c1d8a442994a825f3684528361727cd8c0.

The topic appears to inflict severe regression in renaming merges,
even though the promise of it was that it would improve them.

We do not yet know which exact change in the topic was wrong, but in
the meantime, let's play it safe and revert it out of 'master'
before real Git-using projects are harmed.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoThe third batch for 2.18
Junio C Hamano [Wed, 11 Apr 2018 04:13:49 +0000 (13:13 +0900)]
The third batch for 2.18

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'eb/cred-helper-ignore-sigpipe'
Junio C Hamano [Wed, 11 Apr 2018 04:09:57 +0000 (13:09 +0900)]
Merge branch 'eb/cred-helper-ignore-sigpipe'

When credential helper exits very quickly without reading its
input, it used to cause Git to die with SIGPIPE, which has been
fixed.

* eb/cred-helper-ignore-sigpipe:
  credential: ignore SIGPIPE when writing to credential helpers

2 years agoMerge branch 'lv/tls-1.3'
Junio C Hamano [Wed, 11 Apr 2018 04:09:57 +0000 (13:09 +0900)]
Merge branch 'lv/tls-1.3'

When built with more recent cURL, GIT_SSL_VERSION can now specify
"tlsv1.3" as its value.

* lv/tls-1.3:
  http: allow use of TLS 1.3

2 years agoMerge branch 'pk/test-avoid-pipe-hiding-exit-status'
Junio C Hamano [Wed, 11 Apr 2018 04:09:56 +0000 (13:09 +0900)]
Merge branch 'pk/test-avoid-pipe-hiding-exit-status'

Test cleanup.

* pk/test-avoid-pipe-hiding-exit-status:
  test: avoid pipes in git related commands for test

2 years agoMerge branch 'rs/status-with-removed-submodule'
Junio C Hamano [Wed, 11 Apr 2018 04:09:56 +0000 (13:09 +0900)]
Merge branch 'rs/status-with-removed-submodule'

"git submodule status" misbehaved on a submodule that has been
removed from the working tree.

* rs/status-with-removed-submodule:
  submodule: check for NULL return of get_submodule_ref_store()

2 years agoMerge branch 'nd/combined-test-helper'
Junio C Hamano [Wed, 11 Apr 2018 04:09:56 +0000 (13:09 +0900)]
Merge branch 'nd/combined-test-helper'

Small test-helper programs have been consolidated into a single
binary.

* nd/combined-test-helper: (36 commits)
  t/helper: merge test-write-cache into test-tool
  t/helper: merge test-wildmatch into test-tool
  t/helper: merge test-urlmatch-normalization into test-tool
  t/helper: merge test-subprocess into test-tool
  t/helper: merge test-submodule-config into test-tool
  t/helper: merge test-string-list into test-tool
  t/helper: merge test-strcmp-offset into test-tool
  t/helper: merge test-sigchain into test-tool
  t/helper: merge test-sha1-array into test-tool
  t/helper: merge test-scrap-cache-tree into test-tool
  t/helper: merge test-run-command into test-tool
  t/helper: merge test-revision-walking into test-tool
  t/helper: merge test-regex into test-tool
  t/helper: merge test-ref-store into test-tool
  t/helper: merge test-read-cache into test-tool
  t/helper: merge test-prio-queue into test-tool
  t/helper: merge test-path-utils into test-tool
  t/helper: merge test-online-cpus into test-tool
  t/helper: merge test-mktemp into test-tool
  t/helper: merge (unused) test-mergesort into test-tool
  ...

2 years agoMerge branch 'sb/packfiles-in-repository'
Junio C Hamano [Wed, 11 Apr 2018 04:09:55 +0000 (13:09 +0900)]
Merge branch 'sb/packfiles-in-repository'

Refactoring of the internal global data structure continues.

* sb/packfiles-in-repository:
  packfile: keep prepare_packed_git() private
  packfile: allow find_pack_entry to handle arbitrary repositories
  packfile: add repository argument to find_pack_entry
  packfile: allow reprepare_packed_git to handle arbitrary repositories
  packfile: allow prepare_packed_git to handle arbitrary repositories
  packfile: allow prepare_packed_git_one to handle arbitrary repositories
  packfile: add repository argument to reprepare_packed_git
  packfile: add repository argument to prepare_packed_git
  packfile: add repository argument to prepare_packed_git_one
  packfile: allow install_packed_git to handle arbitrary repositories
  packfile: allow rearrange_packed_git to handle arbitrary repositories
  packfile: allow prepare_packed_git_mru to handle arbitrary repositories

2 years agoMerge branch 'sb/object-store'
Junio C Hamano [Wed, 11 Apr 2018 04:09:55 +0000 (13:09 +0900)]
Merge branch 'sb/object-store'

Refactoring the internal global data structure to make it possible
to open multiple repositories, work with and then close them.

Rerolled by Duy on top of a separate preliminary clean-up topic.
The resulting structure of the topics looked very sensible.

* sb/object-store: (27 commits)
  sha1_file: allow sha1_loose_object_info to handle arbitrary repositories
  sha1_file: allow map_sha1_file to handle arbitrary repositories
  sha1_file: allow map_sha1_file_1 to handle arbitrary repositories
  sha1_file: allow open_sha1_file to handle arbitrary repositories
  sha1_file: allow stat_sha1_file to handle arbitrary repositories
  sha1_file: allow sha1_file_name to handle arbitrary repositories
  sha1_file: add repository argument to sha1_loose_object_info
  sha1_file: add repository argument to map_sha1_file
  sha1_file: add repository argument to map_sha1_file_1
  sha1_file: add repository argument to open_sha1_file
  sha1_file: add repository argument to stat_sha1_file
  sha1_file: add repository argument to sha1_file_name
  sha1_file: allow prepare_alt_odb to handle arbitrary repositories
  sha1_file: allow link_alt_odb_entries to handle arbitrary repositories
  sha1_file: add repository argument to prepare_alt_odb
  sha1_file: add repository argument to link_alt_odb_entries
  sha1_file: add repository argument to read_info_alternates
  sha1_file: add repository argument to link_alt_odb_entry
  sha1_file: add raw_object_store argument to alt_odb_usable
  pack: move approximate object count to object store
  ...

2 years agoMerge branch 'jc/test-must-be-empty'
Junio C Hamano [Wed, 11 Apr 2018 04:09:54 +0000 (13:09 +0900)]
Merge branch 'jc/test-must-be-empty'

Test helper update.

* jc/test-must-be-empty:
  test_must_be_empty: simplify file existence check

2 years agoMerge branch 'cc/perf-aggregate-sort'
Junio C Hamano [Wed, 11 Apr 2018 04:09:54 +0000 (13:09 +0900)]
Merge branch 'cc/perf-aggregate-sort'

Perf-test update.

* cc/perf-aggregate-sort:
  perf/aggregate: add --sort-by=regression option
  perf/aggregate: add display_dir()

2 years agoMerge branch 'ab/doc-hash-brokenness'
Junio C Hamano [Wed, 11 Apr 2018 04:09:54 +0000 (13:09 +0900)]
Merge branch 'ab/doc-hash-brokenness'

Doc updates.

* ab/doc-hash-brokenness:
  doc hash-function-transition: clarify what SHAttered means
  doc hash-function-transition: clarify how older gits die on NewHash

2 years agoMerge branch 'bc/hash-independent-tests'
Junio C Hamano [Wed, 11 Apr 2018 04:09:54 +0000 (13:09 +0900)]
Merge branch 'bc/hash-independent-tests'

Tests that rely on the exact hardcoded values of object names have
been updated in preparation for hash function migration.

* bc/hash-independent-tests:
  t2107: abstract away SHA-1-specific constants
  t2101: abstract away SHA-1-specific constants
  t2101: modernize test style
  t2020: abstract away SHA-1 specific constants
  t1507: abstract away SHA-1-specific constants
  t1411: abstract away SHA-1-specific constants
  t1405: sort reflog entries in a hash-independent way
  t1300: abstract away SHA-1-specific constants
  t1304: abstract away SHA-1-specific constants
  t1011: abstract away SHA-1-specific constants

2 years agoMerge branch 'ab/drop-contrib-examples'
Junio C Hamano [Wed, 11 Apr 2018 04:09:54 +0000 (13:09 +0900)]
Merge branch 'ab/drop-contrib-examples'

* ab/drop-contrib-examples:
  Remove contrib/examples/*

2 years agoThe second batch for 2.18
Junio C Hamano [Tue, 10 Apr 2018 07:32:45 +0000 (16:32 +0900)]
The second batch for 2.18

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'ys/bisect-object-id-missing-conversion-fix'
Junio C Hamano [Tue, 10 Apr 2018 07:28:24 +0000 (16:28 +0900)]
Merge branch 'ys/bisect-object-id-missing-conversion-fix'

Code clean-up.

* ys/bisect-object-id-missing-conversion-fix:
  bisect: use oid_to_hex() for converting object_id hashes to hex strings

2 years agoMerge branch 'yk/filter-branch-non-committish-refs'
Junio C Hamano [Tue, 10 Apr 2018 07:28:23 +0000 (16:28 +0900)]
Merge branch 'yk/filter-branch-non-committish-refs'

when refs that do not point at committish are given, "git
filter-branch" gave a misleading error messages.  This has been
corrected.

* yk/filter-branch-non-committish-refs:
  filter-branch: fix errors caused by refs that point at non-committish

2 years agoMerge branch 'nd/trace-with-env'
Junio C Hamano [Tue, 10 Apr 2018 07:28:22 +0000 (16:28 +0900)]
Merge branch 'nd/trace-with-env'

Code cleanup.

* nd/trace-with-env:
  run-command: use strbuf_addstr() for adding a string to a strbuf

2 years agoMerge branch 'nd/parseopt-completion-more'
Junio C Hamano [Tue, 10 Apr 2018 07:28:22 +0000 (16:28 +0900)]
Merge branch 'nd/parseopt-completion-more'

The mechanism to use parse-options API to automate the command line
completion continues to get extended and polished.

* nd/parseopt-completion-more:
  completion: use __gitcomp_builtin in _git_cherry
  completion: use __gitcomp_builtin in _git_ls_tree
  completion: delete option-only completion commands
  completion: add --option completion for most builtin commands
  completion: factor out _git_xxx calling code
  completion: mention the oldest version we need to support
  git.c: add hidden option --list-parseopt-builtins
  git.c: move cmd_struct declaration up

2 years agoMerge branch 'ds/bsearch-hash'
Junio C Hamano [Tue, 10 Apr 2018 07:28:22 +0000 (16:28 +0900)]
Merge branch 'ds/bsearch-hash'

Code to find the length to uniquely abbreviate object names based
on packfile content, which is a relatively recent addtion, has been
optimized to use the same fan-out table.

* ds/bsearch-hash:
  sha1_name: use bsearch_pack() in unique_in_pack()
  sha1_name: use bsearch_pack() for abbreviations
  packfile: define and use bsearch_pack()
  sha1_name: convert struct min_abbrev_data to object_id

2 years agoMerge branch 'ws/rebase-p'
Junio C Hamano [Tue, 10 Apr 2018 07:28:21 +0000 (16:28 +0900)]
Merge branch 'ws/rebase-p'

Code clean-up.

* ws/rebase-p:
  rebase: remove merges_option and a blank line
  rebase: remove unused code paths from git_rebase__interactive__preserve_merges
  rebase: remove unused code paths from git_rebase__interactive
  rebase: add and use git_rebase__interactive__preserve_merges
  rebase: extract functions out of git_rebase__interactive
  rebase: reindent function git_rebase__interactive
  rebase: update invocation of rebase dot-sourced scripts
  rebase-interactive: simplify pick_on_preserving_merges

2 years agoMerge branch 'jk/diff-highlight-graph-fix'
Junio C Hamano [Tue, 10 Apr 2018 07:28:21 +0000 (16:28 +0900)]
Merge branch 'jk/diff-highlight-graph-fix'

"diff-highlight" filter (in contrib/) learned to undertand "git log
--graph" output better.

* jk/diff-highlight-graph-fix:
  diff-highlight: detect --graph by indent
  diff-highlight: use flush() helper consistently
  diff-highlight: test graphs with --color
  diff-highlight: test interleaved parallel lines of history
  diff-highlight: prefer "echo" to "cat" in tests
  diff-highlight: use test_tick in graph test
  diff-highlight: correct test graph diagram

2 years agoMerge branch 'nd/remove-ignore-env-field'
Junio C Hamano [Tue, 10 Apr 2018 07:28:20 +0000 (16:28 +0900)]
Merge branch 'nd/remove-ignore-env-field'

Code clean-up for the "repository" abstraction.

* nd/remove-ignore-env-field:
  repository.h: add comment and clarify repo_set_gitdir
  repository: delete ignore_env member
  sha1_file.c: move delayed getenv(altdb) back to setup_git_env()
  repository.c: delete dead functions
  repository.c: move env-related setup code back to environment.c
  repository: initialize the_repository in main()

2 years agoMerge branch 'ps/contains-id-error-message'
Junio C Hamano [Tue, 10 Apr 2018 07:28:20 +0000 (16:28 +0900)]
Merge branch 'ps/contains-id-error-message'

"git tag --contains no-such-commit" gave a full list of options
after giving an error message.

* ps/contains-id-error-message:
  parse-options: do not show usage upon invalid option value

2 years agoThe first batch for 2.18 cycle
Junio C Hamano [Mon, 9 Apr 2018 23:31:10 +0000 (08:31 +0900)]
The first batch for 2.18 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'tg/stash-untracked-with-pathspec-fix'
Junio C Hamano [Mon, 9 Apr 2018 23:25:45 +0000 (08:25 +0900)]
Merge branch 'tg/stash-untracked-with-pathspec-fix'

"git stash push -u -- <pathspec>" gave an unnecessary and confusing
error message when there was no tracked files that match the
<pathspec>, which has been fixed.

* tg/stash-untracked-with-pathspec-fix:
  stash: drop superfluos pathspec parameter
  stash push -u: don't create empty stash
  stash push: avoid printing errors
  stash: fix nonsense pipeline

2 years agoMerge branch 'nd/worktree-prune'
Junio C Hamano [Mon, 9 Apr 2018 23:25:45 +0000 (08:25 +0900)]
Merge branch 'nd/worktree-prune'

The way "git worktree prune" worked internally has been simplified,
by assuming how "git worktree move" moves an existing worktree to a
different place.

* nd/worktree-prune:
  worktree prune: improve prune logic when worktree is moved
  worktree: delete dead code
  gc.txt: more details about what gc does

2 years agoMerge branch 'bc/object-id'
Junio C Hamano [Mon, 9 Apr 2018 23:25:45 +0000 (08:25 +0900)]
Merge branch 'bc/object-id'

Conversion from uchar[20] to struct object_id continues.

* bc/object-id: (36 commits)
  convert: convert to struct object_id
  sha1_file: introduce a constant for max header length
  Convert lookup_replace_object to struct object_id
  sha1_file: convert read_sha1_file to struct object_id
  sha1_file: convert read_object_with_reference to object_id
  tree-walk: convert tree entry functions to object_id
  streaming: convert istream internals to struct object_id
  tree-walk: convert get_tree_entry_follow_symlinks internals to object_id
  builtin/notes: convert static functions to object_id
  builtin/fmt-merge-msg: convert remaining code to object_id
  sha1_file: convert sha1_object_info* to object_id
  Convert remaining callers of sha1_object_info_extended to object_id
  packfile: convert unpack_entry to struct object_id
  sha1_file: convert retry_bad_packed_offset to struct object_id
  sha1_file: convert assert_sha1_type to object_id
  builtin/mktree: convert to struct object_id
  streaming: convert open_istream to use struct object_id
  sha1_file: convert check_sha1_signature to struct object_id
  sha1_file: convert read_loose_object to use struct object_id
  builtin/index-pack: convert struct ref_delta_entry to object_id
  ...

2 years agoMerge branch 'ma/shortlog-revparse'
Junio C Hamano [Mon, 9 Apr 2018 23:25:44 +0000 (08:25 +0900)]
Merge branch 'ma/shortlog-revparse'

"git shortlog cruft" aborted with a BUG message when run outside a
Git repository.  The command has been taught to complain about
extra and unwanted arguments on its command line instead in such a
case.

* ma/shortlog-revparse:
  shortlog: disallow left-over arguments outside repo
  shortlog: add usage-string for stdin-reading
  git-shortlog.txt: reorder usages

2 years agoMerge branch 'ab/install-symlinks'
Junio C Hamano [Mon, 9 Apr 2018 23:25:44 +0000 (08:25 +0900)]
Merge branch 'ab/install-symlinks'

The build procedure learned to optionally use symbolic links
(instead of hardlinks and copies) to install "git-foo" for built-in
commands, whose binaries are all identical.

* ab/install-symlinks:
  Makefile: optionally symlink libexec/git-core binaries to bin/git
  Makefile: add a gitexecdir_relative variable
  Makefile: fix broken bindir_relative variable

2 years agoMerge branch 'ml/filter-branch-no-op-error'
Junio C Hamano [Mon, 9 Apr 2018 23:25:44 +0000 (08:25 +0900)]
Merge branch 'ml/filter-branch-no-op-error'

"git filter-branch" learned to use a different exit code to allow
the callers to tell the case where there was no new commits to
rewrite from other error cases.

* ml/filter-branch-no-op-error:
  filter-branch: return 2 when nothing to rewrite

2 years agoMerge branch 'ab/pcre-v2'
Junio C Hamano [Mon, 9 Apr 2018 23:25:43 +0000 (08:25 +0900)]
Merge branch 'ab/pcre-v2'

Git can be built to use either v1 or v2 of the PCRE library, and so
far, the build-time configuration USE_LIBPCRE=YesPlease instructed
the build procedure to use v1, but now it means v2.  USE_LIBPCRE1
and USE_LIBPCRE2 can be used to explicitly choose which version to
use, as before.

* ab/pcre-v2:
  Makefile: make USE_LIBPCRE=YesPlease mean v2, not v1
  configure: detect redundant --with-libpcre & --with-libpcre1
  configure: fix a regression in PCRE v1 detection

2 years agoMerge branch 'ti/fetch-everything-local-optim'
Junio C Hamano [Mon, 9 Apr 2018 23:25:43 +0000 (08:25 +0900)]
Merge branch 'ti/fetch-everything-local-optim'

A "git fetch" from a repository with insane number of refs into a
repository that is already up-to-date still wasted too many cycles
making many lstat(2) calls to see if these objects at the tips
exist as loose objects locally.  These lstat(2) calls are optimized
away by enumerating all loose objects beforehand.

It is unknown if the new strategy negatively affects existing use
cases, fetching into a repository with many loose objects from a
repository with small number of refs.

* ti/fetch-everything-local-optim:
  fetch-pack.c: use oidset to check existence of loose object

2 years agoMerge branch 'en/rename-directory-detection'
Junio C Hamano [Mon, 9 Apr 2018 23:25:43 +0000 (08:25 +0900)]
Merge branch 'en/rename-directory-detection'

Rename detection logic in "diff" family that is used in "merge" has
learned to guess when all of x/a, x/b and x/c have moved to z/a,
z/b and z/c, it is likely that x/d added in the meantime would also
want to move to z/d by taking the hint that the entire directory
'x' moved to 'z'.  A bug causing dirty files involved in a rename
to be overwritten during merge has also been fixed as part of this
work.

* en/rename-directory-detection: (29 commits)
  merge-recursive: ensure we write updates for directory-renamed file
  merge-recursive: avoid spurious rename/rename conflict from dir renames
  directory rename detection: new testcases showcasing a pair of bugs
  merge-recursive: fix remaining directory rename + dirty overwrite cases
  merge-recursive: fix overwriting dirty files involved in renames
  merge-recursive: avoid clobbering untracked files with directory renames
  merge-recursive: apply necessary modifications for directory renames
  merge-recursive: when comparing files, don't include trees
  merge-recursive: check for file level conflicts then get new name
  merge-recursive: add computation of collisions due to dir rename & merging
  merge-recursive: check for directory level conflicts
  merge-recursive: add get_directory_renames()
  merge-recursive: make a helper function for cleanup for handle_renames
  merge-recursive: split out code for determining diff_filepairs
  merge-recursive: make !o->detect_rename codepath more obvious
  merge-recursive: fix leaks of allocated renames and diff_filepairs
  merge-recursive: introduce new functions to handle rename logic
  merge-recursive: move the get_renames() function
  directory rename detection: tests for handling overwriting dirty files
  directory rename detection: tests for handling overwriting untracked files
  ...

2 years agogit-svn: allow empty email-address using authors-prog and authors-file
Andreas Heiduk [Sat, 24 Mar 2018 10:20:46 +0000 (11:20 +0100)]
git-svn: allow empty email-address using authors-prog and authors-file

The email address in --authors-file and --authors-prog can be empty but
git-svn translated it into a fictional email address in the form

jondoe <jondoe@6aafaa21e0fb4338a68ab372a049893d>

containing the SVN repository UUID. Now git-svn behaves like git-commit:
If the email is *explicitly* set to the empty string using '<>', the
commit does not contain an email address, only the name:

jondoe <>

Allowing to remove the email address *intentionally* prevents automatic
systems from sending emails to those fictional addresses and avoids
cluttering the log output with unnecessary stuff.

Signed-off-by: Andreas Heiduk <asheiduk@gmail.com>
Signed-off-by: Eric Wong <e@80x24.org>
2 years agogit-svn: search --authors-prog in PATH too
Andreas Heiduk [Sun, 4 Mar 2018 11:22:36 +0000 (12:22 +0100)]
git-svn: search --authors-prog in PATH too

In 36db1eddf9 ("git-svn: add --authors-prog option", 2009-05-14) the path
to authors-prog was made absolute because git-svn changes the current
directory in some situations. This makes sense if the program is part of
the repository but prevents searching via $PATH.

The old behaviour is still retained, but if the file does not exists, then
authors-prog is searched for in $PATH as any other command.

Signed-off-by: Andreas Heiduk <asheiduk@gmail.com>
Signed-off-by: Eric Wong <e@80x24.org>
2 years agoGit 2.17 v2.17.0
Junio C Hamano [Mon, 2 Apr 2018 17:13:35 +0000 (10:13 -0700)]
Git 2.17

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge tag 'l10n-2.17.0-rnd1' of git://github.com/git-l10n/git-po
Junio C Hamano [Mon, 2 Apr 2018 17:12:38 +0000 (10:12 -0700)]
Merge tag 'l10n-2.17.0-rnd1' of git://github.com/git-l10n/git-po

l10n for Git 2.17.0 round 1

* tag 'l10n-2.17.0-rnd1' of git://github.com/git-l10n/git-po:
  l10n: de.po: translate 132 new messages
  l10n: zh_CN: review for git v2.17.0 l10n round 1
  l10n: zh_CN: for git v2.17.0 l10n round 1
  l10n: ko.po: Update Korean translation
  l10n: fr.po: v2.17.0 no fuzzy
  l10n: sv.po: Update Swedish translation (3376t0f0u)
  l10n: Update Catalan translation
  l10n: fr.po v2.17.0 round 1
  l10n: vi.po(3376t): Updated Vietnamese translation for v2.17
  l10n: bg.po: Updated Bulgarian translation (3376t)
  l10n: es.po: Update Spanish translation 2.17.0
  l10n: git.pot: v2.17.0 round 1 (132 new, 44 removed)
  l10n: es.po: fixes to Spanish translation

2 years agoMerge branch 'pw/add-p-single'
Junio C Hamano [Mon, 2 Apr 2018 17:10:54 +0000 (10:10 -0700)]
Merge branch 'pw/add-p-single'

Hotfix.

* pw/add-p-single:
  add -p: fix 2.17.0-rc* regression due to moved code

2 years agoadd -p: fix 2.17.0-rc* regression due to moved code
Ævar Arnfjörð Bjarmason [Sat, 31 Mar 2018 12:50:58 +0000 (12:50 +0000)]
add -p: fix 2.17.0-rc* regression due to moved code

Fix a regression in 88f6ffc1c2 ("add -p: only bind search key if
there's more than one hunk", 2018-02-13) which is present in
2.17.0-rc*, but not 2.16.0.

In Perl, regex variables like $1 always refer to the last regex
match. When the aforementioned change added a new regex match between
the old match and the corresponding code that was expecting $1, the $1
variable would always be undef, since the newly inserted regex match
doesn't have any captures.

As a result the "/" feature to search for a string in a hunk by regex
completely broke, on git.git:

    $ perl -pi -e 's/Git/Tig/g' README.md
    $ ./git --exec-path=$PWD add -p
    [..]
    Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]? s
    Split into 4 hunks.
    [...]
    Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]? /Many
    Use of uninitialized value $1 in string eq at /home/avar/g/git/git-add--interactive line 1568, <STDIN> line 1.
    search for regex? Many

I.e. the initial "/regex" command wouldn't work, and would always emit
a warning and ask again for a regex, now it works as intended again.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agol10n: de.po: translate 132 new messages
Ralf Thielow [Fri, 16 Mar 2018 17:41:16 +0000 (18:41 +0100)]
l10n: de.po: translate 132 new messages

Translate 132 new messages came from git.pot update in abc8de64d (l10n:
git.pot: v2.17.0 round 1 (132 new, 44 removed)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
2 years agoMerge branch 'jh/partial-clone'
Junio C Hamano [Thu, 29 Mar 2018 22:39:59 +0000 (15:39 -0700)]
Merge branch 'jh/partial-clone'

Hotfix.

* jh/partial-clone:
  upload-pack: disable object filtering when disabled by config
  unpack-trees: release oid_array after use in check_updates()

2 years agoupload-pack: disable object filtering when disabled by config
Jonathan Nieder [Wed, 28 Mar 2018 20:33:03 +0000 (13:33 -0700)]
upload-pack: disable object filtering when disabled by config

When upload-pack gained partial clone support (v2.17.0-rc0~132^2~12,
2017-12-08), it was guarded by the uploadpack.allowFilter config item
to allow server operators to control when they start supporting it.

That config item didn't go far enough, though: it controls whether the
'filter' capability is advertised, but if a (custom) client ignores
the capability advertisement and passes a filter specification anyway,
the server would handle that despite allowFilter being false.

This is particularly significant if a security bug is discovered in
this new experimental partial clone code.  Installations without
uploadpack.allowFilter ought not to be affected since they don't
intend to support partial clone, but they would be swept up into being
vulnerable.

Simplify and limit the attack surface by making uploadpack.allowFilter
disable the feature, not just the advertisement of it.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocredential: ignore SIGPIPE when writing to credential helpers
Erik E Brady [Thu, 29 Mar 2018 18:00:56 +0000 (11:00 -0700)]
credential: ignore SIGPIPE when writing to credential helpers

The credential subsystem can trigger SIGPIPE when writing to an
external helper if that helper closes its stdin before reading the
whole input. Normally this is rare, since helpers would need to read
that input to make a decision about how to respond, but:

1. It's reasonable to configure a helper which only handles "get"
   while ignoring "store".  Such a handler might not read stdin
   for "store", thereby rapidly closing stdin upon helper exit.

2. A broken or misbehaving helper might exit immediately. That's an
   error, but it's not reasonable for it to take down the parent Git
   process with SIGPIPE.

Even with such a helper, seeing this problem should be rare. Getting
SIGPIPE requires the helper racily exiting before we've written the
fairly small credential output.

Signed-off-by: Erik E Brady <brady@cisco.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agohttp: allow use of TLS 1.3
Loganaden Velvindron [Thu, 29 Mar 2018 10:14:18 +0000 (14:14 +0400)]
http: allow use of TLS 1.3

Add a tlsv1.3 option to http.sslVersion in addition to the existing
tlsv1.[012] options. libcurl has supported this since 7.52.0.

This requires OpenSSL 1.1.1 with TLS 1.3 enabled or curl built with
recent versions of NSS or BoringSSL as the TLS backend.

Signed-off-by: Loganaden Velvindron <logan@hackers.mu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>