diff options
Diffstat (limited to 'src/revwalk.c')
| -rw-r--r-- | src/revwalk.c | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/src/revwalk.c b/src/revwalk.c index e30e543a8..c073be13f 100644 --- a/src/revwalk.c +++ b/src/revwalk.c @@ -28,28 +28,23 @@ #include "revwalk.h" #include "hashtable.h" -uint32_t git_revwalk__commit_hash(const void *key) +uint32_t git_revwalk__commit_hash(const void *key, int hash_id) { uint32_t r; git_commit *commit; commit = (git_commit *)key; - memcpy(&r, commit->object.id.id, sizeof(r)); + memcpy(&r, commit->object.id.id + (hash_id * sizeof(uint32_t)), sizeof(r)); return r; } -int git_revwalk__commit_haskey(void *object, const void *key) +int git_revwalk__commit_keycmp(const void *key_a, const void *key_b) { - git_revwalk_commit *walk_commit; - git_commit *commit_object; - - walk_commit = (git_revwalk_commit *)object; - commit_object = (git_commit *)key; - - return (walk_commit->commit_object == commit_object); + git_commit *a = (git_commit *)key_a; + git_commit *b = (git_commit *)key_b; + return git_oid_cmp(&a->object.id, &b->object.id); } - int git_revwalk_new(git_revwalk **revwalk_out, git_repository *repo) { git_revwalk *walk; @@ -62,7 +57,7 @@ int git_revwalk_new(git_revwalk **revwalk_out, git_repository *repo) walk->commits = git_hashtable_alloc(64, git_revwalk__commit_hash, - git_revwalk__commit_haskey); + git_revwalk__commit_keycmp); if (walk->commits == NULL) { free(walk); @@ -245,18 +240,15 @@ int git_revwalk_next(git_commit **commit, git_revwalk *walk) void git_revwalk_reset(git_revwalk *walk) { - git_hashtable_iterator it; + const void *_unused; git_revwalk_commit *commit; assert(walk); - git_hashtable_iterator_init(walk->commits, &it); - - while ((commit = (git_revwalk_commit *) - git_hashtable_iterator_next(&it)) != NULL) { + GIT_HASHTABLE_FOREACH(walk->commits, _unused, commit, { git_revwalk_list_clear(&commit->parents); free(commit); - } + }); git_hashtable_clear(walk->commits); git_revwalk_list_clear(&walk->iterator); |
