def parse_sbuild_log(log, sut): gccversion = None stats = None for line in log.splitlines(): flag = "Toolchain package versions: " stat = STATS.match(line) if stat: info = stat.groupdict() hours, minutes, seconds = [int(x) for x in info['time'].split(":")] timed = timedelta(hours=hours, minutes=minutes, seconds=seconds) stats = Stats(timed.total_seconds()) if line.startswith(flag): line = line[len(flag):].strip() packages = line.split(" ") versions = {} for package in packages: if "_" not in package: continue b, bv = package.split("_", 1) versions[b] = bv vs = list(filter(lambda x: x.startswith("gcc"), versions)) if vs == []: continue vs = vs[0] gccversion = versions[vs] obj = fgcc.parse_file( StringIO(log), sut=sut, gccversion=gccversion, stats=stats ) return obj
def make_complex_analysis(self): """ Construct a Analysis instance that uses all features """ a = Analysis( metadata=Metadata(generator=Generator(name='cpychecker', version='0.11'), sut=SourceRpm(name='python-ethtool', version='0.7', release='4.fc19', buildarch='x86_64'), file_=File(givenpath='foo.c', abspath='/home/david/coding/foo.c'), stats=Stats(wallclocktime=0.4)), results=[ Issue(cwe=681, testid='refcount-too-high', location=Location(file=File( givenpath='foo.c', abspath='/home/david/coding/foo.c'), function=Function('bar'), point=Point(10, 15)), message=Message(text='something bad involving pointers'), notes=Notes('here is some explanatory text'), trace=Trace([ State(location=Location(file=File('foo.c', None), function=Function('bar'), point=Point(7, 12)), notes=Notes('first we do this')), State(location=Location(file=File('foo.c', None), function=Function('bar'), point=Point(8, 10)), notes=Notes('then we do that')), State(location=Location(file=File('foo.c', None), function=Function('bar'), range_=Range( Point(10, 15), Point(10, 25))), notes=Notes('then it crashes here')) ]), severity='really bad', customfields=CustomFields(foo='bar')), ], customfields=CustomFields( gccinvocation='gcc -I/usr/include/python2.7 -c foo.c'), ) return a, a.results[0]