git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 00/24] pack-bitmap: pseudo-merge reachability bitmaps

From
Taylor Blau <me@ttaylorr.com>
Date
May 23, 2024, 21:26 UTC
Message-ID
<cover.1716499565.git.me@ttaylorr.com>
In-Reply-To
<cover.1710972293.git.me@ttaylorr.com>
Here is another reroll my topic to introduce pseudo-merge bitmaps.

The implementation is still relatively unchanged compared to last time, save for the review that Peff provided on the remaining parts of this series.

As usual, there is a range-diff below, but the significant changes since last time are as follows:

  - replace git_config_float() with git_config_double() (and matching
    tweaks in the callers)
  - add a NOTE to gitpacking(7) reflecting that the pseudo-merge bitmaps
    feature is considered experimental
  - add a length check when reading extended pseudo merges via the
    pseudo_merge_ext_at() function
  - replace the new `--date` option for `test_commit_bulk` with a
    `--notick` option (and set the GIT_COMMITTER_DATE values
    appropriately at the callers)
  - fix broken performance tests due to a typo on "pseudo", and include
    results from a large repository.
The series is still based on 'tb/pack-bitmap-write-cleanups'.
Taylor Blau (24):
  Documentation/gitpacking.txt: initial commit
  Documentation/gitpacking.txt: describe pseudo-merge bitmaps
  Documentation/technical: describe pseudo-merge bitmaps format
  ewah: implement `ewah_bitmap_is_subset()`
  pack-bitmap: move some initialization to `bitmap_writer_init()`
  pseudo-merge.ch: initial commit
  pack-bitmap-write: support storing pseudo-merge commits
  pack-bitmap: implement `bitmap_writer_has_bitmapped_object_id()`
  pack-bitmap: make `bitmap_writer_push_bitmapped_commit()` public
  config: introduce `git_config_double()`
  pseudo-merge: implement support for selecting pseudo-merge commits
  pack-bitmap-write.c: write pseudo-merge table
  pack-bitmap: extract `read_bitmap()` function
  pseudo-merge: scaffolding for reads
  pack-bitmap.c: read pseudo-merge extension
  pseudo-merge: implement support for reading pseudo-merge commits
  ewah: implement `ewah_bitmap_popcount()`
  pack-bitmap: implement test helpers for pseudo-merge
  t/test-lib-functions.sh: support `--notick` in `test_commit_bulk()`
  pack-bitmap.c: use pseudo-merges during traversal
  pack-bitmap: extra trace2 information
  ewah: `bitmap_equals_ewah()`
  pseudo-merge: implement support for finding existing merges
  t/perf: implement performance tests for pseudo-merge bitmaps
 Documentation/Makefile                       |   1 +
 Documentation/config.txt                     |   2 +
 Documentation/config/bitmap-pseudo-merge.txt |  91 +++
 Documentation/gitpacking.txt                 | 189 +++++
 Documentation/technical/bitmap-format.txt    | 132 ++++
 Makefile                                     |   1 +
 builtin/pack-objects.c                       |   3 +-
 config.c                                     |   9 +
 config.h                                     |   7 +
 ewah/bitmap.c                                |  76 ++
 ewah/ewok.h                                  |   8 +
 midx-write.c                                 |   2 +-
 object.h                                     |   2 +-
 pack-bitmap-write.c                          | 274 ++++++-
 pack-bitmap.c                                | 359 ++++++++-
 pack-bitmap.h                                |  19 +-
 parse.c                                      |  29 +
 parse.h                                      |   1 +
 pseudo-merge.c                               | 756 +++++++++++++++++++
 pseudo-merge.h                               | 216 ++++++
 t/helper/test-bitmap.c                       |  34 +-
 t/perf/p5333-pseudo-merge-bitmaps.sh         |  32 +
 t/t5333-pseudo-merge-bitmaps.sh              | 393 ++++++++++
 t/test-lib-functions.sh                      |   9 +-
 24 files changed, 2590 insertions(+), 55 deletions(-)
 create mode 100644 Documentation/config/bitmap-pseudo-merge.txt
 create mode 100644 Documentation/gitpacking.txt
 create mode 100644 pseudo-merge.c
 create mode 100644 pseudo-merge.h
 create mode 100755 t/perf/p5333-pseudo-merge-bitmaps.sh
 create mode 100755 t/t5333-pseudo-merge-bitmaps.sh
