Skip to content

Commit

Permalink
Revert "Merge branch 'fc/transport-helper-sync-error-fix'"
Browse files Browse the repository at this point in the history
This reverts commit d508e4a,
reversing changes made to e425521.

The author of the original topic says he broke the upcoming 2.0
release with something that relates to "synchronization crash
regression" while refusing to give further specifics, so this would
unfortunately be the safest option for the upcoming release.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed May 20, 2014
1 parent b28aeab commit 10e1fee
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 71 deletions.
4 changes: 0 additions & 4 deletions Documentation/RelNotes/2.0.0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,6 @@ UI, Workflows & Features
* "git grep" learned to behave in a way similar to native grep when
"-h" (no header) and "-c" (count) options are given.

* "git push" via transport-helper interface (e.g. remote-hg) has
been updated to allow forced ref updates in a way similar to the
natively supported transports.

* The "simple" mode is the default for "git push".

* "git add -u" and "git add -A", when run without any pathspec, is a
Expand Down
31 changes: 8 additions & 23 deletions t/t5801-remote-helpers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -212,42 +212,27 @@ test_expect_success 'push update refs failure' '
echo "update fail" >>file &&
git commit -a -m "update fail" &&
git rev-parse --verify testgit/origin/heads/update >expect &&
test_expect_code 1 env GIT_REMOTE_TESTGIT_FAILURE="non-fast forward" \
git push origin update &&
GIT_REMOTE_TESTGIT_PUSH_ERROR="non-fast forward" &&
export GIT_REMOTE_TESTGIT_PUSH_ERROR &&
test_expect_code 1 git push origin update &&
git rev-parse --verify testgit/origin/heads/update >actual &&
test_cmp expect actual
)
'

clean_mark () {
cut -f 2 -d ' ' "$1" |
git cat-file --batch-check |
grep commit |
sort >$(basename "$1")
}

cmp_marks () {
test_when_finished "rm -rf git.marks testgit.marks" &&
clean_mark ".git/testgit/$1/git.marks" &&
clean_mark ".git/testgit/$1/testgit.marks" &&
test_cmp git.marks testgit.marks
}

test_expect_success 'proper failure checks for fetching' '
(cd local &&
test_must_fail env GIT_REMOTE_TESTGIT_FAILURE=1 git fetch 2>error &&
(GIT_REMOTE_TESTGIT_FAILURE=1 &&
export GIT_REMOTE_TESTGIT_FAILURE &&
cd local &&
test_must_fail git fetch 2> error &&
cat error &&
grep -q "Error while running fast-import" error
)
'

test_expect_success 'proper failure checks for pushing' '
(cd local &&
git checkout -b crash master &&
echo crash >>file &&
git commit -a -m crash &&
test_must_fail env GIT_REMOTE_TESTGIT_FAILURE=1 git push --all &&
cmp_marks origin
test_must_fail env GIT_REMOTE_TESTGIT_FAILURE=1 git push --all
)
'

Expand Down
73 changes: 29 additions & 44 deletions transport-helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ static int recvline_fh(FILE *helper, struct strbuf *buffer, const char *name)
if (strbuf_getline(buffer, helper, '\n') == EOF) {
if (debug)
fprintf(stderr, "Debug: Remote helper quit.\n");
return 1;
exit(128);
}

if (debug)
Expand All @@ -71,6 +71,12 @@ static int recvline(struct helper_data *helper, struct strbuf *buffer)
return recvline_fh(helper->out, buffer, helper->name);
}

static void xchgline(struct helper_data *helper, struct strbuf *buffer)
{
sendline(helper, buffer);
recvline(helper, buffer);
}

