Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Tue, 21 Oct 2008 20:47:22 +0000 (13:47 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 21 Oct 2008 20:47:22 +0000 (13:47 -0700)
* maint:
GIT 1.6.0.3
rehabilitate 'git index-pack' inside the object store

Documentation/RelNotes-1.6.0.3.txt
index-pack.c
t/t5302-pack-index.sh
index c0f037d6dbe4cfa98ea97a9b28d115e34ccfde75..ae0577836ae8b3ea73f8565acc42964d4144dd26 100644 (file)
@@ -27,9 +27,6 @@ Fixes since v1.6.0.2
 * "git diff" hunk header patterns with multiple elements separated by LF
   were not used correctly.
 
-* "git gc" when ejecting otherwise unreachable objects from packfiles into
-  loose form leaked memory.
-
 * Hunk headers in "git diff" default to using extended regular
   expressions, fixing some of the internal patterns on non-GNU
   platforms.
@@ -37,9 +34,15 @@ Fixes since v1.6.0.2
 * New config "diff.*.xfuncname" exposes extended regular expressions
   for user specified hunk header patterns.
 
+* "git gc" when ejecting otherwise unreachable objects from packfiles into
+  loose form leaked memory.
+
 * "git index-pack" was recently broken and mishandled objects added by
   thin-pack completion processing under memory pressure.
 
+* "git index-pack" was recently broken and misbehaved when run from inside
+  .git/objects/pack/ directory.
+
 * "git stash apply sash@{1}" was fixed to error out.  Prior versions
   would have applied stash@{0} incorrectly.
 
@@ -112,9 +115,3 @@ Fixes since v1.6.0.2
   ("git fetch") is still however supported.
 
 Many other documentation updates.
-
---
-exec >/var/tmp/1
-O=v1.6.0.2-110-gf07c3c5
-echo O=$(git describe maint)
-git shortlog --no-merges $O..maint
index aec11cb94066bc2d0fc75cad2b9f675c9d9bdb53..6f89bb9ac7f281434a9759956d8da23e6bc071db 100644 (file)
@@ -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];
index 6424db1f28e11c3ac6eb629ba4db7380812eab72..344ab25b8b6ddcd8b687a72e43b9e26aec18263e 100755 (executable)
@@ -177,4 +177,14 @@ test_expect_success \
        ".git/objects/pack/pack-${pack1}.pack" 2>&1) &&
      echo "$err" | grep "CRC mismatch"'
 
+test_expect_success 'running index-pack in the object store' '
+    rm -f .git/objects/pack/* &&
+    cp test-1-${pack1}.pack .git/objects/pack/pack-${pack1}.pack &&
+    (
+       cd .git/objects/pack
+       git index-pack pack-${pack1}.pack
+    ) &&
+    test -f .git/objects/pack/pack-${pack1}.idx
+'
+
 test_done