summaryrefslogtreecommitdiff
path: root/src/diff_driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/diff_driver.c')
-rw-r--r--src/diff_driver.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/diff_driver.c b/src/diff_driver.c
index 169f7b025..56b5b5a51 100644
--- a/src/diff_driver.c
+++ b/src/diff_driver.c
@@ -460,16 +460,21 @@ static int diff_context_line__simple(
static int diff_context_line__pattern_match(
git_diff_driver *driver, git_buf *line)
{
- size_t i;
+ size_t i, maxi = git_array_size(driver->fn_patterns);
regmatch_t pmatch[2];
- for (i = 0; i < git_array_size(driver->fn_patterns); ++i) {
+ for (i = 0; i < maxi; ++i) {
git_diff_driver_pattern *pat = git_array_get(driver->fn_patterns, i);
if (!regexec(&pat->re, line->ptr, 2, pmatch, 0)) {
if (pat->flags & REG_NEGATE)
return false;
- /* TODO: use pmatch data to trim line data */
+
+ /* use pmatch data to trim line data */
+ i = (pmatch[1].rm_so >= 0) ? 1 : 0;
+ git_buf_consume(line, git_buf_cstr(line) + pmatch[i].rm_so);
+ git_buf_truncate(line, pmatch[i].rm_eo - pmatch[i].rm_so);
+
return true;
}
}