diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2015-08-15 13:43:46 -0700 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2015-08-15 13:43:46 -0700 |
commit | 0ba62ba526089061b5f8acf69f2b6166cc5a1bee (patch) | |
tree | 56cfe29a10f8dbdb0db4585a46f9542655fb8003 | |
parent | f594b6ff159960efdc87e769141c34b87f30bbf2 (diff) | |
parent | e451cd5c0350aa70e05df44bbf5cbdc0e6504f46 (diff) | |
download | libgit2-0ba62ba526089061b5f8acf69f2b6166cc5a1bee.tar.gz |
Merge pull request #3384 from libgit2/cmn/regex-nofail
diff: don't error out on an invalid regex
-rw-r--r-- | src/diff_driver.c | 13 | ||||
-rw-r--r-- | tests/diff/drivers.c | 26 |
2 files changed, 32 insertions, 7 deletions
diff --git a/src/diff_driver.c b/src/diff_driver.c index 9d1337103..bc3518991 100644 --- a/src/diff_driver.c +++ b/src/diff_driver.c @@ -97,8 +97,7 @@ static int diff_driver_add_patterns( for (scan = regex_str; scan; scan = end) { /* get pattern to fill in */ if ((pat = git_array_alloc(drv->fn_patterns)) == NULL) { - error = -1; - break; + return -1; } pat->flags = regex_flags; @@ -117,10 +116,9 @@ static int diff_driver_add_patterns( break; if ((error = regcomp(&pat->re, buf.ptr, regex_flags)) != 0) { - /* if regex fails to compile, warn? fail? */ - error = giterr_set_regex(&pat->re, error); - regfree(&pat->re); - break; + /* + * TODO: issue a warning + */ } } @@ -128,7 +126,8 @@ static int diff_driver_add_patterns( (void)git_array_pop(drv->fn_patterns); /* release last item */ git_buf_free(&buf); - return error; + /* We want to ignore bad patterns, so return success regardless */ + return 0; } static int diff_driver_xfuncname(const git_config_entry *entry, void *payload) diff --git a/tests/diff/drivers.c b/tests/diff/drivers.c index e3a0014db..42af38a9a 100644 --- a/tests/diff/drivers.c +++ b/tests/diff/drivers.c @@ -250,3 +250,29 @@ void test_diff_drivers__builtins(void) git_buf_free(&expected); git_vector_free(&files); } + +void test_diff_drivers__invalid_pattern(void) +{ + git_config *cfg; + git_index *idx; + git_diff *diff; + git_patch *patch; + git_diff_options opts = GIT_DIFF_OPTIONS_INIT; + + g_repo = cl_git_sandbox_init("userdiff"); + cl_git_mkfile("userdiff/.gitattributes", "*.storyboard diff=storyboard\n"); + + cl_git_pass(git_repository_config__weakptr(&cfg, g_repo)); + cl_git_pass(git_config_set_string(cfg, "diff.storyboard.xfuncname", "<!--(.*?)-->")); + + cl_git_mkfile("userdiff/dummy.storyboard", ""); + cl_git_pass(git_repository_index__weakptr(&idx, g_repo)); + cl_git_pass(git_index_add_bypath(idx, "dummy.storyboard")); + cl_git_mkfile("userdiff/dummy.storyboard", "some content\n"); + + cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts)); + cl_git_pass(git_patch_from_diff(&patch, diff, 0)); + + git_patch_free(patch); + git_diff_free(diff); +} |