From: Junio C Hamano Date: Wed, 2 Jan 2013 18:40:34 +0000 (-0800) Subject: Merge branch 'sp/shortlog-missing-lf' X-Git-Tag: v1.8.2-rc0~205 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/71288e15dfd6638d14b307b564d1230a4500daa1?ds=inline;hp=-c Merge branch 'sp/shortlog-missing-lf' When a line to be wrapped has a solid run of non space characters whose length exactly is the wrap width, "git shortlog -w" failed to add a newline after such a line. * sp/shortlog-missing-lf: strbuf_add_wrapped*(): Remove unused return value shortlog: fix wrapping lines of wraplen --- 71288e15dfd6638d14b307b564d1230a4500daa1 diff --combined builtin/shortlog.c index b316cf37ca,52f9284289..83605143ac --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@@ -10,9 -10,9 +10,9 @@@ #include "parse-options.h" static char const * const shortlog_usage[] = { - "git shortlog [-n] [-s] [-e] [-w] [rev-opts] [--] [... ]", + N_("git shortlog [-n] [-s] [-e] [-w] [rev-opts] [--] [... ]"), "", - "[rev-opts] are documented in git-rev-list(1)", + N_("[rev-opts] are documented in git-rev-list(1)"), NULL }; @@@ -250,13 -250,13 +250,13 @@@ int cmd_shortlog(int argc, const char * static const struct option options[] = { OPT_BOOLEAN('n', "numbered", &log.sort_by_number, - "sort output according to the number of commits per author"), + N_("sort output according to the number of commits per author")), OPT_BOOLEAN('s', "summary", &log.summary, - "Suppress commit descriptions, only provides commit count"), + N_("Suppress commit descriptions, only provides commit count")), OPT_BOOLEAN('e', "email", &log.email, - "Show the email address of each author"), - { OPTION_CALLBACK, 'w', NULL, &log, "w[,i1[,i2]]", - "Linewrap output", PARSE_OPT_OPTARG, &parse_wrap_args }, + N_("Show the email address of each author")), + { OPTION_CALLBACK, 'w', NULL, &log, N_("w[,i1[,i2]]"), + N_("Linewrap output"), PARSE_OPT_OPTARG, &parse_wrap_args }, OPT_END(), }; @@@ -306,9 -306,8 +306,8 @@@ parse_done static void add_wrapped_shortlog_msg(struct strbuf *sb, const char *s, const struct shortlog *log) { - int col = strbuf_add_wrapped_text(sb, s, log->in1, log->in2, log->wrap); - if (col != log->wrap) - strbuf_addch(sb, '\n'); + strbuf_add_wrapped_text(sb, s, log->in1, log->in2, log->wrap); + strbuf_addch(sb, '\n'); } void shortlog_output(struct shortlog *log) diff --combined utf8.c index 5c61bbe113,613eb94b46..a4ee6650ef --- a/utf8.c +++ b/utf8.c @@@ -323,7 -323,7 +323,7 @@@ static size_t display_mode_esc_sequence * If indent is negative, assume that already -indent columns have been * consumed (and no extra indent is necessary for the first line). */ - int strbuf_add_wrapped_text(struct strbuf *buf, + void strbuf_add_wrapped_text(struct strbuf *buf, const char *text, int indent1, int indent2, int width) { int indent, w, assume_utf8 = 1; @@@ -332,7 -332,7 +332,7 @@@ if (width <= 0) { strbuf_add_indented_text(buf, text, indent1, indent2); - return 1; + return; } retry: @@@ -356,14 -356,14 +356,14 @@@ if (w <= width || !space) { const char *start = bol; if (!c && text == start) - return w; + return; if (space) start = space; else strbuf_addchars(buf, ' ', indent); strbuf_add(buf, start, text - start); if (!c) - return w; + return; space = text; if (c == '\t') w |= 0x07; @@@ -405,13 -405,12 +405,12 @@@ new_line } } - int strbuf_add_wrapped_bytes(struct strbuf *buf, const char *data, int len, + void strbuf_add_wrapped_bytes(struct strbuf *buf, const char *data, int len, int indent, int indent2, int width) { char *tmp = xstrndup(data, len); - int r = strbuf_add_wrapped_text(buf, tmp, indent, indent2, width); + strbuf_add_wrapped_text(buf, tmp, indent, indent2, width); free(tmp); - return r; } int is_encoding_utf8(const char *name) @@@ -423,13 -422,6 +422,13 @@@ return 0; } +int same_encoding(const char *src, const char *dst) +{ + if (is_encoding_utf8(src) && is_encoding_utf8(dst)) + return 1; + return !strcasecmp(src, dst); +} + /* * Given a buffer and its encoding, return it re-encoded * with iconv. If the conversion fails, returns NULL. @@@ -440,12 -432,19 +439,12 @@@ #else typedef char * iconv_ibp; #endif -char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding) +char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv) { - iconv_t conv; - size_t insz, outsz, outalloc; + size_t outsz, outalloc; char *out, *outpos; iconv_ibp cp; - if (!in_encoding) - return NULL; - conv = iconv_open(out_encoding, in_encoding); - if (conv == (iconv_t) -1) - return NULL; - insz = strlen(in); outsz = insz; outalloc = outsz + 1; /* for terminating NUL */ out = xmalloc(outalloc); @@@ -459,6 -458,7 +458,6 @@@ size_t sofar; if (errno != E2BIG) { free(out); - iconv_close(conv); return NULL; } /* insz has remaining number of bytes. @@@ -477,20 -477,6 +476,20 @@@ break; } } + return out; +} + +char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding) +{ + iconv_t conv; + char *out; + + if (!in_encoding) + return NULL; + conv = iconv_open(out_encoding, in_encoding); + if (conv == (iconv_t) -1) + return NULL; + out = reencode_string_iconv(in, strlen(in), conv); iconv_close(conv); return out; } diff --combined utf8.h index 93ef60042c,f50c567d42..a214238bdd --- a/utf8.h +++ b/utf8.h @@@ -7,15 -7,13 +7,15 @@@ int utf8_width(const char **start, size int utf8_strwidth(const char *string); int is_utf8(const char *text); int is_encoding_utf8(const char *name); +int same_encoding(const char *, const char *); - int strbuf_add_wrapped_text(struct strbuf *buf, + void strbuf_add_wrapped_text(struct strbuf *buf, const char *text, int indent, int indent2, int width); - int strbuf_add_wrapped_bytes(struct strbuf *buf, const char *data, int len, + void strbuf_add_wrapped_bytes(struct strbuf *buf, const char *data, int len, int indent, int indent2, int width); #ifndef NO_ICONV +char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv); char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding); #else #define reencode_string(a,b,c) NULL