Merge pull request #2714 from lbonanomi/crlf-scissors

Rationalize line endings for scissors-cleanup
This commit is contained in:
Johannes Schindelin 2020-07-03 10:33:24 +02:00
commit daee3f4a30
2 changed files with 52 additions and 3 deletions

View File

@ -623,6 +623,48 @@ test_expect_success 'cleanup commit messages (scissors option,-F,-e, scissors on
test_must_be_empty actual
'
test_expect_success 'helper-editor' '
write_script lf-to-crlf.sh <<-\EOF
sed "s/\$/Q/" <"$1" | tr Q "\\015" >"$1".new &&
mv -f "$1".new "$1"
EOF
'
test_expect_success 'cleanup commit messages (scissors option,-F,-e, CR/LF line endings)' '
test_config core.editor "\"$PWD/lf-to-crlf.sh\"" &&
scissors="# ------------------------ >8 ------------------------" &&
test_write_lines >text \
"# Keep this comment" "" " $scissors" \
"# Keep this comment, too" "$scissors" \
"# Remove this comment" "$scissors" \
"Remove this comment, too" &&
test_write_lines >expect \
"# Keep this comment" "" " $scissors" \
"# Keep this comment, too" &&
git commit --cleanup=scissors -e -F text --allow-empty &&
git cat-file -p HEAD >raw &&
sed -e "1,/^\$/d" raw >actual &&
test_cmp expect actual
'
test_expect_success 'cleanup commit messages (scissors option,-F,-e, scissors on first line, CR/LF line endings)' '
scissors="# ------------------------ >8 ------------------------" &&
test_write_lines >text \
"$scissors" \
"# Remove this comment and any following lines" &&
cp text /tmp/test2-text &&
git commit --cleanup=scissors -e -F text --allow-empty --allow-empty-message &&
git cat-file -p HEAD >raw &&
sed -e "1,/^\$/d" raw >actual &&
test_must_be_empty actual
'
test_expect_success 'cleanup commit messages (strip option,-F)' '
echo >>negative &&

View File

@ -40,7 +40,7 @@
#define UF_DELAY_WARNING_IN_MS (2 * 1000)
static const char cut_line[] =
"------------------------ >8 ------------------------\n";
"------------------------ >8 ------------------------";
static char default_wt_status_colors[][COLOR_MAXLEN] = {
GIT_COLOR_NORMAL, /* WT_STATUS_HEADER */
@ -1097,15 +1097,22 @@ conclude:
status_printf_ln(s, GIT_COLOR_NORMAL, "%s", "");
}
static inline int starts_with_newline(const char *p)
{
return *p == '\n' || (*p == '\r' && p[1] == '\n');
}
size_t wt_status_locate_end(const char *s, size_t len)
{
const char *p;
struct strbuf pattern = STRBUF_INIT;
strbuf_addf(&pattern, "\n%s %s", comment_line_str, cut_line);
if (starts_with(s, pattern.buf + 1))
if (starts_with(s, pattern.buf + 1) &&
starts_with_newline(s + pattern.len - 1))
len = 0;
else if ((p = strstr(s, pattern.buf))) {
else if ((p = strstr(s, pattern.buf)) &&
starts_with_newline(p + pattern.len)) {
size_t newlen = p - s + 1;
if (newlen < len)
len = newlen;