Index: subversion/bindings/swig/svn_ra.i =================================================================== --- subversion/bindings/swig/svn_ra.i (revision 19607) +++ subversion/bindings/swig/svn_ra.i (working copy) @@ -56,6 +56,7 @@ }; %apply apr_hash_t **PROPHASH { apr_hash_t **props }; +%apply apr_hash_t **DIRENTHASH { apr_hash_t **dirents }; %apply const char *MAY_BE_NULL { const char *comment, Index: subversion/bindings/swig/python/tests/ra.py =================================================================== --- subversion/bindings/swig/python/tests/ra.py (revision 19607) +++ subversion/bindings/swig/python/tests/ra.py (working copy) @@ -38,6 +38,26 @@ fs_revnum = fs.youngest_rev(self.fs) self.assertEqual(ra_revnum,fs_revnum) + def test_get_dir2(self): + (dirents,_,props) = ra.get_dir2(self.ra_ctx, '', 1, core.SVN_DIRENT_KIND) + self.assertTrue(dirents.has_key('trunk')) + self.assertTrue(dirents.has_key('branches')) + self.assertTrue(dirents.has_key('tags')) + self.assertEqual(dirents['trunk'].kind, core.svn_node_dir) + self.assertEqual(dirents['branches'].kind, core.svn_node_dir) + self.assertEqual(dirents['tags'].kind, core.svn_node_dir) + self.assertTrue(props.has_key(core.SVN_PROP_ENTRY_UUID)) + self.assertTrue(props.has_key(core.SVN_PROP_ENTRY_LAST_AUTHOR)) + + (dirents,_,_) = ra.get_dir2(self.ra_ctx, 'trunk', 1, core.SVN_DIRENT_KIND) + + self.assertEqual(dirents, {}) + + (dirents,_,_) = ra.get_dir2(self.ra_ctx, 'trunk', 10, core.SVN_DIRENT_KIND) + + self.assertTrue(dirents.has_key('README2.txt')) + self.assertEqual(dirents['README2.txt'].kind,core.svn_node_file) + def suite(): return unittest.makeSuite(SubversionRepositoryTestCase, 'test', suiteClass=SubversionRepositoryTestSetup) Index: subversion/bindings/swig/include/apr.swg =================================================================== --- subversion/bindings/swig/include/apr.swg (revision 19607) +++ subversion/bindings/swig/include/apr.swg (working copy) @@ -146,14 +146,22 @@ /* ----------------------------------------------------------------------- create an OUTPUT argument defn for an apr_hash_t ** which is storing + dirent values +*/ +%typemap(python,in,numinputs=0) apr_hash_t **DIRENTHASH = apr_hash_t **OUTPUT; +%typemap(python,argout,fragment="t_output_helper") apr_hash_t **DIRENTHASH { + $result = t_output_helper($result, svn_swig_py_convert_hash(*$1, + SWIGTYPE_p_svn_dirent_t, NULL)); +} + +/* ----------------------------------------------------------------------- + create an OUTPUT argument defn for an apr_hash_t ** which is storing property values */ %typemap(python,in,numinputs=0) apr_hash_t **PROPHASH = apr_hash_t **OUTPUT; -%typemap(python,argout) apr_hash_t **PROPHASH { - /* toss prior result, get new result from the hash */ - Py_DECREF($result); - $result = svn_swig_py_prophash_to_dict(*$1); +%typemap(python,argout,fragment="t_output_helper") apr_hash_t **PROPHASH { + $result = t_output_helper($result, svn_swig_py_prophash_to_dict(*$1)); } %typemap(perl5,in,numinputs=0) apr_hash_t **PROPHASH = apr_hash_t **OUTPUT;