X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=fast-import.c;fp=fast-import.c;h=8a8a91589782203e9d7455921a80a47d7a7b3710;hb=be56862f198d946dc75ac7092606e78a4f2ff1d3;hp=78d978684da2e2b79340c138e1b6300100df1221;hpb=460d10262dae14b54123ff45e7548d872ff63983;p=git.git diff --git a/fast-import.c b/fast-import.c index 78d978684..8a8a91589 100644 --- a/fast-import.c +++ b/fast-import.c @@ -354,6 +354,7 @@ static unsigned int cmd_save = 100; static uintmax_t next_mark; static struct strbuf new_data = STRBUF_INIT; static int seen_data_command; +static int require_explicit_termination; /* Signal handling */ static volatile sig_atomic_t checkpoint_requested; @@ -3139,6 +3140,8 @@ static int parse_one_feature(const char *feature, int from_stream) relative_marks_paths = 1; } else if (!strcmp(feature, "no-relative-marks")) { relative_marks_paths = 0; + } else if (!strcmp(feature, "done")) { + require_explicit_termination = 1; } else if (!strcmp(feature, "force")) { force_update = 1; } else if (!strcmp(feature, "notes") || !strcmp(feature, "ls")) { @@ -3288,6 +3291,8 @@ int main(int argc, const char **argv) parse_reset_branch(); else if (!strcmp("checkpoint", command_buf.buf)) parse_checkpoint(); + else if (!strcmp("done", command_buf.buf)) + break; else if (!prefixcmp(command_buf.buf, "progress ")) parse_progress(); else if (!prefixcmp(command_buf.buf, "feature ")) @@ -3307,6 +3312,9 @@ int main(int argc, const char **argv) if (!seen_data_command) parse_argv(); + if (require_explicit_termination && feof(stdin)) + die("stream ends early"); + end_packfile(); dump_branches();