This series makes rebase --am honor the .gitattributes file for subsequent patches when a patch changes it. Changes from v5: * Avoid leaking memory from already parsed filter rules. Changes from v4: * Wrap lines in apply.c. * Handle merge and conflict-marker-size attributes. * Add tests for am and am -3 in addition to rebase. Changes from v3: * Check for both addition and removal of .gitattributes files. * Switch from "test_config" to "git config". Changes from v2: * Rename has_path_suffix to ends_with_path_components. Changes from v1: * Add has_path_suffix in a separate commit. brian m. carlson (2): path: add a function to check for path suffix am: reload .gitattributes after patching it apply.c | 11 ++++++++++ convert.c | 21 ++++++++++++++++++- convert.h | 6 ++++++ ll-merge.c | 19 +++++++++++++---- ll-merge.h | 1 + path.c | 39 +++++++++++++++++++++++++++-------- path.h | 3 +++ t/t3400-rebase.sh | 36 ++++++++++++++++++++++++++++++++ t/t4150-am.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 174 insertions(+), 14 deletions(-) Range-diff against v5: 1: 2077a0829e ! 1: 1573fbd82d am: reload .gitattributes after patching it @@ convert.c: static void convert_attrs(const struct index_state *istate, +void reset_parsed_attributes(void) +{ ++ struct convert_driver *drv, *next; ++ + attr_check_free(check); + check = NULL; + reset_merge_attributes(); ++ ++ for (drv = user_convert; drv; drv = next) { ++ next = drv->next; ++ free((void *)drv->name); ++ free(drv); ++ } ++ user_convert = NULL; ++ user_convert_tail = NULL; +} + int would_convert_to_git_filter_fd(const struct index_state *istate, const char *path)