From a1cfac89f9c43aca8e13520dffed88033a624e75 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Thu, 23 Oct 2008 16:32:36 -0700
Subject: [PATCH] webapi: fix t=rename from==to, it used to delete the file

---
 src/allmydata/test/test_web.py | 11 +++++++++++
 src/allmydata/web/directory.py |  2 ++
 2 files changed, 13 insertions(+)

diff --git a/src/allmydata/test/test_web.py b/src/allmydata/test/test_web.py
index 54b3b463..d3181ba8 100644
--- a/src/allmydata/test/test_web.py
+++ b/src/allmydata/test/test_web.py
@@ -1887,6 +1887,17 @@ class Web(WebMixin, testutil.StallMixin, unittest.TestCase):
         d.addCallback(self.failUnlessIsBarJSON)
         return d
 
+    def test_POST_rename_file_redundant(self):
+        d = self.POST(self.public_url + "/foo", t="rename",
+                      from_name="bar.txt", to_name='bar.txt')
+        d.addCallback(lambda res:
+                      self.failUnlessNodeHasChild(self._foo_node, u"bar.txt"))
+        d.addCallback(lambda res: self.GET(self.public_url + "/foo/bar.txt"))
+        d.addCallback(self.failUnlessIsBarDotTxt)
+        d.addCallback(lambda res: self.GET(self.public_url + "/foo/bar.txt?t=json"))
+        d.addCallback(self.failUnlessIsBarJSON)
+        return d
+
     def test_POST_rename_file_replace(self):
         # rename a file and replace a directory with it
         d = self.POST(self.public_url + "/foo", t="rename",
diff --git a/src/allmydata/web/directory.py b/src/allmydata/web/directory.py
index 3501fa72..0612b87c 100644
--- a/src/allmydata/web/directory.py
+++ b/src/allmydata/web/directory.py
@@ -328,6 +328,8 @@ class DirectoryNodeHandler(RenderMixin, rend.Page, ReplaceMeMixin):
             assert isinstance(to_name, unicode)
         if not from_name or not to_name:
             raise WebError("rename requires from_name and to_name")
+        if from_name == to_name:
+            return defer.succeed("redundant rename")
 
         # allow from_name to contain slashes, so they can fix names that were
         # accidentally created with them. But disallow them in to_name, to
-- 
2.45.2