def obsolete_old_patches(ui, auth, bugid, bugzilla, filename, ignore_id, pre_hook=None):
    try:
        bug_attachments = bz.get_attachments(auth, bugid)
        attachments = bug_attachments['bugs'][bugid]
    except Exception as e:
        raise util.Abort(e.message)

    patches = [p for p in attachments
               if (p["is_patch"]
                   and not p["is_obsolete"]
                   and p["file_name"] == filename
                   and int(p["id"]) != int(ignore_id))]
    if not patches:
        return True

    for p in patches:
        #TODO: "?last_change_time=" + p["last_change_time"] to avoid conflicts?
        attachment_url = urlparse.urljoin(bugzilla, "attachment.cgi?id=%s" % (p['id']))
        if pre_hook and not pre_hook(url=attachment_url, filename=p['file_name'], description=p["description"]):
            continue

        try:
            bz.obsolete_attachment(auth, p)
        except Exception as e:
            raise util.Abort(e.message)

    return True
def obsolete_old_patches(ui, auth, bugid, bugzilla, filename, ignore_id, pre_hook=None):
    try:
        bug_attachments = bz.get_attachments(auth, bugid)
        attachments = bug_attachments['bugs'][bugid]
    except Exception as e:
        raise util.Abort(e.message)

    patches = [p for p in attachments
               if (p["is_patch"]
                   and not p["is_obsolete"]
                   and p["file_name"] == filename
                   and int(p["id"]) != int(ignore_id))]
    if not patches:
        return True

    for p in patches:
        #TODO: "?last_change_time=" + p["last_change_time"] to avoid conflicts?
        attachment_url = urlparse.urljoin(bugzilla, "attachment.cgi?id=%s" % (p['id']))
        if pre_hook and not pre_hook(url=attachment_url, filename=p['file_name'], description=p["description"]):
            continue

        try:
            bz.obsolete_attachment(auth, p)
        except Exception as e:
            raise util.Abort(e.message)

    return True
def obsolete_old_patches(ui, api_server, token, bugid, bugzilla, filename, ignore_id, pre_hook=None):
    bug = None
    req = bz.get_attachments(api_server, token, bugid)
    try:
        bug = json.load(urlopen(ui, req))
    except Exception, e:
        raise util.Abort(_("Could not load info for bug %s: %s") % (bug, str(e)))