예제 #1
0
/**
 * Build the initial type index for the packfile
 */
void bitmap_writer_build_type_index(struct packing_data *to_pack,
				    struct pack_idx_entry **index,
				    uint32_t index_nr)
{
	uint32_t i;

	writer.commits = ewah_new();
	writer.trees = ewah_new();
	writer.blobs = ewah_new();
	writer.tags = ewah_new();
	ALLOC_ARRAY(to_pack->in_pack_pos, to_pack->nr_objects);

	for (i = 0; i < index_nr; ++i) {
		struct object_entry *entry = (struct object_entry *)index[i];
		enum object_type real_type;

		oe_set_in_pack_pos(to_pack, entry, i);

		switch (oe_type(entry)) {
		case OBJ_COMMIT:
		case OBJ_TREE:
		case OBJ_BLOB:
		case OBJ_TAG:
			real_type = oe_type(entry);
			break;

		default:
			real_type = oid_object_info(to_pack->repo,
						    &entry->idx.oid, NULL);
			break;
		}

		switch (real_type) {
		case OBJ_COMMIT:
			ewah_set(writer.commits, i);
			break;

		case OBJ_TREE:
			ewah_set(writer.trees, i);
			break;

		case OBJ_BLOB:
			ewah_set(writer.blobs, i);
			break;

		case OBJ_TAG:
			ewah_set(writer.tags, i);
			break;

		default:
			die("Missing type information for %s (%d/%d)",
			    oid_to_hex(&entry->idx.oid), real_type,
			    oe_type(entry));
		}
	}
}
예제 #2
0
/**
 * Build the initial type index for the packfile
 */
void bitmap_writer_build_type_index(struct pack_idx_entry **index,
                                    uint32_t index_nr)
{
    uint32_t i;

    writer.commits = ewah_new();
    writer.trees = ewah_new();
    writer.blobs = ewah_new();
    writer.tags = ewah_new();

    for (i = 0; i < index_nr; ++i) {
        struct object_entry *entry = (struct object_entry *)index[i];
        enum object_type real_type;

        entry->in_pack_pos = i;

        switch (entry->type) {
        case OBJ_COMMIT:
        case OBJ_TREE:
        case OBJ_BLOB:
        case OBJ_TAG:
            real_type = entry->type;
            break;

        default:
            real_type = sha1_object_info(entry->idx.sha1, NULL);
            break;
        }

        switch (real_type) {
        case OBJ_COMMIT:
            ewah_set(writer.commits, i);
            break;

        case OBJ_TREE:
            ewah_set(writer.trees, i);
            break;

        case OBJ_BLOB:
            ewah_set(writer.blobs, i);
            break;

        case OBJ_TAG:
            ewah_set(writer.tags, i);
            break;

        default:
            die("Missing type information for %s (%d/%d)",
                sha1_to_hex(entry->idx.sha1), real_type, entry->type);
        }
    }
}
예제 #3
0
파일: fsmonitor.c 프로젝트: DoWonJin/git
void fill_fsmonitor_bitmap(struct index_state *istate)
{
	int i;
	istate->fsmonitor_dirty = ewah_new();
	for (i = 0; i < istate->cache_nr; i++)
		if (!(istate->cache[i]->ce_flags & CE_FSMONITOR_VALID))
			ewah_set(istate->fsmonitor_dirty, i);
}
예제 #4
0
static struct ewah_bitmap *generate_bitmap(size_t max_size)
{
	static const size_t BIT_CHANCE = 50;

	struct ewah_bitmap *bitmap = ewah_new();
	size_t i;

	for (i = 0; i < max_size; ++i) {
		if (rand() % 100 <= BIT_CHANCE)
			ewah_set(bitmap, i);
	}

	return bitmap;
}