]> git.ipfire.org Git - thirdparty/git.git/commitdiff
rm: reuse strbuf for all remove_dir_recursively() calls, again
authorRené Scharfe <l.s.r@web.de>
Sat, 11 Feb 2017 19:51:08 +0000 (20:51 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Feb 2017 22:33:32 +0000 (14:33 -0800)
Don't throw the memory allocated for remove_dir_recursively() away after
a single call, use it for the other entries as well instead.

This change was done before in deb8e15a (rm: reuse strbuf for all
remove_dir_recursively() calls), but was reverted as a side-effect of
55856a35 (rm: absorb a submodules git dir before deletion). Reinstate
the optimization.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/rm.c

index 452170a3ab45d24e03ab11965448572a411c349f..fb79dcab181558e79e3934363cac3c712ffbd3aa 100644 (file)
@@ -360,15 +360,14 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
         */
        if (!index_only) {
                int removed = 0, gitmodules_modified = 0;
+               struct strbuf buf = STRBUF_INIT;
                for (i = 0; i < list.nr; i++) {
                        const char *path = list.entry[i].name;
                        if (list.entry[i].is_submodule) {
-                               struct strbuf buf = STRBUF_INIT;
-
+                               strbuf_reset(&buf);
                                strbuf_addstr(&buf, path);
                                if (remove_dir_recursively(&buf, 0))
                                        die(_("could not remove '%s'"), path);
-                               strbuf_release(&buf);
 
                                removed = 1;
                                if (!remove_path_from_gitmodules(path))
@@ -382,6 +381,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
                        if (!removed)
                                die_errno("git rm: '%s'", path);
                }
+               strbuf_release(&buf);
                if (gitmodules_modified)
                        stage_updated_gitmodules();
        }