Skip to content

Commit

Permalink
many cleanups to sha1_file.c
Browse files Browse the repository at this point in the history
Those cleanups are mainly to set the table for the support of deltas
with base objects referenced by offsets instead of sha1.  This means
that many pack lookup functions are converted to take a pack/offset
tuple instead of a sha1.

This eliminates many struct pack_entry usages since this structure
carried redundent information in many cases, and it increased stack
footprint needlessly for a couple recursively called functions that used
to declare a local copy of it for every recursion loop.

In the process, packed_object_info_detail() has been reorganized as well
so to look much saner and more amenable to deltas with offset support.

Finally the appropriate adjustments have been made to functions that
depend on the above changes.  But there is no functionality changes yet
simply some code refactoring at this point.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Nicolas Pitre authored and Junio C Hamano committed Sep 23, 2006
1 parent 1685457 commit 4305730
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 114 deletions.
8 changes: 4 additions & 4 deletions builtin-pack-objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -597,15 +597,15 @@ static int add_object_entry(const unsigned char *sha1, unsigned hash, int exclud

if (!exclude) {
for (p = packed_git; p; p = p->next) {
struct pack_entry e;
if (find_pack_entry_one(sha1, &e, p)) {
unsigned long offset = find_pack_entry_one(sha1, p);
if (offset) {
if (incremental)
return 0;
if (local && !p->pack_local)
return 0;
if (!found_pack) {
found_offset = e.offset;
found_pack = e.p;
found_offset = offset;
found_pack = p;
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -390,10 +390,10 @@ extern void unuse_packed_git(struct packed_git *);
extern struct packed_git *add_packed_git(char *, int, int);
extern int num_packed_objects(const struct packed_git *p);
extern int nth_packed_object_sha1(const struct packed_git *, int, unsigned char*);
extern int find_pack_entry_one(const unsigned char *, struct pack_entry *, struct packed_git *);
extern void *unpack_entry_gently(struct pack_entry *, char *, unsigned long *);
extern unsigned long find_pack_entry_one(const unsigned char *, struct packed_git *);
extern void *unpack_entry_gently(struct packed_git *, unsigned long, char *, unsigned long *);
extern unsigned long unpack_object_header_gently(const unsigned char *buf, unsigned long len, enum object_type *type, unsigned long *sizep);
extern void packed_object_info_detail(struct pack_entry *, char *, unsigned long *, unsigned long *, unsigned int *, unsigned char *);
extern void packed_object_info_detail(struct packed_git *, unsigned long, char *, unsigned long *, unsigned long *, unsigned int *, unsigned char *);

/* Dumb servers support */
extern int update_server_info(int);
Expand Down
19 changes: 10 additions & 9 deletions pack-check.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@ static int verify_packfile(struct packed_git *p)
*/
for (i = err = 0; i < nr_objects; i++) {
unsigned char sha1[20];
struct pack_entry e;
void *data;
char type[20];
unsigned long size;
unsigned long size, offset;

if (nth_packed_object_sha1(p, i, sha1))
die("internal error pack-check nth-packed-object");
if (!find_pack_entry_one(sha1, &e, p))
offset = find_pack_entry_one(sha1, p);
if (!offset)
die("internal error pack-check find-pack-entry-one");
data = unpack_entry_gently(&e, type, &size);
data = unpack_entry_gently(p, offset, type, &size);
if (!data) {
err = error("cannot unpack %s from %s",
sha1_to_hex(sha1), p->pack_name);
Expand Down Expand Up @@ -84,25 +84,26 @@ static void show_pack_info(struct packed_git *p)

for (i = 0; i < nr_objects; i++) {
unsigned char sha1[20], base_sha1[20];
struct pack_entry e;
char type[20];
unsigned long size;
unsigned long store_size;
unsigned long offset;
unsigned int delta_chain_length;

if (nth_packed_object_sha1(p, i, sha1))
die("internal error pack-check nth-packed-object");
if (!find_pack_entry_one(sha1, &e, p))
offset = find_pack_entry_one(sha1, p);
if (!offset)
die("internal error pack-check find-pack-entry-one");

packed_object_info_detail(&e, type, &size, &store_size,
packed_object_info_detail(p, offset, type, &size, &store_size,
&delta_chain_length,
base_sha1);
printf("%s ", sha1_to_hex(sha1));
if (!delta_chain_length)
printf("%-6s %lu %u\n", type, size, e.offset);
printf("%-6s %lu %lu\n", type, size, offset);
else {
printf("%-6s %lu %u %u %s\n", type, size, e.offset,
printf("%-6s %lu %lu %u %s\n", type, size, offset,
delta_chain_length, sha1_to_hex(base_sha1));
if (delta_chain_length < MAX_CHAIN)
chain_histogram[delta_chain_length]++;
Expand Down
Loading

0 comments on commit 4305730

Please sign in to comment.