mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 18:38:58 +00:00
Add a routine to determine a git_oid given an git_obj
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
007e075337
commit
c960d6a3f9
@ -138,6 +138,20 @@ GIT_EXTERN(git_otype) git_obj_string_to_type(const char *str);
|
|||||||
*/
|
*/
|
||||||
GIT_EXTERN(int) git_obj__loose_object_type(git_otype type);
|
GIT_EXTERN(int) git_obj__loose_object_type(git_otype type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine the object-ID (sha1 hash) of the given git_obj.
|
||||||
|
*
|
||||||
|
* The input obj must be a valid loose object type and the data
|
||||||
|
* pointer must not be NULL, unless the len field is also zero.
|
||||||
|
*
|
||||||
|
* @param id the resulting object-ID.
|
||||||
|
* @param obj the object whose hash is to be determined.
|
||||||
|
* @return
|
||||||
|
* - GIT_SUCCESS if the object-ID was correctly determined.
|
||||||
|
* - GIT_ERROR if the given object is malformed.
|
||||||
|
*/
|
||||||
|
GIT_EXTERN(int) git_obj_hash(git_oid *id, git_obj *obj);
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
GIT_END_DECL
|
GIT_END_DECL
|
||||||
#endif
|
#endif
|
||||||
|
42
src/odb.c
42
src/odb.c
@ -27,6 +27,8 @@
|
|||||||
#include "git/zlib.h"
|
#include "git/zlib.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "fileops.h"
|
#include "fileops.h"
|
||||||
|
#include "hash.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
struct git_odb {
|
struct git_odb {
|
||||||
/** Path to the "objects" directory. */
|
/** Path to the "objects" directory. */
|
||||||
@ -83,6 +85,46 @@ int git_obj__loose_object_type(git_otype type)
|
|||||||
return obj_type_table[type].loose;
|
return obj_type_table[type].loose;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int format_object_header(char *hdr, size_t n, git_obj *obj)
|
||||||
|
{
|
||||||
|
const char *type_str = git_obj_type_to_string(obj->type);
|
||||||
|
int len = snprintf(hdr, n, "%s %u", type_str, obj->len);
|
||||||
|
|
||||||
|
assert(len > 0); /* otherwise snprintf() is broken */
|
||||||
|
assert(len < n); /* otherwise the caller is broken! */
|
||||||
|
|
||||||
|
if (len < 0 || len >= n)
|
||||||
|
return GIT_ERROR;
|
||||||
|
return len+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int git_obj_hash(git_oid *id, git_obj *obj)
|
||||||
|
{
|
||||||
|
git_buf_vec vec[2];
|
||||||
|
char hdr[64];
|
||||||
|
int hdrlen;
|
||||||
|
|
||||||
|
assert(id && obj);
|
||||||
|
|
||||||
|
if (!git_obj__loose_object_type(obj->type))
|
||||||
|
return GIT_ERROR;
|
||||||
|
|
||||||
|
if (!obj->data && obj->len != 0)
|
||||||
|
return GIT_ERROR;
|
||||||
|
|
||||||
|
if ((hdrlen = format_object_header(hdr, sizeof(hdr), obj)) < 0)
|
||||||
|
return GIT_ERROR;
|
||||||
|
|
||||||
|
vec[0].data = hdr;
|
||||||
|
vec[0].len = hdrlen;
|
||||||
|
vec[1].data = obj->data;
|
||||||
|
vec[1].len = obj->len;
|
||||||
|
|
||||||
|
git_hash_vec(id, vec, 2);
|
||||||
|
|
||||||
|
return GIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static int object_file_name(char *name, size_t n, char *dir, const git_oid *id)
|
static int object_file_name(char *name, size_t n, char *dir, const git_oid *id)
|
||||||
{
|
{
|
||||||
size_t len = strlen(dir);
|
size_t len = strlen(dir);
|
||||||
|
423
tests/t0000-obj-hash.c
Normal file
423
tests/t0000-obj-hash.c
Normal file
@ -0,0 +1,423 @@
|
|||||||
|
|
||||||
|
#include "test_lib.h"
|
||||||
|
#include <git/odb.h>
|
||||||
|
|
||||||
|
static char *commit_id = "3d7f8a6af076c8c3f20071a8935cdbe8228594d1";
|
||||||
|
|
||||||
|
static unsigned char commit_data[] = {
|
||||||
|
0x74, 0x72, 0x65, 0x65, 0x20, 0x64, 0x66, 0x66,
|
||||||
|
0x32, 0x64, 0x61, 0x39, 0x30, 0x62, 0x32, 0x35,
|
||||||
|
0x34, 0x65, 0x31, 0x62, 0x65, 0x62, 0x38, 0x38,
|
||||||
|
0x39, 0x64, 0x31, 0x66, 0x31, 0x66, 0x31, 0x32,
|
||||||
|
0x38, 0x38, 0x62, 0x65, 0x31, 0x38, 0x30, 0x33,
|
||||||
|
0x37, 0x38, 0x32, 0x64, 0x66, 0x0a, 0x61, 0x75,
|
||||||
|
0x74, 0x68, 0x6f, 0x72, 0x20, 0x41, 0x20, 0x55,
|
||||||
|
0x20, 0x54, 0x68, 0x6f, 0x72, 0x20, 0x3c, 0x61,
|
||||||
|
0x75, 0x74, 0x68, 0x6f, 0x72, 0x40, 0x65, 0x78,
|
||||||
|
0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
|
||||||
|
0x6d, 0x3e, 0x20, 0x31, 0x32, 0x32, 0x37, 0x38,
|
||||||
|
0x31, 0x34, 0x32, 0x39, 0x37, 0x20, 0x2b, 0x30,
|
||||||
|
0x30, 0x30, 0x30, 0x0a, 0x63, 0x6f, 0x6d, 0x6d,
|
||||||
|
0x69, 0x74, 0x74, 0x65, 0x72, 0x20, 0x43, 0x20,
|
||||||
|
0x4f, 0x20, 0x4d, 0x69, 0x74, 0x74, 0x65, 0x72,
|
||||||
|
0x20, 0x3c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
|
||||||
|
0x74, 0x65, 0x72, 0x40, 0x65, 0x78, 0x61, 0x6d,
|
||||||
|
0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x3e,
|
||||||
|
0x20, 0x31, 0x32, 0x32, 0x37, 0x38, 0x31, 0x34,
|
||||||
|
0x32, 0x39, 0x37, 0x20, 0x2b, 0x30, 0x30, 0x30,
|
||||||
|
0x30, 0x0a, 0x0a, 0x41, 0x20, 0x6f, 0x6e, 0x65,
|
||||||
|
0x2d, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f,
|
||||||
|
0x6d, 0x6d, 0x69, 0x74, 0x20, 0x73, 0x75, 0x6d,
|
||||||
|
0x6d, 0x61, 0x72, 0x79, 0x0a, 0x0a, 0x54, 0x68,
|
||||||
|
0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f,
|
||||||
|
0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
|
||||||
|
0x6d, 0x6d, 0x69, 0x74, 0x20, 0x6d, 0x65, 0x73,
|
||||||
|
0x73, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x63, 0x6f,
|
||||||
|
0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67,
|
||||||
|
0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72,
|
||||||
|
0x20, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61,
|
||||||
|
0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x6f, 0x66, 0x20,
|
||||||
|
0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x72, 0x70,
|
||||||
|
0x6f, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74,
|
||||||
|
0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67,
|
||||||
|
0x65, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f,
|
||||||
|
0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79,
|
||||||
|
0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d,
|
||||||
|
0x6d, 0x69, 0x74, 0x2e, 0x0a, 0x0a, 0x53, 0x69,
|
||||||
|
0x67, 0x6e, 0x65, 0x64, 0x2d, 0x6f, 0x66, 0x2d,
|
||||||
|
0x62, 0x79, 0x3a, 0x20, 0x41, 0x20, 0x55, 0x20,
|
||||||
|
0x54, 0x68, 0x6f, 0x72, 0x20, 0x3c, 0x61, 0x75,
|
||||||
|
0x74, 0x68, 0x6f, 0x72, 0x40, 0x65, 0x78, 0x61,
|
||||||
|
0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
|
0x3e, 0x0a,
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_obj commit_obj = {
|
||||||
|
commit_data,
|
||||||
|
sizeof(commit_data),
|
||||||
|
GIT_OBJ_COMMIT
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *tree_id = "dff2da90b254e1beb889d1f1f1288be1803782df";
|
||||||
|
|
||||||
|
static unsigned char tree_data[] = {
|
||||||
|
0x31, 0x30, 0x30, 0x36, 0x34, 0x34, 0x20, 0x6f,
|
||||||
|
0x6e, 0x65, 0x00, 0x8b, 0x13, 0x78, 0x91, 0x79,
|
||||||
|
0x1f, 0xe9, 0x69, 0x27, 0xad, 0x78, 0xe6, 0x4b,
|
||||||
|
0x0a, 0xad, 0x7b, 0xde, 0xd0, 0x8b, 0xdc, 0x31,
|
||||||
|
0x30, 0x30, 0x36, 0x34, 0x34, 0x20, 0x73, 0x6f,
|
||||||
|
0x6d, 0x65, 0x00, 0xfd, 0x84, 0x30, 0xbc, 0x86,
|
||||||
|
0x4c, 0xfc, 0xd5, 0xf1, 0x0e, 0x55, 0x90, 0xf8,
|
||||||
|
0xa4, 0x47, 0xe0, 0x1b, 0x94, 0x2b, 0xfe, 0x31,
|
||||||
|
0x30, 0x30, 0x36, 0x34, 0x34, 0x20, 0x74, 0x77,
|
||||||
|
0x6f, 0x00, 0x78, 0x98, 0x19, 0x22, 0x61, 0x3b,
|
||||||
|
0x2a, 0xfb, 0x60, 0x25, 0x04, 0x2f, 0xf6, 0xbd,
|
||||||
|
0x87, 0x8a, 0xc1, 0x99, 0x4e, 0x85, 0x31, 0x30,
|
||||||
|
0x30, 0x36, 0x34, 0x34, 0x20, 0x7a, 0x65, 0x72,
|
||||||
|
0x6f, 0x00, 0xe6, 0x9d, 0xe2, 0x9b, 0xb2, 0xd1,
|
||||||
|
0xd6, 0x43, 0x4b, 0x8b, 0x29, 0xae, 0x77, 0x5a,
|
||||||
|
0xd8, 0xc2, 0xe4, 0x8c, 0x53, 0x91,
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_obj tree_obj = {
|
||||||
|
tree_data,
|
||||||
|
sizeof(tree_data),
|
||||||
|
GIT_OBJ_TREE
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *tag_id = "09d373e1dfdc16b129ceec6dd649739911541e05";
|
||||||
|
|
||||||
|
static unsigned char tag_data[] = {
|
||||||
|
0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x33,
|
||||||
|
0x64, 0x37, 0x66, 0x38, 0x61, 0x36, 0x61, 0x66,
|
||||||
|
0x30, 0x37, 0x36, 0x63, 0x38, 0x63, 0x33, 0x66,
|
||||||
|
0x32, 0x30, 0x30, 0x37, 0x31, 0x61, 0x38, 0x39,
|
||||||
|
0x33, 0x35, 0x63, 0x64, 0x62, 0x65, 0x38, 0x32,
|
||||||
|
0x32, 0x38, 0x35, 0x39, 0x34, 0x64, 0x31, 0x0a,
|
||||||
|
0x74, 0x79, 0x70, 0x65, 0x20, 0x63, 0x6f, 0x6d,
|
||||||
|
0x6d, 0x69, 0x74, 0x0a, 0x74, 0x61, 0x67, 0x20,
|
||||||
|
0x76, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x0a, 0x74,
|
||||||
|
0x61, 0x67, 0x67, 0x65, 0x72, 0x20, 0x43, 0x20,
|
||||||
|
0x4f, 0x20, 0x4d, 0x69, 0x74, 0x74, 0x65, 0x72,
|
||||||
|
0x20, 0x3c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
|
||||||
|
0x74, 0x65, 0x72, 0x40, 0x65, 0x78, 0x61, 0x6d,
|
||||||
|
0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x3e,
|
||||||
|
0x20, 0x31, 0x32, 0x32, 0x37, 0x38, 0x31, 0x34,
|
||||||
|
0x32, 0x39, 0x37, 0x20, 0x2b, 0x30, 0x30, 0x30,
|
||||||
|
0x30, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20,
|
||||||
|
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
|
||||||
|
0x61, 0x67, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
|
||||||
|
0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65,
|
||||||
|
0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x76, 0x30,
|
||||||
|
0x2e, 0x30, 0x2e, 0x31, 0x0a,
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_obj tag_obj = {
|
||||||
|
tag_data,
|
||||||
|
sizeof(tag_data),
|
||||||
|
GIT_OBJ_TAG
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *zero_id = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391";
|
||||||
|
|
||||||
|
static unsigned char zero_data[] = {
|
||||||
|
0x00 /* dummy data */
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_obj zero_obj = {
|
||||||
|
zero_data,
|
||||||
|
0,
|
||||||
|
GIT_OBJ_BLOB
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *one_id = "8b137891791fe96927ad78e64b0aad7bded08bdc";
|
||||||
|
|
||||||
|
static unsigned char one_data[] = {
|
||||||
|
0x0a,
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_obj one_obj = {
|
||||||
|
one_data,
|
||||||
|
sizeof(one_data),
|
||||||
|
GIT_OBJ_BLOB
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *two_id = "78981922613b2afb6025042ff6bd878ac1994e85";
|
||||||
|
|
||||||
|
static unsigned char two_data[] = {
|
||||||
|
0x61, 0x0a,
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_obj two_obj = {
|
||||||
|
two_data,
|
||||||
|
sizeof(two_data),
|
||||||
|
GIT_OBJ_BLOB
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *some_id = "fd8430bc864cfcd5f10e5590f8a447e01b942bfe";
|
||||||
|
|
||||||
|
static unsigned char some_data[] = {
|
||||||
|
0x2f, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x68,
|
||||||
|
0x69, 0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20,
|
||||||
|
0x69, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20,
|
||||||
|
0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
|
||||||
|
0x3b, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61,
|
||||||
|
0x6e, 0x20, 0x72, 0x65, 0x64, 0x69, 0x73, 0x74,
|
||||||
|
0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69,
|
||||||
|
0x74, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72,
|
||||||
|
0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0a,
|
||||||
|
0x20, 0x2a, 0x20, 0x69, 0x74, 0x20, 0x75, 0x6e,
|
||||||
|
0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20,
|
||||||
|
0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66,
|
||||||
|
0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55,
|
||||||
|
0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
|
||||||
|
0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20,
|
||||||
|
0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c,
|
||||||
|
0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
|
0x20, 0x32, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x61,
|
||||||
|
0x73, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73,
|
||||||
|
0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74,
|
||||||
|
0x68, 0x65, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20,
|
||||||
|
0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
|
||||||
|
0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74,
|
||||||
|
0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x2a, 0x0a,
|
||||||
|
0x20, 0x2a, 0x20, 0x49, 0x6e, 0x20, 0x61, 0x64,
|
||||||
|
0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74,
|
||||||
|
0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65,
|
||||||
|
0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
|
0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
|
||||||
|
0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e,
|
||||||
|
0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62,
|
||||||
|
0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65,
|
||||||
|
0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x20, 0x2a, 0x20,
|
||||||
|
0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68,
|
||||||
|
0x6f, 0x72, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65,
|
||||||
|
0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x6e, 0x6c,
|
||||||
|
0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x70,
|
||||||
|
0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
|
||||||
|
0x6e, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x6e,
|
||||||
|
0x6b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
|
||||||
|
0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x0a, 0x20,
|
||||||
|
0x2a, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
||||||
|
0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69,
|
||||||
|
0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x69,
|
||||||
|
0x6e, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x62,
|
||||||
|
0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
||||||
|
0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x74,
|
||||||
|
0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x67,
|
||||||
|
0x72, 0x61, 0x6d, 0x73, 0x2c, 0x0a, 0x20, 0x2a,
|
||||||
|
0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20,
|
||||||
|
0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
|
||||||
|
0x74, 0x65, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65,
|
||||||
|
0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61,
|
||||||
|
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69,
|
||||||
|
0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e,
|
||||||
|
0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69,
|
||||||
|
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x2a,
|
||||||
|
0x20, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20,
|
||||||
|
0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65,
|
||||||
|
0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20,
|
||||||
|
0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6c,
|
||||||
|
0x65, 0x2e, 0x20, 0x20, 0x28, 0x54, 0x68, 0x65,
|
||||||
|
0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
|
||||||
|
0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20,
|
||||||
|
0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x0a,
|
||||||
|
0x20, 0x2a, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72,
|
||||||
|
0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
|
||||||
|
0x64, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79,
|
||||||
|
0x20, 0x69, 0x6e, 0x20, 0x6f, 0x74, 0x68, 0x65,
|
||||||
|
0x72, 0x20, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63,
|
||||||
|
0x74, 0x73, 0x3b, 0x20, 0x66, 0x6f, 0x72, 0x20,
|
||||||
|
0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c,
|
||||||
|
0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x63, 0x6f,
|
||||||
|
0x76, 0x65, 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x6d,
|
||||||
|
0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
|
||||||
|
0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74,
|
||||||
|
0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2c,
|
||||||
|
0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x73,
|
||||||
|
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f,
|
||||||
|
0x6e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x6e,
|
||||||
|
0x6f, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x65,
|
||||||
|
0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x0a, 0x20,
|
||||||
|
0x2a, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x62,
|
||||||
|
0x69, 0x6e, 0x65, 0x64, 0x20, 0x65, 0x78, 0x65,
|
||||||
|
0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e,
|
||||||
|
0x29, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20,
|
||||||
|
0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x6c,
|
||||||
|
0x65, 0x20, 0x69, 0x73, 0x20, 0x64, 0x69, 0x73,
|
||||||
|
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64,
|
||||||
|
0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
|
||||||
|
0x68, 0x6f, 0x70, 0x65, 0x20, 0x74, 0x68, 0x61,
|
||||||
|
0x74, 0x20, 0x69, 0x74, 0x20, 0x77, 0x69, 0x6c,
|
||||||
|
0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65,
|
||||||
|
0x66, 0x75, 0x6c, 0x2c, 0x20, 0x62, 0x75, 0x74,
|
||||||
|
0x0a, 0x20, 0x2a, 0x20, 0x57, 0x49, 0x54, 0x48,
|
||||||
|
0x4f, 0x55, 0x54, 0x20, 0x41, 0x4e, 0x59, 0x20,
|
||||||
|
0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59,
|
||||||
|
0x3b, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75,
|
||||||
|
0x74, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x74,
|
||||||
|
0x68, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69,
|
||||||
|
0x65, 0x64, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61,
|
||||||
|
0x6e, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x0a, 0x20,
|
||||||
|
0x2a, 0x20, 0x4d, 0x45, 0x52, 0x43, 0x48, 0x41,
|
||||||
|
0x4e, 0x54, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54,
|
||||||
|
0x59, 0x20, 0x6f, 0x72, 0x20, 0x46, 0x49, 0x54,
|
||||||
|
0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, 0x4f, 0x52,
|
||||||
|
0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49,
|
||||||
|
0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55,
|
||||||
|
0x52, 0x50, 0x4f, 0x53, 0x45, 0x2e, 0x20, 0x20,
|
||||||
|
0x53, 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
|
||||||
|
0x47, 0x4e, 0x55, 0x0a, 0x20, 0x2a, 0x20, 0x47,
|
||||||
|
0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50,
|
||||||
|
0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69,
|
||||||
|
0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f,
|
||||||
|
0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64,
|
||||||
|
0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x0a,
|
||||||
|
0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x59, 0x6f,
|
||||||
|
0x75, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64,
|
||||||
|
0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x72, 0x65,
|
||||||
|
0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x61,
|
||||||
|
0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66,
|
||||||
|
0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55,
|
||||||
|
0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
|
||||||
|
0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20,
|
||||||
|
0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x0a,
|
||||||
|
0x20, 0x2a, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67,
|
||||||
|
0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68,
|
||||||
|
0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72,
|
||||||
|
0x61, 0x6d, 0x3b, 0x20, 0x73, 0x65, 0x65, 0x20,
|
||||||
|
0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65,
|
||||||
|
0x20, 0x43, 0x4f, 0x50, 0x59, 0x49, 0x4e, 0x47,
|
||||||
|
0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f,
|
||||||
|
0x74, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65,
|
||||||
|
0x20, 0x74, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x74,
|
||||||
|
0x68, 0x65, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20,
|
||||||
|
0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
|
||||||
|
0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74,
|
||||||
|
0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x35, 0x31, 0x20,
|
||||||
|
0x46, 0x72, 0x61, 0x6e, 0x6b, 0x6c, 0x69, 0x6e,
|
||||||
|
0x20, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x2c,
|
||||||
|
0x20, 0x46, 0x69, 0x66, 0x74, 0x68, 0x20, 0x46,
|
||||||
|
0x6c, 0x6f, 0x6f, 0x72, 0x2c, 0x0a, 0x20, 0x2a,
|
||||||
|
0x20, 0x42, 0x6f, 0x73, 0x74, 0x6f, 0x6e, 0x2c,
|
||||||
|
0x20, 0x4d, 0x41, 0x20, 0x30, 0x32, 0x31, 0x31,
|
||||||
|
0x30, 0x2d, 0x31, 0x33, 0x30, 0x31, 0x2c, 0x20,
|
||||||
|
0x55, 0x53, 0x41, 0x2e, 0x0a, 0x20, 0x2a, 0x2f,
|
||||||
|
0x0a,
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_obj some_obj = {
|
||||||
|
some_data,
|
||||||
|
sizeof(some_data),
|
||||||
|
GIT_OBJ_BLOB
|
||||||
|
};
|
||||||
|
|
||||||
|
static git_obj junk_obj = {
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
GIT_OBJ_BAD
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_TEST(hash_junk)
|
||||||
|
git_oid id, id_zero;
|
||||||
|
|
||||||
|
must_pass(git_oid_mkstr(&id_zero, zero_id));
|
||||||
|
|
||||||
|
/* invalid types: */
|
||||||
|
junk_obj.data = some_data;
|
||||||
|
must_fail(git_obj_hash(&id, &junk_obj));
|
||||||
|
|
||||||
|
junk_obj.type = GIT_OBJ__EXT1;
|
||||||
|
must_fail(git_obj_hash(&id, &junk_obj));
|
||||||
|
|
||||||
|
junk_obj.type = GIT_OBJ__EXT2;
|
||||||
|
must_fail(git_obj_hash(&id, &junk_obj));
|
||||||
|
|
||||||
|
junk_obj.type = GIT_OBJ_OFS_DELTA;
|
||||||
|
must_fail(git_obj_hash(&id, &junk_obj));
|
||||||
|
|
||||||
|
junk_obj.type = GIT_OBJ_REF_DELTA;
|
||||||
|
must_fail(git_obj_hash(&id, &junk_obj));
|
||||||
|
|
||||||
|
/* data can be NULL only if len is zero: */
|
||||||
|
junk_obj.type = GIT_OBJ_BLOB;
|
||||||
|
junk_obj.data = NULL;
|
||||||
|
must_pass(git_obj_hash(&id, &junk_obj));
|
||||||
|
must_be_true(git_oid_cmp(&id, &id_zero) == 0);
|
||||||
|
|
||||||
|
junk_obj.len = 1;
|
||||||
|
must_fail(git_obj_hash(&id, &junk_obj));
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
BEGIN_TEST(hash_commit)
|
||||||
|
git_oid id1, id2;
|
||||||
|
|
||||||
|
must_pass(git_oid_mkstr(&id1, commit_id));
|
||||||
|
|
||||||
|
must_pass(git_obj_hash(&id2, &commit_obj));
|
||||||
|
|
||||||
|
must_be_true(git_oid_cmp(&id1, &id2) == 0);
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
BEGIN_TEST(hash_tree)
|
||||||
|
git_oid id1, id2;
|
||||||
|
|
||||||
|
must_pass(git_oid_mkstr(&id1, tree_id));
|
||||||
|
|
||||||
|
must_pass(git_obj_hash(&id2, &tree_obj));
|
||||||
|
|
||||||
|
must_be_true(git_oid_cmp(&id1, &id2) == 0);
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
BEGIN_TEST(hash_tag)
|
||||||
|
git_oid id1, id2;
|
||||||
|
|
||||||
|
must_pass(git_oid_mkstr(&id1, tag_id));
|
||||||
|
|
||||||
|
must_pass(git_obj_hash(&id2, &tag_obj));
|
||||||
|
|
||||||
|
must_be_true(git_oid_cmp(&id1, &id2) == 0);
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
BEGIN_TEST(hash_zero)
|
||||||
|
git_oid id1, id2;
|
||||||
|
|
||||||
|
must_pass(git_oid_mkstr(&id1, zero_id));
|
||||||
|
|
||||||
|
must_pass(git_obj_hash(&id2, &zero_obj));
|
||||||
|
|
||||||
|
must_be_true(git_oid_cmp(&id1, &id2) == 0);
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
BEGIN_TEST(hash_one)
|
||||||
|
git_oid id1, id2;
|
||||||
|
|
||||||
|
must_pass(git_oid_mkstr(&id1, one_id));
|
||||||
|
|
||||||
|
must_pass(git_obj_hash(&id2, &one_obj));
|
||||||
|
|
||||||
|
must_be_true(git_oid_cmp(&id1, &id2) == 0);
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
BEGIN_TEST(hash_two)
|
||||||
|
git_oid id1, id2;
|
||||||
|
|
||||||
|
must_pass(git_oid_mkstr(&id1, two_id));
|
||||||
|
|
||||||
|
must_pass(git_obj_hash(&id2, &two_obj));
|
||||||
|
|
||||||
|
must_be_true(git_oid_cmp(&id1, &id2) == 0);
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
BEGIN_TEST(hash_some)
|
||||||
|
git_oid id1, id2;
|
||||||
|
|
||||||
|
must_pass(git_oid_mkstr(&id1, some_id));
|
||||||
|
|
||||||
|
must_pass(git_obj_hash(&id2, &some_obj));
|
||||||
|
|
||||||
|
must_be_true(git_oid_cmp(&id1, &id2) == 0);
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user