{"thread":{"id":"1171","subject":"[PATCH] 2/7 Prepare for the next two patches","startedAt":"2005-07-08T10:54:14Z","lastAt":"2005-07-08T10:54:14Z","messageCount":1,"participants":["Bryan Larsen"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"5821","messageId":"42CE5B56.5090602@gmail.com","threadId":"1171","inReplyTo":null,"subject":"[PATCH] 2/7 Prepare for the next two patches","fromName":"Bryan Larsen","fromEmail":"bryan.larsen@gmail.com","sentAt":"2005-07-08T10:54:14Z","receivedAt":"2005-07-08T10:54:14Z","isPatch":true,"sender":{"key":"bryan@larsen.st","avatar":"https://avatars.githubusercontent.com/u/32073?v=4"},"body":"\n\nPrepare for the next two patches.  This patch makes the first half of\nwrite_sha1_file() and index_fd() externally visible.  The first half of\nthese two functions is basically just an SHA1 calculation, so there is\nprobably a better way to do this.  However, doing things this way makes\nthis patch and the subsequent patches minimally intrusive.\n\nSigned-off-by: Bryan Larsen <bryan.larsen@gmail.com>\n---\n\n  cache.h        |    3 ++-\n  sha1_file.c    |   13 +++++++++----\n  update-cache.c |    2 +-\n  write-blob.c   |    2 +-\n  4 files changed, 13 insertions(+), 7 deletions(-)\n\ndiff --git a/cache.h b/cache.h\n--- a/cache.h\n+++ b/cache.h\n@@ -139,7 +139,7 @@ extern int remove_cache_entry_at(int pos\n  extern int remove_file_from_cache(char *path);\n  extern int ce_same_name(struct cache_entry *a, struct cache_entry *b);\n  extern int ce_match_stat(struct cache_entry *ce, struct stat *st);\n-extern int index_fd(unsigned char *sha1, int fd, struct stat *st);\n+extern int index_fd(unsigned char *sha1, int fd, struct stat *st, int \ninfo_only);\n  extern void fill_stat_cache_info(struct cache_entry *ce, struct stat *st);\n\n  struct cache_file {\n@@ -169,6 +169,7 @@ extern int sha1_object_info(const unsign\n  extern void * unpack_sha1_file(void *map, unsigned long mapsize, char \n*type, unsigned long *size);\n  extern void * read_sha1_file(const unsigned char *sha1, char *type, \nunsigned long *size);\n  extern int write_sha1_file(void *buf, unsigned long len, const char \n*type, unsigned char *return_sha1);\n+extern char *write_sha1_file_prepare(void *buf, unsigned long len, \nconst char *type, unsigned char *sha1, unsigned char *hdr, int *hdrlen);\n\n  extern int check_sha1_signature(const unsigned char *sha1, void *buf, \nunsigned long size, const char *type);\n\ndiff --git a/sha1_file.c b/sha1_file.c\n--- a/sha1_file.c\n+++ b/sha1_file.c\n@@ -1084,7 +1084,7 @@ void *read_object_with_reference(const u\n  \t}\n  }\n\n-static char *write_sha1_file_prepare(void *buf,\n+char *write_sha1_file_prepare(void *buf,\n  \t\t\t\t     unsigned long len,\n  \t\t\t\t     const char *type,\n  \t\t\t\t     unsigned char *sha1,\n@@ -1283,12 +1283,14 @@ int has_sha1_file(const unsigned char *s\n  \treturn find_pack_entry(sha1, &e);\n  }\n\n-int index_fd(unsigned char *sha1, int fd, struct stat *st)\n+int index_fd(unsigned char *sha1, int fd, struct stat *st, int info_only)\n  {\n  \tunsigned long size = st->st_size;\n  \tvoid *buf;\n  \tint ret;\n-\n+\tunsigned char hdr[50];\n+\tint hdrlen;\n+\t\n  \tbuf = \"\";\n  \tif (size)\n  \t\tbuf = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);\n@@ -1296,7 +1298,10 @@ int index_fd(unsigned char *sha1, int fd\n  \tif ((int)(long)buf == -1)\n  \t\treturn -1;\n\n-\tret = write_sha1_file(buf, size, \"blob\", sha1);\n+\tif (info_only) {\n+\t\t(void) write_sha1_file_prepare(buf, size, \"blob\", sha1, hdr, &hdrlen);\n+\t\tret = 0;\n+\t} else ret = write_sha1_file(buf, size, \"blob\", sha1);\n  \tif (size)\n  \t\tmunmap(buf, size);\n  \treturn ret;\ndiff --git a/update-cache.c b/update-cache.c\n--- a/update-cache.c\n+++ b/update-cache.c\n@@ -68,7 +68,7 @@ static int add_file_to_cache(char *path)\n  \t\tfd = open(path, O_RDONLY);\n  \t\tif (fd < 0)\n  \t\t\treturn -1;\n-\t\tif (index_fd(ce->sha1, fd, &st) < 0)\n+\t\tif (index_fd(ce->sha1, fd, &st, 0) < 0)\n  \t\t\treturn -1;\n  \t\tbreak;\n  \tcase S_IFLNK:\ndiff --git a/write-blob.c b/write-blob.c\n--- a/write-blob.c\n+++ b/write-blob.c\n@@ -17,7 +17,7 @@ int main(int argc, char **argv)\n  \t\tfd = open(path, O_RDONLY);\n  \t\tif (fd < 0 ||\n  \t\t    fstat(fd, &st) < 0 ||\n-\t\t    index_fd(sha1, fd, &st) < 0)\n+\t\t    index_fd(sha1, fd, &st, 0) < 0)\n  \t\t\tdie(\"Unable to add blob %s to database\", path);\n  \t\tprintf(\"%s\\n\", sha1_to_hex(sha1));\n  \t}\n\n\n\f\n"}]}