Rev 283: Fix corner cases in get_previous(). in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev

Jelmer Vernooij jelmer at samba.org
Sun Dec 24 00:32:22 GMT 2006


------------------------------------------------------------
revno: 283
revision-id: jelmer at samba.org-20061224002517-f4670do78x74rd0t
parent: jelmer at samba.org-20061223225657-abfdb3voizollc83
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Sun 2006-12-24 01:25:17 +0100
message:
  Fix corner cases in get_previous().
modified:
  branchprops.py                 branchprops.py-20061223204623-80lvm7pjrpsgk0dd-1
  logwalker.py                   logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
  tests/test_logwalker.py        test_logwalker.py-20060622141944-pkocc3rj8g62ukbi-1
=== modified file 'branchprops.py'
--- a/branchprops.py	2006-12-23 22:56:57 +0000
+++ b/branchprops.py	2006-12-24 00:25:17 +0000
@@ -82,7 +82,10 @@
 
         current = self.get_property(path, revnum, name, "")
         (prev_path, prev_revnum) = self.log.get_previous(path, revnum)
-        previous = self.get_property(prev_path, prev_revnum, name, "")
+        if prev_path is None and prev_revnum == -1:
+            previous = ""
+        else:
+            previous = self.get_property(prev_path, prev_revnum, name, "")
         if len(previous) > len(current) or current[0:len(previous)] != previous:
             mutter('original part changed!')
             return ""

=== modified file 'logwalker.py'
--- a/logwalker.py	2006-12-23 22:56:57 +0000
+++ b/logwalker.py	2006-12-24 00:25:17 +0000
@@ -55,11 +55,12 @@
 
 
 class NotSvnBranchPath(BzrError):
-    _fmt = """{%(branch_path)s} is not a valid Svn branch path"""
+    _fmt = """{%(branch_path)s}:%(revnum)s is not a valid Svn branch path"""
 
-    def __init__(self, branch_path):
+    def __init__(self, branch_path, revnum=None):
         BzrError.__init__(self)
         self.branch_path = branch_path
+        self.revnum = revnum
 
 
 class LogWalker(object):
@@ -164,7 +165,7 @@
             return
 
         if not branch_path is None and not self.scheme.is_branch(branch_path):
-            raise NotSvnBranchPath(branch_path)
+            raise NotSvnBranchPath(branch_path, revnum)
 
         if branch_path:
             branch_path = branch_path.strip("/")
@@ -275,6 +276,8 @@
         if row is None and path == "":
             return 0
 
+        assert row is not None, "now latest change for %r:%d" % (path, revnum)
+
         return row[0]
 
     def touches_path(self, path, revnum):
@@ -318,7 +321,9 @@
             self.fetch_revisions(revnum)
         if revnum == 0:
             return (None, -1)
-        row = self.db.execute("select copyfrom_path, copyfrom_rev from changed_path where path='%s' and rev=%d" % (path, revnum)).fetchone()
-        if row[1] == -1:
+        row = self.db.execute("select action, copyfrom_path, copyfrom_rev from changed_path where path='%s' and rev=%d" % (path, revnum)).fetchone()
+        if row[2] == -1:
+            if row[0] == 'A':
+                return (None, -1)
             return (path, revnum-1)
-        return row
+        return (row[1], row[2])

=== modified file 'tests/test_logwalker.py'
--- a/tests/test_logwalker.py	2006-12-23 22:56:57 +0000
+++ b/tests/test_logwalker.py	2006-12-24 00:25:17 +0000
@@ -340,6 +340,20 @@
 
         self.assertEqual(("trunk", 1), walker.get_previous("trunk", 2))
 
+    def test_get_previous_added(self):
+        repos_url = self.make_client("a", "dc")
+        self.build_tree({'dc/trunk/afile': "data"})
+        self.client_add("dc/trunk")
+        self.client_commit("dc", "My Message")
+        self.build_tree({'dc/trunk/afile': "data2"})
+        self.client_set_prop("dc/trunk", "myprop", "mydata")
+        self.client_commit("dc", "My Message")
+
+        walker = logwalker.LogWalker(TrunkBranchingScheme(), 
+                                     transport=SvnRaTransport(repos_url))
+
+        self.assertEqual((None, -1), walker.get_previous("trunk", 1))
+
     def test_get_previous_copy(self):
         repos_url = self.make_client("a", "dc")
         self.build_tree({'dc/trunk/afile': "data"})




More information about the bazaar-commits mailing list