git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 5/7] grep: un-break building with PCRE < 8.32

From
Junio C Hamano <gitster@pobox.com>
Date
May 24, 2017, 06:00 UTC
Message-ID
<xmqqh90ahjzy.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20170523192453.14172-6-avarab@gmail.com>
Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:
Show 6 quoted lines
> Amend my change earlier in this series ("grep: add support for the
> PCRE v1 JIT API", 2017-04-11) to un-break the build on PCRE v1
> versions earlier than 8.32.
> ...
> So just take the easy way out and disable the JIT on any version older
> than 8.32.

The above were very understandable, but I had quite a hard time parsing first sentence of the next paragraph, especially everything after "because". In the end I think I figured out what you wanted to say (so you do not have to explain it to me in a response), but I wish there were an easier-to-understand way to write the same thing.

Show 48 quoted lines
> The reason this change isn't part of the initial change PCRE JIT
> support is because possibly slightly annoying someone who's bisecting
> with an ancient PCRE is worth it to have a cleaner history showing
> which parts of the implementation are only used for ancient PCRE
> versions. This also makes it easier to revert this change if we ever
> decide to stop supporting those old versions.
>
> 1. http://www.pcre.org/original/changelog.txt ("28. Introducing a
>    native interface for JIT. Through this interface, the
>    compiled[...]")
> 2. https://bugs.exim.org/show_bug.cgi?id=2121
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>  grep.c | 8 ++++----
>  grep.h | 5 +++++
>  2 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/grep.c b/grep.c
> index 49e9aed457..3c0c30f033 100644
> --- a/grep.c
> +++ b/grep.c
> ...
> @@ -418,7 +418,7 @@ static void free_pcre1_regexp(struct grep_pat *p)
>  {
>  	pcre_free(p->pcre1_regexp);
>  
> -#ifdef PCRE_CONFIG_JIT
> +#ifdef GIT_PCRE1_CAN_DO_MODERN_JIT
>  	if (p->pcre1_jit_on) {
>  		pcre_free_study(p->pcre1_extra_info);
>  		pcre_jit_stack_free(p->pcre1_jit_stack);
> diff --git a/grep.h b/grep.h
> index 14f47189f9..73ef0ef8ec 100644
> --- a/grep.h
> +++ b/grep.h
> @@ -3,6 +3,11 @@
>  #include "color.h"
>  #ifdef USE_LIBPCRE1
>  #include <pcre.h>
> +#ifdef PCRE_CONFIG_JIT
> +#if PCRE_MAJOR >= 8 && PCRE_MINOR >= 32
> +#define GIT_PCRE1_CAN_DO_MODERN_JIT
> +#endif
> +#endif
>  #ifndef PCRE_STUDY_JIT_COMPILE
>  #define PCRE_STUDY_JIT_COMPILE 0
>  #endif

After reading the patch, I do not necessarily agree with your pros-and-cons between keeping the patches as separate steps and squashing them into one, though. Even if this were squashed into [PATCH 4/7], the logic to set GIT_PCRE1_CAN_DO_MODERN_JIT based on PCRE_CONFIG_JIT and PCRE's version in this patch is well isolated to a single place, and it is easy to spot what needs to be done when we decide to lose the version-based GIT_PCRE1_CAN_DO_MODERN_JIT from our code after making sure that nobody uses versions older than 8.32.

By the time we will make such a decision, it is likely that we no longer remember if "#ifdef GIT_PCRE1_CAN_DO_MODERN_JIT" we have in our code at that moment in the future were all already present in this patch. An update to drop support for older PCRE is likely to be done by finding the above part in grep.h to remove the version-dependent part, while still keeping #ifdef based on GIT_PCRE1_CAN_DO_MODERN_JIT in the *.c code. Being able to revert this patch does not help there.

We might also do a find-and-replace of GIT_PCRE1_CAN_DO_MODERN_JIT to PCRE_CONFIG_JIT when we drop support for older PCRE, but I do not think we would assume that it is sufficient to revert this patch when we do so. We may have added more #ifdef on the GIT_MODERN_JIT symbol we now need to change to PCRE_CONFIG_JIT, so that will be done by find-and-replace of the then-current code, not by reverting this patch.

So in that sense, I do not think keeping them separate in practice has the "makes it easier to revert this change" benefit.

If I were doing these two patches, I'd squash them together into one, rename GIT_PCRE1_CAN_DO_MODERN_JIT to GIT_PCRE1_USE_JIT, and explain in the log message why we turn it off for versions older than 8.32 like you did in the log message for thsi patch.

The reason for the "rename" is because I might also be tempted to allow users of newer version to manually decline GIT_PCRE1_USE_JIT in Makefile/config.mak; i.e. we may decide not to USE something even if we CAN, and the #ifdef symbol you are using is about the decision to USE or not USE, not necessarily if the library CAN.

Thanks.
Previous: Ævar Arnfjörð BjarmasonNext: Junio C Hamano
Message 42 of 58 in “Easy to review grep & pre-PCRE changes”
  1. 00/30 Easy to review grep & pre-PCRE changesÆvar Arnfjörð Bjarmason, May 20, 2017
  2. 01/30 Makefile & configure: reword inaccurate comment about PCREÆvar Arnfjörð Bjarmason, May 20, 2017
  3. 02/30 grep & rev-list doc: stop promising libpcre for --perl-regexpÆvar Arnfjörð Bjarmason, May 20, 2017
  4. 03/30 test-lib: rename the LIBPCRE prerequisite to PCREÆvar Arnfjörð Bjarmason, May 20, 2017
  5. 04/30 log: add exhaustive tests for pattern style options & configÆvar Arnfjörð Bjarmason, May 20, 2017
  6. 07/30 grep: add a test for backreferences in PCRE patternsÆvar Arnfjörð Bjarmason, May 20, 2017
  7. 05/30 log: make --regexp-ignore-case work with --perl-regexpÆvar Arnfjörð Bjarmason, May 20, 2017
  8. Junio C HamanoMay 20, 2017
  9. Ævar Arnfjörð BjarmasonMay 21, 2017
  10. Junio C HamanoMay 22, 2017
  11. 06/30 grep: add a test asserting that --perl-regexp dies when !PCREÆvar Arnfjörð Bjarmason, May 20, 2017
  12. 08/30 grep: change non-ASCII -i test to stop using --debugÆvar Arnfjörð Bjarmason, May 20, 2017
  13. 12/30 grep: add a test helper function for less verbose -f \0 testsÆvar Arnfjörð Bjarmason, May 20, 2017
  14. 10/30 grep: amend submodule recursion test for regex engine testingÆvar Arnfjörð Bjarmason, May 20, 2017
  15. 09/30 grep: add tests for --threads=N and grep.threadsÆvar Arnfjörð Bjarmason, May 20, 2017
  16. 13/30 grep: prepare for testing binary regexes containing rx metacharactersÆvar Arnfjörð Bjarmason, May 20, 2017
  17. 11/30 grep: add tests for grep pattern types being passed to submodulesÆvar Arnfjörð Bjarmason, May 20, 2017
  18. 14/30 grep: add tests to fix blind spots with \0 patternsÆvar Arnfjörð Bjarmason, May 20, 2017
  19. 15/30 perf: add a GIT_PERF_MAKE_COMMAND for when *_MAKE_OPTS won't doÆvar Arnfjörð Bjarmason, May 20, 2017
  20. Junio C HamanoMay 20, 2017
  21. Ævar Arnfjörð BjarmasonMay 21, 2017
  22. 18/30 perf: add a comparison test of grep regex engines with -FÆvar Arnfjörð Bjarmason, May 20, 2017
  23. 20/30 grep: catch a missing enum in switch statementÆvar Arnfjörð Bjarmason, May 20, 2017
  24. 17/30 perf: add a comparison test of grep regex enginesÆvar Arnfjörð Bjarmason, May 20, 2017
  25. 19/30 perf: add a comparison test of log --grep regex enginesÆvar Arnfjörð Bjarmason, May 20, 2017
  26. 16/30 perf: emit progress output when unpacking & buildingÆvar Arnfjörð Bjarmason, May 20, 2017
  27. 21/30 grep: remove redundant regflags assignmentsÆvar Arnfjörð Bjarmason, May 20, 2017
  28. 22/30 grep: factor test for \0 in grep patterns into a functionÆvar Arnfjörð Bjarmason, May 20, 2017
  29. Brandon WilliamsMay 23, 2017
  30. 25/30 grep: move is_fixed() earlier to avoid forward declarationÆvar Arnfjörð Bjarmason, May 20, 2017
  31. 23/30 grep: change the internal PCRE macro names to be PCRE1Ævar Arnfjörð Bjarmason, May 20, 2017
  32. 24/30 grep: change internal *pcre* variable & function names to be *pcre1*Ævar Arnfjörð Bjarmason, May 20, 2017
  33. 26/30 test-lib: add a PTHREADS prerequisiteÆvar Arnfjörð Bjarmason, May 20, 2017
  34. 28/30 pack-objects: fix buggy warning about threadsÆvar Arnfjörð Bjarmason, May 20, 2017
  35. 30/30 grep: assert that threading is enabled when calling grep_{lock,unlock}Ævar Arnfjörð Bjarmason, May 20, 2017
  36. 29/30 grep: given --threads with NO_PTHREADS=YesPlease, warnÆvar Arnfjörð Bjarmason, May 20, 2017
  37. 27/30 pack-objects & index-pack: add test for --threads warningÆvar Arnfjörð Bjarmason, May 20, 2017
  38. Junio C HamanoMay 20, 2017
  39. 0/7 PCRE v2, PCRE v1 JIT, log -P & fixesÆvar Arnfjörð Bjarmason, May 23, 2017
  40. 3/7 log: add -P as a synonym for --perl-regexpÆvar Arnfjörð Bjarmason, May 23, 2017
  41. 5/7 grep: un-break building with PCRE < 8.32Ævar Arnfjörð Bjarmason, May 23, 2017
  42. Junio C HamanoMay 24, 2017
  43. Junio C HamanoMay 24, 2017
  44. 6/7 grep: un-break building with PCRE < 8.20Ævar Arnfjörð Bjarmason, May 23, 2017
  45. 2/7 grep: skip pthreads overhead when using one threadÆvar Arnfjörð Bjarmason, May 23, 2017
  46. Junio C HamanoMay 24, 2017
  47. 4/7 grep: add support for the PCRE v1 JIT APIÆvar Arnfjörð Bjarmason, May 23, 2017
  48. Junio C HamanoMay 24, 2017
  49. Ævar Arnfjörð BjarmasonMay 24, 2017
  50. 7/7 grep: add support for PCRE v2Ævar Arnfjörð Bjarmason, May 23, 2017
  51. Junio C HamanoMay 24, 2017
  52. Ævar Arnfjörð BjarmasonMay 25, 2017
  53. 1/7 grep: don't redundantly compile throwaway patterns under threadingÆvar Arnfjörð Bjarmason, May 23, 2017
  54. Junio C HamanoMay 24, 2017
  55. Ævar Arnfjörð BjarmasonMay 25, 2017
  56. Junio C HamanoMay 26, 2017
  57. Ævar Arnfjörð BjarmasonMay 26, 2017
  58. Junio C HamanoMay 26, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.