return props[name]
return default
- def _get_branch_prop_added(self, path, revnum, name):
+ def get_property_diff(self, path, revnum, name):
"""Returns the new lines that were added to a particular property."""
# If the path this property is set on didn't change, then
# the property can't have changed.
if not self.log.touches_path(path, revnum):
return ""
- #FIXME
+ 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 len(previous) > len(current) or current[0:len(previous)] != previous:
+ mutter('original part changed!')
+ return ""
+ return current[len(previous):]
if revnum > self.saved_revnum:
self.fetch_revisions(revnum, pb)
(author, message, date) = self.db.execute("select author, message, date from revision where revno="+ str(revnum)).fetchone()
- paths = self._get_revision_paths(revnum)
if author is None:
author = None
- return (author, _escape_commit_message(base64.b64decode(message)), date, paths)
+ return (author, _escape_commit_message(base64.b64decode(message)), date)
def find_latest_change(self, path, revnum):
yield os.path.join(path, p)
for c in self.find_children(os.path.join(path, p), revnum):
yield c
+
+ def get_previous(self, path, revnum):
+ """Return path,revnum pair specified pair was derived from.
+
+ :param path: Path to check
+ :param revnum: Revision to check
+ """
+ if revnum > self.saved_revnum:
+ 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:
+ return (path, revnum-1)
+ return row
break
# if the branch didn't change, bzr:merge can't have changed
- if not path in self._log.get_revision_info(revnum)[3]:
+ if not self._log.touches_path(branch, revnum):
return parent_ids
if merged_data is None:
bzr_props[name[len(SVN_PROP_BZR_REVPROP_PREFIX):]] = svn_props[name]
- (rev.committer, rev.message, date, _) = self._log.get_revision_info(revnum)
+ (rev.committer, rev.message, date) = self._log.get_revision_info(revnum)
if rev.committer is None:
rev.committer = ""
self.assertEqual('1', props["svn:entry:committed-rev"])
self.assertTrue("svn:entry:last-author" in props)
self.assertTrue("svn:entry:committed-date" in props)
+
+ def test_get_property_diff(self):
+ repos_url = self.make_client('d', 'dc')
+ self.client_set_prop("dc", "myprop", "data\n")
+ self.client_commit("dc", "My Message")
+ self.client_set_prop("dc", "myprop", "data\ndata2\n")
+ self.client_commit("dc", "My Message")
+
+ logwalk = LogWalker(scheme=NoBranchingScheme(), transport=SvnRaTransport(repos_url))
+
+ bp = BranchPropertyList(logwalk, self.db)
+ self.assertEqual("data2\n", bp.get_property_diff("", 2, "myprop"))
transport=SvnRaTransport(repos_url))
self.assertFalse(walker.touches_path("trunk", 2))
+
+ def test_get_previous_simple(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(("trunk", 1), walker.get_previous("trunk", 2))
+
+ def test_get_previous_copy(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.client_copy("dc/trunk", "dc/anotherfile")
+ self.client_commit("dc", "My Message")
+
+ walker = logwalker.LogWalker(TrunkBranchingScheme(),
+ transport=SvnRaTransport(repos_url))
+
+ self.assertEqual(("trunk", 1), walker.get_previous("anotherfile", 2))
+
+ def test_get_revision_info(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")
+
+ walker = logwalker.LogWalker(TrunkBranchingScheme(),
+ transport=SvnRaTransport(repos_url))
+
+ info = walker.get_revision_info(1)
+
+ self.assertEqual("", info[0])
+ self.assertEqual("My Message", info[1])
+