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>
This commit is contained in:

committed by
Junio C Hamano

parent
84d06cdc06
commit
4fe788b1b0
12
fetch-pack.c
12
fetch-pack.c
@ -1129,9 +1129,11 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
|
||||
if (args->deepen)
|
||||
setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
|
||||
NULL);
|
||||
else if (si->nr_ours || si->nr_theirs)
|
||||
else if (si->nr_ours || si->nr_theirs) {
|
||||
if (args->reject_shallow_remote)
|
||||
die(_("source repository is shallow, reject to clone."));
|
||||
alternate_shallow_file = setup_temporary_shallow(si->shallow);
|
||||
else
|
||||
} else
|
||||
alternate_shallow_file = NULL;
|
||||
if (get_pack(args, fd, pack_lockfiles, NULL, sought, nr_sought,
|
||||
&gitmodules_oids))
|
||||
@ -1498,10 +1500,12 @@ static void receive_shallow_info(struct fetch_pack_args *args,
|
||||
* rejected (unless --update-shallow is set); do the same.
|
||||
*/
|
||||
prepare_shallow_info(si, shallows);
|
||||
if (si->nr_ours || si->nr_theirs)
|
||||
if (si->nr_ours || si->nr_theirs) {
|
||||
if (args->reject_shallow_remote)
|
||||
die(_("source repository is shallow, reject to clone."));
|
||||
alternate_shallow_file =
|
||||
setup_temporary_shallow(si->shallow);
|
||||
else
|
||||
} else
|
||||
alternate_shallow_file = NULL;
|
||||
} else {
|
||||
alternate_shallow_file = NULL;
|
||||
|
Reference in New Issue
Block a user