def LookupStoreHacker (name, email): email = database.RemapEmail (email) h = database.LookupEmail (email) if h: # already there return h elist = database.LookupEmployer (email, MapUnknown) h = database.LookupName (name) if h: # new email h.addemail (email, elist) return h return database.StoreHacker(name, elist, email)
def get_header(patch, line, input): if line == '': if patch.author == '': print 'Funky auth line in', patch.commit patch.author = database.LookupStoreHacker('Unknown', '*****@*****.**') return S_DESC m = patterns['author'].match(line) if m: patch.email = database.RemapEmail(m.group(2)) patch.author = database.LookupStoreHacker(m.group(1), patch.email) else: m = patterns['date'].match(line) if m: dt = rfc822.parsedate(m.group(2)) patch.date = datetime.date(dt[0], dt[1], dt[2]) return S_HEADER
def LookupStoreHacker (name, email): email = database.RemapEmail (email) ha = database.LookupEmail (email) if ha: # already there return ha elist = database.LookupEmployer (email, MapUnknown) ha = database.LookupName (name) if email != '*****@*****.**' and elist[0][1].name == '(Unknown)' and '@' in email: domain = email.split('@')[1].strip().lower() if domain in unknown_domains: unknown_domains[domain].append(email) else: unknown_domains[domain] = [email] if ha: # new email ha.addemail (email, elist) return ha return database.StoreHacker(name, elist, email)
def grabpatch(logpatch): global matched, FileStats matched['n'] += 1 # just to exclude invalid patterns (not suited for non openstack repo - kubernetes) m = patterns['commit'].match(logpatch[0]) if not m: return None matched['commit'] += 1 pa = patch(m.group(1)) ignore = (FileFilter is not None) for Line in logpatch[1:]: # # Maybe it's an author line? # m = patterns['author'].match(Line) if m: pa.email = database.RemapEmail(m.group(2)) if not is_botemail(pa.email): pa.author = LookupStoreHacker(m.group(1), pa.email) else: return 'bot' dkey = 'author' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue # # Could be a signed-off-by: # m = patterns['signed-off-by'].match(Line) if m: email = database.RemapEmail(m.group(2)) sobber = LookupStoreHacker(m.group(1), email) if sobber != pa.author or AuthorSOBs: pa.sobs.append( (email, LookupStoreHacker(m.group(1), m.group(2)))) dkey = 'signed-off-by' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue # # Various other tags of interest. # m = patterns['reviewed-by'].match(Line) if m: email = database.RemapEmail(m.group(2)) pa.addreviewer(LookupStoreHacker(m.group(1), email)) dkey = 'reviewed-by' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue m = patterns['tested-by'].match(Line) if m: email = database.RemapEmail(m.group(2)) pa.addtester(LookupStoreHacker(m.group(1), email)) pa.author.testcredit(patch) dkey = 'tested-by' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue # Reported-by: m = patterns['reported-by'].match(Line) if m: email = database.RemapEmail(m.group(2)) pa.addreporter(LookupStoreHacker(m.group(1), email)) pa.author.reportcredit(patch) dkey = 'reported-by' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue # Reported-and-tested-by: m = patterns['reported-and-tested-by'].match(Line) if m: email = database.RemapEmail(m.group(2)) h = LookupStoreHacker(m.group(1), email) pa.addreporter(h) pa.addtester(h) pa.author.reportcredit(patch) pa.author.testcredit(patch) dkey = 'reported-and-tested-by' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue # # If this one is a merge, make note of the fact. # m = patterns['merge'].match(Line) if m: pa.merge = 1 dkey = 'merge' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue # # See if it's the date. # m = patterns['date'].match(Line) if m: dt = rfc822.parsedate(m.group(2)) pa.date = datetime.date(dt[0], dt[1], dt[2]) if pa.date > Today: sys.stderr.write('Funky date: %s\n' % pa.date) pa.date = Today dkey = 'date' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue if not Numstat: # # If we have a file filter, check for file lines. # if FileFilter: ignore = ApplyFileFilter(Line, ignore) if InvertFilter: ignore = not ignore # # OK, maybe it's part of the diff itself. # if not ignore: if patterns['add'].match(Line): pa.added += 1 dkey = 'add' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 continue if patterns['rem'].match(Line): dkey = 'rem' if dkey not in matched: matched[dkey] = 1 else: matched[dkey] += 1 pa.removed += 1 else: # Get the statistics (lines added/removes) using numstats # and without requiring a diff (--numstat instead -p) (filename, filetype, added, removed) = parse_numstat(Line, FileFilter) if filename: pa.added += added pa.removed += removed pa.addfiletype(filetype, added, removed) if FileStats: pa.addfile(filename, added, removed) if '@' in pa.author.name: GripeAboutAuthorName(pa.author.name) return pa