[PATCH 11/16] teach unpack_trees() to remove submodule contents
From: Stefan Beller <hidden>
Date: 2016-11-15 23:07:19
Subsystem:
the rest · Maintainer:
Linus Torvalds
Extend rmdir_or_warn() to remove the directories of those submodules which are scheduled for removal. Also teach verify_clean_submodule() to check that a submodule configured to be removed is not modified before scheduling it for removal. Signed-off-by: Stefan Beller <redacted> --- unpack-trees.c | 6 ++---- wrapper.c | 4 ++++ 2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/unpack-trees.c b/unpack-trees.c
index ea6bdd2..576e1d5 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c@@ -9,6 +9,7 @@ #include "refs.h" #include "attr.h" #include "split-index.h" +#include "submodule.h" #include "dir.h" /*
@@ -1361,15 +1362,12 @@ static void invalidate_ce_path(const struct cache_entry *ce, /* * Check that checking out ce->sha1 in subdir ce->name is not * going to overwrite any working files. - * - * Currently, git does not checkout subprojects during a superproject - * checkout, so it is not going to overwrite anything. */ static int verify_clean_submodule(const struct cache_entry *ce, enum unpack_trees_error_types error_type, struct unpack_trees_options *o) { - return 0; + return submodule_is_interesting(ce->name, null_sha1) && is_submodule_modified(ce->name, 0); } static int verify_clean_subdirectory(const struct cache_entry *ce,
diff --git a/wrapper.c b/wrapper.c
index e7f1979..17c08de 100644
--- a/wrapper.c
+++ b/wrapper.c@@ -2,6 +2,7 @@ * Various trivial helper wrappers around standard functions */ #include "cache.h" +#include "submodule.h" static void do_nothing(size_t size) {
@@ -592,6 +593,9 @@ int unlink_or_warn(const char *file) int rmdir_or_warn(const char *file) { + if (submodule_is_interesting(file, null_sha1) + && depopulate_submodule(file)) + return -1; return warn_if_unremovable("rmdir", file, rmdir(file)); }
--
2.10.1.469.g00a8914