diff options
author | Linus Torvalds <torvalds@osdl.org> | 2005-10-13 15:38:28 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-10-13 15:38:28 -0700 |
commit | 9d835df246e81a6a03e3f633280c45e683e4c673 (patch) | |
tree | a878e0f1ab86c47489300b4ae23bc6f8736faddb | |
parent | git-am: do not fail if 3-way fallback succeeds. (diff) | |
download | tgif-9d835df246e81a6a03e3f633280c45e683e4c673.tar.xz |
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 <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | cache.h | 3 | ||||
-rw-r--r-- | sha1_file.c | 11 | ||||
-rw-r--r-- | verify-pack.c | 4 |
3 files changed, 10 insertions, 8 deletions
@@ -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 f059004909..e45679975e 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 80b60a6b7c..c99db9dd79 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); } |