Rev 6286: (gz) Avoid using URL specific join and split when seperating segment in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/

Patch Queue Manager pqm at pqm.ubuntu.com
Thu Nov 24 12:50:51 UTC 2011


At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 6286 [merge]
revision-id: pqm at pqm.ubuntu.com-20111124125050-ltmdzdw0jabk998p
parent: pqm at pqm.ubuntu.com-20111123141103-afx95vxa2t07ijy6
parent: martin.packman at canonical.com-20111124120650-d2ba5l16qydjdyvb
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2011-11-24 12:50:50 +0000
message:
  (gz) Avoid using URL specific join and split when seperating segment
   parameters (Martin Packman)
modified:
  bzrlib/tests/test_urlutils.py  test_urlutils.py-20060502192900-46b1f9579987cf9c
  bzrlib/urlutils.py             urlutils.py-20060502195429-e8a161ecf8fac004
  doc/en/release-notes/bzr-2.5.txt bzr2.5.txt-20110708125756-587p0hpw7oke4h05-1
=== modified file 'bzrlib/tests/test_urlutils.py'
--- a/bzrlib/tests/test_urlutils.py	2011-09-04 23:18:43 +0000
+++ b/bzrlib/tests/test_urlutils.py	2011-11-18 15:31:48 +0000
@@ -501,6 +501,7 @@
 
     def test_split_segment_parameters_raw(self):
         split_segment_parameters_raw = urlutils.split_segment_parameters_raw
+        # Check relative references with absolute paths
         self.assertEquals(("/some/path", []),
             split_segment_parameters_raw("/some/path"))
         self.assertEquals(("/some/path", ["tip"]),
@@ -511,19 +512,22 @@
             split_segment_parameters_raw("/somedir/path,heads%2Ftip"))
         self.assertEquals(("/somedir/path", ["heads%2Ftip", "bar"]),
             split_segment_parameters_raw("/somedir/path,heads%2Ftip,bar"))
-        self.assertEquals(("/", ["key1=val1"]),
+        # Check relative references with relative paths
+        self.assertEquals(("", ["key1=val1"]),
             split_segment_parameters_raw(",key1=val1"))
         self.assertEquals(("foo/", ["key1=val1"]),
             split_segment_parameters_raw("foo/,key1=val1"))
-        self.assertEquals(("/foo", ["key1=val1"]),
+        self.assertEquals(("foo", ["key1=val1"]),
             split_segment_parameters_raw("foo,key1=val1"))
         self.assertEquals(("foo/base,la=bla/other/elements", []),
             split_segment_parameters_raw("foo/base,la=bla/other/elements"))
         self.assertEquals(("foo/base,la=bla/other/elements", ["a=b"]),
             split_segment_parameters_raw("foo/base,la=bla/other/elements,a=b"))
+        # TODO: Check full URLs as well as relative references
 
     def test_split_segment_parameters(self):
         split_segment_parameters = urlutils.split_segment_parameters
+        # Check relative references with absolute paths
         self.assertEquals(("/some/path", {}),
             split_segment_parameters("/some/path"))
         self.assertEquals(("/some/path", {"branch": "tip"}),
@@ -538,7 +542,8 @@
                 "/somedir/path,ref=heads%2Ftip,key1=val1"))
         self.assertEquals(("/somedir/path", {"ref": "heads%2F=tip"}),
             split_segment_parameters("/somedir/path,ref=heads%2F=tip"))
-        self.assertEquals(("/", {"key1": "val1"}),
+        # Check relative references with relative paths
+        self.assertEquals(("", {"key1": "val1"}),
             split_segment_parameters(",key1=val1"))
         self.assertEquals(("foo/", {"key1": "val1"}),
             split_segment_parameters("foo/,key1=val1"))
@@ -547,6 +552,7 @@
         self.assertEquals(("foo/base,key1=val1/other/elements",
             {"key2": "val2"}), split_segment_parameters(
                 "foo/base,key1=val1/other/elements,key2=val2"))
+        # TODO: Check full URLs as well as relative references
 
     def test_win32_strip_local_trailing_slash(self):
         strip = urlutils._win32_strip_local_trailing_slash

=== modified file 'bzrlib/urlutils.py'
--- a/bzrlib/urlutils.py	2011-11-16 10:36:31 +0000
+++ b/bzrlib/urlutils.py	2011-11-21 09:59:54 +0000
@@ -441,11 +441,15 @@
     :param url: A relative or absolute URL
     :return: (url, subsegments)
     """
-    (parent_url, child_dir) = split(url)
-    subsegments = child_dir.split(",")
-    if len(subsegments) == 1:
+    # GZ 2011-11-18: Dodgy removing the terminal slash like this, function
+    #                operates on urls not url+segments, and Transport classes
+    #                should not be blindly adding slashes in the first place. 
+    lurl = strip_trailing_slash(url)
+    # Segments begin at first comma after last forward slash, if one exists
+    segment_start = lurl.find(",", lurl.rfind("/")+1)
+    if segment_start == -1:
         return (url, [])
-    return (join(parent_url, subsegments[0]), subsegments[1:])
+    return (lurl[:segment_start], lurl[segment_start+1:].split(","))
 
 
 def split_segment_parameters(url):

=== modified file 'doc/en/release-notes/bzr-2.5.txt'
--- a/doc/en/release-notes/bzr-2.5.txt	2011-11-23 14:11:03 +0000
+++ b/doc/en/release-notes/bzr-2.5.txt	2011-11-24 12:06:50 +0000
@@ -50,6 +50,12 @@
 * Resolve regression from colocated branch path handling, by ensuring that
   unreserved characters are unquoted in URLs. (Martin Packman, #842223)
 
+* Split segments from URLs for colocated branches without assuming the
+  combined form is a valid. (Martin Packman, #842233)
+
+* Support looking up revision numbers by revision id in empty branches.
+  (Jelmer Vernooij, #535031)
+
 * Support verifying signatures on remote repositories.
   (Jelmer Vernooij, #889694)
 




More information about the bazaar-commits mailing list