diff --git a/src/builder-git.c b/src/builder-git.c index edd07eed..ee543d57 100644 --- a/src/builder-git.c +++ b/src/builder-git.c @@ -440,6 +440,8 @@ builder_git_mirror_repo (const char *repo_location, { g_autoptr(GFile) cache_mirror_dir = NULL; g_autoptr(GFile) mirror_dir = NULL; + g_autoptr(GFile) real_mirror_dir = NULL; + g_autoptr(FlatpakTempDir) tmp_mirror_dir = NULL; g_autofree char *current_commit = NULL; g_autoptr(GHashTable) refs = NULL; gboolean already_exists = FALSE; @@ -466,6 +468,15 @@ builder_git_mirror_repo (const char *repo_location, if (!g_file_query_exists (mirror_dir, NULL)) { + g_autofree char *tmpdir = g_strconcat (flatpak_file_get_path_cached (mirror_dir), "-XXXXXX", NULL); + + if (g_mkdtemp_full (tmpdir, 0755) == NULL) + return flatpak_fail (error, "Can't create temporary directory"); + + tmp_mirror_dir = g_file_new_for_path (tmpdir); + real_mirror_dir = g_steal_pointer (&mirror_dir); + mirror_dir = g_object_ref (tmp_mirror_dir); + if (!git (NULL, NULL, 0, error, "init", "--bare", (char *)flatpak_file_get_path_cached (mirror_dir), NULL)) @@ -605,6 +616,14 @@ builder_git_mirror_repo (const char *repo_location, } } + if (real_mirror_dir) + { + if (!flatpak_file_rename (mirror_dir, real_mirror_dir, NULL, error)) + return FALSE; + g_clear_object (&mirror_dir); + mirror_dir = g_steal_pointer (&real_mirror_dir); + } + if (flags & FLATPAK_GIT_MIRROR_FLAGS_MIRROR_SUBMODULES) { current_commit = git_get_current_commit (mirror_dir, ref, FALSE, context, error);