Skip to content

Commit 574ab13

Browse files
dschoGit for Windows Build Agent
authored andcommitted
Merge 'remote-hg-prerequisites' into HEAD
These fixes were necessary for Sverre Rabbelier's remote-hg to work, but for some magic reason they are not necessary for the current remote-hg. Makes you wonder how that one gets away with it. Signed-off-by: Johannes Schindelin <[email protected]>
2 parents 03c078c + 52abd83 commit 574ab13

File tree

4 files changed

+40
-2
lines changed

4 files changed

+40
-2
lines changed

builtin/clone.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
11901190
}
11911191

11921192
if (!is_local && !complete_refs_before_fetch)
1193-
transport_fetch_refs(transport, mapped_refs);
1193+
if (transport_fetch_refs(transport, mapped_refs))
1194+
die(_("could not fetch refs from %s"),
1195+
transport->url);
11941196

11951197
remote_head = find_ref_by_name(refs, "HEAD");
11961198
remote_head_points_at =

t/t5801-remote-helpers.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ test_expect_success 'push update refs failure' '
230230
echo "update fail" >>file &&
231231
git commit -a -m "update fail" &&
232232
git rev-parse --verify testgit/origin/heads/update >expect &&
233-
test_expect_code 1 env GIT_REMOTE_TESTGIT_FAILURE="non-fast forward" \
233+
test_must_fail env GIT_REMOTE_TESTGIT_FAILURE="non-fast forward" \
234234
git push origin update &&
235235
git rev-parse --verify testgit/origin/heads/update >actual &&
236236
test_cmp expect actual

t/t9350-fast-export.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,4 +690,15 @@ test_expect_success 'merge commit gets exported with --import-marks' '
690690
)
691691
'
692692

693+
cat > expected << EOF
694+
reset refs/heads/master
695+
from $(git rev-parse master)
696+
697+
EOF
698+
699+
test_expect_failure 'refs are updated even if no commits need to be exported' '
700+
git fast-export master..master > actual &&
701+
test_cmp expected actual
702+
'
703+
693704
test_done

transport-helper.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include "protocol.h"
1717

1818
static int debug;
19+
/* TODO: put somewhere sensible, e.g. git_transport_options? */
20+
static int auto_gc = 1;
1921

2022
struct helper_data {
2123
const char *name;
@@ -462,10 +464,25 @@ static int get_exporter(struct transport *transport,
462464
for (i = 0; i < revlist_args->nr; i++)
463465
argv_array_push(&fastexport->args, revlist_args->items[i].string);
464466

467+
argv_array_push(&fastexport->args, "--");
468+
465469
fastexport->git_cmd = 1;
466470
return start_command(fastexport);
467471
}
468472

473+
static void check_helper_status(struct helper_data *data)
474+
{
475+
int pid, status;
476+
477+
pid = waitpid(data->helper->pid, &status, WNOHANG);
478+
if (pid < 0)
479+
die("Could not retrieve status of remote helper '%s'",
480+
data->name);
481+
if (pid > 0 && WIFEXITED(status))
482+
die("Remote helper '%s' died with %d",
483+
data->name, WEXITSTATUS(status));
484+
}
485+
469486
static int fetch_with_import(struct transport *transport,
470487
int nr_heads, struct ref **to_fetch)
471488
{
@@ -502,6 +519,7 @@ static int fetch_with_import(struct transport *transport,
502519

503520
if (finish_command(&fastimport))
504521
die(_("error while running fast-import"));
522+
check_helper_status(data);
505523

506524
/*
507525
* The fast-import stream of a remote helper that advertises
@@ -535,6 +553,12 @@ static int fetch_with_import(struct transport *transport,
535553
}
536554
}
537555
strbuf_release(&buf);
556+
if (auto_gc) {
557+
const char *argv_gc_auto[] = {
558+
"gc", "--auto", "--quiet", NULL,
559+
};
560+
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
561+
}
538562
return 0;
539563
}
540564

@@ -994,6 +1018,7 @@ static int push_refs_with_export(struct transport *transport,
9941018

9951019
if (finish_command(&exporter))
9961020
die(_("error while running fast-export"));
1021+
check_helper_status(data);
9971022
if (push_update_refs_status(data, remote_refs, flags))
9981023
return 1;
9991024

0 commit comments

Comments
 (0)