Show a patch.

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

{
    "id": 2677,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/2677/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/2677/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20200118200015.16531-4-nicolas@ndufresne.ca>",
    "date": "2020-01-18T20:00:12",
    "name": "[libcamera-devel,v4,3/6] checkstyle: Introduce a Commit class",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "b4b460ce46a63dbdcafd82359e067225885d33cb",
    "submitter": {
        "id": 30,
        "url": "https://patchwork.libcamera.org/api/1.1/people/30/?format=api",
        "name": "Nicolas Dufresne",
        "email": "nicolas@ndufresne.ca"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/2677/mbox/",
    "series": [
        {
            "id": 636,
            "url": "https://patchwork.libcamera.org/api/1.1/series/636/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=636",
            "date": "2020-01-18T20:00:09",
            "name": "Add the ability to do pre-commit style check",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/636/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/2677/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/2677/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<nicolas@ndufresne.ca>",
        "Received": [
            "from bhuna.collabora.co.uk (bhuna.collabora.co.uk\n\t[IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E653B60455\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 18 Jan 2020 21:02:49 +0100 (CET)",
            "from nicolas-tpx395.localdomain (unknown\n\t[IPv6:2002:c0de:c115:0:66fc:8b:2a38:8313])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits))\n\t(No client certificate requested) (Authenticated sender: nicolas)\n\tby bhuna.collabora.co.uk (Postfix) with ESMTPSA id 422C72911C1;\n\tSat, 18 Jan 2020 20:02:45 +0000 (GMT)"
        ],
        "From": "Nicolas Dufresne <nicolas@ndufresne.ca>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Nicolas Dufresne <nicolas.dufresne@collabora.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "Date": "Sat, 18 Jan 2020 15:00:12 -0500",
        "Message-Id": "<20200118200015.16531-4-nicolas@ndufresne.ca>",
        "X-Mailer": "git-send-email 2.24.1",
        "In-Reply-To": "<20200118200015.16531-1-nicolas@ndufresne.ca>",
        "References": "<20200118200015.16531-1-nicolas@ndufresne.ca>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v4 3/6] checkstyle: Introduce a Commit\n\tclass",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "<libcamera-devel.lists.libcamera.org>",
        "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>",
        "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>",
        "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>",
        "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>",
        "X-List-Received-Date": "Sat, 18 Jan 2020 20:02:50 -0000"
    },
    "content": "From: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n\nThis introduces a Commit class used in the final revlist list. All the\ngit commands are moved into that class. This class will be used to\nintroduce new types of commit (StagedChanges and Amendment) needed to implement\npre-commit hook support.\n\nSigned-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n utils/checkstyle.py | 48 +++++++++++++++++++++++++++++----------------\n 1 file changed, 31 insertions(+), 17 deletions(-)",
    "diff": "diff --git a/utils/checkstyle.py b/utils/checkstyle.py\nindex 4a14309..d928a5f 100755\n--- a/utils/checkstyle.py\n+++ b/utils/checkstyle.py\n@@ -458,12 +458,33 @@ class StripTrailingSpaceFormatter(Formatter):\n # Style checking\n #\n \n+class Commit:\n+    def __init__(self, commit):\n+        self.commit = commit\n+\n+    def get_info(self):\n+        # Get the commit title and list of files.\n+        ret = subprocess.run(['git', 'show', '--pretty=oneline', '--name-only',\n+                              self.commit],\n+                             stdout=subprocess.PIPE).stdout.decode('utf-8')\n+        files = ret.splitlines()\n+        # Returning title and files list as a tuple\n+        return files[0], files[1:]\n+\n+    def get_diff(self, top_level, filename):\n+        return subprocess.run(['git', 'diff', '%s~..%s' % (self.commit, self.commit),\n+                               '--', '%s/%s' % (top_level, filename)],\n+                              stdout=subprocess.PIPE).stdout.decode('utf-8')\n+\n+    def get_file(self, filename):\n+        return subprocess.run(['git', 'show', '%s:%s' % (self.commit, filename)],\n+                              stdout=subprocess.PIPE).stdout.decode('utf-8')\n+\n+\n def check_file(top_level, commit, filename):\n     # Extract the line numbers touched by the commit.\n-    diff = subprocess.run(['git', 'diff', '%s~..%s' % (commit, commit), '--',\n-                           '%s/%s' % (top_level, filename)],\n-                          stdout=subprocess.PIPE).stdout\n-    diff = diff.decode('utf-8').splitlines(True)\n+    diff = commit.get_diff(top_level, filename)\n+    diff = diff.splitlines(True)\n     commit_diff = parse_diff(diff)\n \n     lines = []\n@@ -476,9 +497,7 @@ def check_file(top_level, commit, filename):\n \n     # Format the file after the commit with all formatters and compute the diff\n     # between the unformatted and formatted contents.\n-    after = subprocess.run(['git', 'show', '%s:%s' % (commit, filename)],\n-                           stdout=subprocess.PIPE).stdout\n-    after = after.decode('utf-8')\n+    after = commit.get_file(filename)\n \n     formatted = after\n     for formatter in Formatter.formatters(filename):\n@@ -522,12 +541,7 @@ def check_file(top_level, commit, filename):\n \n \n def check_style(top_level, commit):\n-    # Get the commit title and list of files.\n-    ret = subprocess.run(['git', 'show', '--pretty=oneline','--name-only', commit],\n-                         stdout=subprocess.PIPE)\n-    files = ret.stdout.decode('utf-8').splitlines()\n-    title = files[0]\n-    files = files[1:]\n+    title, files = commit.get_info()\n \n     separator = '-' * len(title)\n     print(separator)\n@@ -557,7 +571,7 @@ def check_style(top_level, commit):\n     return issues\n \n \n-def extract_revlist(revs):\n+def extract_commits(revs):\n     \"\"\"Extract a list of commits on which to operate from a revision or revision\n     range.\n     \"\"\"\n@@ -576,7 +590,7 @@ def extract_revlist(revs):\n         revlist = ret.stdout.decode('utf-8').splitlines()\n         revlist.reverse()\n \n-    return revlist\n+    return [Commit(x) for x in revlist]\n \n \n def git_top_level():\n@@ -632,10 +646,10 @@ def main(argv):\n     if top_level is None:\n             return 1\n \n-    revlist = extract_revlist(args.revision_range)\n+    commits = extract_commits(args.revision_range)\n \n     issues = 0\n-    for commit in revlist:\n+    for commit in commits:\n         issues += check_style(top_level, commit)\n         print('')\n \n",
    "prefixes": [
        "libcamera-devel",
        "v4",
        "3/6"
    ]
}