git@vger.kernel.org mailing list mirror (one of many)
 help / Atom feed
From: Nguyễn Thái Ngọc Duy  <pclouds@gmail.com>
To: pclouds@gmail.com
Cc: avarab@gmail.com, e@80x24.org, git@vger.kernel.org,
	gitster@pobox.com, peff@peff.net
Subject: [PATCH v3 0/7] nd/repack-keep-pack updates
Date: Fri, 16 Mar 2018 20:27:38 +0100
Message-ID: <20180316192745.19557-1-pclouds@gmail.com> (raw)
In-Reply-To: <20180306104158.6541-1-pclouds@gmail.com>

This is not in mergeable state yet. But since there's lots of changes
and I'm pretty sure there's still room for improvement when it comes
to configuration and stuff, I'm posting it anyway to get the
discussion continue.

- --keep-pack does not imply --honor-pack-keep or --pack-kept-objects
  anymore. If you want it, you pass those in. If not, only
  --keep-pack'd packs are kept.

- v2 03/05 feels too big to me so it's now broken down in a couple
  patches.

- freebsd support is added and tested (which probably means OS X
  support is good too). Windows code for getting memory size remains
  untested.

- platforms that do not have support for getting memory will not have
  this "keep base pack on gc --auto" turned on. This may be just safer
  than printing "unrecognized platform" which may not reach platform
  developers anyway.

- gc.bigBasePackThreshold is renamed to gc.bigPackThreshold and now
  keeps all packs larger than this limit.

- fix the off-by-one in "enumerating objects" code.

- while I tend to agree to make the "50% physical memory"
  configurable. I'm not sure if I should add a config var for that
  (which leads to more questions like, should we allow to say "30%
  _free_ memory" as well?) or I should just give the memory estimation
  to a user and he/she can decide what to do with it via hooks.

Interdiff

-- 8< --
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 120cf6bac9..ce40112e31 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1549,12 +1549,16 @@ gc.autoDetach::
 	Make `git gc --auto` return immediately and run in background
 	if the system supports it. Default is true.
 
-gc.bigBasePackThreshold::
-	Make `git gc --auto` only enable `--keep-base-pack` when the
-	base pack's size is larger than this limit (in bytes).
-	Defaults to zero, which disables this check and lets
-	`git gc --auto` determine when to enable `--keep-base-pack`
-	based on memory usage.
+gc.bigPackThreshold::
+	If non-zero, all packs larger than this limit are kept when
+	`git gc` is run. This is very similar to `--keep-base-pack`
+	except that all packs that meet the threshold are kept, not
+	just the base pack. Defaults to zero.
++
+Note that if the number of kept packs is more than gc.autoPackLimit,
+this configuration variable is ignored, all packs except the base pack
+will be repacked. After this the number of packs should go below
+gc.autoPackLimit and gc.bigPackThreshold should be respected again.
 
 gc.logExpiry::
 	If the file gc.log exists, then `git gc --auto` won't run
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt
index 35ad420d5c..19b0d1741b 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.txt
@@ -9,7 +9,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository
 SYNOPSIS
 --------
 [verse]
-'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] [--force]
+'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] [--force] [--keep-base-pack]
 
 DESCRIPTION
 -----------
@@ -55,15 +55,16 @@ all loose objects are combined into a single pack using
 disables automatic packing of loose objects.
 +
 If the number of packs exceeds the value of `gc.autoPackLimit`,
-then existing packs (except those marked with a `.keep` file)
+then existing packs (except those marked with a `.keep` file
+or over `gc.bigPackThreshold` limit)
 are consolidated into a single pack by using the `-A` option of
-'git repack'. Setting `gc.autoPackLimit` to 0 disables
-automatic consolidation of packs.
-+
-If the physical amount of memory is considered not enough for `git
-repack` to run smoothly, `--keep-base-pack` is enabled. This could be
-overridden by setting `gc.bigBasePackThreshold` which only enables
-`--keep-base-pack` when the base pack is larger the specified limit.
+'git repack'.
+If the amount of memory is estimated not enough for `git repack` to
+run smoothly and `gc.bigPackThreshold` is not set, the largest
+pack will also be excluded (this is the equivalent of running `git gc`
+with `--keep-base-pack`).
+Setting `gc.autoPackLimit` to 0 disables automatic consolidation of
+packs.
 
 --prune=<date>::
 	Prune loose objects older than date (default is 2 weeks ago,
@@ -84,8 +85,10 @@ overridden by setting `gc.bigBasePackThreshold` which only enables
 	instance running on this repository.
 
 --keep-base-pack::
-	All packs except the base pack are consolidated into a single
-	pack. The largest pack is considered the base pack.
+	All packs except the base pack and those marked with a `.keep`
+	files are consolidated into a single pack. The largest pack is
+	considered the base pack. When this option is used,
+	`gc.bigPackThreshold` is ignored.
 
 Configuration
 -------------
@@ -176,10 +179,6 @@ run commands concurrently have to live with some risk of corruption (which
 seems to be low in practice) unless they turn off automatic garbage
 collection with 'git config gc.auto 0'.
 
-Set environment variable `GIT_TRACE` in order to see the memory usage
-estimation in `git gc --auto` that determines whether the base pack is
-kept.
-
 HOOKS
 -----
 
diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt
index 1975477160..403524652a 100644
--- a/Documentation/git-pack-objects.txt
+++ b/Documentation/git-pack-objects.txt
@@ -12,7 +12,7 @@ SYNOPSIS
 'git pack-objects' [-q | --progress | --all-progress] [--all-progress-implied]
 	[--no-reuse-delta] [--delta-base-offset] [--non-empty]
 	[--local] [--incremental] [--window=<n>] [--depth=<n>]
-	[--revs [--unpacked | --all]]
+	[--revs [--unpacked | --all]] [--keep-pack=<pack-name>]
 	[--stdout [--filter=<filter-spec>] | base-name]
 	[--shallow] [--keep-true-parents] < object-list
 
@@ -126,9 +126,12 @@ base-name::
 	has a .keep file to be ignored, even if it would have
 	otherwise been packed.
 
---keep-pack=<pack name>::
-	Ignore the given pack. This is the equivalent of having
-	`.keep` file on the pack. Implies `--honor-pack-keep`.
+--keep-pack=<pack-name>::
+	This flag causes an object already in the given pack to be
+	ignored, even if it would have otherwise been
+	packed. `<pack-name>` is the the pack file name without
+	leading directory (e.g. `pack-123.pack`). The option could be
+	specified multiple times to keep multiple packs.
 
 --incremental::
 	This flag causes an object already in a pack to be ignored
diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt
index 12b073e115..ce497d9d12 100644
--- a/Documentation/git-repack.txt
+++ b/Documentation/git-repack.txt
@@ -9,7 +9,7 @@ git-repack - Pack unpacked objects in a repository
 SYNOPSIS
 --------
 [verse]
-'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [--window=<n>] [--depth=<n>] [--threads=<n>]
+'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]
 
 DESCRIPTION
 -----------
@@ -133,9 +133,12 @@ other objects in that pack they already have locally.
 	with `-b` or `repack.writeBitmaps`, as it ensures that the
 	bitmapped packfile has the necessary objects.
 
---keep-pack=<pack name>::
+--keep-pack=<pack-name>::
 	Exclude the given pack from repacking. This is the equivalent
-	of having `.keep` file on the pack. Implies `--pack-kept-objects`.
+	of having `.keep` file on the pack. `<pack-name>` is the the
+	pack file name without leading directory (e.g. `pack-123.pack`).
+	The option could be specified multiple times to keep multiple
+	packs.
 
 --unpack-unreachable=<when>::
 	When loosening unreachable objects, do not bother loosening any
diff --git a/builtin/gc.c b/builtin/gc.c
index ff914264a5..140c1bb7dd 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -43,7 +43,7 @@ static timestamp_t gc_log_expire_time;
 static const char *gc_log_expire = "1.day.ago";
 static const char *prune_expire = "2.weeks.ago";
 static const char *prune_worktrees_expire = "3.months.ago";
-static unsigned long big_base_pack_threshold;
+static unsigned long big_pack_threshold;
 static unsigned long max_delta_cache_size = DEFAULT_DELTA_CACHE_SIZE;
 
 static struct argv_array pack_refs_cmd = ARGV_ARRAY_INIT;
@@ -132,7 +132,7 @@ static void gc_config(void)
 	git_config_get_expiry("gc.worktreepruneexpire", &prune_worktrees_expire);
 	git_config_get_expiry("gc.logexpiry", &gc_log_expire);
 
-	git_config_get_ulong("gc.bigbasepackthreshold", &big_base_pack_threshold);
+	git_config_get_ulong("gc.bigpackthreshold", &big_pack_threshold);
 	git_config_get_ulong("pack.deltacachesize", &max_delta_cache_size);
 
 	git_config(git_default_config, NULL);
@@ -173,18 +173,27 @@ static int too_many_loose_objects(void)
 	return needed;
 }
 
-static struct packed_git *find_the_base_pack(void)
+static struct packed_git *find_base_packs(struct string_list *packs,
+					  unsigned long limit)
 {
 	struct packed_git *p, *base = NULL;
 
 	prepare_packed_git();
 
 	for (p = packed_git; p; p = p->next) {
-		if (p->pack_local &&
-		    (!base || base->pack_size < p->pack_size))
+		if (!p->pack_local)
+			continue;
+		if (limit) {
+			if (p->pack_size >= limit)
+				string_list_append(packs, p->pack_name);
+		} else if (!base || base->pack_size < p->pack_size) {
 			base = p;
+		}
 	}
 
+	if (base)
+		string_list_append(packs, base->pack_name);
+
 	return base;
 }
 
@@ -211,21 +220,24 @@ static int too_many_packs(void)
 	return gc_auto_pack_limit < cnt;
 }
 
