mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
fast-import: put marks reading in its own function
All options do nothing but set settings, with the exception of the --input-marks option. Delay the reading of the marks file till after all options have been parsed. Also, rename mark_file to export_marks_file as it is now ambiguous. Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0f6927c229
commit
07cd9328b6
|
@ -318,7 +318,8 @@ static unsigned int object_entry_alloc = 5000;
|
||||||
static struct object_entry_pool *blocks;
|
static struct object_entry_pool *blocks;
|
||||||
static struct object_entry *object_table[1 << 16];
|
static struct object_entry *object_table[1 << 16];
|
||||||
static struct mark_set *marks;
|
static struct mark_set *marks;
|
||||||
static const char *mark_file;
|
static const char *export_marks_file;
|
||||||
|
static const char *import_marks_file;
|
||||||
|
|
||||||
/* Our last blob */
|
/* Our last blob */
|
||||||
static struct last_object last_blob = { STRBUF_INIT, 0, 0, 0 };
|
static struct last_object last_blob = { STRBUF_INIT, 0, 0, 0 };
|
||||||
|
@ -455,8 +456,8 @@ static void write_crash_report(const char *err)
|
||||||
fputc('\n', rpt);
|
fputc('\n', rpt);
|
||||||
fputs("Marks\n", rpt);
|
fputs("Marks\n", rpt);
|
||||||
fputs("-----\n", rpt);
|
fputs("-----\n", rpt);
|
||||||
if (mark_file)
|
if (export_marks_file)
|
||||||
fprintf(rpt, " exported to %s\n", mark_file);
|
fprintf(rpt, " exported to %s\n", export_marks_file);
|
||||||
else
|
else
|
||||||
dump_marks_helper(rpt, 0, marks);
|
dump_marks_helper(rpt, 0, marks);
|
||||||
|
|
||||||
|
@ -1603,13 +1604,13 @@ static void dump_marks(void)
|
||||||
int mark_fd;
|
int mark_fd;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
if (!mark_file)
|
if (!export_marks_file)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mark_fd = hold_lock_file_for_update(&mark_lock, mark_file, 0);
|
mark_fd = hold_lock_file_for_update(&mark_lock, export_marks_file, 0);
|
||||||
if (mark_fd < 0) {
|
if (mark_fd < 0) {
|
||||||
failure |= error("Unable to write marks file %s: %s",
|
failure |= error("Unable to write marks file %s: %s",
|
||||||
mark_file, strerror(errno));
|
export_marks_file, strerror(errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1618,7 +1619,7 @@ static void dump_marks(void)
|
||||||
int saved_errno = errno;
|
int saved_errno = errno;
|
||||||
rollback_lock_file(&mark_lock);
|
rollback_lock_file(&mark_lock);
|
||||||
failure |= error("Unable to write marks file %s: %s",
|
failure |= error("Unable to write marks file %s: %s",
|
||||||
mark_file, strerror(saved_errno));
|
export_marks_file, strerror(saved_errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1634,7 +1635,7 @@ static void dump_marks(void)
|
||||||
int saved_errno = errno;
|
int saved_errno = errno;
|
||||||
rollback_lock_file(&mark_lock);
|
rollback_lock_file(&mark_lock);
|
||||||
failure |= error("Unable to write marks file %s: %s",
|
failure |= error("Unable to write marks file %s: %s",
|
||||||
mark_file, strerror(saved_errno));
|
export_marks_file, strerror(saved_errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1642,11 +1643,47 @@ static void dump_marks(void)
|
||||||
int saved_errno = errno;
|
int saved_errno = errno;
|
||||||
rollback_lock_file(&mark_lock);
|
rollback_lock_file(&mark_lock);
|
||||||
failure |= error("Unable to commit marks file %s: %s",
|
failure |= error("Unable to commit marks file %s: %s",
|
||||||
mark_file, strerror(saved_errno));
|
export_marks_file, strerror(saved_errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void read_marks(void)
|
||||||
|
{
|
||||||
|
char line[512];
|
||||||
|
FILE *f = fopen(import_marks_file, "r");
|
||||||
|
if (!f)
|
||||||
|
die_errno("cannot read '%s'", import_marks_file);
|
||||||
|
while (fgets(line, sizeof(line), f)) {
|
||||||
|
uintmax_t mark;
|
||||||
|
char *end;
|
||||||
|
unsigned char sha1[20];
|
||||||
|
struct object_entry *e;
|
||||||
|
|
||||||
|
end = strchr(line, '\n');
|
||||||
|
if (line[0] != ':' || !end)
|
||||||
|
die("corrupt mark line: %s", line);
|
||||||
|
*end = 0;
|
||||||
|
mark = strtoumax(line + 1, &end, 10);
|
||||||
|
if (!mark || end == line + 1
|
||||||
|
|| *end != ' ' || get_sha1(end + 1, sha1))
|
||||||
|
die("corrupt mark line: %s", line);
|
||||||
|
e = find_object(sha1);
|
||||||
|
if (!e) {
|
||||||
|
enum object_type type = sha1_object_info(sha1, NULL);
|
||||||
|
if (type < 0)
|
||||||
|
die("object not found: %s", sha1_to_hex(sha1));
|
||||||
|
e = insert_object(sha1);
|
||||||
|
e->type = type;
|
||||||
|
e->pack_id = MAX_PACK_ID;
|
||||||
|
e->offset = 1; /* just not zero! */
|
||||||
|
}
|
||||||
|
insert_mark(mark, e);
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int read_next_command(void)
|
static int read_next_command(void)
|
||||||
{
|
{
|
||||||
static int stdin_eof = 0;
|
static int stdin_eof = 0;
|
||||||
|
@ -2421,39 +2458,9 @@ static void parse_progress(void)
|
||||||
skip_optional_lf();
|
skip_optional_lf();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void option_import_marks(const char *input_file)
|
static void option_import_marks(const char *marks)
|
||||||
{
|
{
|
||||||
char line[512];
|
import_marks_file = xstrdup(marks);
|
||||||
FILE *f = fopen(input_file, "r");
|
|
||||||
if (!f)
|
|
||||||
die_errno("cannot read '%s'", input_file);
|
|
||||||
while (fgets(line, sizeof(line), f)) {
|
|
||||||
uintmax_t mark;
|
|
||||||
char *end;
|
|
||||||
unsigned char sha1[20];
|
|
||||||
struct object_entry *e;
|
|
||||||
|
|
||||||
end = strchr(line, '\n');
|
|
||||||
if (line[0] != ':' || !end)
|
|
||||||
die("corrupt mark line: %s", line);
|
|
||||||
*end = 0;
|
|
||||||
mark = strtoumax(line + 1, &end, 10);
|
|
||||||
if (!mark || end == line + 1
|
|
||||||
|| *end != ' ' || get_sha1(end + 1, sha1))
|
|
||||||
die("corrupt mark line: %s", line);
|
|
||||||
e = find_object(sha1);
|
|
||||||
if (!e) {
|
|
||||||
enum object_type type = sha1_object_info(sha1, NULL);
|
|
||||||
if (type < 0)
|
|
||||||
die("object not found: %s", sha1_to_hex(sha1));
|
|
||||||
e = insert_object(sha1);
|
|
||||||
e->type = type;
|
|
||||||
e->pack_id = MAX_PACK_ID;
|
|
||||||
e->offset = 1; /* just not zero! */
|
|
||||||
}
|
|
||||||
insert_mark(mark, e);
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void option_date_format(const char *fmt)
|
static void option_date_format(const char *fmt)
|
||||||
|
@ -2487,7 +2494,7 @@ static void option_active_branches(const char *branches)
|
||||||
|
|
||||||
static void option_export_marks(const char *marks)
|
static void option_export_marks(const char *marks)
|
||||||
{
|
{
|
||||||
mark_file = xstrdup(marks);
|
export_marks_file = xstrdup(marks);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void option_export_pack_edges(const char *edges)
|
static void option_export_pack_edges(const char *edges)
|
||||||
|
@ -2581,6 +2588,8 @@ int main(int argc, const char **argv)
|
||||||
}
|
}
|
||||||
if (i != argc)
|
if (i != argc)
|
||||||
usage(fast_import_usage);
|
usage(fast_import_usage);
|
||||||
|
if (import_marks_file)
|
||||||
|
read_marks();
|
||||||
|
|
||||||
rc_free = pool_alloc(cmd_save * sizeof(*rc_free));
|
rc_free = pool_alloc(cmd_save * sizeof(*rc_free));
|
||||||
for (i = 0; i < (cmd_save - 1); i++)
|
for (i = 0; i < (cmd_save - 1); i++)
|
||||||
|
|
Loading…
Reference in a new issue