示例#1
0
int git_lookup_mailmap(GIT_MAILMAP mailmap, const char** email1, const char** name1, const char* email2, void* payload, const char *(*author2_cb)(void*))
{
	struct string_list *map;
	int imax, imin = 0;

	if (!mailmap)
		return -1;

	map = (struct string_list *)mailmap;
	imax = map->nr - 1;
	while (imax >= imin)
	{
		int i = imin + ((imax - imin) / 2);
		struct string_list_item *si = (struct string_list_item *)&map->items[i];
		struct mailmap_entry *me = (struct mailmap_entry *)si->util;
		int comp = map->cmp(si->string, email2);

		if (!comp)
		{
			if (me->namemap.nr)
			{
				const char *author2 = author2_cb(payload);
				for (unsigned int j = 0; j < me->namemap.nr; ++j)
				{
					struct string_list_item *sj = (struct string_list_item *)&me->namemap.items[j];
					struct mailmap_info *mi = (struct mailmap_info *)sj->util;

					if (!map->cmp(sj->string, author2))
					{
						if (email1)
							*email1 = mi->email;
						if (name1)
							*name1 = mi->name;
						return 0;
					}
				}
			}

			if (email1)
				*email1 = me->email;
			if (name1)
				*name1 = me->name;
			return 0;
		}
		else if (comp < 0)
			imin = i + 1;
		else
			imax = i - 1;
	}

	return -1;
}
示例#2
0
const char * git_get_mailmap_author(GIT_MAILMAP mailmap, const char *email2, void *payload, const char *(*author2_cb)(void *))
{
	struct string_list *map;
	int imax, imin = 0;

	if (!mailmap)
		return NULL;

	map = (struct string_list *)mailmap;
	imax = map->nr - 1;
	while (imax >= imin)
	{
		int i = imin + ((imax - imin) / 2);
		struct string_list_item *si = (struct string_list_item *)&map->items[i];
		struct mailmap_entry *me = (struct mailmap_entry *)si->util;
		int comp = strcmp(si->string, email2);

		if (!comp)
		{
			if (me->namemap.nr)
			{
				const char *author2 = author2_cb(payload);
				unsigned int j;
				for (j = 0; j < me->namemap.nr; ++j)
				{
					struct string_list_item *sj = (struct string_list_item *)&me->namemap.items[j];
					struct mailmap_info *mi = (struct mailmap_info *)sj->util;
					
					if (!strcmp(sj->string, author2))
						return mi->name;
				}
			}

			return me->name;
		}
		else if (comp < 0)
			imin = i + 1;
		else
			imax = i - 1;
	}

	return NULL;
}