From 10e1feebb454d99eb6644cc53b94255f40e6fe9c Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 14 May 2014 12:06:35 -0700 Subject: Revert "Merge branch 'fc/transport-helper-sync-error-fix'" This reverts commit d508e4a8e2391ae2596403b6478d01cf3d5f928f, reversing changes made to e42552135a2a396f37053a89f44952ea907870b2. 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 --- Documentation/RelNotes/2.0.0.txt | 4 --- t/t5801-remote-helpers.sh | 31 +++++------------ transport-helper.c | 73 ++++++++++++++++------------------------ 3 files changed, 37 insertions(+), 71 deletions(-) diff --git a/Documentation/RelNotes/2.0.0.txt b/Documentation/RelNotes/2.0.0.txt index 6e628d479..97f7df04e 100644 --- a/Documentation/RelNotes/2.0.0.txt +++ b/Documentation/RelNotes/2.0.0.txt @@ -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 diff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh index a00a66076..25fd2e7f4 100755 --- a/t/t5801-remote-helpers.sh +++ b/t/t5801-remote-helpers.sh @@ -212,30 +212,19 @@ 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 ) @@ -243,11 +232,7 @@ test_expect_success 'proper failure checks for fetching' ' 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 ) ' diff --git a/transport-helper.c b/transport-helper.c index b468e4f88..86e1679c1 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -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) @@ -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) @@ -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; @@ -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) { @@ -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; @@ -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; @@ -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 @@ -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; @@ -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) @@ -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; @@ -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, @@ -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, @@ -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; } @@ -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; -- cgit v1.2.1 From 03110863517c4a7aa37a10f14a9ad8be49eeca59 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Tue, 13 May 2014 16:29:56 -0500 Subject: contrib: remote-helpers: add move warnings (v2.0) The tools are now maintained out-of-tree, and they have a regression in v2.0. It's better to start warning the users as soon as possible. Signed-off-by: Felipe Contreras Signed-off-by: Junio C Hamano --- contrib/remote-helpers/git-remote-bzr | 3 +++ contrib/remote-helpers/git-remote-hg | 3 +++ 2 files changed, 6 insertions(+) diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr index 9abb58e6a..be4b9a34e 100755 --- a/contrib/remote-helpers/git-remote-bzr +++ b/contrib/remote-helpers/git-remote-bzr @@ -43,6 +43,9 @@ import re import StringIO import atexit, shutil, hashlib, urlparse, subprocess +sys.stderr.write('WARNING: git-remote-bzr is now maintained independently.\n') +sys.stderr.write('WARNING: For more information visit https://github.com/felipec/git-remote-bzr\n') + NAME_RE = re.compile('^([^<>]+)') AUTHOR_RE = re.compile('^([^<>]+?)? ?[<>]([^<>]*)(?:$|>)') EMAIL_RE = re.compile(r'([^ \t<>]+@[^ \t<>]+)') diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg index 34cda0275..989df66c1 100755 --- a/contrib/remote-helpers/git-remote-hg +++ b/contrib/remote-helpers/git-remote-hg @@ -25,6 +25,9 @@ import atexit import urlparse, hashlib import time as ptime +sys.stderr.write('WARNING: git-remote-hg is now maintained independently.\n') +sys.stderr.write('WARNING: For more information visit https://github.com/felipec/git-remote-hg\n') + # # If you want to see Mercurial revisions as Git commit notes: # git config core.notesRef refs/notes/hg -- cgit v1.2.1 From 896ba14d653c43bd7a43b6b291e941ab60855c04 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 15 May 2014 14:58:16 -0700 Subject: remote-helpers: point at their upstream repositories Signed-off-by: Junio C Hamano --- contrib/remote-helpers/README | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 contrib/remote-helpers/README diff --git a/contrib/remote-helpers/README b/contrib/remote-helpers/README new file mode 100644 index 000000000..6ce8b1b4d --- /dev/null +++ b/contrib/remote-helpers/README @@ -0,0 +1,19 @@ +The remote-helper bridges to access data stored in Mercurial and +Bazaar are maintained outside the git.git tree in the repositories +of its primary author: + + https://github.com/felipec/git-remote-hg (for Mercurial) + https://github.com/felipec/git-remote-bzr (for Bazaar) + +You can pick a directory on your $PATH and download them from these +repositories, e.g.: + + $ wget -O $HOME/bin/git-remote-hg \ + https://raw.github.com/felipec/git-remote-hg/master/git-remote-hg + $ wget -O $HOME/bin/git-remote-bzr \ + https://raw.github.com/felipec/git-remote-bzr/master/git-remote-bzr + $ chmod +x $HOME/bin/git-remote-hg $HOME/bin/git-remote-bzr + +As a convenience, copies of the last-bundled version of these two +remote-helper bridges are still kept here, but they may become +stale over time. -- cgit v1.2.1