Merge branch 'jc/format-patch-encoding'
authorJunio C Hamano <gitster@pobox.com>
Sun, 4 Nov 2007 08:28:46 +0000 (01:28 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 4 Nov 2007 08:28:46 +0000 (01:28 -0700)
* jc/format-patch-encoding:
test format-patch -s: make sure MIME content type is shown as needed
format-patch -s: add MIME encoding header if signer's name requires so

builtin-branch.c
builtin-log.c
builtin-rev-list.c
builtin-show-branch.c
commit.c
commit.h
log-tree.c
t/t4021-format-patch-signer-mime.sh [new file with mode: 0755]
index fbd90e42d111c698d33305570c8f1988998a3c70..3bf40f145378e06131a288d8234f123e0217a932 100644 (file)
@@ -282,7 +282,7 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
                commit = lookup_commit(item->sha1);
                if (commit && !parse_commit(commit)) {
                        pretty_print_commit(CMIT_FMT_ONELINE, commit,
-                                           &subject, 0, NULL, NULL, 0);
+                                           &subject, 0, NULL, NULL, 0, 0);
                        sub = subject.buf;
                }
                printf("%c %s%-*s%s %s %s\n", c, branch_get_color(color),
index e8b982db7cf7c98bff9d64affcb573b3d9676cb1..8b2bf632c534c5a9b5295884e517d70c7d2d9e86 100644 (file)
@@ -787,7 +787,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
                        struct strbuf buf;
                        strbuf_init(&buf, 0);
                        pretty_print_commit(CMIT_FMT_ONELINE, commit,
-                                           &buf, 0, NULL, NULL, 0);
+                                           &buf, 0, NULL, NULL, 0, 0);
                        printf("%c %s %s\n", sign,
                               sha1_to_hex(commit->object.sha1), buf.buf);
                        strbuf_release(&buf);
index 44393320e8ec27a35ccc1da550852ce3333a25a8..697046723fc64f38ab4fb589c84f1c5d5934894a 100644 (file)
@@ -86,7 +86,8 @@ static void show_commit(struct commit *commit)
                struct strbuf buf;
                strbuf_init(&buf, 0);
                pretty_print_commit(revs.commit_format, commit,
-                                       &buf, revs.abbrev, NULL, NULL, revs.date_mode);
+                                   &buf, revs.abbrev, NULL, NULL,
+                                   revs.date_mode, 0);
                if (buf.len)
                        printf("%s%c", buf.buf, hdr_termination);
                strbuf_release(&buf);
index 07a0c2316bec4dd8341ea494b02874a1b12483cd..6dc835d30a6a726c3dd40d23564b0dc32d20b7db 100644 (file)
@@ -266,7 +266,7 @@ static void show_one_commit(struct commit *commit, int no_name)
        strbuf_init(&pretty, 0);
        if (commit->object.parsed) {
                pretty_print_commit(CMIT_FMT_ONELINE, commit,
-                                       &pretty, 0, NULL, NULL, 0);
+                                   &pretty, 0, NULL, NULL, 0, 0);
                pretty_str = pretty.buf;
        }
        if (!prefixcmp(pretty_str, "[PATCH] "))
index ac24266e935054c6909b8fbd513ffa937e2ae092..8262f6ac58c3bf738c144d6a868bdd29633241e7 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -479,7 +479,7 @@ static int get_one_line(const char *msg)
 }
 
 /* High bit set, or ISO-2022-INT */
-static int non_ascii(int ch)
+int non_ascii(int ch)
 {
        ch = (ch & 0xff);
        return ((ch & 0x80) || (ch == 0x1b));
@@ -1046,12 +1046,11 @@ static void pp_remainder(enum cmit_fmt fmt,
 void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
                                  struct strbuf *sb, int abbrev,
                                  const char *subject, const char *after_subject,
-                                 enum date_mode dmode)
+                                 enum date_mode dmode, int plain_non_ascii)
 {
        unsigned long beginning_of_body;
        int indent = 4;
        const char *msg = commit->buffer;
-       int plain_non_ascii = 0;
        char *reencoded;
        const char *encoding;
 
index b661503972e54a6c0eb20295cf982f8f8b48f461..13b537293df97ae503b993aeba15edc2dac09e2a 100644 (file)
--- a/commit.h
+++ b/commit.h
@@ -61,13 +61,15 @@ enum cmit_fmt {
        CMIT_FMT_UNSPECIFIED,
 };
 
+extern int non_ascii(int);
 extern enum cmit_fmt get_commit_format(const char *arg);
 extern void format_commit_message(const struct commit *commit,
                                   const void *format, struct strbuf *sb);
 extern void pretty_print_commit(enum cmit_fmt fmt, const struct commit*,
                                 struct strbuf *,
                                 int abbrev, const char *subject,
-                                const char *after_subject, enum date_mode);
+                                const char *after_subject, enum date_mode,
+                               int non_ascii_present);
 
 /** Removes the first commit from a list sorted by date, and adds all
  * of its parents.
index 3763ce94fcb5c96f366f84e755c8abd725b00b00..a34beb0b027eaec59fa75d1fa18324a8f24eb13d 100644 (file)
@@ -125,6 +125,18 @@ static unsigned int digits_in_number(unsigned int number)
        return result;
 }
 
+static int has_non_ascii(const char *s)
+{
+       int ch;
+       if (!s)
+               return 0;
+       while ((ch = *s++) != '\0') {
+               if (non_ascii(ch))
+                       return 1;
+       }
+       return 0;
+}
+
 void show_log(struct rev_info *opt, const char *sep)
 {
        struct strbuf msgbuf;
@@ -273,7 +285,8 @@ void show_log(struct rev_info *opt, const char *sep)
         */
        strbuf_init(&msgbuf, 0);
        pretty_print_commit(opt->commit_format, commit, &msgbuf,
-                                 abbrev, subject, extra_headers, opt->date_mode);
+                           abbrev, subject, extra_headers, opt->date_mode,
+                           has_non_ascii(opt->add_signoff));
 
        if (opt->add_signoff)
                append_signoff(&msgbuf, opt->add_signoff);
diff --git a/t/t4021-format-patch-signer-mime.sh b/t/t4021-format-patch-signer-mime.sh
new file mode 100755 (executable)
index 0000000..67a70fa
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+test_description='format-patch -s should force MIME encoding as needed'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+
+       >F &&
+       git add F &&
+       git commit -m initial &&
+       echo new line >F &&
+
+       test_tick &&
+       git commit -m "This adds some lines to F" F
+
+'
+
+test_expect_success 'format normally' '
+
+       git format-patch --stdout -1 >output &&
+       ! grep Content-Type output
+
+'
+
+test_expect_success 'format with signoff without funny signer name' '
+
+       git format-patch -s --stdout -1 >output &&
+       ! grep Content-Type output
+
+'
+
+test_expect_success 'format with non ASCII signer name' '
+
+       GIT_COMMITTER_NAME="\e$B$O$^$N\e(B \e$B$U$K$*$&\e(B" \
+       git format-patch -s --stdout -1 >output &&
+       grep Content-Type output
+
+'
+
+test_done
+