diff options
author | Li Linchao <lilinchao@oschina.cn> | 2021-04-01 10:46:59 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-04-01 12:58:58 -0700 |
commit | 4fe788b1b0ee6150173580d8fa70e7d5788cf7d3 (patch) | |
tree | 6fb69c5ec68dcfa0bf1e0887726a99cc8749dfa5 /transport.c | |
parent | 84d06cdc06389ae7c462434cb7b1db0980f63860 (diff) | |
download | git-4fe788b1b0ee6150173580d8fa70e7d5788cf7d3.tar.gz |
builtin/clone.c: add --reject-shallow option
In some scenarios, users may want more history than the repository
offered for cloning, which happens to be a shallow repository, can
give them. But because users don't know it is a shallow repository
until they download it to local, we may want to refuse to clone
this kind of repository, without creating any unnecessary files.
The '--depth=x' option cannot be used as a solution; the source may
be deep enough to give us 'x' commits when cloned, but the user may
later need to deepen the history to arbitrary depth.
Teach '--reject-shallow' option to "git clone" to abort as soon as
we find out that we are cloning from a shallow repository.
Signed-off-by: Li Linchao <lilinchao@oschina.cn>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'transport.c')
-rw-r--r-- | transport.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/transport.c b/transport.c index 1c4ab676d1..b231894f90 100644 --- a/transport.c +++ b/transport.c @@ -236,6 +236,9 @@ static int set_git_option(struct git_transport_options *opts, list_objects_filter_die_if_populated(&opts->filter_options); parse_list_objects_filter(&opts->filter_options, value); return 0; + } else if (!strcmp(name, TRANS_OPT_REJECT_SHALLOW)) { + opts->reject_shallow = !!value; + return 0; } return 1; } @@ -370,6 +373,7 @@ static int fetch_refs_via_pack(struct transport *transport, args.stateless_rpc = transport->stateless_rpc; args.server_options = transport->server_options; args.negotiation_tips = data->options.negotiation_tips; + args.reject_shallow_remote = transport->smart_options->reject_shallow; if (!data->got_remote_heads) { int i; |