-static inline unsigned long total_ram(void)
+static uint64_t total_ram(void)
 {
-	unsigned long default_ram = 4;
-#ifdef HAVE_SYSINFO
+#if defined(HAVE_SYSINFO)
 	struct sysinfo si;
 
 	if (!sysinfo(&si))
 		return si.totalram;
-#elif defined(HAVE_BSD_SYSCTL) && defined(HW_MEMSIZE)
+#elif defined(HAVE_BSD_SYSCTL) && (defined(HW_MEMSIZE) || defined(HW_PHYSMEM))
 	int64_t physical_memory;
 	int mib[2];
 	size_t length;
 
 	mib[0] = CTL_HW;
+# if defined(HW_MEMSIZE)
 	mib[1] = HW_MEMSIZE;
+# else
+	mib[1] = HW_PHYSMEM;
+# endif
 	length = sizeof(int64_t);
 	if (!sysctl(mib, 2, &physical_memory, &length, NULL, 0))
 		return physical_memory;
@@ -235,24 +247,18 @@ static inline unsigned long total_ram(void)
 	memInfo.dwLength = sizeof(MEMORYSTATUSEX);
 	if (GlobalMemoryStatusEx(&memInfo))
 		return memInfo.ullTotalPhys;
-#else
-	fprintf(stderr, _("unrecognized platform, assuming %lu GB RAM\n"),
-		default_ram);
 #endif
-	return default_ram * 1024 * 1024 * 1024;
+	return 0;
 }
 
-static int pack_objects_uses_too_much_memory(struct packed_git *pack)
+static uint64_t estimate_repack_memory(struct packed_git *pack)
 {
 	unsigned long nr_objects = approximate_object_count();
-	size_t mem_want, mem_have, os_cache, heap;
+	size_t os_cache, heap;
 
 	if (!pack || !nr_objects)
 		return 0;
 
-	if (big_base_pack_threshold)
-		return pack->pack_size >= big_base_pack_threshold;
-
 	/*
 	 * First we have to scan through at least one pack.
 	 * Assume enough room in OS file cache to keep the entire pack
@@ -284,28 +290,16 @@ static int pack_objects_uses_too_much_memory(struct packed_git *pack)
 	/* and of course pack-objects has its own delta cache */
 	heap += max_delta_cache_size;
 
-	/*
-	 * Only allow 1/2 of memory for pack-objects, leave the rest
-	 * for the OS and other processes in the system.
-	 */
-	mem_have = total_ram() / 2;
-	mem_want = os_cache + heap;
-
-	trace_printf("gc mem estimation\n"
-		     "mem_have: %" PRIuMAX ", mem_want: %" PRIuMAX ", "
-		     "heap: %" PRIuMAX "\n"
-		     "pack_size: %" PRIuMAX ", index_size: %" PRIuMAX ", "
-		     "nr_objects: %" PRIuMAX "\n"
-		     "base_cache: %" PRIuMAX ", delta_cache: %" PRIuMAX "\n",
-		     (uintmax_t)mem_have, (uintmax_t)mem_want, (uintmax_t)heap,
-		     (uintmax_t)pack->pack_size, (uintmax_t)pack->index_size,
-		     (uintmax_t)nr_objects,
-		     (uintmax_t)delta_base_cache_limit, (uintmax_t)max_delta_cache_size);
-
-	return mem_want >= mem_have;
+	return os_cache + heap;
 }
 
