Skip to content

Commit c2f0823

Browse files
pks-tgitster
authored andcommitted
reftable/system: stop depending on "hash.h"
We include "hash.h" in "reftable/system.h" such that we can use hash format IDs as well as the raw size of SHA1 and SHA256. As we are in the process of converting the reftable library to become standalone we of course cannot rely on those constants anymore. Introduce a new `enum reftable_hash` to replace internal uses of the hash format IDs and new constants that replace internal uses of the hash size. Adapt the reftable backend to set up the correct hash function. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 88e2972 commit c2f0823

25 files changed

+166
-143
lines changed

refs/reftable-backend.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "../object.h"
1616
#include "../path.h"
1717
#include "../refs.h"
18+
#include "../reftable/reftable-basics.h"
1819
#include "../reftable/reftable-stack.h"
1920
#include "../reftable/reftable-record.h"
2021
#include "../reftable/reftable-error.h"
@@ -289,7 +290,16 @@ static struct ref_store *reftable_be_init(struct repository *repo,
289290
refs->store_flags = store_flags;
290291
refs->log_all_ref_updates = repo_settings_get_log_all_ref_updates(repo);
291292

292-
refs->write_options.hash_id = repo->hash_algo->format_id;
293+
switch (repo->hash_algo->format_id) {
294+
case GIT_SHA1_FORMAT_ID:
295+
refs->write_options.hash_id = REFTABLE_HASH_SHA1;
296+
break;
297+
case GIT_SHA256_FORMAT_ID:
298+
refs->write_options.hash_id = REFTABLE_HASH_SHA256;
299+
break;
300+
default:
301+
BUG("unknown hash algorithm %d", repo->hash_algo->format_id);
302+
}
293303
refs->write_options.default_permissions = calc_shared_perm(0666 & ~mask);
294304
refs->write_options.disable_auto_compact =
295305
!git_env_bool("GIT_TEST_REFTABLE_AUTOCOMPACTION", 1);

reftable/basics.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -271,14 +271,15 @@ int common_prefix_size(struct reftable_buf *a, struct reftable_buf *b)
271271
return p;
272272
}
273273

274-
int hash_size(uint32_t id)
274+
int hash_size(enum reftable_hash id)
275275
{
276+
if (!id)
277+
return REFTABLE_HASH_SIZE_SHA1;
276278
switch (id) {
277-
case 0:
278-
case GIT_SHA1_FORMAT_ID:
279-
return GIT_SHA1_RAWSZ;
280-
case GIT_SHA256_FORMAT_ID:
281-
return GIT_SHA256_RAWSZ;
279+
case REFTABLE_HASH_SHA1:
280+
return REFTABLE_HASH_SIZE_SHA1;
281+
case REFTABLE_HASH_SHA256:
282+
return REFTABLE_HASH_SIZE_SHA256;
282283
}
283284
abort();
284285
}

reftable/basics.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ char *reftable_strdup(const char *str);
148148
/* Find the longest shared prefix size of `a` and `b` */
149149
int common_prefix_size(struct reftable_buf *a, struct reftable_buf *b);
150150

151-
int hash_size(uint32_t id);
151+
int hash_size(enum reftable_hash id);
152152

153153
/*
154154
* Format IDs that identify the hash function used by a reftable. Note that

reftable/merged.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ static void iterator_from_merged_iter(struct reftable_iterator *it,
181181

182182
int reftable_merged_table_new(struct reftable_merged_table **dest,
183183
struct reftable_reader **readers, size_t n,
184-
uint32_t hash_id)
184+
enum reftable_hash hash_id)
185185
{
186186
struct reftable_merged_table *m = NULL;
187187
uint64_t last_max = 0;
@@ -293,7 +293,7 @@ int reftable_merged_table_init_log_iterator(struct reftable_merged_table *mt,
293293
return merged_table_init_iter(mt, it, BLOCK_TYPE_LOG);
294294
}
295295

296-
uint32_t reftable_merged_table_hash_id(struct reftable_merged_table *mt)
296+
enum reftable_hash reftable_merged_table_hash_id(struct reftable_merged_table *mt)
297297
{
298298
return mt->hash_id;
299299
}

reftable/merged.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ license that can be found in the LICENSE file or at
1010
#define MERGED_H
1111

1212
#include "system.h"
13+
#include "reftable-basics.h"
1314

1415
struct reftable_merged_table {
1516
struct reftable_reader **readers;
1617
size_t readers_len;
17-
uint32_t hash_id;
18+
enum reftable_hash hash_id;
1819

1920
/* If unset, produce deletions. This is useful for compaction. For the
2021
* full stack, deletions should be produced. */