Range-diff against v3:
 -:  ----------- >  1:  0f20c9becf4 Documentation/gitpacking.txt: initial commit
 1:  528b591bd84 !  2:  48afaa74928 Documentation/gitpacking.txt: describe pseudo-merge bitmaps
    @@ Documentation/gitpacking.txt: There are many aspects of packing in Git that are
      
     +== Pseudo-merge bitmaps
     +
    ++NOTE: Pseudo-merge bitmaps are considered an experimental feature, so
    ++the configuration and many of the ideas are subject to change.
    ++
     +=== Background
     +
     +Reachability bitmaps are most efficient when we have on-disk stored
 2:  12f318b3d7e =  3:  44046f83c1a Documentation/technical: describe pseudo-merge bitmaps format
 3:  40eb6137618 =  4:  211d6f14128 ewah: implement `ewah_bitmap_is_subset()`
 4:  487fb7c6e9c =  5:  650cac2dcf9 pack-bitmap: move some initialization to `bitmap_writer_init()`
 5:  827732acf99 =  6:  6647d8832ce pseudo-merge.ch: initial commit
 6:  8608dd1860f =  7:  e8ef1ef5ee4 pack-bitmap-write: support storing pseudo-merge commits
 7:  99d2b6872ba =  8:  fe458728c8a pack-bitmap: implement `bitmap_writer_has_bitmapped_object_id()`
 8:  e7209c60fa5 =  9:  6bf372f4020 pack-bitmap: make `bitmap_writer_push_bitmapped_commit()` public
 9:  3070135eb4b ! 10:  6c77671ae9c config: introduce git_config_float()
    @@ Metadata
     Author: Taylor Blau <me@ttaylorr.com>
     
      ## Commit message ##
    -    config: introduce git_config_float()
    +    config: introduce `git_config_double()`
     
    -    Future commits will want to parse a floating point value from
    -    configuration, but we have no way to parse such a value prior to this
    -    patch.
    +    Future commits will want to parse a double-precision floating point
    +    value from configuration, but we have no way to parse such a value prior
    +    to this patch.
     
    -    The core of the routine is implemented in git_parse_float(). Unlike
    +    The core of the routine is implemented in git_parse_double(). Unlike
         git_parse_unsigned() and git_parse_signed(), however, the function
    -    implemented here only works on type "float", and not related types like
    -    "double", or "long double".
    +    implemented here only works on type "double", and not related types like
    +    "float", or "long double".
     
    -    This is because "double" and "long double" use different functions to
    -    convert from ASCII strings to floating point values (strtod() and
    +    This is because "float" and "long double" use different functions to
    +    convert from ASCII strings to floating point values (strtof() and
         strtold(), respectively). Likewise, there is no pointer type that can
         assign to any of these values (except for "void *"), so the only way to
         define this trio of functions would be with a macro expansion that is
         parameterized over the floating point type and conversion function.
     
         That is all doable, but likely to be overkill given our current needs,
    -    which is only to parse floats.
    +    which is only to parse double-precision floats.
     
         Signed-off-by: Taylor Blau <me@ttaylorr.com>
     
    @@ config.c: ssize_t git_config_ssize_t(const char *name, const char *value,
      	return ret;
      }
      
    -+float git_config_float(const char *name, const char *value,
    -+		       const struct key_value_info *kvi)
    ++double git_config_double(const char *name, const char *value,
    ++			 const struct key_value_info *kvi)
     +{
    -+	float ret;
    -+	if (!git_parse_float(value, &ret))
    ++	double ret;
    ++	if (!git_parse_double(value, &ret))
     +		die_bad_number(name, value, kvi);
     +	return ret;
     +}
    @@ config.h: unsigned long git_config_ulong(const char *, const char *,
      			   const struct key_value_info *);
      
     +/**
    -+ * Identical to `git_config_int`, but for floating point values.
    ++ * Identically to `git_config_double`, but for double-precision floating point
    ++ * values.
     + */
    -+float git_config_float(const char *, const char *,
    -+		       const struct key_value_info *);
    ++double git_config_double(const char *, const char *,
    ++			 const struct key_value_info *);
     +
      /**
       * Same as `git_config_bool`, except that integers are returned as-is, and
    @@ parse.c: int git_parse_ssize_t(const char *value, ssize_t *ret)
      	return 1;
      }
      
    -+int git_parse_float(const char *value, float *ret)
    ++int git_parse_double(const char *value, double *ret)
     +{
     +	char *end;
    -+	float val;
    ++	double val;
     +	uintmax_t factor;
     +
     +	if (!value || !*value) {
    @@ parse.c: int git_parse_ssize_t(const char *value, ssize_t *ret)
     +	}
     +
     +	errno = 0;
    -+	val = strtof(value, &end);
    ++	val = strtod(value, &end);
     +	if (errno == ERANGE)
     +		return 0;
     +	if (end == value) {
    @@ parse.h: int git_parse_ssize_t(const char *, ssize_t *);
      int git_parse_ulong(const char *, unsigned long *);
      int git_parse_int(const char *value, int *ret);
      int git_parse_int64(const char *value, int64_t *ret);
    -+int git_parse_float(const char *value, float *ret);
    ++int git_parse_double(const char *value, double *ret);
      
      /**
       * Same as `git_config_bool`, except that it returns -1 on error rather
10:  3029473c094 ! 11:  180072ce848 pseudo-merge: implement support for selecting pseudo-merge commits
    @@ Documentation/config/bitmap-pseudo-merge.txt (new)
     @@
     +NOTE: The configuration options in `bitmapPseudoMerge.*` are considered
     +EXPERIMENTAL and may be subject to change or be removed entirely in the
    -+future.
    ++future. For more information about the pseudo-merge bitmap feature, see
    ++the "Pseudo-merge bitmaps" section of linkgit:gitpacking[7].
     +
     +bitmapPseudoMerge.<name>.pattern::
     +	Regular expression used to match reference names. Commits
    @@ pseudo-merge.c
     +#include "alloc.h"
     +#include "progress.h"
     +
    -+#define DEFAULT_PSEUDO_MERGE_DECAY 1.0f
    ++#define DEFAULT_PSEUDO_MERGE_DECAY 1.0
     +#define DEFAULT_PSEUDO_MERGE_MAX_MERGES 64
     +#define DEFAULT_PSEUDO_MERGE_SAMPLE_RATE 1
     +#define DEFAULT_PSEUDO_MERGE_THRESHOLD approxidate("1.week.ago")
     +#define DEFAULT_PSEUDO_MERGE_STABLE_THRESHOLD approxidate("1.month.ago")
     +#define DEFAULT_PSEUDO_MERGE_STABLE_SIZE 512
     +
    -+static float gitexp(float base, int exp)
    ++static double gitexp(double base, int exp)
     +{
    -+	float result = 1;
    ++	double result = 1;
     +	while (1) {
     +		if (exp % 2)
     +			result *= base;
    @@ pseudo-merge.c
     +					const struct pseudo_merge_matches *matches,
     +					uint32_t i)
     +{
    -+	float C = 0.0f;
    ++	double C = 0.0f;
     +	uint32_t n;
     +
     +	/*
    @@ pseudo-merge.c
     +	 *   { 5012, 1772, 964, 626, 448, 341, 271, 221, 186, 158 }
     +	 */
     +	for (n = 0; n < group->max_merges; n++)
    -+		C += 1.0f / gitexp(n + 1, group->decay);
    ++		C += 1.0 / gitexp(n + 1, group->decay);
     +	C = matches->unstable_nr / C;
     +
     +	return (uint32_t)((C / gitexp(i + 1, group->decay)) + 0.5);
    @@ pseudo-merge.c
     +
     +		strbuf_release(&re);
     +	} else if (!strcmp(key, "decay")) {
    -+		group->decay = git_config_float(var, value, ctx->kvi);
    ++		group->decay = git_config_double(var, value, ctx->kvi);
     +		if (group->decay < 0) {
     +			warning(_("%s must be non-negative, using default"), var);
     +			group->decay = DEFAULT_PSEUDO_MERGE_DECAY;
     +		}
     +	} else if (!strcmp(key, "samplerate")) {
    -+		group->sample_rate = git_config_float(var, value, ctx->kvi);
    ++		group->sample_rate = git_config_double(var, value, ctx->kvi);
     +		if (!(0 <= group->sample_rate && group->sample_rate <= 1)) {
     +			warning(_("%s must be between 0 and 1, using default"), var);
     +			group->sample_rate = DEFAULT_PSEUDO_MERGE_SAMPLE_RATE;
    @@ pseudo-merge.c
     +			struct commit *c = matches->unstable[j];
     +			struct pseudo_merge_commit_idx *pmc;
     +
    -+			if (j % (uint32_t)(1.0f / group->sample_rate))
    ++			if (j % (uint32_t)(1.0 / group->sample_rate))
     +				continue;
     +
     +			pmc = pseudo_merge_idx(writer->pseudo_merge_commits,
    @@ pseudo-merge.h
     +	 * Pseudo-merge grouping parameters. See git-config(1) for
     +	 * more information.
     +	 */
    -+	float decay;
    ++	double decay;
     +	int max_merges;
    -+	float sample_rate;
    ++	double sample_rate;
     +	int stable_size;
     +	timestamp_t threshold;
     +	timestamp_t stable_threshold;
11:  311226f65c2 = 12:  90df19e43f5 pack-bitmap-write.c: write pseudo-merge table
12:  55dd7a8023e = 13:  c653a10f8e4 pack-bitmap: extract `read_bitmap()` function
13:  3cc5434e44e = 14:  435ac048003 pseudo-merge: scaffolding for reads
14:  7664f5f9648 = 15:  fa7a948964c pack-bitmap.c: read pseudo-merge extension
15:  8ba0a9c5402 ! 16:  3a72e66cb69 pseudo-merge: implement support for reading pseudo-merge commits
    @@ pseudo-merge.c
      #include "progress.h"
     +#include "hex.h"
      
    - #define DEFAULT_PSEUDO_MERGE_DECAY 1.0f
    + #define DEFAULT_PSEUDO_MERGE_DECAY 1.0
      #define DEFAULT_PSEUDO_MERGE_MAX_MERGES 64
     @@ pseudo-merge.c: void free_pseudo_merge_map(struct pseudo_merge_map *pm)
      	}
    @@ pseudo-merge.c: void free_pseudo_merge_map(struct pseudo_merge_map *pm)
     +		return error(_("extended pseudo-merge read out-of-bounds "
     +			       "(%"PRIuMAX" >= %"PRIuMAX")"),
     +			     (uintmax_t)at, (uintmax_t)pm->map_size);
    ++	if (at + 4 >= pm->map_size)
    ++		return error(_("extended pseudo-merge entry is too short "
    ++			       "(%"PRIuMAX" >= %"PRIuMAX")"),
    ++			     (uintmax_t)(at + 4), (uintmax_t)pm->map_size);
     +
     +	ext->nr = get_be32(pm->map + at);
     +	ext->ptr = pm->map + at + sizeof(uint32_t);
16:  2c02f303b6f = 17:  42a836fda8a ewah: implement `ewah_bitmap_popcount()`
17:  82cce72bf55 = 18:  06ba1a5bbfd pack-bitmap: implement test helpers for pseudo-merge
18:  890f6c4b9de ! 19:  936f6d1b7e3 t/test-lib-functions.sh: support `--date` in `test_commit_bulk()`
    @@ Metadata
     Author: Taylor Blau <me@ttaylorr.com>
     
      ## Commit message ##
    -    t/test-lib-functions.sh: support `--date` in `test_commit_bulk()`
    +    t/test-lib-functions.sh: support `--notick` in `test_commit_bulk()`
     
         One of the tests we'll want to add for pseudo-merge bitmaps needs to be
         able to generate a large number of commits at a specific date.
     
    -    Support the `--date` option (with identical semantics to the `--date`
    -    option for `test_commit()`) within `test_commit_bulk` as a prerequisite
    -    for that.
    +    Support the `--notick` option (with identical semantics to the
    +    `--notick` option for `test_commit()`) within `test_commit_bulk` as a
    +    prerequisite for that. Callers can then set the various _DATE variables
    +    themselves.
     
         Signed-off-by: Taylor Blau <me@ttaylorr.com>
     
    @@ t/test-lib-functions.sh: test_commit_bulk () {
      			filename="${1#--*=}-%s.t"
      			contents="${1#--*=} %s"
      			;;
    -+		--date)
    ++		--notick)
     +			notick=yes
    -+			GIT_COMMITTER_DATE="$2"
    -+			GIT_AUTHOR_DATE="$2"
    -+			shift
     +			;;
      		-*)
      			BUG "invalid test_commit_bulk option: $1"
