Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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