{"id":2671,"url":"https://patchwork.libcamera.org/api/patches/2671/?format=json","web_url":"https://patchwork.libcamera.org/patch/2671/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20200118035448.230530-5-nicolas@ndufresne.ca>","date":"2020-01-18T03:54:46","name":"[libcamera-devel,v3,4/6] checkstyle: Add support for checking style on staged changes","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"7f977980952bcd752bbe6ec17d0c18ace0dfac20","submitter":{"id":30,"url":"https://patchwork.libcamera.org/api/people/30/?format=json","name":"Nicolas Dufresne","email":"nicolas@ndufresne.ca"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/2671/mbox/","series":[{"id":635,"url":"https://patchwork.libcamera.org/api/series/635/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=635","date":"2020-01-18T03:54:42","name":"Add the ability to do pre-commit style check","version":3,"mbox":"https://patchwork.libcamera.org/series/635/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/2671/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/2671/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 AEC5260452\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 18 Jan 2020 05:00:02 +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 538DA2913C4;\n\tSat, 18 Jan 2020 03:59:58 +0000 (GMT)"],"From":"Nicolas Dufresne <nicolas@ndufresne.ca>","To":"libcamera-devel@lists.libcamera.org","Cc":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","Date":"Fri, 17 Jan 2020 22:54:46 -0500","Message-Id":"<20200118035448.230530-5-nicolas@ndufresne.ca>","X-Mailer":"git-send-email 2.24.1","In-Reply-To":"<20200118035448.230530-1-nicolas@ndufresne.ca>","References":"<20200118035448.230530-1-nicolas@ndufresne.ca>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v3 4/6] checkstyle: Add support for\n\tchecking style on staged changes","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 04:00:02 -0000"},"content":"From: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n\nThis introduce a new command line \"--staged\" and a new special type of\ncommit \"StagedChanges\". It will check the style of changes that are in\nthe index, so the changes that would be committed by \"git commit\".\n\n\"--staged\" was chosen to match with \"git diff --staged\" command line.\nOther valid name could have been \"--index\" or \"--cached\". This was\nmy personal preference, alias can be added later. Note that we must\nnot confuse this with working tree changes, as these changes are not\npicked by \"git commit\".\n\nThis feature is needed to implement pre-commit hook.\n\nSigned-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n---\n utils/checkstyle.py | 36 ++++++++++++++++++++++++++++++++++--\n 1 file changed, 34 insertions(+), 2 deletions(-)","diff":"diff --git a/utils/checkstyle.py b/utils/checkstyle.py\nindex 828605a..1cd5476 100755\n--- a/utils/checkstyle.py\n+++ b/utils/checkstyle.py\n@@ -481,6 +481,25 @@ class Commit:\n                               stdout=subprocess.PIPE).stdout.decode('utf-8')\n \n \n+class StagedChanges(Commit):\n+    def __init__(self):\n+        Commit.__init__(self, None)\n+\n+    def get_info(self, top_level):\n+        ret = subprocess.run(['git', 'diff', '--staged', '--name-only'],\n+                             stdout=subprocess.PIPE).stdout.decode('utf-8')\n+        return \"Staged changes\", ret.splitlines()\n+\n+    def get_diff(self, top_level, filename):\n+        return subprocess.run(['git', 'diff', '--staged', '--',\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' % (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 = commit.get_diff(top_level, filename)\n@@ -611,7 +630,9 @@ def main(argv):\n     parser = argparse.ArgumentParser()\n     parser.add_argument('--formatter', '-f', type=str, choices=['astyle', 'clang-format'],\n                         help='Code formatter. Default to clang-format if not specified.')\n-    parser.add_argument('revision_range', type=str, default='HEAD', nargs='?',\n+    parser.add_argument('--staged', '-s', action='store_true',\n+                        help='Include the changes in the index. Defaults to False')\n+    parser.add_argument('revision_range', type=str, default=None, nargs='?',\n                         help='Revision range (as defined by git rev-parse). Defaults to HEAD if not specified.')\n     args = parser.parse_args(argv[1:])\n \n@@ -646,7 +667,18 @@ def main(argv):\n     if top_level is None:\n             return 1\n \n-    revlist = extract_commits(args.revision_range)\n+    revlist = []\n+    if args.staged:\n+        revlist.append(StagedChanges())\n+\n+    # If not --staged\n+    if len(revlist) == 0:\n+        # And no revisions was passed, then default to HEAD\n+        if not args.revision_range:\n+            args.revision_range = 'HEAD'\n+\n+    if args.revision_range:\n+        revlist += extract_commits(args.revision_range)\n \n     issues = 0\n     for commit in revlist:\n","prefixes":["libcamera-devel","v3","4/6"]}