|
NAMEpycocci - Coccinelle wrapper for SmPL patch developmentpycocci [-h | --help] [-p | --profile-cocci] [-j | --jobs <job-digit> ] [-v | --verbose] [-s | --show-proof] <SmPL-patch.cocci> <target> ] DESCRIPTIONpycocci is wrapper around spatch, it enables a set of default arguments and also uses a bit of heuristics to infers which arguments you likely want enabled. It takes two arguments, the <SmPL-patch.cocci> and your <target> which can either be a directory or file. The actual command run is always displayed on standard output.Coccinelle spatch is a very rich tool, it provides a large set of features for use with the Coccinelle engine. Typical day to day SmPL patch development may only require a base set of features though, we can also infer a set of features depending on your target. pycocci enables a set of flags which over time have been determined to be required for day to day Linux kernel development, for instance through a cronjob, it also uses a set of heuristics to infer a set of arguments to use depending on your release of Coccinelle. pycocci also checks to see which version of Coccinelle you have installed and looks to enable arguments depending on what version of Coccinelle you have installed. pycocci can also be used to help write and verify SmPL patches when replacing a regular patch series. pycocci checks the version of spatch installed and based on this enables a set of features. This man page will document what options it always enables by default, why it has done this and it will also document the heuristics used and logic behind them. DEFAULT ARGUMENTSBy default pycocci will always enable when running spatch:--in-place --recursive-includes --relax-include-path --timeout 120 --dir <target> The --in-place option is enabled by default as most development these days happens on version control systems and built-in version control systems can typically display differences better. --relax-include-path and --relax-include-path are enabled by default given that at least for Linux kernel development some C files tend to include headers in paths only specified by a target's Makefile through utilities such as subdir-ccflags or ccflags-y making it difficult to ensure all required header files are read by Coccinelle. We are aggressive with headers search and inclusion. A default timeout of 120 seconds is used by default. Not using a timeout is typically not a good idea. The value of 120 is used by default and is considered significantly large enough to support most SmPL patches. We make use of --dir to enable use of a target directory and its subdirectories recursively. MULTITHREAD ARGUMENT HEURISTICSCoccinelle spatch prior to release 1.0.0 provided support for multithreading but required the developer to spawn each thread on their own, and provide an index reference number identifying each thread. Coccinelle would divide the amount of work required to be done and based on the index grant the thread a specific set of work. Some shell scripts could be used to help split the work out for you. pycocci was originally written to supercede these scripts and use Python's multithreaded support, while also enabling some sensible arguments by default.If you have a version of spatch older than 1.0.2 pycocci will provide its own built-in multithreaded batched solution, the spatch --jobs argument is enabled on spatch >= 1.0.2. The spatch --jobs arguments takes advantage of Coccinelle's built-in paramap support, and performance-wise yields better results than pycocci's multithreaded solution. The number of threads used will always default to the number of number of CPUs on your system, this is taken from what Python multiprocessing.cpu_count() returns. You can override the number of threads pycocci will use with the --jobs argument. INDEXING ARGUMENT HEURISTICSCoccinelle pycocci supports using a series of indexing alternatives:--use-glimpse --use-gitgrep --use-coccigrep Coccinelle puts the onus of which indexing feature to enable on the developer. pycocci will figure things out for you and make sure that only supported options are used in specific supported releases of coccinelle. So for instance, although --use-gitgrep has been available on 1.0.1 pycocci will only it on 1.0.2. The order of preference for what indexing option to uses the following heuristics: If your target directory has a .glimpse_index file we assume you will want to use --use-glimpse. Glimpse is now released under the ISC license and performance-wise is known to work as the best indexing alternative, this is why we always check for a glimpse index first. This heuristic is however limited, you need the target path to be the base directory where the .glimpse_index file exists, otherwise pycocci will not recurse below on sub-directories. If we determine glimpse cannot be used then pycocci will use git rev-parse --toplevel on the specified path to determine if the provided path is part of a git directory to enable --use-gitgrep. Although coccinelle provides a fail-safe mechanism to enable use of --use-gitgrep and fall back onto --use-coccigrep if a git tree is not used, we avoid the failure case ahead of time. pycocci will be tuned through each release to infer the best indexing option known to use on your target path. Further information about spatch is available at http://coccinelle.lip6.fr/. OPTIONSHere is a summary of the options available on pycocci:SYNOPSISpycocci [-h | --help] [-p | --profile-cocci] [-j | --jobs] [-v | --verbose] [-s | --show-proof] <SmPL patch> <target> ]
AUTHORpycocci and this man page was written by Luis R. Rodriguez <mcgrof@kernel.org>REPORTING BUGSSend a mail to <cocci@systeme.lip6.fr>COPYRIGHTCopyright 2015, Luis R. Rodriguez pycocci is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, according to version 2 of the License.SEE ALSOspatch(1), pycocci(1), diff(1)
Visit the GSP FreeBSD Man Page Interface. |