Re: [PATCH v4 2/2] apply: reload .gitattributes after patching it
From: Phillip Wood <hidden>
Date: 2019-08-19 09:55:33
On 19/08/2019 10:41, Phillip Wood wrote:
[...]quoted
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
Best Wishes Phillipquoted
+ 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 structindex_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 structindex_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 supportdiff --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 && (