diff options
Diffstat (limited to 'fetch-pack.c')
-rw-r--r-- | fetch-pack.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/fetch-pack.c b/fetch-pack.c index a2f25c1849..ad7d00f09c 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -22,6 +22,7 @@ static int unpack_limit = 100; static int prefer_ofs_delta = 1; static int no_done; static int deepen_since_ok; +static int deepen_not_ok; static int fetch_fsck_objects = -1; static int transfer_fsck_objects = -1; static int agent_supported; @@ -328,6 +329,7 @@ static int find_common(struct fetch_pack_args *args, if (args->include_tag) strbuf_addstr(&c, " include-tag"); if (prefer_ofs_delta) strbuf_addstr(&c, " ofs-delta"); if (deepen_since_ok) strbuf_addstr(&c, " deepen-since"); + if (deepen_not_ok) strbuf_addstr(&c, " deepen-not"); if (agent_supported) strbuf_addf(&c, " agent=%s", git_user_agent_sanitized()); packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf); @@ -351,6 +353,13 @@ static int find_common(struct fetch_pack_args *args, unsigned long max_age = approxidate(args->deepen_since); packet_buf_write(&req_buf, "deepen-since %lu", max_age); } + if (args->deepen_not) { + int i; + for (i = 0; i < args->deepen_not->nr; i++) { + struct string_list_item *s = args->deepen_not->items + i; + packet_buf_write(&req_buf, "deepen-not %s", s->string); + } + } packet_buf_flush(&req_buf); state_len = req_buf.len; @@ -818,7 +827,7 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args, if ((args->depth > 0 || is_repository_shallow()) && !server_supports("shallow")) die(_("Server does not support shallow clients")); - if (args->depth > 0 || args->deepen_since) + if (args->depth > 0 || args->deepen_since || args->deepen_not) args->deepen = 1; if (server_supports("multi_ack_detailed")) { print_verbose(args, _("Server supports multi_ack_detailed")); @@ -870,6 +879,10 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args, deepen_since_ok = 1; else if (args->deepen_since) die(_("Server does not support --shallow-since")); + if (server_supports("deepen-not")) + deepen_not_ok = 1; + else if (args->deepen_not) + die(_("Server does not support --shallow-exclude")); if (everything_local(args, &ref, sought, nr_sought)) { packet_flush(fd[1]); |