diff options
| author | Junio C Hamano <gitster@pobox.com> | 2013-01-20 17:06:52 -0800 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2013-01-20 17:06:53 -0800 | 
| commit | 577f63e781d2f9b9a6862389b6e9d2ca2467afa2 (patch) | |
| tree | ff7eb1668b21b118caa34a71fcde1026c0a932f4 /string-list.c | |
| parent | 02f55e660ccbd2fa1e3b2c686200f0037568f854 (diff) | |
| parent | df874fa82ef06c8c438b9a19c56c0b5eb089c012 (diff) | |
| download | git-577f63e781d2f9b9a6862389b6e9d2ca2467afa2.tar.gz | |
Merge branch 'ap/log-mailmap'
Teach commands in the "log" family to optionally pay attention to
the mailmap.
* ap/log-mailmap:
  log --use-mailmap: optimize for cases without --author/--committer search
  log: add log.mailmap configuration option
  log: grep author/committer using mailmap
  test: add test for --use-mailmap option
  log: add --use-mailmap option
  pretty: use mailmap to display username and email
  mailmap: add mailmap structure to rev_info and pp
  mailmap: simplify map_user() interface
  mailmap: remove email copy and length limitation
  Use split_ident_line to parse author and committer
  string-list: allow case-insensitive string list
Diffstat (limited to 'string-list.c')
| -rw-r--r-- | string-list.c | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/string-list.c b/string-list.c index 480173fe6d..aabb25ef4c 100644 --- a/string-list.c +++ b/string-list.c @@ -7,10 +7,11 @@ static int get_entry_index(const struct string_list *list, const char *string,  		int *exact_match)  {  	int left = -1, right = list->nr; +	compare_strings_fn cmp = list->cmp ? list->cmp : strcmp;  	while (left + 1 < right) {  		int middle = (left + right) / 2; -		int compare = strcmp(string, list->items[middle].string); +		int compare = cmp(string, list->items[middle].string);  		if (compare < 0)  			right = middle;  		else if (compare > 0) @@ -96,8 +97,9 @@ void string_list_remove_duplicates(struct string_list *list, int free_util)  {  	if (list->nr > 1) {  		int src, dst; +		compare_strings_fn cmp = list->cmp ? list->cmp : strcmp;  		for (src = dst = 1; src < list->nr; src++) { -			if (!strcmp(list->items[dst - 1].string, list->items[src].string)) { +			if (!cmp(list->items[dst - 1].string, list->items[src].string)) {  				if (list->strdup_strings)  					free(list->items[src].string);  				if (free_util) @@ -210,15 +212,20 @@ struct string_list_item *string_list_append(struct string_list *list,  			list->strdup_strings ? xstrdup(string) : (char *)string);  } +/* Yuck */ +static compare_strings_fn compare_for_qsort; + +/* Only call this from inside sort_string_list! */  static int cmp_items(const void *a, const void *b)  {  	const struct string_list_item *one = a;  	const struct string_list_item *two = b; -	return strcmp(one->string, two->string); +	return compare_for_qsort(one->string, two->string);  }  void sort_string_list(struct string_list *list)  { +	compare_for_qsort = list->cmp ? list->cmp : strcmp;  	qsort(list->items, list->nr, sizeof(*list->items), cmp_items);  } @@ -226,8 +233,10 @@ struct string_list_item *unsorted_string_list_lookup(struct string_list *list,  						     const char *string)  {  	int i; +	compare_strings_fn cmp = list->cmp ? list->cmp : strcmp; +  	for (i = 0; i < list->nr; i++) -		if (!strcmp(string, list->items[i].string)) +		if (!cmp(string, list->items[i].string))  			return list->items + i;  	return NULL;  }  | 