static void write_constant(int fd, const char *str)
{
if (debug)
Expand Down Expand Up @@ -157,8 +163,7 @@ static struct child_process *get_helper(struct transport *transport)
while (1) {
const char *capname;
int mandatory = 0;
if (recvline(data, &buf))
exit(128);
recvline(data, &buf);

if (!*buf.buf)
break;
Expand Down Expand Up @@ -195,9 +200,15 @@ static struct child_process *get_helper(struct transport *transport)
} else if (!strcmp(capname, "signed-tags")) {
data->signed_tags = 1;
} else if (starts_with(capname, "export-marks ")) {
data->export_marks = xstrdup(capname + strlen("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 (starts_with(capname, "import-marks")) {
data->import_marks = xstrdup(capname + strlen("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 (starts_with(capname, "no-private-update")) {
data->no_private_update = 1;
} else if (mandatory) {
Expand Down Expand Up @@ -296,9 +307,7 @@ static int set_helper_option(struct transport *transport,
quote_c_style(value, &buf, NULL, 0);
strbuf_addch(&buf, '\n');

sendline(data, &buf);
if (recvline(data, &buf))
exit(128);
xchgline(data, &buf);

if (!strcmp(buf.buf, "ok"))
ret = 0;
Expand Down Expand Up @@ -370,8 +379,7 @@ static int fetch_with_fetch(struct transport *transport,
sendline(data, &buf);

while (1) {
if (recvline(data, &buf))
exit(128);
recvline(data, &buf);

if (starts_with(buf.buf, "lock ")) {
const char *name = buf.buf + 5;
Expand Down Expand Up @@ -422,8 +430,6 @@ static int get_exporter(struct transport *transport,
struct helper_data *data = transport->data;
struct child_process *helper = get_helper(transport);
int argc = 0, i;
struct strbuf tmp = STRBUF_INIT;

memset(fastexport, 0, sizeof(*fastexport));

/* we need to duplicate helper->in because we want to use it after
Expand All @@ -434,14 +440,10 @@ static int get_exporter(struct transport *transport,
fastexport->argv[argc++] = "--use-done-feature";
fastexport->argv[argc++] = data->signed_tags ?
"--signed-tags=verbatim" : "--signed-tags=warn-strip";
if (data->export_marks) {
strbuf_addf(&tmp, "--export-marks=%s.tmp", data->export_marks);
fastexport->argv[argc++] = strbuf_detach(&tmp, NULL);
}
if (data->import_marks) {
strbuf_addf(&tmp, "--import-marks=%s", data->import_marks);
fastexport->argv[argc++] = strbuf_detach(&tmp, NULL);
}
if (data->export_marks)
fastexport->argv[argc++] = data->export_marks;
if (data->import_marks)
fastexport->argv[argc++] = data->import_marks;

for (i = 0; i < revlist_args->nr; i++)
fastexport->argv[argc++] = revlist_args->items[i].string;
Expand Down Expand Up @@ -561,9 +563,7 @@ static int process_connect_service(struct transport *transport,
goto exit;

sendline(data, &cmdbuf);
if (recvline_fh(input, &cmdbuf, name))
exit(128);

recvline_fh(input, &cmdbuf, name);
if (!strcmp(cmdbuf.buf, "")) {
data->no_disconnect_req = 1;
if (debug)
Expand Down Expand Up @@ -739,22 +739,16 @@ static int push_update_ref_status(struct strbuf *buf,
return !(status == REF_STATUS_OK);
}

static int push_update_refs_status(struct helper_data *data,
static void push_update_refs_status(struct helper_data *data,
struct ref *remote_refs,
int flags)
{
struct strbuf buf = STRBUF_INIT;
struct ref *ref = remote_refs;
int ret = 0;

for (;;) {
char *private;

if (recvline(data, &buf)) {
ret = 1;
break;
}

recvline(data, &buf);
if (!buf.len)
break;

Expand All @@ -772,7 +766,6 @@ static int push_update_refs_status(struct helper_data *data,
free(private);
}
strbuf_release(&buf);
return ret;
}

static int push_refs_with_push(struct transport *transport,
Expand Down Expand Up @@ -853,7 +846,8 @@ static int push_refs_with_push(struct transport *transport,
sendline(data, &buf);
strbuf_release(&buf);

return push_update_refs_status(data, remote_refs, flags);
push_update_refs_status(data, remote_refs, flags);
return 0;
}

static int push_refs_with_export(struct transport *transport,
Expand Down Expand Up @@ -911,15 +905,7 @@ static int push_refs_with_export(struct transport *transport,

if (finish_command(&exporter))
die("Error while running fast-export");
if (push_update_refs_status(data, remote_refs, flags))
return 1;

if (data->export_marks) {
strbuf_addf(&buf, "%s.tmp", data->export_marks);
rename(buf.buf, data->export_marks);
strbuf_release(&buf);
}

push_update_refs_status(data, remote_refs, flags);
return 0;
}

Expand Down Expand Up @@ -988,8 +974,7 @@ static struct ref *get_refs_list(struct transport *transport, int for_push)

while (1) {
char *eov, *eon;
if (recvline(data, &buf))
exit(128);
recvline(data, &buf);

if (!*buf.buf)
break;
Expand Down

0 comments on commit 10e1fee

Please sign in to comment.