mirror of
https://github.com/git/git
synced 2024-11-05 18:59:29 +00:00
dfa33a298d
For partial clones, doing a full connectivity check is wasteful; we skip promisor objects (which, for a partial clone, is all known objects), and enumerating them all to exclude them from the connectivity check can take a significant amount of time on large repos. At most, we want to make sure that we get the objects referred to by any wanted refs. For partial clones, just check that these objects were transferred. Signed-off-by: Josh Steadmon <steadmon@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
73 lines
2 KiB
C
73 lines
2 KiB
C
#ifndef CONNECTED_H
|
|
#define CONNECTED_H
|
|
|
|
struct object_id;
|
|
struct transport;
|
|
|
|
/*
|
|
* Take callback data, and return next object name in the buffer.
|
|
* When called after returning the name for the last object, return -1
|
|
* to signal EOF, otherwise return 0.
|
|
*/
|
|
typedef int (*oid_iterate_fn)(void *, struct object_id *oid);
|
|
|
|
/*
|
|
* Named-arguments struct for check_connected. All arguments are
|
|
* optional, and can be left to defaults as set by CHECK_CONNECTED_INIT.
|
|
*/
|
|
struct check_connected_options {
|
|
/* Avoid printing any errors to stderr. */
|
|
int quiet;
|
|
|
|
/* --shallow-file to pass to rev-list sub-process */
|
|
const char *shallow_file;
|
|
|
|
/* Transport whose objects we are checking, if available. */
|
|
struct transport *transport;
|
|
|
|
/*
|
|
* If non-zero, send error messages to this descriptor rather
|
|
* than stderr. The descriptor is closed before check_connected
|
|
* returns.
|
|
*/
|
|
int err_fd;
|
|
|
|
/* If non-zero, show progress as we traverse the objects. */
|
|
int progress;
|
|
|
|
/*
|
|
* Insert these variables into the environment of the child process.
|
|
*/
|
|
const char **env;
|
|
|
|
/*
|
|
* If non-zero, check the ancestry chain completely, not stopping at
|
|
* any existing ref. This is necessary when deepening existing refs
|
|
* during a fetch.
|
|
*/
|
|
unsigned is_deepening_fetch : 1;
|
|
|
|
/*
|
|
* If non-zero, only check the top-level objects referenced by the
|
|
* wanted refs (passed in as cb_data). This is useful for partial
|
|
* clones, where enumerating and excluding all promisor objects is very
|
|
* slow and the commit-walk itself becomes a no-op.
|
|
*/
|
|
unsigned check_refs_only : 1;
|
|
};
|
|
|
|
#define CHECK_CONNECTED_INIT { 0 }
|
|
|
|
/*
|
|
* Make sure that all given objects and all objects reachable from them
|
|
* either exist in our object store or (if the repository is a partial
|
|
* clone) are promised to be available.
|
|
*
|
|
* Return 0 if Ok, non zero otherwise (i.e. some missing objects)
|
|
*
|
|
* If "opt" is NULL, behaves as if CHECK_CONNECTED_INIT was passed.
|
|
*/
|
|
int check_connected(oid_iterate_fn fn, void *cb_data,
|
|
struct check_connected_options *opt);
|
|
|
|
#endif /* CONNECTED_H */
|