Browse Source

Merge branch 'as/log-output-encoding-in-user-format'

"log --format=" did not honor i18n.logoutputencoding configuration
and this attempts to fix it.

* as/log-output-encoding-in-user-format:
  t4205 (log-pretty-formats): avoid using `sed`
  t6006 (rev-list-format): add tests for "%b" and "%s" for the case i18n.commitEncoding is not set
  t4205, t6006, t7102: make functions better readable
  t4205 (log-pretty-formats): revert back single quotes
  t4041, t4205, t6006, t7102: use iso8859-1 rather than iso-8859-1
  t4205: replace .\+ with ..* in sed commands
  pretty: --format output should honor logOutputEncoding
  pretty: Add failing tests: --format output should honor logOutputEncoding
  t4205 (log-pretty-formats): don't hardcode SHA-1 in expected outputs
  t7102 (reset): don't hardcode SHA-1 in expected outputs
  t6006 (rev-list-format): don't hardcode SHA-1 in expected outputs
maint
Junio C Hamano 11 years ago
parent
commit
8a6482227c
  1. 5
      builtin/reset.c
  2. 1
      builtin/rev-list.c
  3. 1
      builtin/shortlog.c
  4. 1
      log-tree.c
  5. 1
      submodule.c
  6. 25
      t/t4041-diff-submodule-option.sh
  7. 120
      t/t4205-log-pretty-formats.sh
  8. 208
      t/t6006-rev-list-format.sh
  9. 39
      t/t7102-reset.sh

5
builtin/reset.c

@ -93,10 +93,12 @@ static int reset_index(const unsigned char *sha1, int reset_type, int quiet) @@ -93,10 +93,12 @@ static int reset_index(const unsigned char *sha1, int reset_type, int quiet)
static void print_new_head_line(struct commit *commit)
{
const char *hex, *body;
char *msg;

hex = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV);
printf(_("HEAD is now at %s"), hex);
body = strstr(commit->buffer, "\n\n");
msg = logmsg_reencode(commit, NULL, get_log_output_encoding());
body = strstr(msg, "\n\n");
if (body) {
const char *eol;
size_t len;
@ -107,6 +109,7 @@ static void print_new_head_line(struct commit *commit) @@ -107,6 +109,7 @@ static void print_new_head_line(struct commit *commit)
}
else
printf("\n");
logmsg_free(msg, commit);
}

