This series makes rebase --am honor the .gitattributes file for
subsequent patches when a patch changes it.
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
apply: reload .gitattributes after patching it
apply.c | 7 +++++++
convert.c | 9 ++++++++-
convert.h | 6 ++++++
path.c | 39 ++++++++++++++++++++++++++++++---------
path.h | 3 +++
t/t3400-rebase.sh | 23 +++++++++++++++++++++++
6 files changed, 77 insertions(+), 10 deletions(-)
Range-diff against v2:
1: 125fda966c ! 1: 14c853420b path: add a function to check for path suffix
@@ Commit message
have one to check for a path suffix. For a plain filename, we can use
basename, but that requires an allocation, since POSIX allows it to
modify its argument. Refactor strip_path_suffix into a helper function
- and a new function, has_path_suffix to meet this need.
+ and a new function, ends_with_path_components, to meet this need.
Signed-off-by: brian m. carlson <[email protected]>
@@ path.c: static inline int chomp_trailing_dir_sep(const char *path, int
len)
+}
+
+/*
-+ * Returns true if the path ends with suffix, considering only complete
path
-+ * components and false otherwise.
++ * Returns true if the path ends with components, considering only
complete path
++ * components, and false otherwise.
+ */
-+int has_path_suffix(const char *path, const char *suffix)
++int ends_with_path_components(const char *path, const char *components)
+{
-+ return stripped_path_suffix_offset(path, suffix) != -1;
++ return stripped_path_suffix_offset(path, components) != -1;
+}
+
/*
@@ path.h: const char *git_path_merge_head(struct repository *r);
const char *git_path_shallow(struct repository *r);
+
-+int has_path_suffix(const char *path, const char *suffix);
++int ends_with_path_components(const char *path, const char *components);
+
#endif /* PATH_H */
2: f54af7e595 ! 2: 5f4402b38d apply: reload .gitattributes after patching it
@@ apply.c: static int apply_patch(struct apply_state *state,
listp = &patch->next;
+
+ if (!flush_attributes && patch->new_name &&
-+ has_path_suffix(patch->new_name,
GITATTRIBUTES_FILE))
++ ends_with_path_components(patch->new_name,
GITATTRIBUTES_FILE))
+ flush_attributes = 1;
}
else {