def checkreport(repo, rtag, flists): git = GitTree(repo.name, repo.dirname(), repo.url, repo.commit, repo.stable) count = 0 scaninfo = [] logs = ScanLog(reponame = repo.name, tagname = rtag.name, starttime = strftime("%Y-%m-%d %H:%M:%S", localtime()), desc = 'Processing, please wait...') logs.save() logger = MyLogger() logger.info('%d Files changed.' % len(flists)) for dot in report_engine_list(): scount = 0 test = dot(repo.dirname(), logger.logger, repo.builddir()) for i in range(test.tokens()): try: rtype = None try: rtype = Type.objects.filter(id = test.get_type())[0] except: test.next_token() continue if rtype.status == False: test.next_token() continue cmts = GitCommit.objects.filter(repo = repo, type = rtype) if len(cmts) == 0: cmt = GitCommit(repo = repo, type = rtype) cmt.save() else: cmt = cmts[0] rflists = flists if repo.delta == False: oldcommit = cmt.commit if oldcommit != repo.commit: if git.is_linux_next(): oldcommit = git.get_stable() rflists = git.get_changelist(oldcommit, repo.commit, None, True) else: rflists = flists logger.info('Starting scan type %d, total %d files' % (test.get_type(), len(rflists))) exceptfiles = [] for fn in ExceptFile.objects.filter(type = rtype): exceptfiles.append(fn.file) rcount = 0 for fname in rflists: if is_source_file(fname) == False: continue if exceptfiles.count(fname) != 0: continue reports = Report.objects.filter(file = fname, type = rtype) if not os.path.exists(os.path.join(repo.dirname(), fname)): for r in reports: if r.status in [STATUS_NEW, STATUS_PATCHED]: r.status = STATUS_REMOVED r.save() continue test.set_filename(fname) should_report = test.should_report() if test.has_error(): continue if should_report is False: for r in reports: if r.status in [STATUS_NEW, STATUS_PATCHED]: if r.mergered == 0: r.status = STATUS_FIXED r.save() else: mreport = Report.objects.filter(id = r.mergered) if len(mreport) != 0: if mreport[0].status in [STATUS_SENT]: mreport[0].status = STATUS_ACCEPTED r.status = STATUS_ACCEPTED else: mreport[0].status = STATUS_FIXED r.status = STATUS_FIXED mreport[0].save() else: r.status = STATUS_FIXED r.save() elif r.status in [STATUS_SENT]: r.status = STATUS_ACCEPTED r.save() continue lcount = 0 for r in reports: if r.status in [STATUS_NEW, STATUS_PATCHED, STATUS_SENT]: lcount += 1 if lcount > 0: continue text = test.get_report() report = Report(tag = rtag, file = fname, type = rtype, status = STATUS_NEW, reportlog = '\n'.join(text)) report.title = rtype.ptitle report.desc = rtype.pdesc report.save() rcount += 1 scount += 1 cmt.commit = repo.commit cmt.save() rtype.commit = repo.commit rtype.save() except: logger.info('Scan ERROR: type %d' % rtype.id) logger.info('End scan type %d, report %d' % (rtype.id, rcount)) logs.logs = logger.getlog() logs.save() test.next_token() count += scount scaninfo.append("%s: %d" % (test.name(), scount)) scaninfo.append("total report: %d" % (count)) logs.desc = ', '.join(scaninfo) logs.endtime = strftime("%Y-%m-%d %H:%M:%S", localtime()) logs.logs = logger.getlog() logs.save() return count
def main(args): django.setup() for repo in GitRepo.objects.all(): # repo is disabled if repo.status == False: continue git = GitTree(repo.name, repo.dirname(), repo.url, repo.commit, repo.stable) otag = git.get_tag() if git.check_update() == False and repo.delta == True: rtags = GitTag.objects.filter(repo = repo, name = otag) if len(rtags) > 0: rtag = rtags[0] rtag.flist = '' rtag.save() continue # update build tree _burl = "file://%s" % repo.dirname() buildgit = GitTree(repo.name, repo.builddir(), _burl, repo.commit, repo.stable) buildgit.update() # the tag name after git pull ntag = git.get_tag() if otag is None: otag = ntag if git.is_linux_next() == True: tag = ntag else: tag = otag if tag != ntag: # we got a new tag, just scan from last commit to otag # as common, new tag is the last commit, so does not need # to scan twice commit = git.get_commit_by_tag(ntag) else: commit = git.get_commit() if git.is_linux_next() == True and commit == git.get_stable(): # we update linux-next tree failed continue # if delta scan is enbled, skip the first time since we git clone # the tree, treat there is no file change if repo.delta == True: if repo.commit is None or len(repo.commit) == 0: repo.commit = commit repo.save() continue # no file change if repo.commit == commit: continue # file change list from last update flists = git.get_changelist(repo.commit, commit, repo.update) tags = GitTag.objects.filter(repo = repo, name = tag) rtag = None if tags.count() == 0: rtag = GitTag(repo = repo, name = tag, flist = ','.join(flists), total = 0) rtag.save() else: rtag = tags[0] if rtag.running == True: continue rtag.running = True rtag.save() print "Check for repo %s" % os.path.basename(repo.url) try: pcount = check_patch(repo, git, rtag, flists, commit) except: pass rtag.total += pcount rtag.flist = ','.join(flists) rtag.running = False rtag.save() repo.commit = commit if git.is_linux_next(): repo.stable = git.get_stable() repo.update = git.get_update_date() repo.save() print "Total patch %d" % pcount return 0