Skip to content

Commit

Permalink
[PATCH] Skip writing out sha1 files for objects in packed git.
Browse files Browse the repository at this point in the history
Now, there's still a misfeature there, which is that when you
create a new object, it doesn't check whether that object
already exists in the pack-file, so you'll end up with a few
recent objects that you really don't need (notably tree
objects), and this patch fixes it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Junio C Hamano authored and Linus Torvalds committed Jun 28, 2005
1 parent cebe403 commit d410c0f
Showing 1 changed file with 27 additions and 12 deletions.
39 changes: 27 additions & 12 deletions sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -891,31 +891,46 @@ void *read_object_with_reference(const unsigned char *sha1,
}
}

static char *write_sha1_file_prepare(void *buf,
unsigned long len,
const char *type,
unsigned char *sha1,
unsigned char *hdr,
int *hdrlen)
{
SHA_CTX c;

/* Generate the header */
*hdrlen = sprintf((char *)hdr, "%s %lu", type, len)+1;

/* Sha1.. */
SHA1_Init(&c);
SHA1_Update(&c, hdr, *hdrlen);
SHA1_Update(&c, buf, len);
SHA1_Final(sha1, &c);

return sha1_file_name(sha1);
}

int write_sha1_file(void *buf, unsigned long len, const char *type, unsigned char *returnsha1)
{
int size;
unsigned char *compressed;
z_stream stream;
unsigned char sha1[20];
SHA_CTX c;
char *filename;
static char tmpfile[PATH_MAX];
unsigned char hdr[50];
int fd, hdrlen, ret;

/* Generate the header */
hdrlen = sprintf((char *)hdr, "%s %lu", type, len)+1;

/* Sha1.. */
SHA1_Init(&c);
SHA1_Update(&c, hdr, hdrlen);
SHA1_Update(&c, buf, len);
SHA1_Final(sha1, &c);

/* Normally if we have it in the pack then we do not bother writing
* it out into .git/objects/??/?{38} file.
*/
filename = write_sha1_file_prepare(buf, len, type, sha1, hdr, &hdrlen);
if (returnsha1)
memcpy(returnsha1, sha1, 20);

filename = sha1_file_name(sha1);
if (has_sha1_file(sha1))
return 0;
fd = open(filename, O_RDONLY);
if (fd >= 0) {
/*
Expand Down

0 comments on commit d410c0f

Please sign in to comment.