зеркало из https://github.com/microsoft/git.git
Merge branch 'rs/pretty-add-again' into maint
The pretty-format specifiers like '%h', '%t', etc. had an optimization that no longer works correctly. In preparation/hope of getting it correctly implemented, first discard the optimization that is broken. * rs/pretty-add-again: pretty: recalculate duplicate short hashes
This commit is contained in:
Коммит
49771171e5
32
pretty.c
32
pretty.c
|
@ -783,29 +783,9 @@ struct format_commit_context {
|
|||
size_t body_off;
|
||||
|
||||
/* The following ones are relative to the result struct strbuf. */
|
||||
struct chunk abbrev_commit_hash;
|
||||
struct chunk abbrev_tree_hash;
|
||||
struct chunk abbrev_parent_hashes;
|
||||
size_t wrap_start;
|
||||
};
|
||||
|
||||
static int add_again(struct strbuf *sb, struct chunk *chunk)
|
||||
{
|
||||
if (chunk->len) {
|
||||
strbuf_adddup(sb, chunk->off, chunk->len);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* We haven't seen this chunk before. Our caller is surely
|
||||
* going to add it the hard way now. Remember the most likely
|
||||
* start of the to-be-added chunk: the current end of the
|
||||
* struct strbuf.
|
||||
*/
|
||||
chunk->off = sb->len;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void parse_commit_header(struct format_commit_context *context)
|
||||
{
|
||||
const char *msg = context->message;
|
||||
|
@ -1147,24 +1127,16 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
|||
return 1;
|
||||
case 'h': /* abbreviated commit hash */
|
||||
strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_COMMIT));
|
||||
if (add_again(sb, &c->abbrev_commit_hash)) {
|
||||
strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_RESET));
|
||||
return 1;
|
||||
}
|
||||
strbuf_add_unique_abbrev(sb, commit->object.oid.hash,
|
||||
c->pretty_ctx->abbrev);
|
||||
strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_RESET));
|
||||
c->abbrev_commit_hash.len = sb->len - c->abbrev_commit_hash.off;
|
||||
return 1;
|
||||
case 'T': /* tree hash */
|
||||
strbuf_addstr(sb, oid_to_hex(&commit->tree->object.oid));
|
||||
return 1;
|
||||
case 't': /* abbreviated tree hash */
|
||||
if (add_again(sb, &c->abbrev_tree_hash))
|
||||
return 1;
|
||||
strbuf_add_unique_abbrev(sb, commit->tree->object.oid.hash,
|
||||
c->pretty_ctx->abbrev);
|
||||
c->abbrev_tree_hash.len = sb->len - c->abbrev_tree_hash.off;
|
||||
return 1;
|
||||
case 'P': /* parent hashes */
|
||||
for (p = commit->parents; p; p = p->next) {
|
||||
|
@ -1174,16 +1146,12 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
|||
}
|
||||
return 1;
|
||||
case 'p': /* abbreviated parent hashes */
|
||||
if (add_again(sb, &c->abbrev_parent_hashes))
|
||||
return 1;
|
||||
for (p = commit->parents; p; p = p->next) {
|
||||
if (p != commit->parents)
|
||||
strbuf_addch(sb, ' ');
|
||||
strbuf_add_unique_abbrev(sb, p->item->object.oid.hash,
|
||||
c->pretty_ctx->abbrev);
|
||||
}
|
||||
c->abbrev_parent_hashes.len = sb->len -
|
||||
c->abbrev_parent_hashes.off;
|
||||
return 1;
|
||||
case 'm': /* left/right/bottom */
|
||||
strbuf_addstr(sb, get_revision_mark(NULL, commit));
|
||||
|
|
7
strbuf.c
7
strbuf.c
|
@ -204,13 +204,6 @@ void strbuf_addbuf(struct strbuf *sb, const struct strbuf *sb2)
|
|||
strbuf_setlen(sb, sb->len + sb2->len);
|
||||
}
|
||||
|
||||
void strbuf_adddup(struct strbuf *sb, size_t pos, size_t len)
|
||||
{
|
||||
strbuf_grow(sb, len);
|
||||
memcpy(sb->buf + sb->len, sb->buf + pos, len);
|
||||
strbuf_setlen(sb, sb->len + len);
|
||||
}
|
||||
|
||||
void strbuf_addchars(struct strbuf *sb, int c, size_t n)
|
||||
{
|
||||
strbuf_grow(sb, n);
|
||||
|
|
6
strbuf.h
6
strbuf.h
|
@ -263,12 +263,6 @@ static inline void strbuf_addstr(struct strbuf *sb, const char *s)
|
|||
*/
|
||||
extern void strbuf_addbuf(struct strbuf *sb, const struct strbuf *sb2);
|
||||
|
||||
/**
|
||||
* Copy part of the buffer from a given position till a given length to the
|
||||
* end of the buffer.
|
||||
*/
|
||||
extern void strbuf_adddup(struct strbuf *sb, size_t pos, size_t len);
|
||||
|
||||
/**
|
||||
* This function can be used to expand a format string containing
|
||||
* placeholders. To that end, it parses the string and calls the specified
|
||||
|
|
Загрузка…
Ссылка в новой задаче