SVN: zpkgtools/branches/jim-relpath/zpkgtools/ Adding logic to convert base paths to file urls.

Jim Fulton <[email protected]>
Newsgroups gmane.comp.web.zope.public-cvs
Message-ID <[email protected]>
Log message for revision 30684:
  Adding logic to convert base paths to file urls.
  

Changed:
  U   zpkgtools/branches/jim-relpath/zpkgtools/locationmap.py
  U   zpkgtools/branches/jim-relpath/zpkgtools/tests/test_locationmap.py

-=-
Modified: zpkgtools/branches/jim-relpath/zpkgtools/locationmap.py
===================================================================
--- zpkgtools/branches/jim-relpath/zpkgtools/locationmap.py	2005-06-08 11:42:34 UTC (rev 30683)
+++ zpkgtools/branches/jim-relpath/zpkgtools/locationmap.py	2005-06-08 11:44:56 UTC (rev 30684)
@@ -30,6 +30,7 @@
 
 _logger = logging.getLogger(__name__)
 
+urlmatch = re.compile(r'[a-zA-Z]+://').match
 
 class MapLoadingError(ValueError):
     def __init__(self, message, filename, lineno):
@@ -168,6 +169,15 @@
         except ValueError:
             # conventional URL
             if cvsbase is None:
+                if base is None:
+                    base = ''
+                    
+                if not urlmatch(base):
+                    base = ('file://' +
+                            urllib.pathname2url(os.path.abspath(base))
+                            + '/'
+                            )
+
                 url = urlparse.urljoin(base, url)
         else:
             if isinstance(cvsurl, cvsloader.RepositoryUrl):

Modified: zpkgtools/branches/jim-relpath/zpkgtools/tests/test_locationmap.py
===================================================================
--- zpkgtools/branches/jim-relpath/zpkgtools/tests/test_locationmap.py	2005-06-08 11:42:34 UTC (rev 30683)
+++ zpkgtools/branches/jim-relpath/zpkgtools/tests/test_locationmap.py	2005-06-08 11:44:56 UTC (rev 30684)
@@ -165,14 +165,22 @@
         sio = StringIO("foo.*  cvs://cvs.example.org/cvsroot:foo\n"
                        "bar.*  file:///some/path/\n"
                        "bat.*  some/path\n")
+
+        old_getcwd = os.getcwd
+        os.getcwd = lambda : '/home/dudette/python/project'
+        
         map = locationmap.load(sio)
+        
+        os.getcwd = old_getcwd
+
         eq = self.assertEqual
         self.assert_("foo.bar" in map)
         self.assert_("bar.foo" in map)
         self.assert_("bat.splat.funk" in map)
         eq(map["foo.bar"], "cvs://cvs.example.org/cvsroot:foo/bar")
         eq(map["bar.foo"], "file:///some/path/foo")
-        eq(map["bat.splat.funk"], "some/path/splat/funk")
+        eq(map["bat.splat.funk"],
+           "file:///home/dudette/python/project/some/path/splat/funk")
 
     def test_unmatched_wildcard(self):
         sio = StringIO("foo.bar.*  some/path\n")
@@ -326,7 +334,81 @@
         self.assert_(m.has_key("bat"))
         self.assertEqual(m["bat"], 3)
 
+    def test_load_w_relative_paths(self):
+        map_file = StringIO('''
+foo     svn+ssh://svn.zope.org/repos/main/Foo/trunk/src/foo
+bar     ../../bar
+baz     baz
+spam    file://spam.com/spam
+tools   cvs://[email protected]:pserver/'''
+      '''cvsroot/python:python/n\ondist/sandbox/setuptools/setuptools
+        ''')
 
+        old_getcwd = os.getcwd
+        os.getcwd = lambda : '/home/dudette/python/project'
+
+        mappingNone = locationmap.load(map_file)
+
+        map_file.seek(0)
+        mapping = locationmap.load(map_file, '')
+
+        map_file.seek(0)
+        mappingAbsBase = locationmap.load(map_file, '/projects/special/demo')
+
+        map_file.seek(0)
+        mappingRelBase = locationmap.load(map_file, 'special/demo')
+
+        map_file.seek(0)
+        mappingUrlBase = locationmap.load(map_file, 'http://acme.com/xxx')
+
+        os.getcwd = old_getcwd
+
+        # Several of the locations should be unaffected
+        for m in (mappingNone, mappingAbsBase, mappingRelBase,
+                  mappingUrlBase):
+
+            self.assertEqual(
+                m['foo'],
+                'svn+ssh://svn.zope.org/repos/main/Foo/trunk/src/foo',
+                )
+
+            self.assertEqual(
+                mappingNone['spam'],
+                'file://spam.com/spam',
+                )
+
+            self.assertEqual(
+                mappingNone['tools'],
+                'cvs://[email protected]:pserver/'
+                'cvsroot/python:python/n\ondist/sandbox/setuptools/setuptools'
+                )
+
+        self.assertEqual(
+            mappingNone['bar'],
+            'file:///home/dudette/bar',
+            )
+        self.assertEqual(
+            mappingNone['baz'],
+            'file:///home/dudette/python/project/baz',
+            )
+            
+
+
+
+    """
+We often want to use relative file paths in location maps.
+
+We can currently use URL, including file URLs.  But these must be absolute.
+
+Let's look at a sample map file that has several kinds of URLs and
+relative paths:
+
+
+Now, we'll load this map.  
+
+
+"""
+
 def test_suite():
     suite = unittest.makeSuite(LoadTestCase)
     suite.addTest(unittest.makeSuite(CvsWorkingDirectoryTestCase))

_______________________________________________
Zope-CVS maillist  -  [email protected]
http://mail.zope.org/mailman/listinfo/zope-cvs

Zope CVS instructions: http://dev.zope.org/CVS
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.