19:  41691824f78 ! 20:  cad38608aae pack-bitmap.c: use pseudo-merges during traversal
    @@ t/t5333-pseudo-merge-bitmaps.sh (new)
     +		new="1672549200" && # 2023-01-01
     +		old="1641013200" && # 2022-01-01
     +
    -+		test_commit_bulk --message="new" --date "$new +0000" 128 &&
    -+		test_commit_bulk --message="old" --date "$old +0000" 128 &&
    -+		test_tick &&
    ++		GIT_COMMITTER_DATE="$new +0000" &&
    ++		export GIT_COMMITTER_DATE &&
    ++		test_commit_bulk --message="new" --notick 128 &&
    ++
    ++		GIT_COMMITTER_DATE="$old +0000" &&
    ++		export GIT_COMMITTER_DATE &&
    ++		test_commit_bulk --message="old" --notick 128 &&
     +
     +		tag_everything &&
     +
    @@ t/t5333-pseudo-merge-bitmaps.sh (new)
     +		mid="1654059600" && # 2022-06-01
     +		old="1641013200" && # 2022-01-01
     +
    -+		test_commit_bulk --message="mid" --date "$mid +0000" 128 &&
    -+		test_tick &&
    ++		GIT_COMMITTER_DATE="$mid +0000" &&
    ++		export GIT_COMMITTER_DATE &&
    ++		test_commit_bulk --message="mid" --notick 128 &&
     +
     +		git for-each-ref --format="delete %(refname)" refs/tags >in &&
     +		git update-ref --stdin <in &&