-static void add_repack_all_option(struct packed_git *keep_pack)
+static int keep_one_pack(struct string_list_item *item, void *data)
+{
+	argv_array_pushf(&repack, "--keep-pack=%s", basename(item->string));
+	return 0;
+}
+
+static void add_repack_all_option(struct string_list *keep_pack)
 {
 	if (prune_expire && !strcmp(prune_expire, "now"))
 		argv_array_push(&repack, "-a");
@@ -316,8 +310,7 @@ static void add_repack_all_option(struct packed_git *keep_pack)
 	}
 
 	if (keep_pack)
-		argv_array_pushf(&repack, "--keep-pack=%s",
-				 basename(keep_pack->pack_name));
+		for_each_string_list(keep_pack, keep_one_pack, NULL);
 }
 
 static void add_repack_incremental_option(void)
@@ -341,12 +334,33 @@ static int need_to_gc(void)
 	 * there is no need.
 	 */
 	if (too_many_packs()) {
-		struct packed_git *exclude = find_the_base_pack();
+		struct string_list keep_pack = STRING_LIST_INIT_NODUP;
+
+		if (big_pack_threshold) {
+			find_base_packs(&keep_pack, big_pack_threshold);
+			if (keep_pack.nr >= gc_auto_pack_limit) {
+				big_pack_threshold = 0;
+				string_list_clear(&keep_pack, 0);
+				find_base_packs(&keep_pack, 0);
+			}
+		} else {
+			struct packed_git * p = find_base_packs(&keep_pack, 0);
+			uint64_t mem_have, mem_want;
+
+			mem_have = total_ram();
+			mem_want = estimate_repack_memory(p);
 
-		if (!pack_objects_uses_too_much_memory(exclude))
-			exclude = NULL;
+			/*
+			 * Only allow 1/2 of memory for pack-objects, leave
+			 * the rest for the OS and other processes in the
+			 * system.
+			 */
+			if (!mem_have || mem_want < mem_have / 2)
+				string_list_clear(&keep_pack, 0);
+		}
 
-		add_repack_all_option(exclude);
+		add_repack_all_option(&keep_pack);
+		string_list_clear(&keep_pack, 0);
 	} else if (too_many_loose_objects())
 		add_repack_incremental_option();
 	else
@@ -558,17 +572,17 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
 			daemonized = !daemonize();
 		}
 	} else {
-		struct packed_git *base_pack = find_the_base_pack();
-		struct packed_git *exclude = NULL;
+		struct string_list keep_pack = STRING_LIST_INIT_NODUP;
 
 		if (keep_base_pack != -1) {
 			if (keep_base_pack)
-				exclude = base_pack;
-		} else if (base_pack && big_base_pack_threshold &&
-			   base_pack->pack_size >= big_base_pack_threshold)
-			exclude = base_pack;
+				find_base_packs(&keep_pack, 0);
+		} else if (big_pack_threshold) {
+			find_base_packs(&keep_pack, big_pack_threshold);
+		}
 
-		add_repack_all_option(exclude);
+		add_repack_all_option(&keep_pack);
+		string_list_clear(&keep_pack, 0);
 	}
 
 	name = lock_repo_for_gc(force, &pid);
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 2ec911bf10..ac8f29dd52 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -54,7 +54,7 @@ static int pack_loose_unreachable;
 static int local;
 static int have_non_local_packs;
 static int incremental;
-static int ignore_packed_keep;
+static int ignore_packed_keep, ignore_packed_keep_in_core;
 static int allow_ofs_delta;
 static struct pack_idx_option pack_idx_opts;
 static const char *base_name;
@@ -983,13 +983,15 @@ static int want_found_object(int exclude, struct packed_git *p)
 	 * Otherwise, we signal "-1" at the end to tell the caller that we do
 	 * not know either way, and it needs to check more packs.
 	 */
