pack-objects: factor out name_hash
As the pack-objects system grows beyond the single pack-objects.c file, more parts (like the soon-to-exist bitmap code) will need to compute hashes for matching deltas. Factor out name_hash to make it available to other files. Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2834bc27c1
commit
68fb36eb92
@ -778,26 +778,6 @@ static void write_pack_file(void)
|
||||
written, nr_result);
|
||||
}
|
||||
|
||||
static uint32_t name_hash(const char *name)
|
||||
{
|
||||
uint32_t c, hash = 0;
|
||||
|
||||
if (!name)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* This effectively just creates a sortable number from the
|
||||
* last sixteen non-whitespace characters. Last characters
|
||||
* count "most", so things that end in ".c" sort together.
|
||||
*/
|
||||
while ((c = *name++) != 0) {
|
||||
if (isspace(c))
|
||||
continue;
|
||||
hash = (hash >> 2) + (c << 24);
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
static void setup_delta_attr_check(struct git_attr_check *check)
|
||||
{
|
||||
static struct git_attr *attr_delta;
|
||||
@ -826,7 +806,7 @@ static int add_object_entry(const unsigned char *sha1, enum object_type type,
|
||||
struct object_entry *entry;
|
||||
struct packed_git *p, *found_pack = NULL;
|
||||
off_t found_offset = 0;
|
||||
uint32_t hash = name_hash(name);
|
||||
uint32_t hash = pack_name_hash(name);
|
||||
uint32_t index_pos;
|
||||
|
||||
entry = packlist_find(&to_pack, sha1, &index_pos);
|
||||
@ -1082,7 +1062,7 @@ static void add_preferred_base_object(const char *name)
|
||||
{
|
||||
struct pbase_tree *it;
|
||||
int cmplen;
|
||||
unsigned hash = name_hash(name);
|
||||
unsigned hash = pack_name_hash(name);
|
||||
|
||||
if (!num_preferred_base || check_pbase_path(hash))
|
||||
return;
|
||||
|
@ -44,4 +44,24 @@ struct object_entry *packlist_find(struct packing_data *pdata,
|
||||
const unsigned char *sha1,
|
||||
uint32_t *index_pos);
|
||||
|
||||
static inline uint32_t pack_name_hash(const char *name)
|
||||
{
|
||||
uint32_t c, hash = 0;
|
||||
|
||||
if (!name)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* This effectively just creates a sortable number from the
|
||||
* last sixteen non-whitespace characters. Last characters
|
||||
* count "most", so things that end in ".c" sort together.
|
||||
*/
|
||||
while ((c = *name++) != 0) {
|
||||
if (isspace(c))
|
||||
continue;
|
||||
hash = (hash >> 2) + (c << 24);
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user