mirror of
https://git.proxmox.com/git/libgit2
synced 2025-11-05 01:52:56 +00:00
Merge pull request #3384 from libgit2/cmn/regex-nofail
diff: don't error out on an invalid regex
This commit is contained in:
commit
0ba62ba526
@ -97,8 +97,7 @@ static int diff_driver_add_patterns(
|
|||||||
for (scan = regex_str; scan; scan = end) {
|
for (scan = regex_str; scan; scan = end) {
|
||||||
/* get pattern to fill in */
|
/* get pattern to fill in */
|
||||||
if ((pat = git_array_alloc(drv->fn_patterns)) == NULL) {
|
if ((pat = git_array_alloc(drv->fn_patterns)) == NULL) {
|
||||||
error = -1;
|
return -1;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pat->flags = regex_flags;
|
pat->flags = regex_flags;
|
||||||
@ -117,10 +116,9 @@ static int diff_driver_add_patterns(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
if ((error = regcomp(&pat->re, buf.ptr, regex_flags)) != 0) {
|
if ((error = regcomp(&pat->re, buf.ptr, regex_flags)) != 0) {
|
||||||
/* if regex fails to compile, warn? fail? */
|
/*
|
||||||
error = giterr_set_regex(&pat->re, error);
|
* TODO: issue a warning
|
||||||
regfree(&pat->re);
|
*/
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,7 +126,8 @@ static int diff_driver_add_patterns(
|
|||||||
(void)git_array_pop(drv->fn_patterns); /* release last item */
|
(void)git_array_pop(drv->fn_patterns); /* release last item */
|
||||||
git_buf_free(&buf);
|
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)
|
static int diff_driver_xfuncname(const git_config_entry *entry, void *payload)
|
||||||
|
|||||||
@ -250,3 +250,29 @@ void test_diff_drivers__builtins(void)
|
|||||||
git_buf_free(&expected);
|
git_buf_free(&expected);
|
||||||
git_vector_free(&files);
|
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);
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user