Re: [PATCH v4 2/2] apply: reload .gitattributes after patching it
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Aug 19, 2019, 09:55 UTC
- Message-ID
- <2c33a668-4c7d-2114-41b1-8907c4384a15@gmail.com>
- In-Reply-To
- <9b940950-666a-0c4c-58c0-1e61ac9e654c@gmail.com>
On 19/08/2019 10:41, Phillip Wood wrote:
Show 14 quoted lines
> [...]
>> diff --git a/convert.c b/convert.c
>> index 94ff837649..030e9b81b9 100644
>> --- a/convert.c
>> +++ b/convert.c
>> @@ -1293,10 +1293,11 @@ struct conv_attrs {
>> const char *working_tree_encoding; /* Supported encoding or
>> default encoding if NULL */
>> };
>> +static struct attr_check *check;
>
> I was concerned about the impact adding a file global if we ever want to
> multi-thread this for submodules, but looking through the file there are
> a couple of others already so this isn't creating a new problem.Doh, I've just realized it was static already - ignore that.
One thing did occur to me though - does this patch reset attributes like the merge marker length (they're less critical though if there is a conflict after an attribute change it would be nice to have the correct length) or just the ones for filtering files?
Best Wishes
Phillip
Show 93 quoted lines
>
> Best Wishes
>
> Phillip
>
>> +
>> static void convert_attrs(const struct index_state *istate,
>> struct conv_attrs *ca, const char *path)
>> {
>> - static struct attr_check *check;
>> struct attr_check_item *ccheck = NULL;
>> if (!check) {
>> @@ -1339,6 +1340,12 @@ static void convert_attrs(const struct
>> index_state *istate,
>> ca->crlf_action = CRLF_AUTO_INPUT;
>> }
>> +void reset_parsed_attributes(void)
>> +{
>> + attr_check_free(check);
>> + check = NULL;
>> +}
>> +
>> int would_convert_to_git_filter_fd(const struct index_state *istate,
>> const char *path)
>> {
>> struct conv_attrs ca;
>> diff --git a/convert.h b/convert.h
>> index 831559f10d..3710969d43 100644
>> --- a/convert.h
>> +++ b/convert.h
>> @@ -94,6 +94,12 @@ void convert_to_git_filter_fd(const struct
>> index_state *istate,
>> int would_convert_to_git_filter_fd(const struct index_state *istate,
>> const char *path);
>> +/*
>> + * Reset the internal list of attributes used by convert_to_git and
>> + * convert_to_working_tree.
>> + */
>> +void reset_parsed_attributes(void);
>> +
>> /*****************************************************************
>> *
>> * Streaming conversion support
>> diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
>> index 80b23fd326..23469cc789 100755
>> --- a/t/t3400-rebase.sh
>> +++ b/t/t3400-rebase.sh
>> @@ -301,6 +301,42 @@ test_expect_success 'rebase --am and
>> --show-current-patch' '
>> )
>> '
>> +test_expect_success 'rebase --am and .gitattributes' '
>> + test_create_repo attributes &&
>> + (
>> + cd attributes &&
>> + test_commit init &&
>> + git config filter.test.clean "sed -e
>> '\''s/smudged/clean/g'\''" &&
>> + git config filter.test.smudge "sed -e
>> '\''s/clean/smudged/g'\''" &&
>> +
>> + test_commit second &&
>> + git checkout -b test HEAD^ &&
>> +
>> + echo "*.txt filter=test" >.gitattributes &&
>> + git add .gitattributes &&
>> + test_commit third &&
>> +
>> + echo "This text is smudged." >a.txt &&
>> + git add a.txt &&
>> + test_commit fourth &&
>> +
>> + git checkout -b removal HEAD^ &&
>> + git rm .gitattributes &&
>> + git add -u &&
>> + test_commit fifth &&
>> + git cherry-pick test &&
>> +
>> + git checkout test &&
>> + git rebase master &&
>> + grep "smudged" a.txt &&
>> +
>> + git checkout removal &&
>> + git reset --hard &&
>> + git rebase master &&
>> + grep "clean" a.txt
>> + )
>> +'
>> +
>> test_expect_success 'rebase--merge.sh and --show-current-patch' '
>> test_create_repo conflict-merge &&
>> (
>>