Commit Diff


commit - 5c99ca9fe447187c440a413772fb14201f30a1d2
commit + 71a293558dcac7d17b10ae63f911aaf3f5b30df2
blob - f03a291f54519d33c2b6fe8f0a15db38ae579f7f
blob + c7e43f24fcf6a959ee0878eb5068515bd4b4ffdd
--- lib/worktree.c
+++ lib/worktree.c
@@ -1754,6 +1754,10 @@ got_worktree_schedule_delete(struct got_worktree *work
 		goto done;
 
 	if (status != GOT_STATUS_NO_CHANGE) {
+		if (status == GOT_STATUS_DELETE) {
+			err = got_error_set_errno(ENOENT);
+			goto done;
+		}
 		if (status != GOT_STATUS_MODIFY) {
 			err = got_error(GOT_ERR_FILE_STATUS);
 			goto done;
blob - 8753e23b6747409f7a3892319ef732fac8c6a45c
blob + 581cd66614db2ea20eaec0082fa7a5c0188032fb
--- regress/cmdline/rm.sh
+++ regress/cmdline/rm.sh
@@ -84,5 +84,37 @@ function test_rm_with_local_mods {
 	test_done "$testroot" "$ret"
 }
 
+function test_double_rm {
+	local testroot=`test_init double_rm`
+
+	got checkout $testroot/repo $testroot/wt > /dev/null
+	ret="$?"
+	if [ "$ret" != "0" ]; then
+		test_done "$testroot" "$ret"
+		return 1
+	fi
+
+	(cd $testroot/wt && got rm beta > /dev/null)
+
+	for fflag in "" "-f"; do
+		echo "got: No such file or directory" > $testroot/stderr.expected
+		(cd $testroot/wt && got rm $fflag beta 2> $testroot/stderr)
+		ret="$?"
+		if [ "$ret" == "0" ]; then
+			echo "got rm command succeeded unexpectedly" >&2
+			test_done "$testroot" 1
+		fi
+
+		cmp $testroot/stderr.expected $testroot/stderr
+		ret="$?"
+		if [ "$ret" != "0" ]; then
+			diff -u $testroot/stderr.expected $testroot/stderr
+			test_done "$testroot" "$ret"
+		fi
+	done
+	test_done "$testroot" "0"
+}
+
 run_test test_rm_basic
 run_test test_rm_with_local_mods
+run_test test_double_rm