From: Linus Torvalds Date: Thu, 13 Oct 2005 22:38:28 +0000 (-0700) Subject: Keep track of whether a pack is local or not X-Git-Tag: v0.99.9~133 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=9d835df246e81a6a03e3f633280c45e683e4c673;p=git.git Keep track of whether a pack is local or not If we want to re-pack just local packfiles, we need to know whether a particular object is local or not. Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano --- diff --git a/cache.h b/cache.h index 1a7e047d..32865823 100644 --- a/cache.h +++ b/cache.h @@ -313,6 +313,7 @@ extern struct packed_git { void *pack_base; unsigned int pack_last_used; unsigned int pack_use_cnt; + int pack_local; unsigned char sha1[20]; char pack_name[0]; /* something like ".git/objects/pack/xxxxx.pack" */ } *packed_git; @@ -352,7 +353,7 @@ extern struct packed_git *find_sha1_pack(const unsigned char *sha1, extern int use_packed_git(struct packed_git *); extern void unuse_packed_git(struct packed_git *); -extern struct packed_git *add_packed_git(char *, int); +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 *); diff --git a/sha1_file.c b/sha1_file.c index f0590049..e4567997 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -416,7 +416,7 @@ int use_packed_git(struct packed_git *p) return 0; } -struct packed_git *add_packed_git(char *path, int path_len) +struct packed_git *add_packed_git(char *path, int path_len, int local) { struct stat st; struct packed_git *p; @@ -444,6 +444,7 @@ struct packed_git *add_packed_git(char *path, int path_len) p->pack_base = NULL; p->pack_last_used = 0; p->pack_use_cnt = 0; + p->pack_local = local; return p; } @@ -484,7 +485,7 @@ void install_packed_git(struct packed_git *pack) packed_git = pack; } -static void prepare_packed_git_one(char *objdir) +static void prepare_packed_git_one(char *objdir, int local) { char path[PATH_MAX]; int len; @@ -506,7 +507,7 @@ static void prepare_packed_git_one(char *objdir) /* we have .idx. Is it a file we can map? */ strcpy(path + len, de->d_name); - p = add_packed_git(path, len + namelen); + p = add_packed_git(path, len + namelen, local); if (!p) continue; p->next = packed_git; @@ -522,11 +523,11 @@ void prepare_packed_git(void) if (run_once) return; - prepare_packed_git_one(get_object_directory()); + prepare_packed_git_one(get_object_directory(), 1); prepare_alt_odb(); for (alt = alt_odb_list; alt; alt = alt->next) { alt->name[0] = 0; - prepare_packed_git_one(alt->base); + prepare_packed_git_one(alt->base, 0); } run_once = 1; } diff --git a/verify-pack.c b/verify-pack.c index 80b60a6b..c99db9dd 100644 --- a/verify-pack.c +++ b/verify-pack.c @@ -15,12 +15,12 @@ static int verify_one_pack(char *arg, int verbose) len--; } /* Should name foo.idx now */ - if ((g = add_packed_git(arg, len))) + if ((g = add_packed_git(arg, len, 1))) break; /* No? did you name just foo? */ strcpy(arg + len, ".idx"); len += 4; - if ((g = add_packed_git(arg, len))) + if ((g = add_packed_git(arg, len, 1))) break; return error("packfile %s not found.", arg); }