static git_repository *repository_alloc() { git_repository *repo = git__malloc(sizeof(git_repository)); if (!repo) return NULL; memset(repo, 0x0, sizeof(git_repository)); repo->objects = git_hashtable_alloc( OBJECT_TABLE_SIZE, object_table_hash, object_table_hashkey); if (repo->objects == NULL) { free(repo); return NULL; } if (git_repository__refcache_init(&repo->references) < GIT_SUCCESS) { git_hashtable_free(repo->objects); free(repo); return NULL; } return repo; }
void git_repository_free(git_repository *repo) { git_hashtable_iterator it; git_object *object; if (repo == NULL) return; free(repo->path_workdir); free(repo->path_index); free(repo->path_repository); free(repo->path_odb); git_hashtable_iterator_init(repo->objects, &it); while ((object = (git_object *) git_hashtable_iterator_next(&it)) != NULL) git_object_free(object); git_hashtable_free(repo->objects); git_repository__refcache_free(&repo->references); if (repo->db != NULL) git_odb_close(repo->db); if (repo->index != NULL) git_index_free(repo->index); free(repo); }
void git_revwalk_free(git_revwalk *walk) { if (walk == NULL) return; git_revwalk_reset(walk); git_hashtable_free(walk->commits); free(walk); }
void git_repository_free(git_repository *repo) { git_hashtable_iterator it; git_object *object; assert(repo); free(repo->path_workdir); free(repo->path_index); free(repo->path_repository); free(repo->path_odb); git_hashtable_iterator_init(repo->objects, &it); while ((object = (git_object *) git_hashtable_iterator_next(&it)) != NULL) git_object_free(object); git_hashtable_free(repo->objects); git_odb_close(repo->db); git_index_free(repo->index); free(repo); }