Changeset 933 in tailor for vcpx/svn.py


Ignore:
Timestamp:
10/20/05 23:33:41 (8 years ago)
Author:
lele@…
Hash name:
20051020213341-7a6fb-a00122f770aab206ad9d16f7fd93e7c7870bc565
Message:

Use an incremental parser for svn log
This transforms the changesets_from_svnlog() function into a generator
that yields changesets as they are parsed out from XML, that is read
in chunks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vcpx/svn.py

    r897 r933  
    1818from config import ConfigurationError 
    1919 
    20 def changesets_from_svnlog(log, repository, module): 
    21     from xml.sax import parse 
    22     from xml.sax.handler import ContentHandler 
     20def changesets_from_svnlog(log, repository, module, chunksize=2**15): 
     21    from xml.sax import make_parser 
     22    from xml.sax.handler import ContentHandler, ErrorHandler 
    2323    from changes import ChangesetEntry, Changeset 
    2424    from datetime import datetime 
     
    183183            self.current_field.append(data) 
    184184 
     185    parser = make_parser() 
    185186    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 
    188200 
    189201 
Note: See TracChangeset for help on using the changeset viewer.