]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fast-export: add support for --import-marks-if-exists
authorElijah Newren <newren@gmail.com>
Thu, 3 Oct 2019 20:27:06 +0000 (13:27 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 3 Oct 2019 22:33:21 +0000 (07:33 +0900)
fast-import has support for both an --import-marks flag and an
--import-marks-if-exists flag; the latter of which will not die() if the
file does not exist.  fast-export only had support for an --import-marks
flag; add an --import-marks-if-exists flag for consistency.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fast-export.c
t/t9350-fast-export.sh

index 5822271c6b0a12ebdab58513f7ea83d62489b4fd..575e47833bb37811b75b4ad5ea13cdd4f4548148 100644 (file)
@@ -1052,11 +1052,16 @@ static void export_marks(char *file)
                error("Unable to write marks file %s.", file);
 }
 
-static void import_marks(char *input_file)
+static void import_marks(char *input_file, int check_exists)
 {
        char line[512];
-       FILE *f = xfopen(input_file, "r");
+       FILE *f;
+       struct stat sb;
+
+       if (check_exists && stat(input_file, &sb))
+               return;
 
+       f = xfopen(input_file, "r");
        while (fgets(line, sizeof(line), f)) {
                uint32_t mark;
                char *line_end, *mark_end;
@@ -1120,7 +1125,9 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
        struct rev_info revs;
        struct object_array commits = OBJECT_ARRAY_INIT;
        struct commit *commit;
-       char *export_filename = NULL, *import_filename = NULL;
+       char *export_filename = NULL,
+            *import_filename = NULL,
+            *import_filename_if_exists = NULL;
        uint32_t lastimportid;
        struct string_list refspecs_list = STRING_LIST_INIT_NODUP;
        struct string_list paths_of_changed_objects = STRING_LIST_INIT_DUP;
@@ -1140,6 +1147,10 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
                             N_("Dump marks to this file")),
                OPT_STRING(0, "import-marks", &import_filename, N_("file"),
                             N_("Import marks from this file")),
+               OPT_STRING(0, "import-marks-if-exists",
+                            &import_filename_if_exists,
+                            N_("file"),
+                            N_("Import marks from this file if it exists")),
                OPT_BOOL(0, "fake-missing-tagger", &fake_missing_tagger,
                         N_("Fake a tagger when tags lack one")),
                OPT_BOOL(0, "full-tree", &full_tree,
@@ -1187,8 +1198,12 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
        if (use_done_feature)
                printf("feature done\n");
 
+       if (import_filename && import_filename_if_exists)
+               die(_("Cannot pass both --import-marks and --import-marks-if-exists"));
        if (import_filename)
-               import_marks(import_filename);
+               import_marks(import_filename, 0);
+       else if (import_filename_if_exists)
+               import_marks(import_filename_if_exists, 1);
        lastimportid = last_idnum;
 
        if (import_filename && revs.prune_data.nr)
index d32ff41859e7e9d31adad144c2b2432c1cb55a33..ea84e2f173ec8830fa5633beebf05c7d70105048 100755 (executable)
@@ -580,17 +580,15 @@ test_expect_success 'fast-export quotes pathnames' '
 '
 
 test_expect_success 'test bidirectionality' '
-       >marks-cur &&
-       >marks-new &&
        git init marks-test &&
-       git fast-export --export-marks=marks-cur --import-marks=marks-cur --branches | \
-       git --git-dir=marks-test/.git fast-import --export-marks=marks-new --import-marks=marks-new &&
+       git fast-export --export-marks=marks-cur --import-marks-if-exists=marks-cur --branches | \
+       git --git-dir=marks-test/.git fast-import --export-marks=marks-new --import-marks-if-exists=marks-new &&
        (cd marks-test &&
        git reset --hard &&
        echo Wohlauf > file &&
        git commit -a -m "back in time") &&
-       git --git-dir=marks-test/.git fast-export --export-marks=marks-new --import-marks=marks-new --branches | \
-       git fast-import --export-marks=marks-cur --import-marks=marks-cur
+       git --git-dir=marks-test/.git fast-export --export-marks=marks-new --import-marks-if-exists=marks-new --branches | \
+       git fast-import --export-marks=marks-cur --import-marks-if-exists=marks-cur
 '
 
 cat > expected << EOF