( (Python.Package (name buildbot) (body (Python.Assign (targets (Python.Name (id 'version') (ctx (Python.Store)) (lineno 3) (col_offset 0) )) (value (Python.Str (s '0.7.5') (lineno 3) (col_offset 10) )) (lineno 3) (col_offset 0) ) ) (modules (Python.Module (body (Python.ImportFrom (module 'buildbot.process') (names (Python.Alias (name 'base') )) (level 0) (lineno 2) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.status') (names (Python.Alias (name 'builder') )) (level 0) (lineno 3) (col_offset 0) ) (Python.ClassDef (name 'BuildSet') (bases ) (body (Python.Expr (value (Python.Str (s 'I represent a set of potential Builds, all of the same source tree, across a specified list of Builders. I can represent a build of a specific version of the source tree (named by source.branch and source.revision), or a build of a certain set of Changes (source.changes=list).') (lineno 11) (col_offset -1) )) (lineno 11) (col_offset -1) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 13) (col_offset 17) ) (Python.Name (id 'builderNames') (ctx (Python.Param)) (lineno 13) (col_offset 23) ) (Python.Name (id 'source') (ctx (Python.Param)) (lineno 13) (col_offset 37) ) (Python.Name (id 'reason') (ctx (Python.Param)) (lineno 13) (col_offset 45) ) (Python.Name (id 'bsid') (ctx (Python.Param)) (lineno 13) (col_offset 58) )) (defaults (Python.Name (id 'None') (ctx (Python.Load)) (lineno 13) (col_offset 52) ) (Python.Name (id 'None') (ctx (Python.Load)) (lineno 13) (col_offset 63) )) )) (body (Python.Expr (value (Python.Str (s ' @param source: a L{buildbot.sourcestamp.SourceStamp} ') (lineno 16) (col_offset -1) )) (lineno 16) (col_offset -1) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 17) (col_offset 8) )) (attr 'builderNames') (ctx (Python.Store)) (lineno 17) (col_offset 8) )) (value (Python.Name (id 'builderNames') (ctx (Python.Load)) (lineno 17) (col_offset 28) )) (lineno 17) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 18) (col_offset 8) )) (attr 'source') (ctx (Python.Store)) (lineno 18) (col_offset 8) )) (value (Python.Name (id 'source') (ctx (Python.Load)) (lineno 18) (col_offset 22) )) (lineno 18) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 19) (col_offset 8) )) (attr 'reason') (ctx (Python.Store)) (lineno 19) (col_offset 8) )) (value (Python.Name (id 'reason') (ctx (Python.Load)) (lineno 19) (col_offset 22) )) (lineno 19) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 20) (col_offset 8) )) (attr 'stillHopeful') (ctx (Python.Store)) (lineno 20) (col_offset 8) )) (value (Python.Name (id 'True') (ctx (Python.Load)) (lineno 20) (col_offset 28) )) (lineno 20) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 21) (col_offset 8) )) (attr 'status') (ctx (Python.Store)) (lineno 21) (col_offset 8) ) (Python.Name (id 'bss') (ctx (Python.Store)) (lineno 21) (col_offset 22) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'builder') (ctx (Python.Load)) (lineno 21) (col_offset 28) )) (attr 'BuildSetStatus') (ctx (Python.Load)) (lineno 21) (col_offset 28) )) (args (Python.Name (id 'source') (ctx (Python.Load)) (lineno 21) (col_offset 51) ) (Python.Name (id 'reason') (ctx (Python.Load)) (lineno 21) (col_offset 59) ) (Python.Name (id 'builderNames') (ctx (Python.Load)) (lineno 22) (col_offset 51) ) (Python.Name (id 'bsid') (ctx (Python.Load)) (lineno 22) (col_offset 65) )) (keywords ) (lineno 21) (col_offset 28) )) (lineno 21) (col_offset 8) )) (decorators ) (lineno 13) (col_offset 4) ) (Python.FunctionDef (name 'waitUntilSuccess') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 24) (col_offset 25) )) (defaults ) )) (body (Python.Return (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 25) (col_offset 15) )) (attr 'status') (ctx (Python.Load)) (lineno 25) (col_offset 15) )) (attr 'waitUntilSuccess') (ctx (Python.Load)) (lineno 25) (col_offset 15) )) (args ) (keywords ) (lineno 25) (col_offset 15) )) (lineno 25) (col_offset 8) )) (decorators ) (lineno 24) (col_offset 4) ) (Python.FunctionDef (name 'waitUntilFinished') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 26) (col_offset 26) )) (defaults ) )) (body (Python.Return (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 27) (col_offset 15) )) (attr 'status') (ctx (Python.Load)) (lineno 27) (col_offset 15) )) (attr 'waitUntilFinished') (ctx (Python.Load)) (lineno 27) (col_offset 15) )) (args ) (keywords ) (lineno 27) (col_offset 15) )) (lineno 27) (col_offset 8) )) (decorators ) (lineno 26) (col_offset 4) ) (Python.FunctionDef (name 'start') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 29) (col_offset 14) ) (Python.Name (id 'builders') (ctx (Python.Param)) (lineno 29) (col_offset 20) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'This is called by the BuildMaster to actually create and submit the BuildRequests.') (lineno 31) (col_offset -1) )) (lineno 31) (col_offset -1) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 32) (col_offset 8) )) (attr 'requests') (ctx (Python.Store)) (lineno 32) (col_offset 8) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 32) (col_offset 24) )) (lineno 32) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'reqs') (ctx (Python.Store)) (lineno 33) (col_offset 8) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 33) (col_offset 15) )) (lineno 33) (col_offset 8) ) (Python.For (target (Python.Name (id 'b') (ctx (Python.Store)) (lineno 36) (col_offset 12) )) (iter (Python.Name (id 'builders') (ctx (Python.Load)) (lineno 36) (col_offset 17) )) (body (Python.Assign (targets (Python.Name (id 'req') (ctx (Python.Store)) (lineno 37) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'base') (ctx (Python.Load)) (lineno 37) (col_offset 18) )) (attr 'BuildRequest') (ctx (Python.Load)) (lineno 37) (col_offset 18) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 37) (col_offset 36) )) (attr 'reason') (ctx (Python.Load)) (lineno 37) (col_offset 36) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 37) (col_offset 49) )) (attr 'source') (ctx (Python.Load)) (lineno 37) (col_offset 49) ) (Python.Attribute (value (Python.Name (id 'b') (ctx (Python.Load)) (lineno 37) (col_offset 62) )) (attr 'name') (ctx (Python.Load)) (lineno 37) (col_offset 62) )) (keywords ) (lineno 37) (col_offset 18) )) (lineno 37) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'reqs') (ctx (Python.Load)) (lineno 38) (col_offset 12) )) (attr 'append') (ctx (Python.Load)) (lineno 38) (col_offset 12) )) (args (Python.Tuple (elts (Python.Name (id 'b') (ctx (Python.Load)) (lineno 38) (col_offset 25) ) (Python.Name (id 'req') (ctx (Python.Load)) (lineno 38) (col_offset 28) )) (ctx (Python.Load)) (lineno 38) (col_offset 25) )) (keywords ) (lineno 38) (col_offset 12) )) (lineno 38) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 39) (col_offset 12) )) (attr 'requests') (ctx (Python.Load)) (lineno 39) (col_offset 12) )) (attr 'append') (ctx (Python.Load)) (lineno 39) (col_offset 12) )) (args (Python.Name (id 'req') (ctx (Python.Load)) (lineno 39) (col_offset 33) )) (keywords ) (lineno 39) (col_offset 12) )) (lineno 39) (col_offset 12) ) (Python.Assign (targets (Python.Name (id 'd') (ctx (Python.Store)) (lineno 40) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'req') (ctx (Python.Load)) (lineno 40) (col_offset 16) )) (attr 'waitUntilFinished') (ctx (Python.Load)) (lineno 40) (col_offset 16) )) (args ) (keywords ) (lineno 40) (col_offset 16) )) (lineno 40) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 41) (col_offset 12) )) (attr 'addCallback') (ctx (Python.Load)) (lineno 41) (col_offset 12) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 41) (col_offset 26) )) (attr 'requestFinished') (ctx (Python.Load)) (lineno 41) (col_offset 26) ) (Python.Name (id 'req') (ctx (Python.Load)) (lineno 41) (col_offset 48) )) (keywords ) (lineno 41) (col_offset 12) )) (lineno 41) (col_offset 12) )) (orelse ) (lineno 36) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'req_statuses') (ctx (Python.Store)) (lineno 44) (col_offset 8) )) (value (Python.ListComp (elt (Python.Attribute (value (Python.Name (id 'req') (ctx (Python.Load)) (lineno 44) (col_offset 24) )) (attr 'status') (ctx (Python.Load)) (lineno 44) (col_offset 24) )) (generators (Python.Comprehension (target (Python.Name (id 'req') (ctx (Python.Store)) (lineno 44) (col_offset 39) )) (iter (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 44) (col_offset 46) )) (attr 'requests') (ctx (Python.Load)) (lineno 44) (col_offset 46) )) (ifs ) )) (lineno 44) (col_offset 24) )) (lineno 44) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 45) (col_offset 8) )) (attr 'status') (ctx (Python.Load)) (lineno 45) (col_offset 8) )) (attr 'setBuildRequestStatuses') (ctx (Python.Load)) (lineno 45) (col_offset 8) )) (args (Python.Name (id 'req_statuses') (ctx (Python.Load)) (lineno 45) (col_offset 44) )) (keywords ) (lineno 45) (col_offset 8) )) (lineno 45) (col_offset 8) ) (Python.For (target (Python.Tuple (elts (Python.Name (id 'b') (ctx (Python.Store)) (lineno 48) (col_offset 12) ) (Python.Name (id 'req') (ctx (Python.Store)) (lineno 48) (col_offset 14) )) (ctx (Python.Store)) (lineno 48) (col_offset 8) )) (iter (Python.Name (id 'reqs') (ctx (Python.Load)) (lineno 48) (col_offset 21) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'b') (ctx (Python.Load)) (lineno 49) (col_offset 12) )) (attr 'submitBuildRequest') (ctx (Python.Load)) (lineno 49) (col_offset 12) )) (args (Python.Name (id 'req') (ctx (Python.Load)) (lineno 49) (col_offset 33) )) (keywords ) (lineno 49) (col_offset 12) )) (lineno 49) (col_offset 12) )) (orelse ) (lineno 48) (col_offset 8) )) (decorators ) (lineno 29) (col_offset 4) ) (Python.FunctionDef (name 'requestFinished') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 51) (col_offset 24) ) (Python.Name (id 'buildstatus') (ctx (Python.Param)) (lineno 51) (col_offset 30) ) (Python.Name (id 'req') (ctx (Python.Param)) (lineno 51) (col_offset 43) )) (defaults ) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 57) (col_offset 8) )) (attr 'requests') (ctx (Python.Load)) (lineno 57) (col_offset 8) )) (attr 'remove') (ctx (Python.Load)) (lineno 57) (col_offset 8) )) (args (Python.Name (id 'req') (ctx (Python.Load)) (lineno 57) (col_offset 29) )) (keywords ) (lineno 57) (col_offset 8) )) (lineno 57) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'results') (ctx (Python.Store)) (lineno 58) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'buildstatus') (ctx (Python.Load)) (lineno 58) (col_offset 18) )) (attr 'getResults') (ctx (Python.Load)) (lineno 58) (col_offset 18) )) (args ) (keywords ) (lineno 58) (col_offset 18) )) (lineno 58) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'results') (ctx (Python.Load)) (lineno 59) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Attribute (value (Python.Name (id 'builder') (ctx (Python.Load)) (lineno 59) (col_offset 22) )) (attr 'FAILURE') (ctx (Python.Load)) (lineno 59) (col_offset 22) )) (lineno 59) (col_offset 11) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 60) (col_offset 12) )) (attr 'status') (ctx (Python.Load)) (lineno 60) (col_offset 12) )) (attr 'setResults') (ctx (Python.Load)) (lineno 60) (col_offset 12) )) (args (Python.Name (id 'results') (ctx (Python.Load)) (lineno 60) (col_offset 35) )) (keywords ) (lineno 60) (col_offset 12) )) (lineno 60) (col_offset 12) ) (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 61) (col_offset 15) )) (attr 'stillHopeful') (ctx (Python.Load)) (lineno 61) (col_offset 15) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 65) (col_offset 16) )) (attr 'stillHopeful') (ctx (Python.Store)) (lineno 65) (col_offset 16) )) (value (Python.Name (id 'False') (ctx (Python.Load)) (lineno 65) (col_offset 36) )) (lineno 65) (col_offset 16) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 66) (col_offset 16) )) (attr 'status') (ctx (Python.Load)) (lineno 66) (col_offset 16) )) (attr 'giveUpHope') (ctx (Python.Load)) (lineno 66) (col_offset 16) )) (args ) (keywords ) (lineno 66) (col_offset 16) )) (lineno 66) (col_offset 16) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 67) (col_offset 16) )) (attr 'status') (ctx (Python.Load)) (lineno 67) (col_offset 16) )) (attr 'notifySuccessWatchers') (ctx (Python.Load)) (lineno 67) (col_offset 16) )) (args ) (keywords ) (lineno 67) (col_offset 16) )) (lineno 67) (col_offset 16) )) (orelse ) (lineno 61) (col_offset 12) )) (orelse ) (lineno 59) (col_offset 8) ) (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 68) (col_offset 15) )) (attr 'requests') (ctx (Python.Load)) (lineno 68) (col_offset 15) )) (lineno 68) (col_offset 11) )) (body (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 71) (col_offset 15) )) (attr 'stillHopeful') (ctx (Python.Load)) (lineno 71) (col_offset 15) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 72) (col_offset 16) )) (attr 'status') (ctx (Python.Load)) (lineno 72) (col_offset 16) )) (attr 'setResults') (ctx (Python.Load)) (lineno 72) (col_offset 16) )) (args (Python.Attribute (value (Python.Name (id 'builder') (ctx (Python.Load)) (lineno 72) (col_offset 39) )) (attr 'SUCCESS') (ctx (Python.Load)) (lineno 72) (col_offset 39) )) (keywords ) (lineno 72) (col_offset 16) )) (lineno 72) (col_offset 16) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 73) (col_offset 16) )) (attr 'status') (ctx (Python.Load)) (lineno 73) (col_offset 16) )) (attr 'notifySuccessWatchers') (ctx (Python.Load)) (lineno 73) (col_offset 16) )) (args ) (keywords ) (lineno 73) (col_offset 16) )) (lineno 73) (col_offset 16) )) (orelse ) (lineno 71) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 74) (col_offset 12) )) (attr 'status') (ctx (Python.Load)) (lineno 74) (col_offset 12) )) (attr 'notifyFinishedWatchers') (ctx (Python.Load)) (lineno 74) (col_offset 12) )) (args ) (keywords ) (lineno 74) (col_offset 12) )) (lineno 74) (col_offset 12) )) (orelse ) (lineno 68) (col_offset 8) )) (decorators ) (lineno 51) (col_offset 4) )) (lineno 6) (col_offset 0) )) (name 'buildset') ) (Python.Package (name changes) (body ) (modules (Python.Module (body (Python.ImportFrom (module 'twisted.application') (names (Python.Alias (name 'service') )) (level 0) (lineno 3) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.twcompat') (names (Python.Alias (name 'implements') )) (level 0) (lineno 5) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.interfaces') (names (Python.Alias (name 'IChangeSource') )) (level 0) (lineno 6) (col_offset 0) ) (Python.ImportFrom (module 'buildbot') (names (Python.Alias (name 'util') )) (level 0) (lineno 7) (col_offset 0) ) (Python.ClassDef (name 'ChangeSource') (bases (Python.Attribute (value (Python.Name (id 'service') (ctx (Python.Load)) (lineno 9) (col_offset 19) )) (attr 'Service') (ctx (Python.Load)) (lineno 9) (col_offset 19) ) (Python.Attribute (value (Python.Name (id 'util') (ctx (Python.Load)) (lineno 9) (col_offset 36) )) (attr 'ComparableMixin') (ctx (Python.Load)) (lineno 9) (col_offset 36) )) (body (Python.If (test (Python.Name (id 'implements') (ctx (Python.Load)) (lineno 10) (col_offset 7) )) (body (Python.Expr (value (Python.Call (func (Python.Name (id 'implements') (ctx (Python.Load)) (lineno 11) (col_offset 8) )) (args (Python.Name (id 'IChangeSource') (ctx (Python.Load)) (lineno 11) (col_offset 19) )) (keywords ) (lineno 11) (col_offset 8) )) (lineno 11) (col_offset 8) )) (orelse (Python.Assign (targets (Python.Name (id '__implements__') (ctx (Python.Store)) (lineno 13) (col_offset 8) )) (value (Python.Tuple (elts (Python.Name (id 'IChangeSource') (ctx (Python.Load)) (lineno 13) (col_offset 25) ) (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'service') (ctx (Python.Load)) (lineno 13) (col_offset 40) )) (attr 'Service') (ctx (Python.Load)) (lineno 13) (col_offset 40) )) (attr '__implements__') (ctx (Python.Load)) (lineno 13) (col_offset 40) )) (ctx (Python.Load)) (lineno 13) (col_offset 25) )) (lineno 13) (col_offset 8) )) (lineno 10) (col_offset 4) )) (lineno 9) (col_offset 0) )) (name 'base') ) (Python.Module (body (Python.Import (names (Python.Alias (name 'time') )) (lineno 1) (col_offset 0) ) (Python.ImportFrom (module 'urllib') (names (Python.Alias (name 'urlopen') )) (level 0) (lineno 2) (col_offset 0) ) (Python.ImportFrom (module 'xml.dom') (names (Python.Alias (name 'minidom') ) (Python.Alias (name 'Node') )) (level 0) (lineno 3) (col_offset 0) ) (Python.ImportFrom (module 'twisted.python') (names (Python.Alias (name 'log') ) (Python.Alias (name 'failure') )) (level 0) (lineno 5) (col_offset 0) ) (Python.ImportFrom (module 'twisted.internet') (names (Python.Alias (name 'defer') ) (Python.Alias (name 'reactor') )) (level 0) (lineno 6) (col_offset 0) ) (Python.ImportFrom (module 'twisted.internet.task') (names (Python.Alias (name 'LoopingCall') )) (level 0) (lineno 7) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.changes') (names (Python.Alias (name 'base') ) (Python.Alias (name 'changes') )) (level 0) (lineno 9) (col_offset 0) ) (Python.ClassDef (name 'InvalidResultError') (bases (Python.Name (id 'Exception') (ctx (Python.Load)) (lineno 11) (col_offset 25) )) (body (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 12) (col_offset 17) ) (Python.Name (id 'value') (ctx (Python.Param)) (lineno 12) (col_offset 23) )) (defaults (Python.Str (s 'InvalidResultError') (lineno 12) (col_offset 29) )) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 13) (col_offset 8) )) (attr 'value') (ctx (Python.Store)) (lineno 13) (col_offset 8) )) (value (Python.Name (id 'value') (ctx (Python.Load)) (lineno 13) (col_offset 21) )) (lineno 13) (col_offset 8) )) (decorators ) (lineno 12) (col_offset 4) ) (Python.FunctionDef (name '__str__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 14) (col_offset 16) )) (defaults ) )) (body (Python.Return (value (Python.Call (func (Python.Name (id 'repr') (ctx (Python.Load)) (lineno 15) (col_offset 15) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 15) (col_offset 20) )) (attr 'value') (ctx (Python.Load)) (lineno 15) (col_offset 20) )) (keywords ) (lineno 15) (col_offset 15) )) (lineno 15) (col_offset 8) )) (decorators ) (lineno 14) (col_offset 4) )) (lineno 11) (col_offset 0) ) (Python.ClassDef (name 'EmptyResult') (bases (Python.Name (id 'Exception') (ctx (Python.Load)) (lineno 17) (col_offset 18) )) (body (Python.Pass)) (lineno 17) (col_offset 0) ) (Python.ClassDef (name 'NoMoreCiNodes') (bases (Python.Name (id 'Exception') (ctx (Python.Load)) (lineno 20) (col_offset 20) )) (body (Python.Pass)) (lineno 20) (col_offset 0) ) (Python.ClassDef (name 'NoMoreFileNodes') (bases (Python.Name (id 'Exception') (ctx (Python.Load)) (lineno 23) (col_offset 22) )) (body (Python.Pass)) (lineno 23) (col_offset 0) ) (Python.ClassDef (name 'BonsaiResult') (bases ) (body (Python.Expr (value (Python.Str (s 'I hold a list of CiNodes') (lineno 27) (col_offset 4) )) (lineno 27) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 28) (col_offset 17) ) (Python.Name (id 'nodes') (ctx (Python.Param)) (lineno 28) (col_offset 23) )) (defaults (Python.List (elts ) (ctx (Python.Load)) (lineno 28) (col_offset 29) )) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 29) (col_offset 8) )) (attr 'nodes') (ctx (Python.Store)) (lineno 29) (col_offset 8) )) (value (Python.Name (id 'nodes') (ctx (Python.Load)) (lineno 29) (col_offset 21) )) (lineno 29) (col_offset 8) )) (decorators ) (lineno 28) (col_offset 4) ) (Python.FunctionDef (name '__cmp__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 31) (col_offset 16) ) (Python.Name (id 'other') (ctx (Python.Param)) (lineno 31) (col_offset 22) )) (defaults ) )) (body (Python.If (test (Python.Compare (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 32) (col_offset 11) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 32) (col_offset 15) )) (attr 'nodes') (ctx (Python.Load)) (lineno 32) (col_offset 15) )) (keywords ) (lineno 32) (col_offset 11) )) (ops (Python.NotEq)) (comparators (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 32) (col_offset 30) )) (args (Python.Attribute (value (Python.Name (id 'other') (ctx (Python.Load)) (lineno 32) (col_offset 34) )) (attr 'nodes') (ctx (Python.Load)) (lineno 32) (col_offset 34) )) (keywords ) (lineno 32) (col_offset 30) )) (lineno 32) (col_offset 11) )) (body (Python.Return (value (Python.Name (id 'False') (ctx (Python.Load)) (lineno 33) (col_offset 19) )) (lineno 33) (col_offset 12) )) (orelse ) (lineno 32) (col_offset 8) ) (Python.For (target (Python.Name (id 'i') (ctx (Python.Store)) (lineno 34) (col_offset 12) )) (iter (Python.Call (func (Python.Name (id 'range') (ctx (Python.Load)) (lineno 34) (col_offset 17) )) (args (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 34) (col_offset 23) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 34) (col_offset 27) )) (attr 'nodes') (ctx (Python.Load)) (lineno 34) (col_offset 27) )) (keywords ) (lineno 34) (col_offset 23) )) (keywords ) (lineno 34) (col_offset 17) )) (body (Python.If (test (Python.BoolOp (op (Python.Or)) (values (Python.Compare (left (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 35) (col_offset 15) )) (attr 'nodes') (ctx (Python.Load)) (lineno 35) (col_offset 15) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 35) (col_offset 26) )) )) (ctx (Python.Load)) (lineno 35) (col_offset 15) )) (attr 'log') (ctx (Python.Load)) (lineno 35) (col_offset 15) )) (ops (Python.NotEq)) (comparators (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'other') (ctx (Python.Load)) (lineno 35) (col_offset 36) )) (attr 'nodes') (ctx (Python.Load)) (lineno 35) (col_offset 36) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 35) (col_offset 48) )) )) (ctx (Python.Load)) (lineno 35) (col_offset 36) )) (attr 'log') (ctx (Python.Load)) (lineno 35) (col_offset 36) )) (lineno 35) (col_offset 15) ) (Python.Compare (left (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 36) (col_offset 17) )) (attr 'nodes') (ctx (Python.Load)) (lineno 36) (col_offset 17) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 36) (col_offset 28) )) )) (ctx (Python.Load)) (lineno 36) (col_offset 17) )) (attr 'who') (ctx (Python.Load)) (lineno 36) (col_offset 17) )) (ops (Python.NotEq)) (comparators (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'other') (ctx (Python.Load)) (lineno 36) (col_offset 38) )) (attr 'nodes') (ctx (Python.Load)) (lineno 36) (col_offset 38) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 36) (col_offset 50) )) )) (ctx (Python.Load)) (lineno 36) (col_offset 38) )) (attr 'who') (ctx (Python.Load)) (lineno 36) (col_offset 38) )) (lineno 36) (col_offset 17) ) (Python.Compare (left (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 37) (col_offset 17) )) (attr 'nodes') (ctx (Python.Load)) (lineno 37) (col_offset 17) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 37) (col_offset 28) )) )) (ctx (Python.Load)) (lineno 37) (col_offset 17) )) (attr 'date') (ctx (Python.Load)) (lineno 37) (col_offset 17) )) (ops (Python.NotEq)) (comparators (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'other') (ctx (Python.Load)) (lineno 37) (col_offset 39) )) (attr 'nodes') (ctx (Python.Load)) (lineno 37) (col_offset 39) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 37) (col_offset 51) )) )) (ctx (Python.Load)) (lineno 37) (col_offset 39) )) (attr 'date') (ctx (Python.Load)) (lineno 37) (col_offset 39) )) (lineno 37) (col_offset 17) ) (Python.Compare (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 38) (col_offset 17) )) (args (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 38) (col_offset 21) )) (attr 'nodes') (ctx (Python.Load)) (lineno 38) (col_offset 21) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 38) (col_offset 32) )) )) (ctx (Python.Load)) (lineno 38) (col_offset 21) )) (attr 'files') (ctx (Python.Load)) (lineno 38) (col_offset 21) )) (keywords ) (lineno 38) (col_offset 17) )) (ops (Python.NotEq)) (comparators (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 38) (col_offset 45) )) (args (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'other') (ctx (Python.Load)) (lineno 38) (col_offset 49) )) (attr 'nodes') (ctx (Python.Load)) (lineno 38) (col_offset 49) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 38) (col_offset 61) )) )) (ctx (Python.Load)) (lineno 38) (col_offset 49) )) (attr 'files') (ctx (Python.Load)) (lineno 38) (col_offset 49) )) (keywords ) (lineno 38) (col_offset 45) )) (lineno 38) (col_offset 17) )) (lineno 35) (col_offset 15) )) (body (Python.Return (value (Python.Num (n -1) (lineno 39) (col_offset 24) )) (lineno 39) (col_offset 16) ) (Python.For (target (Python.Name (id 'j') (ctx (Python.Store)) (lineno 41) (col_offset 13) )) (iter (Python.Call (func (Python.Name (id 'range') (ctx (Python.Load)) (lineno 41) (col_offset 18) )) (args (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 41) (col_offset 24) )) (args (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 41) (col_offset 28) )) (attr 'nodes') (ctx (Python.Load)) (lineno 41) (col_offset 28) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 41) (col_offset 39) )) )) (ctx (Python.Load)) (lineno 41) (col_offset 28) )) (attr 'files') (ctx (Python.Load)) (lineno 41) (col_offset 28) )) (keywords ) (lineno 41) (col_offset 24) )) (keywords ) (lineno 41) (col_offset 18) )) (body (Python.If (test (Python.BoolOp (op (Python.Or)) (values (Python.Compare (left (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 42) (col_offset 16) )) (attr 'nodes') (ctx (Python.Load)) (lineno 42) (col_offset 16) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 42) (col_offset 27) )) )) (ctx (Python.Load)) (lineno 42) (col_offset 16) )) (attr 'files') (ctx (Python.Load)) (lineno 42) (col_offset 16) )) (slice (Python.Index (value (Python.Name (id 'j') (ctx (Python.Load)) (lineno 42) (col_offset 36) )) )) (ctx (Python.Load)) (lineno 42) (col_offset 16) )) (attr 'revision') (ctx (Python.Load)) (lineno 42) (col_offset 16) )) (ops (Python.NotEq)) (comparators (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'other') (ctx (Python.Load)) (lineno 43) (col_offset 18) )) (attr 'nodes') (ctx (Python.Load)) (lineno 43) (col_offset 18) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 43) (col_offset 30) )) )) (ctx (Python.Load)) (lineno 43) (col_offset 18) )) (attr 'files') (ctx (Python.Load)) (lineno 43) (col_offset 18) )) (slice (Python.Index (value (Python.Name (id 'j') (ctx (Python.Load)) (lineno 43) (col_offset 39) )) )) (ctx (Python.Load)) (lineno 43) (col_offset 18) )) (attr 'revision') (ctx (Python.Load)) (lineno 43) (col_offset 18) )) (lineno 42) (col_offset 16) ) (Python.Compare (left (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 44) (col_offset 18) )) (attr 'nodes') (ctx (Python.Load)) (lineno 44) (col_offset 18) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 44) (col_offset 29) )) )) (ctx (Python.Load)) (lineno 44) (col_offset 18) )) (attr 'files') (ctx (Python.Load)) (lineno 44) (col_offset 18) )) (slice (Python.Index (value (Python.Name (id 'j') (ctx (Python.Load)) (lineno 44) (col_offset 38) )) )) (ctx (Python.Load)) (lineno 44) (col_offset 18) )) (attr 'filename') (ctx (Python.Load)) (lineno 44) (col_offset 18) )) (ops (Python.NotEq)) (comparators (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'other') (ctx (Python.Load)) (lineno 45) (col_offset 18) )) (attr 'nodes') (ctx (Python.Load)) (lineno 45) (col_offset 18) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 45) (col_offset 30) )) )) (ctx (Python.Load)) (lineno 45) (col_offset 18) )) (attr 'files') (ctx (Python.Load)) (lineno 45) (col_offset 18) )) (slice (Python.Index (value (Python.Name (id 'j') (ctx (Python.Load)) (lineno 45) (col_offset 39) )) )) (ctx (Python.Load)) (lineno 45) (col_offset 18) )) (attr 'filename') (ctx (Python.Load)) (lineno 45) (col_offset 18) )) (lineno 44) (col_offset 18) )) (lineno 42) (col_offset 16) )) (body (Python.Return (value (Python.Num (n -1) (lineno 46) (col_offset 25) )) (lineno 46) (col_offset 17) )) (orelse ) (lineno 42) (col_offset 13) )) (orelse ) (lineno 41) (col_offset 9) )) (orelse ) (lineno 35) (col_offset 12) )) (orelse ) (lineno 34) (col_offset 8) ) (Python.Return (value (Python.Num (n 0) (lineno 48) (col_offset 15) )) (lineno 48) (col_offset 8) )) (decorators ) (lineno 31) (col_offset 4) )) (lineno 26) (col_offset 0) ) (Python.ClassDef (name 'CiNode') (bases ) (body (Python.Expr (value (Python.Str (s 'I hold information baout one node, including a list of files') (lineno 51) (col_offset 4) )) (lineno 51) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 52) (col_offset 17) ) (Python.Name (id 'log') (ctx (Python.Param)) (lineno 52) (col_offset 23) ) (Python.Name (id 'who') (ctx (Python.Param)) (lineno 52) (col_offset 31) ) (Python.Name (id 'date') (ctx (Python.Param)) (lineno 52) (col_offset 39) ) (Python.Name (id 'files') (ctx (Python.Param)) (lineno 52) (col_offset 47) )) (defaults (Python.Str (s '') (lineno 52) (col_offset 27) ) (Python.Str (s '') (lineno 52) (col_offset 35) ) (Python.Num (n 0) (lineno 52) (col_offset 44) ) (Python.List (elts ) (ctx (Python.Load)) (lineno 52) (col_offset 53) )) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 53) (col_offset 8) )) (attr 'log') (ctx (Python.Store)) (lineno 53) (col_offset 8) )) (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 53) (col_offset 19) )) (lineno 53) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 54) (col_offset 8) )) (attr 'who') (ctx (Python.Store)) (lineno 54) (col_offset 8) )) (value (Python.Name (id 'who') (ctx (Python.Load)) (lineno 54) (col_offset 19) )) (lineno 54) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 55) (col_offset 8) )) (attr 'date') (ctx (Python.Store)) (lineno 55) (col_offset 8) )) (value (Python.Name (id 'date') (ctx (Python.Load)) (lineno 55) (col_offset 20) )) (lineno 55) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 56) (col_offset 8) )) (attr 'files') (ctx (Python.Store)) (lineno 56) (col_offset 8) )) (value (Python.Name (id 'files') (ctx (Python.Load)) (lineno 56) (col_offset 21) )) (lineno 56) (col_offset 8) )) (decorators ) (lineno 52) (col_offset 4) )) (lineno 50) (col_offset 0) ) (Python.ClassDef (name 'FileNode') (bases ) (body (Python.Expr (value (Python.Str (s 'I hold information about one node') (lineno 59) (col_offset 4) )) (lineno 59) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 60) (col_offset 17) ) (Python.Name (id 'revision') (ctx (Python.Param)) (lineno 60) (col_offset 23) ) (Python.Name (id 'filename') (ctx (Python.Param)) (lineno 60) (col_offset 36) )) (defaults (Python.Str (s '') (lineno 60) (col_offset 32) ) (Python.Str (s '') (lineno 60) (col_offset 45) )) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 61) (col_offset 8) )) (attr 'revision') (ctx (Python.Store)) (lineno 61) (col_offset 8) )) (value (Python.Name (id 'revision') (ctx (Python.Load)) (lineno 61) (col_offset 24) )) (lineno 61) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 62) (col_offset 8) )) (attr 'filename') (ctx (Python.Store)) (lineno 62) (col_offset 8) )) (value (Python.Name (id 'filename') (ctx (Python.Load)) (lineno 62) (col_offset 24) )) (lineno 62) (col_offset 8) )) (decorators ) (lineno 60) (col_offset 4) )) (lineno 58) (col_offset 0) ) (Python.ClassDef (name 'BonsaiParser') (bases ) (body (Python.Expr (value (Python.Str (s 'I parse the XML result from a bonsai cvsquery.') (lineno 65) (col_offset 4) )) (lineno 65) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 67) (col_offset 17) ) (Python.Name (id 'bonsaiQuery') (ctx (Python.Param)) (lineno 67) (col_offset 23) )) (defaults ) )) (body (Python.TryExcept (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 69) (col_offset 12) )) (attr 'dom') (ctx (Python.Store)) (lineno 69) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'minidom') (ctx (Python.Load)) (lineno 69) (col_offset 23) )) (attr 'parse') (ctx (Python.Load)) (lineno 69) (col_offset 23) )) (args (Python.Name (id 'bonsaiQuery') (ctx (Python.Load)) (lineno 69) (col_offset 37) )) (keywords ) (lineno 69) (col_offset 23) )) (lineno 69) (col_offset 12) )) (handlers (Python.Excepthandler (body (Python.Raise (type (Python.Call (func (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 71) (col_offset 18) )) (args (Python.Str (s 'Malformed XML in result') (lineno 71) (col_offset 37) )) (keywords ) (lineno 71) (col_offset 18) )) (lineno 71) (col_offset 12) )) (lineno 70) (col_offset 8) )) (orelse ) (lineno 68) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 73) (col_offset 8) )) (attr 'ciNodes') (ctx (Python.Store)) (lineno 73) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 73) (col_offset 23) )) (attr 'dom') (ctx (Python.Load)) (lineno 73) (col_offset 23) )) (attr 'getElementsByTagName') (ctx (Python.Load)) (lineno 73) (col_offset 23) )) (args (Python.Str (s 'ci') (lineno 73) (col_offset 53) )) (keywords ) (lineno 73) (col_offset 23) )) (lineno 73) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 74) (col_offset 8) )) (attr 'currentCiNode') (ctx (Python.Store)) (lineno 74) (col_offset 8) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 74) (col_offset 29) )) (lineno 74) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 75) (col_offset 8) )) (attr 'fileNodes') (ctx (Python.Store)) (lineno 75) (col_offset 8) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 75) (col_offset 25) )) (lineno 75) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 76) (col_offset 8) )) (attr 'currentFileNode') (ctx (Python.Store)) (lineno 76) (col_offset 8) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 76) (col_offset 31) )) (lineno 76) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 77) (col_offset 8) )) (attr 'bonsaiResult') (ctx (Python.Store)) (lineno 77) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 77) (col_offset 28) )) (attr '_parseData') (ctx (Python.Load)) (lineno 77) (col_offset 28) )) (args ) (keywords ) (lineno 77) (col_offset 28) )) (lineno 77) (col_offset 8) )) (decorators ) (lineno 67) (col_offset 4) ) (Python.FunctionDef (name 'getData') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 79) (col_offset 16) )) (defaults ) )) (body (Python.Return (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 80) (col_offset 15) )) (attr 'bonsaiResult') (ctx (Python.Load)) (lineno 80) (col_offset 15) )) (lineno 80) (col_offset 8) )) (decorators ) (lineno 79) (col_offset 4) ) (Python.FunctionDef (name '_parseData') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 82) (col_offset 19) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Returns data from a Bonsai cvsquery in a BonsaiResult object') (lineno 83) (col_offset 8) )) (lineno 83) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'nodes') (ctx (Python.Store)) (lineno 84) (col_offset 8) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 84) (col_offset 16) )) (lineno 84) (col_offset 8) ) (Python.TryExcept (body (Python.While (test (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 86) (col_offset 18) )) (attr '_nextCiNode') (ctx (Python.Load)) (lineno 86) (col_offset 18) )) (args ) (keywords ) (lineno 86) (col_offset 18) )) (body (Python.Assign (targets (Python.Name (id 'files') (ctx (Python.Store)) (lineno 87) (col_offset 16) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 87) (col_offset 24) )) (lineno 87) (col_offset 16) ) (Python.TryExcept (body (Python.While (test (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 89) (col_offset 26) )) (attr '_nextFileNode') (ctx (Python.Load)) (lineno 89) (col_offset 26) )) (args ) (keywords ) (lineno 89) (col_offset 26) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'files') (ctx (Python.Load)) (lineno 90) (col_offset 24) )) (attr 'append') (ctx (Python.Load)) (lineno 90) (col_offset 24) )) (args (Python.Call (func (Python.Name (id 'FileNode') (ctx (Python.Load)) (lineno 90) (col_offset 37) )) (args (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 90) (col_offset 46) )) (attr '_getRevision') (ctx (Python.Load)) (lineno 90) (col_offset 46) )) (args ) (keywords ) (lineno 90) (col_offset 46) ) (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 91) (col_offset 46) )) (attr '_getFilename') (ctx (Python.Load)) (lineno 91) (col_offset 46) )) (args ) (keywords ) (lineno 91) (col_offset 46) )) (keywords ) (lineno 90) (col_offset 37) )) (keywords ) (lineno 90) (col_offset 24) )) (lineno 90) (col_offset 24) )) (orelse ) (lineno 89) (col_offset 20) )) (handlers (Python.Excepthandler (type (Python.Name (id 'NoMoreFileNodes') (ctx (Python.Load)) (lineno 92) (col_offset 23) )) (body (Python.Pass)) (lineno 92) (col_offset 16) ) (Python.Excepthandler (type (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 94) (col_offset 23) )) (body (Python.Raise (lineno 95) (col_offset 20) )) (lineno 94) (col_offset 16) )) (orelse ) (lineno 88) (col_offset 16) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'nodes') (ctx (Python.Load)) (lineno 96) (col_offset 16) )) (attr 'append') (ctx (Python.Load)) (lineno 96) (col_offset 16) )) (args (Python.Call (func (Python.Name (id 'CiNode') (ctx (Python.Load)) (lineno 96) (col_offset 29) )) (args (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 96) (col_offset 36) )) (attr '_getLog') (ctx (Python.Load)) (lineno 96) (col_offset 36) )) (args ) (keywords ) (lineno 96) (col_offset 36) ) (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 96) (col_offset 52) )) (attr '_getWho') (ctx (Python.Load)) (lineno 96) (col_offset 52) )) (args ) (keywords ) (lineno 96) (col_offset 52) ) (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 97) (col_offset 36) )) (attr '_getDate') (ctx (Python.Load)) (lineno 97) (col_offset 36) )) (args ) (keywords ) (lineno 97) (col_offset 36) ) (Python.Name (id 'files') (ctx (Python.Load)) (lineno 97) (col_offset 53) )) (keywords ) (lineno 96) (col_offset 29) )) (keywords ) (lineno 96) (col_offset 16) )) (lineno 96) (col_offset 16) )) (orelse ) (lineno 86) (col_offset 12) )) (handlers (Python.Excepthandler (type (Python.Name (id 'NoMoreCiNodes') (ctx (Python.Load)) (lineno 99) (col_offset 15) )) (body (Python.Pass)) (lineno 99) (col_offset 8) ) (Python.Excepthandler (type (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 101) (col_offset 15) )) (name (Python.Name (id 'EmptyResult') (ctx (Python.Store)) (lineno 101) (col_offset 35) )) (body (Python.Raise (lineno 102) (col_offset 12) )) (lineno 101) (col_offset 8) )) (orelse ) (lineno 85) (col_offset 8) ) (Python.Return (value (Python.Call (func (Python.Name (id 'BonsaiResult') (ctx (Python.Load)) (lineno 104) (col_offset 15) )) (args (Python.Name (id 'nodes') (ctx (Python.Load)) (lineno 104) (col_offset 28) )) (keywords ) (lineno 104) (col_offset 15) )) (lineno 104) (col_offset 8) )) (decorators ) (lineno 82) (col_offset 4) ) (Python.FunctionDef (name '_nextCiNode') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 107) (col_offset 20) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Iterates to the next node and fills self.fileNodes with child nodes') (lineno 109) (col_offset -1) )) (lineno 109) (col_offset -1) ) (Python.TryExcept (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 111) (col_offset 12) )) (attr 'currentCiNode') (ctx (Python.Store)) (lineno 111) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 111) (col_offset 33) )) (attr 'ciNodes') (ctx (Python.Load)) (lineno 111) (col_offset 33) )) (attr 'pop') (ctx (Python.Load)) (lineno 111) (col_offset 33) )) (args (Python.Num (n 0) (lineno 111) (col_offset 50) )) (keywords ) (lineno 111) (col_offset 33) )) (lineno 111) (col_offset 12) ) (Python.If (test (Python.Compare (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 112) (col_offset 15) )) (args (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 112) (col_offset 19) )) (attr 'currentCiNode') (ctx (Python.Load)) (lineno 112) (col_offset 19) )) (attr 'getElementsByTagName') (ctx (Python.Load)) (lineno 112) (col_offset 19) )) (args (Python.Str (s 'files') (lineno 112) (col_offset 59) )) (keywords ) (lineno 112) (col_offset 19) )) (keywords ) (lineno 112) (col_offset 15) )) (ops (Python.Gt)) (comparators (Python.Num (n 1) (lineno 112) (col_offset 71) )) (lineno 112) (col_offset 15) )) (body (Python.Raise (type (Python.Call (func (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 113) (col_offset 22) )) (args (Python.Str (s 'Multiple for one ') (lineno 113) (col_offset 41) )) (keywords ) (lineno 113) (col_offset 22) )) (lineno 113) (col_offset 16) )) (orelse ) (lineno 112) (col_offset 12) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 115) (col_offset 12) )) (attr 'fileNodes') (ctx (Python.Store)) (lineno 115) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 115) (col_offset 29) )) (attr 'currentCiNode') (ctx (Python.Load)) (lineno 115) (col_offset 29) )) (attr 'getElementsByTagName') (ctx (Python.Load)) (lineno 115) (col_offset 29) )) (args (Python.Str (s 'f') (lineno 115) (col_offset 69) )) (keywords ) (lineno 115) (col_offset 29) )) (lineno 115) (col_offset 12) )) (handlers (Python.Excepthandler (type (Python.Name (id 'IndexError') (ctx (Python.Load)) (lineno 116) (col_offset 15) )) (body (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 118) (col_offset 19) )) (attr 'currentCiNode') (ctx (Python.Load)) (lineno 118) (col_offset 19) )) (lineno 118) (col_offset 15) )) (body (Python.Raise (type (Python.Name (id 'EmptyResult') (ctx (Python.Load)) (lineno 119) (col_offset 22) )) (lineno 119) (col_offset 16) )) (orelse (Python.Raise (type (Python.Name (id 'NoMoreCiNodes') (ctx (Python.Load)) (lineno 121) (col_offset 22) )) (lineno 121) (col_offset 16) )) (lineno 118) (col_offset 12) )) (lineno 116) (col_offset 8) )) (orelse ) (lineno 110) (col_offset 8) ) (Python.Return (value (Python.Name (id 'True') (ctx (Python.Load)) (lineno 123) (col_offset 15) )) (lineno 123) (col_offset 8) )) (decorators ) (lineno 107) (col_offset 4) ) (Python.FunctionDef (name '_nextFileNode') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 125) (col_offset 22) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Iterates to the next node') (lineno 126) (col_offset 8) )) (lineno 126) (col_offset 8) ) (Python.TryExcept (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 128) (col_offset 12) )) (attr 'currentFileNode') (ctx (Python.Store)) (lineno 128) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 128) (col_offset 35) )) (attr 'fileNodes') (ctx (Python.Load)) (lineno 128) (col_offset 35) )) (attr 'pop') (ctx (Python.Load)) (lineno 128) (col_offset 35) )) (args (Python.Num (n 0) (lineno 128) (col_offset 54) )) (keywords ) (lineno 128) (col_offset 35) )) (lineno 128) (col_offset 12) )) (handlers (Python.Excepthandler (type (Python.Name (id 'IndexError') (ctx (Python.Load)) (lineno 129) (col_offset 15) )) (body (Python.Raise (type (Python.Name (id 'NoMoreFileNodes') (ctx (Python.Load)) (lineno 130) (col_offset 18) )) (lineno 130) (col_offset 12) )) (lineno 129) (col_offset 8) )) (orelse ) (lineno 127) (col_offset 8) ) (Python.Return (value (Python.Name (id 'True') (ctx (Python.Load)) (lineno 132) (col_offset 15) )) (lineno 132) (col_offset 8) )) (decorators ) (lineno 125) (col_offset 4) ) (Python.FunctionDef (name '_getLog') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 134) (col_offset 16) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Returns the log of the current node') (lineno 135) (col_offset 8) )) (lineno 135) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'logs') (ctx (Python.Store)) (lineno 136) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 136) (col_offset 15) )) (attr 'currentCiNode') (ctx (Python.Load)) (lineno 136) (col_offset 15) )) (attr 'getElementsByTagName') (ctx (Python.Load)) (lineno 136) (col_offset 15) )) (args (Python.Str (s 'log') (lineno 136) (col_offset 55) )) (keywords ) (lineno 136) (col_offset 15) )) (lineno 136) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 137) (col_offset 11) )) (args (Python.Name (id 'logs') (ctx (Python.Load)) (lineno 137) (col_offset 15) )) (keywords ) (lineno 137) (col_offset 11) )) (ops (Python.Lt)) (comparators (Python.Num (n 1) (lineno 137) (col_offset 23) )) (lineno 137) (col_offset 11) )) (body (Python.Raise (type (Python.Call (func (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 138) (col_offset 18) )) (args (Python.Str (s 'No log present') (lineno 138) (col_offset 37) )) (keywords ) (lineno 138) (col_offset 18) )) (lineno 138) (col_offset 12) )) (orelse (Python.If (test (Python.Compare (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 139) (col_offset 13) )) (args (Python.Name (id 'logs') (ctx (Python.Load)) (lineno 139) (col_offset 17) )) (keywords ) (lineno 139) (col_offset 13) )) (ops (Python.Gt)) (comparators (Python.Num (n 1) (lineno 139) (col_offset 25) )) (lineno 139) (col_offset 13) )) (body (Python.Raise (type (Python.Call (func (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 140) (col_offset 18) )) (args (Python.Str (s 'Multiple logs present') (lineno 140) (col_offset 37) )) (keywords ) (lineno 140) (col_offset 18) )) (lineno 140) (col_offset 12) )) (orelse ) (lineno 139) (col_offset 13) )) (lineno 137) (col_offset 8) ) (Python.Return (value (Python.Attribute (value (Python.Attribute (value (Python.Subscript (value (Python.Name (id 'logs') (ctx (Python.Load)) (lineno 142) (col_offset 15) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 142) (col_offset 20) )) )) (ctx (Python.Load)) (lineno 142) (col_offset 15) )) (attr 'firstChild') (ctx (Python.Load)) (lineno 142) (col_offset 15) )) (attr 'data') (ctx (Python.Load)) (lineno 142) (col_offset 15) )) (lineno 142) (col_offset 8) )) (decorators ) (lineno 134) (col_offset 4) ) (Python.FunctionDef (name '_getWho') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 144) (col_offset 16) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Returns the e-mail address of the commiter') (lineno 145) (col_offset 8) )) (lineno 145) (col_offset 8) ) (Python.Return (value (Python.Call (func (Python.Name (id 'str') (ctx (Python.Load)) (lineno 147) (col_offset 15) )) (args (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 147) (col_offset 19) )) (attr 'currentCiNode') (ctx (Python.Load)) (lineno 147) (col_offset 19) )) (attr 'getAttribute') (ctx (Python.Load)) (lineno 147) (col_offset 19) )) (args (Python.Str (s 'who') (lineno 147) (col_offset 51) )) (keywords ) (lineno 147) (col_offset 19) )) (keywords ) (lineno 147) (col_offset 15) )) (lineno 147) (col_offset 8) )) (decorators ) (lineno 144) (col_offset 4) ) (Python.FunctionDef (name '_getDate') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 149) (col_offset 17) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Returns the date (unix time) of the commit') (lineno 150) (col_offset 8) )) (lineno 150) (col_offset 8) ) (Python.TryExcept (body (Python.Assign (targets (Python.Name (id 'commitDate') (ctx (Python.Store)) (lineno 153) (col_offset 12) )) (value (Python.Call (func (Python.Name (id 'int') (ctx (Python.Load)) (lineno 153) (col_offset 25) )) (args (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 153) (col_offset 29) )) (attr 'currentCiNode') (ctx (Python.Load)) (lineno 153) (col_offset 29) )) (attr 'getAttribute') (ctx (Python.Load)) (lineno 153) (col_offset 29) )) (args (Python.Str (s 'date') (lineno 153) (col_offset 61) )) (keywords ) (lineno 153) (col_offset 29) )) (keywords ) (lineno 153) (col_offset 25) )) (lineno 153) (col_offset 12) )) (handlers (Python.Excepthandler (type (Python.Name (id 'ValueError') (ctx (Python.Load)) (lineno 154) (col_offset 15) )) (body (Python.Raise (type (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 155) (col_offset 18) )) (lineno 155) (col_offset 12) )) (lineno 154) (col_offset 8) )) (orelse ) (lineno 152) (col_offset 8) ) (Python.Return (value (Python.Name (id 'commitDate') (ctx (Python.Load)) (lineno 157) (col_offset 15) )) (lineno 157) (col_offset 8) )) (decorators ) (lineno 149) (col_offset 4) ) (Python.FunctionDef (name '_getFilename') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 159) (col_offset 21) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Returns the filename of the current node') (lineno 160) (col_offset 8) )) (lineno 160) (col_offset 8) ) (Python.TryExcept (body (Python.Assign (targets (Python.Name (id 'filename') (ctx (Python.Store)) (lineno 162) (col_offset 12) )) (value (Python.Attribute (value (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 162) (col_offset 23) )) (attr 'currentFileNode') (ctx (Python.Load)) (lineno 162) (col_offset 23) )) (attr 'firstChild') (ctx (Python.Load)) (lineno 162) (col_offset 23) )) (attr 'data') (ctx (Python.Load)) (lineno 162) (col_offset 23) )) (lineno 162) (col_offset 12) )) (handlers (Python.Excepthandler (type (Python.Name (id 'AttributeError') (ctx (Python.Load)) (lineno 163) (col_offset 15) )) (body (Python.Raise (type (Python.Call (func (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 164) (col_offset 18) )) (args (Python.Str (s 'Missing filename') (lineno 164) (col_offset 37) )) (keywords ) (lineno 164) (col_offset 18) )) (lineno 164) (col_offset 12) )) (lineno 163) (col_offset 8) )) (orelse ) (lineno 161) (col_offset 8) ) (Python.Return (value (Python.Name (id 'filename') (ctx (Python.Load)) (lineno 166) (col_offset 15) )) (lineno 166) (col_offset 8) )) (decorators ) (lineno 159) (col_offset 4) ) (Python.FunctionDef (name '_getRevision') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 168) (col_offset 21) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Returns the revision of the current node') (lineno 169) (col_offset 8) )) (lineno 169) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'rev') (ctx (Python.Store)) (lineno 170) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 170) (col_offset 14) )) (attr 'currentFileNode') (ctx (Python.Load)) (lineno 170) (col_offset 14) )) (attr 'getAttribute') (ctx (Python.Load)) (lineno 170) (col_offset 14) )) (args (Python.Str (s 'rev') (lineno 170) (col_offset 48) )) (keywords ) (lineno 170) (col_offset 14) )) (lineno 170) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'rev') (ctx (Python.Load)) (lineno 171) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Str (s '') (lineno 171) (col_offset 18) )) (lineno 171) (col_offset 11) )) (body (Python.Raise (type (Python.Call (func (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 172) (col_offset 18) )) (args (Python.Str (s 'A revision was missing from a file') (lineno 172) (col_offset 37) )) (keywords ) (lineno 172) (col_offset 18) )) (lineno 172) (col_offset 12) )) (orelse ) (lineno 171) (col_offset 8) ) (Python.Return (value (Python.Name (id 'rev') (ctx (Python.Load)) (lineno 174) (col_offset 15) )) (lineno 174) (col_offset 8) )) (decorators ) (lineno 168) (col_offset 4) )) (lineno 64) (col_offset 0) ) (Python.ClassDef (name 'BonsaiPoller') (bases (Python.Attribute (value (Python.Name (id 'base') (ctx (Python.Load)) (lineno 177) (col_offset 19) )) (attr 'ChangeSource') (ctx (Python.Load)) (lineno 177) (col_offset 19) )) (body (Python.Expr (value (Python.Str (s 'This source will poll a bonsai server for changes and submit them to the change master.') (lineno 179) (col_offset -1) )) (lineno 179) (col_offset -1) ) (Python.Assign (targets (Python.Name (id 'compare_attrs') (ctx (Python.Store)) (lineno 181) (col_offset 4) )) (value (Python.List (elts (Python.Str (s 'bonsaiURL') (lineno 181) (col_offset 21) ) (Python.Str (s 'pollInterval') (lineno 181) (col_offset 34) ) (Python.Str (s 'tree') (lineno 181) (col_offset 50) ) (Python.Str (s 'module') (lineno 182) (col_offset 21) ) (Python.Str (s 'branch') (lineno 182) (col_offset 31) ) (Python.Str (s 'cvsroot') (lineno 182) (col_offset 41) )) (ctx (Python.Load)) (lineno 181) (col_offset 20) )) (lineno 181) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'parent') (ctx (Python.Store)) (lineno 184) (col_offset 4) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 184) (col_offset 13) )) (lineno 184) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'loop') (ctx (Python.Store)) (lineno 185) (col_offset 4) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 185) (col_offset 11) )) (lineno 185) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'volatile') (ctx (Python.Store)) (lineno 186) (col_offset 4) )) (value (Python.List (elts (Python.Str (s 'loop') (lineno 186) (col_offset 16) )) (ctx (Python.Load)) (lineno 186) (col_offset 15) )) (lineno 186) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'working') (ctx (Python.Store)) (lineno 187) (col_offset 4) )) (value (Python.Name (id 'False') (ctx (Python.Load)) (lineno 187) (col_offset 14) )) (lineno 187) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 189) (col_offset 17) ) (Python.Name (id 'bonsaiURL') (ctx (Python.Param)) (lineno 189) (col_offset 23) ) (Python.Name (id 'module') (ctx (Python.Param)) (lineno 189) (col_offset 34) ) (Python.Name (id 'branch') (ctx (Python.Param)) (lineno 189) (col_offset 42) ) (Python.Name (id 'tree') (ctx (Python.Param)) (lineno 189) (col_offset 50) ) (Python.Name (id 'cvsroot') (ctx (Python.Param)) (lineno 190) (col_offset 17) ) (Python.Name (id 'pollInterval') (ctx (Python.Param)) (lineno 190) (col_offset 37) )) (defaults (Python.Str (s 'default') (lineno 189) (col_offset 55) ) (Python.Str (s '/cvsroot') (lineno 190) (col_offset 25) ) (Python.Num (n 30) (lineno 190) (col_offset 50) )) )) (body (Python.Expr (value (Python.Str (s ' @type bonsaiURL: string @param bonsaiURL: The base URL of the Bonsai server (ie. http://bonsai.mozilla.org) @type module: string @param module: The module to look for changes in. Commonly this is ''all'' @type branch: string @param branch: The branch to look for changes in. This must match the ''branch'' option for the Scheduler. @type tree: string @param tree: The tree to look for changes in. Commonly this is ''all'' @type cvsroot: string @param cvsroot: The cvsroot of the repository. Usually this is ''/cvsroot'' @type pollInterval: int @param pollInterval: The time (in seconds) between queries for changes ') (lineno 210) (col_offset -1) )) (lineno 210) (col_offset -1) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 212) (col_offset 8) )) (attr 'bonsaiURL') (ctx (Python.Store)) (lineno 212) (col_offset 8) )) (value (Python.Name (id 'bonsaiURL') (ctx (Python.Load)) (lineno 212) (col_offset 25) )) (lineno 212) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 213) (col_offset 8) )) (attr 'module') (ctx (Python.Store)) (lineno 213) (col_offset 8) )) (value (Python.Name (id 'module') (ctx (Python.Load)) (lineno 213) (col_offset 22) )) (lineno 213) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 214) (col_offset 8) )) (attr 'branch') (ctx (Python.Store)) (lineno 214) (col_offset 8) )) (value (Python.Name (id 'branch') (ctx (Python.Load)) (lineno 214) (col_offset 22) )) (lineno 214) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 215) (col_offset 8) )) (attr 'tree') (ctx (Python.Store)) (lineno 215) (col_offset 8) )) (value (Python.Name (id 'tree') (ctx (Python.Load)) (lineno 215) (col_offset 20) )) (lineno 215) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 216) (col_offset 8) )) (attr 'cvsroot') (ctx (Python.Store)) (lineno 216) (col_offset 8) )) (value (Python.Name (id 'cvsroot') (ctx (Python.Load)) (lineno 216) (col_offset 23) )) (lineno 216) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 217) (col_offset 8) )) (attr 'pollInterval') (ctx (Python.Store)) (lineno 217) (col_offset 8) )) (value (Python.Name (id 'pollInterval') (ctx (Python.Load)) (lineno 217) (col_offset 28) )) (lineno 217) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 218) (col_offset 8) )) (attr 'lastChange') (ctx (Python.Store)) (lineno 218) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'time') (ctx (Python.Load)) (lineno 218) (col_offset 26) )) (attr 'time') (ctx (Python.Load)) (lineno 218) (col_offset 26) )) (args ) (keywords ) (lineno 218) (col_offset 26) )) (lineno 218) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 219) (col_offset 8) )) (attr 'lastPoll') (ctx (Python.Store)) (lineno 219) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'time') (ctx (Python.Load)) (lineno 219) (col_offset 24) )) (attr 'time') (ctx (Python.Load)) (lineno 219) (col_offset 24) )) (args ) (keywords ) (lineno 219) (col_offset 24) )) (lineno 219) (col_offset 8) )) (decorators ) (lineno 189) (col_offset 4) ) (Python.FunctionDef (name 'startService') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 221) (col_offset 21) )) (defaults ) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 222) (col_offset 8) )) (attr 'loop') (ctx (Python.Store)) (lineno 222) (col_offset 8) )) (value (Python.Call (func (Python.Name (id 'LoopingCall') (ctx (Python.Load)) (lineno 222) (col_offset 20) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 222) (col_offset 32) )) (attr 'poll') (ctx (Python.Load)) (lineno 222) (col_offset 32) )) (keywords ) (lineno 222) (col_offset 20) )) (lineno 222) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'base') (ctx (Python.Load)) (lineno 223) (col_offset 8) )) (attr 'ChangeSource') (ctx (Python.Load)) (lineno 223) (col_offset 8) )) (attr 'startService') (ctx (Python.Load)) (lineno 223) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 223) (col_offset 39) )) (keywords ) (lineno 223) (col_offset 8) )) (lineno 223) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'reactor') (ctx (Python.Load)) (lineno 225) (col_offset 8) )) (attr 'callLater') (ctx (Python.Load)) (lineno 225) (col_offset 8) )) (args (Python.Num (n 0) (lineno 225) (col_offset 26) ) (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 225) (col_offset 29) )) (attr 'loop') (ctx (Python.Load)) (lineno 225) (col_offset 29) )) (attr 'start') (ctx (Python.Load)) (lineno 225) (col_offset 29) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 225) (col_offset 46) )) (attr 'pollInterval') (ctx (Python.Load)) (lineno 225) (col_offset 46) )) (keywords ) (lineno 225) (col_offset 8) )) (lineno 225) (col_offset 8) )) (decorators ) (lineno 221) (col_offset 4) ) (Python.FunctionDef (name 'stopService') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 227) (col_offset 20) )) (defaults ) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 228) (col_offset 8) )) (attr 'loop') (ctx (Python.Load)) (lineno 228) (col_offset 8) )) (attr 'stop') (ctx (Python.Load)) (lineno 228) (col_offset 8) )) (args ) (keywords ) (lineno 228) (col_offset 8) )) (lineno 228) (col_offset 8) ) (Python.Return (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'base') (ctx (Python.Load)) (lineno 229) (col_offset 15) )) (attr 'ChangeSource') (ctx (Python.Load)) (lineno 229) (col_offset 15) )) (attr 'stopService') (ctx (Python.Load)) (lineno 229) (col_offset 15) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 229) (col_offset 45) )) (keywords ) (lineno 229) (col_offset 15) )) (lineno 229) (col_offset 8) )) (decorators ) (lineno 227) (col_offset 4) ) (Python.FunctionDef (name 'describe') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 231) (col_offset 17) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'str') (ctx (Python.Store)) (lineno 232) (col_offset 8) )) (value (Python.Str (s '') (lineno 232) (col_offset 14) )) (lineno 232) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'str') (ctx (Python.Store)) (lineno 233) (col_offset 8) )) (op (Python.Add)) (value (Python.BinOp (left (Python.Str (s 'Getting changes from the Bonsai service running at %s ') (lineno 233) (col_offset 15) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 234) (col_offset 18) )) (attr 'bonsaiURL') (ctx (Python.Load)) (lineno 234) (col_offset 18) )) (lineno 233) (col_offset 15) )) (lineno 233) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'str') (ctx (Python.Store)) (lineno 235) (col_offset 8) )) (op (Python.Add)) (value (Python.BinOp (left (Python.Str (s '
Using tree: %s, branch: %s, and module: %s') (lineno 235) (col_offset 15) )) (op (Python.Mod)) (right (Python.Tuple (elts (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 235) (col_offset 67) )) (attr 'tree') (ctx (Python.Load)) (lineno 235) (col_offset 67) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 236) (col_offset 16) )) (attr 'branch') (ctx (Python.Load)) (lineno 236) (col_offset 16) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 236) (col_offset 29) )) (attr 'module') (ctx (Python.Load)) (lineno 236) (col_offset 29) )) (ctx (Python.Load)) (lineno 235) (col_offset 67) )) (lineno 235) (col_offset 15) )) (lineno 235) (col_offset 8) ) (Python.Return (value (Python.Name (id 'str') (ctx (Python.Load)) (lineno 237) (col_offset 15) )) (lineno 237) (col_offset 8) )) (decorators ) (lineno 231) (col_offset 4) ) (Python.FunctionDef (name 'poll') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 239) (col_offset 13) )) (defaults ) )) (body (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 240) (col_offset 11) )) (attr 'working') (ctx (Python.Load)) (lineno 240) (col_offset 11) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 241) (col_offset 12) )) (attr 'msg') (ctx (Python.Load)) (lineno 241) (col_offset 12) )) (args (Python.Str (s 'Not polling Bonsai because last poll is still working') (lineno 241) (col_offset 20) )) (keywords ) (lineno 241) (col_offset 12) )) (lineno 241) (col_offset 12) )) (orelse (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 243) (col_offset 12) )) (attr 'working') (ctx (Python.Store)) (lineno 243) (col_offset 12) )) (value (Python.Name (id 'True') (ctx (Python.Load)) (lineno 243) (col_offset 27) )) (lineno 243) (col_offset 12) ) (Python.Assign (targets (Python.Name (id 'd') (ctx (Python.Store)) (lineno 244) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 244) (col_offset 16) )) (attr '_get_changes') (ctx (Python.Load)) (lineno 244) (col_offset 16) )) (args ) (keywords ) (lineno 244) (col_offset 16) )) (lineno 244) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 245) (col_offset 12) )) (attr 'addCallback') (ctx (Python.Load)) (lineno 245) (col_offset 12) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 245) (col_offset 26) )) (attr '_process_changes') (ctx (Python.Load)) (lineno 245) (col_offset 26) )) (keywords ) (lineno 245) (col_offset 12) )) (lineno 245) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 246) (col_offset 12) )) (attr 'addBoth') (ctx (Python.Load)) (lineno 246) (col_offset 12) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 246) (col_offset 22) )) (attr '_finished') (ctx (Python.Load)) (lineno 246) (col_offset 22) )) (keywords ) (lineno 246) (col_offset 12) )) (lineno 246) (col_offset 12) )) (lineno 240) (col_offset 8) ) (Python.Return (lineno 247) (col_offset 8) )) (decorators ) (lineno 239) (col_offset 4) ) (Python.FunctionDef (name '_finished') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 249) (col_offset 18) ) (Python.Name (id 'res') (ctx (Python.Param)) (lineno 249) (col_offset 24) )) (defaults ) )) (body (Python.Assert (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 250) (col_offset 15) )) (attr 'working') (ctx (Python.Load)) (lineno 250) (col_offset 15) )) (lineno 250) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 251) (col_offset 8) )) (attr 'working') (ctx (Python.Store)) (lineno 251) (col_offset 8) )) (value (Python.Name (id 'False') (ctx (Python.Load)) (lineno 251) (col_offset 23) )) (lineno 251) (col_offset 8) ) (Python.If (test (Python.Call (func (Python.Name (id 'isinstance') (ctx (Python.Load)) (lineno 254) (col_offset 11) )) (args (Python.Name (id 'res') (ctx (Python.Load)) (lineno 254) (col_offset 22) ) (Python.Attribute (value (Python.Name (id 'failure') (ctx (Python.Load)) (lineno 254) (col_offset 27) )) (attr 'Failure') (ctx (Python.Load)) (lineno 254) (col_offset 27) )) (keywords ) (lineno 254) (col_offset 11) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 255) (col_offset 12) )) (attr 'msg') (ctx (Python.Load)) (lineno 255) (col_offset 12) )) (args (Python.BinOp (left (Python.Str (s 'Bonsai poll failed: %s') (lineno 255) (col_offset 20) )) (op (Python.Mod)) (right (Python.Name (id 'res') (ctx (Python.Load)) (lineno 255) (col_offset 47) )) (lineno 255) (col_offset 20) )) (keywords ) (lineno 255) (col_offset 12) )) (lineno 255) (col_offset 12) )) (orelse ) (lineno 254) (col_offset 8) ) (Python.Return (value (Python.Name (id 'res') (ctx (Python.Load)) (lineno 256) (col_offset 15) )) (lineno 256) (col_offset 8) )) (decorators ) (lineno 249) (col_offset 4) ) (Python.FunctionDef (name '_make_url') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 258) (col_offset 18) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'args') (ctx (Python.Store)) (lineno 259) (col_offset 8) )) (value (Python.List (elts (Python.BinOp (left (Python.Str (s 'treeid=%s') (lineno 259) (col_offset 16) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 259) (col_offset 30) )) (attr 'tree') (ctx (Python.Load)) (lineno 259) (col_offset 30) )) (lineno 259) (col_offset 16) ) (Python.BinOp (left (Python.Str (s 'module=%s') (lineno 259) (col_offset 41) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 259) (col_offset 55) )) (attr 'module') (ctx (Python.Load)) (lineno 259) (col_offset 55) )) (lineno 259) (col_offset 41) ) (Python.BinOp (left (Python.Str (s 'branch=%s') (lineno 260) (col_offset 16) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 260) (col_offset 30) )) (attr 'branch') (ctx (Python.Load)) (lineno 260) (col_offset 30) )) (lineno 260) (col_offset 16) ) (Python.Str (s 'branchtype=match') (lineno 260) (col_offset 43) ) (Python.Str (s 'sortby=Date') (lineno 261) (col_offset 16) ) (Python.Str (s 'date=explicit') (lineno 261) (col_offset 31) ) (Python.BinOp (left (Python.Str (s 'mindate=%d') (lineno 262) (col_offset 16) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 262) (col_offset 31) )) (attr 'lastChange') (ctx (Python.Load)) (lineno 262) (col_offset 31) )) (lineno 262) (col_offset 16) ) (Python.BinOp (left (Python.Str (s 'maxdate=%d') (lineno 263) (col_offset 16) )) (op (Python.Mod)) (right (Python.Call (func (Python.Name (id 'int') (ctx (Python.Load)) (lineno 263) (col_offset 31) )) (args (Python.Call (func (Python.Attribute (value (Python.Name (id 'time') (ctx (Python.Load)) (lineno 263) (col_offset 35) )) (attr 'time') (ctx (Python.Load)) (lineno 263) (col_offset 35) )) (args ) (keywords ) (lineno 263) (col_offset 35) )) (keywords ) (lineno 263) (col_offset 31) )) (lineno 263) (col_offset 16) ) (Python.BinOp (left (Python.Str (s 'cvsroot=%s') (lineno 264) (col_offset 16) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 264) (col_offset 31) )) (attr 'cvsroot') (ctx (Python.Load)) (lineno 264) (col_offset 31) )) (lineno 264) (col_offset 16) ) (Python.Str (s 'xml=1') (lineno 264) (col_offset 45) )) (ctx (Python.Load)) (lineno 259) (col_offset 15) )) (lineno 259) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'url') (ctx (Python.Store)) (lineno 266) (col_offset 8) )) (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 266) (col_offset 14) )) (attr 'bonsaiURL') (ctx (Python.Load)) (lineno 266) (col_offset 14) )) (lineno 266) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'url') (ctx (Python.Store)) (lineno 267) (col_offset 8) )) (op (Python.Add)) (value (Python.Str (s '/cvsquery.cgi?') (lineno 267) (col_offset 15) )) (lineno 267) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'url') (ctx (Python.Store)) (lineno 268) (col_offset 8) )) (op (Python.Add)) (value (Python.Call (func (Python.Attribute (value (Python.Str (s '&') (lineno 268) (col_offset 15) )) (attr 'join') (ctx (Python.Load)) (lineno 268) (col_offset 15) )) (args (Python.Name (id 'args') (ctx (Python.Load)) (lineno 268) (col_offset 24) )) (keywords ) (lineno 268) (col_offset 15) )) (lineno 268) (col_offset 8) ) (Python.Return (value (Python.Name (id 'url') (ctx (Python.Load)) (lineno 270) (col_offset 15) )) (lineno 270) (col_offset 8) )) (decorators ) (lineno 258) (col_offset 4) ) (Python.FunctionDef (name '_get_changes') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 272) (col_offset 21) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'url') (ctx (Python.Store)) (lineno 273) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 273) (col_offset 14) )) (attr '_make_url') (ctx (Python.Load)) (lineno 273) (col_offset 14) )) (args ) (keywords ) (lineno 273) (col_offset 14) )) (lineno 273) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 274) (col_offset 8) )) (attr 'msg') (ctx (Python.Load)) (lineno 274) (col_offset 8) )) (args (Python.BinOp (left (Python.Str (s 'Polling Bonsai tree at %s') (lineno 274) (col_offset 16) )) (op (Python.Mod)) (right (Python.Name (id 'url') (ctx (Python.Load)) (lineno 274) (col_offset 46) )) (lineno 274) (col_offset 16) )) (keywords ) (lineno 274) (col_offset 8) )) (lineno 274) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 276) (col_offset 8) )) (attr 'lastPoll') (ctx (Python.Store)) (lineno 276) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'time') (ctx (Python.Load)) (lineno 276) (col_offset 24) )) (attr 'time') (ctx (Python.Load)) (lineno 276) (col_offset 24) )) (args ) (keywords ) (lineno 276) (col_offset 24) )) (lineno 276) (col_offset 8) ) (Python.Return (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'defer') (ctx (Python.Load)) (lineno 278) (col_offset 15) )) (attr 'maybeDeferred') (ctx (Python.Load)) (lineno 278) (col_offset 15) )) (args (Python.Name (id 'urlopen') (ctx (Python.Load)) (lineno 278) (col_offset 35) ) (Python.Name (id 'url') (ctx (Python.Load)) (lineno 278) (col_offset 44) )) (keywords ) (lineno 278) (col_offset 15) )) (lineno 278) (col_offset 8) )) (decorators ) (lineno 272) (col_offset 4) ) (Python.FunctionDef (name '_process_changes') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 280) (col_offset 25) ) (Python.Name (id 'query') (ctx (Python.Param)) (lineno 280) (col_offset 31) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'files') (ctx (Python.Store)) (lineno 281) (col_offset 8) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 281) (col_offset 16) )) (lineno 281) (col_offset 8) ) (Python.TryExcept (body (Python.Assign (targets (Python.Name (id 'bp') (ctx (Python.Store)) (lineno 283) (col_offset 12) )) (value (Python.Call (func (Python.Name (id 'BonsaiParser') (ctx (Python.Load)) (lineno 283) (col_offset 17) )) (args (Python.Name (id 'query') (ctx (Python.Load)) (lineno 283) (col_offset 30) )) (keywords ) (lineno 283) (col_offset 17) )) (lineno 283) (col_offset 12) ) (Python.Assign (targets (Python.Name (id 'result') (ctx (Python.Store)) (lineno 284) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'bp') (ctx (Python.Load)) (lineno 284) (col_offset 21) )) (attr 'getData') (ctx (Python.Load)) (lineno 284) (col_offset 21) )) (args ) (keywords ) (lineno 284) (col_offset 21) )) (lineno 284) (col_offset 12) )) (handlers (Python.Excepthandler (type (Python.Name (id 'InvalidResultError') (ctx (Python.Load)) (lineno 285) (col_offset 15) )) (name (Python.Name (id 'e') (ctx (Python.Store)) (lineno 285) (col_offset 35) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 286) (col_offset 12) )) (attr 'msg') (ctx (Python.Load)) (lineno 286) (col_offset 12) )) (args (Python.BinOp (left (Python.Str (s 'Could not process Bonsai query: ') (lineno 286) (col_offset 20) )) (op (Python.Add)) (right (Python.Attribute (value (Python.Name (id 'e') (ctx (Python.Load)) (lineno 286) (col_offset 57) )) (attr 'value') (ctx (Python.Load)) (lineno 286) (col_offset 57) )) (lineno 286) (col_offset 20) )) (keywords ) (lineno 286) (col_offset 12) )) (lineno 286) (col_offset 12) ) (Python.Return (lineno 287) (col_offset 12) )) (lineno 285) (col_offset 8) ) (Python.Excepthandler (type (Python.Name (id 'EmptyResult') (ctx (Python.Load)) (lineno 288) (col_offset 15) )) (body (Python.Return (lineno 289) (col_offset 12) )) (lineno 288) (col_offset 8) )) (orelse ) (lineno 282) (col_offset 8) ) (Python.For (target (Python.Name (id 'cinode') (ctx (Python.Store)) (lineno 291) (col_offset 12) )) (iter (Python.Attribute (value (Python.Name (id 'result') (ctx (Python.Load)) (lineno 291) (col_offset 22) )) (attr 'nodes') (ctx (Python.Load)) (lineno 291) (col_offset 22) )) (body (Python.For (target (Python.Name (id 'file') (ctx (Python.Store)) (lineno 292) (col_offset 16) )) (iter (Python.Attribute (value (Python.Name (id 'cinode') (ctx (Python.Load)) (lineno 292) (col_offset 24) )) (attr 'files') (ctx (Python.Load)) (lineno 292) (col_offset 24) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'files') (ctx (Python.Load)) (lineno 293) (col_offset 16) )) (attr 'append') (ctx (Python.Load)) (lineno 293) (col_offset 16) )) (args (Python.BinOp (left (Python.BinOp (left (Python.BinOp (left (Python.Attribute (value (Python.Name (id 'file') (ctx (Python.Load)) (lineno 293) (col_offset 29) )) (attr 'filename') (ctx (Python.Load)) (lineno 293) (col_offset 29) )) (op (Python.Add)) (right (Python.Str (s ' (revision ') (lineno 293) (col_offset 43) )) (lineno 293) (col_offset 29) )) (op (Python.Add)) (right (Python.Attribute (value (Python.Name (id 'file') (ctx (Python.Load)) (lineno 293) (col_offset 57) )) (attr 'revision') (ctx (Python.Load)) (lineno 293) (col_offset 57) )) (lineno 293) (col_offset 56) )) (op (Python.Add)) (right (Python.Str (s ')') (lineno 293) (col_offset 71) )) (lineno 293) (col_offset 70) )) (keywords ) (lineno 293) (col_offset 16) )) (lineno 293) (col_offset 16) )) (orelse ) (lineno 292) (col_offset 12) ) (Python.Assign (targets (Python.Name (id 'c') (ctx (Python.Store)) (lineno 294) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'changes') (ctx (Python.Load)) (lineno 294) (col_offset 16) )) (attr 'Change') (ctx (Python.Load)) (lineno 294) (col_offset 16) )) (args ) (keywords (Python.Keyword (arg 'who') (value (Python.Attribute (value (Python.Name (id 'cinode') (ctx (Python.Load)) (lineno 294) (col_offset 37) )) (attr 'who') (ctx (Python.Load)) (lineno 294) (col_offset 37) )) ) (Python.Keyword (arg 'files') (value (Python.Name (id 'files') (ctx (Python.Load)) (lineno 295) (col_offset 39) )) ) (Python.Keyword (arg 'comments') (value (Python.Attribute (value (Python.Name (id 'cinode') (ctx (Python.Load)) (lineno 296) (col_offset 42) )) (attr 'log') (ctx (Python.Load)) (lineno 296) (col_offset 42) )) ) (Python.Keyword (arg 'when') (value (Python.Attribute (value (Python.Name (id 'cinode') (ctx (Python.Load)) (lineno 297) (col_offset 38) )) (attr 'date') (ctx (Python.Load)) (lineno 297) (col_offset 38) )) ) (Python.Keyword (arg 'branch') (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 298) (col_offset 40) )) (attr 'branch') (ctx (Python.Load)) (lineno 298) (col_offset 40) )) )) (lineno 294) (col_offset 16) )) (lineno 294) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 299) (col_offset 12) )) (attr 'parent') (ctx (Python.Load)) (lineno 299) (col_offset 12) )) (attr 'addChange') (ctx (Python.Load)) (lineno 299) (col_offset 12) )) (args (Python.Name (id 'c') (ctx (Python.Load)) (lineno 299) (col_offset 34) )) (keywords ) (lineno 299) (col_offset 12) )) (lineno 299) (col_offset 12) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 300) (col_offset 12) )) (attr 'lastChange') (ctx (Python.Store)) (lineno 300) (col_offset 12) )) (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 300) (col_offset 30) )) (attr 'lastPoll') (ctx (Python.Load)) (lineno 300) (col_offset 30) )) (lineno 300) (col_offset 12) )) (orelse ) (lineno 291) (col_offset 8) )) (decorators ) (lineno 280) (col_offset 4) )) (lineno 177) (col_offset 0) )) (name 'bonsaipoller') ) (Python.Module (body (Python.ImportFrom (module '__future__') (names (Python.Alias (name 'generators') )) (level 0) (lineno 3) (col_offset 0) ) (Python.Import (names (Python.Alias (name 'sys') ) (Python.Alias (name 'os') ) (Python.Alias (name 'time') )) (lineno 4) (col_offset 0) ) (Python.TryExcept (body (Python.Import (names (Python.Alias (name 'cPickle') )) (lineno 6) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'pickle') (ctx (Python.Store)) (lineno 7) (col_offset 4) )) (value (Python.Name (id 'cPickle') (ctx (Python.Load)) (lineno 7) (col_offset 13) )) (lineno 7) (col_offset 4) )) (handlers (Python.Excepthandler (type (Python.Name (id 'ImportError') (ctx (Python.Load)) (lineno 8) (col_offset 7) )) (body (Python.Import (names (Python.Alias (name 'pickle') )) (lineno 9) (col_offset 4) )) (lineno 8) (col_offset 0) )) (orelse ) (lineno 5) (col_offset 0) ) (Python.ImportFrom (module 'twisted.python') (names (Python.Alias (name 'log') )) (level 0) (lineno 11) (col_offset 0) ) (Python.ImportFrom (module 'twisted.internet') (names (Python.Alias (name 'defer') )) (level 0) (lineno 12) (col_offset 0) ) (Python.ImportFrom (module 'twisted.application') (names (Python.Alias (name 'service') )) (level 0) (lineno 13) (col_offset 0) ) (Python.ImportFrom (module 'twisted.web') (names (Python.Alias (name 'html') )) (level 0) (lineno 14) (col_offset 0) ) (Python.ImportFrom (module 'buildbot') (names (Python.Alias (name 'interfaces') ) (Python.Alias (name 'util') )) (level 0) (lineno 16) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.twcompat') (names (Python.Alias (name 'implements') ) (Python.Alias (name 'providedBy') )) (level 0) (lineno 17) (col_offset 0) ) (Python.Assign (targets (Python.Name (id 'html_tmpl') (ctx (Python.Store)) (lineno 19) (col_offset 0) )) (value (Python.Str (s '

Changed by: %(who)s
Changed at: %(at)s
%(branch)s %(revision)s
Changed files: %(files)s Comments: %(comments)s

') (lineno 32) (col_offset -1) )) (lineno 19) (col_offset 0) ) (Python.ClassDef (name 'Change') (bases ) (body (Python.Expr (value (Python.Str (s 'I represent a single change to the source tree. This may involve several files, but they are all changed by the same person, and there is a change comment for the group as a whole. If the version control system supports sequential repository- (or branch-) wide change numbers (like SVN, P4, and Arch), then revision= should be set to that number. The highest such number will be used at checkout time to get the correct set of files. If it does not (like CVS), when= should be set to the timestamp (seconds since epoch, as returned by time.time()) when the change was made. when= will be filled in for you (to the current time) if you omit it, which is suitable for ChangeSources which have no way of getting more accurate timestamps. Changes should be submitted to ChangeMaster.addChange() in chronologically increasing order. Out-of-order changes will probably cause the html.Waterfall display to be corrupted.') (lineno 52) (col_offset -1) )) (lineno 52) (col_offset -1) ) (Python.If (test (Python.Name (id 'implements') (ctx (Python.Load)) (lineno 54) (col_offset 7) )) (body (Python.Expr (value (Python.Call (func (Python.Name (id 'implements') (ctx (Python.Load)) (lineno 55) (col_offset 8) )) (args (Python.Attribute (value (Python.Name (id 'interfaces') (ctx (Python.Load)) (lineno 55) (col_offset 19) )) (attr 'IStatusEvent') (ctx (Python.Load)) (lineno 55) (col_offset 19) )) (keywords ) (lineno 55) (col_offset 8) )) (lineno 55) (col_offset 8) )) (orelse (Python.Assign (targets (Python.Name (id '__implements__') (ctx (Python.Store)) (lineno 57) (col_offset 8) )) (value (Python.Tuple (elts (Python.Attribute (value (Python.Name (id 'interfaces') (ctx (Python.Load)) (lineno 57) (col_offset 25) )) (attr 'IStatusEvent') (ctx (Python.Load)) (lineno 57) (col_offset 25) )) (ctx (Python.Load)) (lineno 57) (col_offset 25) )) (lineno 57) (col_offset 8) )) (lineno 54) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'number') (ctx (Python.Store)) (lineno 59) (col_offset 4) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 59) (col_offset 13) )) (lineno 59) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'links') (ctx (Python.Store)) (lineno 61) (col_offset 4) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 61) (col_offset 12) )) (lineno 61) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'branch') (ctx (Python.Store)) (lineno 62) (col_offset 4) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 62) (col_offset 13) )) (lineno 62) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'revision') (ctx (Python.Store)) (lineno 63) (col_offset 4) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 63) (col_offset 15) )) (lineno 63) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 65) (col_offset 17) ) (Python.Name (id 'who') (ctx (Python.Param)) (lineno 65) (col_offset 23) ) (Python.Name (id 'files') (ctx (Python.Param)) (lineno 65) (col_offset 28) ) (Python.Name (id 'comments') (ctx (Python.Param)) (lineno 65) (col_offset 35) ) (Python.Name (id 'isdir') (ctx (Python.Param)) (lineno 65) (col_offset 45) ) (Python.Name (id 'links') (ctx (Python.Param)) (lineno 65) (col_offset 54) ) (Python.Name (id 'revision') (ctx (Python.Param)) (lineno 66) (col_offset 17) ) (Python.Name (id 'when') (ctx (Python.Param)) (lineno 66) (col_offset 32) ) (Python.Name (id 'branch') (ctx (Python.Param)) (lineno 66) (col_offset 43) )) (defaults (Python.Num (n 0) (lineno 65) (col_offset 51) ) (Python.List (elts ) (ctx (Python.Load)) (lineno 65) (col_offset 60) ) (Python.Name (id 'None') (ctx (Python.Load)) (lineno 66) (col_offset 26) ) (Python.Name (id 'None') (ctx (Python.Load)) (lineno 66) (col_offset 37) ) (Python.Name (id 'None') (ctx (Python.Load)) (lineno 66) (col_offset 50) )) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 67) (col_offset 8) )) (attr 'who') (ctx (Python.Store)) (lineno 67) (col_offset 8) )) (value (Python.Name (id 'who') (ctx (Python.Load)) (lineno 67) (col_offset 19) )) (lineno 67) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 68) (col_offset 8) )) (attr 'files') (ctx (Python.Store)) (lineno 68) (col_offset 8) )) (value (Python.Name (id 'files') (ctx (Python.Load)) (lineno 68) (col_offset 21) )) (lineno 68) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 69) (col_offset 8) )) (attr 'comments') (ctx (Python.Store)) (lineno 69) (col_offset 8) )) (value (Python.Name (id 'comments') (ctx (Python.Load)) (lineno 69) (col_offset 24) )) (lineno 69) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 70) (col_offset 8) )) (attr 'isdir') (ctx (Python.Store)) (lineno 70) (col_offset 8) )) (value (Python.Name (id 'isdir') (ctx (Python.Load)) (lineno 70) (col_offset 21) )) (lineno 70) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 71) (col_offset 8) )) (attr 'links') (ctx (Python.Store)) (lineno 71) (col_offset 8) )) (value (Python.Name (id 'links') (ctx (Python.Load)) (lineno 71) (col_offset 21) )) (lineno 71) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 72) (col_offset 8) )) (attr 'revision') (ctx (Python.Store)) (lineno 72) (col_offset 8) )) (value (Python.Name (id 'revision') (ctx (Python.Load)) (lineno 72) (col_offset 24) )) (lineno 72) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'when') (ctx (Python.Load)) (lineno 73) (col_offset 11) )) (ops (Python.Is)) (comparators (Python.Name (id 'None') (ctx (Python.Load)) (lineno 73) (col_offset 19) )) (lineno 73) (col_offset 11) )) (body (Python.Assign (targets (Python.Name (id 'when') (ctx (Python.Store)) (lineno 74) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'util') (ctx (Python.Load)) (lineno 74) (col_offset 19) )) (attr 'now') (ctx (Python.Load)) (lineno 74) (col_offset 19) )) (args ) (keywords ) (lineno 74) (col_offset 19) )) (lineno 74) (col_offset 12) )) (orelse ) (lineno 73) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 75) (col_offset 8) )) (attr 'when') (ctx (Python.Store)) (lineno 75) (col_offset 8) )) (value (Python.Name (id 'when') (ctx (Python.Load)) (lineno 75) (col_offset 20) )) (lineno 75) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 76) (col_offset 8) )) (attr 'branch') (ctx (Python.Store)) (lineno 76) (col_offset 8) )) (value (Python.Name (id 'branch') (ctx (Python.Load)) (lineno 76) (col_offset 22) )) (lineno 76) (col_offset 8) )) (decorators ) (lineno 65) (col_offset 4) ) (Python.FunctionDef (name 'asText') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 78) (col_offset 15) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'data') (ctx (Python.Store)) (lineno 79) (col_offset 8) )) (value (Python.Str (s '') (lineno 79) (col_offset 15) )) (lineno 79) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'data') (ctx (Python.Store)) (lineno 80) (col_offset 8) )) (op (Python.Add)) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 80) (col_offset 16) )) (attr 'getFileContents') (ctx (Python.Load)) (lineno 80) (col_offset 16) )) (args ) (keywords ) (lineno 80) (col_offset 16) )) (lineno 80) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'data') (ctx (Python.Store)) (lineno 81) (col_offset 8) )) (op (Python.Add)) (value (Python.BinOp (left (Python.Str (s 'At: %s ') (lineno 81) (col_offset 16) )) (op (Python.Mod)) (right (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 81) (col_offset 29) )) (attr 'getTime') (ctx (Python.Load)) (lineno 81) (col_offset 29) )) (args ) (keywords ) (lineno 81) (col_offset 29) )) (lineno 81) (col_offset 16) )) (lineno 81) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'data') (ctx (Python.Store)) (lineno 82) (col_offset 8) )) (op (Python.Add)) (value (Python.BinOp (left (Python.Str (s 'Changed By: %s ') (lineno 82) (col_offset 16) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 82) (col_offset 37) )) (attr 'who') (ctx (Python.Load)) (lineno 82) (col_offset 37) )) (lineno 82) (col_offset 16) )) (lineno 82) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'data') (ctx (Python.Store)) (lineno 83) (col_offset 8) )) (op (Python.Add)) (value (Python.BinOp (left (Python.Str (s 'Comments: %s ') (lineno 83) (col_offset 16) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 83) (col_offset 37) )) (attr 'comments') (ctx (Python.Load)) (lineno 83) (col_offset 37) )) (lineno 83) (col_offset 16) )) (lineno 83) (col_offset 8) ) (Python.Return (value (Python.Name (id 'data') (ctx (Python.Load)) (lineno 84) (col_offset 15) )) (lineno 84) (col_offset 8) )) (decorators ) (lineno 78) (col_offset 4) ) (Python.FunctionDef (name 'asHTML') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 86) (col_offset 15) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'links') (ctx (Python.Store)) (lineno 87) (col_offset 8) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 87) (col_offset 16) )) (lineno 87) (col_offset 8) ) (Python.For (target (Python.Name (id 'file') (ctx (Python.Store)) (lineno 88) (col_offset 12) )) (iter (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 88) (col_offset 20) )) (attr 'files') (ctx (Python.Load)) (lineno 88) (col_offset 20) )) (body (Python.Assign (targets (Python.Name (id 'link') (ctx (Python.Store)) (lineno 89) (col_offset 12) )) (value (Python.Call (func (Python.Name (id 'filter') (ctx (Python.Load)) (lineno 89) (col_offset 19) )) (args (Python.Lambda (args (Python.Arguments (args (Python.Name (id 's') (ctx (Python.Param)) (lineno 89) (col_offset 33) )) (defaults ) )) (body (Python.Compare (left (Python.Call (func (Python.Attribute (value (Python.Name (id 's') (ctx (Python.Load)) (lineno 89) (col_offset 36) )) (attr 'find') (ctx (Python.Load)) (lineno 89) (col_offset 36) )) (args (Python.Name (id 'file') (ctx (Python.Load)) (lineno 89) (col_offset 43) )) (keywords ) (lineno 89) (col_offset 36) )) (ops (Python.NotEq)) (comparators (Python.Num (n -1) (lineno 89) (col_offset 53) )) (lineno 89) (col_offset 36) )) (lineno 89) (col_offset 26) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 89) (col_offset 56) )) (attr 'links') (ctx (Python.Load)) (lineno 89) (col_offset 56) )) (keywords ) (lineno 89) (col_offset 19) )) (lineno 89) (col_offset 12) ) (Python.If (test (Python.Compare (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 90) (col_offset 15) )) (args (Python.Name (id 'link') (ctx (Python.Load)) (lineno 90) (col_offset 19) )) (keywords ) (lineno 90) (col_offset 15) )) (ops (Python.Eq)) (comparators (Python.Num (n 1) (lineno 90) (col_offset 28) )) (lineno 90) (col_offset 15) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'links') (ctx (Python.Load)) (lineno 92) (col_offset 16) )) (attr 'append') (ctx (Python.Load)) (lineno 92) (col_offset 16) )) (args (Python.BinOp (left (Python.Str (s '%s') (lineno 92) (col_offset 29) )) (op (Python.Mod)) (right (Python.Tuple (elts (Python.Subscript (value (Python.Name (id 'link') (ctx (Python.Load)) (lineno 92) (col_offset 61) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 92) (col_offset 66) )) )) (ctx (Python.Load)) (lineno 92) (col_offset 61) ) (Python.Name (id 'file') (ctx (Python.Load)) (lineno 92) (col_offset 70) )) (ctx (Python.Load)) (lineno 92) (col_offset 61) )) (lineno 92) (col_offset 29) )) (keywords ) (lineno 92) (col_offset 16) )) (lineno 92) (col_offset 16) )) (orelse (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'links') (ctx (Python.Load)) (lineno 94) (col_offset 16) )) (attr 'append') (ctx (Python.Load)) (lineno 94) (col_offset 16) )) (args (Python.BinOp (left (Python.Str (s '%s') (lineno 94) (col_offset 29) )) (op (Python.Mod)) (right (Python.Name (id 'file') (ctx (Python.Load)) (lineno 94) (col_offset 43) )) (lineno 94) (col_offset 29) )) (keywords ) (lineno 94) (col_offset 16) )) (lineno 94) (col_offset 16) )) (lineno 90) (col_offset 12) )) (orelse ) (lineno 88) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'revision') (ctx (Python.Store)) (lineno 95) (col_offset 8) )) (value (Python.Str (s '') (lineno 95) (col_offset 19) )) (lineno 95) (col_offset 8) ) (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 96) (col_offset 11) )) (attr 'revision') (ctx (Python.Load)) (lineno 96) (col_offset 11) )) (body (Python.Assign (targets (Python.Name (id 'revision') (ctx (Python.Store)) (lineno 97) (col_offset 12) )) (value (Python.BinOp (left (Python.Str (s 'Revision: %s
') (lineno 97) (col_offset 23) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 97) (col_offset 55) )) (attr 'revision') (ctx (Python.Load)) (lineno 97) (col_offset 55) )) (lineno 97) (col_offset 23) )) (lineno 97) (col_offset 12) )) (orelse ) (lineno 96) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'branch') (ctx (Python.Store)) (lineno 98) (col_offset 8) )) (value (Python.Str (s '') (lineno 98) (col_offset 17) )) (lineno 98) (col_offset 8) ) (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 99) (col_offset 11) )) (attr 'branch') (ctx (Python.Load)) (lineno 99) (col_offset 11) )) (body (Python.Assign (targets (Python.Name (id 'branch') (ctx (Python.Store)) (lineno 100) (col_offset 12) )) (value (Python.BinOp (left (Python.Str (s 'Branch: %s
') (lineno 100) (col_offset 21) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 100) (col_offset 51) )) (attr 'branch') (ctx (Python.Load)) (lineno 100) (col_offset 51) )) (lineno 100) (col_offset 21) )) (lineno 100) (col_offset 12) )) (orelse ) (lineno 99) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'kwargs') (ctx (Python.Store)) (lineno 102) (col_offset 8) )) (value (Python.Dict (keys (Python.Str (s 'who') (lineno 102) (col_offset 19) ) (Python.Str (s 'at') (lineno 103) (col_offset 19) ) (Python.Str (s 'files') (lineno 104) (col_offset 19) ) (Python.Str (s 'revision') (lineno 105) (col_offset 19) ) (Python.Str (s 'branch') (lineno 106) (col_offset 19) ) (Python.Str (s 'comments') (lineno 107) (col_offset 19) )) (values (Python.Call (func (Python.Attribute (value (Python.Name (id 'html') (ctx (Python.Load)) (lineno 102) (col_offset 31) )) (attr 'escape') (ctx (Python.Load)) (lineno 102) (col_offset 31) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 102) (col_offset 43) )) (attr 'who') (ctx (Python.Load)) (lineno 102) (col_offset 43) )) (keywords ) (lineno 102) (col_offset 31) ) (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 103) (col_offset 31) )) (attr 'getTime') (ctx (Python.Load)) (lineno 103) (col_offset 31) )) (args ) (keywords ) (lineno 103) (col_offset 31) ) (Python.BinOp (left (Python.Call (func (Python.Attribute (value (Python.Name (id 'html') (ctx (Python.Load)) (lineno 104) (col_offset 31) )) (attr 'UL') (ctx (Python.Load)) (lineno 104) (col_offset 31) )) (args (Python.Name (id 'links') (ctx (Python.Load)) (lineno 104) (col_offset 39) )) (keywords ) (lineno 104) (col_offset 31) )) (op (Python.Add)) (right (Python.Str (s ' ') (lineno 104) (col_offset 48) )) (lineno 104) (col_offset 31) ) (Python.Name (id 'revision') (ctx (Python.Load)) (lineno 105) (col_offset 31) ) (Python.Name (id 'branch') (ctx (Python.Load)) (lineno 106) (col_offset 31) ) (Python.Call (func (Python.Attribute (value (Python.Name (id 'html') (ctx (Python.Load)) (lineno 107) (col_offset 31) )) (attr 'PRE') (ctx (Python.Load)) (lineno 107) (col_offset 31) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 107) (col_offset 40) )) (attr 'comments') (ctx (Python.Load)) (lineno 107) (col_offset 40) )) (keywords ) (lineno 107) (col_offset 31) )) (lineno 102) (col_offset 17) )) (lineno 102) (col_offset 8) ) (Python.Return (value (Python.BinOp (left (Python.Name (id 'html_tmpl') (ctx (Python.Load)) (lineno 108) (col_offset 15) )) (op (Python.Mod)) (right (Python.Name (id 'kwargs') (ctx (Python.Load)) (lineno 108) (col_offset 27) )) (lineno 108) (col_offset 15) )) (lineno 108) (col_offset 8) )) (decorators ) (lineno 86) (col_offset 4) ) (Python.FunctionDef (name 'getTime') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 110) (col_offset 16) )) (defaults ) )) (body (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 111) (col_offset 15) )) (attr 'when') (ctx (Python.Load)) (lineno 111) (col_offset 15) )) (lineno 111) (col_offset 11) )) (body (Python.Return (value (Python.Str (s '?') (lineno 112) (col_offset 19) )) (lineno 112) (col_offset 12) )) (orelse ) (lineno 111) (col_offset 8) ) (Python.Return (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'time') (ctx (Python.Load)) (lineno 113) (col_offset 15) )) (attr 'strftime') (ctx (Python.Load)) (lineno 113) (col_offset 15) )) (args (Python.Str (s '%a %d %b %Y %H:%M:%S') (lineno 113) (col_offset 29) ) (Python.Call (func (Python.Attribute (value (Python.Name (id 'time') (ctx (Python.Load)) (lineno 114) (col_offset 29) )) (attr 'localtime') (ctx (Python.Load)) (lineno 114) (col_offset 29) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 114) (col_offset 44) )) (attr 'when') (ctx (Python.Load)) (lineno 114) (col_offset 44) )) (keywords ) (lineno 114) (col_offset 29) )) (keywords ) (lineno 113) (col_offset 15) )) (lineno 113) (col_offset 8) )) (decorators ) (lineno 110) (col_offset 4) ) (Python.FunctionDef (name 'getTimes') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 116) (col_offset 17) )) (defaults ) )) (body (Python.Return (value (Python.Tuple (elts (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 117) (col_offset 16) )) (attr 'when') (ctx (Python.Load)) (lineno 117) (col_offset 16) ) (Python.Name (id 'None') (ctx (Python.Load)) (lineno 117) (col_offset 27) )) (ctx (Python.Load)) (lineno 117) (col_offset 16) )) (lineno 117) (col_offset 8) )) (decorators ) (lineno 116) (col_offset 4) ) (Python.FunctionDef (name 'getText') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 119) (col_offset 16) )) (defaults ) )) (body (Python.Return (value (Python.List (elts (Python.Call (func (Python.Attribute (value (Python.Name (id 'html') (ctx (Python.Load)) (lineno 120) (col_offset 16) )) (attr 'escape') (ctx (Python.Load)) (lineno 120) (col_offset 16) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 120) (col_offset 28) )) (attr 'who') (ctx (Python.Load)) (lineno 120) (col_offset 28) )) (keywords ) (lineno 120) (col_offset 16) )) (ctx (Python.Load)) (lineno 120) (col_offset 15) )) (lineno 120) (col_offset 8) )) (decorators ) (lineno 119) (col_offset 4) ) (Python.FunctionDef (name 'getColor') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 121) (col_offset 17) )) (defaults ) )) (body (Python.Return (value (Python.Str (s 'white') (lineno 122) (col_offset 15) )) (lineno 122) (col_offset 8) )) (decorators ) (lineno 121) (col_offset 4) ) (Python.FunctionDef (name 'getLogs') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 123) (col_offset 16) )) (defaults ) )) (body (Python.Return (value (Python.Dict (keys ) (values ) (lineno 124) (col_offset 15) )) (lineno 124) (col_offset 8) )) (decorators ) (lineno 123) (col_offset 4) ) (Python.FunctionDef (name 'getFileContents') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 126) (col_offset 24) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'data') (ctx (Python.Store)) (lineno 127) (col_offset 8) )) (value (Python.Str (s '') (lineno 127) (col_offset 15) )) (lineno 127) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 128) (col_offset 11) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 128) (col_offset 15) )) (attr 'files') (ctx (Python.Load)) (lineno 128) (col_offset 15) )) (keywords ) (lineno 128) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Num (n 1) (lineno 128) (col_offset 30) )) (lineno 128) (col_offset 11) )) (body (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 129) (col_offset 15) )) (attr 'isdir') (ctx (Python.Load)) (lineno 129) (col_offset 15) )) (body (Python.AugAssign (target (Python.Name (id 'data') (ctx (Python.Store)) (lineno 130) (col_offset 16) )) (op (Python.Add)) (value (Python.BinOp (left (Python.Str (s 'Directory: %s ') (lineno 130) (col_offset 24) )) (op (Python.Mod)) (right (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 130) (col_offset 44) )) (attr 'files') (ctx (Python.Load)) (lineno 130) (col_offset 44) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 130) (col_offset 55) )) )) (ctx (Python.Load)) (lineno 130) (col_offset 44) )) (lineno 130) (col_offset 24) )) (lineno 130) (col_offset 16) )) (orelse (Python.AugAssign (target (Python.Name (id 'data') (ctx (Python.Store)) (lineno 132) (col_offset 16) )) (op (Python.Add)) (value (Python.BinOp (left (Python.Str (s 'File: %s ') (lineno 132) (col_offset 24) )) (op (Python.Mod)) (right (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 132) (col_offset 39) )) (attr 'files') (ctx (Python.Load)) (lineno 132) (col_offset 39) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 132) (col_offset 50) )) )) (ctx (Python.Load)) (lineno 132) (col_offset 39) )) (lineno 132) (col_offset 24) )) (lineno 132) (col_offset 16) )) (lineno 129) (col_offset 12) )) (orelse (Python.AugAssign (target (Python.Name (id 'data') (ctx (Python.Store)) (lineno 134) (col_offset 12) )) (op (Python.Add)) (value (Python.Str (s 'Files: ') (lineno 134) (col_offset 20) )) (lineno 134) (col_offset 12) ) (Python.For (target (Python.Name (id 'f') (ctx (Python.Store)) (lineno 135) (col_offset 16) )) (iter (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 135) (col_offset 21) )) (attr 'files') (ctx (Python.Load)) (lineno 135) (col_offset 21) )) (body (Python.AugAssign (target (Python.Name (id 'data') (ctx (Python.Store)) (lineno 136) (col_offset 16) )) (op (Python.Add)) (value (Python.BinOp (left (Python.Str (s ' %s ') (lineno 136) (col_offset 24) )) (op (Python.Mod)) (right (Python.Name (id 'f') (ctx (Python.Load)) (lineno 136) (col_offset 34) )) (lineno 136) (col_offset 24) )) (lineno 136) (col_offset 16) )) (orelse ) (lineno 135) (col_offset 12) )) (lineno 128) (col_offset 8) ) (Python.Return (value (Python.Name (id 'data') (ctx (Python.Load)) (lineno 137) (col_offset 15) )) (lineno 137) (col_offset 8) )) (decorators ) (lineno 126) (col_offset 4) )) (lineno 34) (col_offset 0) ) (Python.ClassDef (name 'ChangeMaster') (bases (Python.Attribute (value (Python.Name (id 'service') (ctx (Python.Load)) (lineno 139) (col_offset 19) )) (attr 'MultiService') (ctx (Python.Load)) (lineno 139) (col_offset 19) )) (body (Python.Expr (value (Python.Str (s 'This is the master-side service which receives file change notifications from CVS. It keeps a log of these changes, enough to provide for the HTML waterfall display, and to tell temporarily-disconnected bots what they missed while they were offline. Change notifications come from two different kinds of sources. The first is a PB service (servicename=''changemaster'', perspectivename=''change''), which provides a remote method called ''addChange'', which should be called with a dict that has keys ''filename'' and ''comments''. The second is a list of objects derived from the ChangeSource class. These are added with .addSource(), which also sets the .changemaster attribute in the source to point at the ChangeMaster. When the application begins, these will be started with .start() . At shutdown time, they will be terminated with .stop() . They must be persistable. They are expected to call self.changemaster.addChange() with Change objects. There are several different variants of the second type of source: - L{buildbot.changes.mail.MaildirSource} watches a maildir for CVS commit mail. It uses DNotify if available, or polls every 10 seconds if not. It parses incoming mail to determine what files were changed. - L{buildbot.changes.freshcvs.FreshCVSSource} makes a PB connection to the CVSToys ''freshcvs'' daemon and relays any changes it announces. ') (lineno 171) (col_offset -1) )) (lineno 171) (col_offset -1) ) (Python.Assign (targets (Python.Name (id 'debug') (ctx (Python.Store)) (lineno 173) (col_offset 4) )) (value (Python.Name (id 'False') (ctx (Python.Load)) (lineno 173) (col_offset 12) )) (lineno 173) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 176) (col_offset 17) )) (defaults ) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'service') (ctx (Python.Load)) (lineno 177) (col_offset 8) )) (attr 'MultiService') (ctx (Python.Load)) (lineno 177) (col_offset 8) )) (attr '__init__') (ctx (Python.Load)) (lineno 177) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 177) (col_offset 38) )) (keywords ) (lineno 177) (col_offset 8) )) (lineno 177) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 178) (col_offset 8) )) (attr 'changes') (ctx (Python.Store)) (lineno 178) (col_offset 8) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 178) (col_offset 23) )) (lineno 178) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 180) (col_offset 8) )) (attr 'nextNumber') (ctx (Python.Store)) (lineno 180) (col_offset 8) )) (value (Python.Num (n 1) (lineno 180) (col_offset 26) )) (lineno 180) (col_offset 8) )) (decorators ) (lineno 176) (col_offset 4) ) (Python.FunctionDef (name 'addSource') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 182) (col_offset 18) ) (Python.Name (id 'source') (ctx (Python.Param)) (lineno 182) (col_offset 24) )) (defaults ) )) (body (Python.Assert (test (Python.Call (func (Python.Name (id 'providedBy') (ctx (Python.Load)) (lineno 183) (col_offset 15) )) (args (Python.Name (id 'source') (ctx (Python.Load)) (lineno 183) (col_offset 26) ) (Python.Attribute (value (Python.Name (id 'interfaces') (ctx (Python.Load)) (lineno 183) (col_offset 34) )) (attr 'IChangeSource') (ctx (Python.Load)) (lineno 183) (col_offset 34) )) (keywords ) (lineno 183) (col_offset 15) )) (lineno 183) (col_offset 8) ) (Python.Assert (test (Python.Call (func (Python.Name (id 'providedBy') (ctx (Python.Load)) (lineno 184) (col_offset 15) )) (args (Python.Name (id 'source') (ctx (Python.Load)) (lineno 184) (col_offset 26) ) (Python.Attribute (value (Python.Name (id 'service') (ctx (Python.Load)) (lineno 184) (col_offset 34) )) (attr 'IService') (ctx (Python.Load)) (lineno 184) (col_offset 34) )) (keywords ) (lineno 184) (col_offset 15) )) (lineno 184) (col_offset 8) ) (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 185) (col_offset 11) )) (attr 'debug') (ctx (Python.Load)) (lineno 185) (col_offset 11) )) (body (Python.Print (values (Python.Str (s 'ChangeMaster.addSource') (lineno 186) (col_offset 18) ) (Python.Name (id 'source') (ctx (Python.Load)) (lineno 186) (col_offset 44) )) (nl true) (lineno 186) (col_offset 12) )) (orelse ) (lineno 185) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'source') (ctx (Python.Load)) (lineno 187) (col_offset 8) )) (attr 'setServiceParent') (ctx (Python.Load)) (lineno 187) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 187) (col_offset 32) )) (keywords ) (lineno 187) (col_offset 8) )) (lineno 187) (col_offset 8) )) (decorators ) (lineno 182) (col_offset 4) ) (Python.FunctionDef (name 'removeSource') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 189) (col_offset 21) ) (Python.Name (id 'source') (ctx (Python.Param)) (lineno 189) (col_offset 27) )) (defaults ) )) (body (Python.Assert (test (Python.Compare (left (Python.Name (id 'source') (ctx (Python.Load)) (lineno 190) (col_offset 15) )) (ops (Python.In)) (comparators (Python.Name (id 'self') (ctx (Python.Load)) (lineno 190) (col_offset 25) )) (lineno 190) (col_offset 15) )) (lineno 190) (col_offset 8) ) (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 191) (col_offset 11) )) (attr 'debug') (ctx (Python.Load)) (lineno 191) (col_offset 11) )) (body (Python.Print (values (Python.Str (s 'ChangeMaster.removeSource') (lineno 192) (col_offset 18) ) (Python.Name (id 'source') (ctx (Python.Load)) (lineno 192) (col_offset 47) ) (Python.Attribute (value (Python.Name (id 'source') (ctx (Python.Load)) (lineno 192) (col_offset 55) )) (attr 'parent') (ctx (Python.Load)) (lineno 192) (col_offset 55) )) (nl true) (lineno 192) (col_offset 12) )) (orelse ) (lineno 191) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'd') (ctx (Python.Store)) (lineno 193) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'defer') (ctx (Python.Load)) (lineno 193) (col_offset 12) )) (attr 'maybeDeferred') (ctx (Python.Load)) (lineno 193) (col_offset 12) )) (args (Python.Attribute (value (Python.Name (id 'source') (ctx (Python.Load)) (lineno 193) (col_offset 32) )) (attr 'disownServiceParent') (ctx (Python.Load)) (lineno 193) (col_offset 32) )) (keywords ) (lineno 193) (col_offset 12) )) (lineno 193) (col_offset 8) ) (Python.Return (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 194) (col_offset 15) )) (lineno 194) (col_offset 8) )) (decorators ) (lineno 189) (col_offset 4) ) (Python.FunctionDef (name 'addChange') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 196) (col_offset 18) ) (Python.Name (id 'change') (ctx (Python.Param)) (lineno 196) (col_offset 24) )) (defaults ) )) (body (Python.Expr (value (Python.Str (s 'Deliver a file change event. The event should be a Change object. This method will timestamp the object as it is received.') (lineno 198) (col_offset -1) )) (lineno 198) (col_offset -1) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 199) (col_offset 8) )) (attr 'msg') (ctx (Python.Load)) (lineno 199) (col_offset 8) )) (args (Python.BinOp (left (Python.Str (s 'adding change, who %s, %d files, rev=%s, branch=%s, comments %s') (lineno 199) (col_offset 16) )) (op (Python.Mod)) (right (Python.Tuple (elts (Python.Attribute (value (Python.Name (id 'change') (ctx (Python.Load)) (lineno 200) (col_offset 33) )) (attr 'who') (ctx (Python.Load)) (lineno 200) (col_offset 33) ) (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 200) (col_offset 45) )) (args (Python.Attribute (value (Python.Name (id 'change') (ctx (Python.Load)) (lineno 200) (col_offset 49) )) (attr 'files') (ctx (Python.Load)) (lineno 200) (col_offset 49) )) (keywords ) (lineno 200) (col_offset 45) ) (Python.Attribute (value (Python.Name (id 'change') (ctx (Python.Load)) (lineno 201) (col_offset 33) )) (attr 'revision') (ctx (Python.Load)) (lineno 201) (col_offset 33) ) (Python.Attribute (value (Python.Name (id 'change') (ctx (Python.Load)) (lineno 201) (col_offset 50) )) (attr 'branch') (ctx (Python.Load)) (lineno 201) (col_offset 50) ) (Python.Attribute (value (Python.Name (id 'change') (ctx (Python.Load)) (lineno 202) (col_offset 33) )) (attr 'comments') (ctx (Python.Load)) (lineno 202) (col_offset 33) )) (ctx (Python.Load)) (lineno 200) (col_offset 33) )) (lineno 199) (col_offset 16) )) (keywords ) (lineno 199) (col_offset 8) )) (lineno 199) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'change') (ctx (Python.Load)) (lineno 203) (col_offset 8) )) (attr 'number') (ctx (Python.Store)) (lineno 203) (col_offset 8) )) (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 203) (col_offset 24) )) (attr 'nextNumber') (ctx (Python.Load)) (lineno 203) (col_offset 24) )) (lineno 203) (col_offset 8) ) (Python.AugAssign (target (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 204) (col_offset 8) )) (attr 'nextNumber') (ctx (Python.Store)) (lineno 204) (col_offset 8) )) (op (Python.Add)) (value (Python.Num (n 1) (lineno 204) (col_offset 27) )) (lineno 204) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 205) (col_offset 8) )) (attr 'changes') (ctx (Python.Load)) (lineno 205) (col_offset 8) )) (attr 'append') (ctx (Python.Load)) (lineno 205) (col_offset 8) )) (args (Python.Name (id 'change') (ctx (Python.Load)) (lineno 205) (col_offset 28) )) (keywords ) (lineno 205) (col_offset 8) )) (lineno 205) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 206) (col_offset 8) )) (attr 'parent') (ctx (Python.Load)) (lineno 206) (col_offset 8) )) (attr 'addChange') (ctx (Python.Load)) (lineno 206) (col_offset 8) )) (args (Python.Name (id 'change') (ctx (Python.Load)) (lineno 206) (col_offset 30) )) (keywords ) (lineno 206) (col_offset 8) )) (lineno 206) (col_offset 8) )) (decorators ) (lineno 196) (col_offset 4) ) (Python.FunctionDef (name 'pruneChanges') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 209) (col_offset 21) )) (defaults ) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 210) (col_offset 8) )) (attr 'changes') (ctx (Python.Store)) (lineno 210) (col_offset 8) )) (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 210) (col_offset 23) )) (attr 'changes') (ctx (Python.Load)) (lineno 210) (col_offset 23) )) (slice (Python.Slice (lower (Python.Num (n -100) (lineno 210) (col_offset 37) )) )) (ctx (Python.Load)) (lineno 210) (col_offset 23) )) (lineno 210) (col_offset 8) )) (decorators ) (lineno 209) (col_offset 4) ) (Python.FunctionDef (name 'eventGenerator') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 212) (col_offset 23) )) (defaults ) )) (body (Python.For (target (Python.Name (id 'i') (ctx (Python.Store)) (lineno 213) (col_offset 12) )) (iter (Python.Call (func (Python.Name (id 'range') (ctx (Python.Load)) (lineno 213) (col_offset 17) )) (args (Python.BinOp (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 213) (col_offset 23) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 213) (col_offset 27) )) (attr 'changes') (ctx (Python.Load)) (lineno 213) (col_offset 27) )) (keywords ) (lineno 213) (col_offset 23) )) (op (Python.Sub)) (right (Python.Num (n 1) (lineno 213) (col_offset 41) )) (lineno 213) (col_offset 23) ) (Python.Num (n -1) (lineno 213) (col_offset 45) ) (Python.Num (n -1) (lineno 213) (col_offset 49) )) (keywords ) (lineno 213) (col_offset 17) )) (body (Python.Assign (targets (Python.Name (id 'c') (ctx (Python.Store)) (lineno 214) (col_offset 12) )) (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 214) (col_offset 16) )) (attr 'changes') (ctx (Python.Load)) (lineno 214) (col_offset 16) )) (slice (Python.Index (value (Python.Name (id 'i') (ctx (Python.Load)) (lineno 214) (col_offset 29) )) )) (ctx (Python.Load)) (lineno 214) (col_offset 16) )) (lineno 214) (col_offset 12) ) (Python.Expr (value (Python.Yield (value (Python.Name (id 'c') (ctx (Python.Load)) (lineno 215) (col_offset 18) )) (lineno 215) (col_offset 12) )) (lineno 215) (col_offset 12) )) (orelse ) (lineno 213) (col_offset 8) )) (decorators ) (lineno 212) (col_offset 4) ) (Python.FunctionDef (name 'getChangeNumbered') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 217) (col_offset 26) ) (Python.Name (id 'num') (ctx (Python.Param)) (lineno 217) (col_offset 32) )) (defaults ) )) (body (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 218) (col_offset 15) )) (attr 'changes') (ctx (Python.Load)) (lineno 218) (col_offset 15) )) (lineno 218) (col_offset 11) )) (body (Python.Return (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 219) (col_offset 19) )) (lineno 219) (col_offset 12) )) (orelse ) (lineno 218) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'first') (ctx (Python.Store)) (lineno 220) (col_offset 8) )) (value (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 220) (col_offset 16) )) (attr 'changes') (ctx (Python.Load)) (lineno 220) (col_offset 16) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 220) (col_offset 29) )) )) (ctx (Python.Load)) (lineno 220) (col_offset 16) )) (attr 'number') (ctx (Python.Load)) (lineno 220) (col_offset 16) )) (lineno 220) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.BinOp (left (Python.BinOp (left (Python.Name (id 'first') (ctx (Python.Load)) (lineno 221) (col_offset 11) )) (op (Python.Add)) (right (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 221) (col_offset 19) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 221) (col_offset 23) )) (attr 'changes') (ctx (Python.Load)) (lineno 221) (col_offset 23) )) (keywords ) (lineno 221) (col_offset 19) )) (lineno 221) (col_offset 11) )) (op (Python.Sub)) (right (Python.Num (n 1) (lineno 221) (col_offset 37) )) (lineno 221) (col_offset 36) )) (ops (Python.NotEq)) (comparators (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 221) (col_offset 42) )) (attr 'changes') (ctx (Python.Load)) (lineno 221) (col_offset 42) )) (slice (Python.Index (value (Python.Num (n -1) (lineno 221) (col_offset 56) )) )) (ctx (Python.Load)) (lineno 221) (col_offset 42) )) (attr 'number') (ctx (Python.Load)) (lineno 221) (col_offset 42) )) (lineno 221) (col_offset 11) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 222) (col_offset 12) )) (attr 'msg') (ctx (Python.Load)) (lineno 222) (col_offset 12) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 222) (col_offset 20) ) (Python.BinOp (left (Python.Str (s 'lost a change somewhere: [0] is %d, [%d] is %d') (lineno 223) (col_offset 20) )) (op (Python.Mod)) (right (Python.Tuple (elts (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 224) (col_offset 21) )) (attr 'changes') (ctx (Python.Load)) (lineno 224) (col_offset 21) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 224) (col_offset 34) )) )) (ctx (Python.Load)) (lineno 224) (col_offset 21) )) (attr 'number') (ctx (Python.Load)) (lineno 224) (col_offset 21) ) (Python.BinOp (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 225) (col_offset 21) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 225) (col_offset 25) )) (attr 'changes') (ctx (Python.Load)) (lineno 225) (col_offset 25) )) (keywords ) (lineno 225) (col_offset 21) )) (op (Python.Sub)) (right (Python.Num (n 1) (lineno 225) (col_offset 41) )) (lineno 225) (col_offset 21) ) (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 226) (col_offset 21) )) (attr 'changes') (ctx (Python.Load)) (lineno 226) (col_offset 21) )) (slice (Python.Index (value (Python.Num (n -1) (lineno 226) (col_offset 35) )) )) (ctx (Python.Load)) (lineno 226) (col_offset 21) )) (attr 'number') (ctx (Python.Load)) (lineno 226) (col_offset 21) )) (ctx (Python.Load)) (lineno 224) (col_offset 21) )) (lineno 223) (col_offset 20) )) (keywords ) (lineno 222) (col_offset 12) )) (lineno 222) (col_offset 12) ) (Python.For (target (Python.Name (id 'c') (ctx (Python.Store)) (lineno 227) (col_offset 16) )) (iter (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 227) (col_offset 21) )) (attr 'changes') (ctx (Python.Load)) (lineno 227) (col_offset 21) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 228) (col_offset 16) )) (attr 'msg') (ctx (Python.Load)) (lineno 228) (col_offset 16) )) (args (Python.BinOp (left (Python.Str (s 'c[%d]: ') (lineno 228) (col_offset 24) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Name (id 'c') (ctx (Python.Load)) (lineno 228) (col_offset 36) )) (attr 'number') (ctx (Python.Load)) (lineno 228) (col_offset 36) )) (lineno 228) (col_offset 24) ) (Python.Name (id 'c') (ctx (Python.Load)) (lineno 228) (col_offset 46) )) (keywords ) (lineno 228) (col_offset 16) )) (lineno 228) (col_offset 16) )) (orelse ) (lineno 227) (col_offset 12) ) (Python.Return (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 229) (col_offset 19) )) (lineno 229) (col_offset 12) )) (orelse ) (lineno 221) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'offset') (ctx (Python.Store)) (lineno 230) (col_offset 8) )) (value (Python.BinOp (left (Python.Name (id 'num') (ctx (Python.Load)) (lineno 230) (col_offset 17) )) (op (Python.Sub)) (right (Python.Name (id 'first') (ctx (Python.Load)) (lineno 230) (col_offset 23) )) (lineno 230) (col_offset 17) )) (lineno 230) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 231) (col_offset 8) )) (attr 'msg') (ctx (Python.Load)) (lineno 231) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 231) (col_offset 16) ) (Python.Str (s 'offset') (lineno 231) (col_offset 22) ) (Python.Name (id 'offset') (ctx (Python.Load)) (lineno 231) (col_offset 32) )) (keywords ) (lineno 231) (col_offset 8) )) (lineno 231) (col_offset 8) ) (Python.Return (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 232) (col_offset 15) )) (attr 'changes') (ctx (Python.Load)) (lineno 232) (col_offset 15) )) (slice (Python.Index (value (Python.Name (id 'offset') (ctx (Python.Load)) (lineno 232) (col_offset 28) )) )) (ctx (Python.Load)) (lineno 232) (col_offset 15) )) (lineno 232) (col_offset 8) )) (decorators ) (lineno 217) (col_offset 4) ) (Python.FunctionDef (name '__getstate__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 234) (col_offset 21) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'd') (ctx (Python.Store)) (lineno 235) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'service') (ctx (Python.Load)) (lineno 235) (col_offset 12) )) (attr 'MultiService') (ctx (Python.Load)) (lineno 235) (col_offset 12) )) (attr '__getstate__') (ctx (Python.Load)) (lineno 235) (col_offset 12) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 235) (col_offset 46) )) (keywords ) (lineno 235) (col_offset 12) )) (lineno 235) (col_offset 8) ) (Python.Delete (targets (Python.Subscript (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 236) (col_offset 12) )) (slice (Python.Index (value (Python.Str (s 'parent') (lineno 236) (col_offset 14) )) )) (ctx (Python.Del)) (lineno 236) (col_offset 12) )) (lineno 236) (col_offset 8) ) (Python.Delete (targets (Python.Subscript (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 237) (col_offset 12) )) (slice (Python.Index (value (Python.Str (s 'services') (lineno 237) (col_offset 14) )) )) (ctx (Python.Del)) (lineno 237) (col_offset 12) )) (lineno 237) (col_offset 8) ) (Python.Delete (targets (Python.Subscript (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 238) (col_offset 12) )) (slice (Python.Index (value (Python.Str (s 'namedServices') (lineno 238) (col_offset 14) )) )) (ctx (Python.Del)) (lineno 238) (col_offset 12) )) (lineno 238) (col_offset 8) ) (Python.Return (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 239) (col_offset 15) )) (lineno 239) (col_offset 8) )) (decorators ) (lineno 234) (col_offset 4) ) (Python.FunctionDef (name '__setstate__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 241) (col_offset 21) ) (Python.Name (id 'd') (ctx (Python.Param)) (lineno 241) (col_offset 27) )) (defaults ) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 242) (col_offset 8) )) (attr '__dict__') (ctx (Python.Store)) (lineno 242) (col_offset 8) )) (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 242) (col_offset 24) )) (lineno 242) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 244) (col_offset 8) )) (attr 'services') (ctx (Python.Store)) (lineno 244) (col_offset 8) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 244) (col_offset 24) )) (lineno 244) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 245) (col_offset 8) )) (attr 'namedServices') (ctx (Python.Store)) (lineno 245) (col_offset 8) )) (value (Python.Dict (keys ) (values ) (lineno 245) (col_offset 29) )) (lineno 245) (col_offset 8) )) (decorators ) (lineno 241) (col_offset 4) ) (Python.FunctionDef (name 'saveYourself') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 248) (col_offset 21) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'filename') (ctx (Python.Store)) (lineno 249) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'os') (ctx (Python.Load)) (lineno 249) (col_offset 19) )) (attr 'path') (ctx (Python.Load)) (lineno 249) (col_offset 19) )) (attr 'join') (ctx (Python.Load)) (lineno 249) (col_offset 19) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 249) (col_offset 32) )) (attr 'basedir') (ctx (Python.Load)) (lineno 249) (col_offset 32) ) (Python.Str (s 'changes.pck') (lineno 249) (col_offset 46) )) (keywords ) (lineno 249) (col_offset 19) )) (lineno 249) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'tmpfilename') (ctx (Python.Store)) (lineno 250) (col_offset 8) )) (value (Python.BinOp (left (Python.Name (id 'filename') (ctx (Python.Load)) (lineno 250) (col_offset 22) )) (op (Python.Add)) (right (Python.Str (s '.tmp') (lineno 250) (col_offset 33) )) (lineno 250) (col_offset 22) )) (lineno 250) (col_offset 8) ) (Python.TryExcept (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'pickle') (ctx (Python.Load)) (lineno 252) (col_offset 12) )) (attr 'dump') (ctx (Python.Load)) (lineno 252) (col_offset 12) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 252) (col_offset 24) ) (Python.Call (func (Python.Name (id 'open') (ctx (Python.Load)) (lineno 252) (col_offset 30) )) (args (Python.Name (id 'tmpfilename') (ctx (Python.Load)) (lineno 252) (col_offset 35) ) (Python.Str (s 'wb') (lineno 252) (col_offset 48) )) (keywords ) (lineno 252) (col_offset 30) )) (keywords ) (lineno 252) (col_offset 12) )) (lineno 252) (col_offset 12) ) (Python.If (test (Python.Compare (left (Python.Attribute (value (Python.Name (id 'sys') (ctx (Python.Load)) (lineno 253) (col_offset 15) )) (attr 'platform') (ctx (Python.Load)) (lineno 253) (col_offset 15) )) (ops (Python.Eq)) (comparators (Python.Str (s 'win32') (lineno 253) (col_offset 31) )) (lineno 253) (col_offset 15) )) (body (Python.If (test (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'os') (ctx (Python.Load)) (lineno 255) (col_offset 19) )) (attr 'path') (ctx (Python.Load)) (lineno 255) (col_offset 19) )) (attr 'exists') (ctx (Python.Load)) (lineno 255) (col_offset 19) )) (args (Python.Name (id 'filename') (ctx (Python.Load)) (lineno 255) (col_offset 34) )) (keywords ) (lineno 255) (col_offset 19) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'os') (ctx (Python.Load)) (lineno 256) (col_offset 20) )) (attr 'unlink') (ctx (Python.Load)) (lineno 256) (col_offset 20) )) (args (Python.Name (id 'filename') (ctx (Python.Load)) (lineno 256) (col_offset 30) )) (keywords ) (lineno 256) (col_offset 20) )) (lineno 256) (col_offset 20) )) (orelse ) (lineno 255) (col_offset 16) )) (orelse ) (lineno 253) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'os') (ctx (Python.Load)) (lineno 257) (col_offset 12) )) (attr 'rename') (ctx (Python.Load)) (lineno 257) (col_offset 12) )) (args (Python.Name (id 'tmpfilename') (ctx (Python.Load)) (lineno 257) (col_offset 22) ) (Python.Name (id 'filename') (ctx (Python.Load)) (lineno 257) (col_offset 35) )) (keywords ) (lineno 257) (col_offset 12) )) (lineno 257) (col_offset 12) )) (handlers (Python.Excepthandler (type (Python.Name (id 'Exception') (ctx (Python.Load)) (lineno 258) (col_offset 15) )) (name (Python.Name (id 'e') (ctx (Python.Store)) (lineno 258) (col_offset 26) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 259) (col_offset 12) )) (attr 'msg') (ctx (Python.Load)) (lineno 259) (col_offset 12) )) (args (Python.Str (s 'unable to save changes') (lineno 259) (col_offset 20) )) (keywords ) (lineno 259) (col_offset 12) )) (lineno 259) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 260) (col_offset 12) )) (attr 'err') (ctx (Python.Load)) (lineno 260) (col_offset 12) )) (args ) (keywords ) (lineno 260) (col_offset 12) )) (lineno 260) (col_offset 12) )) (lineno 258) (col_offset 8) )) (orelse ) (lineno 251) (col_offset 8) )) (decorators ) (lineno 248) (col_offset 4) ) (Python.FunctionDef (name 'stopService') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 262) (col_offset 20) )) (defaults ) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 263) (col_offset 8) )) (attr 'saveYourself') (ctx (Python.Load)) (lineno 263) (col_offset 8) )) (args ) (keywords ) (lineno 263) (col_offset 8) )) (lineno 263) (col_offset 8) ) (Python.Return (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'service') (ctx (Python.Load)) (lineno 264) (col_offset 15) )) (attr 'MultiService') (ctx (Python.Load)) (lineno 264) (col_offset 15) )) (attr 'stopService') (ctx (Python.Load)) (lineno 264) (col_offset 15) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 264) (col_offset 48) )) (keywords ) (lineno 264) (col_offset 15) )) (lineno 264) (col_offset 8) )) (decorators ) (lineno 262) (col_offset 4) )) (lineno 139) (col_offset 0) )) (name 'changes') ) (Python.Module (body (Python.Import (names (Python.Alias (name 'fcntl') ) (Python.Alias (name 'signal') ) (Python.Alias (name 'os') )) (lineno 3) (col_offset 0) ) (Python.ClassDef (name 'DNotify_Handler') (bases ) (body (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 6) (col_offset 17) )) (defaults ) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 7) (col_offset 8) )) (attr 'watchers') (ctx (Python.Store)) (lineno 7) (col_offset 8) )) (value (Python.Dict (keys ) (values ) (lineno 7) (col_offset 24) )) (lineno 7) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 8) (col_offset 8) )) (attr 'installed') (ctx (Python.Store)) (lineno 8) (col_offset 8) )) (value (Python.Num (n 0) (lineno 8) (col_offset 25) )) (lineno 8) (col_offset 8) )) (decorators ) (lineno 6) (col_offset 4) ) (Python.FunctionDef (name 'install') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 9) (col_offset 16) )) (defaults ) )) (body (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 10) (col_offset 11) )) (attr 'installed') (ctx (Python.Load)) (lineno 10) (col_offset 11) )) (body (Python.Return (lineno 11) (col_offset 12) )) (orelse ) (lineno 10) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'signal') (ctx (Python.Load)) (lineno 12) (col_offset 8) )) (attr 'signal') (ctx (Python.Load)) (lineno 12) (col_offset 8) )) (args (Python.Attribute (value (Python.Name (id 'signal') (ctx (Python.Load)) (lineno 12) (col_offset 22) )) (attr 'SIGIO') (ctx (Python.Load)) (lineno 12) (col_offset 22) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 12) (col_offset 36) )) (attr 'fire') (ctx (Python.Load)) (lineno 12) (col_offset 36) )) (keywords ) (lineno 12) (col_offset 8) )) (lineno 12) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 13) (col_offset 8) )) (attr 'installed') (ctx (Python.Store)) (lineno 13) (col_offset 8) )) (value (Python.Num (n 1) (lineno 13) (col_offset 25) )) (lineno 13) (col_offset 8) )) (decorators ) (lineno 9) (col_offset 4) ) (Python.FunctionDef (name 'uninstall') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 14) (col_offset 18) )) (defaults ) )) (body (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 15) (col_offset 15) )) (attr 'installed') (ctx (Python.Load)) (lineno 15) (col_offset 15) )) (lineno 15) (col_offset 11) )) (body (Python.Return (lineno 16) (col_offset 12) )) (orelse ) (lineno 15) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'signal') (ctx (Python.Load)) (lineno 17) (col_offset 8) )) (attr 'signal') (ctx (Python.Load)) (lineno 17) (col_offset 8) )) (args (Python.Attribute (value (Python.Name (id 'signal') (ctx (Python.Load)) (lineno 17) (col_offset 22) )) (attr 'SIGIO') (ctx (Python.Load)) (lineno 17) (col_offset 22) ) (Python.Attribute (value (Python.Name (id 'signal') (ctx (Python.Load)) (lineno 17) (col_offset 36) )) (attr 'SIG_DFL') (ctx (Python.Load)) (lineno 17) (col_offset 36) )) (keywords ) (lineno 17) (col_offset 8) )) (lineno 17) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 18) (col_offset 8) )) (attr 'installed') (ctx (Python.Store)) (lineno 18) (col_offset 8) )) (value (Python.Num (n 0) (lineno 18) (col_offset 25) )) (lineno 18) (col_offset 8) )) (decorators ) (lineno 14) (col_offset 4) ) (Python.FunctionDef (name 'add') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 19) (col_offset 12) ) (Python.Name (id 'watcher') (ctx (Python.Param)) (lineno 19) (col_offset 18) )) (defaults ) )) (body (Python.Assign (targets (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 20) (col_offset 8) )) (attr 'watchers') (ctx (Python.Load)) (lineno 20) (col_offset 8) )) (slice (Python.Index (value (Python.Attribute (value (Python.Name (id 'watcher') (ctx (Python.Load)) (lineno 20) (col_offset 22) )) (attr 'fd') (ctx (Python.Load)) (lineno 20) (col_offset 22) )) )) (ctx (Python.Store)) (lineno 20) (col_offset 8) )) (value (Python.Name (id 'watcher') (ctx (Python.Load)) (lineno 20) (col_offset 36) )) (lineno 20) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 21) (col_offset 8) )) (attr 'install') (ctx (Python.Load)) (lineno 21) (col_offset 8) )) (args ) (keywords ) (lineno 21) (col_offset 8) )) (lineno 21) (col_offset 8) )) (decorators ) (lineno 19) (col_offset 4) ) (Python.FunctionDef (name 'remove') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 22) (col_offset 15) ) (Python.Name (id 'watcher') (ctx (Python.Param)) (lineno 22) (col_offset 21) )) (defaults ) )) (body (Python.If (test (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 23) (col_offset 11) )) (attr 'watchers') (ctx (Python.Load)) (lineno 23) (col_offset 11) )) (attr 'has_key') (ctx (Python.Load)) (lineno 23) (col_offset 11) )) (args (Python.Attribute (value (Python.Name (id 'watcher') (ctx (Python.Load)) (lineno 23) (col_offset 33) )) (attr 'fd') (ctx (Python.Load)) (lineno 23) (col_offset 33) )) (keywords ) (lineno 23) (col_offset 11) )) (body (Python.Delete (targets (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 24) (col_offset 16) )) (attr 'watchers') (ctx (Python.Load)) (lineno 24) (col_offset 16) )) (slice (Python.Index (value (Python.Attribute (value (Python.Name (id 'watcher') (ctx (Python.Load)) (lineno 24) (col_offset 30) )) (attr 'fd') (ctx (Python.Load)) (lineno 24) (col_offset 30) )) )) (ctx (Python.Del)) (lineno 24) (col_offset 16) )) (lineno 24) (col_offset 12) ) (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 25) (col_offset 19) )) (attr 'watchers') (ctx (Python.Load)) (lineno 25) (col_offset 19) )) (lineno 25) (col_offset 15) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 26) (col_offset 16) )) (attr 'uninstall') (ctx (Python.Load)) (lineno 26) (col_offset 16) )) (args ) (keywords ) (lineno 26) (col_offset 16) )) (lineno 26) (col_offset 16) )) (orelse ) (lineno 25) (col_offset 12) )) (orelse ) (lineno 23) (col_offset 8) )) (decorators ) (lineno 22) (col_offset 4) ) (Python.FunctionDef (name 'fire') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 27) (col_offset 13) ) (Python.Name (id 'signum') (ctx (Python.Param)) (lineno 27) (col_offset 19) ) (Python.Name (id 'frame') (ctx (Python.Param)) (lineno 27) (col_offset 27) )) (defaults ) )) (body (Python.For (target (Python.Name (id 'watcher') (ctx (Python.Store)) (lineno 30) (col_offset 12) )) (iter (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 30) (col_offset 23) )) (attr 'watchers') (ctx (Python.Load)) (lineno 30) (col_offset 23) )) (attr 'values') (ctx (Python.Load)) (lineno 30) (col_offset 23) )) (args ) (keywords ) (lineno 30) (col_offset 23) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'watcher') (ctx (Python.Load)) (lineno 31) (col_offset 12) )) (attr 'callback') (ctx (Python.Load)) (lineno 31) (col_offset 12) )) (args ) (keywords ) (lineno 31) (col_offset 12) )) (lineno 31) (col_offset 12) )) (orelse ) (lineno 30) (col_offset 8) )) (decorators ) (lineno 27) (col_offset 4) )) (lineno 5) (col_offset 0) ) (Python.ClassDef (name 'DNotify') (bases ) (body (Python.Assign (targets (Python.Name (id 'DN_ACCESS') (ctx (Python.Store)) (lineno 34) (col_offset 4) )) (value (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 34) (col_offset 16) )) (attr 'DN_ACCESS') (ctx (Python.Load)) (lineno 34) (col_offset 16) )) (lineno 34) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'DN_MODIFY') (ctx (Python.Store)) (lineno 35) (col_offset 4) )) (value (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 35) (col_offset 16) )) (attr 'DN_MODIFY') (ctx (Python.Load)) (lineno 35) (col_offset 16) )) (lineno 35) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'DN_CREATE') (ctx (Python.Store)) (lineno 36) (col_offset 4) )) (value (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 36) (col_offset 16) )) (attr 'DN_CREATE') (ctx (Python.Load)) (lineno 36) (col_offset 16) )) (lineno 36) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'DN_DELETE') (ctx (Python.Store)) (lineno 37) (col_offset 4) )) (value (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 37) (col_offset 16) )) (attr 'DN_DELETE') (ctx (Python.Load)) (lineno 37) (col_offset 16) )) (lineno 37) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'DN_RENAME') (ctx (Python.Store)) (lineno 38) (col_offset 4) )) (value (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 38) (col_offset 16) )) (attr 'DN_RENAME') (ctx (Python.Load)) (lineno 38) (col_offset 16) )) (lineno 38) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'DN_ATTRIB') (ctx (Python.Store)) (lineno 39) (col_offset 4) )) (value (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 39) (col_offset 16) )) (attr 'DN_ATTRIB') (ctx (Python.Load)) (lineno 39) (col_offset 16) )) (lineno 39) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'handler') (ctx (Python.Store)) (lineno 41) (col_offset 4) )) (value (Python.List (elts (Python.Name (id 'None') (ctx (Python.Load)) (lineno 41) (col_offset 15) )) (ctx (Python.Load)) (lineno 41) (col_offset 14) )) (lineno 41) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 43) (col_offset 17) ) (Python.Name (id 'dirname') (ctx (Python.Param)) (lineno 43) (col_offset 23) ) (Python.Name (id 'callback') (ctx (Python.Param)) (lineno 43) (col_offset 32) ) (Python.Name (id 'flags') (ctx (Python.Param)) (lineno 44) (col_offset 17) )) (defaults (Python.Name (id 'None') (ctx (Python.Load)) (lineno 43) (col_offset 41) ) (Python.List (elts (Python.Name (id 'DN_MODIFY') (ctx (Python.Load)) (lineno 44) (col_offset 24) ) (Python.Name (id 'DN_CREATE') (ctx (Python.Load)) (lineno 44) (col_offset 34) ) (Python.Name (id 'DN_DELETE') (ctx (Python.Load)) (lineno 44) (col_offset 44) ) (Python.Name (id 'DN_RENAME') (ctx (Python.Load)) (lineno 44) (col_offset 54) )) (ctx (Python.Load)) (lineno 44) (col_offset 23) )) )) (body (Python.Expr (value (Python.Str (s 'This object watches a directory for changes. The .callback attribute should be set to a function to be run every time something happens to it. Be aware that it will be called more times than you expect.') (lineno 49) (col_offset -1) )) (lineno 49) (col_offset -1) ) (Python.If (test (Python.Name (id 'callback') (ctx (Python.Load)) (lineno 51) (col_offset 11) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 52) (col_offset 12) )) (attr 'callback') (ctx (Python.Store)) (lineno 52) (col_offset 12) )) (value (Python.Name (id 'callback') (ctx (Python.Load)) (lineno 52) (col_offset 28) )) (lineno 52) (col_offset 12) )) (orelse (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 54) (col_offset 12) )) (attr 'callback') (ctx (Python.Store)) (lineno 54) (col_offset 12) )) (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 54) (col_offset 28) )) (attr 'fire') (ctx (Python.Load)) (lineno 54) (col_offset 28) )) (lineno 54) (col_offset 12) )) (lineno 51) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 55) (col_offset 8) )) (attr 'dirname') (ctx (Python.Store)) (lineno 55) (col_offset 8) )) (value (Python.Name (id 'dirname') (ctx (Python.Load)) (lineno 55) (col_offset 23) )) (lineno 55) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 56) (col_offset 8) )) (attr 'flags') (ctx (Python.Store)) (lineno 56) (col_offset 8) )) (value (Python.BinOp (left (Python.Call (func (Python.Name (id 'reduce') (ctx (Python.Load)) (lineno 56) (col_offset 21) )) (args (Python.Lambda (args (Python.Arguments (args (Python.Name (id 'x') (ctx (Python.Param)) (lineno 56) (col_offset 35) ) (Python.Name (id 'y') (ctx (Python.Param)) (lineno 56) (col_offset 38) )) (defaults ) )) (body (Python.BinOp (left (Python.Name (id 'x') (ctx (Python.Load)) (lineno 56) (col_offset 41) )) (op (Python.BitOr)) (right (Python.Name (id 'y') (ctx (Python.Load)) (lineno 56) (col_offset 45) )) (lineno 56) (col_offset 41) )) (lineno 56) (col_offset 28) ) (Python.Name (id 'flags') (ctx (Python.Load)) (lineno 56) (col_offset 48) )) (keywords ) (lineno 56) (col_offset 21) )) (op (Python.BitOr)) (right (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 56) (col_offset 57) )) (attr 'DN_MULTISHOT') (ctx (Python.Load)) (lineno 56) (col_offset 57) )) (lineno 56) (col_offset 21) )) (lineno 56) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 57) (col_offset 8) )) (attr 'fd') (ctx (Python.Store)) (lineno 57) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'os') (ctx (Python.Load)) (lineno 57) (col_offset 18) )) (attr 'open') (ctx (Python.Load)) (lineno 57) (col_offset 18) )) (args (Python.Name (id 'dirname') (ctx (Python.Load)) (lineno 57) (col_offset 26) ) (Python.Attribute (value (Python.Name (id 'os') (ctx (Python.Load)) (lineno 57) (col_offset 35) )) (attr 'O_RDONLY') (ctx (Python.Load)) (lineno 57) (col_offset 35) )) (keywords ) (lineno 57) (col_offset 18) )) (lineno 57) (col_offset 8) ) (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 62) (col_offset 15) )) (attr 'handler') (ctx (Python.Load)) (lineno 62) (col_offset 15) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 62) (col_offset 28) )) )) (ctx (Python.Load)) (lineno 62) (col_offset 15) )) (lineno 62) (col_offset 11) )) (body (Python.Assign (targets (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 63) (col_offset 12) )) (attr 'handler') (ctx (Python.Load)) (lineno 63) (col_offset 12) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 63) (col_offset 25) )) )) (ctx (Python.Store)) (lineno 63) (col_offset 12) )) (value (Python.Call (func (Python.Name (id 'DNotify_Handler') (ctx (Python.Load)) (lineno 63) (col_offset 30) )) (args ) (keywords ) (lineno 63) (col_offset 30) )) (lineno 63) (col_offset 12) )) (orelse ) (lineno 62) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 64) (col_offset 8) )) (attr 'handler') (ctx (Python.Load)) (lineno 64) (col_offset 8) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 64) (col_offset 21) )) )) (ctx (Python.Load)) (lineno 64) (col_offset 8) )) (attr 'add') (ctx (Python.Load)) (lineno 64) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 64) (col_offset 28) )) (keywords ) (lineno 64) (col_offset 8) )) (lineno 64) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 65) (col_offset 8) )) (attr 'fcntl') (ctx (Python.Load)) (lineno 65) (col_offset 8) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 65) (col_offset 20) )) (attr 'fd') (ctx (Python.Load)) (lineno 65) (col_offset 20) ) (Python.Attribute (value (Python.Name (id 'fcntl') (ctx (Python.Load)) (lineno 65) (col_offset 29) )) (attr 'F_NOTIFY') (ctx (Python.Load)) (lineno 65) (col_offset 29) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 65) (col_offset 45) )) (attr 'flags') (ctx (Python.Load)) (lineno 65) (col_offset 45) )) (keywords ) (lineno 65) (col_offset 8) )) (lineno 65) (col_offset 8) )) (decorators ) (lineno 43) (col_offset 4) ) (Python.FunctionDef (name 'remove') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 66) (col_offset 15) )) (defaults ) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Subscript (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 67) (col_offset 8) )) (attr 'handler') (ctx (Python.Load)) (lineno 67) (col_offset 8) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 67) (col_offset 21) )) )) (ctx (Python.Load)) (lineno 67) (col_offset 8) )) (attr 'remove') (ctx (Python.Load)) (lineno 67) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 67) (col_offset 31) )) (keywords ) (lineno 67) (col_offset 8) )) (lineno 67) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'os') (ctx (Python.Load)) (lineno 68) (col_offset 8) )) (attr 'close') (ctx (Python.Load)) (lineno 68) (col_offset 8) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 68) (col_offset 17) )) (attr 'fd') (ctx (Python.Load)) (lineno 68) (col_offset 17) )) (keywords ) (lineno 68) (col_offset 8) )) (lineno 68) (col_offset 8) )) (decorators ) (lineno 66) (col_offset 4) ) (Python.FunctionDef (name 'fire') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 69) (col_offset 13) )) (defaults ) )) (body (Python.Print (values (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 70) (col_offset 14) )) (attr 'dirname') (ctx (Python.Load)) (lineno 70) (col_offset 14) ) (Python.Str (s 'changed!') (lineno 70) (col_offset 28) )) (nl true) (lineno 70) (col_offset 8) )) (decorators ) (lineno 69) (col_offset 4) )) (lineno 33) (col_offset 0) ) (Python.FunctionDef (name 'test_dnotify1') (args (Python.Arguments (args ) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'd') (ctx (Python.Store)) (lineno 73) (col_offset 4) )) (value (Python.Call (func (Python.Name (id 'DNotify') (ctx (Python.Load)) (lineno 73) (col_offset 8) )) (args (Python.Str (s '.') (lineno 73) (col_offset 16) )) (keywords ) (lineno 73) (col_offset 8) )) (lineno 73) (col_offset 4) ) (Python.While (test (Python.Num (n 1) (lineno 74) (col_offset 10) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'signal') (ctx (Python.Load)) (lineno 75) (col_offset 8) )) (attr 'pause') (ctx (Python.Load)) (lineno 75) (col_offset 8) )) (args ) (keywords ) (lineno 75) (col_offset 8) )) (lineno 75) (col_offset 8) )) (orelse ) (lineno 74) (col_offset 4) )) (decorators ) (lineno 72) (col_offset 0) ) (Python.FunctionDef (name 'test_dnotify2') (args (Python.Arguments (args ) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'count') (ctx (Python.Store)) (lineno 82) (col_offset 4) )) (value (Python.List (elts (Python.Num (n 0) (lineno 82) (col_offset 13) )) (ctx (Python.Load)) (lineno 82) (col_offset 12) )) (lineno 82) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'd1') (ctx (Python.Store)) (lineno 83) (col_offset 4) )) (value (Python.Call (func (Python.Name (id 'DNotify') (ctx (Python.Load)) (lineno 83) (col_offset 9) )) (args (Python.Str (s '.') (lineno 83) (col_offset 17) )) (keywords ) (lineno 83) (col_offset 9) )) (lineno 83) (col_offset 4) ) (Python.FunctionDef (name 'fire1') (args (Python.Arguments (args (Python.Name (id 'count') (ctx (Python.Param)) (lineno 84) (col_offset 14) ) (Python.Name (id 'd1') (ctx (Python.Param)) (lineno 84) (col_offset 27) )) (defaults (Python.Name (id 'count') (ctx (Python.Load)) (lineno 84) (col_offset 20) ) (Python.Name (id 'd1') (ctx (Python.Load)) (lineno 84) (col_offset 30) )) )) (body (Python.Print (values (Python.Str (s './ changed!') (lineno 85) (col_offset 14) ) (Python.Subscript (value (Python.Name (id 'count') (ctx (Python.Load)) (lineno 85) (col_offset 29) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 85) (col_offset 35) )) )) (ctx (Python.Load)) (lineno 85) (col_offset 29) )) (nl true) (lineno 85) (col_offset 8) ) (Python.AugAssign (target (Python.Subscript (value (Python.Name (id 'count') (ctx (Python.Load)) (lineno 86) (col_offset 8) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 86) (col_offset 14) )) )) (ctx (Python.Store)) (lineno 86) (col_offset 8) )) (op (Python.Add)) (value (Python.Num (n 1) (lineno 86) (col_offset 20) )) (lineno 86) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Subscript (value (Python.Name (id 'count') (ctx (Python.Load)) (lineno 87) (col_offset 11) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 87) (col_offset 17) )) )) (ctx (Python.Load)) (lineno 87) (col_offset 11) )) (ops (Python.Gt)) (comparators (Python.Num (n 5) (lineno 87) (col_offset 22) )) (lineno 87) (col_offset 11) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'd1') (ctx (Python.Load)) (lineno 88) (col_offset 12) )) (attr 'remove') (ctx (Python.Load)) (lineno 88) (col_offset 12) )) (args ) (keywords ) (lineno 88) (col_offset 12) )) (lineno 88) (col_offset 12) ) (Python.Delete (targets (Python.Name (id 'd1') (ctx (Python.Del)) (lineno 89) (col_offset 16) )) (lineno 89) (col_offset 12) )) (orelse ) (lineno 87) (col_offset 8) )) (decorators ) (lineno 84) (col_offset 4) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'd1') (ctx (Python.Load)) (lineno 92) (col_offset 4) )) (attr 'callback') (ctx (Python.Store)) (lineno 92) (col_offset 4) )) (value (Python.Name (id 'fire1') (ctx (Python.Load)) (lineno 92) (col_offset 18) )) (lineno 92) (col_offset 4) ) (Python.FunctionDef (name 'fire2') (args (Python.Arguments (args ) (defaults ) )) (body (Python.Print (values (Python.Str (s 'foo/ changed!') (lineno 93) (col_offset 23) )) (nl true) (lineno 93) (col_offset 17) )) (decorators ) (lineno 93) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'd2') (ctx (Python.Store)) (lineno 94) (col_offset 4) )) (value (Python.Call (func (Python.Name (id 'DNotify') (ctx (Python.Load)) (lineno 94) (col_offset 9) )) (args (Python.Str (s 'foo') (lineno 94) (col_offset 17) ) (Python.Name (id 'fire2') (ctx (Python.Load)) (lineno 94) (col_offset 24) )) (keywords ) (lineno 94) (col_offset 9) )) (lineno 94) (col_offset 4) ) (Python.While (test (Python.Num (n 1) (lineno 95) (col_offset 10) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'signal') (ctx (Python.Load)) (lineno 96) (col_offset 8) )) (attr 'pause') (ctx (Python.Load)) (lineno 96) (col_offset 8) )) (args ) (keywords ) (lineno 96) (col_offset 8) )) (lineno 96) (col_offset 8) )) (orelse ) (lineno 95) (col_offset 4) )) (decorators ) (lineno 77) (col_offset 0) ) (Python.If (test (Python.Compare (left (Python.Name (id '__name__') (ctx (Python.Load)) (lineno 99) (col_offset 3) )) (ops (Python.Eq)) (comparators (Python.Str (s '__main__') (lineno 99) (col_offset 15) )) (lineno 99) (col_offset 3) )) (body (Python.Expr (value (Python.Call (func (Python.Name (id 'test_dnotify2') (ctx (Python.Load)) (lineno 100) (col_offset 4) )) (args ) (keywords ) (lineno 100) (col_offset 4) )) (lineno 100) (col_offset 4) )) (orelse ) (lineno 99) (col_offset 0) )) (name 'dnotify') ) (Python.Module (body (Python.Import (names (Python.Alias (name 'os.path') )) (lineno 3) (col_offset 0) ) (Python.ImportFrom (module 'twisted.cred') (names (Python.Alias (name 'credentials') )) (level 0) (lineno 5) (col_offset 0) ) (Python.ImportFrom (module 'twisted.spread') (names (Python.Alias (name 'pb') )) (level 0) (lineno 6) (col_offset 0) ) (Python.ImportFrom (module 'twisted.application.internet') (names (Python.Alias (name 'TCPClient') )) (level 0) (lineno 7) (col_offset 0) ) (Python.ImportFrom (module 'twisted.python') (names (Python.Alias (name 'log') )) (level 0) (lineno 8) (col_offset 0) ) (Python.Import (names (Python.Alias (name 'cvstoys.common') )) (lineno 10) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.twcompat') (names (Python.Alias (name 'implements') )) (level 0) (lineno 12) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.interfaces') (names (Python.Alias (name 'IChangeSource') )) (level 0) (lineno 13) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.pbutil') (names (Python.Alias (name 'ReconnectingPBClientFactory') )) (level 0) (lineno 14) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.changes.changes') (names (Python.Alias (name 'Change') )) (level 0) (lineno 15) (col_offset 0) ) (Python.ImportFrom (module 'buildbot') (names (Python.Alias (name 'util') )) (level 0) (lineno 16) (col_offset 0) ) (Python.ClassDef (name 'FreshCVSListener') (bases (Python.Attribute (value (Python.Name (id 'pb') (ctx (Python.Load)) (lineno 18) (col_offset 23) )) (attr 'Referenceable') (ctx (Python.Load)) (lineno 18) (col_offset 23) )) (body (Python.FunctionDef (name 'remote_notify') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 19) (col_offset 22) ) (Python.Name (id 'root') (ctx (Python.Param)) (lineno 19) (col_offset 28) ) (Python.Name (id 'files') (ctx (Python.Param)) (lineno 19) (col_offset 34) ) (Python.Name (id 'message') (ctx (Python.Param)) (lineno 19) (col_offset 41) ) (Python.Name (id 'user') (ctx (Python.Param)) (lineno 19) (col_offset 50) )) (defaults ) )) (body (Python.TryExcept (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 21) (col_offset 12) )) (attr 'source') (ctx (Python.Load)) (lineno 21) (col_offset 12) )) (attr 'notify') (ctx (Python.Load)) (lineno 21) (col_offset 12) )) (args (Python.Name (id 'root') (ctx (Python.Load)) (lineno 21) (col_offset 31) ) (Python.Name (id 'files') (ctx (Python.Load)) (lineno 21) (col_offset 37) ) (Python.Name (id 'message') (ctx (Python.Load)) (lineno 21) (col_offset 44) ) (Python.Name (id 'user') (ctx (Python.Load)) (lineno 21) (col_offset 53) )) (keywords ) (lineno 21) (col_offset 12) )) (lineno 21) (col_offset 12) )) (handlers (Python.Excepthandler (type (Python.Name (id 'Exception') (ctx (Python.Load)) (lineno 22) (col_offset 15) )) (name (Python.Name (id 'e') (ctx (Python.Store)) (lineno 22) (col_offset 26) )) (body (Python.Print (values (Python.Str (s 'notify failed') (lineno 23) (col_offset 18) )) (nl true) (lineno 23) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 24) (col_offset 12) )) (attr 'err') (ctx (Python.Load)) (lineno 24) (col_offset 12) )) (args ) (keywords ) (lineno 24) (col_offset 12) )) (lineno 24) (col_offset 12) )) (lineno 22) (col_offset 8) )) (orelse ) (lineno 20) (col_offset 8) )) (decorators ) (lineno 19) (col_offset 4) ) (Python.FunctionDef (name 'remote_goodbye') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 26) (col_offset 23) ) (Python.Name (id 'message') (ctx (Python.Param)) (lineno 26) (col_offset 29) )) (defaults ) )) (body (Python.Pass)) (decorators ) (lineno 26) (col_offset 4) )) (lineno 18) (col_offset 0) ) (Python.ClassDef (name 'FreshCVSConnectionFactory') (bases (Python.Name (id 'ReconnectingPBClientFactory') (ctx (Python.Load)) (lineno 29) (col_offset 32) )) (body (Python.FunctionDef (name 'gotPerspective') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 31) (col_offset 23) ) (Python.Name (id 'perspective') (ctx (Python.Param)) (lineno 31) (col_offset 29) )) (defaults ) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 32) (col_offset 8) )) (attr 'msg') (ctx (Python.Load)) (lineno 32) (col_offset 8) )) (args (Python.Str (s 'connected to FreshCVS daemon') (lineno 32) (col_offset 16) )) (keywords ) (lineno 32) (col_offset 8) )) (lineno 32) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'ReconnectingPBClientFactory') (ctx (Python.Load)) (lineno 33) (col_offset 8) )) (attr 'gotPerspective') (ctx (Python.Load)) (lineno 33) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 33) (col_offset 51) ) (Python.Name (id 'perspective') (ctx (Python.Load)) (lineno 33) (col_offset 57) )) (keywords ) (lineno 33) (col_offset 8) )) (lineno 33) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 34) (col_offset 8) )) (attr 'source') (ctx (Python.Load)) (lineno 34) (col_offset 8) )) (attr 'connected') (ctx (Python.Store)) (lineno 34) (col_offset 8) )) (value (Python.Name (id 'True') (ctx (Python.Load)) (lineno 34) (col_offset 32) )) (lineno 34) (col_offset 8) ) (Python.Return (lineno 39) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 40) (col_offset 11) )) (attr 'source') (ctx (Python.Load)) (lineno 40) (col_offset 11) )) (attr 'prefix') (ctx (Python.Load)) (lineno 40) (col_offset 11) )) (ops (Python.IsNot)) (comparators (Python.Name (id 'None') (ctx (Python.Load)) (lineno 40) (col_offset 37) )) (lineno 40) (col_offset 11) )) (body (Python.Assign (targets (Python.Name (id 'pathfilter') (ctx (Python.Store)) (lineno 41) (col_offset 12) )) (value (Python.BinOp (left (Python.Str (s '^%s') (lineno 41) (col_offset 25) )) (op (Python.Mod)) (right (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 41) (col_offset 33) )) (attr 'source') (ctx (Python.Load)) (lineno 41) (col_offset 33) )) (attr 'prefix') (ctx (Python.Load)) (lineno 41) (col_offset 33) )) (lineno 41) (col_offset 25) )) (lineno 41) (col_offset 12) ) (Python.Assign (targets (Python.Name (id 'd') (ctx (Python.Store)) (lineno 42) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'perspective') (ctx (Python.Load)) (lineno 42) (col_offset 16) )) (attr 'callRemote') (ctx (Python.Load)) (lineno 42) (col_offset 16) )) (args (Python.Str (s 'setFilter') (lineno 42) (col_offset 39) ) (Python.Name (id 'None') (ctx (Python.Load)) (lineno 43) (col_offset 39) ) (Python.Name (id 'pathfilter') (ctx (Python.Load)) (lineno 43) (col_offset 45) ) (Python.Name (id 'None') (ctx (Python.Load)) (lineno 43) (col_offset 57) )) (keywords ) (lineno 42) (col_offset 16) )) (lineno 42) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'd') (ctx (Python.Load)) (lineno 46) (col_offset 12) )) (attr 'addErrback') (ctx (Python.Load)) (lineno 46) (col_offset 12) )) (args (Python.Lambda (args (Python.Arguments (args (Python.Name (id 'f') (ctx (Python.Param)) (lineno 46) (col_offset 32) )) (defaults ) )) (body (Python.Name (id 'None') (ctx (Python.Load)) (lineno 46) (col_offset 35) )) (lineno 46) (col_offset 25) )) (keywords ) (lineno 46) (col_offset 12) )) (lineno 46) (col_offset 12) )) (orelse ) (lineno 40) (col_offset 8) )) (decorators ) (lineno 31) (col_offset 4) ) (Python.FunctionDef (name 'clientConnectionLost') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 48) (col_offset 29) ) (Python.Name (id 'connector') (ctx (Python.Param)) (lineno 48) (col_offset 35) ) (Python.Name (id 'reason') (ctx (Python.Param)) (lineno 48) (col_offset 46) )) (defaults ) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'ReconnectingPBClientFactory') (ctx (Python.Load)) (lineno 49) (col_offset 8) )) (attr 'clientConnectionLost') (ctx (Python.Load)) (lineno 49) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 49) (col_offset 57) ) (Python.Name (id 'connector') (ctx (Python.Load)) (lineno 49) (col_offset 63) ) (Python.Name (id 'reason') (ctx (Python.Load)) (lineno 50) (col_offset 57) )) (keywords ) (lineno 49) (col_offset 8) )) (lineno 49) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 51) (col_offset 8) )) (attr 'source') (ctx (Python.Load)) (lineno 51) (col_offset 8) )) (attr 'connected') (ctx (Python.Store)) (lineno 51) (col_offset 8) )) (value (Python.Name (id 'False') (ctx (Python.Load)) (lineno 51) (col_offset 32) )) (lineno 51) (col_offset 8) )) (decorators ) (lineno 48) (col_offset 4) )) (lineno 29) (col_offset 0) ) (Python.ClassDef (name 'FreshCVSSourceNewcred') (bases (Python.Name (id 'TCPClient') (ctx (Python.Load)) (lineno 53) (col_offset 28) ) (Python.Attribute (value (Python.Name (id 'util') (ctx (Python.Load)) (lineno 53) (col_offset 39) )) (attr 'ComparableMixin') (ctx (Python.Load)) (lineno 53) (col_offset 39) )) (body (Python.Expr (value (Python.Str (s 'This source will connect to a FreshCVS server associated with one or more CVS repositories. Each time a change is committed to a repository, the server will send us a message describing the change. This message is used to build a Change object, which is then submitted to the ChangeMaster. This class handles freshcvs daemons which use newcred. CVSToys-1.0.9 does not, later versions might. ') (lineno 62) (col_offset -1) )) (lineno 62) (col_offset -1) ) (Python.If (test (Python.Name (id 'implements') (ctx (Python.Load)) (lineno 64) (col_offset 7) )) (body (Python.Expr (value (Python.Call (func (Python.Name (id 'implements') (ctx (Python.Load)) (lineno 65) (col_offset 8) )) (args (Python.Name (id 'IChangeSource') (ctx (Python.Load)) (lineno 65) (col_offset 19) )) (keywords ) (lineno 65) (col_offset 8) )) (lineno 65) (col_offset 8) )) (orelse (Python.Assign (targets (Python.Name (id '__implements__') (ctx (Python.Store)) (lineno 67) (col_offset 8) )) (value (Python.Tuple (elts (Python.Name (id 'IChangeSource') (ctx (Python.Load)) (lineno 67) (col_offset 25) ) (Python.Attribute (value (Python.Name (id 'TCPClient') (ctx (Python.Load)) (lineno 67) (col_offset 40) )) (attr '__implements__') (ctx (Python.Load)) (lineno 67) (col_offset 40) )) (ctx (Python.Load)) (lineno 67) (col_offset 25) )) (lineno 67) (col_offset 8) )) (lineno 64) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'compare_attrs') (ctx (Python.Store)) (lineno 68) (col_offset 4) )) (value (Python.List (elts (Python.Str (s 'host') (lineno 68) (col_offset 21) ) (Python.Str (s 'port') (lineno 68) (col_offset 29) ) (Python.Str (s 'username') (lineno 68) (col_offset 37) ) (Python.Str (s 'password') (lineno 68) (col_offset 49) ) (Python.Str (s 'prefix') (lineno 68) (col_offset 61) )) (ctx (Python.Load)) (lineno 68) (col_offset 20) )) (lineno 68) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'changemaster') (ctx (Python.Store)) (lineno 70) (col_offset 4) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 70) (col_offset 19) )) (lineno 70) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'connected') (ctx (Python.Store)) (lineno 71) (col_offset 4) )) (value (Python.Name (id 'False') (ctx (Python.Load)) (lineno 71) (col_offset 16) )) (lineno 71) (col_offset 4) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 73) (col_offset 17) ) (Python.Name (id 'host') (ctx (Python.Param)) (lineno 73) (col_offset 23) ) (Python.Name (id 'port') (ctx (Python.Param)) (lineno 73) (col_offset 29) ) (Python.Name (id 'user') (ctx (Python.Param)) (lineno 73) (col_offset 35) ) (Python.Name (id 'passwd') (ctx (Python.Param)) (lineno 73) (col_offset 41) ) (Python.Name (id 'prefix') (ctx (Python.Param)) (lineno 73) (col_offset 49) )) (defaults (Python.Name (id 'None') (ctx (Python.Load)) (lineno 73) (col_offset 56) )) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 74) (col_offset 8) )) (attr 'host') (ctx (Python.Store)) (lineno 74) (col_offset 8) )) (value (Python.Name (id 'host') (ctx (Python.Load)) (lineno 74) (col_offset 20) )) (lineno 74) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 75) (col_offset 8) )) (attr 'port') (ctx (Python.Store)) (lineno 75) (col_offset 8) )) (value (Python.Name (id 'port') (ctx (Python.Load)) (lineno 75) (col_offset 20) )) (lineno 75) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 76) (col_offset 8) )) (attr 'username') (ctx (Python.Store)) (lineno 76) (col_offset 8) )) (value (Python.Name (id 'user') (ctx (Python.Load)) (lineno 76) (col_offset 24) )) (lineno 76) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 77) (col_offset 8) )) (attr 'password') (ctx (Python.Store)) (lineno 77) (col_offset 8) )) (value (Python.Name (id 'passwd') (ctx (Python.Load)) (lineno 77) (col_offset 24) )) (lineno 77) (col_offset 8) ) (Python.If (test (Python.BoolOp (op (Python.And)) (values (Python.Compare (left (Python.Name (id 'prefix') (ctx (Python.Load)) (lineno 78) (col_offset 11) )) (ops (Python.IsNot)) (comparators (Python.Name (id 'None') (ctx (Python.Load)) (lineno 78) (col_offset 25) )) (lineno 78) (col_offset 11) ) (Python.UnaryOp (op (Python.Not)) (operand (Python.Call (func (Python.Attribute (value (Python.Name (id 'prefix') (ctx (Python.Load)) (lineno 78) (col_offset 38) )) (attr 'endswith') (ctx (Python.Load)) (lineno 78) (col_offset 38) )) (args (Python.Str (s '/') (lineno 78) (col_offset 54) )) (keywords ) (lineno 78) (col_offset 38) )) (lineno 78) (col_offset 34) )) (lineno 78) (col_offset 11) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 79) (col_offset 12) )) (attr 'msg') (ctx (Python.Load)) (lineno 79) (col_offset 12) )) (args (Python.BinOp (left (Python.Str (s 'WARNING: prefix ''%s'' should probably end with a slash') (lineno 79) (col_offset 20) )) (op (Python.Mod)) (right (Python.Name (id 'prefix') (ctx (Python.Load)) (lineno 80) (col_offset 22) )) (lineno 79) (col_offset 20) )) (keywords ) (lineno 79) (col_offset 12) )) (lineno 79) (col_offset 12) )) (orelse ) (lineno 78) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 81) (col_offset 8) )) (attr 'prefix') (ctx (Python.Store)) (lineno 81) (col_offset 8) )) (value (Python.Name (id 'prefix') (ctx (Python.Load)) (lineno 81) (col_offset 22) )) (lineno 81) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 82) (col_offset 8) )) (attr 'listener') (ctx (Python.Store)) (lineno 82) (col_offset 8) ) (Python.Name (id 'l') (ctx (Python.Store)) (lineno 82) (col_offset 24) )) (value (Python.Call (func (Python.Name (id 'FreshCVSListener') (ctx (Python.Load)) (lineno 82) (col_offset 28) )) (args ) (keywords ) (lineno 82) (col_offset 28) )) (lineno 82) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'l') (ctx (Python.Load)) (lineno 83) (col_offset 8) )) (attr 'source') (ctx (Python.Store)) (lineno 83) (col_offset 8) )) (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 83) (col_offset 19) )) (lineno 83) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 84) (col_offset 8) )) (attr 'factory') (ctx (Python.Store)) (lineno 84) (col_offset 8) ) (Python.Name (id 'f') (ctx (Python.Store)) (lineno 84) (col_offset 23) )) (value (Python.Call (func (Python.Name (id 'FreshCVSConnectionFactory') (ctx (Python.Load)) (lineno 84) (col_offset 27) )) (args ) (keywords ) (lineno 84) (col_offset 27) )) (lineno 84) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'f') (ctx (Python.Load)) (lineno 85) (col_offset 8) )) (attr 'source') (ctx (Python.Store)) (lineno 85) (col_offset 8) )) (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 85) (col_offset 19) )) (lineno 85) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 86) (col_offset 8) )) (attr 'creds') (ctx (Python.Store)) (lineno 86) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'credentials') (ctx (Python.Load)) (lineno 86) (col_offset 21) )) (attr 'UsernamePassword') (ctx (Python.Load)) (lineno 86) (col_offset 21) )) (args (Python.Name (id 'user') (ctx (Python.Load)) (lineno 86) (col_offset 50) ) (Python.Name (id 'passwd') (ctx (Python.Load)) (lineno 86) (col_offset 56) )) (keywords ) (lineno 86) (col_offset 21) )) (lineno 86) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'f') (ctx (Python.Load)) (lineno 87) (col_offset 8) )) (attr 'startLogin') (ctx (Python.Load)) (lineno 87) (col_offset 8) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 87) (col_offset 21) )) (attr 'creds') (ctx (Python.Load)) (lineno 87) (col_offset 21) )) (keywords (Python.Keyword (arg 'client') (value (Python.Name (id 'l') (ctx (Python.Load)) (lineno 87) (col_offset 40) )) )) (lineno 87) (col_offset 8) )) (lineno 87) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'TCPClient') (ctx (Python.Load)) (lineno 88) (col_offset 8) )) (attr '__init__') (ctx (Python.Load)) (lineno 88) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 88) (col_offset 27) ) (Python.Name (id 'host') (ctx (Python.Load)) (lineno 88) (col_offset 33) ) (Python.Name (id 'port') (ctx (Python.Load)) (lineno 88) (col_offset 39) ) (Python.Name (id 'f') (ctx (Python.Load)) (lineno 88) (col_offset 45) )) (keywords ) (lineno 88) (col_offset 8) )) (lineno 88) (col_offset 8) )) (decorators ) (lineno 73) (col_offset 4) ) (Python.FunctionDef (name '__repr__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 90) (col_offset 17) )) (defaults ) )) (body (Python.Return (value (Python.BinOp (left (Python.Str (s '') (lineno 91) (col_offset 15) )) (op (Python.Mod)) (right (Python.Tuple (elts (Python.Tuple (elts (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 92) (col_offset 17) )) (attr 'host') (ctx (Python.Load)) (lineno 92) (col_offset 17) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 92) (col_offset 28) )) (attr 'port') (ctx (Python.Load)) (lineno 92) (col_offset 28) )) (ctx (Python.Load)) (lineno 92) (col_offset 17) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 92) (col_offset 40) )) (attr 'prefix') (ctx (Python.Load)) (lineno 92) (col_offset 40) )) (ctx (Python.Load)) (lineno 92) (col_offset 16) )) (lineno 91) (col_offset 15) )) (lineno 91) (col_offset 8) )) (decorators ) (lineno 90) (col_offset 4) ) (Python.FunctionDef (name 'describe') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 94) (col_offset 17) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'online') (ctx (Python.Store)) (lineno 95) (col_offset 8) )) (value (Python.Str (s '') (lineno 95) (col_offset 17) )) (lineno 95) (col_offset 8) ) (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 96) (col_offset 15) )) (attr 'connected') (ctx (Python.Load)) (lineno 96) (col_offset 15) )) (lineno 96) (col_offset 11) )) (body (Python.Assign (targets (Python.Name (id 'online') (ctx (Python.Store)) (lineno 97) (col_offset 12) )) (value (Python.Str (s ' [OFFLINE]') (lineno 97) (col_offset 21) )) (lineno 97) (col_offset 12) )) (orelse ) (lineno 96) (col_offset 8) ) (Python.Return (value (Python.BinOp (left (Python.Str (s 'freshcvs %s:%s%s') (lineno 98) (col_offset 15) )) (op (Python.Mod)) (right (Python.Tuple (elts (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 98) (col_offset 37) )) (attr 'host') (ctx (Python.Load)) (lineno 98) (col_offset 37) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 98) (col_offset 48) )) (attr 'port') (ctx (Python.Load)) (lineno 98) (col_offset 48) ) (Python.Name (id 'online') (ctx (Python.Load)) (lineno 98) (col_offset 59) )) (ctx (Python.Load)) (lineno 98) (col_offset 37) )) (lineno 98) (col_offset 15) )) (lineno 98) (col_offset 8) )) (decorators ) (lineno 94) (col_offset 4) ) (Python.FunctionDef (name 'notify') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 100) (col_offset 15) ) (Python.Name (id 'root') (ctx (Python.Param)) (lineno 100) (col_offset 21) ) (Python.Name (id 'files') (ctx (Python.Param)) (lineno 100) (col_offset 27) ) (Python.Name (id 'message') (ctx (Python.Param)) (lineno 100) (col_offset 34) ) (Python.Name (id 'user') (ctx (Python.Param)) (lineno 100) (col_offset 43) )) (defaults ) )) (body (Python.Assign (targets (Python.Name (id 'pathnames') (ctx (Python.Store)) (lineno 101) (col_offset 8) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 101) (col_offset 20) )) (lineno 101) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'isdir') (ctx (Python.Store)) (lineno 102) (col_offset 8) )) (value (Python.Num (n 0) (lineno 102) (col_offset 16) )) (lineno 102) (col_offset 8) ) (Python.For (target (Python.Name (id 'f') (ctx (Python.Store)) (lineno 103) (col_offset 12) )) (iter (Python.Name (id 'files') (ctx (Python.Load)) (lineno 103) (col_offset 17) )) (body (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Call (func (Python.Name (id 'isinstance') (ctx (Python.Load)) (lineno 104) (col_offset 19) )) (args (Python.Name (id 'f') (ctx (Python.Load)) (lineno 104) (col_offset 30) ) (Python.Tuple (elts (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'cvstoys') (ctx (Python.Load)) (lineno 104) (col_offset 34) )) (attr 'common') (ctx (Python.Load)) (lineno 104) (col_offset 34) )) (attr 'VersionedPatch') (ctx (Python.Load)) (lineno 104) (col_offset 34) ) (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'cvstoys') (ctx (Python.Load)) (lineno 105) (col_offset 34) )) (attr 'common') (ctx (Python.Load)) (lineno 105) (col_offset 34) )) (attr 'Directory') (ctx (Python.Load)) (lineno 105) (col_offset 34) )) (ctx (Python.Load)) (lineno 104) (col_offset 34) )) (keywords ) (lineno 104) (col_offset 19) )) (lineno 104) (col_offset 15) )) (body (Python.Continue)) (orelse ) (lineno 104) (col_offset 12) ) (Python.Assign (targets (Python.Tuple (elts (Python.Name (id 'pathname') (ctx (Python.Store)) (lineno 107) (col_offset 12) ) (Python.Name (id 'filename') (ctx (Python.Store)) (lineno 107) (col_offset 22) )) (ctx (Python.Store)) (lineno 107) (col_offset 12) )) (value (Python.Tuple (elts (Python.Attribute (value (Python.Name (id 'f') (ctx (Python.Load)) (lineno 107) (col_offset 33) )) (attr 'pathname') (ctx (Python.Load)) (lineno 107) (col_offset 33) ) (Python.Attribute (value (Python.Name (id 'f') (ctx (Python.Load)) (lineno 107) (col_offset 45) )) (attr 'filename') (ctx (Python.Load)) (lineno 107) (col_offset 45) )) (ctx (Python.Load)) (lineno 107) (col_offset 33) )) (lineno 107) (col_offset 12) ) (Python.If (test (Python.Call (func (Python.Name (id 'isinstance') (ctx (Python.Load)) (lineno 109) (col_offset 15) )) (args (Python.Name (id 'f') (ctx (Python.Load)) (lineno 109) (col_offset 26) ) (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'cvstoys') (ctx (Python.Load)) (lineno 109) (col_offset 29) )) (attr 'common') (ctx (Python.Load)) (lineno 109) (col_offset 29) )) (attr 'Directory') (ctx (Python.Load)) (lineno 109) (col_offset 29) )) (keywords ) (lineno 109) (col_offset 15) )) (body (Python.Assign (targets (Python.Name (id 'isdir') (ctx (Python.Store)) (lineno 110) (col_offset 16) )) (value (Python.Num (n 1) (lineno 110) (col_offset 24) )) (lineno 110) (col_offset 16) )) (orelse ) (lineno 109) (col_offset 12) ) (Python.Assign (targets (Python.Name (id 'path') (ctx (Python.Store)) (lineno 111) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'os') (ctx (Python.Load)) (lineno 111) (col_offset 19) )) (attr 'path') (ctx (Python.Load)) (lineno 111) (col_offset 19) )) (attr 'join') (ctx (Python.Load)) (lineno 111) (col_offset 19) )) (args (Python.Name (id 'pathname') (ctx (Python.Load)) (lineno 111) (col_offset 32) ) (Python.Name (id 'filename') (ctx (Python.Load)) (lineno 111) (col_offset 42) )) (keywords ) (lineno 111) (col_offset 19) )) (lineno 111) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'log') (ctx (Python.Load)) (lineno 112) (col_offset 12) )) (attr 'msg') (ctx (Python.Load)) (lineno 112) (col_offset 12) )) (args (Python.BinOp (left (Python.Str (s 'FreshCVS notify ''%s''') (lineno 112) (col_offset 20) )) (op (Python.Mod)) (right (Python.Name (id 'path') (ctx (Python.Load)) (lineno 112) (col_offset 45) )) (lineno 112) (col_offset 20) )) (keywords ) (lineno 112) (col_offset 12) )) (lineno 112) (col_offset 12) ) (Python.If (test (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 113) (col_offset 15) )) (attr 'prefix') (ctx (Python.Load)) (lineno 113) (col_offset 15) )) (body (Python.If (test (Python.Call (func (Python.Attribute (value (Python.Name (id 'path') (ctx (Python.Load)) (lineno 114) (col_offset 19) )) (attr 'startswith') (ctx (Python.Load)) (lineno 114) (col_offset 19) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 114) (col_offset 35) )) (attr 'prefix') (ctx (Python.Load)) (lineno 114) (col_offset 35) )) (keywords ) (lineno 114) (col_offset 19) )) (body (Python.Assign (targets (Python.Name (id 'path') (ctx (Python.Store)) (lineno 115) (col_offset 20) )) (value (Python.Subscript (value (Python.Name (id 'path') (ctx (Python.Load)) (lineno 115) (col_offset 27) )) (slice (Python.Slice (lower (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 115) (col_offset 32) )) (args (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 115) (col_offset 36) )) (attr 'prefix') (ctx (Python.Load)) (lineno 115) (col_offset 36) )) (keywords ) (lineno 115) (col_offset 32) )) )) (ctx (Python.Load)) (lineno 115) (col_offset 27) )) (lineno 115) (col_offset 20) )) (orelse (Python.Continue)) (lineno 114) (col_offset 16) )) (orelse ) (lineno 113) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'pathnames') (ctx (Python.Load)) (lineno 118) (col_offset 12) )) (attr 'append') (ctx (Python.Load)) (lineno 118) (col_offset 12) )) (args (Python.Name (id 'path') (ctx (Python.Load)) (lineno 118) (col_offset 29) )) (keywords ) (lineno 118) (col_offset 12) )) (lineno 118) (col_offset 12) )) (orelse ) (lineno 103) (col_offset 8) ) (Python.If (test (Python.Name (id 'pathnames') (ctx (Python.Load)) (lineno 119) (col_offset 11) )) (body (Python.Assign (targets (Python.Name (id 'when') (ctx (Python.Store)) (lineno 121) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'util') (ctx (Python.Load)) (lineno 121) (col_offset 17) )) (attr 'now') (ctx (Python.Load)) (lineno 121) (col_offset 17) )) (args ) (keywords ) (lineno 121) (col_offset 17) )) (lineno 121) (col_offset 12) ) (Python.Assign (targets (Python.Name (id 'c') (ctx (Python.Store)) (lineno 122) (col_offset 12) )) (value (Python.Call (func (Python.Name (id 'Change') (ctx (Python.Load)) (lineno 122) (col_offset 16) )) (args (Python.Name (id 'user') (ctx (Python.Load)) (lineno 122) (col_offset 23) ) (Python.Name (id 'pathnames') (ctx (Python.Load)) (lineno 122) (col_offset 29) ) (Python.Name (id 'message') (ctx (Python.Load)) (lineno 122) (col_offset 40) ) (Python.Name (id 'isdir') (ctx (Python.Load)) (lineno 122) (col_offset 49) )) (keywords (Python.Keyword (arg 'when') (value (Python.Name (id 'when') (ctx (Python.Load)) (lineno 122) (col_offset 61) )) )) (lineno 122) (col_offset 16) )) (lineno 122) (col_offset 12) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 123) (col_offset 12) )) (attr 'parent') (ctx (Python.Load)) (lineno 123) (col_offset 12) )) (attr 'addChange') (ctx (Python.Load)) (lineno 123) (col_offset 12) )) (args (Python.Name (id 'c') (ctx (Python.Load)) (lineno 123) (col_offset 34) )) (keywords ) (lineno 123) (col_offset 12) )) (lineno 123) (col_offset 12) )) (orelse ) (lineno 119) (col_offset 8) )) (decorators ) (lineno 100) (col_offset 4) )) (lineno 53) (col_offset 0) ) (Python.ClassDef (name 'FreshCVSSourceOldcred') (bases (Python.Name (id 'FreshCVSSourceNewcred') (ctx (Python.Load)) (lineno 125) (col_offset 28) )) (body (Python.Expr (value (Python.Str (s 'This is for older freshcvs daemons (from CVSToys-1.0.9 and earlier). ') (lineno 127) (col_offset -1) )) (lineno 127) (col_offset -1) ) (Python.FunctionDef (name '__init__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 129) (col_offset 17) ) (Python.Name (id 'host') (ctx (Python.Param)) (lineno 129) (col_offset 23) ) (Python.Name (id 'port') (ctx (Python.Param)) (lineno 129) (col_offset 29) ) (Python.Name (id 'user') (ctx (Python.Param)) (lineno 129) (col_offset 35) ) (Python.Name (id 'passwd') (ctx (Python.Param)) (lineno 129) (col_offset 41) ) (Python.Name (id 'serviceName') (ctx (Python.Param)) (lineno 130) (col_offset 17) ) (Python.Name (id 'prefix') (ctx (Python.Param)) (lineno 130) (col_offset 47) )) (defaults (Python.Str (s 'cvstoys.notify') (lineno 130) (col_offset 29) ) (Python.Name (id 'None') (ctx (Python.Load)) (lineno 130) (col_offset 54) )) )) (body (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 131) (col_offset 8) )) (attr 'host') (ctx (Python.Store)) (lineno 131) (col_offset 8) )) (value (Python.Name (id 'host') (ctx (Python.Load)) (lineno 131) (col_offset 20) )) (lineno 131) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 132) (col_offset 8) )) (attr 'port') (ctx (Python.Store)) (lineno 132) (col_offset 8) )) (value (Python.Name (id 'port') (ctx (Python.Load)) (lineno 132) (col_offset 20) )) (lineno 132) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 133) (col_offset 8) )) (attr 'prefix') (ctx (Python.Store)) (lineno 133) (col_offset 8) )) (value (Python.Name (id 'prefix') (ctx (Python.Load)) (lineno 133) (col_offset 22) )) (lineno 133) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 134) (col_offset 8) )) (attr 'listener') (ctx (Python.Store)) (lineno 134) (col_offset 8) ) (Python.Name (id 'l') (ctx (Python.Store)) (lineno 134) (col_offset 24) )) (value (Python.Call (func (Python.Name (id 'FreshCVSListener') (ctx (Python.Load)) (lineno 134) (col_offset 28) )) (args ) (keywords ) (lineno 134) (col_offset 28) )) (lineno 134) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'l') (ctx (Python.Load)) (lineno 135) (col_offset 8) )) (attr 'source') (ctx (Python.Store)) (lineno 135) (col_offset 8) )) (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 135) (col_offset 19) )) (lineno 135) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 136) (col_offset 8) )) (attr 'factory') (ctx (Python.Store)) (lineno 136) (col_offset 8) ) (Python.Name (id 'f') (ctx (Python.Store)) (lineno 136) (col_offset 23) )) (value (Python.Call (func (Python.Name (id 'FreshCVSConnectionFactory') (ctx (Python.Load)) (lineno 136) (col_offset 27) )) (args ) (keywords ) (lineno 136) (col_offset 27) )) (lineno 136) (col_offset 8) ) (Python.Assign (targets (Python.Attribute (value (Python.Name (id 'f') (ctx (Python.Load)) (lineno 137) (col_offset 8) )) (attr 'source') (ctx (Python.Store)) (lineno 137) (col_offset 8) )) (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 137) (col_offset 19) )) (lineno 137) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'f') (ctx (Python.Load)) (lineno 138) (col_offset 8) )) (attr 'startGettingPerspective') (ctx (Python.Load)) (lineno 138) (col_offset 8) )) (args (Python.Name (id 'user') (ctx (Python.Load)) (lineno 138) (col_offset 34) ) (Python.Name (id 'passwd') (ctx (Python.Load)) (lineno 138) (col_offset 40) ) (Python.Name (id 'serviceName') (ctx (Python.Load)) (lineno 138) (col_offset 48) )) (keywords (Python.Keyword (arg 'client') (value (Python.Name (id 'l') (ctx (Python.Load)) (lineno 138) (col_offset 68) )) )) (lineno 138) (col_offset 8) )) (lineno 138) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'TCPClient') (ctx (Python.Load)) (lineno 139) (col_offset 8) )) (attr '__init__') (ctx (Python.Load)) (lineno 139) (col_offset 8) )) (args (Python.Name (id 'self') (ctx (Python.Load)) (lineno 139) (col_offset 27) ) (Python.Name (id 'host') (ctx (Python.Load)) (lineno 139) (col_offset 33) ) (Python.Name (id 'port') (ctx (Python.Load)) (lineno 139) (col_offset 39) ) (Python.Name (id 'f') (ctx (Python.Load)) (lineno 139) (col_offset 45) )) (keywords ) (lineno 139) (col_offset 8) )) (lineno 139) (col_offset 8) )) (decorators ) (lineno 129) (col_offset 4) ) (Python.FunctionDef (name '__repr__') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 141) (col_offset 17) )) (defaults ) )) (body (Python.Return (value (Python.BinOp (left (Python.Str (s '') (lineno 142) (col_offset 15) )) (op (Python.Mod)) (right (Python.Tuple (elts (Python.Tuple (elts (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 143) (col_offset 17) )) (attr 'host') (ctx (Python.Load)) (lineno 143) (col_offset 17) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 143) (col_offset 28) )) (attr 'port') (ctx (Python.Load)) (lineno 143) (col_offset 28) )) (ctx (Python.Load)) (lineno 143) (col_offset 17) ) (Python.Attribute (value (Python.Name (id 'self') (ctx (Python.Load)) (lineno 143) (col_offset 40) )) (attr 'prefix') (ctx (Python.Load)) (lineno 143) (col_offset 40) )) (ctx (Python.Load)) (lineno 143) (col_offset 16) )) (lineno 142) (col_offset 15) )) (lineno 142) (col_offset 8) )) (decorators ) (lineno 141) (col_offset 4) )) (lineno 125) (col_offset 0) ) (Python.Assign (targets (Python.Name (id 'FreshCVSSource') (ctx (Python.Store)) (lineno 147) (col_offset 0) )) (value (Python.Name (id 'FreshCVSSourceNewcred') (ctx (Python.Load)) (lineno 147) (col_offset 17) )) (lineno 147) (col_offset 0) )) (name 'freshcvs') ) (Python.Module (body (Python.ImportFrom (module 'buildbot.changes.mail') (names (Python.Alias (name 'FCMaildirSource') )) (level 0) (lineno 5) (col_offset 0) )) (name 'freshcvsmail') ) (Python.Module (body (Python.Expr (value (Python.Str (s ' Parse various kinds of ''CVS notify'' email. ') (lineno 5) (col_offset -1) )) (lineno 5) (col_offset -1) ) (Python.Import (names (Python.Alias (name 'os') ) (Python.Alias (name 're') )) (lineno 6) (col_offset 0) ) (Python.ImportFrom (module 'rfc822') (names (Python.Alias (name 'Message') )) (level 0) (lineno 7) (col_offset 0) ) (Python.ImportFrom (module 'buildbot') (names (Python.Alias (name 'util') )) (level 0) (lineno 9) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.twcompat') (names (Python.Alias (name 'implements') )) (level 0) (lineno 10) (col_offset 0) ) (Python.ImportFrom (module 'buildbot.changes') (names (Python.Alias (name 'base') ) (Python.Alias (name 'changes') ) (Python.Alias (name 'maildirtwisted') )) (level 0) (lineno 11) (col_offset 0) ) (Python.FunctionDef (name 'parseFreshCVSMail') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 13) (col_offset 22) ) (Python.Name (id 'fd') (ctx (Python.Param)) (lineno 13) (col_offset 28) ) (Python.Name (id 'prefix') (ctx (Python.Param)) (lineno 13) (col_offset 32) ) (Python.Name (id 'sep') (ctx (Python.Param)) (lineno 13) (col_offset 45) )) (defaults (Python.Name (id 'None') (ctx (Python.Load)) (lineno 13) (col_offset 39) ) (Python.Str (s '/') (lineno 13) (col_offset 49) )) )) (body (Python.Expr (value (Python.Str (s 'Parse mail sent by FreshCVS') (lineno 14) (col_offset 4) )) (lineno 14) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'm') (ctx (Python.Store)) (lineno 18) (col_offset 4) )) (value (Python.Call (func (Python.Name (id 'Message') (ctx (Python.Load)) (lineno 18) (col_offset 8) )) (args (Python.Name (id 'fd') (ctx (Python.Load)) (lineno 18) (col_offset 16) )) (keywords ) (lineno 18) (col_offset 8) )) (lineno 18) (col_offset 4) ) (Python.Assign (targets (Python.Tuple (elts (Python.Name (id 'name') (ctx (Python.Store)) (lineno 21) (col_offset 4) ) (Python.Name (id 'addr') (ctx (Python.Store)) (lineno 21) (col_offset 10) )) (ctx (Python.Store)) (lineno 21) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'm') (ctx (Python.Load)) (lineno 21) (col_offset 17) )) (attr 'getaddr') (ctx (Python.Load)) (lineno 21) (col_offset 17) )) (args (Python.Str (s 'from') (lineno 21) (col_offset 27) )) (keywords ) (lineno 21) (col_offset 17) )) (lineno 21) (col_offset 4) ) (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Name (id 'name') (ctx (Python.Load)) (lineno 22) (col_offset 11) )) (lineno 22) (col_offset 7) )) (body (Python.Return (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 23) (col_offset 15) )) (lineno 23) (col_offset 8) )) (orelse ) (lineno 22) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'cvs') (ctx (Python.Store)) (lineno 24) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'name') (ctx (Python.Load)) (lineno 24) (col_offset 10) )) (attr 'find') (ctx (Python.Load)) (lineno 24) (col_offset 10) )) (args (Python.Str (s ' CVS') (lineno 24) (col_offset 20) )) (keywords ) (lineno 24) (col_offset 10) )) (lineno 24) (col_offset 4) ) (Python.If (test (Python.Compare (left (Python.Name (id 'cvs') (ctx (Python.Load)) (lineno 25) (col_offset 7) )) (ops (Python.Eq)) (comparators (Python.Num (n -1) (lineno 25) (col_offset 15) )) (lineno 25) (col_offset 7) )) (body (Python.Return (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 26) (col_offset 15) )) (lineno 26) (col_offset 8) )) (orelse ) (lineno 25) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'who') (ctx (Python.Store)) (lineno 27) (col_offset 4) )) (value (Python.Subscript (value (Python.Name (id 'name') (ctx (Python.Load)) (lineno 27) (col_offset 10) )) (slice (Python.Slice (upper (Python.Name (id 'cvs') (ctx (Python.Load)) (lineno 27) (col_offset 16) )) )) (ctx (Python.Load)) (lineno 27) (col_offset 10) )) (lineno 27) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'when') (ctx (Python.Store)) (lineno 32) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'util') (ctx (Python.Load)) (lineno 32) (col_offset 11) )) (attr 'now') (ctx (Python.Load)) (lineno 32) (col_offset 11) )) (args ) (keywords ) (lineno 32) (col_offset 11) )) (lineno 32) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'files') (ctx (Python.Store)) (lineno 34) (col_offset 4) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 34) (col_offset 12) )) (lineno 34) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'comments') (ctx (Python.Store)) (lineno 35) (col_offset 4) )) (value (Python.Str (s '') (lineno 35) (col_offset 15) )) (lineno 35) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'isdir') (ctx (Python.Store)) (lineno 36) (col_offset 4) )) (value (Python.Num (n 0) (lineno 36) (col_offset 12) )) (lineno 36) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'lines') (ctx (Python.Store)) (lineno 37) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'm') (ctx (Python.Load)) (lineno 37) (col_offset 12) )) (attr 'fp') (ctx (Python.Load)) (lineno 37) (col_offset 12) )) (attr 'readlines') (ctx (Python.Load)) (lineno 37) (col_offset 12) )) (args ) (keywords ) (lineno 37) (col_offset 12) )) (lineno 37) (col_offset 4) ) (Python.While (test (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 38) (col_offset 10) )) (body (Python.Assign (targets (Python.Name (id 'line') (ctx (Python.Store)) (lineno 39) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 39) (col_offset 15) )) (attr 'pop') (ctx (Python.Load)) (lineno 39) (col_offset 15) )) (args (Python.Num (n 0) (lineno 39) (col_offset 25) )) (keywords ) (lineno 39) (col_offset 15) )) (lineno 39) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 40) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Str (s 'Modified files: ') (lineno 40) (col_offset 19) )) (lineno 40) (col_offset 11) )) (body (Python.Break)) (orelse ) (lineno 40) (col_offset 8) )) (orelse ) (lineno 38) (col_offset 4) ) (Python.While (test (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 42) (col_offset 10) )) (body (Python.Assign (targets (Python.Name (id 'line') (ctx (Python.Store)) (lineno 43) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 43) (col_offset 15) )) (attr 'pop') (ctx (Python.Load)) (lineno 43) (col_offset 15) )) (args (Python.Num (n 0) (lineno 43) (col_offset 25) )) (keywords ) (lineno 43) (col_offset 15) )) (lineno 43) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 44) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Str (s ' ') (lineno 44) (col_offset 19) )) (lineno 44) (col_offset 11) )) (body (Python.Break)) (orelse ) (lineno 44) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'line') (ctx (Python.Store)) (lineno 46) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'line') (ctx (Python.Load)) (lineno 46) (col_offset 15) )) (attr 'rstrip') (ctx (Python.Load)) (lineno 46) (col_offset 15) )) (args (Python.Str (s ' ') (lineno 46) (col_offset 27) )) (keywords ) (lineno 46) (col_offset 15) )) (lineno 46) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'linebits') (ctx (Python.Store)) (lineno 47) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'line') (ctx (Python.Load)) (lineno 47) (col_offset 19) )) (attr 'split') (ctx (Python.Load)) (lineno 47) (col_offset 19) )) (args (Python.Name (id 'None') (ctx (Python.Load)) (lineno 47) (col_offset 30) ) (Python.Num (n 1) (lineno 47) (col_offset 36) )) (keywords ) (lineno 47) (col_offset 19) )) (lineno 47) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'file') (ctx (Python.Store)) (lineno 48) (col_offset 8) )) (value (Python.Subscript (value (Python.Name (id 'linebits') (ctx (Python.Load)) (lineno 48) (col_offset 15) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 48) (col_offset 24) )) )) (ctx (Python.Load)) (lineno 48) (col_offset 15) )) (lineno 48) (col_offset 8) ) (Python.If (test (Python.Name (id 'prefix') (ctx (Python.Load)) (lineno 49) (col_offset 11) )) (body (Python.Assign (targets (Python.Name (id 'bits') (ctx (Python.Store)) (lineno 52) (col_offset 12) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'file') (ctx (Python.Load)) (lineno 52) (col_offset 19) )) (attr 'split') (ctx (Python.Load)) (lineno 52) (col_offset 19) )) (args (Python.Name (id 'sep') (ctx (Python.Load)) (lineno 52) (col_offset 30) )) (keywords ) (lineno 52) (col_offset 19) )) (lineno 52) (col_offset 12) ) (Python.If (test (Python.Compare (left (Python.Subscript (value (Python.Name (id 'bits') (ctx (Python.Load)) (lineno 53) (col_offset 15) )) (slice (Python.Index (value (Python.Num (n 0) (lineno 53) (col_offset 20) )) )) (ctx (Python.Load)) (lineno 53) (col_offset 15) )) (ops (Python.Eq)) (comparators (Python.Name (id 'prefix') (ctx (Python.Load)) (lineno 53) (col_offset 26) )) (lineno 53) (col_offset 15) )) (body (Python.Assign (targets (Python.Name (id 'file') (ctx (Python.Store)) (lineno 54) (col_offset 16) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'sep') (ctx (Python.Load)) (lineno 54) (col_offset 23) )) (attr 'join') (ctx (Python.Load)) (lineno 54) (col_offset 23) )) (args (Python.Subscript (value (Python.Name (id 'bits') (ctx (Python.Load)) (lineno 54) (col_offset 32) )) (slice (Python.Slice (lower (Python.Num (n 1) (lineno 54) (col_offset 37) )) )) (ctx (Python.Load)) (lineno 54) (col_offset 32) )) (keywords ) (lineno 54) (col_offset 23) )) (lineno 54) (col_offset 16) )) (orelse (Python.Break)) (lineno 53) (col_offset 12) )) (orelse ) (lineno 49) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Call (func (Python.Name (id 'len') (ctx (Python.Load)) (lineno 57) (col_offset 11) )) (args (Python.Name (id 'linebits') (ctx (Python.Load)) (lineno 57) (col_offset 15) )) (keywords ) (lineno 57) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Num (n 1) (lineno 57) (col_offset 28) )) (lineno 57) (col_offset 11) )) (body (Python.Assign (targets (Python.Name (id 'isdir') (ctx (Python.Store)) (lineno 58) (col_offset 12) )) (value (Python.Num (n 1) (lineno 58) (col_offset 20) )) (lineno 58) (col_offset 12) )) (orelse (Python.If (test (Python.Compare (left (Python.Subscript (value (Python.Name (id 'linebits') (ctx (Python.Load)) (lineno 59) (col_offset 13) )) (slice (Python.Index (value (Python.Num (n 1) (lineno 59) (col_offset 22) )) )) (ctx (Python.Load)) (lineno 59) (col_offset 13) )) (ops (Python.Eq)) (comparators (Python.Str (s '0 0') (lineno 59) (col_offset 28) )) (lineno 59) (col_offset 13) )) (body (Python.Assign (targets (Python.Name (id 'isdir') (ctx (Python.Store)) (lineno 60) (col_offset 12) )) (value (Python.Num (n 1) (lineno 60) (col_offset 20) )) (lineno 60) (col_offset 12) )) (orelse ) (lineno 59) (col_offset 13) )) (lineno 57) (col_offset 8) ) (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'files') (ctx (Python.Load)) (lineno 61) (col_offset 8) )) (attr 'append') (ctx (Python.Load)) (lineno 61) (col_offset 8) )) (args (Python.Name (id 'file') (ctx (Python.Load)) (lineno 61) (col_offset 21) )) (keywords ) (lineno 61) (col_offset 8) )) (lineno 61) (col_offset 8) )) (orelse ) (lineno 42) (col_offset 4) ) (Python.While (test (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 62) (col_offset 10) )) (body (Python.Assign (targets (Python.Name (id 'line') (ctx (Python.Store)) (lineno 63) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 63) (col_offset 15) )) (attr 'pop') (ctx (Python.Load)) (lineno 63) (col_offset 15) )) (args (Python.Num (n 0) (lineno 63) (col_offset 25) )) (keywords ) (lineno 63) (col_offset 15) )) (lineno 63) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 64) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Str (s 'Log message: ') (lineno 64) (col_offset 19) )) (lineno 64) (col_offset 11) )) (body (Python.Break)) (orelse ) (lineno 64) (col_offset 8) )) (orelse ) (lineno 62) (col_offset 4) ) (Python.While (test (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 67) (col_offset 10) )) (body (Python.Assign (targets (Python.Name (id 'line') (ctx (Python.Store)) (lineno 68) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 68) (col_offset 15) )) (attr 'pop') (ctx (Python.Load)) (lineno 68) (col_offset 15) )) (args (Python.Num (n 0) (lineno 68) (col_offset 25) )) (keywords ) (lineno 68) (col_offset 15) )) (lineno 68) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 69) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Str (s 'ViewCVS links: ') (lineno 69) (col_offset 19) )) (lineno 69) (col_offset 11) )) (body (Python.Break)) (orelse ) (lineno 69) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Call (func (Python.Attribute (value (Python.Name (id 'line') (ctx (Python.Load)) (lineno 71) (col_offset 11) )) (attr 'find') (ctx (Python.Load)) (lineno 71) (col_offset 11) )) (args (Python.Str (s 'Index: ') (lineno 71) (col_offset 21) )) (keywords ) (lineno 71) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Num (n 0) (lineno 71) (col_offset 35) )) (lineno 71) (col_offset 11) )) (body (Python.Break)) (orelse ) (lineno 71) (col_offset 8) ) (Python.AugAssign (target (Python.Name (id 'comments') (ctx (Python.Store)) (lineno 73) (col_offset 8) )) (op (Python.Add)) (value (Python.Name (id 'line') (ctx (Python.Load)) (lineno 73) (col_offset 20) )) (lineno 73) (col_offset 8) )) (orelse ) (lineno 67) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'comments') (ctx (Python.Store)) (lineno 74) (col_offset 4) )) (value (Python.BinOp (left (Python.Call (func (Python.Attribute (value (Python.Name (id 'comments') (ctx (Python.Load)) (lineno 74) (col_offset 15) )) (attr 'rstrip') (ctx (Python.Load)) (lineno 74) (col_offset 15) )) (args ) (keywords ) (lineno 74) (col_offset 15) )) (op (Python.Add)) (right (Python.Str (s ' ') (lineno 74) (col_offset 35) )) (lineno 74) (col_offset 15) )) (lineno 74) (col_offset 4) ) (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Name (id 'files') (ctx (Python.Load)) (lineno 76) (col_offset 11) )) (lineno 76) (col_offset 7) )) (body (Python.Return (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 77) (col_offset 15) )) (lineno 77) (col_offset 8) )) (orelse ) (lineno 76) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'change') (ctx (Python.Store)) (lineno 79) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'changes') (ctx (Python.Load)) (lineno 79) (col_offset 13) )) (attr 'Change') (ctx (Python.Load)) (lineno 79) (col_offset 13) )) (args (Python.Name (id 'who') (ctx (Python.Load)) (lineno 79) (col_offset 28) ) (Python.Name (id 'files') (ctx (Python.Load)) (lineno 79) (col_offset 33) ) (Python.Name (id 'comments') (ctx (Python.Load)) (lineno 79) (col_offset 40) ) (Python.Name (id 'isdir') (ctx (Python.Load)) (lineno 79) (col_offset 50) )) (keywords (Python.Keyword (arg 'when') (value (Python.Name (id 'when') (ctx (Python.Load)) (lineno 79) (col_offset 62) )) )) (lineno 79) (col_offset 13) )) (lineno 79) (col_offset 4) ) (Python.Return (value (Python.Name (id 'change') (ctx (Python.Load)) (lineno 81) (col_offset 11) )) (lineno 81) (col_offset 4) )) (decorators ) (lineno 13) (col_offset 0) ) (Python.FunctionDef (name 'parseSyncmail') (args (Python.Arguments (args (Python.Name (id 'self') (ctx (Python.Param)) (lineno 83) (col_offset 18) ) (Python.Name (id 'fd') (ctx (Python.Param)) (lineno 83) (col_offset 24) ) (Python.Name (id 'prefix') (ctx (Python.Param)) (lineno 83) (col_offset 28) ) (Python.Name (id 'sep') (ctx (Python.Param)) (lineno 83) (col_offset 41) )) (defaults (Python.Name (id 'None') (ctx (Python.Load)) (lineno 83) (col_offset 35) ) (Python.Str (s '/') (lineno 83) (col_offset 45) )) )) (body (Python.Expr (value (Python.Str (s 'Parse messages sent by the ''syncmail'' program, as suggested by the sourceforge.net CVS Admin documentation. Syncmail is maintained at syncmail.sf.net . ') (lineno 87) (col_offset -1) )) (lineno 87) (col_offset -1) ) (Python.Assign (targets (Python.Name (id 'm') (ctx (Python.Store)) (lineno 91) (col_offset 4) )) (value (Python.Call (func (Python.Name (id 'Message') (ctx (Python.Load)) (lineno 91) (col_offset 8) )) (args (Python.Name (id 'fd') (ctx (Python.Load)) (lineno 91) (col_offset 16) )) (keywords ) (lineno 91) (col_offset 8) )) (lineno 91) (col_offset 4) ) (Python.Assign (targets (Python.Tuple (elts (Python.Name (id 'name') (ctx (Python.Store)) (lineno 96) (col_offset 4) ) (Python.Name (id 'addr') (ctx (Python.Store)) (lineno 96) (col_offset 10) )) (ctx (Python.Store)) (lineno 96) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'm') (ctx (Python.Load)) (lineno 96) (col_offset 17) )) (attr 'getaddr') (ctx (Python.Load)) (lineno 96) (col_offset 17) )) (args (Python.Str (s 'from') (lineno 96) (col_offset 27) )) (keywords ) (lineno 96) (col_offset 17) )) (lineno 96) (col_offset 4) ) (Python.If (test (Python.UnaryOp (op (Python.Not)) (operand (Python.Name (id 'addr') (ctx (Python.Load)) (lineno 97) (col_offset 11) )) (lineno 97) (col_offset 7) )) (body (Python.Return (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 98) (col_offset 15) )) (lineno 98) (col_offset 8) )) (orelse ) (lineno 97) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'at') (ctx (Python.Store)) (lineno 99) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'addr') (ctx (Python.Load)) (lineno 99) (col_offset 9) )) (attr 'find') (ctx (Python.Load)) (lineno 99) (col_offset 9) )) (args (Python.Str (s '@') (lineno 99) (col_offset 19) )) (keywords ) (lineno 99) (col_offset 9) )) (lineno 99) (col_offset 4) ) (Python.If (test (Python.Compare (left (Python.Name (id 'at') (ctx (Python.Load)) (lineno 100) (col_offset 7) )) (ops (Python.Eq)) (comparators (Python.Num (n -1) (lineno 100) (col_offset 14) )) (lineno 100) (col_offset 7) )) (body (Python.Assign (targets (Python.Name (id 'who') (ctx (Python.Store)) (lineno 101) (col_offset 8) )) (value (Python.Name (id 'addr') (ctx (Python.Load)) (lineno 101) (col_offset 14) )) (lineno 101) (col_offset 8) )) (orelse (Python.Assign (targets (Python.Name (id 'who') (ctx (Python.Store)) (lineno 103) (col_offset 8) )) (value (Python.Subscript (value (Python.Name (id 'addr') (ctx (Python.Load)) (lineno 103) (col_offset 14) )) (slice (Python.Slice (upper (Python.Name (id 'at') (ctx (Python.Load)) (lineno 103) (col_offset 20) )) )) (ctx (Python.Load)) (lineno 103) (col_offset 14) )) (lineno 103) (col_offset 8) )) (lineno 100) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'when') (ctx (Python.Store)) (lineno 113) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'util') (ctx (Python.Load)) (lineno 113) (col_offset 11) )) (attr 'now') (ctx (Python.Load)) (lineno 113) (col_offset 11) )) (args ) (keywords ) (lineno 113) (col_offset 11) )) (lineno 113) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'subject') (ctx (Python.Store)) (lineno 115) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'm') (ctx (Python.Load)) (lineno 115) (col_offset 14) )) (attr 'getheader') (ctx (Python.Load)) (lineno 115) (col_offset 14) )) (args (Python.Str (s 'subject') (lineno 115) (col_offset 26) )) (keywords ) (lineno 115) (col_offset 14) )) (lineno 115) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'space') (ctx (Python.Store)) (lineno 121) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'subject') (ctx (Python.Load)) (lineno 121) (col_offset 12) )) (attr 'find') (ctx (Python.Load)) (lineno 121) (col_offset 12) )) (args (Python.Str (s ' ') (lineno 121) (col_offset 25) )) (keywords ) (lineno 121) (col_offset 12) )) (lineno 121) (col_offset 4) ) (Python.If (test (Python.Compare (left (Python.Name (id 'space') (ctx (Python.Load)) (lineno 122) (col_offset 7) )) (ops (Python.NotEq)) (comparators (Python.Num (n -1) (lineno 122) (col_offset 17) )) (lineno 122) (col_offset 7) )) (body (Python.Assign (targets (Python.Name (id 'directory') (ctx (Python.Store)) (lineno 123) (col_offset 8) )) (value (Python.Subscript (value (Python.Name (id 'subject') (ctx (Python.Load)) (lineno 123) (col_offset 20) )) (slice (Python.Slice (upper (Python.Name (id 'space') (ctx (Python.Load)) (lineno 123) (col_offset 29) )) )) (ctx (Python.Load)) (lineno 123) (col_offset 20) )) (lineno 123) (col_offset 8) )) (orelse (Python.Assign (targets (Python.Name (id 'directory') (ctx (Python.Store)) (lineno 125) (col_offset 8) )) (value (Python.Name (id 'subject') (ctx (Python.Load)) (lineno 125) (col_offset 20) )) (lineno 125) (col_offset 8) )) (lineno 122) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'files') (ctx (Python.Store)) (lineno 127) (col_offset 4) )) (value (Python.List (elts ) (ctx (Python.Load)) (lineno 127) (col_offset 12) )) (lineno 127) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'comments') (ctx (Python.Store)) (lineno 128) (col_offset 4) )) (value (Python.Str (s '') (lineno 128) (col_offset 15) )) (lineno 128) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'isdir') (ctx (Python.Store)) (lineno 129) (col_offset 4) )) (value (Python.Num (n 0) (lineno 129) (col_offset 12) )) (lineno 129) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'branch') (ctx (Python.Store)) (lineno 130) (col_offset 4) )) (value (Python.Name (id 'None') (ctx (Python.Load)) (lineno 130) (col_offset 13) )) (lineno 130) (col_offset 4) ) (Python.Assign (targets (Python.Name (id 'lines') (ctx (Python.Store)) (lineno 132) (col_offset 4) )) (value (Python.Call (func (Python.Attribute (value (Python.Attribute (value (Python.Name (id 'm') (ctx (Python.Load)) (lineno 132) (col_offset 12) )) (attr 'fp') (ctx (Python.Load)) (lineno 132) (col_offset 12) )) (attr 'readlines') (ctx (Python.Load)) (lineno 132) (col_offset 12) )) (args ) (keywords ) (lineno 132) (col_offset 12) )) (lineno 132) (col_offset 4) ) (Python.While (test (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 133) (col_offset 10) )) (body (Python.Assign (targets (Python.Name (id 'line') (ctx (Python.Store)) (lineno 134) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 134) (col_offset 15) )) (attr 'pop') (ctx (Python.Load)) (lineno 134) (col_offset 15) )) (args (Python.Num (n 0) (lineno 134) (col_offset 25) )) (keywords ) (lineno 134) (col_offset 15) )) (lineno 134) (col_offset 8) ) (Python.If (test (Python.BoolOp (op (Python.Or)) (values (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 136) (col_offset 12) )) (ops (Python.Eq)) (comparators (Python.Str (s 'Modified Files: ') (lineno 136) (col_offset 20) )) (lineno 136) (col_offset 12) ) (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 137) (col_offset 12) )) (ops (Python.Eq)) (comparators (Python.Str (s 'Added Files: ') (lineno 137) (col_offset 20) )) (lineno 137) (col_offset 12) ) (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 138) (col_offset 12) )) (ops (Python.Eq)) (comparators (Python.Str (s 'Removed Files: ') (lineno 138) (col_offset 20) )) (lineno 138) (col_offset 12) )) (lineno 136) (col_offset 12) )) (body (Python.Break)) (orelse ) (lineno 136) (col_offset 8) )) (orelse ) (lineno 133) (col_offset 4) ) (Python.While (test (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 141) (col_offset 10) )) (body (Python.Assign (targets (Python.Name (id 'line') (ctx (Python.Store)) (lineno 142) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 142) (col_offset 15) )) (attr 'pop') (ctx (Python.Load)) (lineno 142) (col_offset 15) )) (args (Python.Num (n 0) (lineno 142) (col_offset 25) )) (keywords ) (lineno 142) (col_offset 15) )) (lineno 142) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 143) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Str (s ' ') (lineno 143) (col_offset 19) )) (lineno 143) (col_offset 11) )) (body (Python.Break)) (orelse ) (lineno 143) (col_offset 8) ) (Python.If (test (Python.Compare (left (Python.Name (id 'line') (ctx (Python.Load)) (lineno 145) (col_offset 11) )) (ops (Python.Eq)) (comparators (Python.Str (s 'Log Message: ') (lineno 145) (col_offset 19) )) (lineno 145) (col_offset 11) )) (body (Python.Expr (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'lines') (ctx (Python.Load)) (lineno 146) (col_offset 12) )) (attr 'insert') (ctx (Python.Load)) (lineno 146) (col_offset 12) )) (args (Python.Num (n 0) (lineno 146) (col_offset 25) ) (Python.Name (id 'line') (ctx (Python.Load)) (lineno 146) (col_offset 28) )) (keywords ) (lineno 146) (col_offset 12) )) (lineno 146) (col_offset 12) ) (Python.Break)) (orelse ) (lineno 145) (col_offset 8) ) (Python.Assign (targets (Python.Name (id 'line') (ctx (Python.Store)) (lineno 148) (col_offset 8) )) (value (Python.Call (func (Python.Attribute (value (Python.Name (id 'line') (ctx (Python.Load)) (lineno 148) (col_offset 15) )) (attr 'lstrip') (ctx (Python.Load)) (lineno 148) (col_offset 15)