static void update_index_from_diff(struct diff_queue_struct *q,

1
builtin/rev-list.c

@ -111,6 +111,7 @@ static void show_commit(struct commit *commit, void *data) @@ -111,6 +111,7 @@ static void show_commit(struct commit *commit, void *data)
ctx.date_mode = revs->date_mode;
ctx.date_mode_explicit = revs->date_mode_explicit;
ctx.fmt = revs->commit_format;
ctx.output_encoding = get_log_output_encoding();
pretty_print_commit(&ctx, commit, &buf);
if (revs->graph) {
if (buf.len) {

1
builtin/shortlog.c

@ -137,6 +137,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit) @@ -137,6 +137,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
ctx.subject = "";
ctx.after_subject = "";
ctx.date_mode = DATE_NORMAL;
ctx.output_encoding = get_log_output_encoding();
pretty_print_commit(&ctx, commit, &ufbuf);
buffer = ufbuf.buf;
} else if (*buffer) {

1
log-tree.c

@ -617,6 +617,7 @@ void show_log(struct rev_info *opt) @@ -617,6 +617,7 @@ void show_log(struct rev_info *opt)
ctx.fmt = opt->commit_format;
ctx.mailmap = opt->mailmap;
ctx.color = opt->diffopt.use_color;
ctx.output_encoding = get_log_output_encoding();
pretty_print_commit(&ctx, commit, &msgbuf);

if (opt->add_signoff)

1
submodule.c

@ -226,6 +226,7 @@ static void print_submodule_summary(struct rev_info *rev, FILE *f, @@ -226,6 +226,7 @@ static void print_submodule_summary(struct rev_info *rev, FILE *f,
while ((commit = get_revision(rev))) {
struct pretty_print_context ctx = {0};
ctx.date_mode = rev->date_mode;
ctx.output_encoding = get_log_output_encoding();
strbuf_setlen(&sb, 0);
strbuf_addstr(&sb, line_prefix);
if (commit->object.flags & SYMMETRIC_LEFT) {

25
t/t4041-diff-submodule-option.sh

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
#!/bin/sh
#
# Copyright (c) 2009 Jens Lehmann, based on t7401 by Ping Yin
# Copyright (c) 2011 Alexey Shumkin (+ non-UTF-8 commit encoding tests)
#

test_description='Support for verbose submodule differences in git diff
@ -10,6 +11,9 @@ This test tries to verify the sanity of the --submodule option of git diff. @@ -10,6 +11,9 @@ This test tries to verify the sanity of the --submodule option of git diff.

. ./test-lib.sh

# String "added" in German (translated with Google Translate), encoded in UTF-8,
# used in sample commit log messages in add_file() function below.
added=$(printf "hinzugef\303\274gt")
add_file () {
(
cd "$1" &&
@ -19,7 +23,8 @@ add_file () { @@ -19,7 +23,8 @@ add_file () {
echo "$name" >"$name" &&
git add "$name" &&
test_tick &&
git commit -m "Add $name" || exit
msg_added_iso88591=$(echo "Add $name ($added $name)" | iconv -f utf-8 -t iso8859-1) &&
git -c 'i18n.commitEncoding=iso8859-1' commit -m "$msg_added_iso88591"
done >/dev/null &&
git rev-parse --short --verify HEAD
)
@ -93,7 +98,7 @@ test_expect_success 'modified submodule(forward)' ' @@ -93,7 +98,7 @@ test_expect_success 'modified submodule(forward)' '
git diff-index -p --submodule=log HEAD >actual &&
cat >expected <<-EOF &&
Submodule sm1 $head1..$head2:
> Add foo3
> Add foo3 ($added foo3)
EOF
test_cmp expected actual
'
@ -102,7 +107,7 @@ test_expect_success 'modified submodule(forward)' ' @@ -102,7 +107,7 @@ test_expect_success 'modified submodule(forward)' '
git diff --submodule=log >actual &&
cat >expected <<-EOF &&
Submodule sm1 $head1..$head2:
> Add foo3
> Add foo3 ($added foo3)
EOF
test_cmp expected actual
'
@ -111,7 +116,7 @@ test_expect_success 'modified submodule(forward) --submodule' ' @@ -111,7 +116,7 @@ test_expect_success 'modified submodule(forward) --submodule' '
git diff --submodule >actual &&
cat >expected <<-EOF &&
Submodule sm1 $head1..$head2:
> Add foo3
> Add foo3 ($added foo3)
EOF
test_cmp expected actual
'
@ -142,8 +147,8 @@ test_expect_success 'modified submodule(backward)' ' @@ -142,8 +147,8 @@ test_expect_success 'modified submodule(backward)' '
git diff-index -p --submodule=log HEAD >actual &&
cat >expected <<-EOF &&
Submodule sm1 $head2..$head3 (rewind):
< Add foo3
< Add foo2
< Add foo3 ($added foo3)
< Add foo2 ($added foo2)
EOF
test_cmp expected actual
'
@ -153,10 +158,10 @@ test_expect_success 'modified submodule(backward and forward)' ' @@ -153,10 +158,10 @@ test_expect_success 'modified submodule(backward and forward)' '
git diff-index -p --submodule=log HEAD >actual &&
cat >expected <<-EOF &&
Submodule sm1 $head2...$head4:
> Add foo5
> Add foo4
< Add foo3
< Add foo2
> Add foo5 ($added foo5)
> Add foo4 ($added foo4)
< Add foo3 ($added foo3)
< Add foo2 ($added foo2)
EOF
test_cmp expected actual
'

120
t/t4205-log-pretty-formats.sh

@ -1,20 +1,38 @@ @@ -1,20 +1,38 @@
#!/bin/sh
#
# Copyright (c) 2010, Will Palmer
# Copyright (c) 2011, Alexey Shumkin (+ non-UTF-8 commit encoding tests)
#

test_description='Test pretty formats'
. ./test-lib.sh

sample_utf8_part=$(printf "f\303\244ng")

commit_msg () {
# String "initial. initial" partly in German
# (translated with Google Translate),
# encoded in UTF-8, used as a commit log message below.
msg="initial. an${sample_utf8_part}lich\n"
if test -n "$1"
then
printf "$msg" | iconv -f utf-8 -t "$1"
else
printf "$msg"
fi
}

test_expect_success 'set up basic repos' '
>foo &&
>bar &&
git add foo &&
test_tick &&
git commit -m initial &&
git config i18n.commitEncoding iso8859-1 &&
git commit -m "$(commit_msg iso8859-1)" &&
git add bar &&
test_tick &&
git commit -m "add bar"
git commit -m "add bar" &&
git config --unset i18n.commitEncoding
'

test_expect_success 'alias builtin format' '
@ -38,6 +56,20 @@ test_expect_success 'alias user-defined format' ' @@ -38,6 +56,20 @@ test_expect_success 'alias user-defined format' '
test_cmp expected actual
'

test_expect_success 'alias user-defined tformat with %s (iso8859-1 encoding)' '
git config i18n.logOutputEncoding iso8859-1 &&
git log --oneline >expected-s &&
git log --pretty="tformat:%h %s" >actual-s &&
git config --unset i18n.logOutputEncoding &&
test_cmp expected-s actual-s
'

test_expect_success 'alias user-defined tformat with %s (utf-8 encoding)' '
git log --oneline >expected-s &&
git log --pretty="tformat:%h %s" >actual-s &&
test_cmp expected-s actual-s
'

test_expect_success 'alias user-defined tformat' '
git log --pretty="tformat:%h" >expected &&
git config pretty.test-alias "tformat:%h" &&
@ -72,13 +104,13 @@ test_expect_success 'alias loop' ' @@ -72,13 +104,13 @@ test_expect_success 'alias loop' '
'

test_expect_success 'NUL separation' '
printf "add bar\0initial" >expected &&
printf "add bar\0$(commit_msg)" >expected &&
git log -z --pretty="format:%s" >actual &&
test_cmp expected actual
'

test_expect_success 'NUL termination' '
printf "add bar\0initial\0" >expected &&
printf "add bar\0$(commit_msg)\0" >expected &&
git log -z --pretty="tformat:%s" >actual &&
test_cmp expected actual
'
@ -86,7 +118,7 @@ test_expect_success 'NUL termination' ' @@ -86,7 +118,7 @@ test_expect_success 'NUL termination' '
test_expect_success 'NUL separation with --stat' '
stat0_part=$(git diff --stat HEAD^ HEAD) &&
stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
printf "add bar\n$stat0_part\n\0initial\n$stat1_part\n" >expected &&
printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n" >expected &&
git log -z --stat --pretty="format:%s" >actual &&
test_i18ncmp expected actual
'
@ -94,25 +126,29 @@ test_expect_success 'NUL separation with --stat' ' @@ -94,25 +126,29 @@ test_expect_success 'NUL separation with --stat' '
test_expect_failure 'NUL termination with --stat' '
stat0_part=$(git diff --stat HEAD^ HEAD) &&
stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
printf "add bar\n$stat0_part\n\0initial\n$stat1_part\n\0" >expected &&
printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n0" >expected &&
git log -z --stat --pretty="tformat:%s" >actual &&
test_i18ncmp expected actual
'

test_expect_success 'setup more commits' '
test_commit "message one" one one message-one &&
test_commit "message two" two two message-two
test_commit "message two" two two message-two &&
head1=$(git rev-parse --verify --short HEAD~0) &&
head2=$(git rev-parse --verify --short HEAD~1) &&
head3=$(git rev-parse --verify --short HEAD~2) &&
head4=$(git rev-parse --verify --short HEAD~3)
'

test_expect_success 'left alignment formatting' '
git log --pretty="format:%<(40)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
qz_to_tab_space <<EOF >expected &&
message two Z
message one Z
add bar Z
initial Z
$(commit_msg) Z
EOF
test_cmp expected actual
'
@ -121,11 +157,11 @@ test_expect_success 'left alignment formatting at the nth column' ' @@ -121,11 +157,11 @@ test_expect_success 'left alignment formatting at the nth column' '
git log --pretty="format:%h %<|(40)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
fa33ab1 message two Z
7cd6c63 message one Z
1711bf9 add bar Z
af20c06 initial Z
qz_to_tab_space <<EOF >expected &&
$head1 message two Z
$head2 message one Z
$head3 add bar Z
$head4 $(commit_msg) Z
EOF
test_cmp expected actual
'
@ -134,11 +170,11 @@ test_expect_success 'left alignment formatting with no padding' ' @@ -134,11 +170,11 @@ test_expect_success 'left alignment formatting with no padding' '
git log --pretty="format:%<(1)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
cat <<\EOF >expected &&
cat <<EOF >expected &&
message two
message one
add bar
initial
$(commit_msg)
EOF
test_cmp expected actual
'
@ -147,11 +183,11 @@ test_expect_success 'left alignment formatting with trunc' ' @@ -147,11 +183,11 @@ test_expect_success 'left alignment formatting with trunc' '
git log --pretty="format:%<(10,trunc)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
qz_to_tab_space <<EOF >expected &&
message ..
message ..
add bar Z
initial Z
initial...
EOF
test_cmp expected actual
'
@ -160,11 +196,11 @@ test_expect_success 'left alignment formatting with ltrunc' ' @@ -160,11 +196,11 @@ test_expect_success 'left alignment formatting with ltrunc' '
git log --pretty="format:%<(10,ltrunc)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
qz_to_tab_space <<EOF >expected &&
..sage two
..sage one
add bar Z
initial Z
..${sample_utf8_part}lich
EOF
test_cmp expected actual
'
@ -173,11 +209,11 @@ test_expect_success 'left alignment formatting with mtrunc' ' @@ -173,11 +209,11 @@ test_expect_success 'left alignment formatting with mtrunc' '
git log --pretty="format:%<(10,mtrunc)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
qz_to_tab_space <<EOF >expected &&
mess.. two
mess.. one
add bar Z
initial Z
init..lich
EOF
test_cmp expected actual
'
@ -186,11 +222,11 @@ test_expect_success 'right alignment formatting' ' @@ -186,11 +222,11 @@ test_expect_success 'right alignment formatting' '
git log --pretty="format:%>(40)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
qz_to_tab_space <<EOF >expected &&
Z message two
Z message one
Z add bar
Z initial
Z $(commit_msg)
EOF
test_cmp expected actual
'
@ -199,11 +235,11 @@ test_expect_success 'right alignment formatting at the nth column' ' @@ -199,11 +235,11 @@ test_expect_success 'right alignment formatting at the nth column' '
git log --pretty="format:%h %>|(40)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
fa33ab1 message two
7cd6c63 message one
1711bf9 add bar
af20c06 initial
qz_to_tab_space <<EOF >expected &&
$head1 message two
$head2 message one
$head3 add bar
$head4 $(commit_msg)
EOF
test_cmp expected actual
'
@ -212,11 +248,11 @@ test_expect_success 'right alignment formatting with no padding' ' @@ -212,11 +248,11 @@ test_expect_success 'right alignment formatting with no padding' '
git log --pretty="format:%>(1)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
cat <<\EOF >expected &&
cat <<EOF >expected &&
message two
message one
add bar
initial
$(commit_msg)
EOF
test_cmp expected actual
'
@ -225,11 +261,11 @@ test_expect_success 'center alignment formatting' ' @@ -225,11 +261,11 @@ test_expect_success 'center alignment formatting' '
git log --pretty="format:%><(40)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
qz_to_tab_space <<EOF >expected &&
Z message two Z
Z message one Z
Z add bar Z
Z initial Z
Z $(commit_msg) Z
EOF
test_cmp expected actual
'
@ -238,11 +274,11 @@ test_expect_success 'center alignment formatting at the nth column' ' @@ -238,11 +274,11 @@ test_expect_success 'center alignment formatting at the nth column' '
git log --pretty="format:%h %><|(40)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
qz_to_tab_space <<\EOF >expected &&
fa33ab1 message two Z
7cd6c63 message one Z
1711bf9 add bar Z
af20c06 initial Z
qz_to_tab_space <<EOF >expected &&
$head1 message two Z
$head2 message one Z
$head3 add bar Z
$head4 $(commit_msg) Z
EOF
test_cmp expected actual
'
@ -251,11 +287,11 @@ test_expect_success 'center alignment formatting with no padding' ' @@ -251,11 +287,11 @@ test_expect_success 'center alignment formatting with no padding' '
git log --pretty="format:%><(1)%s" >actual &&
# complete the incomplete line at the end
echo >>actual &&
cat <<\EOF >expected &&
cat <<EOF >expected &&
message two
message one
add bar
initial
$(commit_msg)
EOF
test_cmp expected actual
'
@ -265,11 +301,11 @@ test_expect_success 'left/right alignment formatting with stealing' ' @@ -265,11 +301,11 @@ test_expect_success 'left/right alignment formatting with stealing' '
git log --pretty="format:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
# complete the incomplete line at the end
echo >>actual &&
cat <<\EOF >expected &&
cat <<EOF >expected &&
short long long long
message .. A U Thor
add bar A U Thor
initial A U Thor
initial... A U Thor
EOF
test_cmp expected actual
'

208
t/t6006-rev-list-format.sh

@ -1,20 +1,45 @@ @@ -1,20 +1,45 @@
#!/bin/sh

# Copyright (c) 2009 Jens Lehmann
# Copyright (c) 2011 Alexey Shumkin (+ non-UTF-8 commit encoding tests)

test_description='git rev-list --pretty=format test'

. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-terminal.sh

test_tick
# String "added" in German
# (translated with Google Translate),
# encoded in UTF-8, used as a commit log message below.
added=$(printf "added (hinzugef\303\274gt) foo")
added_iso88591=$(echo "$added" | iconv -f utf-8 -t iso8859-1)
# same but "changed"
changed=$(printf "changed (ge\303\244ndert) foo")
changed_iso88591=$(echo "$changed" | iconv -f utf-8 -t iso8859-1)

test_expect_success 'setup' '
touch foo && git add foo && git commit -m "added foo" &&
echo changed >foo && git commit -a -m "changed foo"
: >foo &&
git add foo &&
git config i18n.commitEncoding iso8859-1 &&
git commit -m "$added_iso88591" &&
head1=$(git rev-parse --verify HEAD) &&
head1_short=$(git rev-parse --verify --short $head1) &&
tree1=$(git rev-parse --verify HEAD:) &&
tree1_short=$(git rev-parse --verify --short $tree1) &&
echo "$changed" > foo &&
git commit -a -m "$changed_iso88591" &&
head2=$(git rev-parse --verify HEAD) &&
head2_short=$(git rev-parse --verify --short $head2) &&
tree2=$(git rev-parse --verify HEAD:) &&
tree2_short=$(git rev-parse --verify --short $tree2)
git config --unset i18n.commitEncoding
'

# usage: test_format name format_string <expected_output
# usage: test_format name format_string [failure] <expected_output
test_format () {
cat >expect.$1
test_expect_success "format $1" "
test_expect_${3:-success} "format $1" "
git rev-list --pretty=format:'$2' master >output.$1 &&
test_cmp expect.$1 output.$1
"
@ -32,49 +57,49 @@ has_no_color () { @@ -32,49 +57,49 @@ has_no_color () {
test_cmp expect "$1"
}

test_format percent %%h <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
test_format percent %%h <<EOF
commit $head2
%h
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
commit $head1
%h
EOF

test_format hash %H%n%h <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
131a310eb913d107dd3c09a65d1651175898735d
131a310
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
86c75cfd708a0e5868dc876ed5b8bb66c80b4873
86c75cf
test_format hash %H%n%h <<EOF
commit $head2
$head2
$head2_short
commit $head1
$head1
$head1_short
EOF

test_format tree %T%n%t <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
fe722612f26da5064c32ca3843aa154bdb0b08a0
fe72261
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
4d5fcadc293a348e88f777dc0920f11e7d71441c
4d5fcad
test_format tree %T%n%t <<EOF
commit $head2
$tree2
$tree2_short
commit $head1
$tree1
$tree1_short
EOF

test_format parents %P%n%p <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
86c75cfd708a0e5868dc876ed5b8bb66c80b4873
86c75cf
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
test_format parents %P%n%p <<EOF
commit $head2
$head1
$head1_short
commit $head1


EOF

# we don't test relative here
test_format author %an%n%ae%n%ad%n%aD%n%at <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
test_format author %an%n%ae%n%ad%n%aD%n%at <<EOF
commit $head2
A U Thor
author@example.com
Thu Apr 7 15:13:13 2005 -0700
Thu, 7 Apr 2005 15:13:13 -0700
1112911993
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
commit $head1
A U Thor
author@example.com
Thu Apr 7 15:13:13 2005 -0700
@ -82,14 +107,14 @@ Thu, 7 Apr 2005 15:13:13 -0700 @@ -82,14 +107,14 @@ Thu, 7 Apr 2005 15:13:13 -0700
1112911993
EOF

test_format committer %cn%n%ce%n%cd%n%cD%n%ct <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
test_format committer %cn%n%ce%n%cd%n%cD%n%ct <<EOF
commit $head2
C O Mitter
committer@example.com
Thu Apr 7 15:13:13 2005 -0700
Thu, 7 Apr 2005 15:13:13 -0700
1112911993
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
commit $head1
C O Mitter
committer@example.com
Thu Apr 7 15:13:13 2005 -0700
@ -97,43 +122,45 @@ Thu, 7 Apr 2005 15:13:13 -0700 @@ -97,43 +122,45 @@ Thu, 7 Apr 2005 15:13:13 -0700
1112911993
EOF

test_format encoding %e <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
test_format encoding %e <<EOF
commit $head2
iso8859-1
commit $head1
iso8859-1
EOF

test_format subject %s <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
changed foo
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
added foo
test_format subject %s <<EOF
commit $head2
$changed
commit $head1
$added
EOF

test_format body %b <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
test_format body %b <<EOF
commit $head2
commit $head1
EOF

test_format raw-body %B <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
changed foo
test_format raw-body %B <<EOF
commit $head2
$changed

commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
added foo
commit $head1
$added

EOF

test_format colors %Credfoo%Cgreenbar%Cbluebaz%Cresetxyzzy <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
test_format colors %Credfoo%Cgreenbar%Cbluebaz%Cresetxyzzy <<EOF
commit $head2
foobarbazxyzzy
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
commit $head1
foobarbazxyzzy
EOF

test_format advanced-colors '%C(red yellow bold)foo%C(reset)' <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
test_format advanced-colors '%C(red yellow bold)foo%C(reset)' <<EOF
commit $head2
foo
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
commit $head1
foo
EOF

@ -179,46 +206,71 @@ test_expect_success '%C(auto) respects --color=auto (stdout not tty)' ' @@ -179,46 +206,71 @@ test_expect_success '%C(auto) respects --color=auto (stdout not tty)' '
)
'

cat >commit-msg <<'EOF'
iconv -f utf-8 -t iso8859-1 > commit-msg <<EOF
Test printing of complex bodies

This commit message is much longer than the others,
and it will be encoded in iso8859-1. We should therefore
include an iso8859 character: ¡bueno!
include an iso8859 character: ¡bueno!
EOF

test_expect_success 'setup complex body' '
git config i18n.commitencoding iso8859-1 &&
echo change2 >foo && git commit -a -F commit-msg
git config i18n.commitencoding iso8859-1 &&
echo change2 >foo && git commit -a -F commit-msg &&
head3=$(git rev-parse --verify HEAD) &&
head3_short=$(git rev-parse --short $head3)
'

test_format complex-encoding %e <<'EOF'
commit 1ed88da4a5b5ed8c449114ac131efc62178734c3
test_format complex-encoding %e <<EOF
commit $head3
iso8859-1
commit $head2
iso8859-1
commit $head1
iso8859-1
commit 131a310eb913d107dd3c09a65d1651175898735d
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
EOF

test_format complex-subject %s <<'EOF'
commit 1ed88da4a5b5ed8c449114ac131efc62178734c3
test_format complex-subject %s <<EOF
commit $head3
Test printing of complex bodies
commit 131a310eb913d107dd3c09a65d1651175898735d
changed foo
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
added foo
commit $head2
$changed_iso88591
commit $head1
$added_iso88591
EOF

test_format complex-body %b <<'EOF'
commit 1ed88da4a5b5ed8c449114ac131efc62178734c3
This commit message is much longer than the others,
and it will be encoded in iso8859-1. We should therefore
include an iso8859 character: ¡bueno!
test_expect_success 'prepare expected messages (for test %b)' '
cat <<-EOF >expected.utf-8 &&
commit $head3
This commit message is much longer than the others,
and it will be encoded in iso8859-1. We should therefore
include an iso8859 character: ¡bueno!

commit $head2
commit $head1
EOF
iconv -f utf-8 -t iso8859-1 expected.utf-8 >expected.iso8859-1
'

test_format complex-body %b <expected.iso8859-1

commit 131a310eb913d107dd3c09a65d1651175898735d
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
# Git uses i18n.commitEncoding if no i18n.logOutputEncoding set
# so unset i18n.commitEncoding to test encoding conversion
git config --unset i18n.commitEncoding

test_format complex-subject-commitencoding-unset %s <<EOF
commit $head3
Test printing of complex bodies
commit $head2
$changed
commit $head1
$added
EOF

test_format complex-body-commitencoding-unset %b <expected.utf-8

test_expect_success '%x00 shows NUL' '
echo >expect commit 1ed88da4a5b5ed8c449114ac131efc62178734c3 &&
echo >expect commit $head3 &&
echo >>expect fooQbar &&
git rev-list -1 --format=foo%x00bar HEAD >actual.nul &&
nul_to_q <actual.nul >actual &&
@ -265,12 +317,12 @@ test_expect_success 'add LF before non-empty (2)' ' @@ -265,12 +317,12 @@ test_expect_success 'add LF before non-empty (2)' '

test_expect_success 'add SP before non-empty (1)' '
git show -s --pretty=format:"%s% bThanks" HEAD^^ >actual &&
test $(wc -w <actual) = 2
test $(wc -w <actual) = 3
'

test_expect_success 'add SP before non-empty (2)' '
git show -s --pretty=format:"%s% sThanks" HEAD^^ >actual &&
test $(wc -w <actual) = 4
test $(wc -w <actual) = 6
'

test_expect_success '--abbrev' '

39
t/t7102-reset.sh

@ -9,6 +9,19 @@ Documented tests for git reset' @@ -9,6 +9,19 @@ Documented tests for git reset'

. ./test-lib.sh

commit_msg () {
# String "modify 2nd file (changed)" partly in German
# (translated with Google Translate),
# encoded in UTF-8, used as a commit log message below.
msg="modify 2nd file (ge\303\244ndert)\n"
if test -n "$1"
then
printf "$msg" | iconv -f utf-8 -t "$1"
else
printf "$msg"
fi
}

test_expect_success 'creating initial files and commits' '
test_tick &&
echo "1st file" >first &&
@ -28,7 +41,7 @@ test_expect_success 'creating initial files and commits' ' @@ -28,7 +41,7 @@ test_expect_success 'creating initial files and commits' '

echo "1st line 2nd file" >secondfile &&
echo "2nd line 2nd file" >>secondfile &&
git commit -a -m "modify 2nd file" &&
git -c "i18n.commitEncoding=iso8859-1" commit -a -m "$(commit_msg iso8859-1)" &&
head5=$(git rev-parse --verify HEAD)
'
# git log --pretty=oneline # to see those SHA1 involved
@ -44,6 +57,20 @@ check_changes () { @@ -44,6 +57,20 @@ check_changes () {
done | test_cmp .cat_expect -
}

test_expect_success 'reset --hard message' '
hex=$(git log -1 --format="%h") &&
git reset --hard > .actual &&
echo HEAD is now at $hex $(commit_msg) > .expected &&
test_cmp .expected .actual
'

test_expect_success 'reset --hard message (iso8859-1 logoutputencoding)' '
hex=$(git log -1 --format="%h") &&
git -c "i18n.logOutputEncoding=iso8859-1" reset --hard > .actual &&
echo HEAD is now at $hex $(commit_msg iso8859-1) > .expected &&
test_cmp .expected .actual
'

>.diff_expect
>.cached_expect
cat >.cat_expect <<EOF
@ -192,7 +219,8 @@ test_expect_success \ @@ -192,7 +219,8 @@ test_expect_success \
'changing files and redo the last commit should succeed' '
echo "3rd line 2nd file" >>secondfile &&
git commit -a -C ORIG_HEAD &&
check_changes 3d3b7be011a58ca0c179ae45d94e6c83c0b0cd0d &&
head4=$(git rev-parse --verify HEAD) &&
check_changes $head4 &&
test "$(git rev-parse ORIG_HEAD)" = \
$head5
'
@ -211,7 +239,7 @@ test_expect_success \ @@ -211,7 +239,7 @@ test_expect_success \
git reset --hard HEAD~2 &&
check_changes ddaefe00f1da16864591c61fdc7adb5d7cd6b74e &&
test "$(git rev-parse ORIG_HEAD)" = \
3d3b7be011a58ca0c179ae45d94e6c83c0b0cd0d
$head4
'

>.diff_expect
@ -303,7 +331,7 @@ test_expect_success 'redoing the last two commits should succeed' ' @@ -303,7 +331,7 @@ test_expect_success 'redoing the last two commits should succeed' '

echo "1st line 2nd file" >secondfile &&
echo "2nd line 2nd file" >>secondfile &&
git commit -a -m "modify 2nd file" &&
git -c "i18n.commitEncoding=iso8859-1" commit -a -m "$(commit_msg iso8859-1)" &&
check_changes $head5
'

@ -326,10 +354,11 @@ test_expect_success '--hard reset to HEAD should clear a failed merge' ' @@ -326,10 +354,11 @@ test_expect_success '--hard reset to HEAD should clear a failed merge' '
git checkout branch2 &&
echo "3rd line in branch2" >>secondfile &&
git commit -a -m "change in branch2" &&
head3=$(git rev-parse --verify HEAD) &&

test_must_fail git pull . branch1 &&
git reset --hard &&
check_changes 77abb337073fb4369a7ad69ff6f5ec0e4d6b54bb
check_changes $head3
'

>.diff_expect

Loading…
Cancel
Save