bisect_next_all: convert xsnprintf to xstrfmt
Git can't run bisect between 2048+ commits if use russian translation, because the translated string is too long for the fixed buffer it uses (this can be reproduced "LANG=ru_RU.UTF8 git bisect start v4.9 v4.8" on linux sources). Use xstrfmt() to format the message string to sufficiently sized buffer instead to fix this. Signed-off-by: Maxim Moseychuk <franchesko.salias.hudro.pedros@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
fbd09439c0
commit
2cfa83574c
9
bisect.c
9
bisect.c
@ -940,7 +940,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
|
|||||||
struct commit_list *tried;
|
struct commit_list *tried;
|
||||||
int reaches = 0, all = 0, nr, steps;
|
int reaches = 0, all = 0, nr, steps;
|
||||||
const unsigned char *bisect_rev;
|
const unsigned char *bisect_rev;
|
||||||
char steps_msg[32];
|
char *steps_msg;
|
||||||
|
|
||||||
read_bisect_terms(&term_bad, &term_good);
|
read_bisect_terms(&term_bad, &term_good);
|
||||||
if (read_bisect_refs())
|
if (read_bisect_refs())
|
||||||
@ -990,14 +990,15 @@ int bisect_next_all(const char *prefix, int no_checkout)
|
|||||||
|
|
||||||
nr = all - reaches - 1;
|
nr = all - reaches - 1;
|
||||||
steps = estimate_bisect_steps(all);
|
steps = estimate_bisect_steps(all);
|
||||||
xsnprintf(steps_msg, sizeof(steps_msg),
|
|
||||||
Q_("(roughly %d step)", "(roughly %d steps)", steps),
|
steps_msg = xstrfmt(Q_("(roughly %d step)", "(roughly %d steps)",
|
||||||
steps);
|
steps), steps);
|
||||||
/* TRANSLATORS: the last %s will be replaced with
|
/* TRANSLATORS: the last %s will be replaced with
|
||||||
"(roughly %d steps)" translation */
|
"(roughly %d steps)" translation */
|
||||||
printf(Q_("Bisecting: %d revision left to test after this %s\n",
|
printf(Q_("Bisecting: %d revision left to test after this %s\n",
|
||||||
"Bisecting: %d revisions left to test after this %s\n",
|
"Bisecting: %d revisions left to test after this %s\n",
|
||||||
nr), nr, steps_msg);
|
nr), nr, steps_msg);
|
||||||
|
free(steps_msg);
|
||||||
|
|
||||||
return bisect_checkout(bisect_rev, no_checkout);
|
return bisect_checkout(bisect_rev, no_checkout);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user