diff --git a/py/path/svn/testing/test_urlcommand.py b/py/path/svn/testing/test_urlcommand.py index 457332eef..1e82a2d7c 100644 --- a/py/path/svn/testing/test_urlcommand.py +++ b/py/path/svn/testing/test_urlcommand.py @@ -59,6 +59,44 @@ class TestSvnURLCommandPath(CommonCommandAndBindingTests): py.test.skip('XXX fixme win32') py.test.raises(ValueError, 'py.path.svnurl("http://host.com/foo:bar")') + def test_export(self): + repo, wc = getrepowc('test_export_repo', 'test_export_wc') + foo = wc.join('foo').ensure(dir=True) + bar = foo.join('bar').ensure(file=True) + bar.write('bar\n') + foo.commit('testing something') + exportpath = py.test.ensuretemp('test_export_exportdir') + url = py.path.svnurl(repo + '/foo') + foo = url.export(exportpath.join('foo')) + assert foo == exportpath.join('foo') + assert isinstance(foo, py.path.local) + assert foo.join('bar').check() + assert not foo.join('.svn').check() + + def test_export_rev(self): + repo, wc = getrepowc('test_export_rev_repo', 'test_export_rev_wc') + foo = wc.join('foo').ensure(dir=True) + bar = foo.join('bar').ensure(file=True) + bar.write('bar\n') + rev1 = foo.commit('testing something') + print 'rev1:', rev1 + baz = foo.join('baz').ensure(file=True) + baz.write('baz\n') + rev2 = foo.commit('testing more') + + exportpath = py.test.ensuretemp('test_export_rev_exportdir') + url = py.path.svnurl(repo + '/foo', rev=rev1) + foo1 = url.export(exportpath.join('foo1')) + assert foo1.check() + assert foo1.join('bar').check() + assert not foo1.join('baz').check() + + url = py.path.svnurl(repo + '/foo', rev=rev2) + foo2 = url.export(exportpath.join('foo2')) + assert foo2.check() + assert foo2.join('bar').check() + assert foo2.join('baz').check() + class TestSvnInfoCommand: def test_svn_1_2(self): diff --git a/py/path/svn/testing/test_wccommand.py b/py/path/svn/testing/test_wccommand.py index 1bc4a77e5..096623561 100644 --- a/py/path/svn/testing/test_wccommand.py +++ b/py/path/svn/testing/test_wccommand.py @@ -270,6 +270,19 @@ class TestWCSvnCommandPath(CommonSvnTests): assert len(status.prop_modified) == 0 assert len(status.modified) == 0 + def test_commit_return_value(self): + root = self.root + testfile = root.join('test.txt').ensure(file=True) + testfile.write('test') + rev = root.commit('testing') + assert type(rev) == int + + anotherfile = root.join('another.txt').ensure(file=True) + anotherfile.write('test') + rev2 = root.commit('testing more') + assert type(rev2) == int + assert rev2 == rev + 1 + #def test_log(self): # l = self.root.log() # assert len(l) == 3 # might need to be upped if more tests are added diff --git a/py/path/svn/urlcommand.py b/py/path/svn/urlcommand.py index 3e345e27d..5f6ffd10d 100644 --- a/py/path/svn/urlcommand.py +++ b/py/path/svn/urlcommand.py @@ -132,6 +132,20 @@ checkin message msg.""" process.cmdexec('svn rm -m "%s" "%s"' %(msg, self._escape(self))) self._lsnorevcache.delentry(self.dirpath().strpath) + def export(self, topath): + """ export to a local path + + topath should not exist prior to calling this, returns a + py.path.local instance + """ + topath = py.path.local(topath) + args = ['"%s"' % (self._escape(self),), + '"%s"' % (self._escape(topath),)] + if self.rev is not None: + args = ['-r', str(self.rev)] + args + process.cmdexec('svn export %s' % (' '.join(args),)) + return topath + def ensure(self, *args, **kwargs): """ ensure that an args-joined path exists (by default as a file). If you specify a keyword argument 'dir=True'