aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Pitre <nico@cam.org>2007-11-01 23:26:04 -0400
committerJunio C Hamano <gitster@pobox.com>2007-11-02 01:32:02 -0700
commit4d00bda2aa9dd8cd6ec4015832b80eb1273d46d7 (patch)
treed51a3b7d5534e1b2aeaba0305d4de493b04d6ef8
parent3e4bb087a18435b12eb82116e93af2887578e816 (diff)
downloadgit-4d00bda2aa9dd8cd6ec4015832b80eb1273d46d7.tar.gz
git-4d00bda2aa9dd8cd6ec4015832b80eb1273d46d7.tar.xz
make the pack index version configurable
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>
-rw-r--r--Documentation/config.txt9
-rw-r--r--builtin-pack-objects.c6
-rw-r--r--index-pack.c13
3 files changed, 28 insertions, 0 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt
index edf50cd21..0df004ea2 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -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.
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index 0be539ed7..f4b90c1e4 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -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);
}
diff --git a/index-pack.c b/index-pack.c
index db58e0504..c0bb78a8e 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -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];