From 4209dec14036b7a88009169c4b5f52088cbcde48 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 11 Mar 2007 23:58:39 +0100 Subject: [PATCH] Make LogWalker.find_latest_change() check parent paths too. Fixes #84087. --- NEWS | 3 +++ logwalker.py | 3 ++- tests/test_logwalker.py | 46 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index ff449a39..93ffb9b6 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,9 @@ bzr-svn 0.3.2 UNRELEASED * 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 diff --git a/logwalker.py b/logwalker.py index 6e6815ed..6c5a787c 100644 --- a/logwalker.py +++ b/logwalker.py @@ -226,7 +226,8 @@ class LogWalker(object): 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 == "": diff --git a/tests/test_logwalker.py b/tests/test_logwalker.py index 3e3264be..f87691ff 100644 --- a/tests/test_logwalker.py +++ b/tests/test_logwalker.py @@ -122,7 +122,48 @@ class TestLogWalker(TestCaseWithSubversionRepository): 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") @@ -133,7 +174,8 @@ class TestLogWalker(TestCaseWithSubversionRepository): 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") -- 2.34.1