⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gnatsparse.py

📁 bugzilla的安装文件
💻 PY
📖 第 1 页 / 共 3 页
字号:
                self.fields["bug_severity"] = "major"        self.fields["bug_severity"] = SqlQuote(self.fields["bug_severity"])        self.fields["keywords"] = 0        if keywordids.has_key(self.fields["Class"]):            self.fields["keywords"] = self.fields["Class"]            self.fields["keywordid"] = keywordids[self.fields["Class"]]            self.fields["keywords"] = SqlQuote(self.fields["keywords"])        self.fields["priority"] = "P1"        if self.fields.has_key("Severity") and self.fields.has_key("Priority"):            severity = self.fields["Severity"]            priority = self.fields["Priority"]            if severity == "critical":                if priority == "high":                    self.fields["priority"] = "P1"                else:                    self.fields["priority"] = "P2"            elif severity == "serious":                if priority == "low":                    self.fields["priority"] = "P4"                else:                    self.fields["priority"] = "P3"            else:                if priority == "high":                    self.fields["priority"] = "P4"                else:                    self.fields["priority"] = "P5"        self.fields["priority"] = SqlQuote(self.fields["priority"])        state = self.fields["State"]        if (state == "open" or state == "analyzed") and self.fields["userid"] != 3:            self.fields["bug_status"] = "ASSIGNED"            self.fields["resolution"] = ""        elif state == "feedback":            self.fields["bug_status"] = "WAITING"            self.fields["resolution"] = ""        elif state == "closed":            self.fields["bug_status"] = "CLOSED"            if self.fields.has_key("Class"):                theclass = self.fields["Class"]                if theclass.find("duplicate") != -1:                    self.fields["resolution"]="DUPLICATE"                elif theclass.find("mistaken") != -1:                    self.fields["resolution"]="INVALID"                                    else:                    self.fields["resolution"]="FIXED"            else:                self.fields["resolution"]="FIXED"        elif state == "suspended":            self.fields["bug_status"] = "SUSPENDED"            self.fields["resolution"] = ""        elif state == "analyzed" and self.fields["userid"] == 3:            self.fields["bug_status"] = "NEW"            self.fields["resolution"] = ""        else:            self.fields["bug_status"] = "UNCONFIRMED"            self.fields["resolution"] = ""        self.fields["bug_status"] = SqlQuote(self.fields["bug_status"])        self.fields["resolution"] = SqlQuote(self.fields["resolution"])        self.fields["creation_ts"] = ""        if self.fields.has_key("Arrival-Date") and self.fields["Arrival-Date"] != "":            self.fields["creation_ts"] = unixdate2datetime(self.fields["Arrival-Date"])        self.fields["creation_ts"] = SqlQuote(self.fields["creation_ts"])        self.fields["delta_ts"] = ""        if self.fields.has_key("Audit-Trail"):            result = lastdatere.findall(self.fields["Audit-Trail"])            result.reverse()            if len(result) > 0:                self.fields["delta_ts"] = unixdate2timestamp(result[0])        if self.fields["delta_ts"] == "":            if self.fields.has_key("Arrival-Date") and self.fields["Arrival-Date"] != "":                self.fields["delta_ts"] = unixdate2timestamp(self.fields["Arrival-Date"])        self.fields["delta_ts"] = SqlQuote(self.fields["delta_ts"])        self.fields["short_desc"] = SqlQuote(self.fields["Synopsis"])        if self.fields.has_key("Reply-To") and self.fields["Reply-To"] != "":            self.fields["reporter"] = get_userid(self.fields["Reply-To"])        elif self.fields.has_key("Mail-Header"):            result = re.search(r"""From .*?([\w.]+@[\w.]+)""", self.fields["Mail-Header"])            if result:                self.fields["reporter"] = get_userid(result.group(1))            else:                self.fields["reporter"] = get_userid(gnats_username)        else:            self.fields["reporter"] = get_userid(gnats_username)        long_desc = self.fields["Description"]        long_desc2 = ""        for field in ["Release", "Environment", "How-To-Repeat"]:            if self.fields.has_key(field) and self.fields[field] != "":                long_desc += ("\n\n%s:\n" % field) + self.fields[field]        if self.fields.has_key("Fix") and self.fields["Fix"] != "":            long_desc2 = "Fix:\n" + self.fields["Fix"]        if self.need_unformatted  == 1 and self.fields["Unformatted"] != "":            long_desc += "\n\nUnformatted:\n" + self.fields["Unformatted"]        if long_desc != "":            self.long_descs.append((self.bug_id, self.fields["reporter"],                                    self.fields["creation_ts"],                                    SqlQuote(long_desc)))        if long_desc2 != "":            self.long_descs.append((self.bug_id, self.fields["reporter"],                                    self.fields["creation_ts"],                                    SqlQuote(long_desc2)))        for field in ["gcchost", "gccbuild", "gcctarget"]:            self.fields[field] = SqlQuote(self.fields[field])        self.fields["version"] = ""        if self.fields["Release"] != "":            self.fields["version"] = convert_gccver_to_ver (self.fields["Release"])        self.fields["version"] = SqlQuote(self.fields["version"])        self.fields["product"] = SqlQuote("gcc")        self.fields["component"] = "invalid"        if self.fields.has_key("Category"):            self.fields["component"] = self.fields["Category"]        self.fields["component"] = SqlQuote(self.fields["component"])        self.fields["target_milestone"] = "---"        if self.fields["version"].find("3.4") != -1:            self.fields["target_milestone"] = "3.4"        self.fields["target_milestone"] = SqlQuote(self.fields["target_milestone"])        if self.fields["userid"] == 2:            self.fields["userid"] = "\'NULL\'"class GNATSbug(object):    """ Represents a single GNATS PR """    def __init__(self, filename):        self.attachments = []        self.has_unformatted_attach = 0        fp = open (filename)        self.fields = self.parse_pr(fp.xreadlines())        self.bug_id = int(self.fields["Number"])        if self.fields.has_key("Unformatted"):            self.find_gnatsweb_attachments()        if self.fields.has_key("How-To-Repeat"):            self.find_regular_attachments("How-To-Repeat")        if self.fields.has_key("Fix"):            self.find_regular_attachments("Fix")    def get_attacher(fields):        if fields.has_key("Reply-To") and fields["Reply-To"] != "":            return get_userid(fields["Reply-To"])        else:            result = None            if fields.has_key("Mail-Header"):                result = re.search(r"""From .*?([\w.]+\@[\w.]+)""",                                   fields["Mail-Header"])            if result is not None:                reporter = get_userid(result.group(1))            else:                reporter = get_userid(gnats_username)    get_attacher = staticmethod(get_attacher)    def find_regular_attachments(self, which):        fields = self.fields        while re.search("^begin [0-7]{3}", fields[which],                        re.DOTALL | re.MULTILINE):            outfp = cStringIO.StringIO()            infp = cStringIO.StringIO(fields[which])            filename, start, end = specialuu.decode(infp, outfp, quiet=0)            fields[which]=fields[which].replace(fields[which][start:end],                                                "See attachments for %s\n" % filename)            self.attachments.append((filename, outfp.getvalue(),                                     self.get_attacher(fields)))    def decode_gnatsweb_attachment(self, attachment):        result = re.split(r"""\n\n""", attachment, 1)        if len(result) == 1:            return -1        envelope, body = result        envelope = uselessre.split(envelope)        envelope.pop(0)        # Turn the list of key, value into a dict of key => value        attachinfo = dict([(envelope[i], envelope[i+1]) for i in xrange(0,len(envelope),2)])        for x in attachinfo.keys():            attachinfo[x] = attachinfo[x].rstrip()        if (attachinfo.has_key("Content-Type") == 0) or \           (attachinfo.has_key("Content-Disposition") == 0):            raise ValueError, "Unable to parse file attachment"        result = dispositionre.search(attachinfo["Content-Disposition"])        filename = result.group(2)        filename = re.sub(".*/","", filename)        filename = re.sub(".*\\\\","", filename)        attachinfo["filename"]=filename        result = re.search("""(\S+);.*""", attachinfo["Content-Type"])        if result is not None:            attachinfo["Content-Type"] = result.group(1)        if attachinfo.has_key("Content-Transfer-Encoding"):            if attachinfo["Content-Transfer-Encoding"] == "base64":                attachinfo["data"] = base64.decodestring(body)        else:            attachinfo["data"]=body        return (attachinfo["filename"], attachinfo["data"],                self.get_attacher(self.fields))    def find_gnatsweb_attachments(self):        fields = self.fields        attachments = re.split(attachment_delimiter, fields["Unformatted"])        fields["Unformatted"] = attachments.pop(0)        for attachment in attachments:            result = self.decode_gnatsweb_attachment (attachment)            if result != -1:                self.attachments.append(result)            self.has_unformatted_attach = 1    def parse_pr(lines):        #fields = {"envelope":[]}        fields = {"envelope":array.array("c")}        hdrmulti = "envelope"        for line in lines:            line = line.rstrip('\n')            line += '\n'            result = gnatfieldre.search(line)            if result is None:                if hdrmulti != "":                    if fields.has_key(hdrmulti):                        #fields[hdrmulti].append(line)                        fields[hdrmulti].fromstring(line)                    else:                        #fields[hdrmulti] = [line]                        fields[hdrmulti] = array.array("c", line)                continue            hdr, arg = result.groups()            ghdr = "*not valid*"            result = fieldnamere.search(hdr)            if result != None:                ghdr = result.groups()[0]            if ghdr in fieldnames:                if multilinefields.has_key(ghdr):                    hdrmulti = ghdr                    #fields[ghdr] = [""]                    fields[ghdr] = array.array("c")                else:                    hdrmulti = ""                    #fields[ghdr] = [arg]                    fields[ghdr] = array.array("c", arg)            elif hdrmulti != "":                #fields[hdrmulti].append(line)                fields[hdrmulti].fromstring(line)            if hdrmulti == "envelope" and \               (hdr == "Reply-To" or hdr == "From" \                or hdr == "X-GNATS-Notify"):                arg = fix_email_addrs(arg)                #fields[hdr] = [arg]                fields[hdr] = array.array("c", arg)	if fields.has_key("Reply-To") and len(fields["Reply-To"]) > 0:            fields["Reply-To"] = fields["Reply-To"]        else:            fields["Reply-To"] = fields["From"]        if fields.has_key("From"):            del fields["From"]        if fields.has_key("X-GNATS-Notify") == 0:            fields["X-GNATS-Notify"] = array.array("c")            #fields["X-GNATS-Notify"] = ""        for x in fields.keys():            fields[x] = fields[x].tostring()            #fields[x] = "".join(fields[x])                    for x in fields.keys():            if multilinefields.has_key(x):                fields[x] = fields[x].rstrip()        return fields    parse_pr = staticmethod(parse_pr)load_index("%s/gnats-adm/index" % gnats_db_dir)load_categories("%s/gnats-adm/categories" % gnats_db_dir)load_responsible("%s/gnats-adm/responsible" % gnats_db_dir)get_userid(gnats_username)get_userid(unassigned_username)for x in pr_list:    print "Processing %s..." % x    a = GNATSbug ("%s/%s" % (gnats_db_dir, x))    b = Bugzillabug(a)write_non_bug_tables()outfile.close()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -