From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755123AbcFQJog (ORCPT ); Fri, 17 Jun 2016 05:44:36 -0400 Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:8327 "EHLO mail3-relais-sop.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753128AbcFQJoe (ORCPT ); Fri, 17 Jun 2016 05:44:34 -0400 X-IronPort-AV: E=Sophos;i="5.26,483,1459807200"; d="pdf'?scan'208";a="181600224" Date: Fri, 17 Jun 2016 11:44:26 +0200 (CEST) From: Julia Lawall X-X-Sender: jll@hadrien To: "Luis R. Rodriguez" cc: Julia.Lawall@lip6.fr, Gilles.Muller@lip6.fr, nicolas.palix@imag.fr, mmarek@suse.com, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, gregkh@linuxfoundation.org, markivx@codeaurora.org, stephen.boyd@linaro.org, zohar@linux.vnet.ibm.com, broonie@kernel.org, ming.lei@canonical.com, tiwai@suse.de, johannes@sipsolutions.net, chunkeey@googlemail.com, hauke@hauke-m.de, jwboyer@fedoraproject.org, dmitry.torokhov@gmail.com, dwmw2@infradead.org, jslaby@suse.com, torvalds@linux-foundation.org, cocci@systeme.lip6.fr Subject: Re: [PATCH v2 4/8] scripts: add glimpse.sh for indexing the kernel In-Reply-To: <1466116292-21843-5-git-send-email-mcgrof@kernel.org> Message-ID: References: <1466116292-21843-1-git-send-email-mcgrof@kernel.org> <1466116292-21843-5-git-send-email-mcgrof@kernel.org> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-1784731914-1466156612=:3164" Content-ID: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-1784731914-1466156612=:3164 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: I'm not sure that this is worth it. It adds a dependency on a tool that seems not to be well maintained. In terms of Coccinelle, I'm not sure that it gives a big benefit. Attached is a graph showing the file selection time for Coccinelle for a selection of fairly complex semantic patches. Coccigrep is just a line-by-line regexp search implemented in ocaml, gitgrep uses git grep. In most cases, glimpse is clearly faster. On the other hand, it seems that glimpse often selects more files. Sometimes a few more, eg 16 vs 14, and sometimes quite a lot more, eg 538 vs 236. I suspect that this is because glimpse considers _ to be a space, and thus it can have many false positives. There are, however, a few cases where glimpse also selects fewer files. The file processing time (ie parsing the file, searching for, matches of the semantic patch in the file, and performing the transformation) is normally much higher than the file selection time. So it seems that git grep is currently a better option for the kernel. julia --8323329-1784731914-1466156612=:3164 Content-Type: APPLICATION/PDF; NAME=fl.pdf Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME=fl.pdf JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdGVy IC9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nNVdOa/tuJHOz684oR2MzH1JDRgG JnPrhc6uWy0buuOlPZi/P7WSpdcK7KvEwsPDPcWvviIpamFxKf797Rb/dvhP /n58vn7zQ33/9POrvv/v5d//Df//8nLv37+id2+f3PvzVbP8PF7ry/ug6fwz cHpwI51+dknuM7kb9dhGOv0U9VRHMv8U9VxGOv0U9ZJHMv8U9ZpGOv0Udff+ 6fX3l6f6v+XPx+f7t9/gGrR3f3/bXnxV/Nv3umS4SuX97fP1q+B+/e0vL98Q +/an16/Sd3L5Tm4k/+7b6w/mMuKvEJ3UHwWXlpwqXZopDbT0BQqvqEiKxpiW nrygKimaHLTvQFUaaMlLjEVRkRTN0S05ZkFVGmjPS40KsqBYKW7piomgWA1l 8aELqNJAu19iSIiWKSnacllyUMMqKdqDX6pXyyoNtJWl+6aoSIp6lwMURFCV Bup9XaJeRZUm2sKSJ8rSQEOqUBBFRRpo9AEKoqhIE61t8RNlaaApxSXKpRJh YNm1RZtOhInVuNSBkTCwEtvS9BqqNNAKt6YbqEgThVszTJSlgTa4NdNARZpo 70uZKEsD7SUtTdtOpfn0wK3p2nh6WJoo3JuhyWVSaaAe7s40uCINNIS8lIGK NNHuljaeWpEQ/VdfLeldy5LwDsd3i6d3BTwweYGXTqX3R7BpjZIiJf3mB7pr 0Rya+i+0WZZYnC/v5hePfLD5vz//+I/3P//8+eP7j7/6+cePv/7Pn37+46/H K4kL8o+fXjHinRDhmuPNRhJc4xrTO8Jj5FKE5mSUG5p/f0DF29JzHSl80zCT 766pifdoWApc3sGKxmZUzZGjonEybTk/Xnolf/j9QysAn7kg+dGrlKSalwaN mLxYaYzCu3v8hjyalEBSYptM+l2mJudISkJKxmRSxZGhomEQbSnxsj+x1NB1 oHefp7b9ZKkEQOs7O71HGE30/uLfkEXVe0TQOpn0O09N+sRT6w5WNDajao4c JUU6VsS05cSr/cxyQ5/M4Tc6LqHgd5UkaI3oMnQX2EqrjGZobf0NeRQuwUCL YZZpEzVBgicrwHd+sKKxGYem5igpVBph2nLi9X5mueF6U+vXBe55LDd9R9sS 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 76/xlU44zeCtFdq1OGiXySud0BnhBmm0b3RoXyavdL6k9z4veJ7c1L5MXul0 xNwC3FtW+Sp1pXP+Ih5GnE7Kl8krnVQHbiqFKTLal8krnboWyBdIVvsyeeWT wujMZTx2dqpfp69yrhWuBD1flOv0VU9vct830HX6yicR4aRzjqcmuk5f+eyc ixvgOn3lk15iKktr5/Jfpq98NgkeUNfD2f5l+sonaVS423s8Xf7r9FXOfXC4 tOHUuNfpK59SgFuJoIIn/cv0VWLqJ+zN9pP+ZfrKEeBDdAs8pFb/On3l6OU5 wHWL4ax/lb5yvG3vQvnuOblOXzlWdIh9if70XrhOXzm6ccC1OuWsf5m+agzf X9yf1+mrxKOVYx+s/mX6yvFUA968VvmXiSvH/gwpLTmcWvY6feVIlTgXlE43 zmXyylEVcQU3ODgn9cv0VWIARni91PN1vExfOWJdoH1wp/fIdfrK8dUwJnsp p/vsOn3l2GABbteazvYv01eOZgVfMrgMp8tznb5y7KVA21jP9i/TV44UhEcV 0Q5Jo3+ZvnKUm4yXLZ/re5m+clwW3HJyvhkuk1eOIZLg7ejOT/l1+soRLwJ8 ws4P+WXyytEZIjja35XlKnnluAJ46FYJ54/sZfrK++KxxZ0/PVHX6Svv5L7o KVynr7wL+eJOu05fed8s3lGun+6c6/SVd3nSjvHztb9OX3lfYvB1qf10Oa/T V95Th4Gbv7tzrtNX3gXWcsblDCf1i+SVdyxFeI+68/vyOn3l/TV4vHM8vy+v 01feEVJxzUY7PVfX6SvvZsB+hz9/D6/TV15/Dx8D6Iyd9S/TV14vfqV/mb7y +uYYwlLP74Xr9JVX5Bbo8OECKqt/mb7y+tGA1+F0OS+TV13r6M6q36etvCIP ehpLP7+9r9NXXj8GPTiozvmqXKavvNoJ7lfeVWX0L9NXXp2TUvjuY3KZvPJ6 kosn9jp91VUTp6vyy7SV5/sx0sD3di/TV56d/uU7+DJ55ZnUDj3s77441+kr zwLiy9Z/r3+VvvIsViqRjluw+pfpK8+7XDgZ1+krzxTgFqPWzo10mb7yuHY4 P6W/TFt59PXiy32dvvJYYcAgSuFUjuv0VUfEftGDu05fZTwHhyDduTyX6SuP PiToAdTvynOZvrKvHFr5hf3LdPSA0ccVDzi2SO2OoYWxlVg6MNzqwA7CklNp ExPiJH/FxC6eNHr2+ELGSE8gVZYOjIczsIMw3GvA0vZl5i4eOXSxqFuO+3Kx u8LSgXsUB3YwVlTavszc1bPPOHVAe1E5WiZJx4sX9FeRGOsibV9m7jpCALX3 FOkGj0jAK4PSgbN/AzsIw+iTLG1fZu4y1pBCkhhqeC5AciwdL/wcKHYwllTa vszcdcwCusGu4sggxsLHMw1ROl74UVHsYKyqtH2ZucvYR4qBNhR9vjD+e/Is HXS6vWIHY1ml7cvMXcdQErquno4Ux6jnybF48Bnvih6CJhW3W+x9jMgkHnnB A83DHIg59LjzKdIiBhW3W+x9jO8kPvCb91qgoi5pPF7jtO9jjPr8a9q7jgZh rGH89uDR1w7faCwefBK2ogejeDwyi9st9j7GlqqjmIHIxycts3jwadCKHoJ2 Fbdb7F1HqsDpkCV4dApxCiwefBKyooegRcXtFnvXcS+Pn0O+dhTP1nsSDz4H WNFD0Szidou9j1E0j0uyqfQY3LV0Fg8+BVfRg9EaVdxusfc5JufhKcMPGp2+ 2juHiT/kBFhBD0bhsRRxu8XedYQvQXF54R+dPJoqiweffqrowSjuYWVxu8Xe x3ihq32hm5YP3cwoHXLuJ2OHYp2l7cvMXUcd55NKJ03OJ5UOk5xPKqH2Ob/D 3nUMs+Cyuo5Fp0MXi2fx4DMfFT0EzSput9i7johiNBxeBEFnDuIyNBQPPvdQ 0UPQrOJ2i73r+Kq5dtSDnNeOupDz2iF6uvI32LuO1kbcCubw60Onz8XC4sEn 4Cl6MJqcitst9j7GfscGRT21jcRjHBg3RFoaoeJ2i72PkWTcVU0dWDnMjMVD T1abIq0wV3G7xd7HuDTurCE6nxZWUDr0XLGmUqadfyxtX2buOsaNnUgco8Nj tOjRZPHgU7UUPRjFPiaL2y32riPmEQ/vpC3BdJpTrCwefKKUogejyau43WLv OgIf8RNPoUDoJKNYWTz4NCVFD0ahiyDidou963h+rpHGsfHoIOx+ZBYPPklI 0UPQruJ2i73r7EDsPOpOjukchD/4FB1FD0aTV3G7xd51rgFd35aI3tktbvgO pONZBDsYQ7e48dv1q8xdZyywmKHi24kOMIH2IPHg81MUPQTtKm632LvOf6Ab 4Rxds0gVYfHgM0QUPRhFJ4PF7RZ719mU+V2gsyvmd4GOp5jfBULtV+UOex9z M+AkeW427IziVKTnlsp1ooegRcXtFnvXmZ6Cx590ClqOndGSWDz4BAVFD0Gb itst9q7zRvObSBH85zeRgvTPbyKh9ot6h72PeSh4JXNfiKLXp5Kkt0MB6hU9 GM0ujZ7UHfaus1pm+Kufx7/6eQCsfzeIdoe96ywZrjhIiUOl41hXYPHgyOmK HoIWFbdb7F1n3XAMG6PHIR8rk1k8OH64ooegXcXtFnvXOTx8QaREAVU99cRY PDiatqIHo/j6YHG7xd51RjCCi9Uq8alTWlk8OKK0ogejkKOI2y32rvOLs19A gY1nv4CiF89+AaG2V3GHvetsZayVZnQwmDBWJrN4cGxhRQ9Bu4rbLfauc584 GIar9jCQbuKRMhQPjqur6CFoVXG7xd51JjV2moDGKLJxTEcfHFNWsIOx5EXa vszcdT4W26QXul9q4BZD8eCoqooejGKLsbjdYu86u9tjWwodwklRPbtn8eDI oooegmYVt1vsXWeLwchCg0oU0DJlkg6OqSnYIVgXafsyc9c555wCrbVCMi0t YvHgSJKKHoIWFbdb7F1nsDN8gjMduklRDHNg8eA4iooeghYVt1vsXefDcQEh b1KhgH5YPhQPjieo6MFocSput9i7zq7HVpdKsx3UJy0kHRxRT7CDMfiMsLR9 mbnrHH0KXgMHcWfUi++cubs5RZpD9sMvv8PedcYfuzWBfJ3MnVEWD46jpujB KC6wCeIp3WHvY/0AeO7c76cYXtDLk549helS9BC0ueE13GHvuhoBLxb3Qih+ FXa1uZ9BIaoUPRjFS6l9mDvsfaxuMAGjvB1ROYVnOl6niFHHWAfxNfauayYK fOlxBSVN7YFYWTw4dpKiB6PVq7jdYu+6AgOPm+aeN8XswQjO3LemsDyKHoy2 2Ea//Q571/UcGT+uHCiKOqM5yHwehaRR9BC0hzFPeIe9j9Uh8MZvvOUaO6P4 OUDx4Igxih6MwptLxO0We9fVJviIuoyvKopXgj4PigdHTFH0YBQfYBa3W+x9 rF1JHEQk64zYCOVxvEYEkWOsavnXtHdd8ZJwLUmk4Dvc2WTx4Kgaih6Mpqji dou96/oZfOtn3mBJnc3E4sExJRQ9BG0qbrfY+1iP4xxFVcIAClCZ1lg8OJ6C ogejPai43WLvuroHeu+0ngzDCFBlWDw4qoCiB6Pg1Im43WLvulYI12FJ+BTs dOLsYqVeLO1kV/RgFEyKuN1i72PlEfgNMRC9s1MR6W1Ao6hVJcK6SNuXmbuu X5pjVrS3eY5Z0fblOWZFqB3xusPedTVUxEUZNGpE+3pjbTIuRFt3FT0YxWgn OuZ0h73rGqs5Mk57WufIOG1bnSPjhNpx9TvsXVdszfFZ2s85x2dpy+YcnyXU ju7eYe9j/df47us+SPmy65bHIaZzr+EOex+ryTKv+8dNiHFuAzh0i+IUaSuU itst9q5r0zIed8f8JIvJPROwe6noIWhScbvF3nWlW8JHn0IM0z4wnHVA8eC9 aIoegmYVt1tsmql+O945Vim8B54F8Km/cd1yetcy9nI3EHifN4YHqmXsAUcg WUoSW6SFv6GbBqqT4oYtx1qaCQHNUtqwtUlxf/j9I4qLqxJ/ev395R2VWv58 fL5/++31mx/au7+/aY38u9aA5hb//vb5+tVPx58///bzj7/+9pfX7769/jA3 +HH5Ar1Ix6JIp9v7LtB/vxDwXohciD//86d//Pg3UwhZY8nZeM8L2gotQ+AF bE3SD0n38kkaayv/Xer+hQq4tmSqwMdfPz7+fKrCH17/D41qJRdlbmRzdHJl YW0KZW5kb2JqCjYgMCBvYmoKODQ3NQplbmRvYmoKNCAwIG9iago8PC9UeXBl L1BhZ2UvTWVkaWFCb3ggWzAgMCA4MDggMjMyXQovUGFyZW50IDMgMCBSCi9S ZXNvdXJjZXM8PC9Qcm9jU2V0Wy9QREYgL1RleHRdCi9FeHRHU3RhdGUgMTIg MCBSCi9Gb250IDEzIDAgUgo+PgovQ29udGVudHMgNSAwIFIKPj4KZW5kb2Jq CjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsKNCAwIFIKXSAvQ291 bnQgMQo+PgplbmRvYmoKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9nIC9QYWdl cyAzIDAgUgovTWV0YWRhdGEgMTYgMCBSCj4+CmVuZG9iago3IDAgb2JqCjw8 L1R5cGUvRXh0R1N0YXRlCi9PUE0gMT4+ZW5kb2JqCjEyIDAgb2JqCjw8L1I3 CjcgMCBSPj4KZW5kb2JqCjEzIDAgb2JqCjw8L1I4CjggMCBSL1IxMAoxMCAw IFI+PgplbmRvYmoKOCAwIG9iago8PC9CYXNlRm9udC9CVVZDU0QrVGltZXMt Um9tYW4vRm9udERlc2NyaXB0b3IgOSAwIFIvVHlwZS9Gb250Ci9GaXJzdENo YXIgNDgvTGFzdENoYXIgMTE2L1dpZHRoc1sKNTAwIDUwMCA1MDAgNTAwIDUw MCAwIDUwMCAwIDUwMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MAowIDAgMCA0NDQgMCA0NDQgMCA1MDAgMCAyNzggMCAwIDI3OCA3NzggMCA1 MDAKNTAwIDAgMzMzIDM4OSAyNzhdCi9FbmNvZGluZy9XaW5BbnNpRW5jb2Rp bmcvU3VidHlwZS9UeXBlMT4+CmVuZG9iagoxMCAwIG9iago8PC9CYXNlRm9u dC9DTUVKVlIrVGltZXMtQm9sZC9Gb250RGVzY3JpcHRvciAxMSAwIFIvVHlw ZS9Gb250Ci9GaXJzdENoYXIgMzIvTGFzdENoYXIgMTE3L1dpZHRoc1sKMjUw IDAgMCAwIDAgMCAwIDAgMzMzIDMzMyAwIDAgMCAwIDAgMAowIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAg MCA0NDQgNTU2IDQ0NCAwIDAgMCAyNzggMCAwIDAgODMzIDU1NiA1MDAKMCAw IDQ0NCAzODkgMzMzIDU1Nl0KL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9T dWJ0eXBlL1R5cGUxPj4KZW5kb2JqCjkgMCBvYmoKPDwvVHlwZS9Gb250RGVz Y3JpcHRvci9Gb250TmFtZS9CVVZDU0QrVGltZXMtUm9tYW4vRm9udEJCb3hb MCAtMjE4IDc3NSA2ODNdL0ZsYWdzIDMyCi9Bc2NlbnQgNjgzCi9DYXBIZWln aHQgNjgzCi9EZXNjZW50IC0yMTgKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDEx NgovTWlzc2luZ1dpZHRoIDUwMAovWEhlaWdodCA0NjAKL0NoYXJTZXQoL2Mv ZS9laWdodC9mb3VyL2cvaS9sL20vby9vbmUvcC9yL3Mvc2l4L3QvdGhyZWUv dHdvL3plcm8pL0ZvbnRGaWxlMyAxNCAwIFI+PgplbmRvYmoKMTQgMCBvYmoK PDwvRmlsdGVyL0ZsYXRlRGVjb2RlCi9TdWJ0eXBlL1R5cGUxQy9MZW5ndGgg MjIyMz4+c3RyZWFtCnicZVV5VJNXFv9iSL6nRUYTv2JQk0xnaltX3Kq01qUs OkpVwuoaUUIIkoUlLCFEAmF9BDCExbBEtoRNUBQExl1wr6JWDdYZpEet1elM 7enM+zjPP+aL58zpH3POO++89+59v3vfvb/7LovwmEKwWCzPMIVSlrxYolZG q9z7RfQcFj13Cj2PDbFqsnZyPWceEVzPng492dDT49jcqTN56NxMVPMHZJpB sFmsdEuLv1qTkaSQx6WIPw2XRH62cOGi30+W+fn5iQ9k/E8iDpAlK+Qq8Xxm kSpLUGuUMlXKl2J/RjshQXFQLE/I0MQli6NjYmQx7msR0QmyQ+IgRYJCo1Gn ij/1/0y83Nd32WJmWrVNoTygTRa/91y8Te0nDhZLZHJtQnTS/0sIguCpNUnJ KQdlckWC0nfZ8hUrP19DEDuIECKUCCPCiQAiiNhMbCG+IbYRMwkewSdmERTh TQgIPhMnwoNRvc9axro+ZeGU3Ck/sAc9vD3COB4cGecEl8st5d4k/cjzdKEX XWh00sudrLYX6OgLNiql91P4Q9+FWIjnvJqPeIj35t9IiLyXvsazRAY1NX51 IZ6HOfs2bYiJbT6VKlJfyLwH74PXQzfuCxksrKzT1WcgpbGT9rrGezSOtBPe /HwrPY+ylligFYLjFuMe0bs4EkZmZ+/IA/z5OpRP8vfVkxtKDFXwJkDLyO74 ZmMfBGjaj8gDfYxmBD5fECpNCpeKXGSeOTw1zhCmE6AFG6j2Kz2DD8+uxwCz d23w3yPpaRd6oQloo7+ysx6Psy20D3W01FpSDUGLNVMqwqUk3GkybT0M9Mhk IzeV6mxwGCAt2dl/znHEmm+sEtZmVeXVQNBsq3N2pdoV0aqUgF2iH8l8c4RW btiRLvCiBcbGw3Z6id3QyDt/A/nd8+YvQnfRHaoAzeVkc4uKckzFxQVQkAeN 5uxywK+r0GrLEueslUT5h3YefLZbNBLfnVaXDBME0kPqKEVCTWO6MLUlp8kw DDKxbw3XUllmZvzlB1vh0aImJjx1eU5HQf0c162Re+eSu7b3iDBxS12rb4EO wakO5+Bwu2J5E/PqDuMF2rOTV4Py8Tfj3vxnqIKOoPij8xHgVhaX5glNOXk5 JqMsbP/uzALAf5ZtyjPl+8DCkqLSIsAfvYgvcVe377969mTzhS6hoSo1SWfU QkGs3nFThHpJ/rNfuF70DuMDmtPGanGx6Y+QL7U7UJ4sgcB36/eI/PXy/ac9 NdmxlaIj2gp1fcYxKGhtbGi6Eji0eldUmvyAaKdUvQmuBfjDJ0sQe+BUbUeP 0NHc4Gi/Cty4o0jVicgeFr0IraF2r9+v2golcH+bajjjpKmr6DpA17m5t41t SZ3Knr3HIuFOuCdDpthzQBMA/QAWPliFyNePriKiT4jH0CKqauz4ievwOmxW 16wEbkaqhtEKO/JuQfG95U6W8x7KdDmcbDqenk31riPToL40zaKtmK2p1JQn QrBko79vsEP2bbwoPSNDl5cfrzKkwTSYWn34dFpApCYexoKIMenrR2OtfReE JzvqOuFJeGNP38ZSTB2ZHWFOssJaaO/qdlRYiy3FpbChqKb4CDwBT9k6HF1O Wzc8B9vym7I6ATa986G6TN/nnYXgZZdBHrI+BnNWhLSdabLU9J0TlaNX1FVn 92BHq05ZK6yPq94LY0CoKm7v9ujbb9wJZ2j+ga3bjqa/5Y29/ZzJ+W/I3126 S8M4erKipNpcU2KFgub3xNeT0N+YHVTAEN9oI/9SnlsJHwCESD4dhVIpTUqK Wt2Y4mxramxzpjSpRO/RWT+Psxsm2dQRblVJdUkFBJ2VWUzhJpIwPMsQnM9A ZdvI4LLDlfAyoH8iC8yROpkxSCfwmmxgXJt3gTUxjoLdg91Af0TVlFaUVEHQ as3cLcJH3Bj60GIGI8lGRpj1VbAXoG4SmisqLZaWpv66bgjONMYFirCShKHZ 2RK35yk2UlKir4M3ACon2/u76gchGK7XrBFhOQklubkhJkZJbSMTzUqzoR72 CtABEk2LubYuJCoxJFyYMaxwhEMpVGetCQaPSJM5Kl2RHaZnSrowq3WS18pq foNq3rCRZXINFQajdbFxIaEyTEI8FWJWF546FHpCej55BJ6H/XU93SOXTyIA 0XSAon3RH7G3sDCRGh/AHCzDMql41Srpf1AMihtA7AkRY4AJyMWj9+0spJhg ozOMAbzZl5NFVpdXlZWZ6y11ZZUQHLPqD4ne7SRhfG5KZo4+J6sw2h2gNhu5 tiSzEv4V0P8g3VCP6aaHLPRygk2r0TzKUB4rMeTsgwKcy0VrUcDzV72P4Zjg X1+4/hQWqT0YKzyk0B/SBRzLn33q557OUQjGhyWrv9q7ZPVyEQ7CIZzDtI8b NauHfnmNhx48kT3w5o+ixejv1FXYVNScc0PbK4FBYLVky0ZNmqU5Vqis11l0 EKTos1Lj+rX3XE9aTw+Jhk63jsA78HzmkKojrTG9WtrA/DGjQy0nLvk83Xpl 6U6p7pBcqNToE7XbbQWzT3830HUTgtsD0mC5Xp6UJFIq1fpNye5ahXb0yS3m ++ahgbF1Lm/+KzoBZVIf0yFSLr7zLoSzFR3HX5L8X1zoy7dcvPkWhU1cZEJv OO43OGmPQdbxV6jsBZuWTG6gMNcYkv51FCbW7cBciH3gSseK/p0npZeSbzDN ZcbEa6atzfr6KSalqSZZsMiBFjLthkDLWgE+gHupiXP+eCaeErMtcEX4T2jp +Qqn3SY6VtthZcj53tykl5N35XHgQ6QeDXvszXehfpqk/nmxuw/eBX/zv/YJ Zn2x2XdLg+q3pUL+c0z4aRM2+Sx4sglxkKfr21+FfBd0Kc7i6S9Axp+p7yKb 5TAUbNm3b8v6qJEfbjX2jQwJz7qo5SPyQXgFjAycvnm3XxokUe+TyIT5hRAW FAKvNDsdYUdhdm77tGcftFd4ej6r95xOEP8Fw6RIcgplbmRzdHJlYW0KZW5k b2JqCjExIDAgb2JqCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUv Q01FSlZSK1RpbWVzLUJvbGQvRm9udEJCb3hbMCAtMTY4IDgxNCA2OTRdL0Zs YWdzIDEzMTEwNAovQXNjZW50IDY5NAovQ2FwSGVpZ2h0IDY5NAovRGVzY2Vu dCAtMTY4Ci9JdGFsaWNBbmdsZSAwCi9TdGVtViAxMjIKL01pc3NpbmdXaWR0 aCA1MDAKL1hIZWlnaHQgNDczCi9DaGFyU2V0KC9jL2QvZS9pL20vbi9vL3Bh cmVubGVmdC9wYXJlbnJpZ2h0L3Ivcy9zcGFjZS90L3UpL0ZvbnRGaWxlMyAx NSAwIFI+PgplbmRvYmoKMTUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2Rl Ci9TdWJ0eXBlL1R5cGUxQy9MZW5ndGggMTQ3MT4+c3RyZWFtCnicZVN5UBNX HN4lwG4FUUl3rENM1lYxDB7gTavjjLfIJSK01gC5gEBCYhKCFEJCAKHzBMJ9 H5JAKkbkPlSEapGJw1BHxuq0akenFlunU6d2+pZuO9NdKNM/+s/O233f+/Z7 v+/7UMTdDUFR1CtGoZLrNh9QK2Xs6ybKD6V4btRaDqD3zt+eD/VYi4Q1eywH 3hzg7d7O8/zQF15bBStWQMtKhIOi58ttB9WaLK0iOUVPCk9HxwUEBm7670tw SEgIKcla2iEPyXWK5HTSn1kY5Eq1RiVP139EHmTQSqVCSiYrszQpOlIsk8ll 7LFYsVKeRh5RKBUajdpACg8GkNuCgoI3M4+dEQqVJENHRqtV4nQyQh1ChpHh cpkiQ/X/DQRBfNLVWp0+QyqTK1SkMABBIpEo5BQSg5xGYpFDyGHkCBKKRCAo 8g6yDFnBTAZxR7KQCZSHNqHfue1zu8jx4CRxRt1T3VXug+5/U8U+1ASwUb4z yTbfh1AA+VCwmjsCUygxQZ/SeQ4XVOUBMU5fx4A43xJvwXWw0IYlWU0NoAeH rRgoq6iursK5j9sv2Wrb/bqbNKcE9AUMJOVmK4oYsMmGyUrzasEgDsuw57G3 QyJF6qgkvg9VbOyi9nWhdrgRBsONHFhGqQiaK3yf5tEf/LwerobE67eMHDLw LU0ILiqJyZYYeg+9JTPuZFTmLegPDzWPuwQ+VBSjPdiW3+r7jNV9H6azuk/q PIcKa3KBdEG3JM+ckM9IabFhEWWmOuDC4Uls3DHkrKwqyK7ht2gaLB0A7+lw 9Am4QSMK59lP5JpjZxmJa4xXqT1OtPNXyH/Nga/gtwTckIEV5hReMIFCkFeS bU2t0ZdlADzoePju4wOiN4mCr1UOLUjDZapz8YdFIy8MfDUdYvesaSuvqAJW UPl5dVGnacLsAPiP91wvH8iGhIOCo1+o7eAq7nTYezs6zYZL/LbMmqyGBNwH Pjc9gH8Oo7NQwIGTzL02w31az4id0vjQGFwzTj/GQoek92f6Lz8d4GtrMuXZ RgNYozY39Qvglz9hjK3GaWU7xbf5Ti/Zeh6+ziWGGmxl0xWuivfasYQSZhxD OPyLFumwsaJaE0jE6WsYdyQ11WBW+0lyWm8J4BwdpcMG8istbAys2PaxuGfj 3Y1jk8yAoowz1BrWw3UcKgiiRJL4nFEC8B0xLyDvtyv3xhsb8s3lAqsFACC+ eKZZ3wPwwQ5bn+vYje00b+M6ej3NfymEKx/f6Xo4KWAF38lop5bdgUdtvnYo hLtZzTlwLpcYrbNbXRWuSkazqDS3jkkTNUun6bCZC1UFQITTJ7DEUVWjCOC0 WwhJbxBwnTTvkfD3CWfj2HV+8RQBCvM+M+Vm6g1mxq1Y7RTkQqLz7qSzSyev Z0NknIWRPXBHF0r5w1WE9IwyKxHIQHqzoTvrSr6z6D4OrZ6F3+dcT+tN7RO1 xjD/WbVbSPvT/k8D4conN6+8mhbQDXA/UQq9m/tvAgdoya5UWs+XqEs+xnMw H9i1kNJv4FbfKbiV9mfv9QrK2KjGMBWzVFmAZDGqBfkiMxPVfBuWYjXVg16c ++Yw9QeRmJIijnemDg9fdQ4PKboTBT7zD5dK+2DR3UWHb0LpUnELa0xLrObF AhSwrGaWlS1ueWNLXTXOfdLY1lTR5NfXoI9cKK7EnJtUzIBzGXAZ0/JFsJUF X2pikADvbdBFLUDFZpOchVqYjpeYa9kkLXY8Wq4/EcdX3UuxhYEwINLII5k0 lzKBnt/Vio5CDw68Ox9KhKeqDTLJrq0i2gvQBAiyb7uxf/TgkPSXKNyBRV/T dhhGVC7jHIBrAeTXv3FMtQ3bOqb68X954AGGqJPeS7icjrbegedzo9ALwHfB nPaHTx+JZhP7A+7iauyrJLu2Lf5yeP0WQPMAzTf6qyMzE7TnIqW4T2YrJW6F ca2ezmWQ9HI6vb0h2e69HEH+AWan5+IKZW5kc3RyZWFtCmVuZG9iagoxNiAw IG9iago8PC9UeXBlL01ldGFkYXRhCi9TdWJ0eXBlL1hNTC9MZW5ndGggMTMz Mj4+c3RyZWFtCjw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2Vo aUh6cmVTek5UY3prYzlkJz8+Cjw/YWRvYmUteGFwLWZpbHRlcnMgZXNjPSJD UkxGIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0nYWRvYmU6bnM6bWV0YS8nIHg6 eG1wdGs9J1hNUCB0b29sa2l0IDIuOS4xLTEzLCBmcmFtZXdvcmsgMS42Jz4K PHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAy LzIyLXJkZi1zeW50YXgtbnMjJyB4bWxuczppWD0naHR0cDovL25zLmFkb2Jl LmNvbS9pWC8xLjAvJz4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1 aWQ6MWMzNGEyYjgtNmM4Yi0xMWYxLTAwMDAtNjgxN2NjMDk5NWRhJyB4bWxu czpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nIHBkZjpQcm9k dWNlcj0nR1BMIEdob3N0c2NyaXB0IDkuMTAnLz4KPHJkZjpEZXNjcmlwdGlv biByZGY6YWJvdXQ9J3V1aWQ6MWMzNGEyYjgtNmM4Yi0xMWYxLTAwMDAtNjgx N2NjMDk5NWRhJyB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFw LzEuMC8nPjx4bXA6TW9kaWZ5RGF0ZT4yMDE2LTA2LTE3VDExOjMzOjM0KzAy OjAwPC94bXA6TW9kaWZ5RGF0ZT4KPHhtcDpDcmVhdGVEYXRlPjIwMTYtMDYt MTdUMTE6MzM6MzQrMDI6MDA8L3htcDpDcmVhdGVEYXRlPgo8eG1wOkNyZWF0 b3JUb29sPmpncmFwaDwveG1wOkNyZWF0b3JUb29sPjwvcmRmOkRlc2NyaXB0 aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxYzM0YTJi OC02YzhiLTExZjEtMDAwMC02ODE3Y2MwOTk1ZGEnIHhtbG5zOnhhcE1NPSdo dHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vJyB4YXBNTTpEb2N1bWVu dElEPSd1dWlkOjFjMzRhMmI4LTZjOGItMTFmMS0wMDAwLTY4MTdjYzA5OTVk YScvPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxYzM0YTJi OC02YzhiLTExZjEtMDAwMC02ODE3Y2MwOTk1ZGEnIHhtbG5zOmRjPSdodHRw Oi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLycgZGM6Zm9ybWF0PSdhcHBs aWNhdGlvbi9wZGYnPjxkYzp0aXRsZT48cmRmOkFsdD48cmRmOmxpIHhtbDps YW5nPSd4LWRlZmF1bHQnPlVudGl0bGVkPC9yZGY6bGk+PC9yZGY6QWx0Pjwv ZGM6dGl0bGU+PC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94Onht cG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0ndyc/PgplbmRzdHJl YW0KZW5kb2JqCjIgMCBvYmoKPDwvUHJvZHVjZXIoR1BMIEdob3N0c2NyaXB0 IDkuMTApCi9DcmVhdGlvbkRhdGUoRDoyMDE2MDYxNzExMzMzNCswMicwMCcp Ci9Nb2REYXRlKEQ6MjAxNjA2MTcxMTMzMzQrMDInMDAnKQovQ3JlYXRvcihq Z3JhcGgpPj5lbmRvYmoKeHJlZgowIDE3CjAwMDAwMDAwMDAgNjU1MzUgZiAK MDAwMDAwODc5MCAwMDAwMCBuIAowMDAwMDE1NDkwIDAwMDAwIG4gCjAwMDAw MDg3MzEgMDAwMDAgbiAKMDAwMDAwODU4MCAwMDAwMCBuIAowMDAwMDAwMDE1 IDAwMDAwIG4gCjAwMDAwMDg1NjAgMDAwMDAgbiAKMDAwMDAwODg1NSAwMDAw MCBuIAowMDAwMDA4OTY3IDAwMDAwIG4gCjAwMDAwMDk2NTIgMDAwMDAgbiAK MDAwMDAwOTI5NiAwMDAwMCBuIAowMDAwMDEyMjQ0IDAwMDAwIG4gCjAwMDAw MDg4OTYgMDAwMDAgbiAKMDAwMDAwODkyNiAwMDAwMCBuIAowMDAwMDA5OTM2 IDAwMDAwIG4gCjAwMDAwMTI1MjUgMDAwMDAgbiAKMDAwMDAxNDA4MSAwMDAw MCBuIAp0cmFpbGVyCjw8IC9TaXplIDE3IC9Sb290IDEgMCBSIC9JbmZvIDIg MCBSCi9JRCBbPEYyQkIwMTU3RTdFODQ0MUFFRjg4MDExQUQ4MEZBQkMxPjxG MkJCMDE1N0U3RTg0NDFBRUY4ODAxMUFEODBGQUJDMT5dCj4+CnN0YXJ0eHJl ZgoxNTYzMAolJUVPRgo= --8323329-1784731914-1466156612=:3164-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: julia.lawall@lip6.fr (Julia Lawall) Date: Fri, 17 Jun 2016 11:44:26 +0200 (CEST) Subject: [Cocci] [PATCH v2 4/8] scripts: add glimpse.sh for indexing the kernel In-Reply-To: <1466116292-21843-5-git-send-email-mcgrof@kernel.org> References: <1466116292-21843-1-git-send-email-mcgrof@kernel.org> <1466116292-21843-5-git-send-email-mcgrof@kernel.org> Message-ID: To: cocci@systeme.lip6.fr List-Id: cocci@systeme.lip6.fr I'm not sure that this is worth it. It adds a dependency on a tool that seems not to be well maintained. In terms of Coccinelle, I'm not sure that it gives a big benefit. Attached is a graph showing the file selection time for Coccinelle for a selection of fairly complex semantic patches. Coccigrep is just a line-by-line regexp search implemented in ocaml, gitgrep uses git grep. In most cases, glimpse is clearly faster. On the other hand, it seems that glimpse often selects more files. Sometimes a few more, eg 16 vs 14, and sometimes quite a lot more, eg 538 vs 236. I suspect that this is because glimpse considers _ to be a space, and thus it can have many false positives. There are, however, a few cases where glimpse also selects fewer files. The file processing time (ie parsing the file, searching for, matches of the semantic patch in the file, and performing the transformation) is normally much higher than the file selection time. So it seems that git grep is currently a better option for the kernel. julia -------------- next part -------------- A non-text attachment was scrubbed... Name: fl.pdf Type: application/pdf Size: 16124 bytes Desc: URL: