Commit cd2ed9f0 by Vicent Martí

Merge pull request #1518 from arrbee/export-oid-comparison

Remove most inlines from the public API
parents d76fb20e 203d5b0e
...@@ -29,10 +29,7 @@ GIT_BEGIN_DECL ...@@ -29,10 +29,7 @@ GIT_BEGIN_DECL
* @param id identity of the blob to locate. * @param id identity of the blob to locate.
* @return 0 or an error code * @return 0 or an error code
*/ */
GIT_INLINE(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git_oid *id) GIT_EXTERN(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git_oid *id);
{
return git_object_lookup((git_object **)blob, repo, id, GIT_OBJ_BLOB);
}
/** /**
* Lookup a blob object from a repository, * Lookup a blob object from a repository,
...@@ -46,10 +43,7 @@ GIT_INLINE(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git ...@@ -46,10 +43,7 @@ GIT_INLINE(int) git_blob_lookup(git_blob **blob, git_repository *repo, const git
* @param len the length of the short identifier * @param len the length of the short identifier
* @return 0 or an error code * @return 0 or an error code
*/ */
GIT_INLINE(int) git_blob_lookup_prefix(git_blob **blob, git_repository *repo, const git_oid *id, size_t len) GIT_EXTERN(int) git_blob_lookup_prefix(git_blob **blob, git_repository *repo, const git_oid *id, size_t len);
{
return git_object_lookup_prefix((git_object **)blob, repo, id, len, GIT_OBJ_BLOB);
}
/** /**
* Close an open blob * Close an open blob
...@@ -62,11 +56,7 @@ GIT_INLINE(int) git_blob_lookup_prefix(git_blob **blob, git_repository *repo, co ...@@ -62,11 +56,7 @@ GIT_INLINE(int) git_blob_lookup_prefix(git_blob **blob, git_repository *repo, co
* *
* @param blob the blob to close * @param blob the blob to close
*/ */
GIT_EXTERN(void) git_blob_free(git_blob *blob);
GIT_INLINE(void) git_blob_free(git_blob *blob)
{
git_object_free((git_object *) blob);
}
/** /**
* Get the id of a blob. * Get the id of a blob.
...@@ -74,11 +64,15 @@ GIT_INLINE(void) git_blob_free(git_blob *blob) ...@@ -74,11 +64,15 @@ GIT_INLINE(void) git_blob_free(git_blob *blob)
* @param blob a previously loaded blob. * @param blob a previously loaded blob.
* @return SHA1 hash for this blob. * @return SHA1 hash for this blob.
*/ */
GIT_INLINE(const git_oid *) git_blob_id(const git_blob *blob) GIT_EXTERN(const git_oid *) git_blob_id(const git_blob *blob);
{
return git_object_id((const git_object *)blob);
}
/**
* Get the repository that contains the blob.
*
* @param blob A previously loaded blob.
* @return Repository that contains this blob.
*/
GIT_EXTERN(git_repository *) git_blob_owner(const git_blob *blob);
/** /**
* Get a read-only buffer with the raw content of a blob. * Get a read-only buffer with the raw content of a blob.
......
...@@ -145,19 +145,7 @@ GIT_EXTERN(void) git_oid_cpy(git_oid *out, const git_oid *src); ...@@ -145,19 +145,7 @@ GIT_EXTERN(void) git_oid_cpy(git_oid *out, const git_oid *src);
* @param b second oid structure. * @param b second oid structure.
* @return <0, 0, >0 if a < b, a == b, a > b. * @return <0, 0, >0 if a < b, a == b, a > b.
*/ */
GIT_INLINE(int) git_oid_cmp(const git_oid *a, const git_oid *b) GIT_EXTERN(int) git_oid_cmp(const git_oid *a, const git_oid *b);
{
const unsigned char *sha1 = a->id;
const unsigned char *sha2 = b->id;
int i;
for (i = 0; i < GIT_OID_RAWSZ; i++, sha1++, sha2++) {
if (*sha1 != *sha2)
return *sha1 - *sha2;
}
return 0;
}
/** /**
* Compare two oid structures for equality * Compare two oid structures for equality
...@@ -193,6 +181,16 @@ GIT_EXTERN(int) git_oid_ncmp(const git_oid *a, const git_oid *b, size_t len); ...@@ -193,6 +181,16 @@ GIT_EXTERN(int) git_oid_ncmp(const git_oid *a, const git_oid *b, size_t len);
GIT_EXTERN(int) git_oid_streq(const git_oid *id, const char *str); GIT_EXTERN(int) git_oid_streq(const git_oid *id, const char *str);
/** /**
* Compare an oid to an hex formatted object id.
*
* @param id oid structure.
* @param str input hex string of an object id.
* @return -1 if str is not valid, <0 if id sorts before str,
* 0 if id matches str, >0 if id sorts after str.
*/
GIT_EXTERN(int) git_oid_strcmp(const git_oid *id, const char *str);
/**
* Check is an oid is all zeros. * Check is an oid is all zeros.
* *
* @return 1 if all zeros, 0 otherwise. * @return 1 if all zeros, 0 otherwise.
......
...@@ -30,12 +30,8 @@ GIT_BEGIN_DECL ...@@ -30,12 +30,8 @@ GIT_BEGIN_DECL
* @param id identity of the tag to locate. * @param id identity of the tag to locate.
* @return 0 or an error code * @return 0 or an error code
*/ */
GIT_INLINE(int) git_tag_lookup( GIT_EXTERN(int) git_tag_lookup(
git_tag **out, git_repository *repo, const git_oid *id) git_tag **out, git_repository *repo, const git_oid *id);
{
return git_object_lookup(
(git_object **)out, repo, id, (git_otype)GIT_OBJ_TAG);
}
/** /**
* Lookup a tag object from the repository, * Lookup a tag object from the repository,
...@@ -49,12 +45,8 @@ GIT_INLINE(int) git_tag_lookup( ...@@ -49,12 +45,8 @@ GIT_INLINE(int) git_tag_lookup(
* @param len the length of the short identifier * @param len the length of the short identifier
* @return 0 or an error code * @return 0 or an error code
*/ */
GIT_INLINE(int) git_tag_lookup_prefix( GIT_EXTERN(int) git_tag_lookup_prefix(
git_tag **out, git_repository *repo, const git_oid *id, size_t len) git_tag **out, git_repository *repo, const git_oid *id, size_t len);
{
return git_object_lookup_prefix(
(git_object **)out, repo, id, len, (git_otype)GIT_OBJ_TAG);
}
/** /**
* Close an open tag * Close an open tag
...@@ -66,12 +58,7 @@ GIT_INLINE(int) git_tag_lookup_prefix( ...@@ -66,12 +58,7 @@ GIT_INLINE(int) git_tag_lookup_prefix(
* *
* @param tag the tag to close * @param tag the tag to close
*/ */
GIT_EXTERN(void) git_tag_free(git_tag *tag);
GIT_INLINE(void) git_tag_free(git_tag *tag)
{
git_object_free((git_object *)tag);
}
/** /**
* Get the id of a tag. * Get the id of a tag.
...@@ -82,6 +69,14 @@ GIT_INLINE(void) git_tag_free(git_tag *tag) ...@@ -82,6 +69,14 @@ GIT_INLINE(void) git_tag_free(git_tag *tag)
GIT_EXTERN(const git_oid *) git_tag_id(const git_tag *tag); GIT_EXTERN(const git_oid *) git_tag_id(const git_tag *tag);
/** /**
* Get the repository that contains the tag.
*
* @param tag A previously loaded tag.
* @return Repository that contains this tag.
*/
GIT_EXTERN(git_repository *) git_tag_owner(const git_tag *tag);
/**
* Get the tagged object of a tag * Get the tagged object of a tag
* *
* This method performs a repository lookup for the * This method performs a repository lookup for the
......
...@@ -29,11 +29,8 @@ GIT_BEGIN_DECL ...@@ -29,11 +29,8 @@ GIT_BEGIN_DECL
* @param id Identity of the tree to locate. * @param id Identity of the tree to locate.
* @return 0 or an error code * @return 0 or an error code
*/ */
GIT_INLINE(int) git_tree_lookup( GIT_EXTERN(int) git_tree_lookup(
git_tree **out, git_repository *repo, const git_oid *id) git_tree **out, git_repository *repo, const git_oid *id);
{
return git_object_lookup((git_object **)out, repo, id, GIT_OBJ_TREE);
}
/** /**
* Lookup a tree object from the repository, * Lookup a tree object from the repository,
...@@ -47,15 +44,11 @@ GIT_INLINE(int) git_tree_lookup( ...@@ -47,15 +44,11 @@ GIT_INLINE(int) git_tree_lookup(
* @param len the length of the short identifier * @param len the length of the short identifier
* @return 0 or an error code * @return 0 or an error code
*/ */
GIT_INLINE(int) git_tree_lookup_prefix( GIT_EXTERN(int) git_tree_lookup_prefix(
git_tree **out, git_tree **out,
git_repository *repo, git_repository *repo,
const git_oid *id, const git_oid *id,
size_t len) size_t len);
{
return git_object_lookup_prefix(
(git_object **)out, repo, id, len, GIT_OBJ_TREE);
}
/** /**
* Close an open tree * Close an open tree
...@@ -67,10 +60,7 @@ GIT_INLINE(int) git_tree_lookup_prefix( ...@@ -67,10 +60,7 @@ GIT_INLINE(int) git_tree_lookup_prefix(
* *
* @param tree The tree to close * @param tree The tree to close
*/ */
GIT_INLINE(void) git_tree_free(git_tree *tree) GIT_EXTERN(void) git_tree_free(git_tree *tree);
{
git_object_free((git_object *)tree);
}
/** /**
* Get the id of a tree. * Get the id of a tree.
......
...@@ -312,7 +312,7 @@ static int load_attr_blob_from_index( ...@@ -312,7 +312,7 @@ static int load_attr_blob_from_index(
entry = git_index_get_byindex(index, pos); entry = git_index_get_byindex(index, pos);
if (old_oid && git_oid_cmp(old_oid, &entry->oid) == 0) if (old_oid && git_oid__cmp(old_oid, &entry->oid) == 0)
return GIT_ENOTFOUND; return GIT_ENOTFOUND;
if ((error = git_blob_lookup(blob, repo, &entry->oid)) < 0) if ((error = git_blob_lookup(blob, repo, &entry->oid)) < 0)
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
#include "filter.h" #include "filter.h"
#include "buf_text.h" #include "buf_text.h"
GIT_OBJECT__TYPED_FUNCTIONS(git_blob, GIT_OBJ_BLOB)
const void *git_blob_rawcontent(const git_blob *blob) const void *git_blob_rawcontent(const git_blob *blob)
{ {
assert(blob); assert(blob);
......
...@@ -138,7 +138,7 @@ static bool checkout_is_workdir_modified( ...@@ -138,7 +138,7 @@ static bool checkout_is_workdir_modified(
if (!sm_oid) if (!sm_oid)
return false; return false;
return (git_oid_cmp(&baseitem->oid, sm_oid) != 0); return (git_oid__cmp(&baseitem->oid, sm_oid) != 0);
} }
/* Look at the cache to decide if the workdir is modified. If not, /* Look at the cache to decide if the workdir is modified. If not,
...@@ -149,7 +149,7 @@ static bool checkout_is_workdir_modified( ...@@ -149,7 +149,7 @@ static bool checkout_is_workdir_modified(
if (wditem->mtime.seconds == ie->mtime.seconds && if (wditem->mtime.seconds == ie->mtime.seconds &&
wditem->mtime.nanoseconds == ie->mtime.nanoseconds && wditem->mtime.nanoseconds == ie->mtime.nanoseconds &&
wditem->file_size == ie->file_size) wditem->file_size == ie->file_size)
return (git_oid_cmp(&baseitem->oid, &ie->oid) != 0); return (git_oid__cmp(&baseitem->oid, &ie->oid) != 0);
} }
/* depending on where base is coming from, we may or may not know /* depending on where base is coming from, we may or may not know
...@@ -163,7 +163,7 @@ static bool checkout_is_workdir_modified( ...@@ -163,7 +163,7 @@ static bool checkout_is_workdir_modified(
wditem->file_size, &oid) < 0) wditem->file_size, &oid) < 0)
return false; return false;
return (git_oid_cmp(&baseitem->oid, &oid) != 0); return (git_oid__cmp(&baseitem->oid, &oid) != 0);
} }
#define CHECKOUT_ACTION_IF(FLAG,YES,NO) \ #define CHECKOUT_ACTION_IF(FLAG,YES,NO) \
......
...@@ -132,14 +132,14 @@ static int reference_matches_remote_head( ...@@ -132,14 +132,14 @@ static int reference_matches_remote_head(
return 0; return 0;
} }
if (git_oid_cmp(&head_info->remote_head_oid, &oid) == 0) { if (git_oid__cmp(&head_info->remote_head_oid, &oid) == 0) {
/* Determine the local reference name from the remote tracking one */ /* Determine the local reference name from the remote tracking one */
if (git_refspec_transform_l( if (git_refspec_transform_l(
&head_info->branchname, &head_info->branchname,
head_info->refspec, head_info->refspec,
reference_name) < 0) reference_name) < 0)
return -1; return -1;
if (git_buf_len(&head_info->branchname) > 0) { if (git_buf_len(&head_info->branchname) > 0) {
if (git_buf_sets( if (git_buf_sets(
&head_info->branchname, &head_info->branchname,
......
...@@ -196,21 +196,21 @@ static git_diff_delta *diff_delta__last_for_item( ...@@ -196,21 +196,21 @@ static git_diff_delta *diff_delta__last_for_item(
switch (delta->status) { switch (delta->status) {
case GIT_DELTA_UNMODIFIED: case GIT_DELTA_UNMODIFIED:
case GIT_DELTA_DELETED: case GIT_DELTA_DELETED:
if (git_oid_cmp(&delta->old_file.oid, &item->oid) == 0) if (git_oid__cmp(&delta->old_file.oid, &item->oid) == 0)
return delta; return delta;
break; break;
case GIT_DELTA_ADDED: case GIT_DELTA_ADDED:
if (git_oid_cmp(&delta->new_file.oid, &item->oid) == 0) if (git_oid__cmp(&delta->new_file.oid, &item->oid) == 0)
return delta; return delta;
break; break;
case GIT_DELTA_UNTRACKED: case GIT_DELTA_UNTRACKED:
if (diff->strcomp(delta->new_file.path, item->path) == 0 && if (diff->strcomp(delta->new_file.path, item->path) == 0 &&
git_oid_cmp(&delta->new_file.oid, &item->oid) == 0) git_oid__cmp(&delta->new_file.oid, &item->oid) == 0)
return delta; return delta;
break; break;
case GIT_DELTA_MODIFIED: case GIT_DELTA_MODIFIED:
if (git_oid_cmp(&delta->old_file.oid, &item->oid) == 0 || if (git_oid__cmp(&delta->old_file.oid, &item->oid) == 0 ||
git_oid_cmp(&delta->new_file.oid, &item->oid) == 0) git_oid__cmp(&delta->new_file.oid, &item->oid) == 0)
return delta; return delta;
break; break;
default: default:
......
...@@ -660,7 +660,7 @@ static int diff_patch_load( ...@@ -660,7 +660,7 @@ static int diff_patch_load(
*/ */
if (check_if_unmodified && if (check_if_unmodified &&
delta->old_file.mode == delta->new_file.mode && delta->old_file.mode == delta->new_file.mode &&
!git_oid_cmp(&delta->old_file.oid, &delta->new_file.oid)) !git_oid__cmp(&delta->old_file.oid, &delta->new_file.oid))
{ {
delta->status = GIT_DELTA_UNMODIFIED; delta->status = GIT_DELTA_UNMODIFIED;
...@@ -1388,7 +1388,7 @@ static int diff_single_apply(diff_single_data *data) ...@@ -1388,7 +1388,7 @@ static int diff_single_apply(diff_single_data *data)
(has_old ? GIT_DELTA_MODIFIED : GIT_DELTA_ADDED) : (has_old ? GIT_DELTA_MODIFIED : GIT_DELTA_ADDED) :
(has_old ? GIT_DELTA_DELETED : GIT_DELTA_UNTRACKED); (has_old ? GIT_DELTA_DELETED : GIT_DELTA_UNTRACKED);
if (git_oid_cmp(&delta->new_file.oid, &delta->old_file.oid) == 0) if (git_oid__cmp(&delta->new_file.oid, &delta->old_file.oid) == 0)
delta->status = GIT_DELTA_UNMODIFIED; delta->status = GIT_DELTA_UNMODIFIED;
if ((error = diff_delta_is_binary_by_content( if ((error = diff_delta_is_binary_by_content(
......
...@@ -429,7 +429,7 @@ static int similarity_measure( ...@@ -429,7 +429,7 @@ static int similarity_measure(
if (GIT_MODE_TYPE(a_file->mode) != GIT_MODE_TYPE(b_file->mode)) if (GIT_MODE_TYPE(a_file->mode) != GIT_MODE_TYPE(b_file->mode))
return 0; return 0;
if (git_oid_cmp(&a_file->oid, &b_file->oid) == 0) if (git_oid__cmp(&a_file->oid, &b_file->oid) == 0)
return 100; return 100;
/* update signature cache if needed */ /* update signature cache if needed */
......
...@@ -1411,7 +1411,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size) ...@@ -1411,7 +1411,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
/* 160-bit SHA-1 over the content of the index file before this checksum. */ /* 160-bit SHA-1 over the content of the index file before this checksum. */
git_oid_fromraw(&checksum_expected, (const unsigned char *)buffer); git_oid_fromraw(&checksum_expected, (const unsigned char *)buffer);
if (git_oid_cmp(&checksum_calculated, &checksum_expected) != 0) if (git_oid__cmp(&checksum_calculated, &checksum_expected) != 0)
return index_error_invalid("calculated checksum does not match expected"); return index_error_invalid("calculated checksum does not match expected");
#undef seek_forward #undef seek_forward
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include "git2/indexer.h" #include "git2/indexer.h"
#include "git2/object.h" #include "git2/object.h"
#include "git2/oid.h"
#include "common.h" #include "common.h"
#include "pack.h" #include "pack.h"
...@@ -17,6 +16,7 @@ ...@@ -17,6 +16,7 @@
#include "posix.h" #include "posix.h"
#include "pack.h" #include "pack.h"
#include "filebuf.h" #include "filebuf.h"
#include "oid.h"
#include "oidmap.h" #include "oidmap.h"
#define UINT31_MAX (0x7FFFFFFF) #define UINT31_MAX (0x7FFFFFFF)
...@@ -103,7 +103,7 @@ static int objects_cmp(const void *a, const void *b) ...@@ -103,7 +103,7 @@ static int objects_cmp(const void *a, const void *b)
const struct entry *entrya = a; const struct entry *entrya = a;
const struct entry *entryb = b; const struct entry *entryb = b;
return git_oid_cmp(&entrya->oid, &entryb->oid); return git_oid__cmp(&entrya->oid, &entryb->oid);
} }
int git_indexer_stream_new( int git_indexer_stream_new(
......
...@@ -28,4 +28,16 @@ int git_oid__parse(git_oid *oid, const char **buffer_out, const char *buffer_end ...@@ -28,4 +28,16 @@ int git_oid__parse(git_oid *oid, const char **buffer_out, const char *buffer_end
void git_oid__writebuf(git_buf *buf, const char *header, const git_oid *oid); void git_oid__writebuf(git_buf *buf, const char *header, const git_oid *oid);
#define GIT_OBJECT__TYPED_FUNCTIONS(TYPE,OBJTYPE) \
int TYPE##_lookup(TYPE **out, git_repository *repo, const git_oid *id) { \
return git_object_lookup((git_object **)out, repo, id, OBJTYPE); } \
int TYPE##_lookup_prefix(TYPE **out, git_repository *repo, const git_oid *id, size_t len) { \
return git_object_lookup_prefix((git_object **)out, repo, id, len, OBJTYPE); } \
void TYPE##_free(TYPE *obj) { \
git_object_free((git_object *)obj); } \
const git_oid *TYPE##_id(const TYPE *obj) { \
return git_object_id((const git_object *)obj); } \
git_repository *TYPE##_owner(const TYPE *obj) { \
return git_object_owner((const git_object *)obj); }
#endif #endif
...@@ -772,7 +772,7 @@ attempt_lookup: ...@@ -772,7 +772,7 @@ attempt_lookup:
git__free(data); git__free(data);
data = raw.data; data = raw.data;
if (found && git_oid_cmp(&full_oid, &found_full_oid)) if (found && git_oid__cmp(&full_oid, &found_full_oid))
return git_odb__error_ambiguous("multiple matches for prefix"); return git_odb__error_ambiguous("multiple matches for prefix");
found_full_oid = full_oid; found_full_oid = full_oid;
......
...@@ -166,18 +166,26 @@ void git_oid_cpy(git_oid *out, const git_oid *src) ...@@ -166,18 +166,26 @@ void git_oid_cpy(git_oid *out, const git_oid *src)
memcpy(out->id, src->id, sizeof(out->id)); memcpy(out->id, src->id, sizeof(out->id));
} }
int git_oid_cmp(const git_oid *a, const git_oid *b)
{
return git_oid__cmp(a, b);
}
int git_oid_ncmp(const git_oid *oid_a, const git_oid *oid_b, size_t len) int git_oid_ncmp(const git_oid *oid_a, const git_oid *oid_b, size_t len)
{ {
const unsigned char *a = oid_a->id; const unsigned char *a = oid_a->id;
const unsigned char *b = oid_b->id; const unsigned char *b = oid_b->id;
do { if (len > GIT_OID_HEXSZ)
len = GIT_OID_HEXSZ;
while (len > 1) {
if (*a != *b) if (*a != *b)
return 1; return 1;
a++; a++;
b++; b++;
len -= 2; len -= 2;
} while (len > 1); };
if (len) if (len)
if ((*a ^ *b) & 0xf0) if ((*a ^ *b) & 0xf0)
...@@ -186,14 +194,31 @@ int git_oid_ncmp(const git_oid *oid_a, const git_oid *oid_b, size_t len) ...@@ -186,14 +194,31 @@ int git_oid_ncmp(const git_oid *oid_a, const git_oid *oid_b, size_t len)
return 0; return 0;
} }
int git_oid_streq(const git_oid *a, const char *str) int git_oid_strcmp(const git_oid *oid_a, const char *str)
{ {
git_oid id; const unsigned char *a = oid_a->id;
unsigned char strval;
int hexval;
if (git_oid_fromstr(&id, str) < 0) for (a = oid_a->id; *str && (a - oid_a->id) < GIT_OID_RAWSZ; ++a) {
return -1; if ((hexval = git__fromhex(*str++)) < 0)
return -1;
strval = hexval << 4;
if (*str) {
if ((hexval = git__fromhex(*str++)) < 0)
return -1;
strval |= hexval;
}
if (*a != strval)
return (*a - strval);
}
return git_oid_cmp(a, &id) == 0 ? 0 : -1; return 0;
}
int git_oid_streq(const git_oid *oid_a, const char *str)
{
return git_oid_strcmp(oid_a, str) == 0 ? 0 : -1;
} }
int git_oid_iszero(const git_oid *oid_a) int git_oid_iszero(const git_oid *oid_a)
......
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_oid_h__
#define INCLUDE_oid_h__
#include "git2/oid.h"
/*
* Compare two oid structures.
*
* @param a first oid structure.
* @param b second oid structure.
* @return <0, 0, >0 if a < b, a == b, a > b.
*/
GIT_INLINE(int) git_oid__cmp(const git_oid *a, const git_oid *b)
{
const unsigned char *sha1 = a->id;
const unsigned char *sha2 = b->id;
int i;
for (i = 0; i < GIT_OID_RAWSZ; i++, sha1++, sha2++) {
if (*sha1 != *sha2)
return *sha1 - *sha2;
}
return 0;
}
#endif
...@@ -12,8 +12,8 @@ ...@@ -12,8 +12,8 @@
#include "sha1_lookup.h" #include "sha1_lookup.h"
#include "mwindow.h" #include "mwindow.h"
#include "fileops.h" #include "fileops.h"
#include "oid.h"
#include "git2/oid.h"
#include <zlib.h> #include <zlib.h>
static int packfile_open(struct git_pack_file *p); static int packfile_open(struct git_pack_file *p);
...@@ -875,7 +875,7 @@ static int packfile_open(struct git_pack_file *p) ...@@ -875,7 +875,7 @@ static int packfile_open(struct git_pack_file *p)
idx_sha1 = ((unsigned char *)p->index_map.data) + p->index_map.len - 40; idx_sha1 = ((unsigned char *)p->index_map.data) + p->index_map.len - 40;
if (git_oid_cmp(&sha1, (git_oid *)idx_sha1) == 0) if (git_oid__cmp(&sha1, (git_oid *)idx_sha1) == 0)
return 0; return 0;
cleanup: cleanup:
...@@ -1139,7 +1139,7 @@ int git_pack_entry_find( ...@@ -1139,7 +1139,7 @@ int git_pack_entry_find(
if (len == GIT_OID_HEXSZ && p->num_bad_objects) { if (len == GIT_OID_HEXSZ && p->num_bad_objects) {
unsigned i; unsigned i;
for (i = 0; i < p->num_bad_objects; i++) for (i = 0; i < p->num_bad_objects; i++)
if (git_oid_cmp(short_oid, &p->bad_object_sha1[i]) == 0) if (git_oid__cmp(short_oid, &p->bad_object_sha1[i]) == 0)
return packfile_error("bad object found in packfile"); return packfile_error("bad object found in packfile");
} }
......
...@@ -376,7 +376,7 @@ static int queue_differences( ...@@ -376,7 +376,7 @@ static int queue_differences(
const git_tree_entry *d_entry = git_tree_entry_byindex(delta, j); const git_tree_entry *d_entry = git_tree_entry_byindex(delta, j);
int cmp = 0; int cmp = 0;
if (!git_oid_cmp(&b_entry->oid, &d_entry->oid)) if (!git_oid__cmp(&b_entry->oid, &d_entry->oid))
goto loop; goto loop;
cmp = strcmp(b_entry->filename, d_entry->filename); cmp = strcmp(b_entry->filename, d_entry->filename);
......
...@@ -832,7 +832,7 @@ int git_reference_cmp(git_reference *ref1, git_reference *ref2) ...@@ -832,7 +832,7 @@ int git_reference_cmp(git_reference *ref1, git_reference *ref2)
if (type1 == GIT_REF_SYMBOLIC) if (type1 == GIT_REF_SYMBOLIC)
return strcmp(ref1->target.symbolic, ref2->target.symbolic); return strcmp(ref1->target.symbolic, ref2->target.symbolic);
return git_oid_cmp(&ref1->target.oid, &ref2->target.oid); return git_oid__cmp(&ref1->target.oid, &ref2->target.oid);
} }
static int reference__update_terminal( static int reference__update_terminal(
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "git2/refdb.h" #include "git2/refdb.h"
#include "strmap.h" #include "strmap.h"
#include "buffer.h" #include "buffer.h"
#include "oid.h"
#define GIT_REFS_DIR "refs/" #define GIT_REFS_DIR "refs/"
#define GIT_REFS_HEADS_DIR GIT_REFS_DIR "heads/" #define GIT_REFS_HEADS_DIR GIT_REFS_DIR "heads/"
......
...@@ -923,7 +923,7 @@ static int update_tips_for_spec(git_remote *remote, git_refspec *spec, git_vecto ...@@ -923,7 +923,7 @@ static int update_tips_for_spec(git_remote *remote, git_refspec *spec, git_vecto
if (error == GIT_ENOTFOUND) if (error == GIT_ENOTFOUND)
memset(&old, 0, GIT_OID_RAWSZ); memset(&old, 0, GIT_OID_RAWSZ);
if (!git_oid_cmp(&old, &head->oid)) if (!git_oid__cmp(&old, &head->oid))
continue; continue;
/* In autotag mode, don't overwrite any locally-existing tags */ /* In autotag mode, don't overwrite any locally-existing tags */
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
#include "git2/signature.h" #include "git2/signature.h"
#include "git2/odb_backend.h" #include "git2/odb_backend.h"
GIT_OBJECT__TYPED_FUNCTIONS(git_tag, GIT_OBJ_TAG)
void git_tag__free(void *_tag) void git_tag__free(void *_tag)
{ {
git_tag *tag = _tag; git_tag *tag = _tag;
...@@ -24,11 +26,6 @@ void git_tag__free(void *_tag) ...@@ -24,11 +26,6 @@ void git_tag__free(void *_tag)
git__free(tag); git__free(tag);
} }
const git_oid *git_tag_id(const git_tag *c)
{
return git_object_id((const git_object *)c);
}
int git_tag_target(git_object **target, const git_tag *t) int git_tag_target(git_object **target, const git_tag *t)
{ {
assert(t); assert(t);
......
...@@ -282,7 +282,7 @@ static int local_push_copy_object( ...@@ -282,7 +282,7 @@ static int local_push_copy_object(
odb_obj_size) < 0 || odb_obj_size) < 0 ||
odb_stream->finalize_write(&remote_odb_obj_oid, odb_stream) < 0) { odb_stream->finalize_write(&remote_odb_obj_oid, odb_stream) < 0) {
error = -1; error = -1;
} else if (git_oid_cmp(&obj->id, &remote_odb_obj_oid) != 0) { } else if (git_oid__cmp(&obj->id, &remote_odb_obj_oid) != 0) {
giterr_set(GITERR_ODB, "Error when writing object to remote odb " giterr_set(GITERR_ODB, "Error when writing object to remote odb "
"during local push operation. Remote odb object oid does not " "during local push operation. Remote odb object oid does not "
"match local oid."); "match local oid.");
......
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
#include "git2/repository.h" #include "git2/repository.h"
#include "git2/object.h" #include "git2/object.h"
GIT_OBJECT__TYPED_FUNCTIONS(git_tree, GIT_OBJ_TREE)
#define DEFAULT_TREE_SIZE 16 #define DEFAULT_TREE_SIZE 16
#define MAX_FILEMODE_BYTES 6 #define MAX_FILEMODE_BYTES 6
...@@ -232,16 +234,6 @@ void git_tree__free(void *_tree) ...@@ -232,16 +234,6 @@ void git_tree__free(void *_tree)
git__free(tree); git__free(tree);
} }
const git_oid *git_tree_id(const git_tree *t)
{
return git_object_id((const git_object *)t);
}
git_repository *git_tree_owner(const git_tree *t)
{
return git_object_owner((const git_object *)t);
}
git_filemode_t git_tree_entry_filemode(const git_tree_entry *entry) git_filemode_t git_tree_entry_filemode(const git_tree_entry *entry)
{ {
return (git_filemode_t)entry->attr; return (git_filemode_t)entry->attr;
......
...@@ -16,15 +16,55 @@ void test_core_oid__initialize(void) ...@@ -16,15 +16,55 @@ void test_core_oid__initialize(void)
void test_core_oid__streq(void) void test_core_oid__streq(void)
{ {
cl_assert(git_oid_streq(&id, str_oid) == 0); cl_assert_equal_i(0, git_oid_streq(&id, str_oid));
cl_assert(git_oid_streq(&id, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef") == -1); cl_assert_equal_i(-1, git_oid_streq(&id, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"));
cl_assert(git_oid_streq(&id, "deadbeef") == -1); cl_assert_equal_i(-1, git_oid_streq(&id, "deadbeef"));
cl_assert(git_oid_streq(&id, "I'm not an oid.... :)") == -1); cl_assert_equal_i(-1, git_oid_streq(&id, "I'm not an oid.... :)"));
cl_assert(git_oid_streq(&idp, "ae90f12eea699729ed0000000000000000000000") == 0);
cl_assert(git_oid_streq(&idp, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef") == -1);
cl_assert(git_oid_streq(&idp, "deadbeef") == -1); cl_assert_equal_i(0, git_oid_streq(&idp, "ae90f12eea699729ed0000000000000000000000"));
cl_assert(git_oid_streq(&idp, "I'm not an oid.... :)") == -1); cl_assert_equal_i(0, git_oid_streq(&idp, "ae90f12eea699729ed"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "ae90f12eea699729ed1"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "ae90f12eea699729ec"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "deadbeef"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "I'm not an oid.... :)"));
}
void test_core_oid__strcmp(void)
{
cl_assert_equal_i(0, git_oid_strcmp(&id, str_oid));
cl_assert(git_oid_strcmp(&id, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef") < 0);
cl_assert(git_oid_strcmp(&id, "deadbeef") < 0);
cl_assert_equal_i(-1, git_oid_strcmp(&id, "I'm not an oid.... :)"));
cl_assert_equal_i(0, git_oid_strcmp(&idp, "ae90f12eea699729ed0000000000000000000000"));
cl_assert_equal_i(0, git_oid_strcmp(&idp, "ae90f12eea699729ed"));
cl_assert(git_oid_strcmp(&idp, "ae90f12eea699729ed1") < 0);
cl_assert(git_oid_strcmp(&idp, "ae90f12eea699729ec") > 0);
cl_assert(git_oid_strcmp(&idp, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef") < 0);
cl_assert(git_oid_strcmp(&idp, "deadbeef") < 0);
cl_assert_equal_i(-1, git_oid_strcmp(&idp, "I'm not an oid.... :)"));
}
void test_core_oid__ncmp(void)
{
cl_assert(!git_oid_ncmp(&id, &idp, 0));
cl_assert(!git_oid_ncmp(&id, &idp, 1));
cl_assert(!git_oid_ncmp(&id, &idp, 2));
cl_assert(!git_oid_ncmp(&id, &idp, 17));
cl_assert(!git_oid_ncmp(&id, &idp, 18));
cl_assert(git_oid_ncmp(&id, &idp, 19));
cl_assert(git_oid_ncmp(&id, &idp, 40));
cl_assert(git_oid_ncmp(&id, &idp, 41));
cl_assert(git_oid_ncmp(&id, &idp, 42));
cl_assert(!git_oid_ncmp(&id, &id, 0));
cl_assert(!git_oid_ncmp(&id, &id, 1));
cl_assert(!git_oid_ncmp(&id, &id, 39));
cl_assert(!git_oid_ncmp(&id, &id, 40));
cl_assert(!git_oid_ncmp(&id, &id, 41));
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment