summaryrefslogtreecommitdiff
path: root/transport-helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'transport-helper.c')
-rw-r--r--transport-helper.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/transport-helper.c b/transport-helper.c
index 705dce7e04..86e1679c1e 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -190,7 +190,7 @@ static struct child_process *get_helper(struct transport *transport)
data->export = 1;
else if (!strcmp(capname, "check-connectivity"))
data->check_connectivity = 1;
- else if (!data->refspecs && !prefixcmp(capname, "refspec ")) {
+ else if (!data->refspecs && starts_with(capname, "refspec ")) {
ALLOC_GROW(refspecs,
refspec_nr + 1,
refspec_alloc);
@@ -199,17 +199,17 @@ static struct child_process *get_helper(struct transport *transport)
data->connect = 1;
} else if (!strcmp(capname, "signed-tags")) {
data->signed_tags = 1;
- } else if (!prefixcmp(capname, "export-marks ")) {
+ } else if (starts_with(capname, "export-marks ")) {
struct strbuf arg = STRBUF_INIT;
strbuf_addstr(&arg, "--export-marks=");
strbuf_addstr(&arg, capname + strlen("export-marks "));
data->export_marks = strbuf_detach(&arg, NULL);
- } else if (!prefixcmp(capname, "import-marks")) {
+ } else if (starts_with(capname, "import-marks")) {
struct strbuf arg = STRBUF_INIT;
strbuf_addstr(&arg, "--import-marks=");
strbuf_addstr(&arg, capname + strlen("import-marks "));
data->import_marks = strbuf_detach(&arg, NULL);
- } else if (!prefixcmp(capname, "no-private-update")) {
+ } else if (starts_with(capname, "no-private-update")) {
data->no_private_update = 1;
} else if (mandatory) {
die("Unknown mandatory capability %s. This remote "
@@ -269,6 +269,7 @@ static const char *unsupported_options[] = {
TRANS_OPT_THIN,
TRANS_OPT_KEEP
};
+
static const char *boolean_options[] = {
TRANS_OPT_THIN,
TRANS_OPT_KEEP,
@@ -310,7 +311,7 @@ static int set_helper_option(struct transport *transport,
if (!strcmp(buf.buf, "ok"))
ret = 0;
- else if (!prefixcmp(buf.buf, "error")) {
+ else if (starts_with(buf.buf, "error")) {
ret = -1;
} else if (!strcmp(buf.buf, "unsupported"))
ret = 1;
@@ -359,6 +360,12 @@ static int fetch_with_fetch(struct transport *transport,
data->transport_options.check_self_contained_and_connected)
set_helper_option(transport, "check-connectivity", "true");
+ if (transport->cloning)
+ set_helper_option(transport, "cloning", "true");
+
+ if (data->transport_options.update_shallow)
+ set_helper_option(transport, "update-shallow", "true");
+
for (i = 0; i < nr_heads; i++) {
const struct ref *posn = to_fetch[i];
if (posn->status & REF_STATUS_UPTODATE)
@@ -374,7 +381,7 @@ static int fetch_with_fetch(struct transport *transport,
while (1) {
recvline(data, &buf);
- if (!prefixcmp(buf.buf, "lock ")) {
+ if (starts_with(buf.buf, "lock ")) {
const char *name = buf.buf + 5;
if (transport->pack_lockfile)
warning("%s also locked %s", data->name, name);
@@ -645,10 +652,10 @@ static int push_update_ref_status(struct strbuf *buf,
char *refname, *msg;
int status, forced = 0;
- if (!prefixcmp(buf->buf, "ok ")) {
+ if (starts_with(buf->buf, "ok ")) {
status = REF_STATUS_OK;
refname = buf->buf + 3;
- } else if (!prefixcmp(buf->buf, "error ")) {
+ } else if (starts_with(buf->buf, "error ")) {
status = REF_STATUS_REMOTE_REJECT;
refname = buf->buf + 6;
} else
@@ -1137,9 +1144,8 @@ static int udt_do_write(struct unidirectional_transfer *t)
return 0; /* Nothing to write. */
transfer_debug("%s is writable", t->dest_name);
- bytes = write(t->dest, t->buf, t->bufuse);
- if (bytes < 0 && errno != EWOULDBLOCK && errno != EAGAIN &&
- errno != EINTR) {
+ bytes = xwrite(t->dest, t->buf, t->bufuse);
+ if (bytes < 0 && errno != EWOULDBLOCK) {
error("write(%s) failed: %s", t->dest_name, strerror(errno));
return -1;
} else if (bytes > 0) {