diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2016-06-12 17:54:04 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-06-13 14:38:16 -0700 |
commit | a45a260086b395729e3c26c9680602e1352184b5 (patch) | |
tree | 4fab7f0bedb5b0c16ded43c7a12465159e941240 /builtin/fetch.c | |
parent | 269a7a831636b7c7a453f6621fc8b440ff28a408 (diff) | |
download | git-a45a260086b395729e3c26c9680602e1352184b5.tar.gz |
fetch: define shallow boundary with --shallow-exclude
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/fetch.c')
-rw-r--r-- | builtin/fetch.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c index 283aa95aec..147504dd51 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -41,6 +41,7 @@ static int max_children = 1; static const char *depth; static const char *deepen_since; static const char *upload_pack; +static struct string_list deepen_not = STRING_LIST_INIT_NODUP; static struct strbuf default_rla = STRBUF_INIT; static struct transport *gtransport; static struct transport *gsecondary; @@ -118,6 +119,8 @@ static struct option builtin_fetch_options[] = { N_("deepen history of shallow clone")), OPT_STRING(0, "shallow-since", &deepen_since, N_("time"), N_("deepen history of shallow repository based on time")), + OPT_STRING_LIST(0, "shallow-exclude", &deepen_not, N_("revision"), + N_("deepen history of shallow clone by excluding rev")), { OPTION_SET_INT, 0, "unshallow", &unshallow, NULL, N_("convert to a complete repository"), PARSE_OPT_NONEG | PARSE_OPT_NOARG, NULL, 1 }, @@ -875,6 +878,9 @@ static struct transport *prepare_transport(struct remote *remote, int deepen) set_option(transport, TRANS_OPT_DEPTH, depth); if (deepen && deepen_since) set_option(transport, TRANS_OPT_DEEPEN_SINCE, deepen_since); + if (deepen && deepen_not.nr) + set_option(transport, TRANS_OPT_DEEPEN_NOT, + (const char *)&deepen_not); if (update_shallow) set_option(transport, TRANS_OPT_UPDATE_SHALLOW, "yes"); return transport; @@ -889,9 +895,10 @@ static void backfill_tags(struct transport *transport, struct ref *ref_map) * when remote helper is used (setting it to an empty string * is not unsetting). We could extend the remote helper * protocol for that, but for now, just force a new connection - * without deepen-since. + * without deepen-since. Similar story for deepen-not. */ - cannot_reuse = transport->cannot_reuse || deepen_since; + cannot_reuse = transport->cannot_reuse || + deepen_since || deepen_not.nr; if (cannot_reuse) { gsecondary = prepare_transport(transport->remote, 0); transport = gsecondary; @@ -1182,7 +1189,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) /* no need to be strict, transport_set_option() will validate it again */ if (depth && atoi(depth) < 1) die(_("depth %s is not a positive number"), depth); - if (depth || deepen_since) + if (depth || deepen_since || deepen_not.nr) deepen = 1; if (recurse_submodules != RECURSE_SUBMODULES_OFF) { |