Merge branch 'nd/shallow-deepen'
The existing "git fetch --depth=<n>" option was hard to use correctly when making the history of an existing shallow clone deeper. A new option, "--deepen=<n>", has been added to make this easier to use. "git clone" also learned "--shallow-since=<date>" and "--shallow-exclude=<tag>" options to make it easier to specify "I am interested only in the recent N months worth of history" and "Give me only the history since that version". * nd/shallow-deepen: (27 commits) fetch, upload-pack: --deepen=N extends shallow boundary by N commits upload-pack: add get_reachable_list() upload-pack: split check_unreachable() in two, prep for get_reachable_list() t5500, t5539: tests for shallow depth excluding a ref clone: define shallow clone boundary with --shallow-exclude fetch: define shallow boundary with --shallow-exclude upload-pack: support define shallow boundary by excluding revisions refs: add expand_ref() t5500, t5539: tests for shallow depth since a specific date clone: define shallow clone boundary based on time with --shallow-since fetch: define shallow boundary with --shallow-since upload-pack: add deepen-since to cut shallow repos based on time shallow.c: implement a generic shallow boundary finder based on rev-list fetch-pack: use a separate flag for fetch in deepening mode fetch-pack.c: mark strings for translating fetch-pack: use a common function for verbose printing fetch-pack: use skip_prefix() instead of starts_with() upload-pack: move rev-list code out of check_non_tip() upload-pack: make check_non_tip() clean things up on error upload-pack: tighten number parsing at "deepen" lines ...
This commit is contained in:
@ -41,9 +41,11 @@ static const char * const builtin_clone_usage[] = {
|
||||
static int option_no_checkout, option_bare, option_mirror, option_single_branch = -1;
|
||||
static int option_local = -1, option_no_hardlinks, option_shared, option_recursive;
|
||||
static int option_shallow_submodules;
|
||||
static char *option_template, *option_depth;
|
||||
static int deepen;
|
||||
static char *option_template, *option_depth, *option_since;
|
||||
static char *option_origin = NULL;
|
||||
static char *option_branch = NULL;
|
||||
static struct string_list option_not = STRING_LIST_INIT_NODUP;
|
||||
static const char *real_git_dir;
|
||||
static char *option_upload_pack = "git-upload-pack";
|
||||
static int option_verbosity;
|
||||
@ -94,6 +96,10 @@ static struct option builtin_clone_options[] = {
|
||||
N_("path to git-upload-pack on the remote")),
|
||||
OPT_STRING(0, "depth", &option_depth, N_("depth"),
|
||||
N_("create a shallow clone of that depth")),
|
||||
OPT_STRING(0, "shallow-since", &option_since, N_("time"),
|
||||
N_("create a shallow clone since a specific time")),
|
||||
OPT_STRING_LIST(0, "shallow-exclude", &option_not, N_("revision"),
|
||||
N_("deepen history of shallow clone by excluding rev")),
|
||||
OPT_BOOL(0, "single-branch", &option_single_branch,
|
||||
N_("clone only one branch, HEAD or --branch")),
|
||||
OPT_BOOL(0, "shallow-submodules", &option_shallow_submodules,
|
||||
@ -861,8 +867,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
usage_msg_opt(_("You must specify a repository to clone."),
|
||||
builtin_clone_usage, builtin_clone_options);
|
||||
|
||||
if (option_depth || option_since || option_not.nr)
|
||||
deepen = 1;
|
||||
if (option_single_branch == -1)
|
||||
option_single_branch = option_depth ? 1 : 0;
|
||||
option_single_branch = deepen ? 1 : 0;
|
||||
|
||||
if (option_mirror)
|
||||
option_bare = 1;
|
||||
@ -1006,6 +1014,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
if (is_local) {
|
||||
if (option_depth)
|
||||
warning(_("--depth is ignored in local clones; use file:// instead."));
|
||||
if (option_since)
|
||||
warning(_("--shallow-since is ignored in local clones; use file:// instead."));
|
||||
if (option_not.nr)
|
||||
warning(_("--shallow-exclude is ignored in local clones; use file:// instead."));
|
||||
if (!access(mkpath("%s/shallow", path), F_OK)) {
|
||||
if (option_local > 0)
|
||||
warning(_("source repository is shallow, ignoring --local"));
|
||||
@ -1024,6 +1036,12 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
if (option_depth)
|
||||
transport_set_option(transport, TRANS_OPT_DEPTH,
|
||||
option_depth);
|
||||
if (option_since)
|
||||
transport_set_option(transport, TRANS_OPT_DEEPEN_SINCE,
|
||||
option_since);
|
||||
if (option_not.nr)
|
||||
transport_set_option(transport, TRANS_OPT_DEEPEN_NOT,
|
||||
(const char *)&option_not);
|
||||
if (option_single_branch)
|
||||
transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
|
||||
|
||||
@ -1031,7 +1049,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
transport_set_option(transport, TRANS_OPT_UPLOADPACK,
|
||||
option_upload_pack);
|
||||
|
||||
if (transport->smart_options && !option_depth)
|
||||
if (transport->smart_options && !deepen)
|
||||
transport->smart_options->check_self_contained_and_connected = 1;
|
||||
|
||||
refs = transport_get_remote_refs(transport);
|
||||
|
Reference in New Issue
Block a user