summaryrefslogtreecommitdiff
path: root/index-pack.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-10-21 13:47:22 -0700
committerJunio C Hamano <gitster@pobox.com>2008-10-21 13:47:22 -0700
commit20341dd970b331fd721225ca630548ec1e90d8a5 (patch)
tree3f91b069a9dbea638dd751599eed75b1bec926b1 /index-pack.c
parent208f689610e524ce9858f9d28635f7fea51b8d96 (diff)
parent031e6c898f61db1ae0c0be641eac6532c1000d56 (diff)
downloadgit-20341dd970b331fd721225ca630548ec1e90d8a5.tar.gz
Merge branch 'maint'
* maint: GIT 1.6.0.3 rehabilitate 'git index-pack' inside the object store
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 aec11cb940..6f89bb9ac7 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -880,10 +880,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];