Make LogWalker.find_latest_change() check parent paths too. Fixes #84087.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 11 Mar 2007 22:58:39 +0000 (23:58 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 11 Mar 2007 22:58:39 +0000 (23:58 +0100)
NEWS
logwalker.py
tests/test_logwalker.py

diff --git a/NEWS b/NEWS
index ff449a391ebcc2f4c68982ad38aceecb5fbdc5f2..93ffb9b6a7db2c01624a189ee8e520d4ffb6efa2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,9 @@ bzr-svn 0.3.2   UNRELEASED
 
   * Fix compatibility with Bazaar 0.15.
 
 
   * Fix compatibility with Bazaar 0.15.
 
+  * Check for parent paths moving as well in LogWalker.find_latest_change(). 
+    Fixes #84087.
+
 bzr-svn 0.3.1  2007-01-31
 
   BUG FIXES
 bzr-svn 0.3.1  2007-01-31
 
   BUG FIXES
index 6e6815edde64cf1cf545d9b579ae103beca99047..6c5a787c8e9a014daae6d1b8f8fa7fa18d47a771 100644 (file)
@@ -226,7 +226,8 @@ class LogWalker(object):
             extra = " or path like '%s/%%'" % path.strip("/")
         else:
             extra = ""
             extra = " or path like '%s/%%'" % path.strip("/")
         else:
             extra = ""
-        query = "select rev from changed_path where (path='%s'%s) and rev <= %d order by rev desc limit 1" % (path.strip("/"), extra, revnum)
+        query = "select rev from changed_path where (path='%s' or ('%s' like (path || '/%%') and (action = 'R' or action = 'A'))%s) and rev <= %d order by rev desc limit 1" % (path.strip("/"), path.strip("/"), extra, revnum)
+        mutter('query: %r' % query)
 
         row = self.db.execute(query).fetchone()
         if row is None and path == "":
 
         row = self.db.execute(query).fetchone()
         if row is None and path == "":
index 3e3264be6d8dc1f4dbd4f56a72fc6689479e6763..f87691ff409f5044dd4c45e8bd79f4f9ca38d96c 100644 (file)
@@ -122,7 +122,48 @@ class TestLogWalker(TestCaseWithSubversionRepository):
 
         self.assertEqual(0, walker.find_latest_change("", 1))
 
 
         self.assertEqual(0, walker.find_latest_change("", 1))
 
-    def test_find_latest_notfound(self):
+    def test_find_latest_parent(self):
+        repos_url = self.make_client("a", "dc")
+        self.build_tree({'dc/branches/tmp/foo': None, 'dc/tags': None})
+        self.client_add("dc/branches")
+        self.client_add("dc/tags")
+        self.client_commit("dc", "My Message")
+        self.client_copy("dc/branches/tmp", "dc/tags/tmp");
+        self.client_commit("dc", "My Message2")
+
+        walker = logwalker.LogWalker(transport=SvnRaTransport(repos_url))
+
+        self.assertEqual(2, walker.find_latest_change("tags/tmp/foo", 2))
+
+    def test_find_latest_parent_just_modify(self):
+        repos_url = self.make_client("a", "dc")
+        self.build_tree({'dc/branches/tmp/foo': None, 'dc/tags': None})
+        self.client_add("dc/branches")
+        self.client_add("dc/tags")
+        self.client_commit("dc", "My Message")
+        self.client_copy("dc/branches/tmp", "dc/tags/tmp");
+        self.client_commit("dc", "My Message2")
+        self.client_update("dc")
+        self.client_set_prop("dc/tags", "myprop", "mydata")
+        self.client_commit("dc", "My Message3")
+
+        walker = logwalker.LogWalker(transport=SvnRaTransport(repos_url))
+        self.assertEqual(2, walker.find_latest_change("tags/tmp/foo", 3))
+
+    def test_find_latest_parentmoved(self):
+        repos_url = self.make_client("a", "dc")
+        self.build_tree({'dc/branches/tmp': None})
+        self.client_add("dc/branches")
+        self.client_commit("dc", "My Message")
+
+        self.client_copy("dc/branches", "dc/bla")
+        self.client_commit("dc", "My Message")
+
+        walker = logwalker.LogWalker(transport=SvnRaTransport(repos_url))
+
+        self.assertIs(2, walker.find_latest_change("bla/tmp", 2))
+
+    def test_find_latest_nonexistant(self):
         repos_url = self.make_client("a", "dc")
         self.build_tree({'dc/branches/tmp': None})
         self.client_add("dc/branches")
         repos_url = self.make_client("a", "dc")
         self.build_tree({'dc/branches/tmp': None})
         self.client_add("dc/branches")
@@ -133,7 +174,8 @@ class TestLogWalker(TestCaseWithSubversionRepository):
 
         walker = logwalker.LogWalker(transport=SvnRaTransport(repos_url))
 
 
         walker = logwalker.LogWalker(transport=SvnRaTransport(repos_url))
 
-        self.assertIs(None, walker.find_latest_change("bla/tmp", 2))
+        self.assertIs(None, walker.find_latest_change("bloe", 2))
+        self.assertIs(None, walker.find_latest_change("bloe/bla", 2))
 
     def test_find_latest_change(self):
         repos_url = self.make_client("a", "dc")
 
     def test_find_latest_change(self):
         repos_url = self.make_client("a", "dc")