Skip to content

Commit b2aa110

Browse files
committed
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 266fe32 + 0101c8e commit b2aa110

File tree

4 files changed

+42
-6
lines changed

4 files changed

+42
-6
lines changed

builtin/clone.c

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

963963
if (!is_local && !complete_refs_before_fetch)
964-
transport_fetch_refs(transport, mapped_refs);
964+
if (transport_fetch_refs(transport, mapped_refs))
965+
die(_("could not fetch refs from %s"),
966+
transport->url);
965967

966968
remote_head = find_ref_by_name(refs, "HEAD");
967969
remote_head_points_at =

builtin/fast-export.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -846,9 +846,20 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info)
846846
}
847847
}
848848

849+
static void handle_reset(const char *name, struct object *object)
850+
{
851+
int mark = get_object_mark(object);
852+
853+
if (mark)
854+
printf("reset %s\nfrom :%d\n\n", name,
855+
get_object_mark(object));
856+
else
857+
printf("reset %s\nfrom %s\n\n", name,
858+
sha1_to_hex(object->sha1));
859+
}
860+
849861
static void handle_tags_and_duplicates(void)
850862
{
851-
struct commit *commit;
852863
int i;
853864

854865
for (i = extra_refs.nr - 1; i >= 0; i--) {
@@ -862,9 +873,7 @@ static void handle_tags_and_duplicates(void)
862873
if (anonymize)
863874
name = anonymize_refname(name);
864875
/* create refs pointing to already seen commits */
865-
commit = (struct commit *)object;
866-
printf("reset %s\nfrom :%d\n\n", name,
867-
get_object_mark(&commit->object));
876+
handle_reset(name, object);
868877
show_progress();
869878
break;
870879
}

t/t5801-remote-helpers.sh

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

transport-helper.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#include "refs.h"
1515

1616
static int debug;
17+
/* TODO: put somewhere sensible, e.g. git_transport_options? */
18+
static int auto_gc = 1;
1719

1820
struct helper_data {
1921
const char *name;
@@ -431,10 +433,25 @@ static int get_exporter(struct transport *transport,
431433
for (i = 0; i < revlist_args->nr; i++)
432434
argv_array_push(&fastexport->args, revlist_args->items[i].string);
433435

436+
argv_array_push(&fastexport->args, "--");
437+
434438
fastexport->git_cmd = 1;
435439
return start_command(fastexport);
436440
}
437441

442+
static void check_helper_status(struct helper_data *data)
443+
{
444+
int pid, status;
445+
446+
pid = waitpid(data->helper->pid, &status, WNOHANG);
447+
if (pid < 0)
448+
die("Could not retrieve status of remote helper '%s'",
449+
data->name);
450+
if (pid > 0 && WIFEXITED(status))
451+
die("Remote helper '%s' died with %d",
452+
data->name, WEXITSTATUS(status));
453+
}
454+
438455
static int fetch_with_import(struct transport *transport,
439456
int nr_heads, struct ref **to_fetch)
440457
{
@@ -470,6 +487,7 @@ static int fetch_with_import(struct transport *transport,
470487

471488
if (finish_command(&fastimport))
472489
die("Error while running fast-import");
490+
check_helper_status(data);
473491

474492
/*
475493
* The fast-import stream of a remote helper that advertises
@@ -501,6 +519,12 @@ static int fetch_with_import(struct transport *transport,
501519
}
502520
}
503521
strbuf_release(&buf);
522+
if (auto_gc) {
523+
const char *argv_gc_auto[] = {
524+
"gc", "--auto", "--quiet", NULL,
525+
};
526+
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
527+
}
504528
return 0;
505529
}
506530

@@ -918,6 +942,7 @@ static int push_refs_with_export(struct transport *transport,
918942

919943
if (finish_command(&exporter))
920944
die("Error while running fast-export");
945+
check_helper_status(data);
921946
if (push_update_refs_status(data, remote_refs, flags))
922947
return 1;
923948

0 commit comments

Comments
 (0)