20:  a34a60c3ef8 = 21:  9240b06a7d8 pack-bitmap: extra trace2 information
21:  da2fb5b4b48 = 22:  625596a1432 ewah: `bitmap_equals_ewah()`
22:  ff21247281f ! 23:  fdd506d4544 pseudo-merge: implement support for finding existing merges
    @@ t/t5333-pseudo-merge-bitmaps.sh: test_expect_success 'pseudo-merge overlap stale
     +		stable="1641013200" && # 2022-01-01
     +		unstable="1672549200" && # 2023-01-01
     +
    -+		for date in $stable $unstable
    -+		do
    -+			test_commit_bulk --date "$date +0000" 128 &&
    -+			test_tick || return 1
    -+		done &&
    ++		GIT_COMMITTER_DATE="$stable +0000" &&
    ++		export GIT_COMMITTER_DATE &&
    ++		test_commit_bulk --notick 128 &&
    ++		GIT_COMMITTER_DATE="$unstable +0000" &&
    ++		export GIT_COMMITTER_DATE &&
    ++		test_commit_bulk --notick 128 &&
     +
     +		tag_everything &&
     +
23:  6a6d88fa512 ! 24:  cf0316ad0e9 t/perf: implement performace tests for pseudo-merge bitmaps
    @@ Metadata
     Author: Taylor Blau <me@ttaylorr.com>
     
      ## Commit message ##
    -    t/perf: implement performace tests for pseudo-merge bitmaps
    +    t/perf: implement performance tests for pseudo-merge bitmaps
     
         Implement a straightforward performance test demonstrating the benefit
         of pseudo-merge bitmaps by measuring how long it takes to count
    @@ Commit message
     
             Test                                                                this tree
             -----------------------------------------------------------------------------------
    -        5333.2: git rev-list --count --all --objects (no bitmaps)           3.46(3.37+0.09)
    -        5333.3: git rev-list --count --all --objects (no pseudo-merges)     0.13(0.11+0.01)
    +        5333.2: git rev-list --count --all --objects (no bitmaps)           3.54(3.45+0.08)
    +        5333.3: git rev-list --count --all --objects (no pseudo-merges)     0.43(0.40+0.03)
             5333.4: git rev-list --count --all --objects (with pseudo-merges)   0.12(0.11+0.01)
     
    +    On a private repository which is much larger, and has many spikey parts
    +    of history that aren't merged into the 'master' branch, the results are
    +    as follows:
    +
    +        Test                                                                this tree
    +        ---------------------------------------------------------------------------------------
    +        5333.1: git rev-list --count --all --objects (no bitmaps)           122.29(121.31+0.97)
    +        5333.2: git rev-list --count --all --objects (no pseudo-merges)     21.88(21.30+0.58)
    +        5333.3: git rev-list --count --all --objects (with pseudo-merges)   5.05(4.77+0.28)
    +
         Signed-off-by: Taylor Blau <me@ttaylorr.com>
     
      ## t/perf/p5333-pseudo-merge-bitmaps.sh (new) ##
    @@ t/perf/p5333-pseudo-merge-bitmaps.sh (new)
     +'
     +
     +test_perf 'git rev-list --count --all --objects (no pseudo-merges)' '
    -+	GIT_TEST_USE_PSEDUO_MERGES=0 \
    ++	GIT_TEST_USE_PSEUDO_MERGES=0 \
     +		git rev-list --objects --all --use-bitmap-index
     +'
     +
     +test_perf 'git rev-list --count --all --objects (with pseudo-merges)' '
    -+	GIT_TEST_USE_PSEDUO_MERGES=1 \
    ++	GIT_TEST_USE_PSEUDO_MERGES=1 \
     +		git rev-list --objects --all --use-bitmap-index
     +'
     +
