|
|
|
@ -329,6 +329,7 @@ static struct mark_set *marks;
@@ -329,6 +329,7 @@ static struct mark_set *marks;
|
|
|
|
|
static const char *export_marks_file; |
|
|
|
|
static const char *import_marks_file; |
|
|
|
|
static int import_marks_file_from_stream; |
|
|
|
|
static int import_marks_file_ignore_missing; |
|
|
|
|
static int relative_marks_paths; |
|
|
|
|
|
|
|
|
|
/* Our last blob */ |
|
|
|
@ -1795,7 +1796,11 @@ static void read_marks(void)
@@ -1795,7 +1796,11 @@ static void read_marks(void)
|
|
|
|
|
{ |
|
|
|
|
char line[512]; |
|
|
|
|
FILE *f = fopen(import_marks_file, "r"); |
|
|
|
|
if (!f) |
|
|
|
|
if (f) |
|
|
|
|
; |
|
|
|
|
else if (import_marks_file_ignore_missing && errno == ENOENT) |
|
|
|
|
return; /* Marks file does not exist */ |
|
|
|
|
else |
|
|
|
|
die_errno("cannot read '%s'", import_marks_file); |
|
|
|
|
while (fgets(line, sizeof(line), f)) { |
|
|
|
|
uintmax_t mark; |
|
|
|
@ -2867,7 +2872,8 @@ static char* make_fast_import_path(const char *path)
@@ -2867,7 +2872,8 @@ static char* make_fast_import_path(const char *path)
|
|
|
|
|
return strbuf_detach(&abs_path, NULL); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void option_import_marks(const char *marks, int from_stream) |
|
|
|
|
static void option_import_marks(const char *marks, |
|
|
|
|
int from_stream, int ignore_missing) |
|
|
|
|
{ |
|
|
|
|
if (import_marks_file) { |
|
|
|
|
if (from_stream) |
|
|
|
@ -2881,6 +2887,7 @@ static void option_import_marks(const char *marks, int from_stream)
@@ -2881,6 +2887,7 @@ static void option_import_marks(const char *marks, int from_stream)
|
|
|
|
|
import_marks_file = make_fast_import_path(marks); |
|
|
|
|
safe_create_leading_directories_const(import_marks_file); |
|
|
|
|
import_marks_file_from_stream = from_stream; |
|
|
|
|
import_marks_file_ignore_missing = ignore_missing; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void option_date_format(const char *fmt) |
|
|
|
@ -2980,7 +2987,10 @@ static int parse_one_feature(const char *feature, int from_stream)
@@ -2980,7 +2987,10 @@ static int parse_one_feature(const char *feature, int from_stream)
|
|
|
|
|
if (!prefixcmp(feature, "date-format=")) { |
|
|
|
|
option_date_format(feature + 12); |
|
|
|
|
} else if (!prefixcmp(feature, "import-marks=")) { |
|
|
|
|
option_import_marks(feature + 13, from_stream); |
|
|
|
|
option_import_marks(feature + 13, from_stream, 0); |
|
|
|
|
} else if (!prefixcmp(feature, "import-marks-if-exists=")) { |
|
|
|
|
option_import_marks(feature + strlen("import-marks-if-exists="), |
|
|
|
|
from_stream, 1); |
|
|
|
|
} else if (!prefixcmp(feature, "export-marks=")) { |
|
|
|
|
option_export_marks(feature + 13); |
|
|
|
|
} else if (!strcmp(feature, "cat-blob")) { |
|
|
|
|