mirror of
https://github.com/git/git
synced 2024-10-28 19:25:47 +00:00
convert: treat an empty string for clean/smudge filters as "cat"
Once a lower-priority configuration file defines a clean or smudge filter, there is no convenient way to override it to produce as-is output. Even though the configuration mechanism implements "the last one wins" semantics, you cannot set them to an empty string and expect them to work, as apply_filter() would try to run the empty string as an external command and fail. The conversion is not done, but the function would still report a failure to convert. Even though resetting the variable to "cat" (i.e. pass the data back as-is and report success) is an obvious and a viable way to solve this, it is wasteful to spawn an external process just as a workaround. Instead, teach apply_filter() to treat an empty string as a no-op filter that always returns successfully its input as-is without conversion. Signed-off-by: Lars Schneider <larsxschneider@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1b0b6dd072
commit
1a8630dc3b
2 changed files with 17 additions and 1 deletions
|
@ -395,7 +395,7 @@ static int apply_filter(const char *path, const char *src, size_t len, int fd,
|
|||
struct async async;
|
||||
struct filter_params params;
|
||||
|
||||
if (!cmd)
|
||||
if (!cmd || !*cmd)
|
||||
return 0;
|
||||
|
||||
if (!dst)
|
||||
|
|
|
@ -252,4 +252,20 @@ test_expect_success "filter: smudge empty file" '
|
|||
test_cmp expected filtered-empty-in-repo
|
||||
'
|
||||
|
||||
test_expect_success 'disable filter with empty override' '
|
||||
test_config_global filter.disable.smudge false &&
|
||||
test_config_global filter.disable.clean false &&
|
||||
test_config filter.disable.smudge false &&
|
||||
test_config filter.disable.clean false &&
|
||||
|
||||
echo "*.disable filter=disable" >.gitattributes &&
|
||||
|
||||
echo test >test.disable &&
|
||||
git -c filter.disable.clean= add test.disable 2>err &&
|
||||
test_must_be_empty err &&
|
||||
rm -f test.disable &&
|
||||
git -c filter.disable.smudge= checkout -- test.disable 2>err &&
|
||||
test_must_be_empty err
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue