|
|
@ -10,6 +10,7 @@ |
|
|
|
#include "sideband.h" |
|
|
|
#include "sideband.h" |
|
|
|
#include "argv-array.h" |
|
|
|
#include "argv-array.h" |
|
|
|
#include "credential.h" |
|
|
|
#include "credential.h" |
|
|
|
|
|
|
|
#include "sha1-array.h" |
|
|
|
|
|
|
|
|
|
|
|
static struct remote *remote; |
|
|
|
static struct remote *remote; |
|
|
|
/* always ends with a trailing slash */ |
|
|
|
/* always ends with a trailing slash */ |
|
|
@ -20,6 +21,8 @@ struct options { |
|
|
|
unsigned long depth; |
|
|
|
unsigned long depth; |
|
|
|
unsigned progress : 1, |
|
|
|
unsigned progress : 1, |
|
|
|
check_self_contained_and_connected : 1, |
|
|
|
check_self_contained_and_connected : 1, |
|
|
|
|
|
|
|
cloning : 1, |
|
|
|
|
|
|
|
update_shallow : 1, |
|
|
|
followtags : 1, |
|
|
|
followtags : 1, |
|
|
|
dry_run : 1, |
|
|
|
dry_run : 1, |
|
|
|
thin : 1; |
|
|
|
thin : 1; |
|
|
@ -87,8 +90,23 @@ static int set_option(const char *name, const char *value) |
|
|
|
string_list_append(&cas_options, val.buf); |
|
|
|
string_list_append(&cas_options, val.buf); |
|
|
|
strbuf_release(&val); |
|
|
|
strbuf_release(&val); |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} else if (!strcmp(name, "cloning")) { |
|
|
|
else { |
|
|
|
if (!strcmp(value, "true")) |
|
|
|
|
|
|
|
options.cloning = 1; |
|
|
|
|
|
|
|
else if (!strcmp(value, "false")) |
|
|
|
|
|
|
|
options.cloning = 0; |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} else if (!strcmp(name, "update-shallow")) { |
|
|
|
|
|
|
|
if (!strcmp(value, "true")) |
|
|
|
|
|
|
|
options.update_shallow = 1; |
|
|
|
|
|
|
|
else if (!strcmp(value, "false")) |
|
|
|
|
|
|
|
options.update_shallow = 0; |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} else { |
|
|
|
return 1 /* unsupported */; |
|
|
|
return 1 /* unsupported */; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -99,6 +117,7 @@ struct discovery { |
|
|
|
char *buf; |
|
|
|
char *buf; |
|
|
|
size_t len; |
|
|
|
size_t len; |
|
|
|
struct ref *refs; |
|
|
|
struct ref *refs; |
|
|
|
|
|
|
|
struct sha1_array shallow; |
|
|
|
unsigned proto_git : 1; |
|
|
|
unsigned proto_git : 1; |
|
|
|
}; |
|
|
|
}; |
|
|
|
static struct discovery *last_discovery; |
|
|
|
static struct discovery *last_discovery; |
|
|
@ -107,7 +126,7 @@ static struct ref *parse_git_refs(struct discovery *heads, int for_push) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct ref *list = NULL; |
|
|
|
struct ref *list = NULL; |
|
|
|
get_remote_heads(-1, heads->buf, heads->len, &list, |
|
|
|
get_remote_heads(-1, heads->buf, heads->len, &list, |
|
|
|
for_push ? REF_NORMAL : 0, NULL, NULL); |
|
|
|
for_push ? REF_NORMAL : 0, NULL, &heads->shallow); |
|
|
|
return list; |
|
|
|
return list; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -168,6 +187,7 @@ static void free_discovery(struct discovery *d) |
|
|
|
if (d) { |
|
|
|
if (d) { |
|
|
|
if (d == last_discovery) |
|
|
|
if (d == last_discovery) |
|
|
|
last_discovery = NULL; |
|
|
|
last_discovery = NULL; |
|
|
|
|
|
|
|
free(d->shallow.sha1); |
|
|
|
free(d->buf_alloc); |
|
|
|
free(d->buf_alloc); |
|
|
|
free_refs(d->refs); |
|
|
|
free_refs(d->refs); |
|
|
|
free(d); |
|
|
|
free(d); |
|
|
@ -688,7 +708,7 @@ static int fetch_git(struct discovery *heads, |
|
|
|
struct strbuf preamble = STRBUF_INIT; |
|
|
|
struct strbuf preamble = STRBUF_INIT; |
|
|
|
char *depth_arg = NULL; |
|
|
|
char *depth_arg = NULL; |
|
|
|
int argc = 0, i, err; |
|
|
|
int argc = 0, i, err; |
|
|
|
const char *argv[16]; |
|
|
|
const char *argv[17]; |
|
|
|
|
|
|
|
|
|
|
|
argv[argc++] = "fetch-pack"; |
|
|
|
argv[argc++] = "fetch-pack"; |
|
|
|
argv[argc++] = "--stateless-rpc"; |
|
|
|
argv[argc++] = "--stateless-rpc"; |
|
|
@ -704,6 +724,10 @@ static int fetch_git(struct discovery *heads, |
|
|
|
} |
|
|
|
} |
|
|
|
if (options.check_self_contained_and_connected) |
|
|
|
if (options.check_self_contained_and_connected) |
|
|
|
argv[argc++] = "--check-self-contained-and-connected"; |
|
|
|
argv[argc++] = "--check-self-contained-and-connected"; |
|
|
|
|
|
|
|
if (options.cloning) |
|
|
|
|
|
|
|
argv[argc++] = "--cloning"; |
|
|
|
|
|
|
|
if (options.update_shallow) |
|
|
|
|
|
|
|
argv[argc++] = "--update-shallow"; |
|
|
|
if (!options.progress) |
|
|
|
if (!options.progress) |
|
|
|
argv[argc++] = "--no-progress"; |
|
|
|
argv[argc++] = "--no-progress"; |
|
|
|
if (options.depth) { |
|
|
|
if (options.depth) { |
|
|
|