89 lines
3.2 KiB
Diff
89 lines
3.2 KiB
Diff
From e5e484f5bb9690ac2aaab2d0ca23e7433b2ac8c0 Mon Sep 17 00:00:00 2001
|
|
From: Jeff King <peff@peff.net>
|
|
Date: Thu, 29 Aug 2019 13:33:48 -0400
|
|
Subject: [PATCH 05/30] fast-import: delay creating leading directories for
|
|
export-marks
|
|
|
|
When we parse the --export-marks option, we don't immediately open the
|
|
file, but we do create any leading directories. This can be especially
|
|
confusing when a command-line option overrides an in-stream one, in
|
|
which case we'd create the leading directory for the in-stream file,
|
|
even though we never actually write the file.
|
|
|
|
Let's instead create the directories just before opening the file, which
|
|
means we'll create only useful directories. Note that this could change
|
|
the handling of relative paths if we chdir() in between, but we don't
|
|
actually do so; the only permanent chdir is from setup_git_directory()
|
|
which runs before either code path (potentially we should take the
|
|
pre-setup dir into account to avoid surprising the user, but that's an
|
|
orthogonal change).
|
|
|
|
The test just adapts the existing "override" test to use paths with
|
|
leading directories. This checks both that the correct directory is
|
|
created (which worked before but was not tested), and that the
|
|
overridden one is not (our new fix here).
|
|
|
|
While we're here, let's also check the error result of
|
|
safe_create_leading_directories(). We'd presumably notice any failure
|
|
immediately after when we try to open the file itself, but we can give a
|
|
more specific error message in this case.
|
|
|
|
Signed-off-by: Jeff King <peff@peff.net>
|
|
---
|
|
fast-import.c | 7 ++++++-
|
|
t/t9300-fast-import.sh | 13 +++++++++++--
|
|
2 files changed, 17 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/fast-import.c b/fast-import.c
|
|
index b05d560d0a..92e84d28a4 100644
|
|
--- a/fast-import.c
|
|
+++ b/fast-import.c
|
|
@@ -1826,6 +1826,12 @@ static void dump_marks(void)
|
|
if (!export_marks_file || (import_marks_file && !import_marks_file_done))
|
|
return;
|
|
|
|
+ if (safe_create_leading_directories_const(export_marks_file)) {
|
|
+ failure |= error_errno("unable to create leading directories of %s",
|
|
+ export_marks_file);
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (hold_lock_file_for_update(&mark_lock, export_marks_file, 0) < 0) {
|
|
failure |= error_errno("Unable to write marks file %s",
|
|
export_marks_file);
|
|
@@ -3238,7 +3244,6 @@ static void option_active_branches(const char *branches)
|
|
static void option_export_marks(const char *marks)
|
|
{
|
|
export_marks_file = make_fast_import_path(marks);
|
|
- safe_create_leading_directories_const(export_marks_file);
|
|
}
|
|
|
|
static void option_cat_blob_fd(const char *fd)
|
|
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
|
|
index f79fcf4c1e..f5f3e2cb71 100755
|
|
--- a/t/t9300-fast-import.sh
|
|
+++ b/t/t9300-fast-import.sh
|
|
@@ -2132,8 +2132,17 @@ test_expect_success 'R: export-marks feature results in a marks file being creat
|
|
'
|
|
|
|
test_expect_success 'R: export-marks options can be overridden by commandline options' '
|
|
- git fast-import --export-marks=other.marks <input &&
|
|
- grep :1 other.marks
|
|
+ cat >input <<-\EOF &&
|
|
+ feature export-marks=feature-sub/git.marks
|
|
+ blob
|
|
+ mark :1
|
|
+ data 3
|
|
+ hi
|
|
+
|
|
+ EOF
|
|
+ git fast-import --export-marks=cmdline-sub/other.marks <input &&
|
|
+ grep :1 cmdline-sub/other.marks &&
|
|
+ test_path_is_missing feature-sub
|
|
'
|
|
|
|
test_expect_success 'R: catch typo in marks file name' '
|
|
--
|
|
2.17.1
|
|
|