Code

make the pack index version configurable
authorNicolas Pitre <nico@cam.org>
Fri, 2 Nov 2007 03:26:04 +0000 (23:26 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 2 Nov 2007 08:32:02 +0000 (01:32 -0700)
It is a good idea to use pack index version 2 all the time since it has
proper protection against propagation of certain pack corruptions when
repacking which is not possible with index version 1, as demonstrated
in test t5302.

Hence this config option.

The default is still pack index version 1.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config.txt
builtin-pack-objects.c
index-pack.c

index edf50cd2113e73daa0a05c16a416424441f010f3..0df004ea261d6862db0a9b528ec7f2c11bdd5b65 100644 (file)
@@ -661,6 +661,15 @@ pack.threads::
        machines. The required amount of memory for the delta search window
        is however multiplied by the number of threads.
 
+pack.indexVersion::
+       Specify the default pack index version.  Valid values are 1 for
+       legacy pack index used by Git versions prior to 1.5.2, and 2 for
+       the new pack index with capabilities for packs larger than 4 GB
+       as well as proper protection against the repacking of corrupted
+       packs.  Version 2 is selected and this config option ignored
+       whenever the corresponding pack is larger than 2 GB.  Otherwise
+       the default is 1.
+
 pull.octopus::
        The default merge strategy to use when pulling multiple branches
        at once.
index 0be539ed7fd9bf95bb40515b560c7615ed318f37..f4b90c1e4d79501fab9c19a08026153157f89c06 100644 (file)
@@ -1773,6 +1773,12 @@ static int git_pack_config(const char *k, const char *v)
 #endif
                return 0;
        }
+       if (!strcmp(k, "pack.indexversion")) {
+               pack_idx_default_version = git_config_int(k, v);
+               if (pack_idx_default_version > 2)
+                       die("bad pack.indexversion=%d", pack_idx_default_version);
+               return 0;
+       }
        return git_default_config(k, v);
 }
 
index db58e050410197f6eda4b91705e20a8bfc87b088..c0bb78a8ed360312fbba7a75c559aa13e224ccd5 100644 (file)
@@ -683,6 +683,17 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
        }
 }
 
+static int git_index_pack_config(const char *k, const char *v)
+{
+       if (!strcmp(k, "pack.indexversion")) {
+               pack_idx_default_version = git_config_int(k, v);
+               if (pack_idx_default_version > 2)
+                       die("bad pack.indexversion=%d", pack_idx_default_version);
+               return 0;
+       }
+       return git_default_config(k, v);
+}
+
 int main(int argc, char **argv)
 {
        int i, fix_thin_pack = 0;
@@ -693,6 +704,8 @@ int main(int argc, char **argv)
        struct pack_idx_entry **idx_objects;
        unsigned char sha1[20];
 
+       git_config(git_index_pack_config);
+
        for (i = 1; i < argc; i++) {
                const char *arg = argv[i];