Merge branch 'ac/auto-comment-char-fix'
"git commit" that concludes a conflicted merge failed to notice and remove existing comment added automatically (like "# Conflicts:") when the core.commentstring is set to 'auto'. * ac/auto-comment-char-fix: config: set comment_line_str to "#" when core.commentChar=auto commit: avoid scanning trailing comments when 'core.commentChar' is "auto"maint
commit
d345ceda32
|
|
@ -688,6 +688,10 @@ static void adjust_comment_line_char(const struct strbuf *sb)
|
|||
char candidates[] = "#;@!$%^&|:";
|
||||
char *candidate;
|
||||
const char *p;
|
||||
size_t cutoff;
|
||||
|
||||
/* Ignore comment chars in trailing comments (e.g., Conflicts:) */
|
||||
cutoff = sb->len - ignored_log_message_bytes(sb->buf, sb->len);
|
||||
|
||||
if (!memchr(sb->buf, candidates[0], sb->len)) {
|
||||
free(comment_line_str_to_free);
|
||||
|
|
@ -700,7 +704,7 @@ static void adjust_comment_line_char(const struct strbuf *sb)
|
|||
candidate = strchr(candidates, *p);
|
||||
if (candidate)
|
||||
*candidate = ' ';
|
||||
for (p = sb->buf; *p; p++) {
|
||||
for (p = sb->buf; p + 1 < sb->buf + cutoff; p++) {
|
||||
if ((p[0] == '\n' || p[0] == '\r') && p[1]) {
|
||||
candidate = strchr(candidates, p[1]);
|
||||
if (candidate)
|
||||
|
|
|
|||
6
config.c
6
config.c
|
|
@ -1534,9 +1534,11 @@ static int git_default_core_config(const char *var, const char *value,
|
|||
!strcmp(var, "core.commentstring")) {
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
else if (!strcasecmp(value, "auto"))
|
||||
else if (!strcasecmp(value, "auto")) {
|
||||
auto_comment_line_char = 1;
|
||||
else if (value[0]) {
|
||||
FREE_AND_NULL(comment_line_str_to_free);
|
||||
comment_line_str = "#";
|
||||
} else if (value[0]) {
|
||||
if (strchr(value, '\n'))
|
||||
return error(_("%s cannot contain newline"), var);
|
||||
comment_line_str = value;
|
||||
|
|
|
|||
|
|
@ -328,6 +328,19 @@ test_expect_success 'there is no --no-reschedule-failed-exec in an ongoing rebas
|
|||
test_expect_code 129 git rebase --edit-todo --no-reschedule-failed-exec
|
||||
'
|
||||
|
||||
test_expect_success 'no change in comment character due to conflicts markers with core.commentChar=auto' '
|
||||
git checkout -b branch-a &&
|
||||
test_commit A F1 &&
|
||||
git checkout -b branch-b HEAD^ &&
|
||||
test_commit B F1 &&
|
||||
test_must_fail git rebase branch-a &&
|
||||
printf "B\nA\n" >F1 &&
|
||||
git add F1 &&
|
||||
GIT_EDITOR="cat >actual" git -c core.commentChar=auto rebase --continue &&
|
||||
# Check that "#" is still the comment character.
|
||||
test_grep "^# Changes to be committed" actual
|
||||
'
|
||||
|
||||
test_orig_head_helper () {
|
||||
test_when_finished 'git rebase --abort &&
|
||||
git checkout topic &&
|
||||
|
|
|
|||
Loading…
Reference in New Issue