зеркало из https://github.com/microsoft/git.git
strbuf: separate callback for strbuf_expand:ing literals
Expanding '%n' and '%xNN' is generic functionality, so extract that from the pretty.c formatter into a callback that can be reused. No functional change intended Signed-off-by: Anders Waldenborg <anders@0x63.nu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
d9b936db52
Коммит
fd2015b323
16
pretty.c
16
pretty.c
|
@ -1137,9 +1137,13 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
||||||
const char *msg = c->message;
|
const char *msg = c->message;
|
||||||
struct commit_list *p;
|
struct commit_list *p;
|
||||||
const char *arg;
|
const char *arg;
|
||||||
int ch;
|
size_t res;
|
||||||
|
|
||||||
/* these are independent of the commit */
|
/* these are independent of the commit */
|
||||||
|
res = strbuf_expand_literal_cb(sb, placeholder, NULL);
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
|
|
||||||
switch (placeholder[0]) {
|
switch (placeholder[0]) {
|
||||||
case 'C':
|
case 'C':
|
||||||
if (starts_with(placeholder + 1, "(auto)")) {
|
if (starts_with(placeholder + 1, "(auto)")) {
|
||||||
|
@ -1158,16 +1162,6 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
||||||
*/
|
*/
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
case 'n': /* newline */
|
|
||||||
strbuf_addch(sb, '\n');
|
|
||||||
return 1;
|
|
||||||
case 'x':
|
|
||||||
/* %x00 == NUL, %x0a == LF, etc. */
|
|
||||||
ch = hex2chr(placeholder + 1);
|
|
||||||
if (ch < 0)
|
|
||||||
return 0;
|
|
||||||
strbuf_addch(sb, ch);
|
|
||||||
return 3;
|
|
||||||
case 'w':
|
case 'w':
|
||||||
if (placeholder[1] == '(') {
|
if (placeholder[1] == '(') {
|
||||||
unsigned long width = 0, indent1 = 0, indent2 = 0;
|
unsigned long width = 0, indent1 = 0, indent2 = 0;
|
||||||
|
|
21
strbuf.c
21
strbuf.c
|
@ -380,6 +380,27 @@ void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t strbuf_expand_literal_cb(struct strbuf *sb,
|
||||||
|
const char *placeholder,
|
||||||
|
void *context)
|
||||||
|
{
|
||||||
|
int ch;
|
||||||
|
|
||||||
|
switch (placeholder[0]) {
|
||||||
|
case 'n': /* newline */
|
||||||
|
strbuf_addch(sb, '\n');
|
||||||
|
return 1;
|
||||||
|
case 'x':
|
||||||
|
/* %x00 == NUL, %x0a == LF, etc. */
|
||||||
|
ch = hex2chr(placeholder + 1);
|
||||||
|
if (ch < 0)
|
||||||
|
return 0;
|
||||||
|
strbuf_addch(sb, ch);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder,
|
size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder,
|
||||||
void *context)
|
void *context)
|
||||||
{
|
{
|
||||||
|
|
8
strbuf.h
8
strbuf.h
|
@ -320,6 +320,14 @@ void strbuf_expand(struct strbuf *sb,
|
||||||
expand_fn_t fn,
|
expand_fn_t fn,
|
||||||
void *context);
|
void *context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used as callback for `strbuf_expand` to only expand literals
|
||||||
|
* (i.e. %n and %xNN). The context argument is ignored.
|
||||||
|
*/
|
||||||
|
size_t strbuf_expand_literal_cb(struct strbuf *sb,
|
||||||
|
const char *placeholder,
|
||||||
|
void *context);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used as callback for `strbuf_expand()`, expects an array of
|
* Used as callback for `strbuf_expand()`, expects an array of
|
||||||
* struct strbuf_expand_dict_entry as context, i.e. pairs of
|
* struct strbuf_expand_dict_entry as context, i.e. pairs of
|
||||||
|
|
Загрузка…
Ссылка в новой задаче