-	if (!ignore_packed_keep &&
+	if (!ignore_packed_keep && !ignore_packed_keep_in_core &&
 	    (!local || !have_non_local_packs))
 		return 1;
 
 	if (local && !p->pack_local)
 		return 0;
-	if (ignore_packed_keep && p->pack_local && p->pack_keep)
+	if (p->pack_local &&
+	    ((ignore_packed_keep && p->pack_keep) ||
+	     (ignore_packed_keep_in_core && p->pack_keep_in_core)))
 		return 0;
 
 	/* we don't know yet; keep looking for more packs */
@@ -1092,7 +1094,7 @@ static int add_object_entry(const struct object_id *oid, enum object_type type,
 	off_t found_offset = 0;
 	uint32_t index_pos;
 
-	display_progress(progress_state, nr_seen++);
+	display_progress(progress_state, ++nr_seen);
 
 	if (have_duplicate_entry(oid, exclude, &index_pos))
 		return 0;
@@ -1119,7 +1121,7 @@ static int add_object_entry_from_bitmap(const struct object_id *oid,
 {
 	uint32_t index_pos;
 
-	display_progress(progress_state, nr_seen++);
+	display_progress(progress_state, ++nr_seen);
 
 	if (have_duplicate_entry(oid, 0, &index_pos))
 		return 0;
@@ -2684,7 +2686,7 @@ static void add_objects_in_unpacked_packs(struct rev_info *revs)
 		struct object_id oid;
 		struct object *o;
 
-		if (!p->pack_local || p->pack_keep)
+		if (!p->pack_local || p->pack_keep || p->pack_keep_in_core)
 			continue;
 		if (open_pack_index(p))
 			die("cannot open pack index");
@@ -2746,7 +2748,8 @@ static int has_sha1_pack_kept_or_nonlocal(const struct object_id *oid)
 	p = (last_found != (void *)1) ? last_found : packed_git;
 
 	while (p) {
-		if ((!p->pack_local || p->pack_keep) &&
+		if ((!p->pack_local || p->pack_keep ||
+				p->pack_keep_in_core) &&
 			find_pack_entry_one(oid->hash, p)) {
 			last_found = p;
 			return 1;
@@ -2789,7 +2792,7 @@ static void loosen_unused_packed_objects(struct rev_info *revs)
 	struct object_id oid;
 
 	for (p = packed_git; p; p = p->next) {
-		if (!p->pack_local || p->pack_keep)
+		if (!p->pack_local || p->pack_keep || p->pack_keep_in_core)
 			continue;
 
 		if (open_pack_index(p))
@@ -2816,6 +2819,7 @@ static int pack_options_allow_reuse(void)
 	return pack_to_stdout &&
 	       allow_ofs_delta &&
 	       !ignore_packed_keep &&
+	       !ignore_packed_keep_in_core &&
 	       (!local || !have_non_local_packs) &&
 	       !incremental;
 }
@@ -2939,13 +2943,14 @@ static void add_extra_kept_packs(const struct string_list *names)
 		if (!p->pack_local)
 			continue;
 
-		for (i = 0; i < names->nr; i++) {
-			if (fspathcmp(name, names->items[i].string))
-				continue;
+		for (i = 0; i < names->nr; i++)
+			if (!fspathcmp(name, names->items[i].string))
+				break;
 
-			p->pack_keep = 1;
-			ignore_packed_keep = 1;
-			break;
+		if (i < names->nr) {
+			p->pack_keep_in_core = 1;
+			ignore_packed_keep_in_core = 1;
+			continue;
 		}
 	}
 }
diff --git a/builtin/repack.c b/builtin/repack.c
index 6a1dade0e1..6c636e159e 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -100,7 +100,7 @@ static void get_non_kept_pack_filenames(struct string_list *fname_list,
 		size_t len;
 		int i;
 
-		for (i = 0;i < extra_keep->nr; i++)
+		for (i = 0; i < extra_keep->nr; i++)
 			if (!fspathcmp(e->d_name, extra_keep->items[i].string))
 				break;
 		if (extra_keep->nr > 0 && i < extra_keep->nr)
@@ -227,8 +227,6 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
 	    (unpack_unreachable || (pack_everything & LOOSEN_UNREACHABLE)))
 		die(_("--keep-unreachable and -A are incompatible"));
 
-	if (keep_pack_list.nr && pack_kept_objects > 0)
-		die(_("incompatible --keep-pack and --pack-kept-objects"));
 	if (pack_kept_objects < 0)
 		pack_kept_objects = write_bitmaps;
 
diff --git a/cache.h b/cache.h
index 21fbcc2414..42d700f3d8 100644
--- a/cache.h
+++ b/cache.h
@@ -1635,6 +1635,7 @@ extern struct packed_git {
 	int pack_fd;
 	unsigned pack_local:1,
 		 pack_keep:1,
+		 pack_keep_in_core:1,
 		 freshened:1,
 		 do_not_close:1,
 		 pack_promisor:1;
diff --git a/t/t6500-gc.sh b/t/t6500-gc.sh
index 863fdbb0fd..96ca70f9cc 100755
--- a/t/t6500-gc.sh
+++ b/t/t6500-gc.sh
@@ -7,9 +7,9 @@ test_description='basic git gc tests
 
 test_expect_success 'setup' '
 	# do not let the amount of physical memory affects gc
-	# behavior, make sure the pack_objects_uses_too_much_memory()
-	# always returns false
-	git config gc.bigBasePackThreshold 2g
+	# behavior, make sure we always pack everything to one pack by
+	# default
+	git config gc.bigPackThreshold 2g
 '
 
 test_expect_success 'gc empty repository' '
diff --git a/t/t7700-repack.sh b/t/t7700-repack.sh
index 553d907d34..05ae0de3aa 100755
--- a/t/t7700-repack.sh
+++ b/t/t7700-repack.sh
@@ -200,16 +200,22 @@ test_expect_success 'repack --keep-pack' '
 	test_create_repo keep-pack &&
 	(
 		cd keep-pack &&
-		for cmit in one two three four; do
-			test_commit $cmit &&
-			git repack -d
-		done &&
+		test_commit one &&
+		git repack -d &&
+		test_commit two &&
+		git repack -d &&
+		test_commit three &&
+		git repack -d &&
+		test_commit four &&
+		git repack -d &&
 		( cd .git/objects/pack && ls *.pack ) >pack-list &&
 		test_line_count = 4 pack-list &&
-		KEEP1=`head -n1 pack-list` &&
-		KEEP4=`tail -n1 pack-list` &&
+		KEEP1=$(head -n1 pack-list) &&
+		KEEP4=$(tail -n1 pack-list) &&
 		git repack -a -d --keep-pack $KEEP1 --keep-pack $KEEP4 &&
 		ls .git/objects/pack/*.pack >new-counts &&
+		grep -q $KEEP1 new-counts &&
+		grep -q $KEEP4 new-counts &&
 		test_line_count = 3 new-counts &&
 		git fsck
 	)
-- 8< --

Nguyễn Thái Ngọc Duy (7):
  repack: add --keep-pack option
  gc: add --keep-base-pack
  gc: detect base packs based on gc.bigPackThreshold config
  gc --auto: exclude base pack if not enough mem to "repack -ad"
  gc: handle a corner case in gc.bigPackThreshold
  pack-objects: show some progress when counting kept objects
  pack-objects: display progress in get_object_details()

 Documentation/config.txt           |  11 ++
 Documentation/git-gc.txt           |  20 +++-
 Documentation/git-pack-objects.txt |   9 +-
 Documentation/git-repack.txt       |   9 +-
 builtin/gc.c                       | 167 +++++++++++++++++++++++++++--
 builtin/pack-objects.c             |  68 +++++++++---
 builtin/repack.c                   |  21 +++-
 cache.h                            |   1 +
 config.mak.uname                   |   1 +
 git-compat-util.h                  |   4 +
 pack-objects.h                     |   2 +
 t/t6500-gc.sh                      |  29 +++++
 t/t7700-repack.sh                  |  25 +++++
 13 files changed, 339 insertions(+), 28 deletions(-)

-- 
2.16.2.903.gd04caf5039


  parent reply index

Thread overview: 272+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-28  9:27 Reduce pack-objects memory footprint? Duy Nguyen
2018-02-28 10:17 ` Jeff King
2018-02-28 10:58   ` Duy Nguyen
2018-02-28 11:11     ` Jeff King
2018-02-28 11:24       ` Duy Nguyen
2018-02-28 18:22 ` Eric Wong
2018-03-01  9:00   ` Duy Nguyen
2018-03-01  9:10 ` [PATCH 00/11] Reduce pack-objects memory footprint Nguyễn Thái Ngọc Duy
2018-03-01  9:10   ` [PATCH 01/11] pack-objects: document holes in struct object_entry.h Nguyễn Thái Ngọc Duy
2018-03-01  9:10   ` [PATCH 02/11] pack-objects: turn type and in_pack_type to bitfields Nguyễn Thái Ngọc Duy
2018-03-01  9:10   ` [PATCH 03/11] pack-objects: use bitfield for object_entry::dfs_state Nguyễn Thái Ngọc Duy
2018-03-01  9:10   ` [PATCH 04/11] pack-objects: use bitfield for object_entry::depth Nguyễn Thái Ngọc Duy
2018-03-01 18:00     ` Junio C Hamano
2018-03-01  9:10   ` [PATCH 05/11] pack-objects: note about in_pack_header_size Nguyễn Thái Ngọc Duy
2018-03-01  9:10   ` [PATCH 06/11] pack-objects: move in_pack_pos out of struct object_entry Nguyễn Thái Ngọc Duy
2018-03-01  9:10   ` [PATCH 07/11] pack-objects: move in_pack " Nguyễn Thái Ngọc Duy
2018-03-01 12:37     ` Ævar Arnfjörð Bjarmason
2018-03-01 14:49     ` Jeff King
2018-03-02  0:02       ` Duy Nguyen
2018-03-01 18:05     ` Junio C Hamano
2018-03-01  9:10   ` [PATCH 08/11] pack-objects: faster reverse packed_git lookup Nguyễn Thái Ngọc Duy
2018-03-01  9:10   ` [PATCH 09/11] pack-objects: refer to delta objects by index instead of pointer Nguyễn Thái Ngọc Duy
2018-03-01 18:08     ` Junio C Hamano
2018-03-01  9:10   ` [PATCH 10/11] pack-objects: reorder 'hash' to pack struct object_entry Nguyễn Thái Ngọc Duy
2018-03-01  9:10   ` [PATCH 11/11] pack-objects: increase pack file limit to 4096 Nguyễn Thái Ngọc Duy
2018-03-01 13:33   ` [PATCH 00/11] Reduce pack-objects memory footprint Ævar Arnfjörð Bjarmason
2018-03-02  0:14     ` Duy Nguyen
2018-03-02 10:57       ` Jeff King
2018-03-03  2:46   ` [PATCH/RFC v2 0/9] " Nguyễn Thái Ngọc Duy
2018-03-03  2:46     ` [PATCH/RFC v2 1/9] pack-objects: document holes in struct object_entry.h Nguyễn Thái Ngọc Duy
2018-03-03  2:46     ` [PATCH/RFC v2 2/9] pack-objects: turn type and in_pack_type to bitfields Nguyễn Thái Ngọc Duy
2018-03-03  2:47     ` [PATCH/RFC v2 3/9] pack-objects: use bitfield for object_entry::dfs_state Nguyễn Thái Ngọc Duy
2018-03-03  2:47     ` [PATCH/RFC v2 4/9] pack-objects: use bitfield for object_entry::depth Nguyễn Thái Ngọc Duy
2018-03-03  2:47     ` [PATCH/RFC v2 5/9] pack-objects: note about in_pack_header_size Nguyễn Thái Ngọc Duy
2018-03-03  2:47     ` [PATCH/RFC v2 6/9] pack-objects: move in_pack_pos out of struct object_entry Nguyễn Thái Ngọc Duy
2018-03-03  2:47     ` [PATCH/RFC v2 7/9] pack-objects: move in_pack " Nguyễn Thái Ngọc Duy
2018-03-03  2:47     ` [PATCH/RFC v2 8/9] pack-objects: refer to delta objects by index instead of pointer Nguyễn Thái Ngọc Duy
2018-03-03  2:47     ` [PATCH/RFC v2 9/9] pack-objects: reorder 'hash' to pack struct object_entry Nguyễn Thái Ngọc Duy
2018-03-05  9:28     ` [PATCH/RFC v2 0/9] Reduce pack-objects memory footprint Duy Nguyen
2018-03-08 11:42     ` [PATCH/RFC v3 00/12] " Nguyễn Thái Ngọc Duy
2018-03-08 11:42       ` [PATCH/RFC v3 01/12] pack-objects: a bit of document about struct object_entry Nguyễn Thái Ngọc Duy
2018-03-09 22:34         ` Junio C Hamano
2018-03-08 11:42       ` [PATCH/RFC v3 02/12] pack-objects: turn type and in_pack_type to bitfields Nguyễn Thái Ngọc Duy
2018-03-09 22:54         ` Junio C Hamano
2018-03-12 17:51           ` Duy Nguyen
2018-03-08 11:42       ` [PATCH/RFC v3 03/12] pack-objects: use bitfield for object_entry::dfs_state Nguyễn Thái Ngọc Duy
2018-03-08 11:42       ` [PATCH/RFC v3 04/12] pack-objects: use bitfield for object_entry::depth Nguyễn Thái Ngọc Duy
2018-03-09 23:07         ` Junio C Hamano
2018-03-08 11:42       ` [PATCH/RFC v3 05/12] pack-objects: note about in_pack_header_size Nguyễn Thái Ngọc Duy
2018-03-08 11:42       ` [PATCH/RFC v3 06/12] pack-objects: move in_pack_pos out of struct object_entry Nguyễn Thái Ngọc Duy
2018-03-08 11:42       ` [PATCH/RFC v3 07/12] pack-objects: move in_pack " Nguyễn Thái Ngọc Duy
2018-03-09 23:21         ` Junio C Hamano
2018-03-08 11:42       ` [PATCH/RFC v3 08/12] pack-objects: refer to delta objects by index instead of pointer Nguyễn Thái Ngọc Duy
2018-03-14 16:18         ` Junio C Hamano
2018-03-08 11:42       ` [PATCH/RFC v3 09/12] pack-objects: reorder 'hash' to pack struct object_entry Nguyễn Thái Ngọc Duy
2018-03-08 11:42       ` [PATCH/RFC v3 10/12] pack-objects: shrink z_delta_size field in " Nguyễn Thái Ngọc Duy
2018-03-08 11:42       ` [PATCH/RFC v3 11/12] pack-objects: shrink size " Nguyễn Thái Ngọc Duy
2018-03-08 11:42       ` [PATCH/RFC v3 12/12] pack-objects: shrink delta_size " Nguyễn Thái Ngọc Duy
2018-03-16 18:31       ` [PATCH v4 00/11] nd/pack-objects-pack-struct updates Nguyễn Thái Ngọc Duy
2018-03-16 18:31         ` [PATCH v4 01/11] pack-objects: a bit of document about struct object_entry Nguyễn Thái Ngọc Duy
2018-03-16 20:32           ` Junio C Hamano
2018-03-17 11:59             ` Duy Nguyen
2018-03-16 18:31         ` [PATCH v4 02/11] pack-objects: turn type and in_pack_type to bitfields Nguyễn Thái Ngọc Duy
2018-03-16 20:49           ` Junio C Hamano
2018-03-16 18:31         ` [PATCH v4 03/11] pack-objects: use bitfield for object_entry::dfs_state Nguyễn Thái Ngọc Duy
2018-03-16 18:31         ` [PATCH v4 04/11] pack-objects: use bitfield for object_entry::depth Nguyễn Thái Ngọc Duy
2018-03-16 18:31         ` [PATCH v4 05/11] pack-objects: move in_pack_pos out of struct object_entry Nguyễn Thái Ngọc Duy
2018-03-16 18:31         ` [PATCH v4 06/11] pack-objects: move in_pack " Nguyễn Thái Ngọc Duy
2018-03-26 20:39           ` Stefan Beller
2018-03-16 18:31         ` [PATCH v4 07/11] pack-objects: refer to delta objects by index instead of pointer Nguyễn Thái Ngọc Duy
2018-03-16 20:59           ` Junio C Hamano
2018-03-16 18:31         ` [PATCH v4 08/11] pack-objects: shrink z_delta_size field in struct object_entry Nguyễn Thái Ngọc Duy
2018-03-16 19:40           ` Junio C Hamano
2018-03-16 18:31         ` [PATCH v4 09/11] pack-objects: shrink size " Nguyễn Thái Ngọc Duy
2018-03-16 19:49           ` Junio C Hamano
2018-03-16 21:34             ` Junio C Hamano
2018-03-16 18:31         ` [PATCH v4 10/11] pack-objects: shrink delta_size " Nguyễn Thái Ngọc Duy
2018-03-16 18:32         ` [PATCH v4 11/11] pack-objects.h: reorder members to shrink " Nguyễn Thái Ngọc Duy
2018-03-16 21:02           ` Junio C Hamano
2018-03-17 12:07             ` Duy Nguyen
2018-03-17 14:10         ` [PATCH v5 00/11] nd/pack-objects-pack-struct updates Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 01/11] pack-objects: a bit of document about struct object_entry Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 02/11] pack-objects: turn type and in_pack_type to bitfields Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 03/11] pack-objects: use bitfield for object_entry::dfs_state Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 04/11] pack-objects: use bitfield for object_entry::depth Nguyễn Thái Ngọc Duy
2018-03-17 21:26             ` Ævar Arnfjörð Bjarmason
2018-03-17 14:10           ` [PATCH v5 05/11] pack-objects: move in_pack_pos out of struct object_entry Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 06/11] pack-objects: move in_pack " Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 07/11] pack-objects: refer to delta objects by index instead of pointer Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 08/11] pack-objects: shrink z_delta_size field in struct object_entry Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 09/11] pack-objects: shrink size " Nguyễn Thái Ngọc Duy
2018-03-17 19:57             ` Ævar Arnfjörð Bjarmason
2018-03-18  5:09             ` Junio C Hamano
2018-03-18  8:23               ` Duy Nguyen
2018-03-17 14:10           ` [PATCH v5 10/11] pack-objects: shrink delta_size " Nguyễn Thái Ngọc Duy
2018-03-17 14:10           ` [PATCH v5 11/11] pack-objects.h: reorder members to shrink " Nguyễn Thái Ngọc Duy
2018-03-17 19:53             ` Ævar Arnfjörð Bjarmason
2018-03-18  8:49               ` Duy Nguyen
2018-03-17 19:45           ` [PATCH v5 00/11] nd/pack-objects-pack-struct updates Ævar Arnfjörð Bjarmason
2018-03-17 19:47             ` Ævar Arnfjörð Bjarmason
2018-03-18 14:25           ` [PATCH v6 " Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 01/11] pack-objects: a bit of document about struct object_entry Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 02/11] pack-objects: turn type and in_pack_type to bitfields Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 03/11] pack-objects: use bitfield for object_entry::dfs_state Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 04/11] pack-objects: use bitfield for object_entry::depth Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 05/11] pack-objects: move in_pack_pos out of struct object_entry Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 06/11] pack-objects: move in_pack " Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 07/11] pack-objects: refer to delta objects by index instead of pointer Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 08/11] pack-objects: shrink z_delta_size field in struct object_entry Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 09/11] pack-objects: shrink size " Nguyễn Thái Ngọc Duy
2018-03-18 14:49               ` Ævar Arnfjörð Bjarmason
2018-03-19 16:19               ` Junio C Hamano
2018-03-19 16:23                 ` Duy Nguyen
2018-03-19 16:43               ` Junio C Hamano
2018-03-19 16:54                 ` Duy Nguyen
2018-03-19 18:29                   ` Junio C Hamano
2018-03-19 18:45                     ` Duy Nguyen
2018-03-19 20:10                       ` Junio C Hamano
2018-03-20 18:08                         ` Duy Nguyen
2018-03-20 18:22                           ` Junio C Hamano
2018-03-21  8:03                           ` Jeff King
2018-03-21 16:12                             ` Duy Nguyen
2018-03-20 18:17                 ` Duy Nguyen
2018-03-18 14:25             ` [PATCH v6 10/11] pack-objects: shrink delta_size " Nguyễn Thái Ngọc Duy
2018-03-18 14:25             ` [PATCH v6 11/11] pack-objects: reorder members to shrink " Nguyễn Thái Ngọc Duy
2018-03-18 14:51             ` [PATCH v6 00/11] nd/pack-objects-pack-struct updates Ævar Arnfjörð Bjarmason
2018-03-21  8:24             ` Jeff King
2018-03-21 15:59               ` Duy Nguyen
2018-03-21 16:17                 ` Ævar Arnfjörð Bjarmason
2018-03-21 16:22                   ` Duy Nguyen
2018-03-21 16:46                 ` Duy Nguyen
2018-03-21 19:11                   ` Junio C Hamano
2018-03-22  9:32                 ` Jeff King
2018-03-22  9:46                   ` Jeff King
2018-03-22 10:57                   ` Duy Nguyen
2018-03-22 11:52                     ` Jeff King
2018-03-22 17:04                       ` Duy Nguyen
2018-03-23  1:28                   ` Ramsay Jones
2018-03-23  2:46                     ` Jeff King
2018-03-23  5:50                       ` Jeff King
2018-03-23 16:01                         ` Ramsay Jones
2018-03-24  6:40                           ` Jeff King
2018-03-23  7:05                       ` Duy Nguyen
2018-03-23 14:03                       ` Ramsay Jones
2018-03-21 16:31               ` Ævar Arnfjörð Bjarmason
2018-03-21 16:53                 ` Junio C Hamano
2018-03-21 17:00                   ` Duy Nguyen
2018-03-22  8:07                 ` Jeff King
2018-03-22  8:23                   ` Duy Nguyen
2018-03-22 10:01                     ` Jeff King
2018-03-24  6:33             ` [PATCH v7 00/13] " Nguyễn Thái Ngọc Duy
2018-03-24  6:33               ` [PATCH v7 01/13] pack-objects: a bit of document about struct object_entry Nguyễn Thái Ngọc Duy
2018-03-24  6:33               ` [PATCH v7 02/13] pack-objects: turn type and in_pack_type to bitfields Nguyễn Thái Ngọc Duy
2018-03-30 20:18                 ` Jeff King
2018-03-24  6:33               ` [PATCH v7 03/13] pack-objects: use bitfield for object_entry::dfs_state Nguyễn Thái Ngọc Duy
2018-03-30 20:23                 ` Jeff King
2018-03-24  6:33               ` [PATCH v7 04/13] pack-objects: use bitfield for object_entry::depth Nguyễn Thái Ngọc Duy
2018-03-30 20:26                 ` Jeff King
2018-03-24  6:33               ` [PATCH v7 05/13] pack-objects: move in_pack_pos out of struct object_entry Nguyễn Thái Ngọc Duy
2018-03-30 20:30                 ` Jeff King
2018-03-24  6:33               ` [PATCH v7 06/13] pack-objects: move in_pack " Nguyễn Thái Ngọc Duy
2018-03-24  9:42                 ` Ævar Arnfjörð Bjarmason
2018-03-24 12:26                   ` Duy Nguyen
2018-03-24 12:13                 ` Ævar Arnfjörð Bjarmason
2018-03-30 20:48                 ` Jeff King
2018-03-31  4:51                   ` Duy Nguyen
2018-03-31 10:20                     ` Jeff King
2018-03-31 10:45                       ` Duy Nguyen
2018-03-24  6:33               ` [PATCH v7 07/13] pack-objects: refer to delta objects by index instead of pointer Nguyễn Thái Ngọc Duy
2018-03-30 20:53                 ` Jeff King
2018-03-24  6:33               ` [PATCH v7 08/13] pack-objects: shrink z_delta_size field in struct object_entry Nguyễn Thái Ngọc Duy
2018-03-30 20:59                 ` Jeff King
2018-03-31  4:40                   ` Duy Nguyen
2018-03-31 10:17                     ` Jeff King
2018-03-24  6:33               ` [PATCH v7 09/13] pack-objects: don't check size when the object is bad Nguyễn Thái Ngọc Duy
2018-03-24  6:33               ` [PATCH v7 10/13] pack-objects: clarify the use of object_entry::size Nguyễn Thái Ngọc Duy
2018-03-30 21:04                 ` Jeff King
2018-03-31  4:35                   ` Duy Nguyen
2018-03-31 10:13                     ` Jeff King
2018-03-24  6:33               ` [PATCH v7 11/13] pack-objects: shrink size field in struct object_entry Nguyễn Thái Ngọc Duy
2018-03-30 21:18                 ` Jeff King
2018-03-24  6:33               ` [PATCH v7 12/13] pack-objects: shrink delta_size " Nguyễn Thái Ngọc Duy
2018-03-30 21:24                 ` Jeff King
2018-03-31  4:21                   ` Duy Nguyen
2018-03-31  9:10                   ` Duy Nguyen
2018-03-24  6:33               ` [PATCH v7 13/13] pack-objects: reorder members to shrink " Nguyễn Thái Ngọc Duy
2018-03-30 21:26                 ` Jeff King
2018-03-31  4:10                   ` Duy Nguyen
2018-03-26 15:13               ` [PATCH v7 00/13] nd/pack-objects-pack-struct updates Jeff King
2018-03-26 17:04                 ` Duy Nguyen
2018-03-27 16:53                   ` Jeff King
2018-03-31 10:02               ` [PATCH v8 00/15] " Nguyễn Thái Ngọc Duy
2018-03-31 10:02                 ` [PATCH v8 01/15] t/README: mention about running the test suite in special modes Nguyễn Thái Ngọc Duy
2018-03-31 10:02                 ` [PATCH v8 02/15] pack-objects: a bit of document about struct object_entry Nguyễn Thái Ngọc Duy
2018-03-31 10:02                 ` [PATCH v8 03/15] pack-objects: turn type and in_pack_type to bitfields Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 04/15] pack-objects: use bitfield for object_entry::dfs_state Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 05/15] pack-objects: use bitfield for object_entry::depth Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 06/15] pack-objects: move in_pack_pos out of struct object_entry Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 07/15] pack-objects: move in_pack " Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 08/15] pack-objects: refer to delta objects by index instead of pointer Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 09/15] pack-objects: shrink z_delta_size field in struct object_entry Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 10/15] pack-objects: don't check size when the object is bad Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 11/15] pack-objects: clarify the use of object_entry::size Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 12/15] pack-objects: shrink size field in struct object_entry Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 13/15] pack-objects: shrink delta_size " Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 14/15] pack-objects: reorder members to shrink " Nguyễn Thái Ngọc Duy
2018-03-31 10:03                 ` [PATCH v8 15/15] ci: exercise the whole test suite with uncommon code in pack-objects Nguyễn Thái Ngọc Duy
2018-03-31 11:36                 ` [PATCH v8 00/15] nd/pack-objects-pack-struct updates Ævar Arnfjörð Bjarmason
2018-03-31 12:08                   ` Duy Nguyen
2018-03-31 15:43                     ` Ævar Arnfjörð Bjarmason
2018-04-06 21:47                 ` Jeff King
2018-03-01  9:20 ` [PATCH/RFC 0/1] Avoid expensive 'repack -ad' in gc --auto Nguyễn Thái Ngọc Duy
2018-03-01  9:20   ` [PATCH/RFC 1/1] gc --auto: exclude the largest giant pack in low-memory config Nguyễn Thái Ngọc Duy
2018-03-01 18:14     ` Junio C Hamano
2018-03-02  0:00       ` Duy Nguyen
2018-03-05 14:00     ` Ævar Arnfjörð Bjarmason
2018-03-06 10:41   ` [PATCH v2 0/5] Avoid expensive 'repack -ad' in gc --auto Nguyễn Thái Ngọc Duy
2018-03-06 10:41     ` [PATCH v2 1/5] fixup! Add a test showing that 'git repack' throws away grafted-away parents Nguyễn Thái Ngọc Duy
2018-03-06 18:01       ` Junio C Hamano
2018-03-06 10:41     ` [PATCH v2 2/5] repack: add --keep-pack option Nguyễn Thái Ngọc Duy
2018-03-06 18:25       ` Junio C Hamano
2018-03-07 10:19         ` Duy Nguyen
2018-03-06 10:41     ` [PATCH v2 3/5] gc --auto: exclude base pack if not enough mem to "repack -ad" Nguyễn Thái Ngọc Duy
2018-03-06 19:19       ` Junio C Hamano
2018-03-07 10:48         ` Duy Nguyen
2018-03-07 18:38           ` Junio C Hamano
2018-03-12 18:56             ` Ævar Arnfjörð Bjarmason
2018-03-12 21:16               ` Junio C Hamano
2018-03-12 22:01                 ` Ævar Arnfjörð Bjarmason
2018-03-15 16:48               ` Duy Nguyen
2018-03-07 10:48       ` Johannes Schindelin
2018-03-07 18:40         ` Junio C Hamano
2018-03-12 19:30       ` Ævar Arnfjörð Bjarmason
2018-03-15 17:00         ` Duy Nguyen
2018-03-15 19:21           ` Ævar Arnfjörð Bjarmason
2018-03-16 17:47             ` Duy Nguyen
2018-03-06 10:41     ` [PATCH v2 4/5] pack-objects: show some progress when counting kept objects Nguyễn Thái Ngọc Duy
2018-03-12 18:32       ` Ævar Arnfjörð Bjarmason
2018-03-16 19:14         ` Duy Nguyen
2018-03-16 20:13           ` Duy Nguyen
2018-03-06 10:41     ` [PATCH v2 5/5] pack-objects: display progress in get_object_details() Nguyễn Thái Ngọc Duy
2018-03-06 17:49     ` [PATCH v2 0/5] Avoid expensive 'repack -ad' in gc --auto Junio C Hamano
2018-03-16 19:27     ` Nguyễn Thái Ngọc Duy [this message]
2018-03-16 19:27       ` [PATCH v3 1/7] repack: add --keep-pack option Nguyễn Thái Ngọc Duy
2018-03-16 19:27       ` [PATCH v3 2/7] gc: add --keep-base-pack Nguyễn Thái Ngọc Duy
2018-03-16 21:05         ` Ævar Arnfjörð Bjarmason
2018-03-19 17:26           ` Duy Nguyen
2018-03-19 19:04             ` Ævar Arnfjörð Bjarmason
2018-03-16 21:25         ` Ævar Arnfjörð Bjarmason
2018-03-16 19:27       ` [PATCH v3 3/7] gc: detect base packs based on gc.bigPackThreshold config Nguyễn Thái Ngọc Duy
2018-03-16 21:02         ` Ævar Arnfjörð Bjarmason
2018-03-16 19:27       ` [PATCH v3 4/7] gc --auto: exclude base pack if not enough mem to "repack -ad" Nguyễn Thái Ngọc Duy
2018-03-16 21:14         ` Ævar Arnfjörð Bjarmason
2018-03-16 19:27       ` [PATCH v3 5/7] gc: handle a corner case in gc.bigPackThreshold Nguyễn Thái Ngọc Duy
2018-03-16 21:10         ` Ævar Arnfjörð Bjarmason
2018-03-16 19:27       ` [PATCH v3 6/7] pack-objects: show some progress when counting kept objects Nguyễn Thái Ngọc Duy
2018-03-16 19:27       ` [PATCH v3 7/7] pack-objects: display progress in get_object_details() Nguyễn Thái Ngọc Duy
2018-03-24  7:25       ` [PATCH v4 0/7] nd/repack-keep-pack updates Nguyễn Thái Ngọc Duy
2018-03-24  7:25         ` [PATCH v4 1/7] t7700: have closing quote of a test at the beginning of line Nguyễn Thái Ngọc Duy
2018-03-24  7:25         ` [PATCH v4 2/7] repack: add --keep-pack option Nguyễn Thái Ngọc Duy
2018-03-24  7:25         ` [PATCH v4 3/7] gc: add --keep-largest-pack option Nguyễn Thái Ngọc Duy
2018-03-24  7:25         ` [PATCH v4 4/7] gc: add gc.bigPackThreshold config Nguyễn Thái Ngọc Duy
2018-03-24  7:25         ` [PATCH v4 5/7] gc: handle a corner case in gc.bigPackThreshold Nguyễn Thái Ngọc Duy
2018-03-24  7:25         ` [PATCH v4 6/7] gc --auto: exclude base pack if not enough mem to "repack -ad" Nguyễn Thái Ngọc Duy
2018-03-24  7:25         ` [PATCH v4 7/7] pack-objects: show some progress when counting kept objects Nguyễn Thái Ngọc Duy
2018-03-02 10:18 ` Reduce pack-objects memory footprint? Duy Nguyen
2018-03-02 10:37   ` Eric Wong
2018-03-02 10:54   ` Jeff King
2018-03-02 10:55     ` Duy Nguyen
2018-03-02 14:38     ` Duy Nguyen
2018-03-17 22:05 ` Why does pack-objects use so much memory on incremental packing? Ævar Arnfjörð Bjarmason
2018-03-18  8:37   ` Duy Nguyen
2018-03-20  5:28   ` Jeff King

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180316192745.19557-1-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --cc=avarab@gmail.com \
    --cc=e@80x24.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

git@vger.kernel.org mailing list mirror (one of many)

Archives are clonable:
	git clone --mirror https://public-inbox.org/git
	git clone --mirror http://ou63pmih66umazou.onion/git
	git clone --mirror http://czquwvybam4bgbro.onion/git
	git clone --mirror http://hjrcffqmbrq6wope.onion/git

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.version-control.git
	nntp://ou63pmih66umazou.onion/inbox.comp.version-control.git
	nntp://czquwvybam4bgbro.onion/inbox.comp.version-control.git
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.version-control.git
	nntp://news.gmane.org/gmane.comp.version-control.git

 note: .onion URLs require Tor: https://www.torproject.org/
       or Tor2web: https://www.tor2web.org/

AGPL code for this site: git clone https://public-inbox.org/ public-inbox