зеркало из https://github.com/microsoft/git.git
commit: accept "scissors" with CR/LF line endings
This change enhances `git commit --cleanup=scissors` by detecting scissors lines ending in either LF (UNIX-style) or CR/LF (DOS-style). Regression tests are included to specifically test for trailing comments after a CR/LF-terminated scissors line. Signed-off-by: Luke Bonanomi <lbonanomi@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Родитель
9596ddbd44
Коммит
c1677ccdb0
|
@ -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 &&
|
||||
|
|
13
wt-status.c
13
wt-status.c
|
@ -36,7 +36,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 */
|
||||
|
@ -1085,15 +1085,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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче