shortlog: code restructuring and clean-up
The code tried to parse and clean-up the author name and the one line information in three places (two callers of insert_author_oneline() and the called function itself), which was a mess. This renames the callee to insert_one_record() and make it responsible for cleaning up the author name and one line information. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fd99b36134
commit
1e931cb4d1
@ -27,45 +27,60 @@ static int compare_by_number(const void *a1, const void *a2)
|
|||||||
|
|
||||||
static struct path_list mailmap = {NULL, 0, 0, 0};
|
static struct path_list mailmap = {NULL, 0, 0, 0};
|
||||||
|
|
||||||
static void insert_author_oneline(struct path_list *list,
|
static void insert_one_record(struct path_list *list,
|
||||||
const char *author, int authorlen,
|
const char *author,
|
||||||
const char *oneline, int onelinelen)
|
const char *oneline)
|
||||||
{
|
{
|
||||||
const char *dot3 = common_repo_prefix;
|
const char *dot3 = common_repo_prefix;
|
||||||
char *buffer, *p;
|
char *buffer, *p;
|
||||||
struct path_list_item *item;
|
struct path_list_item *item;
|
||||||
struct path_list *onelines;
|
struct path_list *onelines;
|
||||||
|
char namebuf[1024];
|
||||||
|
size_t len;
|
||||||
|
const char *eol;
|
||||||
|
const char *boemail, *eoemail;
|
||||||
|
|
||||||
while (authorlen > 0 && isspace(author[authorlen - 1]))
|
boemail = strchr(author, '<');
|
||||||
authorlen--;
|
if (!boemail)
|
||||||
|
return;
|
||||||
|
eoemail = strchr(boemail, '>');
|
||||||
|
if (!eoemail)
|
||||||
|
return;
|
||||||
|
if (!map_email(&mailmap, boemail+1, namebuf, sizeof(namebuf))) {
|
||||||
|
while (author < boemail && isspace(*author))
|
||||||
|
author++;
|
||||||
|
for (len = 0;
|
||||||
|
len < sizeof(namebuf) - 1 && author + len < boemail;
|
||||||
|
len++)
|
||||||
|
namebuf[len] = author[len];
|
||||||
|
while (0 < len && isspace(namebuf[len-1]))
|
||||||
|
len--;
|
||||||
|
namebuf[len] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
buffer = xmemdupz(author, authorlen);
|
buffer = xstrdup(namebuf);
|
||||||
item = path_list_insert(buffer, list);
|
item = path_list_insert(buffer, list);
|
||||||
if (item->util == NULL)
|
if (item->util == NULL)
|
||||||
item->util = xcalloc(1, sizeof(struct path_list));
|
item->util = xcalloc(1, sizeof(struct path_list));
|
||||||
else
|
else
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
|
||||||
|
eol = strchr(oneline, '\n');
|
||||||
|
if (!eol)
|
||||||
|
eol = oneline + strlen(oneline);
|
||||||
|
while (*oneline && isspace(*oneline) && *oneline != '\n')
|
||||||
|
oneline++;
|
||||||
if (!prefixcmp(oneline, "[PATCH")) {
|
if (!prefixcmp(oneline, "[PATCH")) {
|
||||||
char *eob = strchr(oneline, ']');
|
char *eob = strchr(oneline, ']');
|
||||||
|
if (eob && (!eol || eob < eol))
|
||||||
if (eob) {
|
oneline = eob + 1;
|
||||||
while (isspace(eob[1]) && eob[1] != '\n')
|
|
||||||
eob++;
|
|
||||||
if (eob - oneline < onelinelen) {
|
|
||||||
onelinelen -= eob - oneline;
|
|
||||||
oneline = eob;
|
|
||||||
}
|
}
|
||||||
}
|
while (*oneline && isspace(*oneline) && *oneline != '\n')
|
||||||
}
|
|
||||||
|
|
||||||
while (onelinelen > 0 && isspace(oneline[0])) {
|
|
||||||
oneline++;
|
oneline++;
|
||||||
onelinelen--;
|
len = eol - oneline;
|
||||||
}
|
while (len && isspace(oneline[len-1]))
|
||||||
while (onelinelen > 0 && isspace(oneline[onelinelen - 1]))
|
len--;
|
||||||
onelinelen--;
|
buffer = xmemdupz(oneline, len);
|
||||||
buffer = xmemdupz(oneline, onelinelen);
|
|
||||||
|
|
||||||
if (dot3) {
|
if (dot3) {
|
||||||
int dot3len = strlen(dot3);
|
int dot3len = strlen(dot3);
|
||||||
@ -92,55 +107,32 @@ static void insert_author_oneline(struct path_list *list,
|
|||||||
|
|
||||||
static void read_from_stdin(struct path_list *list)
|
static void read_from_stdin(struct path_list *list)
|
||||||
{
|
{
|
||||||
char buffer[1024];
|
char author[1024], oneline[1024];
|
||||||
|
|
||||||
while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
|
while (fgets(author, sizeof(author), stdin) != NULL) {
|
||||||
char *bob;
|
if (!(author[0] == 'A' || author[0] == 'a') ||
|
||||||
if ((buffer[0] == 'A' || buffer[0] == 'a') &&
|
prefixcmp(author + 1, "uthor: "))
|
||||||
!prefixcmp(buffer + 1, "uthor: ") &&
|
continue;
|
||||||
(bob = strchr(buffer + 7, '<')) != NULL) {
|
while (fgets(oneline, sizeof(oneline), stdin) &&
|
||||||
char buffer2[1024], offset = 0;
|
oneline[0] != '\n')
|
||||||
|
; /* discard headers */
|
||||||
if (map_email(&mailmap, bob + 1, buffer, sizeof(buffer)))
|
while (fgets(oneline, sizeof(oneline), stdin) &&
|
||||||
bob = buffer + strlen(buffer);
|
oneline[0] == '\n')
|
||||||
else {
|
; /* discard blanks */
|
||||||
offset = 8;
|
insert_one_record(list, author + 8, oneline);
|
||||||
while (buffer + offset < bob &&
|
|
||||||
isspace(bob[-1]))
|
|
||||||
bob--;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (fgets(buffer2, sizeof(buffer2), stdin) &&
|
|
||||||
buffer2[0] != '\n')
|
|
||||||
; /* chomp input */
|
|
||||||
if (fgets(buffer2, sizeof(buffer2), stdin)) {
|
|
||||||
int l2 = strlen(buffer2);
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < l2; i++)
|
|
||||||
if (!isspace(buffer2[i]))
|
|
||||||
break;
|
|
||||||
insert_author_oneline(list,
|
|
||||||
buffer + offset,
|
|
||||||
bob - buffer - offset,
|
|
||||||
buffer2 + i, l2 - i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_from_rev(struct rev_info *rev, struct path_list *list)
|
static void get_from_rev(struct rev_info *rev, struct path_list *list)
|
||||||
{
|
{
|
||||||
char scratch[1024];
|
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
|
|
||||||
prepare_revision_walk(rev);
|
prepare_revision_walk(rev);
|
||||||
while ((commit = get_revision(rev)) != NULL) {
|
while ((commit = get_revision(rev)) != NULL) {
|
||||||
const char *author = NULL, *oneline, *buffer;
|
const char *author = NULL, *buffer;
|
||||||
int authorlen = authorlen, onelinelen;
|
|
||||||
|
|
||||||
/* get author and oneline */
|
buffer = commit->buffer;
|
||||||
for (buffer = commit->buffer; buffer && *buffer != '\0' &&
|
while (*buffer && *buffer != '\n') {
|
||||||
*buffer != '\n'; ) {
|
|
||||||
const char *eol = strchr(buffer, '\n');
|
const char *eol = strchr(buffer, '\n');
|
||||||
|
|
||||||
if (eol == NULL)
|
if (eol == NULL)
|
||||||
@ -148,50 +140,17 @@ static void get_from_rev(struct rev_info *rev, struct path_list *list)
|
|||||||
else
|
else
|
||||||
eol++;
|
eol++;
|
||||||
|
|
||||||
if (!prefixcmp(buffer, "author ")) {
|
if (!prefixcmp(buffer, "author "))
|
||||||
char *bracket = strchr(buffer, '<');
|
|
||||||
|
|
||||||
if (bracket == NULL || bracket > eol)
|
|
||||||
die("Invalid commit buffer: %s",
|
|
||||||
sha1_to_hex(commit->object.sha1));
|
|
||||||
|
|
||||||
if (map_email(&mailmap, bracket + 1, scratch,
|
|
||||||
sizeof(scratch))) {
|
|
||||||
author = scratch;
|
|
||||||
authorlen = strlen(scratch);
|
|
||||||
} else {
|
|
||||||
if (bracket[-1] == ' ')
|
|
||||||
bracket--;
|
|
||||||
|
|
||||||
author = buffer + 7;
|
author = buffer + 7;
|
||||||
authorlen = bracket - buffer - 7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buffer = eol;
|
buffer = eol;
|
||||||
}
|
}
|
||||||
|
if (!author)
|
||||||
if (author == NULL)
|
|
||||||
die("Missing author: %s",
|
die("Missing author: %s",
|
||||||
sha1_to_hex(commit->object.sha1));
|
sha1_to_hex(commit->object.sha1));
|
||||||
|
if (*buffer)
|
||||||
if (buffer == NULL || *buffer == '\0') {
|
buffer++;
|
||||||
oneline = "<none>";
|
insert_one_record(list, author, !*buffer ? "<none>" : buffer);
|
||||||
onelinelen = sizeof(oneline) + 1;
|
|
||||||
} else {
|
|
||||||
char *eol;
|
|
||||||
|
|
||||||
oneline = buffer + 1;
|
|
||||||
eol = strchr(oneline, '\n');
|
|
||||||
if (eol == NULL)
|
|
||||||
onelinelen = strlen(oneline);
|
|
||||||
else
|
|
||||||
onelinelen = eol - oneline;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
insert_author_oneline(list,
|
|
||||||
author, authorlen, oneline, onelinelen);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parse_uint(char const **arg, int comma)
|
static int parse_uint(char const **arg, int comma)
|
||||||
|
Loading…
Reference in New Issue
Block a user