{"thread":{"id":"218","subject":"[PATCH 11/19] migrate write-tree.c to use the new cache api's","startedAt":"2005-04-21T18:37:19Z","lastAt":"2005-04-21T18:37:19Z","messageCount":1,"participants":["Brad Roberts"],"isPatch":true,"patchVersion":1,"patchTotal":19},"messages":[{"id":"1167","messageId":"200504211837.j3LIbJtH027642@gameboy2.puremagic.com","threadId":"218","inReplyTo":null,"subject":"[PATCH 11/19] migrate write-tree.c to use the new cache api's","fromName":"Brad Roberts","fromEmail":"braddr@gameboy2.puremagic.com","sentAt":"2005-04-21T18:37:19Z","receivedAt":"2005-04-21T18:37:19Z","isPatch":true,"sender":{"key":"braddr@gameboy2.puremagic.com","avatar":null},"body":"tree 3a2928786f84d81cfb1a5846cdaf9f3d5403cbcf\nparent a94803645fb68119be8835d466585c91e664a173\nauthor Brad Roberts <braddr@puremagic.com> 1114077713 -0700\ncommitter Brad Roberts <braddr@gameboy2.puremagic.com> 1114077713 -0700\n\n[PATCH] migrate write-tree.c to use the new cache api's\n\nAlong the way, altered the write_tree recursion to stay based off of a starting\nposition rather than moving the array pointer for each recurse step.\n\nSigned-off-by: Brad Roberts <braddr@puremagic.com>\n---\n\n write-tree.c |   18 +++++++++---------\n 1 files changed, 9 insertions(+), 9 deletions(-)\n\nIndex: write-tree.c\n===================================================================\n--- a94803645fb68119be8835d466585c91e664a173:1/write-tree.c  (mode:100644 sha1:827809dbddbff6dd8cf842641f6db5ad2f3ae07a)\n+++ 8a4556bdf5bc847117c840a8fd7fa42f6efb16e1:1/write-tree.c  (mode:100644 sha1:f1b12cdde1bb446a134a121760007150008b251a)\n@@ -29,7 +29,7 @@\n \n #define ORIG_OFFSET (40)\t/* Enough space to add the header of \"tree <size>\\0\" */\n \n-static int write_tree(struct cache_entry **cachep, int maxentries, const char *base, int baselen, unsigned char *returnsha1)\n+static int write_tree(int start_pos, const char *base, int baselen, unsigned char *returnsha1)\n {\n \tunsigned char subdir_sha1[20];\n \tunsigned long size, offset;\n@@ -43,7 +43,7 @@\n \n \tnr = 0;\n \tdo {\n-\t\tstruct cache_entry *ce = cachep[nr];\n+\t\tstruct cache_entry *ce = get_cache_entry(start_pos + nr);\n \t\tconst char *pathname = ce->name, *filename, *dirname;\n \t\tint pathlen = ce_namelen(ce), entrylen;\n \t\tunsigned char *sha1;\n@@ -53,16 +53,13 @@\n \t\tif (baselen >= pathlen || memcmp(base, pathname, baselen))\n \t\t\tbreak;\n \n-\t\tsha1 = ce->sha1;\n-\t\tmode = ntohl(ce->ce_mode);\n-\n \t\t/* Do we have _further_ subdirectories? */\n \t\tfilename = pathname + baselen;\n \t\tdirname = strchr(filename, '/');\n \t\tif (dirname) {\n \t\t\tint subdir_written;\n \n-\t\t\tsubdir_written = write_tree(cachep + nr, maxentries - nr, pathname, dirname-pathname+1, subdir_sha1);\n+\t\t\tsubdir_written = write_tree(start_pos + nr, pathname, dirname-pathname+1, subdir_sha1);\n \t\t\tnr += subdir_written;\n \n \t\t\t/* Now we need to write out the directory entry into this tree.. */\n@@ -72,6 +69,9 @@\n \t\t\t/* ..but the directory entry doesn't count towards the total count */\n \t\t\tnr--;\n \t\t\tsha1 = subdir_sha1;\n+\t\t} else {\n+\t\t\tsha1 = ce->sha1;\n+\t\t\tmode = ntohl(ce->ce_mode);\n \t\t}\n \n \t\tif (check_valid_sha1(sha1) < 0)\n@@ -87,7 +87,7 @@\n \t\tmemcpy(buffer + offset, sha1, 20);\n \t\toffset += 20;\n \t\tnr++;\n-\t} while (nr < maxentries);\n+\t} while ((start_pos + nr) < get_num_cache_entries());\n \n \ti = prepend_integer(buffer, offset - ORIG_OFFSET, ORIG_OFFSET);\n \ti -= 5;\n@@ -110,7 +110,7 @@\n \t/* Verify that the tree is merged */\n \tunmerged = 0;\n \tfor (i = 0; i < entries; i++) {\n-\t\tstruct cache_entry *ce = active_cache[i];\n+\t\tstruct cache_entry *ce = get_cache_entry(i);\n \t\tif (ntohs(ce->ce_flags) & ~CE_NAMEMASK) {\n \t\t\tif (++unmerged > 10) {\n \t\t\t\tfprintf(stderr, \"...\\n\");\n@@ -123,7 +123,7 @@\n \t\tdie(\"write-tree: not able to write tree\");\n \n \t/* Ok, write it out */\n-\tif (write_tree(active_cache, entries, \"\", 0, sha1) != entries)\n+\tif (write_tree(0, \"\", 0, sha1) != entries)\n \t\tdie(\"write-tree: internal error\");\n \tprintf(\"%s\\n\", sha1_to_hex(sha1));\n \treturn 0;\n\n"}]}