diff options
Diffstat (limited to 'commit.c')
| -rw-r--r-- | commit.c | 46 | 
1 files changed, 17 insertions, 29 deletions
| @@ -10,6 +10,7 @@  #include "mergesort.h"  #include "commit-slab.h"  #include "prio-queue.h" +#include "sha1-lookup.h"  static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **); @@ -114,23 +115,16 @@ static unsigned long parse_commit_date(const char *buf, const char *tail)  static struct commit_graft **commit_graft;  static int commit_graft_alloc, commit_graft_nr; +static const unsigned char *commit_graft_sha1_access(size_t index, void *table) +{ +	struct commit_graft **commit_graft_table = table; +	return commit_graft_table[index]->sha1; +} +  static int commit_graft_pos(const unsigned char *sha1)  { -	int lo, hi; -	lo = 0; -	hi = commit_graft_nr; -	while (lo < hi) { -		int mi = (lo + hi) / 2; -		struct commit_graft *graft = commit_graft[mi]; -		int cmp = hashcmp(sha1, graft->sha1); -		if (!cmp) -			return mi; -		if (cmp < 0) -			hi = mi; -		else -			lo = mi + 1; -	} -	return -lo - 1; +	return sha1_pos(sha1, commit_graft, commit_graft_nr, +			commit_graft_sha1_access);  }  int register_commit_graft(struct commit_graft *graft, int ignore_dups) @@ -147,12 +141,8 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups)  		return 1;  	}  	pos = -pos - 1; -	if (commit_graft_alloc <= ++commit_graft_nr) { -		commit_graft_alloc = alloc_nr(commit_graft_alloc); -		commit_graft = xrealloc(commit_graft, -					sizeof(*commit_graft) * -					commit_graft_alloc); -	} +	ALLOC_GROW(commit_graft, commit_graft_nr + 1, commit_graft_alloc); +	commit_graft_nr++;  	if (pos < commit_graft_nr)  		memmove(commit_graft + pos + 1,  			commit_graft + pos, @@ -548,7 +538,7 @@ define_commit_slab(author_date_slab, unsigned long);  static void record_author_date(struct author_date_slab *author_date,  			       struct commit *commit)  { -	const char *buf, *line_end; +	const char *buf, *line_end, *ident_line;  	char *buffer = NULL;  	struct ident_split ident;  	char *date_end; @@ -566,14 +556,14 @@ static void record_author_date(struct author_date_slab *author_date,  	     buf;  	     buf = line_end + 1) {  		line_end = strchrnul(buf, '\n'); -		if (!starts_with(buf, "author ")) { +		ident_line = skip_prefix(buf, "author "); +		if (!ident_line) {  			if (!line_end[0] || line_end[1] == '\n')  				return; /* end of header */  			continue;  		}  		if (split_ident_line(&ident, -				     buf + strlen("author "), -				     line_end - (buf + strlen("author "))) || +				     ident_line, line_end - ident_line) ||  		    !ident.date_begin || !ident.date_end)  			goto fail_exit; /* malformed "author" line */  		break; @@ -1193,10 +1183,8 @@ static void parse_gpg_output(struct signature_check *sigc)  	for (i = 0; i < ARRAY_SIZE(sigcheck_gpg_status); i++) {  		const char *found, *next; -		if (starts_with(buf, sigcheck_gpg_status[i].check + 1)) { -			/* At the very beginning of the buffer */ -			found = buf + strlen(sigcheck_gpg_status[i].check + 1); -		} else { +		found = skip_prefix(buf, sigcheck_gpg_status[i].check + 1); +		if (!found) {  			found = strstr(buf, sigcheck_gpg_status[i].check);  			if (!found)  				continue; | 
