Changeset 933 in tailor
- Timestamp:
- 10/20/05 23:33:41 (8 years ago)
- Hash name:
- 20051020213341-7a6fb-a00122f770aab206ad9d16f7fd93e7c7870bc565
- Location:
- vcpx
- Files:
-
- 2 edited
-
svn.py (modified) (2 diffs)
-
tests/svn.py (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
vcpx/svn.py
r897 r933 18 18 from config import ConfigurationError 19 19 20 def changesets_from_svnlog(log, repository, module ):21 from xml.sax import parse22 from xml.sax.handler import ContentHandler 20 def changesets_from_svnlog(log, repository, module, chunksize=2**15): 21 from xml.sax import make_parser 22 from xml.sax.handler import ContentHandler, ErrorHandler 23 23 from changes import ChangesetEntry, Changeset 24 24 from datetime import datetime … … 183 183 self.current_field.append(data) 184 184 185 parser = make_parser() 185 186 handler = SvnXMLLogHandler() 186 parse(log, handler) 187 return handler.changesets 187 parser.setContentHandler(handler) 188 parser.setErrorHandler(ErrorHandler()) 189 190 chunk = log.read(chunksize) 191 while chunk: 192 parser.feed(chunk) 193 for cs in handler.changesets: 194 yield cs 195 handler.changesets = [] 196 chunk = log.read(chunksize) 197 parser.close() 198 for cs in handler.changesets: 199 yield cs 188 200 189 201 -
vcpx/tests/svn.py
r900 r933 25 25 log = self.getSvnLog('svn-simple_rename_test') 26 26 csets = changesets_from_svnlog(log, 'file:///tmp/t/repo', '/trunk') 27 self.assertEqual(len(csets), 2) 28 29 cset = csets[0] 27 28 cset = csets.next() 30 29 self.assertEqual(cset.author, 'lele') 31 30 self.assertEqual(cset.date, datetime(2004,11,12,15,05,37,134366)) … … 41 40 self.assertEqual(entry.action_kind, entry.ADDED) 42 41 43 cset = csets [1]42 cset = csets.next() 44 43 self.assertEqual(cset.author, 'lele') 45 44 self.assertEqual(cset.date, datetime(2004,11,12,15,06,04,193650)) … … 52 51 self.assertEqual(entry.old_name, 'dir') 53 52 53 self.assertRaises(StopIteration, csets.next) 54 54 55 def testRenameOutBehaviour(self): 55 56 """Verify svn log parser behaves correctly on renames out of scope""" … … 57 58 log = self.getSvnLog('svn-rename_out_test') 58 59 csets = changesets_from_svnlog(log, 'http://srv/svn/Shtoom', '/trunk') 59 self.assertEqual(len(csets), 1) 60 61 cset = csets[0] 60 61 cset = csets.next() 62 62 self.assertEqual(cset.author, 'anthony') 63 63 self.assertEqual(cset.date, datetime(2004,11,9,6,54,20,709243)) … … 69 69 self.assertEqual(entry.action_kind, entry.DELETED) 70 70 71 self.assertRaises(StopIteration, csets.next) 72 71 73 def testCopyAndRename(self): 72 74 """Verify svn log parser behaves correctly on copies""" 73 75 74 76 log = self.getSvnLog('svn-copy_and_rename_test') 75 csets = changesets_from_svnlog(log, 'file:///tmp/rep', '/test')77 csets = list(changesets_from_svnlog(log, 'file:///tmp/rep', '/test')) 76 78 self.assertEqual(len(csets), 4) 77 79 … … 111 113 log = self.getSvnLog('svn-svn_r_event_test') 112 114 csets = changesets_from_svnlog(log, 'file:///tmp/rep', '/trunk') 113 self.assertEqual(len(csets), 2) 114 115 cset = csets[1] 115 116 cset = csets.next() 117 118 cset = csets.next() 116 119 self.assertEqual(cset.author, 'cmlenz') 117 self.assertEqual(cset.date, datetime(2005,3,21, 8,34, 02,522947))120 self.assertEqual(cset.date, datetime(2005,3,21, 8,34, 2,522947)) 118 121 self.assertEqual(len(cset.entries), 7) 119 122 … … 143 146 self.assertEqual(entry.action_kind, entry.UPDATED) 144 147 148 self.assertRaises(StopIteration, csets.next) 149 145 150 def testTrackingRoot(self): 146 151 """Verify we are able to track the root of the repository""" 147 152 148 153 log = self.getSvnLog('svn-svn_repos_root_test') 149 csets = changesets_from_svnlog(log, 'svn+ssh://caia/tmp/svn', '/')154 csets = list(changesets_from_svnlog(log, 'svn+ssh://caia/tmp/svn', '/')) 150 155 self.assertEqual(len(csets), 4) 151 156 … … 171 176 csets = changesets_from_svnlog(log, 'http://srv/svn', '/py/dist') 172 177 173 self.assertEqual(len(csets), 1) 174 175 cset = csets[0] 178 cset = csets.next() 176 179 self.assertEqual(len(cset.entries), 3) 177 180 … … 188 191 self.assertEqual(entry.name, 'py/documentation/test.txt') 189 192 self.assertEqual(entry.action_kind, entry.UPDATED) 193 194 self.assertRaises(StopIteration, csets.next) 190 195 191 196 def testUnicode(self): … … 196 201 '/branches/2.1') 197 202 198 self.assertEqual(len(csets), 1) 199 200 log = csets[0].log 203 log = csets.next().log 201 204 self.assertEqual(type(log), type(u'€')) 202 205 self.assertEqual(len(log), 91) … … 204 207 self.assertEqual(len(log.encode('ascii', 'ignore')), 90) 205 208 209 self.assertRaises(StopIteration, csets.next) 210 206 211 def testCopyAndReplace(self): 207 212 """Verify the svn parser handle copy+replace""" … … 210 215 csets = changesets_from_svnlog(log, 'http://srv/repos/trac', '/trunk') 211 216 212 self.assertEqual(len(csets), 1) 213 214 cset = csets[0] 217 cset = csets.next() 215 218 self.assertEqual(len(cset.entries), 7) 216 219 … … 243 246 '/branches/SAMBA_4_0') 244 247 245 self.assertEqual(len(csets), 1) 246 247 cset = csets[0] 248 cset = csets.next() 248 249 self.assertEqual(len(cset.entries), 3) 249 250 … … 259 260 self.assertEqual(entry.name, 'source/nsswitch/wb_common.c') 260 261 self.assertEqual(entry.action_kind, entry.ADDED) 262 263 def testIncrementalParser(self): 264 """Verify that the svn log parser is effectively incremental""" 265 266 log = self.getSvnLog('svn-svn_repos_root_test') 267 csets = list(changesets_from_svnlog(log, 'svn+ssh://caia/tmp/svn', '/', 268 chunksize=100)) 269 self.assertEqual(len(csets), 4)
Note: See TracChangeset
for help on using the changeset viewer.
