From: Peter Collingbourne <peter@pcc.me.uk>
To: git@vger.kernel.org
Cc: Peter Collingbourne <peter@pcc.me.uk>
Subject: [PATCH v2 4/9] git rm: display a warning for every unremovable file
Date: Sat, 10 Apr 2010 19:23:45 +0100 [thread overview]
Message-ID: <1270923830-11830-5-git-send-email-peter@pcc.me.uk> (raw)
In-Reply-To: <1270923830-11830-1-git-send-email-peter@pcc.me.uk>
When ‘git rm’ was built in (d9b814cc, 2006-05-19), its
semantics changed: before, it just removed files until it
encountered an error and then would error out, whereas since
then, it makes an attempt to either remove all files or remove
none at all. In particular, if ‘git rm’ fails to remove a
file after other files have already been removed, it does not
abort but instead silently accepts the error.
Better to warn the user in this case!
This problem is particularly noticeable when dealing with submodules
because the rmdir operation will fail for every initialised submodule.
The removal of the contents of an initialised submodule directory
should always be user controlled, due to the possibility of
unpropagated changes to the submodule. Therefore, the user should
always be informed of any such removal failures.
Based-on-work-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Peter Collingbourne <peter@pcc.me.uk>
---
builtin/rm.c | 2 ++
t/t3600-rm.sh | 15 +++++++++++++++
2 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/builtin/rm.c b/builtin/rm.c
index f3772c8..05a5158 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -259,6 +259,8 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
}
if (!removed)
die_errno("git rm: '%s'", path);
+ else
+ warning("git rm: '%s': %s", path, strerror(errno));
}
}
diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh
index 5186844..ecddd67 100755
--- a/t/t3600-rm.sh
+++ b/t/t3600-rm.sh
@@ -180,6 +180,21 @@ test_expect_success 'Message when first removal fails' '
! test -e plugh || chmod 775 plugh
rm -fr msg plugh xyzzy
+test_expect_success 'Message when second removal fails' '
+ touch plugh &&
+ mkdir -p xyzzy &&
+ touch xyzzy/plugh &&
+ git add plugh xyzzy/plugh &&
+ git commit --allow-empty -a -m "two files to remove" &&
+ chmod a-w xyzzy &&
+
+ git rm plugh xyzzy/plugh 2>msg &&
+
+ grep "git rm: '\''xyzzy/plugh'\'':" msg
+'
+! test -e xyzzy || chmod 775 xyzzy
+rm -fr expect actual plugh xyzzy
+
test_expect_success '"rm" command printed' '
echo frotz > test-file &&
git add test-file &&
--
1.6.5
next prev parent reply other threads:[~2010-04-10 18:24 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-10 18:23 [PATCH v2 0/9] Improve handling of moving and removing submodules Peter Collingbourne
2010-04-10 18:23 ` [PATCH v2 1/9] Generate unique ID for submodules created using "git submodule add" Peter Collingbourne
2010-04-10 18:41 ` Sverre Rabbelier
2010-04-10 18:23 ` [PATCH v2 2/9] Implement "git mv" for submodules Peter Collingbourne
2010-04-11 1:25 ` Junio C Hamano
2010-04-10 18:23 ` [PATCH v2 3/9] git rm: test failure behaviour for multiple removals Peter Collingbourne
2010-04-10 18:23 ` Peter Collingbourne [this message]
2010-04-10 18:23 ` [PATCH v2 5/9] git rm: collect file modes Peter Collingbourne
2010-04-10 18:23 ` [PATCH v2 6/9] Add a mode parameter to the remove_path function Peter Collingbourne
2010-04-11 1:25 ` Junio C Hamano
2010-04-10 18:23 ` [PATCH v2 7/9] git rm: do not abort due to an initialised submodule Peter Collingbourne
2010-04-11 1:25 ` Junio C Hamano
2010-04-10 18:23 ` [PATCH v2 8/9] git submodule: infrastructure for reading .gitmodules files in arbitrary locations Peter Collingbourne
2010-04-10 18:23 ` [PATCH v2 9/9] git rm: remove submodule entries from .gitmodules Peter Collingbourne
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1270923830-11830-5-git-send-email-peter@pcc.me.uk \
--to=peter@pcc.me.uk \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).