]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sequencer: reencode squashing commit's message
authorDoan Tran Cong Danh <congdanhqx@gmail.com>
Fri, 8 Nov 2019 09:43:48 +0000 (16:43 +0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 11 Nov 2019 00:43:48 +0000 (09:43 +0900)
On fixup/squash-ing rebase, git will create new commit in
i18n.commitencoding, reencode the commit message to that said encode.

Signed-off-by: Doan Tran Cong Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
t/t3900-i18n-commit.sh

index a19954f2bfefbb6df70f28eefcb68a921dddba34..833a9289295f6d38882fdc7c9a5d06ecb57c32d4 100644 (file)
@@ -1576,6 +1576,7 @@ static int update_squash_messages(struct repository *r,
        struct strbuf buf = STRBUF_INIT;
        int res;
        const char *message, *body;
+       const char *encoding = get_commit_output_encoding();
 
        if (opts->current_fixup_count > 0) {
                struct strbuf header = STRBUF_INIT;
@@ -1602,7 +1603,7 @@ static int update_squash_messages(struct repository *r,
                        return error(_("need a HEAD to fixup"));
                if (!(head_commit = lookup_commit_reference(r, &head)))
                        return error(_("could not read HEAD"));
-               if (!(head_message = get_commit_buffer(head_commit, NULL)))
+               if (!(head_message = logmsg_reencode(head_commit, NULL, encoding)))
                        return error(_("could not read HEAD's commit message"));
 
                find_commit_subject(head_message, &body);
@@ -1623,7 +1624,7 @@ static int update_squash_messages(struct repository *r,
                unuse_commit_buffer(head_commit, head_message);
        }
 
-       if (!(message = get_commit_buffer(commit, NULL)))
+       if (!(message = logmsg_reencode(commit, NULL, encoding)))
                return error(_("could not read commit message of %s"),
                             oid_to_hex(&commit->object.oid));
        find_commit_subject(message, &body);
@@ -4154,9 +4155,10 @@ static int commit_staged_changes(struct repository *r,
                                 */
                                struct commit *commit;
                                const char *path = rebase_path_squash_msg();
+                               const char *encoding = get_commit_output_encoding();
 
                                if (parse_head(r, &commit) ||
-                                   !(p = get_commit_buffer(commit, NULL)) ||
+                                   !(p = logmsg_reencode(commit, NULL, encoding)) ||
                                    write_message(p, strlen(p), path, 0)) {
                                        unuse_commit_buffer(commit, p);
                                        return error(_("could not write file: "
index a518281b0425b65d7b6fd995b76b13371f5cfe53..d277a9f4b7216431d2e6fbc414b60188b36df12b 100755 (executable)
@@ -224,7 +224,15 @@ test_commit_autosquash_multi_encoding () {
                git commit -a --$flag HEAD^ &&
                git rebase --autosquash -i HEAD^^^ &&
                git rev-list HEAD >actual &&
-               test_line_count = 3 actual
+               test_line_count = 3 actual &&
+               iconv -f $old -t UTF-8 "$TEST_DIRECTORY"/t3900/$msg >expect &&
+               if test $flag = squash; then
+                       subject="$(head -1 expect)" &&
+                       printf "\nsquash! %s\n" "$subject" >>expect
+               fi &&
+               git cat-file commit HEAD^ >raw &&
+               (sed "1,/^$/d" raw | iconv -f $new -t utf-8) >actual &&
+               test_cmp expect actual
        '
 }