get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/16210/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 16210,
    "url": "http://patches.dpdk.org/api/patches/16210/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1475142110-8294-1-git-send-email-thomas.monjalon@6wind.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1475142110-8294-1-git-send-email-thomas.monjalon@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1475142110-8294-1-git-send-email-thomas.monjalon@6wind.com",
    "date": "2016-09-29T09:41:50",
    "name": "[dpdk-dev] scripts: show fixes with release version of bug",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "160dba37421f0e337dff8ba291ab8c4302a95ec1",
    "submitter": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/people/1/?format=api",
        "name": "Thomas Monjalon",
        "email": "thomas.monjalon@6wind.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1475142110-8294-1-git-send-email-thomas.monjalon@6wind.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/16210/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/16210/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 3001238EB;\n\tThu, 29 Sep 2016 11:42:09 +0200 (CEST)",
            "from mail-wm0-f50.google.com (mail-wm0-f50.google.com\n\t[74.125.82.50]) by dpdk.org (Postfix) with ESMTP id 56750378E\n\tfor <dev@dpdk.org>; Thu, 29 Sep 2016 11:42:07 +0200 (CEST)",
            "by mail-wm0-f50.google.com with SMTP id 197so4912070wmk.1\n\tfor <dev@dpdk.org>; Thu, 29 Sep 2016 02:42:07 -0700 (PDT)",
            "from XPS13.localdomain (184.203.134.77.rev.sfr.net.\n\t[77.134.203.184]) by smtp.gmail.com with ESMTPSA id\n\tu72sm13581314wmu.10.2016.09.29.02.42.05\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tThu, 29 Sep 2016 02:42:06 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=6wind-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id;\n\tbh=63T9IniFM+Y9yKxr+fdhSDxnFFxcRxFOU9b7VpupckQ=;\n\tb=r4WGwfrQIrMtC4KoZUVw07bcw+NJrZogYotOGa5P1jzLu4MMjlUu+STKnfJq0WnBX/\n\tyiSmthufOiZ5qB7O4xMs2okwsZEWRBtYQaLJW0oyziP7JHSUXaJBGz0XOCKUq4TdW3S6\n\tkFAJqsnuyqR9aagAHhdZ2C5EaFPR3RMUbd/pup4ozlGA+5dvw++ObQfuHoz+bFgHcxmX\n\tvwlkTi8h6XTyBIV61mVOYH1/f589FrMyO1Yio3FbwzGQ+x0V0bt5BiNW06H8029PAV98\n\tfy1nw+JuFW2Dypgz5L5BGk478bwxiejsEXeJVAxsqYgwTyaxZ4eAEqTHirQnFtFiOKCs\n\t3qtw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id;\n\tbh=63T9IniFM+Y9yKxr+fdhSDxnFFxcRxFOU9b7VpupckQ=;\n\tb=PVFqOMQaT5C5YYS/miSQAKtYKK5sQU88OUp+36r6x+tw/+OOsK6TibpxRVuUJXVJfw\n\tU+TBAddt6FDLAHCCCDGXiRwX2cli+EHlcn2mZkCTFh2jRqbUSN3Gia+lWASbVZHcn40N\n\tMgslSp7h9nh15XkNT8UOYZs1PecB2nW++rK9ZmXLsFyOkERsuBWQROsFPYiMkw//s1fY\n\tKQFwdbno0oE4GLvJLKbmb6HnxLBBKtQwAFGmX2fOJrW8pBJ1kXGYGPfIR5V/oc5sSVdh\n\tzdbDdt/7gMnx4FdOdXK+tM9/0XeGzQXn0/BWrY94079Lf3JxyFawS3GrMAvuPOFp3/IE\n\tSqiQ==",
        "X-Gm-Message-State": "AA6/9RmrrtsmDOW4Ck0CN0Z8dVlzDsAWg831K6k+I1qeau9nyJZCTtWulnhIcODIN0xUsuUl",
        "X-Received": "by 10.28.223.67 with SMTP id w64mr1780427wmg.84.1475142127066;\n\tThu, 29 Sep 2016 02:42:07 -0700 (PDT)",
        "From": "Thomas Monjalon <thomas.monjalon@6wind.com>",
        "To": "dev@dpdk.org",
        "Cc": "Yuanhan Liu <yuanhan.liu@linux.intel.com>",
        "Date": "Thu, 29 Sep 2016 11:41:50 +0200",
        "Message-Id": "<1475142110-8294-1-git-send-email-thomas.monjalon@6wind.com>",
        "X-Mailer": "git-send-email 2.7.0",
        "Subject": "[dpdk-dev] [PATCH] scripts: show fixes with release version of bug",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This script can help to find commits to backport in stable branches.\n\nFixes are found if there is the word \"fix\" in the headline or\nif there is a tag Fixes: or Reverts: in the message.\nChained fixes of fixes are explored to find the oldest origin.\nFixes of not released bugs are ignored.\n\nSigned-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>\n---\n scripts/git-log-fixes.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++++++\n 1 file changed, 63 insertions(+)\n create mode 100755 scripts/git-log-fixes.sh",
    "diff": "diff --git a/scripts/git-log-fixes.sh b/scripts/git-log-fixes.sh\nnew file mode 100755\nindex 0000000..cb7ed2e\n--- /dev/null\n+++ b/scripts/git-log-fixes.sh\n@@ -0,0 +1,63 @@\n+#! /bin/sh -e\n+\n+if [ $# -lt 1 ] ; then\n+\techo 'range argument required' >&2\n+\texit 1\n+fi\n+range=\"$*\"\n+\n+# get major release version of a commit\n+commit_version () # <hash>\n+{\n+\ttag=$(git tag -l --contains $1 | head -n1)\n+\tif [ -z \"$tag\" ] ; then\n+\t\t# before -rc1 tag of release in progress\n+\t\tmake showversion | cut -d'.' -f-2\n+\telse\n+\t\techo $tag | sed 's,^v,,' | sed 's,-rc.*,,'\n+\tfi\n+}\n+\n+# get bug origin hashes of a fix\n+origin_filter () # <hash>\n+{\n+\tgit log --format='%b' -1 $1 |\n+\tsed -n 's,^ *\\([Ff]ixes\\|[Rr]everts\\): *\\([0-9a-f]*\\).*,\\2,p'\n+}\n+\n+# get oldest major release version of bug origins\n+origin_version () # <origin_hash> ...\n+{\n+\tfor origin in $* ; do\n+\t\t# check hash is valid\n+\t\tgit rev-parse -q --verify $1 >&- || continue\n+\t\t# get version of this bug origin\n+\t\tlocal origver=$(commit_version $origin)\n+\t\tlocal roothashes=$(origin_filter $origin)\n+\t\tif [ -n \"$roothashes\" ] ; then\n+\t\t\t# look chained fix of fix recursively\n+\t\t\tlocal rootver=\"$(origin_version $roothashes)\"\n+\t\t\t[ -n \"$rootver\" ] || continue\n+\t\t\techo \"$rootver (partially fixed in $origver)\"\n+\t\telse\n+\t\t\techo \"$origver\"\n+\t\tfi\n+\t# filter the oldest origin\n+\tdone | sort -uV | head -n1\n+}\n+\n+git log --oneline --reverse $range |\n+while read id headline ; do\n+\torigins=$(origin_filter $id)\n+\t[ -n \"$origins\" ] || echo \"$headline\" | grep -q fix || continue\n+\tversion=$(commit_version $id)\n+\tif [ -n \"$origins\" ] ; then\n+\t\torigver=\"$(origin_version $origins)\"\n+\t\t[ -n \"$origver\" ] || continue\n+\t\t# ignore fix of bug introduced in the same release\n+\t\t! echo \"$origver\" | grep -q \"^$version\" || continue\n+\telse\n+\t\torigver='N/A'\n+\tfi\n+\tprintf '%s %7s %s (%s)\\n' $version $id \"$headline\" \"$origver\"\n+done\n",
    "prefixes": [
        "dpdk-dev"
    ]
}