base-commit: bf65967764f34adc2ca00d4c8195840ad3e4e127
-- 
2.45.1.175.gcf0316ad0e9
Previous: Taylor BlauNext: Taylor Blau
Message 130 of 157 in “pack-bitmap: pseudo-merge reachability bitmaps”
  1. 00/24 pack-bitmap: pseudo-merge reachability bitmapsTaylor Blau, Mar 20, 2024
  2. 01/24 Documentation/technical: describe pseudo-merge bitmaps formatTaylor Blau, Mar 20, 2024
  3. Junio C HamanoMar 21, 2024
  4. Taylor BlauMar 21, 2024
  5. Junio C HamanoMar 21, 2024
  6. 02/24 config: repo_config_get_expiry()Taylor Blau, Mar 20, 2024
  7. Jeff KingApr 10, 2024
  8. Taylor BlauApr 29, 2024
  9. 03/24 ewah: implement `ewah_bitmap_is_subset()`Taylor Blau, Mar 20, 2024
  10. Jeff KingApr 10, 2024
  11. Taylor BlauApr 29, 2024
  12. 04/24 pack-bitmap: drop unused `max_bitmaps` parameterTaylor Blau, Mar 20, 2024
  13. Jeff KingApr 10, 2024
  14. 05/24 pack-bitmap: move some initialization to `bitmap_writer_init()`Taylor Blau, Mar 20, 2024
  15. Jeff KingApr 10, 2024
  16. 06/24 pseudo-merge.ch: initial commitTaylor Blau, Mar 20, 2024
  17. 07/24 pack-bitmap-write: support storing pseudo-merge commitsTaylor Blau, Mar 20, 2024
  18. 08/24 pack-bitmap: implement `bitmap_writer_has_bitmapped_object_id()`Taylor Blau, Mar 20, 2024
  19. 09/24 pack-bitmap: make `bitmap_writer_push_bitmapped_commit()` publicTaylor Blau, Mar 20, 2024
  20. 10/24 pseudo-merge: implement support for selecting pseudo-merge commitsTaylor Blau, Mar 20, 2024
  21. 11/24 pack-bitmap-write.c: select pseudo-merge commitsTaylor Blau, Mar 20, 2024
  22. 12/24 pack-bitmap-write.c: write pseudo-merge tableTaylor Blau, Mar 20, 2024
  23. 13/24 pack-bitmap: extract `read_bitmap()` functionTaylor Blau, Mar 20, 2024
  24. 14/24 pseudo-merge: scaffolding for readsTaylor Blau, Mar 20, 2024
  25. 15/24 pack-bitmap.c: read pseudo-merge extensionTaylor Blau, Mar 20, 2024
  26. 16/24 pseudo-merge: implement support for reading pseudo-merge commitsTaylor Blau, Mar 20, 2024
  27. 17/24 ewah: implement `ewah_bitmap_popcount()`Taylor Blau, Mar 20, 2024
  28. 18/24 pack-bitmap: implement test helpers for pseudo-mergeTaylor Blau, Mar 20, 2024
  29. 19/24 t/test-lib-functions.sh: support `--date` in `test_commit_bulk()`Taylor Blau, Mar 20, 2024
  30. 20/24 pack-bitmap.c: use pseudo-merges during traversalTaylor Blau, Mar 20, 2024
  31. 21/24 pack-bitmap: extra trace2 informationTaylor Blau, Mar 20, 2024
  32. 22/24 ewah: `bitmap_equals_ewah()`Taylor Blau, Mar 20, 2024
  33. 23/24 pseudo-merge: implement support for finding existing mergesTaylor Blau, Mar 20, 2024
  34. 24/24 t/perf: implement performace tests for pseudo-merge bitmapsTaylor Blau, Mar 20, 2024
  35. Junio C HamanoMar 21, 2024
  36. 00/23 pack-bitmap: pseudo-merge reachability bitmapsTaylor Blau, Apr 29, 2024
  37. 01/23 Documentation/technical: describe pseudo-merge bitmaps formatTaylor Blau, Apr 29, 2024
  38. Patrick SteinhardtMay 6, 2024
  39. Taylor BlauMay 6, 2024
  40. Patrick SteinhardtMay 10, 2024
  41. Taylor BlauMay 13, 2024
  42. Patrick SteinhardtMay 14, 2024
  43. 02/23 ewah: implement `ewah_bitmap_is_subset()`Taylor Blau, Apr 29, 2024
  44. 03/23 pack-bitmap: drop unused `max_bitmaps` parameterTaylor Blau, Apr 29, 2024
  45. 04/23 pack-bitmap: move some initialization to `bitmap_writer_init()`Taylor Blau, Apr 29, 2024
  46. Patrick SteinhardtMay 6, 2024
  47. Taylor BlauMay 6, 2024
  48. 05/23 pseudo-merge.ch: initial commitTaylor Blau, Apr 29, 2024
  49. 06/23 pack-bitmap-write: support storing pseudo-merge commitsTaylor Blau, Apr 29, 2024
  50. Patrick SteinhardtMay 6, 2024
  51. Taylor BlauMay 6, 2024
  52. Patrick SteinhardtMay 10, 2024
  53. Jeff KingMay 13, 2024
  54. Taylor BlauMay 13, 2024
  55. 07/23 pack-bitmap: implement `bitmap_writer_has_bitmapped_object_id()`Taylor Blau, Apr 29, 2024
  56. 08/23 pack-bitmap: make `bitmap_writer_push_bitmapped_commit()` publicTaylor Blau, Apr 29, 2024
  57. Jeff KingMay 13, 2024
  58. Taylor BlauMay 14, 2024
  59. 09/23 pseudo-merge: implement support for selecting pseudo-merge commitsTaylor Blau, Apr 29, 2024
  60. Patrick SteinhardtMay 6, 2024
  61. Taylor BlauMay 6, 2024
  62. Jeff KingMay 13, 2024
  63. Taylor BlauMay 14, 2024
  64. Jeff KingMay 16, 2024
  65. Junio C HamanoMay 16, 2024
  66. 10/23 pack-bitmap-write.c: select pseudo-merge commitsTaylor Blau, Apr 29, 2024
  67. Patrick SteinhardtMay 6, 2024
  68. Taylor BlauMay 6, 2024
  69. Patrick SteinhardtMay 10, 2024
  70. 11/23 pack-bitmap-write.c: write pseudo-merge tableTaylor Blau, Apr 29, 2024
  71. 12/23 pack-bitmap: extract `read_bitmap()` functionTaylor Blau, Apr 29, 2024
  72. 13/23 pseudo-merge: scaffolding for readsTaylor Blau, Apr 29, 2024
  73. 14/23 pack-bitmap.c: read pseudo-merge extensionTaylor Blau, Apr 29, 2024
  74. 15/23 pseudo-merge: implement support for reading pseudo-merge commitsTaylor Blau, Apr 29, 2024
  75. 16/23 ewah: implement `ewah_bitmap_popcount()`Taylor Blau, Apr 29, 2024
  76. 17/23 pack-bitmap: implement test helpers for pseudo-mergeTaylor Blau, Apr 29, 2024
  77. 18/23 t/test-lib-functions.sh: support `--date` in `test_commit_bulk()`Taylor Blau, Apr 29, 2024
  78. 19/23 pack-bitmap.c: use pseudo-merges during traversalTaylor Blau, Apr 29, 2024
  79. 20/23 pack-bitmap: extra trace2 informationTaylor Blau, Apr 29, 2024
  80. 21/23 ewah: `bitmap_equals_ewah()`Taylor Blau, Apr 29, 2024
  81. 22/23 pseudo-merge: implement support for finding existing mergesTaylor Blau, Apr 29, 2024
  82. 23/23 t/perf: implement performace tests for pseudo-merge bitmapsTaylor Blau, Apr 29, 2024
  83. Junio C HamanoApr 30, 2024
  84. Taylor BlauMay 1, 2024
  85. 00/30 pack-bitmap: pseudo-merge reachability bitmapsTaylor Blau, May 21, 2024
  86. 01/30 object.h: add flags allocated by pack-bitmap.hTaylor Blau, May 21, 2024
  87. Taylor BlauMay 21, 2024
  88. 07/30 Documentation/gitpacking.txt: initial commitTaylor Blau, May 21, 2024
  89. 08/30 Documentation/gitpacking.txt: describe pseudo-merge bitmapsTaylor Blau, May 21, 2024
  90. 09/30 Documentation/technical: describe pseudo-merge bitmaps formatTaylor Blau, May 21, 2024
  91. 10/30 ewah: implement `ewah_bitmap_is_subset()`Taylor Blau, May 21, 2024
  92. 11/30 pack-bitmap: move some initialization to `bitmap_writer_init()`Taylor Blau, May 21, 2024
  93. 12/30 pseudo-merge.ch: initial commitTaylor Blau, May 21, 2024
  94. 13/30 pack-bitmap-write: support storing pseudo-merge commitsTaylor Blau, May 21, 2024
  95. 14/30 pack-bitmap: implement `bitmap_writer_has_bitmapped_object_id()`Taylor Blau, May 21, 2024
  96. 15/30 pack-bitmap: make `bitmap_writer_push_bitmapped_commit()` publicTaylor Blau, May 21, 2024
  97. 16/30 config: introduce git_config_float()Taylor Blau, May 21, 2024
  98. Jeff KingMay 23, 2024
  99. Taylor BlauMay 23, 2024
  100. 17/30 pseudo-merge: implement support for selecting pseudo-merge commitsTaylor Blau, May 21, 2024
  101. Jeff KingMay 23, 2024
  102. Taylor BlauMay 23, 2024
  103. 18/30 pack-bitmap-write.c: write pseudo-merge tableTaylor Blau, May 21, 2024
  104. 19/30 pack-bitmap: extract `read_bitmap()` functionTaylor Blau, May 21, 2024
  105. 20/30 pseudo-merge: scaffolding for readsTaylor Blau, May 21, 2024
  106. 21/30 pack-bitmap.c: read pseudo-merge extensionTaylor Blau, May 21, 2024
  107. 22/30 pseudo-merge: implement support for reading pseudo-merge commitsTaylor Blau, May 21, 2024
  108. Jeff KingMay 23, 2024
  109. Taylor BlauMay 23, 2024
  110. 23/30 ewah: implement `ewah_bitmap_popcount()`Taylor Blau, May 21, 2024
  111. 24/30 pack-bitmap: implement test helpers for pseudo-mergeTaylor Blau, May 21, 2024
  112. 25/30 t/test-lib-functions.sh: support `--date` in `test_commit_bulk()`Taylor Blau, May 21, 2024
  113. Jeff KingMay 23, 2024
  114. Junio C HamanoMay 23, 2024
  115. Taylor BlauMay 23, 2024
  116. 26/30 pack-bitmap.c: use pseudo-merges during traversalTaylor Blau, May 21, 2024
  117. Jeff KingMay 23, 2024
  118. Taylor BlauMay 23, 2024
  119. 27/30 pack-bitmap: extra trace2 informationTaylor Blau, May 21, 2024
  120. 28/30 ewah: `bitmap_equals_ewah()`Taylor Blau, May 21, 2024
  121. 29/30 pseudo-merge: implement support for finding existing mergesTaylor Blau, May 21, 2024
  122. 30/30 t/perf: implement performace tests for pseudo-merge bitmapsTaylor Blau, May 21, 2024
  123. Jeff KingMay 23, 2024
  124. Taylor BlauMay 23, 2024
  125. Jeff KingMay 25, 2024
  126. Jeff KingMay 23, 2024
  127. Taylor BlauMay 23, 2024
  128. Jeff KingMay 25, 2024
  129. Taylor BlauMay 23, 2024
  130. 00/24 pack-bitmap: pseudo-merge reachability bitmapsTaylor Blau, May 23, 2024
  131. 01/24 Documentation/gitpacking.txt: initial commitTaylor Blau, May 23, 2024
  132. 02/24 Documentation/gitpacking.txt: describe pseudo-merge bitmapsTaylor Blau, May 23, 2024
  133. 03/24 Documentation/technical: describe pseudo-merge bitmaps formatTaylor Blau, May 23, 2024
  134. 04/24 ewah: implement `ewah_bitmap_is_subset()`Taylor Blau, May 23, 2024
  135. 05/24 pack-bitmap: move some initialization to `bitmap_writer_init()`Taylor Blau, May 23, 2024
  136. 06/24 pseudo-merge.ch: initial commitTaylor Blau, May 23, 2024
  137. 07/24 pack-bitmap-write: support storing pseudo-merge commitsTaylor Blau, May 23, 2024
  138. 08/24 pack-bitmap: implement `bitmap_writer_has_bitmapped_object_id()`Taylor Blau, May 23, 2024
  139. 09/24 pack-bitmap: make `bitmap_writer_push_bitmapped_commit()` publicTaylor Blau, May 23, 2024
  140. 10/24 config: introduce `git_config_double()`Taylor Blau, May 23, 2024
  141. 11/24 pseudo-merge: implement support for selecting pseudo-merge commitsTaylor Blau, May 23, 2024
  142. Jeff KingMay 25, 2024
  143. 12/24 pack-bitmap-write.c: write pseudo-merge tableTaylor Blau, May 23, 2024
  144. 13/24 pack-bitmap: extract `read_bitmap()` functionTaylor Blau, May 23, 2024
  145. 14/24 pseudo-merge: scaffolding for readsTaylor Blau, May 23, 2024
  146. 15/24 pack-bitmap.c: read pseudo-merge extensionTaylor Blau, May 23, 2024
  147. 16/24 pseudo-merge: implement support for reading pseudo-merge commitsTaylor Blau, May 23, 2024
  148. 17/24 ewah: implement `ewah_bitmap_popcount()`Taylor Blau, May 23, 2024
  149. 18/24 pack-bitmap: implement test helpers for pseudo-mergeTaylor Blau, May 23, 2024
  150. 19/24 t/test-lib-functions.sh: support `--notick` in `test_commit_bulk()`Taylor Blau, May 23, 2024
  151. Jeff KingMay 25, 2024
  152. 20/24 pack-bitmap.c: use pseudo-merges during traversalTaylor Blau, May 23, 2024
  153. 21/24 pack-bitmap: extra trace2 informationTaylor Blau, May 23, 2024
  154. 22/24 ewah: `bitmap_equals_ewah()`Taylor Blau, May 23, 2024
  155. 23/24 pseudo-merge: implement support for finding existing mergesTaylor Blau, May 23, 2024
  156. 24/24 t/perf: implement performance tests for pseudo-merge bitmapsTaylor Blau, May 23, 2024
  157. Jeff KingMay 25, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.