reftable/reader.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ static int reader_get_block(struct reftable_reader *r,
6767
return block_source_read_block(&r->source, dest, off, sz);
6868
}
6969

70-
uint32_t reftable_reader_hash_id(struct reftable_reader *r)
70+
enum reftable_hash reftable_reader_hash_id(struct reftable_reader *r)
7171
{
7272
return r->hash_id;
7373
}
@@ -107,14 +107,14 @@ static int parse_footer(struct reftable_reader *r, uint8_t *footer,
107107
f += 8;
108108

109109
if (r->version == 1) {
110-
r->hash_id = GIT_SHA1_FORMAT_ID;
110+
r->hash_id = REFTABLE_HASH_SHA1;
111111
} else {
112112
switch (get_be32(f)) {
113113
case REFTABLE_FORMAT_ID_SHA1:
114-
r->hash_id = GIT_SHA1_FORMAT_ID;
114+
r->hash_id = REFTABLE_HASH_SHA1;
115115
break;
116116
case REFTABLE_FORMAT_ID_SHA256:
117-
r->hash_id = GIT_SHA256_FORMAT_ID;
117+
r->hash_id = REFTABLE_HASH_SHA256;
118118
break;
119119
default:
120120
err = REFTABLE_FORMAT_ERROR;

reftable/reader.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ struct reftable_reader {
3737
/* Size of the file, excluding the footer. */
3838
uint64_t size;
3939

40-
/* 'sha1' for SHA1, 's256' for SHA-256 */
41-
uint32_t hash_id;
40+
/* The hash function used for ref records. */
41+
enum reftable_hash hash_id;
4242

4343
uint32_t block_size;
4444
uint64_t min_update_index;

reftable/reftable-basics.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,19 @@
1111

1212
#include <stddef.h>
1313

14+
/*
15+
* Hash functions understood by the reftable library. Note that the values are
16+
* arbitrary and somewhat random such that we can easily detect cases where the
17+
* hash hasn't been properly set up.
18+
*/
19+
enum reftable_hash {
20+
REFTABLE_HASH_SHA1 = 89,
21+
REFTABLE_HASH_SHA256 = 247,
22+
};
23+
#define REFTABLE_HASH_SIZE_SHA1 20
24+
#define REFTABLE_HASH_SIZE_SHA256 32
25+
#define REFTABLE_HASH_SIZE_MAX REFTABLE_HASH_SIZE_SHA256
26+
1427
/* Overrides the functions to use for memory management. */
1528
void reftable_set_alloc(void *(*malloc)(size_t),
1629
void *(*realloc)(void *, size_t), void (*free)(void *));

reftable/reftable-merged.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct reftable_reader;
3434
*/
3535
int reftable_merged_table_new(struct reftable_merged_table **dest,
3636
struct reftable_reader **readers, size_t n,
37-
uint32_t hash_id);
37+
enum reftable_hash hash_id);
3838

3939
/* Initialize a merged table iterator for reading refs. */
4040
int reftable_merged_table_init_ref_iterator(struct reftable_merged_table *mt,
@@ -56,6 +56,6 @@ reftable_merged_table_min_update_index(struct reftable_merged_table *mt);
5656
void reftable_merged_table_free(struct reftable_merged_table *m);
5757

5858
/* return the hash ID of the merged table. */
59-
uint32_t reftable_merged_table_hash_id(struct reftable_merged_table *m);
59+
enum reftable_hash reftable_merged_table_hash_id(struct reftable_merged_table *m);
6060

6161
#endif

reftable/reftable-reader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ int reftable_reader_init_log_iterator(struct reftable_reader *r,
5454
struct reftable_iterator *it);
5555

5656
/* returns the hash ID used in this table. */
57-
uint32_t reftable_reader_hash_id(struct reftable_reader *r);
57+
enum reftable_hash reftable_reader_hash_id(struct reftable_reader *r);
5858

5959
/* return an iterator for the refs pointing to `oid`. */
6060
int reftable_reader_refs_for(struct reftable_reader *r,

0 commit comments

Comments
 (0)