git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 10/12] git rm: do not abort due to an initialised submodule

From
Peter Collingbourne <peter@pcc.me.uk>
Date
Mar 26, 2010, 15:25 UTC
Message-ID
<1269617140-7827-11-git-send-email-peter@pcc.me.uk>
In-Reply-To
<1269617140-7827-1-git-send-email-peter@pcc.me.uk>

This patch causes the "git rm" command to consider "directory not empty" errors as nonfatal, which will be caused by a submodule being in an initialised state. As this is a normal state for a submodule, it should not cause us to abort. Neither should we recursively delete the submodule directory as it may contain unsaved data.

Signed-off-by: Peter Collingbourne <peter@pcc.me.uk>
---
 builtin/rm.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/builtin/rm.c b/builtin/rm.c
index 6ac5114..02ee259 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -250,7 +250,9 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
 	 * abort the "git rm" (but once we've successfully removed
 	 * any file at all, we'll go ahead and commit to it all:
 	 * by then we've already committed ourselves and can't fail
-	 * in the middle)
+	 * in the middle).  However failure to remove a submodule
+	 * directory due to the submodule being initialised is never
+	 * a fatal condition.
 	 */
 	if (!index_only) {
 		int removed = 0;
@@ -261,7 +263,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
 				removed = 1;
 				continue;
 			}
-			if (!removed)
+			if (!removed && errno != EEXIST && errno != ENOTEMPTY)
 				die_errno("git rm: '%s'", path);
 			else
 				warning("git rm: '%s': %s", path, strerror(errno));
-- 
1.6.5
Previous: Peter CollingbourneNext: Peter Collingbourne
Message 16 of 18 in “Improve handling of moving and removing submodules”
  1. 00/12 Improve handling of moving and removing submodulesPeter Collingbourne, Mar 26, 2010
  2. 01/12 Generate unique ID for submodules created using "git submodule add"Peter Collingbourne, Mar 26, 2010
  3. Jonathan NiederMar 27, 2010
  4. Peter CollingbourneApr 3, 2010
  5. 1/2 Prefix submodule names with the path basenamePeter Collingbourne, Apr 3, 2010
  6. 2/2 Truncate the SHA1 part of the submodule name to 7 charactersPeter Collingbourne, Apr 3, 2010
  7. 02/12 Implement "git mv" for submodulesPeter Collingbourne, Mar 26, 2010
  8. 03/12 git rm: display a warning for every unremovable filePeter Collingbourne, Mar 26, 2010
  9. Jonathan NiederMar 27, 2010
  10. 04/12 Generalise the unlink_or_warn functionPeter Collingbourne, Mar 26, 2010
  11. 05/12 Implement the rmdir_or_warn functionPeter Collingbourne, Mar 26, 2010
  12. 06/12 Introduce remove_or_warn functionPeter Collingbourne, Mar 26, 2010
  13. 07/12 Remove a redundant errno test in a usage of remove_pathPeter Collingbourne, Mar 26, 2010
  14. 08/12 git rm: collect file modesPeter Collingbourne, Mar 26, 2010
  15. 09/12 Add a mode parameter to the remove_path functionPeter Collingbourne, Mar 26, 2010
  16. 10/12 git rm: do not abort due to an initialised submodulePeter Collingbourne, Mar 26, 2010
  17. 11/12 git submodule: infrastructure for reading .gitmodules files in arbitrary locationsPeter Collingbourne, Mar 26, 2010
  18. 12/12 git rm: remove submodule entries from .gitmodulesPeter Collingbourne, Mar 26, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.