]>
git.proxmox.com Git - libgit2.git/blob - tests/odb/freshen.c
1 #include "clar_libgit2.h"
5 static git_repository
*repo
;
8 void test_odb_freshen__initialize(void)
10 repo
= cl_git_sandbox_init("testrepo.git");
11 cl_git_pass(git_repository_odb(&odb
, repo
));
14 void test_odb_freshen__cleanup(void)
17 cl_git_sandbox_cleanup();
20 #define LOOSE_STR "hey\n"
21 #define LOOSE_ID "1385f264afb75a56a5bec74243be9b367ba4ca08"
22 #define LOOSE_FN "13/85f264afb75a56a5bec74243be9b367ba4ca08"
24 void test_odb_freshen__loose_object(void)
26 git_oid expected_id
, id
;
27 struct stat before
, after
;
28 struct p_timeval old_times
[2];
30 cl_git_pass(git_oid_fromstr(&expected_id
, LOOSE_ID
));
32 old_times
[0].tv_sec
= 1234567890;
33 old_times
[0].tv_usec
= 0;
34 old_times
[1].tv_sec
= 1234567890;
35 old_times
[1].tv_usec
= 0;
37 /* set time to way back */
38 cl_must_pass(p_utimes("testrepo.git/objects/" LOOSE_FN
, old_times
));
39 cl_must_pass(p_lstat("testrepo.git/objects/" LOOSE_FN
, &before
));
41 cl_git_pass(git_odb_write(&id
, odb
, LOOSE_STR
, CONST_STRLEN(LOOSE_STR
),
43 cl_assert_equal_oid(&expected_id
, &id
);
44 cl_must_pass(p_lstat("testrepo.git/objects/" LOOSE_FN
, &after
));
46 cl_assert(before
.st_atime
< after
.st_atime
);
47 cl_assert(before
.st_mtime
< after
.st_mtime
);
50 #define PACKED_STR "Testing a readme.txt\n"
51 #define PACKED_ID "6336846bd5c88d32f93ae57d846683e61ab5c530"
52 #define PACKED_FN "pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack"
54 void test_odb_freshen__packed_object(void)
56 git_oid expected_id
, id
;
57 struct stat before
, after
;
58 struct p_timeval old_times
[2];
60 cl_git_pass(git_oid_fromstr(&expected_id
, PACKED_ID
));
62 old_times
[0].tv_sec
= 1234567890;
63 old_times
[0].tv_usec
= 0;
64 old_times
[1].tv_sec
= 1234567890;
65 old_times
[1].tv_usec
= 0;
67 /* set time to way back */
68 cl_must_pass(p_utimes("testrepo.git/objects/pack/" PACKED_FN
, old_times
));
69 cl_must_pass(p_lstat("testrepo.git/objects/pack/" PACKED_FN
, &before
));
71 /* ensure that packfile is freshened */
72 cl_git_pass(git_odb_write(&id
, odb
, PACKED_STR
,
73 CONST_STRLEN(PACKED_STR
), GIT_OBJ_BLOB
));
74 cl_assert_equal_oid(&expected_id
, &id
);
75 cl_must_pass(p_lstat("testrepo.git/objects/pack/" PACKED_FN
, &after
));
77 cl_assert(before
.st_atime
< after
.st_atime
);
78 cl_assert(before
.st_mtime
< after
.st_mtime
);
80 memcpy(&before
, &after
, sizeof(struct stat
));
82 /* ensure that the pack file is not freshened again immediately */
83 cl_git_pass(git_odb_write(&id
, odb
, PACKED_STR
,
84 CONST_STRLEN(PACKED_STR
), GIT_OBJ_BLOB
));
85 cl_assert_equal_oid(&expected_id
, &id
);
86 cl_must_pass(p_lstat("testrepo.git/objects/pack/" PACKED_FN
, &after
));
88 cl_assert(before
.st_atime
== after
.st_atime
);
89 cl_assert(before
.st_atime_nsec
== after
.st_atime_nsec
);
90 cl_assert(before
.st_mtime
== after
.st_mtime
);
91 cl_assert(before
.st_mtime_nsec
== after
.st_mtime_nsec
);