{"thread":{"id":"2097","subject":"[PATCH 1/3] Keep track of whether a pack is local or not","startedAt":"2005-10-13T21:26:36Z","lastAt":"2005-10-13T21:26:36Z","messageCount":1,"participants":["Linus Torvalds"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"10082","messageId":"Pine.LNX.4.64.0510131426180.23590@g5.osdl.org","threadId":"2097","inReplyTo":null,"subject":"[PATCH 1/3] Keep track of whether a pack is local or not","fromName":"Linus Torvalds","fromEmail":"torvalds@osdl.org","sentAt":"2005-10-13T21:26:36Z","receivedAt":"2005-10-13T21:26:36Z","isPatch":true,"sender":{"key":"torvalds@linux-foundation.org","avatar":"https://avatars.githubusercontent.com/u/1024025?v=4"},"body":"\nIf we want to re-pack just local packfiles, we need to know whether a\nparticular object is local or not.\n\nSigned-off-by: Linus Torvalds <torvalds@osdl.org>\n---\ndiff --git a/cache.h b/cache.h\nindex 1a7e047..3286582 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -313,6 +313,7 @@ extern struct packed_git {\n \tvoid *pack_base;\n \tunsigned int pack_last_used;\n \tunsigned int pack_use_cnt;\n+\tint pack_local;\n \tunsigned char sha1[20];\n \tchar pack_name[0]; /* something like \".git/objects/pack/xxxxx.pack\" */\n } *packed_git;\n@@ -352,7 +353,7 @@ extern struct packed_git *find_sha1_pack\n \n extern int use_packed_git(struct packed_git *);\n extern void unuse_packed_git(struct packed_git *);\n-extern struct packed_git *add_packed_git(char *, int);\n+extern struct packed_git *add_packed_git(char *, int, int);\n extern int num_packed_objects(const struct packed_git *p);\n extern int nth_packed_object_sha1(const struct packed_git *, int, unsigned char*);\n extern int find_pack_entry_one(const unsigned char *, struct pack_entry *, struct packed_git *);\ndiff --git a/sha1_file.c b/sha1_file.c\nindex f059004..e456799 100644\n--- a/sha1_file.c\n+++ b/sha1_file.c\n@@ -416,7 +416,7 @@ int use_packed_git(struct packed_git *p)\n \treturn 0;\n }\n \n-struct packed_git *add_packed_git(char *path, int path_len)\n+struct packed_git *add_packed_git(char *path, int path_len, int local)\n {\n \tstruct stat st;\n \tstruct packed_git *p;\n@@ -444,6 +444,7 @@ struct packed_git *add_packed_git(char *\n \tp->pack_base = NULL;\n \tp->pack_last_used = 0;\n \tp->pack_use_cnt = 0;\n+\tp->pack_local = local;\n \treturn p;\n }\n \n@@ -484,7 +485,7 @@ void install_packed_git(struct packed_gi\n \tpacked_git = pack;\n }\n \n-static void prepare_packed_git_one(char *objdir)\n+static void prepare_packed_git_one(char *objdir, int local)\n {\n \tchar path[PATH_MAX];\n \tint len;\n@@ -506,7 +507,7 @@ static void prepare_packed_git_one(char \n \n \t\t/* we have .idx.  Is it a file we can map? */\n \t\tstrcpy(path + len, de->d_name);\n-\t\tp = add_packed_git(path, len + namelen);\n+\t\tp = add_packed_git(path, len + namelen, local);\n \t\tif (!p)\n \t\t\tcontinue;\n \t\tp->next = packed_git;\n@@ -522,11 +523,11 @@ void prepare_packed_git(void)\n \n \tif (run_once)\n \t\treturn;\n-\tprepare_packed_git_one(get_object_directory());\n+\tprepare_packed_git_one(get_object_directory(), 1);\n \tprepare_alt_odb();\n \tfor (alt = alt_odb_list; alt; alt = alt->next) {\n \t\talt->name[0] = 0;\n-\t\tprepare_packed_git_one(alt->base);\n+\t\tprepare_packed_git_one(alt->base, 0);\n \t}\n \trun_once = 1;\n }\ndiff --git a/verify-pack.c b/verify-pack.c\nindex 80b60a6..c99db9d 100644\n--- a/verify-pack.c\n+++ b/verify-pack.c\n@@ -15,12 +15,12 @@ static int verify_one_pack(char *arg, in\n \t\t\tlen--;\n \t\t}\n \t\t/* Should name foo.idx now */\n-\t\tif ((g = add_packed_git(arg, len)))\n+\t\tif ((g = add_packed_git(arg, len, 1)))\n \t\t\tbreak;\n \t\t/* No?  did you name just foo? */\n \t\tstrcpy(arg + len, \".idx\");\n \t\tlen += 4;\n-\t\tif ((g = add_packed_git(arg, len)))\n+\t\tif ((g = add_packed_git(arg, len, 1)))\n \t\t\tbreak;\n \t\treturn error(\"packfile %s not found.\", arg);\n \t}\n"}]}