summaryrefslogtreecommitdiff
path: root/index-pack.c
diff options
context:
space:
mode:
authorNicolas Pitre <nico@cam.org>2008-10-21 01:17:07 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-10-21 20:20:03 (GMT)
commita672ea6ac5a1b876bc7adfe6534b16fa2a32c94b (patch)
tree703c03d42003536eab5db4b6e81647ceb86b13d8 /index-pack.c
parent5610e3b0315d652d6b8e6535afe0e7e461c8a0a0 (diff)
downloadgit-a672ea6ac5a1b876bc7adfe6534b16fa2a32c94b.zip
git-a672ea6ac5a1b876bc7adfe6534b16fa2a32c94b.tar.gz
git-a672ea6ac5a1b876bc7adfe6534b16fa2a32c94b.tar.bz2
rehabilitate 'git index-pack' inside the object store
Before commit d0b92a3f6e it was possible to run 'git index-pack' directly in the .git/objects/pack/ directory. Restore that ability. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'index-pack.c')
-rw-r--r--index-pack.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/index-pack.c b/index-pack.c
index 2a36620..c99a1a1 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -879,10 +879,26 @@ int main(int argc, char **argv)
char *index_name_buf = NULL, *keep_name_buf = NULL;
struct pack_idx_entry **idx_objects;
unsigned char pack_sha1[20];
- int nongit = 0;
- setup_git_directory_gently(&nongit);
- git_config(git_index_pack_config, NULL);
+ /*
+ * We wish to read the repository's config file if any, and
+ * for that it is necessary to call setup_git_directory_gently().
+ * However if the cwd was inside .git/objects/pack/ then we need
+ * to go back there or all the pack name arguments will be wrong.
+ * And in that case we cannot rely on any prefix returned by
+ * setup_git_directory_gently() either.
+ */
+ {
+ char cwd[PATH_MAX+1];
+ int nongit;
+
+ if (!getcwd(cwd, sizeof(cwd)-1))
+ die("Unable to get current working directory");
+ setup_git_directory_gently(&nongit);
+ git_config(git_index_pack_config, NULL);
+ if (chdir(cwd))
+ die("Cannot come back to cwd");
+ }
for (i = 1; i < argc; i++) {
char *arg = argv[i];