зеркало из https://github.com/microsoft/git.git
status: fix missing newline when comment chars are disabled
When git-status shows tracking data for the current branch
in the long format, we try to end the stanza with a blank
line. When status.displayCommentPrefix is true, we call
color_fprintf_ln() to do so. But when it's false, we call
the enigmatic:
fputs("", s->fp);
which does nothing at all! This is a bug from 7d7d68022
(silence a bunch of format-zero-length warnings,
2014-05-04). Prior to that, we called fprintf_ln() with an
empty string. Switching to fputs() meant we needed to
include the "newline in the string, but we didn't.
So you see:
On branch jk/status-tracking-newline
Your branch is ahead of 'origin/master' by 1 commit.
Changes not staged for commit:
modified: foo
Untracked files:
bar
whereas there should be a blank line before the "Changes not
staged" line.
The fix itself is a one-liner. But we never noticed this
bug because t7508 doesn't exercise the ahead/behind code at
all. So let's configure an upstream during the initial
setup, which means that the code will be exercised as part
of all of the various invocations in that script. This makes
the diff rather noisy, but should give us good coverage.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
027a3b943b
Коммит
75177c8591
|
@ -32,6 +32,17 @@ test_expect_success 'commit -h in broken repository' '
|
||||||
test_i18ngrep "[Uu]sage" broken/usage
|
test_i18ngrep "[Uu]sage" broken/usage
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'create upstream branch' '
|
||||||
|
git checkout -b upstream &&
|
||||||
|
test_commit upstream1 &&
|
||||||
|
test_commit upstream2 &&
|
||||||
|
# leave the first commit on master as root because several
|
||||||
|
# tests depend on this case; for our upstream we only
|
||||||
|
# care about commit counts anyway, so a totally divergent
|
||||||
|
# history is OK
|
||||||
|
git checkout --orphan master
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'setup' '
|
test_expect_success 'setup' '
|
||||||
: >tracked &&
|
: >tracked &&
|
||||||
: >modified &&
|
: >modified &&
|
||||||
|
@ -53,7 +64,9 @@ test_expect_success 'setup' '
|
||||||
echo 1 >dir1/modified &&
|
echo 1 >dir1/modified &&
|
||||||
echo 2 >dir2/modified &&
|
echo 2 >dir2/modified &&
|
||||||
echo 3 >dir2/added &&
|
echo 3 >dir2/added &&
|
||||||
git add dir2/added
|
git add dir2/added &&
|
||||||
|
|
||||||
|
git branch --set-upstream-to=upstream
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'status (1)' '
|
test_expect_success 'status (1)' '
|
||||||
|
@ -75,6 +88,10 @@ EOF
|
||||||
test_expect_success 'status --column' '
|
test_expect_success 'status --column' '
|
||||||
cat >expect <<\EOF &&
|
cat >expect <<\EOF &&
|
||||||
# On branch master
|
# On branch master
|
||||||
|
# Your branch and '\''upstream'\'' have diverged,
|
||||||
|
# and have 1 and 2 different commits each, respectively.
|
||||||
|
# (use "git pull" to merge the remote branch into yours)
|
||||||
|
#
|
||||||
# Changes to be committed:
|
# Changes to be committed:
|
||||||
# (use "git reset HEAD <file>..." to unstage)
|
# (use "git reset HEAD <file>..." to unstage)
|
||||||
#
|
#
|
||||||
|
@ -105,6 +122,10 @@ test_expect_success 'status --column status.displayCommentPrefix=false' '
|
||||||
|
|
||||||
cat >expect <<\EOF
|
cat >expect <<\EOF
|
||||||
# On branch master
|
# On branch master
|
||||||
|
# Your branch and 'upstream' have diverged,
|
||||||
|
# and have 1 and 2 different commits each, respectively.
|
||||||
|
# (use "git pull" to merge the remote branch into yours)
|
||||||
|
#
|
||||||
# Changes to be committed:
|
# Changes to be committed:
|
||||||
# (use "git reset HEAD <file>..." to unstage)
|
# (use "git reset HEAD <file>..." to unstage)
|
||||||
#
|
#
|
||||||
|
@ -178,6 +199,9 @@ test_expect_success 'commit ignores status.displayCommentPrefix=false in COMMIT_
|
||||||
|
|
||||||
cat >expect <<\EOF
|
cat >expect <<\EOF
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and 'upstream' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
new file: dir2/added
|
new file: dir2/added
|
||||||
|
|
||||||
|
@ -248,6 +272,10 @@ test_expect_success 'status with gitignore' '
|
||||||
|
|
||||||
cat >expect <<\EOF &&
|
cat >expect <<\EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -313,6 +341,10 @@ test_expect_success 'status with gitignore (nothing untracked)' '
|
||||||
|
|
||||||
cat >expect <<\EOF &&
|
cat >expect <<\EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -348,7 +380,7 @@ output*
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat >expect <<\EOF
|
cat >expect <<\EOF
|
||||||
## master
|
## master...upstream [ahead 1, behind 2]
|
||||||
M dir1/modified
|
M dir1/modified
|
||||||
A dir2/added
|
A dir2/added
|
||||||
?? dir1/untracked
|
?? dir1/untracked
|
||||||
|
@ -382,6 +414,10 @@ test_expect_success 'setup dir3' '
|
||||||
test_expect_success 'status -uno' '
|
test_expect_success 'status -uno' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -408,6 +444,9 @@ test_expect_success 'status (status.showUntrackedFiles no)' '
|
||||||
test_expect_success 'status -uno (advice.statusHints false)' '
|
test_expect_success 'status -uno (advice.statusHints false)' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
new file: dir2/added
|
new file: dir2/added
|
||||||
|
|
||||||
|
@ -439,6 +478,10 @@ test_expect_success 'status -s (status.showUntrackedFiles no)' '
|
||||||
test_expect_success 'status -unormal' '
|
test_expect_success 'status -unormal' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -493,6 +536,10 @@ test_expect_success 'status -s (status.showUntrackedFiles normal)' '
|
||||||
test_expect_success 'status -uall' '
|
test_expect_success 'status -uall' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -552,6 +599,10 @@ test_expect_success 'status -s (status.showUntrackedFiles all)' '
|
||||||
test_expect_success 'status with relative paths' '
|
test_expect_success 'status with relative paths' '
|
||||||
cat >expect <<\EOF &&
|
cat >expect <<\EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -617,6 +668,10 @@ test_expect_success 'setup unique colors' '
|
||||||
test_expect_success 'status with color.ui' '
|
test_expect_success 'status with color.ui' '
|
||||||
cat >expect <<\EOF &&
|
cat >expect <<\EOF &&
|
||||||
On branch <GREEN>master<RESET>
|
On branch <GREEN>master<RESET>
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -675,7 +730,7 @@ test_expect_success 'status -s with color.status' '
|
||||||
'
|
'
|
||||||
|
|
||||||
cat >expect <<\EOF
|
cat >expect <<\EOF
|
||||||
## <GREEN>master<RESET>
|
## <GREEN>master<RESET>...<RED>upstream<RESET> [ahead <GREEN>1<RESET>, behind <RED>2<RESET>]
|
||||||
<RED>M<RESET> dir1/modified
|
<RED>M<RESET> dir1/modified
|
||||||
<GREEN>A<RESET> dir2/added
|
<GREEN>A<RESET> dir2/added
|
||||||
<BLUE>??<RESET> dir1/untracked
|
<BLUE>??<RESET> dir1/untracked
|
||||||
|
@ -726,7 +781,7 @@ test_expect_success 'status --porcelain respects -b' '
|
||||||
|
|
||||||
git status --porcelain -b >output &&
|
git status --porcelain -b >output &&
|
||||||
{
|
{
|
||||||
echo "## master" &&
|
echo "## master...upstream [ahead 1, behind 2]" &&
|
||||||
cat expect
|
cat expect
|
||||||
} >tmp &&
|
} >tmp &&
|
||||||
mv tmp expect &&
|
mv tmp expect &&
|
||||||
|
@ -739,6 +794,10 @@ test_expect_success 'status --porcelain respects -b' '
|
||||||
test_expect_success 'status without relative paths' '
|
test_expect_success 'status without relative paths' '
|
||||||
cat >expect <<\EOF &&
|
cat >expect <<\EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -785,6 +844,10 @@ test_expect_success 'status -s without relative paths' '
|
||||||
test_expect_success 'dry-run of partial commit excluding new file in index' '
|
test_expect_success 'dry-run of partial commit excluding new file in index' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -825,6 +888,10 @@ test_expect_success 'setup status submodule summary' '
|
||||||
test_expect_success 'status submodule summary is disabled by default' '
|
test_expect_success 'status submodule summary is disabled by default' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -881,6 +948,10 @@ head=$(cd sm && git rev-parse --short=7 --verify HEAD)
|
||||||
test_expect_success 'status submodule summary' '
|
test_expect_success 'status submodule summary' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 1 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -939,6 +1010,10 @@ test_expect_success 'status -s submodule summary' '
|
||||||
test_expect_success 'status submodule summary (clean submodule): commit' '
|
test_expect_success 'status submodule summary (clean submodule): commit' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 2 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes not staged for commit:
|
Changes not staged for commit:
|
||||||
(use "git add <file>..." to update what will be committed)
|
(use "git add <file>..." to update what will be committed)
|
||||||
(use "git checkout -- <file>..." to discard changes in working directory)
|
(use "git checkout -- <file>..." to discard changes in working directory)
|
||||||
|
@ -985,6 +1060,10 @@ test_expect_success 'status -z implies porcelain' '
|
||||||
test_expect_success 'commit --dry-run submodule summary (--amend)' '
|
test_expect_success 'commit --dry-run submodule summary (--amend)' '
|
||||||
cat >expect <<EOF &&
|
cat >expect <<EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 2 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD^1 <file>..." to unstage)
|
(use "git reset HEAD^1 <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -1038,6 +1117,10 @@ touch .gitmodules
|
||||||
test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
|
test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
|
||||||
cat > expect << EOF &&
|
cat > expect << EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 2 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -1146,6 +1229,10 @@ test_expect_success '.git/config ignore=dirty suppresses submodules with modifie
|
||||||
test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
|
test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
|
||||||
cat > expect << EOF &&
|
cat > expect << EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 2 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -1202,6 +1289,10 @@ head2=$(cd sm && git commit -q -m "2nd commit" foo && git rev-parse --short=7 --
|
||||||
test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
|
test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
|
||||||
cat > expect << EOF &&
|
cat > expect << EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 2 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -1282,6 +1373,10 @@ test_expect_success ".git/config ignore=dirty doesn't suppress submodule summary
|
||||||
|
|
||||||
cat > expect << EOF
|
cat > expect << EOF
|
||||||
; On branch master
|
; On branch master
|
||||||
|
; Your branch and 'upstream' have diverged,
|
||||||
|
; and have 2 and 2 different commits each, respectively.
|
||||||
|
; (use "git pull" to merge the remote branch into yours)
|
||||||
|
;
|
||||||
; Changes to be committed:
|
; Changes to be committed:
|
||||||
; (use "git reset HEAD <file>..." to unstage)
|
; (use "git reset HEAD <file>..." to unstage)
|
||||||
;
|
;
|
||||||
|
@ -1329,6 +1424,10 @@ test_expect_success "status (core.commentchar with two chars with submodule summ
|
||||||
test_expect_success "--ignore-submodules=all suppresses submodule summary" '
|
test_expect_success "--ignore-submodules=all suppresses submodule summary" '
|
||||||
cat > expect << EOF &&
|
cat > expect << EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 2 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes not staged for commit:
|
Changes not staged for commit:
|
||||||
(use "git add <file>..." to update what will be committed)
|
(use "git add <file>..." to update what will be committed)
|
||||||
(use "git checkout -- <file>..." to discard changes in working directory)
|
(use "git checkout -- <file>..." to discard changes in working directory)
|
||||||
|
@ -1353,6 +1452,10 @@ EOF
|
||||||
test_expect_success '.gitmodules ignore=all suppresses unstaged submodule summary' '
|
test_expect_success '.gitmodules ignore=all suppresses unstaged submodule summary' '
|
||||||
cat > expect << EOF &&
|
cat > expect << EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 2 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
@ -1472,6 +1575,10 @@ test_expect_success 'git commit --dry-run will show a staged but ignored submodu
|
||||||
git add sm &&
|
git add sm &&
|
||||||
cat >expect << EOF &&
|
cat >expect << EOF &&
|
||||||
On branch master
|
On branch master
|
||||||
|
Your branch and '\''upstream'\'' have diverged,
|
||||||
|
and have 2 and 2 different commits each, respectively.
|
||||||
|
(use "git pull" to merge the remote branch into yours)
|
||||||
|
|
||||||
Changes to be committed:
|
Changes to be committed:
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
(use "git reset HEAD <file>..." to unstage)
|
||||||
|
|
||||||
|
|
|
@ -1002,7 +1002,7 @@ static void wt_longstatus_print_tracking(struct wt_status *s)
|
||||||
color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "%c",
|
color_fprintf_ln(s->fp, color(WT_STATUS_HEADER, s), "%c",
|
||||||
comment_line_char);
|
comment_line_char);
|
||||||
else
|
else
|
||||||
fputs("", s->fp);
|
fputs("\n", s->fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int has_unmerged(struct wt_status *s)
|
static int has_unmerged(struct wt_status *s)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче