struct patch *list = NULL, **listp = &list;
int skipped_patch = 0;
int res = 0;
- int flush_attributes = 0;
state->patch_input_file = filename;
if (read_patch_file(&buf, fd) < 0)
patch_stats(state, patch);
*listp = patch;
listp = &patch->next;
-
- if ((patch->new_name && ends_with_path_components(patch->new_name, GITATTRIBUTES_FILE)) ||
- (patch->old_name && ends_with_path_components(patch->old_name, GITATTRIBUTES_FILE)))
- flush_attributes = 1;
}
else {
if (state->apply_verbosity > verbosity_normal)
if (state->summary && state->apply_verbosity > verbosity_silent)
summary_patch_list(list);
- if (flush_attributes)
- reset_parsed_attributes();
end:
free_patch_list(list);
strbuf_release(&buf);
const char *working_tree_encoding; /* Supported encoding or default encoding if NULL */
};
-static struct attr_check *check;
-
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) {
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;
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
}
/*
- * If path ends with suffix (complete path components), returns the offset of
- * the last character in the path before the suffix (sans trailing directory
- * separators), and -1 otherwise.
+ * If path ends with suffix (complete path components), returns the
+ * part before suffix (sans trailing directory separators).
+ * Otherwise returns NULL.
*/
-static ssize_t stripped_path_suffix_offset(const char *path, const char *suffix)
+char *strip_path_suffix(const char *path, const char *suffix)
{
int path_len = strlen(path), suffix_len = strlen(suffix);
while (suffix_len) {
if (!path_len)
- return -1;
+ return NULL;
if (is_dir_sep(path[path_len - 1])) {
if (!is_dir_sep(suffix[suffix_len - 1]))
- return -1;
+ return NULL;
path_len = chomp_trailing_dir_sep(path, path_len);
suffix_len = chomp_trailing_dir_sep(suffix, suffix_len);
}
else if (path[--path_len] != suffix[--suffix_len])
- return -1;
+ return NULL;
}
if (path_len && !is_dir_sep(path[path_len - 1]))
- return -1;
- return chomp_trailing_dir_sep(path, path_len);
-}
-
-/*
- * Returns true if the path ends with components, considering only complete path
- * components, and false otherwise.
- */
-int ends_with_path_components(const char *path, const char *components)
-{
- return stripped_path_suffix_offset(path, components) != -1;
-}
-
-/*
- * If path ends with suffix (complete path components), returns the
- * part before suffix (sans trailing directory separators).
- * Otherwise returns NULL.
- */
-char *strip_path_suffix(const char *path, const char *suffix)
-{
- ssize_t offset = stripped_path_suffix_offset(path, suffix);
-
- return offset == -1 ? NULL : xstrndup(path, offset);
+ return NULL;
+ return xstrndup(path, chomp_trailing_dir_sep(path, path_len));
}
int daemon_avoid_alias(const char *p)
const char *git_path_fetch_head(struct repository *r);
const char *git_path_shallow(struct repository *r);
-
-int ends_with_path_components(const char *path, const char *components);
-
#endif /* PATH_H */
)
'
-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 &&
(