From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
"Johannes Schindelin" <johannes.schindelin@gmx.de>,
"Carlo Marcelo Arenas Belón" <carenas@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH 21/25] pickaxe: use PCREv2 for -G and -S
Date: Wed, 3 Feb 2021 04:28:07 +0100 [thread overview]
Message-ID: <20210203032811.14979-22-avarab@gmail.com> (raw)
In-Reply-To: <20210203032811.14979-1-avarab@gmail.com>
Follow-up b65abcafc7a (grep: use PCRE v2 for optimized fixed-string
search, 2019-07-01) and remove the use of kwset in the pickaxe code
for fixed-string search, in favor of optimistically using PCRE v2.
This does mean that the semantics of the -G option subtly change,
before it's an ERE, whereas now it'll be a PCRE if we're compiled with
PCRE. Since PCRE is almost entirely a strict superset of ERE syntax I
think this is OK.
Now when running the newly added t/perf/p4209-pickaxe.sh[1] and the
latest PCRE v2 we'll get the following performance improvements (well,
mostly improvements):
Test origin/next HEAD
-----------------------------------------------------------------------------------------------------------------------
4209.1: git log --pickaxe-regex -S'[þæö]' <limit-rev>.. 0.41(0.37+0.03) 0.42(0.37+0.05) +2.4%
4209.2: git log -G'a' <limit-rev>.. 0.61(0.52+0.08) 0.50(0.45+0.05) -18.0%
4209.3: git log --pickaxe-regex -S'a' <limit-rev>.. 0.73(0.66+0.07) 0.42(0.37+0.05) -42.5%
4209.4: git log --text -G'a' <limit-rev>.. 0.61(0.54+0.06) 0.50(0.44+0.05) -18.0%
4209.5: git log --text --pickaxe-all -G'a' <limit-rev>.. 0.44(0.37+0.06) 0.46(0.36+0.06) +4.5%
4209.6: git log --pickaxe-all -G'a' <limit-rev>.. 0.46(0.39+0.07) 0.38(0.33+0.05) -17.4%
4209.7: git log --pickaxe-all --pickaxe-regex -S'a' <limit-rev>.. 0.55(0.48+0.06) 0.35(0.30+0.04) -36.4%
4209.8: git log -G'uncommon' <limit-rev>.. 0.68(0.60+0.07) 0.59(0.53+0.05) -13.2%
4209.9: git log --pickaxe-regex -S'uncommon' <limit-rev>.. 0.48(0.45+0.03) 0.36(0.31+0.05) -25.0%
4209.10: git log --text -G'uncommon' <limit-rev>.. 0.66(0.58+0.07) 0.58(0.52+0.04) -12.1%
4209.11: git log --text --pickaxe-all -G'uncommon' <limit-rev>.. 0.67(0.61+0.05) 0.57(0.52+0.05) -14.9%
4209.12: git log --pickaxe-all -G'uncommon' <limit-rev>.. 0.62(0.55+0.06) 0.52(0.46+0.06) -16.1%
4209.13: git log --pickaxe-all --pickaxe-regex -S'uncommon' <limit-rev>.. 0.49(0.43+0.06) 0.31(0.26+0.04) -36.7%
4209.14: git log -G'[þæö]' <limit-rev>.. 0.71(0.64+0.07) 0.51(0.47+0.04) -28.2%
4209.15: git log --pickaxe-regex -S'[þæö]' <limit-rev>.. 0.45(0.40+0.05) 0.42(0.37+0.04) -6.7%
4209.16: git log --text -G'[þæö]' <limit-rev>.. 0.64(0.56+0.07) 0.50(0.44+0.06) -21.9%
4209.17: git log --text --pickaxe-all -G'[þæö]' <limit-rev>.. 0.64(0.54+0.09) 0.50(0.47+0.03) -21.9%
4209.18: git log --pickaxe-all -G'[þæö]' <limit-rev>.. 0.66(0.59+0.07) 0.50(0.45+0.05) -24.2%
4209.19: git log --pickaxe-all --pickaxe-regex -S'[þæö]' <limit-rev>.. 0.42(0.38+0.04) 0.41(0.37+0.04) -2.4%
4209.20: git log -i --pickaxe-regex -S'[þæö]' <limit-rev>.. 0.41(0.38+0.03) 0.49(0.43+0.05) +19.5%
4209.21: git log -i -G'a' <limit-rev>.. 0.63(0.61+0.02) 0.50(0.45+0.05) -20.6%
4209.22: git log -i --pickaxe-regex -S'a' <limit-rev>.. 0.81(0.75+0.06) 0.60(0.58+0.02) -25.9%
4209.23: git log -i --text -G'a' <limit-rev>.. 0.64(0.54+0.10) 0.49(0.44+0.05) -23.4%
4209.24: git log -i --text --pickaxe-all -G'a' <limit-rev>.. 0.47(0.43+0.04) 0.37(0.31+0.06) -21.3%
4209.25: git log -i --pickaxe-all -G'a' <limit-rev>.. 0.51(0.43+0.08) 0.37(0.31+0.06) -27.5%
4209.26: git log -i --pickaxe-all --pickaxe-regex -S'a' <limit-rev>.. 0.62(0.55+0.05) 0.46(0.41+0.04) -25.8%
4209.27: git log -i -G'uncommon' <limit-rev>.. 0.64(0.58+0.05) 0.51(0.48+0.03) -20.3%
4209.28: git log -i --pickaxe-regex -S'uncommon' <limit-rev>.. 0.48(0.44+0.04) 0.47(0.42+0.05) -2.1%
4209.29: git log -i --text -G'uncommon' <limit-rev>.. 0.62(0.53+0.08) 0.51(0.44+0.07) -17.7%
4209.30: git log -i --text --pickaxe-all -G'uncommon' <limit-rev>.. 0.61(0.53+0.08) 0.51(0.45+0.06) -16.4%
4209.31: git log -i --pickaxe-all -G'uncommon' <limit-rev>.. 0.63(0.57+0.05) 0.51(0.47+0.04) -19.0%
4209.32: git log -i --pickaxe-all --pickaxe-regex -S'uncommon' <limit-rev>.. 0.47(0.42+0.04) 0.47(0.45+0.01) +0.0%
4209.33: git log -i -G'[þæö]' <limit-rev>.. 0.60(0.54+0.05) 0.51(0.47+0.04) -15.0%
4209.34: git log -i --pickaxe-regex -S'[þæö]' <limit-rev>.. 0.39(0.33+0.05) 0.49(0.45+0.03) +25.6%
4209.35: git log -i --text -G'[þæö]' <limit-rev>.. 0.59(0.53+0.06) 0.51(0.47+0.02) -13.6%
4209.36: git log -i --text --pickaxe-all -G'[þæö]' <limit-rev>.. 0.62(0.56+0.05) 0.51(0.45+0.04) -17.7%
4209.37: git log -i --pickaxe-all -G'[þæö]' <limit-rev>.. 0.61(0.55+0.06) 0.51(0.47+0.04) -16.4%
4209.38: git log -i --pickaxe-all --pickaxe-regex -S'[þæö]' <limit-rev>.. 0.42(0.39+0.02) 0.49(0.46+0.03) +16.7%
1. With these options:
GIT_PERF_EXTRA=1 GIT_PERF_REPEAT_COUNT=10 GIT_PERF_MAKE_OPTS='-j8 USE_LIBPCRE=Y CFLAGS=-O3 LIBPCREDIR=/home/avar/g/pcre2/inst' ./run origin/next HEAD -- p4209-pickaxe.sh
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
diff.h | 4 ++
diffcore-pickaxe.c | 143 ++++++++++++++++++---------------------------
2 files changed, 61 insertions(+), 86 deletions(-)
diff --git a/diff.h b/diff.h
index 2ff2b1c7f2..2f369c162b 100644
--- a/diff.h
+++ b/diff.h
@@ -365,6 +365,8 @@ struct diff_options {
struct repository *repo;
struct option *parseopts;
+
+ struct grep_opt *grep_filter;
};
unsigned diff_filter_bit(char status);
@@ -520,6 +522,8 @@ int git_config_rename(const char *var, const char *value);
#define DIFF_PICKAXE_KIND_G 8 /* grep in the patch */
#define DIFF_PICKAXE_KIND_OBJFIND 16 /* specific object IDs */
+#define DIFF_PICKAXE_KIND_GS_MASK (DIFF_PICKAXE_KIND_S | \
+ DIFF_PICKAXE_KIND_G)
#define DIFF_PICKAXE_KINDS_MASK (DIFF_PICKAXE_KIND_S | \
DIFF_PICKAXE_KIND_G | \
DIFF_PICKAXE_KIND_OBJFIND)
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
index 5161c81057..25ab1b2427 100644
--- a/diffcore-pickaxe.c
+++ b/diffcore-pickaxe.c
@@ -6,16 +6,16 @@
#include "diff.h"
#include "diffcore.h"
#include "xdiff-interface.h"
-#include "kwset.h"
+#include "grep.h"
#include "commit.h"
#include "quote.h"
typedef int (*pickaxe_fn)(mmfile_t *one, mmfile_t *two,
struct diff_options *o,
- regex_t *regexp, kwset_t kws);
+ struct grep_opt *grep_filter);
struct diffgrep_cb {
- regex_t *regexp;
+ struct grep_opt *grep_filter;
int hit;
};
@@ -23,6 +23,8 @@ static void diffgrep_consume(void *priv, char *line, unsigned long len)
{
struct diffgrep_cb *data = priv;
regmatch_t regmatch;
+ struct grep_opt *grep_filter = data->grep_filter;
+ struct grep_pat *grep_pat = grep_filter->pattern_list;
if (line[0] != '+' && line[0] != '-')
return;
@@ -32,25 +34,25 @@ static void diffgrep_consume(void *priv, char *line, unsigned long len)
* caller early.
*/
return;
- data->hit = !regexec_buf(data->regexp, line + 1, len - 1, 1,
- ®match, 0);
+ data->hit = patmatch(grep_pat, line + 1, line + len + 1, ®match, 0);
}
static int diff_grep(mmfile_t *one, mmfile_t *two,
struct diff_options *o,
- regex_t *regexp, kwset_t kws)
+ struct grep_opt *grep_filter)
{
- regmatch_t regmatch;
struct diffgrep_cb ecbdata;
xpparam_t xpp;
xdemitconf_t xecfg;
+ regmatch_t regmatch;
+ struct grep_pat *grep_pat = grep_filter->pattern_list;
if (!one)
- return !regexec_buf(regexp, two->ptr, two->size,
- 1, ®match, 0);
+ return patmatch(grep_pat, two->ptr, two->ptr + two->size,
+ ®match, 0);
if (!two)
- return !regexec_buf(regexp, one->ptr, one->size,
- 1, ®match, 0);
+ return patmatch(grep_pat, one->ptr, one->ptr + one->size,
+ ®match, 0);
/*
* We have both sides; need to run textual diff and see if
@@ -58,7 +60,7 @@ static int diff_grep(mmfile_t *one, mmfile_t *two,
*/
memset(&xpp, 0, sizeof(xpp));
memset(&xecfg, 0, sizeof(xecfg));
- ecbdata.regexp = regexp;
+ ecbdata.grep_filter = grep_filter;
ecbdata.hit = 0;
xecfg.ctxlen = 0;
xecfg.interhunkctxlen = o->interhunkcontext;
@@ -68,52 +70,40 @@ static int diff_grep(mmfile_t *one, mmfile_t *two,
return ecbdata.hit;
}
-static unsigned int contains(mmfile_t *mf, regex_t *regexp, kwset_t kws)
+static unsigned int contains(mmfile_t *mf, struct grep_opt *grep_filter)
{
+
unsigned int cnt = 0;
unsigned long sz = mf->size;
- const char *data = mf->ptr;
-
- if (regexp) {
- regmatch_t regmatch;
- int flags = 0;
-
- while (!regexec_buf(regexp, data, sz, 1, ®match, flags)) {
- flags |= REG_NOTBOL;
- data += regmatch.rm_eo;
- sz -= regmatch.rm_eo;
- if (regmatch.rm_so == regmatch.rm_eo) {
- data++;
- sz--;
- }
- cnt++;
- }
-
- } else { /* Classic exact string match */
- while (sz) {
- struct kwsmatch kwsm;
- size_t offset = kwsexec(kws, data, sz, &kwsm);
- if (offset == -1)
- break;
- sz -= offset + kwsm.size[0];
- data += offset + kwsm.size[0];
- cnt++;
+ char *data = mf->ptr;
+ regmatch_t regmatch;
+ int flags = 0;
+ struct grep_pat *grep_pat = grep_filter->pattern_list;
+
+ while (patmatch(grep_pat, data, data + sz, ®match, flags)) {
+ flags |= REG_NOTBOL;
+ data += regmatch.rm_eo;
+ sz -= regmatch.rm_eo;
+ if (regmatch.rm_so == regmatch.rm_eo) {
+ data++;
+ sz--;
}
+ cnt++;
}
return cnt;
}
static int has_changes(mmfile_t *one, mmfile_t *two,
struct diff_options *o,
- regex_t *regexp, kwset_t kws)
+ struct grep_opt *grep_filter)
{
- unsigned int one_contains = one ? contains(one, regexp, kws) : 0;
- unsigned int two_contains = two ? contains(two, regexp, kws) : 0;
+ unsigned int one_contains = one ? contains(one, grep_filter) : 0;
+ unsigned int two_contains = two ? contains(two, grep_filter) : 0;
return one_contains != two_contains;
}
static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,
- regex_t *regexp, kwset_t kws, pickaxe_fn fn)
+ struct grep_opt *grep_filter, pickaxe_fn fn)
{
struct userdiff_driver *textconv_one = NULL;
struct userdiff_driver *textconv_two = NULL;
@@ -160,7 +150,7 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,
ret = fn(DIFF_FILE_VALID(p->one) ? &mf1 : NULL,
DIFF_FILE_VALID(p->two) ? &mf2 : NULL,
- o, regexp, kws);
+ o, grep_filter);
if (textconv_one)
free(mf1.ptr);
@@ -173,7 +163,7 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,
}
static void pickaxe(struct diff_queue_struct *q, struct diff_options *o,
- regex_t *regexp, kwset_t kws, pickaxe_fn fn)
+ struct grep_opt *grep_filter, pickaxe_fn fn)
{
int i;
struct diff_queue_struct outq;
@@ -184,7 +174,7 @@ static void pickaxe(struct diff_queue_struct *q, struct diff_options *o,
/* Showing the whole changeset if needle exists */
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
- if (pickaxe_match(p, o, regexp, kws, fn))
+ if (pickaxe_match(p, o, grep_filter, fn))
return; /* do not munge the queue */
}
@@ -199,7 +189,7 @@ static void pickaxe(struct diff_queue_struct *q, struct diff_options *o,
/* Showing only the filepairs that has the needle */
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
- if (pickaxe_match(p, o, regexp, kws, fn))
+ if (pickaxe_match(p, o, grep_filter, fn))
diff_q(&outq, p);
else
diff_free_filepair(p);
@@ -210,54 +200,35 @@ static void pickaxe(struct diff_queue_struct *q, struct diff_options *o,
*q = outq;
}
-static void regcomp_or_die(regex_t *regex, const char *needle, int cflags)
-{
- int err = regcomp(regex, needle, cflags);
- if (err) {
- /* The POSIX.2 people are surely sick */
- char errbuf[1024];
- regerror(err, regex, errbuf, 1024);
- die("invalid regex: %s", errbuf);
- }
-}
-
void diffcore_pickaxe(struct diff_options *o)
{
const char *needle = o->pickaxe;
int opts = o->pickaxe_opts;
- regex_t regex, *regexp = NULL;
- kwset_t kws = NULL;
+ struct grep_opt opt;
+
+ if (opts & (DIFF_PICKAXE_REGEX | DIFF_PICKAXE_KIND_GS_MASK)) {
+ grep_init(&opt, the_repository, NULL);
+#ifdef USE_LIBPCRE2
+ grep_commit_pattern_type(GREP_PATTERN_TYPE_PCRE, &opt);
+#else
+ grep_commit_pattern_type(GREP_PATTERN_TYPE_ERE, &opt);
+#endif
- if (opts & (DIFF_PICKAXE_REGEX | DIFF_PICKAXE_KIND_G)) {
- int cflags = REG_EXTENDED | REG_NEWLINE;
if (o->pickaxe_opts & DIFF_PICKAXE_IGNORE_CASE)
- cflags |= REG_ICASE;
- regcomp_or_die(®ex, needle, cflags);
- regexp = ®ex;
- } else if (opts & DIFF_PICKAXE_KIND_S) {
- if (o->pickaxe_opts & DIFF_PICKAXE_IGNORE_CASE &&
- has_non_ascii(needle)) {
- struct strbuf sb = STRBUF_INIT;
- int cflags = REG_NEWLINE | REG_ICASE;
-
- basic_regex_quote_buf(&sb, needle);
- regcomp_or_die(®ex, sb.buf, cflags);
- strbuf_release(&sb);
- regexp = ®ex;
- } else {
- kws = kwsalloc(o->pickaxe_opts & DIFF_PICKAXE_IGNORE_CASE
- ? tolower_trans_tbl : NULL);
- kwsincr(kws, needle, strlen(needle));
- kwsprep(kws);
- }
+ opt.ignore_case = 1;
+ if (opts & DIFF_PICKAXE_KIND_S &&
+ !(opts & DIFF_PICKAXE_REGEX))
+ opt.fixed = 1;
+
+ append_grep_pattern(&opt, needle, "diffcore-pickaxe", 0, GREP_PATTERN);
+ compile_grep_patterns(&opt);
}
- pickaxe(&diff_queued_diff, o, regexp, kws,
+ pickaxe(&diff_queued_diff, o, &opt,
(opts & DIFF_PICKAXE_KIND_G) ? diff_grep : has_changes);
- if (regexp)
- regfree(regexp);
- if (kws)
- kwsfree(kws);
+ if (opts & ~DIFF_PICKAXE_KIND_OBJFIND)
+ free_grep_patterns(&opt);
+
return;
}
--
2.30.0.284.gd98b1dd5eaa7
next prev parent reply other threads:[~2021-02-03 3:35 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-03 3:27 [PATCH 00/25] grep: PCREv2 fixes, remove kwset.[ch] Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 01/25] grep/pcre2 tests: reword comments referring to kwset Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 02/25] grep/pcre2: drop needless assignment + assert() on opt->pcre2 Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 03/25] grep/pcre2: drop needless assignment to NULL Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 04/25] grep/pcre2: correct reference to grep_init() in comment Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 05/25] grep/pcre2: prepare to add debugging to pcre2_malloc() Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 06/25] grep/pcre2: add GREP_PCRE2_DEBUG_MALLOC debug mode Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 07/25] grep/pcre2: use compile-time PCREv2 version test Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 08/25] grep/pcre2: use pcre2_maketables_free() function Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 09/25] grep/pcre2: actually make pcre2 use custom allocator Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 10/25] grep/pcre2: move back to thread-only PCREv2 structures Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 11/25] grep/pcre2: move definitions of pcre2_{malloc,free} Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 12/25] pickaxe tests: refactor to use test_commit --append Ævar Arnfjörð Bjarmason
2021-02-03 3:27 ` [PATCH 13/25] pickaxe -S: support content with NULs under --pickaxe-regex Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` [PATCH 14/25] pickaxe -S: remove redundant "sz" check in while-loop Ævar Arnfjörð Bjarmason
2021-02-04 16:16 ` René Scharfe
2021-02-04 17:56 ` Junio C Hamano
2021-02-04 21:13 ` Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` [PATCH 15/25] pickaxe/style: consolidate declarations and assignments Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` [PATCH 16/25] pickaxe tests: add test for diffgrep_consume() internals Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` [PATCH 17/25] pickaxe tests: add test for "log -S" not being a regex Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` [PATCH 18/25] perf: add performance test for pickaxe Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` [PATCH 19/25] pickaxe -G: set -U0 for diff generation Ævar Arnfjörð Bjarmason
2021-02-03 14:26 ` Ævar Arnfjörð Bjarmason
2021-02-03 19:42 ` Junio C Hamano
2021-02-03 3:28 ` [PATCH 20/25] grep.h: make patmatch() a public function Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` Ævar Arnfjörð Bjarmason [this message]
2021-02-03 20:44 ` [PATCH 21/25] pickaxe: use PCREv2 for -G and -S Ævar Arnfjörð Bjarmason
2021-02-04 18:11 ` Junio C Hamano
2021-02-04 18:22 ` Junio C Hamano
2021-02-03 3:28 ` [PATCH 22/25] Remove unused kwset.[ch] Ævar Arnfjörð Bjarmason
[not found] ` <CAPUEspgBmuTBHVZWY9fRtjbHWBRr0zHravLL1Czepc6jmib4HA@mail.gmail.com>
2021-02-03 14:13 ` Ævar Arnfjörð Bjarmason
[not found] ` <CAPUEsphN7QuSVsC1Tr4xE8yQgPTtpF7wL7zbk1crQU3n-5g6JQ@mail.gmail.com>
2021-02-03 16:45 ` Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` [PATCH 23/25] xdiff-interface: allow early return from xdiff_emit_{line,hunk}_fn Ævar Arnfjörð Bjarmason
2021-02-03 3:28 ` [PATCH 24/25] xdiff-interface: support early exit in xdiff_outf() Ævar Arnfjörð Bjarmason
2021-02-04 18:16 ` Junio C Hamano
2021-02-03 3:28 ` [PATCH 25/25] pickaxe -G: terminate early on matching lines Ævar Arnfjörð Bjarmason
2021-02-03 12:38 ` [PATCH 00/25] grep: PCREv2 fixes, remove kwset.[ch] Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 00/22] pickaxe: test and refactoring for follow-up changes Ævar Arnfjörð Bjarmason
2021-02-16 22:23 ` Junio C Hamano
2021-02-17 1:19 ` Junio C Hamano
2021-04-12 17:15 ` [PATCH v3 00/22] pickaxe: test and refactoring for future PCRE backend Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 01/22] grep/pcre2 tests: reword comments referring to kwset Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 02/22] pickaxe tests: refactor to use test_commit --append --printf Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 03/22] pickaxe tests: add test for diffgrep_consume() internals Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 04/22] pickaxe tests: add test for "log -S" not being a regex Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 05/22] pickaxe tests: test for -G, -S and --find-object incompatibility Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 06/22] pickaxe tests: add missing test for --no-pickaxe-regex being an error Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 07/22] pickaxe: die when -G and --pickaxe-regex are combined Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 08/22] pickaxe: die when --find-object and --pickaxe-all " Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 09/22] diff.h: move pickaxe fields together again Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 10/22] pickaxe/style: consolidate declarations and assignments Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 11/22] perf: add performance test for pickaxe Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 12/22] pickaxe: refactor function selection in diffcore-pickaxe() Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 13/22] pickaxe: assert that we must have a needle under -G or -S Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 14/22] pickaxe -S: support content with NULs under --pickaxe-regex Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 15/22] pickaxe: rename variables in has_changes() for brevity Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 16/22] pickaxe -S: slightly optimize contains() Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 17/22] xdiff-interface: prepare for allowing early return Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 18/22] xdiff-interface: allow early return from xdiff_emit_line_fn Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 19/22] pickaxe -G: terminate early on matching lines Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 20/22] pickaxe -G: don't special-case create/delete Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 21/22] xdiff users: use designated initializers for out_line Ævar Arnfjörð Bjarmason
2021-04-12 17:15 ` [PATCH v3 22/22] xdiff-interface: replace discard_hunk_line() with a flag Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 01/22] grep/pcre2 tests: reword comments referring to kwset Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 02/22] test-lib-functions: document and test test_commit --no-tag Ævar Arnfjörð Bjarmason
2021-03-30 23:14 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 03/22] test-lib-functions: reword "test_commit --append" docs Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 04/22] test-lib functions: add --printf option to test_commit Ævar Arnfjörð Bjarmason
2021-03-30 23:11 ` Junio C Hamano
2021-04-12 13:19 ` Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 05/22] pickaxe tests: refactor to use test_commit --append --printf Ævar Arnfjörð Bjarmason
2021-03-30 23:26 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 06/22] pickaxe tests: add test for diffgrep_consume() internals Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 07/22] pickaxe tests: add test for "log -S" not being a regex Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 08/22] pickaxe tests: test for -G, -S and --find-object incompatibility Ævar Arnfjörð Bjarmason
2021-03-30 23:32 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 09/22] pickaxe: die when -G and --pickaxe-regex are combined Ævar Arnfjörð Bjarmason
2021-03-30 23:36 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 10/22] pickaxe: die when --find-object and --pickaxe-all " Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 11/22] diff.h: move pickaxe fields together again Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 12/22] pickaxe/style: consolidate declarations and assignments Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 13/22] perf: add performance test for pickaxe Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 14/22] pickaxe: refactor function selection in diffcore-pickaxe() Ævar Arnfjörð Bjarmason
2021-03-30 23:45 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 15/22] pickaxe: assert that we must have a needle under -G or -S Ævar Arnfjörð Bjarmason
2021-03-30 23:50 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 16/22] pickaxe -S: support content with NULs under --pickaxe-regex Ævar Arnfjörð Bjarmason
2021-03-30 23:54 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 17/22] pickaxe: rename variables in has_changes() for brevity Ævar Arnfjörð Bjarmason
2021-02-16 11:57 ` [PATCH v2 18/22] pickaxe -S: slightly optimize contains() Ævar Arnfjörð Bjarmason
2021-03-30 23:58 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 19/22] xdiff-interface: allow early return from xdiff_emit_{line,hunk}_fn Ævar Arnfjörð Bjarmason
2021-03-31 0:04 ` Junio C Hamano
2021-02-16 11:57 ` [PATCH v2 20/22] xdiff-interface: support early exit in xdiff_outf() Ævar Arnfjörð Bjarmason
2021-02-16 11:58 ` [PATCH v2 21/22] pickaxe -G: terminate early on matching lines Ævar Arnfjörð Bjarmason
2021-03-31 0:11 ` Junio C Hamano
2021-02-16 11:58 ` [PATCH v2 22/22] pickaxe -G: don't special-case create/delete Ævar Arnfjörð Bjarmason
2021-03-31 0:14 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210203032811.14979-22-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=carenas@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).