Commit 71a293558dcac7d17b10ae63f911aaf3f5b30df2

Stefan Sperling 2019-03-27T07:48:54

fix behaviour when 'got rm' is used twice

diff --git a/lib/worktree.c b/lib/worktree.c
index f03a291..c7e43f2 100644
--- a/lib/worktree.c
+++ b/lib/worktree.c
@@ -1754,6 +1754,10 @@ got_worktree_schedule_delete(struct got_worktree *worktree,
 		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;
diff --git a/regress/cmdline/rm.sh b/regress/cmdline/rm.sh
index 8753e23..581cd66 100755
--- a/regress/cmdline/rm.sh
+++ b/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