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

[PATCH v6 0/5] Reftable support git-core

From
Han-Wen Nienhuys via GitGitGadget <gitgitgadget@gmail.com>
Date
Feb 18, 2020, 08:43 UTC
Message-ID
<pull.539.v6.git.1582015420.gitgitgadget@gmail.com>
In-Reply-To
<pull.539.v5.git.1581344060.gitgitgadget@gmail.com>
This adds the reftable library, and hooks it up as a ref backend.
Feedback wanted:
 * spots marked with XXX in the Git source code.
 * how to write a unittest script? From the command-line, it works; inside
   the test framework, it says: 
fatal: could not open '/usr/local/google/home/hanwen/vc/git/t/trash directory.t0031-reftable/.git/refs/heads' for writing: Is a directory
ie. the files backend already initialized.
 * what is a good test strategy? Could we have a CI flavor where we flip the
   default to reftable, and see how it fares?
v6
 * implement reflog expiry.
v7
 * support SHA256 as version 2 of the format.
Han-Wen Nienhuys (5):
  refs.h: clarify reflog iteration order
  create .git/refs in files-backend.c
  refs: document how ref_iterator_advance_fn should handle symrefs
  Add reftable library
  Reftable support for git-core
 .../technical/repository-version.txt          |    7 +
 Makefile                                      |   24 +-
 builtin/clone.c                               |    4 +-
 builtin/init-db.c                             |   57 +-
 cache.h                                       |    4 +-
 refs.c                                        |   20 +-
 refs.h                                        |    8 +-
 refs/files-backend.c                          |    6 +
 refs/refs-internal.h                          |    6 +
 refs/reftable-backend.c                       |  971 +++++++++++++++
 reftable/LICENSE                              |   31 +
 reftable/README.md                            |   19 +
 reftable/VERSION                              |   11 +
 reftable/basics.c                             |  196 +++
 reftable/basics.h                             |   37 +
 reftable/block.c                              |  413 ++++++
 reftable/block.h                              |   71 ++
 reftable/blocksource.h                        |   20 +
 reftable/bytes.c                              |    0
 reftable/config.h                             |    1 +
 reftable/constants.h                          |   25 +
 reftable/dump.c                               |   97 ++
 reftable/file.c                               |   97 ++
 reftable/iter.c                               |  229 ++++
 reftable/iter.h                               |   56 +
 reftable/merged.c                             |  290 +++++
 reftable/merged.h                             |   34 +
 reftable/pq.c                                 |  114 ++
 reftable/pq.h                                 |   34 +
 reftable/reader.c                             |  718 +++++++++++
 reftable/reader.h                             |   52 +
 reftable/record.c                             | 1107 +++++++++++++++++
 reftable/record.h                             |   79 ++
 reftable/reftable.h                           |  405 ++++++
 reftable/slice.c                              |  199 +++
 reftable/slice.h                              |   39 +
 reftable/stack.c                              |  984 +++++++++++++++
 reftable/stack.h                              |   40 +
 reftable/system.h                             |   59 +
 reftable/tree.c                               |   66 +
 reftable/tree.h                               |   24 +
 reftable/writer.c                             |  630 ++++++++++
 reftable/writer.h                             |   46 +
 reftable/zlib-compat.c                        |   92 ++
 repository.c                                  |    2 +
 repository.h                                  |    3 +
 setup.c                                       |   12 +-
 47 files changed, 7407 insertions(+), 32 deletions(-)
 create mode 100644 refs/reftable-backend.c
 create mode 100644 reftable/LICENSE
 create mode 100644 reftable/README.md
 create mode 100644 reftable/VERSION
 create mode 100644 reftable/basics.c
 create mode 100644 reftable/basics.h
 create mode 100644 reftable/block.c
 create mode 100644 reftable/block.h
 create mode 100644 reftable/blocksource.h
 create mode 100644 reftable/bytes.c
 create mode 100644 reftable/config.h
 create mode 100644 reftable/constants.h
 create mode 100644 reftable/dump.c
 create mode 100644 reftable/file.c
 create mode 100644 reftable/iter.c
 create mode 100644 reftable/iter.h
 create mode 100644 reftable/merged.c
 create mode 100644 reftable/merged.h
 create mode 100644 reftable/pq.c
 create mode 100644 reftable/pq.h
 create mode 100644 reftable/reader.c
 create mode 100644 reftable/reader.h
 create mode 100644 reftable/record.c
 create mode 100644 reftable/record.h
 create mode 100644 reftable/reftable.h
 create mode 100644 reftable/slice.c
 create mode 100644 reftable/slice.h
 create mode 100644 reftable/stack.c
 create mode 100644 reftable/stack.h
 create mode 100644 reftable/system.h
 create mode 100644 reftable/tree.c
 create mode 100644 reftable/tree.h
 create mode 100644 reftable/writer.c
 create mode 100644 reftable/writer.h
 create mode 100644 reftable/zlib-compat.c
base-commit: e68e29171cc2d6968902e0654b5687fbe1ccb903
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-539%2Fhanwen%2Freftable-v6
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-539/hanwen/reftable-v6
Pull-Request: https://github.com/gitgitgadget/git/pull/539
Range-diff vs v5:
 1:  c00403c94de = 1:  e4b0773becd refs.h: clarify reflog iteration order
 2:  4d6da9bc473 = 2:  c25b6c601dc create .git/refs in files-backend.c
 3:  fbdcdccc885 = 3:  e132e0f4e00 refs: document how ref_iterator_advance_fn should handle symrefs
 4:  546b82fe798 ! 4:  fe29a9db399 Add reftable library
     @@ -86,7 +86,7 @@
      +   cp reftable-repo/LICENSE reftable/ &&
      +   git --git-dir reftable-repo/.git show --no-patch origin/master \
      +    > reftable/VERSION && \
     -+   echo '/* empty */' > reftable/config.h
     ++   sed -i~ 's|if REFTABLE_IN_GITCORE|if 1 /* REFTABLE_IN_GITCORE */|' reftable/system.h
      +   rm reftable/*_test.c reftable/test_framework.*
      +   git add reftable/*.[ch]
      +
     @@ -98,11 +98,17 @@
       --- /dev/null
       +++ b/reftable/VERSION
      @@
     -+commit 6115b50fdb9bc662be39b05f5589bc109282ae7f
     ++commit 42aa04f301a682197f0698867b9771b78ce4fdaf
      +Author: Han-Wen Nienhuys <hanwen@google.com>
     -+Date:   Mon Feb 10 13:59:52 2020 +0100
     -+
     -+    README: add a note about the Java implementation
     ++Date:   Mon Feb 17 16:05:22 2020 +0100
     ++
     ++    C: simplify system and config header handling
     ++    
     ++    reftable.h only depends on <stdint.h>
     ++    
     ++    system.h is only included from .c files. The git-core specific code is
     ++    guarded by a #if REFTABLE_IN_GITCORE, which we'll edit with a sed
     ++    script on the git-core side.
      
       diff --git a/reftable/basics.c b/reftable/basics.c
       new file mode 100644
     @@ -485,19 +491,31 @@
      +	if (block_writer_type(w) == BLOCK_TYPE_LOG) {
      +		int block_header_skip = 4 + w->header_off;
      +		struct slice compressed = {};
     -+		uLongf dest_len = 0, src_len = 0;
     -+		slice_resize(&compressed, w->next - block_header_skip);
     ++		int zresult = 0;
     ++		uLongf src_len = w->next - block_header_skip;
     ++		slice_resize(&compressed, src_len);
      +
     -+		dest_len = compressed.len;
     -+		src_len = w->next - block_header_skip;
     ++		while (1) {
     ++			uLongf dest_len = compressed.len;
      +
     -+		if (Z_OK != compress2(compressed.buf, &dest_len,
     -+				      w->buf + block_header_skip, src_len, 9)) {
     -+			free(slice_yield(&compressed));
     -+			return ZLIB_ERROR;
     ++			zresult = compress2(compressed.buf, &dest_len,
     ++					    w->buf + block_header_skip, src_len,
     ++					    9);
     ++			if (zresult == Z_BUF_ERROR) {
     ++				slice_resize(&compressed, 2 * compressed.len);
     ++				continue;
     ++			}
     ++
     ++			if (Z_OK != zresult) {
     ++				free(slice_yield(&compressed));
     ++				return ZLIB_ERROR;
     ++			}
     ++
     ++			memcpy(w->buf + block_header_skip, compressed.buf,
     ++			       dest_len);
     ++			w->next = dest_len + block_header_skip;
     ++			break;
      +		}
     -+		memcpy(w->buf + block_header_skip, compressed.buf, dest_len);
     -+		w->next = dest_len + block_header_skip;
      +	}
      +	return w->next;
      +}
     @@ -885,8 +903,6 @@
      +#ifndef CONSTANTS_H
      +#define CONSTANTS_H
      +
     -+#define SHA1_SIZE 20
     -+#define SHA256_SIZE 32
      +#define VERSION 1
      +#define HEADER_SIZE 24
      +#define FOOTER_SIZE 68
     @@ -1555,13 +1571,17 @@
      +	it->ops = &merged_iter_vtable;
      +}
      +
     -+int new_merged_table(struct merged_table **dest, struct reader **stack, int n)
     ++int new_merged_table(struct merged_table **dest, struct reader **stack, int n,
     ++		     int hash_size)
      +{
      +	uint64_t last_max = 0;
      +	uint64_t first_min = 0;
      +	int i = 0;
      +	for (i = 0; i < n; i++) {
      +		struct reader *r = stack[i];
     ++		if (reader_hash_size(r) != hash_size) {
     ++			return FORMAT_ERROR;
     ++		}
      +		if (i > 0 && last_max >= reader_min_update_index(r)) {
      +			return FORMAT_ERROR;
      +		}
     @@ -1578,7 +1598,7 @@
      +			.stack_len = n,
      +			.min = first_min,
      +			.max = last_max,
     -+			.hash_size = SHA1_SIZE,
     ++			.hash_size = hash_size,
      +		};
      +
      +		*dest = calloc(sizeof(struct merged_table), 1);
     @@ -1985,6 +2005,11 @@
      +	block_source_return_block(r->source, p);
      +}
      +
     ++int reader_hash_size(struct reader *r)
     ++{
     ++	return r->hash_size;
     ++}
     ++
      +const char *reader_name(struct reader *r)
      +{
      +	return r->name;
     @@ -2005,8 +2030,13 @@
      +		goto exit;
      +	}
      +
     ++	r->hash_size = SHA1_SIZE;
      +	{
      +		byte version = *f++;
     ++		if (version == 2) {
     ++			r->hash_size = SHA256_SIZE;
     ++			version = 1;
     ++		}
      +		if (version != 1) {
      +			err = FORMAT_ERROR;
      +			goto exit;
     @@ -2070,7 +2100,7 @@
      +	r->size = block_source_size(source) - FOOTER_SIZE;
      +	r->source = source;
      +	r->name = strdup(name);
     -+	r->hash_size = SHA1_SIZE;
     ++	r->hash_size = 0;
      +
      +	err = block_source_read_block(source, &footer, r->size, FOOTER_SIZE);
      +	if (err != FOOTER_SIZE) {
     @@ -3883,7 +3913,7 @@
      +#ifndef REFTABLE_H
      +#define REFTABLE_H
      +
     -+#include "system.h"
     ++#include <stdint.h>
      +
      +/* block_source is a generic wrapper for a seekable readable file.
      +   It is generally passed around by value.
     @@ -3934,6 +3964,10 @@
      +
      +	/* how often to write complete keys in each block. */
      +	int restart_interval;
     ++
     ++	/* width of the hash. Should be 20 for SHA1 or 32 for SHA256. Defaults
     ++	 * to SHA1 if unset */
     ++	int hash_size;
      +};
      +
      +/* ref_record holds a ref database entry target_value */
     @@ -4147,6 +4181,9 @@
      + */
      +int reader_seek_ref(struct reader *r, struct iterator *it, const char *name);
      +
     ++/* returns the hash size used in this table. */
     ++int reader_hash_size(struct reader *r);
     ++
      +/* seek to logs for the given name, older than update_index. */
      +int reader_seek_log_at(struct reader *r, struct iterator *it, const char *name,
      +		       uint64_t update_index);
     @@ -4173,7 +4210,11 @@
      +/* new_merged_table creates a new merged table. It takes ownership of the stack
      +   array.
      +*/
     -+int new_merged_table(struct merged_table **dest, struct reader **stack, int n);
     ++int new_merged_table(struct merged_table **dest, struct reader **stack, int n,
     ++		     int hash_size);
     ++
     ++/* returns the hash size used in this merged table. */
     ++int merged_hash_size(struct merged_table *mt);
      +
      +/* returns an iterator positioned just before 'name' */
      +int merged_table_seek_ref(struct merged_table *mt, struct iterator *it,
     @@ -4688,7 +4729,8 @@
      +	}
      +
      +	/* success! */
     -+	err = new_merged_table(&new_merged, new_tables, new_tables_len);
     ++	err = new_merged_table(&new_merged, new_tables, new_tables_len,
     ++			       st->config.hash_size);
      +	if (err < 0) {
      +		goto exit;
      +	}
     @@ -5084,7 +5126,7 @@
      +	writer_set_limits(wr, st->merged->stack[first]->min_update_index,
      +			  st->merged->stack[last]->max_update_index);
      +
     -+	err = new_merged_table(&mt, subtabs, subtabs_len);
     ++	err = new_merged_table(&mt, subtabs, subtabs_len, st->config.hash_size);
      +	if (err < 0) {
      +		free(subtabs);
      +		goto exit;
     @@ -5568,9 +5610,7 @@
      +#ifndef SYSTEM_H
      +#define SYSTEM_H
      +
     -+#include "config.h"
     -+
     -+#ifndef REFTABLE_STANDALONE
     ++#if 1 /* REFTABLE_IN_GITCORE */
      +
      +#include "git-compat-util.h"
      +#include <zlib.h>
     @@ -5606,7 +5646,7 @@
      +		memcpy(&a, &b, sizeof(a));      \
      +		memcpy(&b, &tmp[0], sizeof(a)); \
      +	}
     -+#endif
     ++#endif /* REFTABLE_IN_GITCORE */
      +
      +typedef uint8_t byte;
      +typedef int bool;
     @@ -5614,6 +5654,9 @@
      +int uncompress_return_consumed(Bytef *dest, uLongf *destLen,
      +			       const Bytef *source, uLong *sourceLen);
      +
     ++#define SHA1_SIZE 20
     ++#define SHA256_SIZE 32
     ++
      +#endif
      
       diff --git a/reftable/tree.c b/reftable/tree.c
     @@ -5788,6 +5831,9 @@
      +		opts->restart_interval = 16;
      +	}
      +
     ++	if (opts->hash_size == 0) {
     ++		opts->hash_size = SHA1_SIZE;
     ++	}
      +	if (opts->block_size == 0) {
      +		opts->block_size = DEFAULT_BLOCK_SIZE;
      +	}
     @@ -5796,7 +5842,8 @@
      +static int writer_write_header(struct writer *w, byte *dest)
      +{
      +	memcpy((char *)dest, "REFT", 4);
     -+	dest[4] = 1; /* version */
     ++	dest[4] = (w->hash_size == SHA1_SIZE) ? 1 : 2; /* version */
     ++
      +	put_u24(dest + 5, w->opts.block_size);
      +	put_u64(dest + 8, w->min_update_index);
      +	put_u64(dest + 16, w->max_update_index);
     @@ -5825,7 +5872,7 @@
      +		/* TODO - error return? */
      +		abort();
      +	}
     -+	wp->hash_size = SHA1_SIZE;
     ++	wp->hash_size = opts->hash_size;
      +	wp->block = calloc(opts->block_size, 1);
      +	wp->write = writer_func;
      +	wp->write_arg = writer_arg;
     @@ -6222,7 +6269,10 @@
      +	byte footer[68];
      +	byte *p = footer;
      +
     -+	writer_finish_public_section(w);
     ++	int err = writer_finish_public_section(w);
     ++	if (err != 0) {
     ++		return err;
     ++	}
      +
      +	writer_write_header(w, footer);
      +	p += 24;
 5:  702fb89871e ! 5:  8d95ab52f75 Reftable support for git-core
     @@ -6,10 +6,8 @@
      
          TODO:
      
     -     * Make CI on gitgitgadget compile.
     -     * Redo interaction between repo config, repo storage version
     -     * Resolve the design problem with reflog expiry.
           * Resolve spots marked with XXX
     +     * Test strategy?
      
          Example use:
      
     @@ -411,11 +409,6 @@ $^
      +
      +#include "../reftable/reftable.h"
      +
     -+/*
     -+  The reftable v1 spec only supports 20-byte binary SHA1s. A new format version
     -+  will be needed to support SHA256.
     -+ */
     -+
      +extern struct ref_storage_be refs_be_reftable;
      +
      +struct reftable_ref_store {
     @@ -470,6 +463,7 @@ $^
      +	struct ref_store *ref_store = (struct ref_store *)refs;
      +	struct write_options cfg = {
      +		.block_size = 4096,
     ++		.hash_size = the_hash_algo->rawsz,
      +	};
      +	struct strbuf sb = STRBUF_INIT;
      +
     @@ -676,6 +670,7 @@ $^
      +		(struct reftable_ref_store *)transaction->ref_store;
      +	uint64_t ts = stack_next_update_index(refs->stack);
      +	int err = 0;
     ++	struct log_record *logs = calloc(transaction->nr, sizeof(*logs));
      +	struct ref_update **sorted =
      +		malloc(transaction->nr * sizeof(struct ref_update *));
      +	COPY_ARRAY(sorted, transaction->updates, transaction->nr);
     @@ -695,6 +690,14 @@ $^
      +
      +	for (int i = 0; i < transaction->nr; i++) {
      +		struct ref_update *u = sorted[i];
     ++		struct log_record *log = &logs[i];
     ++		fill_log_record(log);
     ++		log->ref_name = (char *)u->refname;
     ++		log->old_hash = u->old_oid.hash;
     ++		log->new_hash = u->new_oid.hash;
     ++		log->update_index = ts;
     ++		log->message = u->msg;
     ++
      +		if (u->flags & REF_HAVE_NEW) {
      +			struct object_id out_oid = {};
      +			int out_flags = 0;
     @@ -706,6 +709,7 @@ $^
      +			struct ref_record ref = {};
      +			ref.ref_name =
      +				(char *)(resolved ? resolved : u->refname);
     ++			log->ref_name = ref.ref_name;
      +			ref.value = u->new_oid.hash;
      +			ref.update_index = ts;
      +			err = writer_add_ref(writer, &ref);
     @@ -716,23 +720,15 @@ $^
      +	}
      +
      +	for (int i = 0; i < transaction->nr; i++) {
     -+		struct ref_update *u = sorted[i];
     -+		struct log_record log = {};
     -+		fill_log_record(&log);
     -+
     -+		log.ref_name = (char *)u->refname;
     -+		log.old_hash = u->old_oid.hash;
     -+		log.new_hash = u->new_oid.hash;
     -+		log.update_index = ts;
     -+		log.message = u->msg;
     -+
     -+		err = writer_add_log(writer, &log);
     -+		clear_log_record(&log);
     ++		err = writer_add_log(writer, &logs[i]);
     ++		clear_log_record(&logs[i]);
      +		if (err < 0) {
     -+			return err;
     ++			goto exit;
      +		}
      +	}
     ++
      +exit:
     ++	free(logs);
      +	free(sorted);
      +	return err;
      +}
     @@ -1076,7 +1072,7 @@ $^
      +			       1);
      +	ri->base.oid = &ri->oid;
      +
     -+	return empty_ref_iterator_begin();
     ++	return (struct ref_iterator *)ri;
      +}
      +
      +static int
     @@ -1214,6 +1210,53 @@ $^
      +	return 0;
      +}
      +
     ++struct reflog_expiry_arg {
     ++	struct reftable_ref_store *refs;
     ++	struct log_record *tombstones;
     ++	int len;
     ++	int cap;
     ++};
     ++
     ++static void clear_log_tombstones(struct reflog_expiry_arg *arg)
     ++{
     ++	int i = 0;
     ++	for (; i < arg->len; i++) {
     ++		log_record_clear(&arg->tombstones[i]);
     ++	}
     ++
     ++	FREE_AND_NULL(arg->tombstones);
     ++}
     ++
     ++static void add_log_tombstone(struct reflog_expiry_arg *arg,
     ++			      const char *refname, uint64_t ts)
     ++{
     ++	struct log_record tombstone = {
     ++		.ref_name = xstrdup(refname),
     ++		.update_index = ts,
     ++	};
     ++	if (arg->len == arg->cap) {
     ++		arg->cap = 2 * arg->cap + 1;
     ++		arg->tombstones =
     ++			realloc(arg->tombstones, arg->cap * sizeof(tombstone));
     ++	}
     ++	arg->tombstones[arg->len++] = tombstone;
     ++}
     ++
     ++static int write_reflog_expiry_table(struct writer *writer, void *argv)
     ++{
     ++	struct reflog_expiry_arg *arg = (struct reflog_expiry_arg *)argv;
     ++	uint64_t ts = stack_next_update_index(arg->refs->stack);
     ++	int i = 0;
     ++	writer_set_limits(writer, ts, ts);
     ++	for (i = 0; i < arg->len; i++) {
     ++		int err = writer_add_log(writer, &arg->tombstones[i]);
     ++		if (err) {
     ++			return err;
     ++		}
     ++	}
     ++	return 0;
     ++}
     ++
      +static int reftable_reflog_expire(struct ref_store *ref_store,
      +				  const char *refname,
      +				  const struct object_id *oid,
     @@ -1223,11 +1266,57 @@ $^
      +				  reflog_expiry_cleanup_fn cleanup_fn,
      +				  void *policy_cb_data)
      +{
     -+	BUG("per ref reflog expiry is not implemented for reftable backend.");
      +	/*
     -+	  TODO: should iterate over the reflog, and write tombstones. The
     -+	  tombstones will be removed on compaction.
     -+	 */
     ++	  For log expiry, we write tombstones in place of the expired entries,
     ++	  This means that the entries are still retrievable by delving into the
     ++	  stack, and expiring entries paradoxically takes extra memory.
     ++
     ++	  This memory is only reclaimed when some operation issues a
     ++	  reftable_pack_refs(), which will compact the entire stack and get rid
     ++	  of deletion entries.
     ++
     ++	  It would be better if the refs backend supported an API that sets a
     ++	  criterion for all refs, passing the criterion to pack_refs().
     ++	*/
     ++	struct reftable_ref_store *refs =
     ++		(struct reftable_ref_store *)ref_store;
     ++	struct merged_table *mt = stack_merged_table(refs->stack);
     ++	struct reflog_expiry_arg arg = {
     ++		.refs = refs,
     ++	};
     ++	struct log_record log = {};
     ++	struct iterator it = {};
     ++	int err = merged_table_seek_log(mt, &it, refname);
     ++	if (err < 0) {
     ++		return err;
     ++	}
     ++
     ++	while (1) {
     ++		struct object_id ooid = {};
     ++		struct object_id noid = {};
     ++
     ++		int err = iterator_next_log(it, &log);
     ++		if (err < 0) {
     ++			return err;
     ++		}
     ++
     ++		if (err > 0 || strcmp(log.ref_name, refname)) {
     ++			break;
     ++		}
     ++		hashcpy(ooid.hash, log.old_hash);
     ++		hashcpy(noid.hash, log.new_hash);
     ++
     ++		if (should_prune_fn(&ooid, &noid, log.email,
     ++				    (timestamp_t)log.time, log.tz_offset,
     ++				    log.message, policy_cb_data)) {
     ++			add_log_tombstone(&arg, refname, log.update_index);
     ++		}
     ++	}
     ++	log_record_clear(&log);
     ++	iterator_destroy(&it);
     ++	err = stack_add(refs->stack, &write_reflog_expiry_table, &arg);
     ++	clear_log_tombstones(&arg);
     ++	return err;
      +}
      +
      +static int reftable_read_raw_ref(struct ref_store *ref_store,
-- 
gitgitgadget
Previous: Han-Wen Nienhuys via GitGitGadgetNext: Han-Wen Nienhuys via GitGitGadget
Message 86 of 409 in “Reftable support git-core”
  1. 0/5 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Jan 23, 2020
  2. 1/5 setup.c: enable repo detection for reftableHan-Wen Nienhuys via GitGitGadget, Jan 23, 2020
  3. 3/5 Document how ref iterators and symrefs interactHan-Wen Nienhuys via GitGitGadget, Jan 23, 2020
  4. 2/5 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Jan 23, 2020
  5. 5/5 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Jan 23, 2020
  6. 4/5 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Jan 23, 2020
  7. Junio C HamanoJan 23, 2020
  8. Han-Wen NienhuysJan 27, 2020
  9. Han-Wen NienhuysJan 27, 2020
  10. Stephan BeyerJan 23, 2020
  11. Han-Wen NienhuysJan 27, 2020
  12. 0/5 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Jan 27, 2020
  13. 1/5 setup.c: enable repo detection for reftableHan-Wen Nienhuys via GitGitGadget, Jan 27, 2020
  14. 2/5 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Jan 27, 2020
  15. Junio C HamanoJan 27, 2020
  16. Han-Wen NienhuysJan 28, 2020
  17. Junio C HamanoJan 30, 2020
  18. 3/5 Document how ref iterators and symrefs interactHan-Wen Nienhuys via GitGitGadget, Jan 27, 2020
  19. Junio C HamanoJan 27, 2020
  20. Han-Wen NienhuysJan 28, 2020
  21. Junio C HamanoJan 28, 2020
  22. 5/5 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Jan 27, 2020
  23. Jeff KingJan 28, 2020
  24. Martin FickJan 28, 2020
  25. Jeff KingJan 29, 2020
  26. Martin FickJan 29, 2020
  27. Han-Wen NienhuysJan 29, 2020
  28. Martin FickJan 29, 2020
  29. Han-Wen NienhuysJan 29, 2020
  30. Jeff KingJan 30, 2020
  31. Han-Wen NienhuysFeb 3, 2020
  32. Jeff KingFeb 3, 2020
  33. Han-Wen NienhuysFeb 3, 2020
  34. Han-Wen NienhuysFeb 4, 2020
  35. Jeff KingFeb 4, 2020
  36. Han-Wen NienhuysFeb 4, 2020
  37. Junio C HamanoJan 29, 2020
  38. Han-Wen NienhuysJan 28, 2020
  39. Jeff KingJan 29, 2020
  40. Junio C HamanoJan 29, 2020
  41. Han-Wen NienhuysJan 29, 2020
  42. Jeff KingJan 30, 2020
  43. Han-Wen NienhuysFeb 4, 2020
  44. Jeff KingFeb 4, 2020
  45. Han-Wen NienhuysFeb 4, 2020
  46. Jeff KingFeb 4, 2020
  47. 4/5 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Jan 27, 2020
  48. 0/6 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Feb 4, 2020
  49. 2/6 setup.c: enable repo detection for reftableHan-Wen Nienhuys via GitGitGadget, Feb 4, 2020
  50. Han-Wen NienhuysFeb 4, 2020
  51. 1/6 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, Feb 4, 2020
  52. 3/6 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Feb 4, 2020
  53. Junio C HamanoFeb 4, 2020
  54. Han-Wen NienhuysFeb 5, 2020
  55. SZEDER GáborFeb 5, 2020
  56. Jeff KingFeb 5, 2020
  57. 4/6 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, Feb 4, 2020
  58. 6/6 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Feb 4, 2020
  59. 5/6 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Feb 4, 2020
  60. 0/5 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Feb 6, 2020
  61. 2/5 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Feb 6, 2020
  62. 1/5 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, Feb 6, 2020
  63. 3/5 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, Feb 6, 2020
  64. 5/5 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Feb 6, 2020
  65. brian m. carlsonFeb 6, 2020
  66. Han-Wen NienhuysFeb 10, 2020
  67. 4/5 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Feb 6, 2020
  68. Junio C HamanoFeb 6, 2020
  69. brian m. carlsonFeb 7, 2020
  70. Han-Wen NienhuysFeb 10, 2020
  71. brian m. carlsonFeb 11, 2020
  72. Han-Wen NienhuysFeb 11, 2020
  73. Junio C HamanoFeb 11, 2020
  74. Han-Wen NienhuysFeb 11, 2020
  75. brian m. carlsonFeb 11, 2020
  76. Han-Wen NienhuysFeb 18, 2020
  77. Han-Wen NienhuysFeb 11, 2020
  78. Jonathan NiederFeb 20, 2020
  79. brian m. carlsonFeb 6, 2020
  80. 0/5 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Feb 10, 2020
  81. 1/5 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, Feb 10, 2020
  82. 2/5 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Feb 10, 2020
  83. 3/5 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, Feb 10, 2020
  84. 5/5 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Feb 10, 2020
  85. 4/5 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Feb 10, 2020
  86. 0/5 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Feb 18, 2020
  87. 2/5 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Feb 18, 2020
  88. 1/5 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, Feb 18, 2020
  89. 3/5 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, Feb 18, 2020
  90. 5/5 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Feb 18, 2020
  91. 4/5 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Feb 18, 2020
  92. Junio C HamanoFeb 18, 2020
  93. Jeff KingFeb 19, 2020
  94. Han-Wen NienhuysFeb 19, 2020
  95. Junio C HamanoFeb 18, 2020
  96. Han-Wen NienhuysFeb 19, 2020
  97. Junio C HamanoFeb 19, 2020
  98. Han-Wen NienhuysFeb 19, 2020
  99. Junio C HamanoFeb 19, 2020
  100. Han-Wen NienhuysFeb 19, 2020
  101. Junio C HamanoFeb 19, 2020
  102. Jeff KingFeb 20, 2020
  103. Jonathan NiederFeb 21, 2020
  104. Han-Wen NienhuysFeb 26, 2020
  105. Junio C HamanoFeb 26, 2020
  106. brian m. carlsonFeb 27, 2020
  107. 0/6 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Feb 26, 2020
  108. 3/6 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, Feb 26, 2020
  109. 1/6 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, Feb 26, 2020
  110. 2/6 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Feb 26, 2020
  111. 4/6 reftable: file format documentationJonathan Nieder via GitGitGadget, Feb 26, 2020
  112. 6/6 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Feb 26, 2020
  113. Junio C HamanoFeb 26, 2020
  114. Han-Wen NienhuysFeb 26, 2020
  115. Junio C HamanoFeb 26, 2020
  116. Han-Wen NienhuysFeb 27, 2020
  117. Junio C HamanoFeb 27, 2020
  118. Han-Wen NienhuysFeb 27, 2020
  119. Junio C HamanoFeb 26, 2020
  120. Han-Wen NienhuysFeb 27, 2020
  121. Junio C HamanoFeb 27, 2020
  122. 5/6 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Feb 26, 2020
  123. Junio C HamanoFeb 26, 2020
  124. Jonathan NiederMar 24, 2020
  125. 0/9 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  126. 1/9 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  127. 4/9 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  128. 3/9 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  129. 2/9 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  130. 6/9 reftable: define version 2 of the spec to accomodate SHA256Han-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  131. 7/9 reftable: clarify how empty tables should be writtenHan-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  132. 9/9 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  133. 5/9 reftable: file format documentationJonathan Nieder via GitGitGadget, Apr 1, 2020
  134. 8/9 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Apr 1, 2020
  135. Junio C HamanoApr 15, 2020
  136. Danh DoanApr 18, 2020
  137. 00/10 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  138. 02/10 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  139. 03/10 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  140. 01/10 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  141. 05/10 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  142. 04/10 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  143. 07/10 reftable: define version 2 of the spec to accomodate SHA256Han-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  144. 06/10 reftable: file format documentationJonathan Nieder via GitGitGadget, Apr 20, 2020
  145. 08/10 reftable: clarify how empty tables should be writtenHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  146. 10/10 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  147. 09/10 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Apr 20, 2020
  148. Junio C HamanoApr 20, 2020
  149. Han-Wen NienhuysApr 21, 2020
  150. Johannes SchindelinApr 22, 2020
  151. Junio C HamanoApr 21, 2020
  152. Han-Wen NienhuysApr 23, 2020
  153. Junio C HamanoApr 23, 2020
  154. Junio C HamanoApr 23, 2020
  155. Johannes SchindelinApr 25, 2020
  156. 00/12 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  157. 08/12 reftable: clarify how empty tables should be writtenHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  158. 07/12 reftable: define version 2 of the spec to accomodate SHA256Han-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  159. 10/12 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  160. 02/12 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  161. Emily ShafferApr 30, 2020
  162. Han-Wen NienhuysMay 4, 2020
  163. Pseudo ref handling (was Re: [PATCH v10 02/12] Iterate over the "refs/" namespace in for_each_[raw]ref)Han-Wen Nienhuys, May 5, 2020
  164. 05/12 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  165. 12/12 t: use update-ref and show-ref to reading/writing refsHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  166. 11/12 Add some reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  167. 03/12 create .git/refs in files-backend.cHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  168. Emily ShafferApr 30, 2020
  169. Junio C HamanoApr 30, 2020
  170. Han-Wen NienhuysMay 4, 2020
  171. 01/12 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  172. 06/12 reftable: file format documentationJonathan Nieder via GitGitGadget, Apr 27, 2020
  173. 04/12 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  174. 09/12 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Apr 27, 2020
  175. Danh DoanApr 28, 2020
  176. Junio C HamanoApr 28, 2020
  177. Junio C HamanoApr 28, 2020
  178. Han-Wen NienhuysApr 28, 2020
  179. Han-Wen NienhuysApr 28, 2020
  180. 00/12 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  181. 01/12 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  182. 02/12 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  183. 04/12 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  184. 06/12 reftable: define version 2 of the spec to accomodate SHA256Han-Wen Nienhuys via GitGitGadget, May 4, 2020
  185. 03/12 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  186. 07/12 reftable: clarify how empty tables should be writtenHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  187. 10/12 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, May 4, 2020
  188. 05/12 reftable: file format documentationJonathan Nieder via GitGitGadget, May 4, 2020
  189. 11/12 Add some reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  190. 09/12 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  191. 12/12 t: use update-ref and show-ref to reading/writing refsHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  192. 08/12 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, May 4, 2020
  193. Junio C HamanoMay 6, 2020
  194. 00/12 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  195. 01/12 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  196. Junio C HamanoMay 8, 2020
  197. 02/12 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  198. Junio C HamanoMay 8, 2020
  199. Han-Wen NienhuysMay 11, 2020
  200. 03/12 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  201. Junio C HamanoMay 8, 2020
  202. Han-Wen NienhuysMay 11, 2020
  203. Junio C HamanoMay 11, 2020
  204. Han-Wen NienhuysMay 11, 2020
  205. 06/12 reftable: define version 2 of the spec to accomodate SHA256Han-Wen Nienhuys via GitGitGadget, May 7, 2020
  206. Junio C HamanoMay 8, 2020
  207. 07/12 reftable: clarify how empty tables should be writtenHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  208. 05/12 reftable: file format documentationJonathan Nieder via GitGitGadget, May 7, 2020
  209. 04/12 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  210. 10/12 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, May 7, 2020
  211. 09/12 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  212. 08/12 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  213. 11/12 t: use update-ref and show-ref to reading/writing refsHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  214. 12/12 Add some reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, May 7, 2020
  215. 00/13 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  216. 01/13 refs.h: clarify reflog iteration orderHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  217. Junio C HamanoMay 18, 2020
  218. 03/13 refs: document how ref_iterator_advance_fn should handle symrefsHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  219. Junio C HamanoMay 18, 2020
  220. 02/13 t: use update-ref and show-ref to reading/writing refsHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  221. Junio C HamanoMay 18, 2020
  222. 05/13 reftable: clarify how empty tables should be writtenHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  223. Junio C HamanoMay 19, 2020
  224. 06/13 reftable: define version 2 of the spec to accomodate SHA256Han-Wen Nienhuys via GitGitGadget, May 11, 2020
  225. Junio C HamanoMay 19, 2020
  226. Han-Wen NienhuysMay 20, 2020
  227. Junio C HamanoMay 20, 2020
  228. 07/13 Write pseudorefs through ref backends.Han-Wen Nienhuys via GitGitGadget, May 11, 2020
  229. Phillip WoodMay 12, 2020
  230. Han-Wen NienhuysMay 12, 2020
  231. Phillip WoodMay 13, 2020
  232. Phillip WoodMay 13, 2020
  233. 04/13 reftable: file format documentationJonathan Nieder via GitGitGadget, May 11, 2020
  234. Junio C HamanoMay 19, 2020
  235. Han-Wen NienhuysMay 20, 2020
  236. Han-Wen NienhuysMay 20, 2020
  237. Han-Wen NienhuysMay 20, 2020
  238. Junio C HamanoMay 20, 2020
  239. Jonathan NiederMay 20, 2020
  240. 08/13 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  241. 09/13 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  242. 10/13 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  243. 12/13 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, May 11, 2020
  244. 11/13 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  245. Junio C HamanoMay 13, 2020
  246. 13/13 Add some reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, May 11, 2020
  247. Junio C HamanoMay 13, 2020
  248. Han-Wen NienhuysMay 19, 2020
  249. Junio C HamanoMay 19, 2020
  250. Junio C HamanoMay 12, 2020
  251. Han-Wen NienhuysMay 12, 2020
  252. Junio C HamanoMay 13, 2020
  253. 0/9 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, May 18, 2020
  254. 2/9 Move REF_LOG_ONLY to refs-internal.hHan-Wen Nienhuys via GitGitGadget, May 18, 2020
  255. 1/9 Write pseudorefs through ref backends.Han-Wen Nienhuys via GitGitGadget, May 18, 2020
  256. 3/9 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, May 18, 2020
  257. 4/9 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, May 18, 2020
  258. 7/9 Add GIT_DEBUG_REFS debugging mechanismHan-Wen Nienhuys via GitGitGadget, May 18, 2020
  259. 8/9 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, May 18, 2020
  260. 9/9 Add reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, May 18, 2020
  261. 6/9 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, May 18, 2020
  262. 5/9 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, May 18, 2020
  263. 00/13 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  264. 13/13 Add reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  265. 10/13 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  266. 09/13 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  267. 11/13 Add GIT_DEBUG_REFS debugging mechanismHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  268. 08/13 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  269. 12/13 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, May 28, 2020
  270. 07/13 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  271. 06/13 Move REF_LOG_ONLY to refs-internal.hHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  272. 05/13 Treat REVERT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  273. 02/13 Make refs_ref_exists publicHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  274. 04/13 Treat CHERRY_PICK_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  275. 03/13 Treat BISECT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, May 28, 2020
  276. Junio C HamanoMay 28, 2020
  277. 01/13 Write pseudorefs through ref backends.Han-Wen Nienhuys via GitGitGadget, May 28, 2020
  278. Junio C HamanoMay 28, 2020
  279. Junio C HamanoMay 28, 2020
  280. 00/14 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  281. 02/14 Make refs_ref_exists publicHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  282. Phillip WoodJun 9, 2020
  283. Han-Wen NienhuysJun 10, 2020
  284. Phillip WoodJun 11, 2020
  285. Phillip WoodJun 12, 2020
  286. Han-Wen NienhuysJun 15, 2020
  287. 01/14 Write pseudorefs through ref backends.Han-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  288. Phillip WoodJun 9, 2020
  289. 03/14 Treat BISECT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  290. 05/14 Treat REVERT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  291. 04/14 Treat CHERRY_PICK_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  292. 06/14 Move REF_LOG_ONLY to refs-internal.hHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  293. 07/14 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  294. 08/14 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  295. 11/14 Hookup unittests for the reftable library.Han-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  296. Junio C HamanoJun 8, 2020
  297. Fixup! Add t/helper/test-reftable.chanwen@google.com, Jun 9, 2020
  298. Junio C HamanoJun 9, 2020
  299. 10/14 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  300. 13/14 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, Jun 5, 2020
  301. 09/14 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  302. 14/14 Add reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  303. 12/14 Add GIT_DEBUG_REFS debugging mechanismHan-Wen Nienhuys via GitGitGadget, Jun 5, 2020
  304. Junio C HamanoJun 9, 2020
  305. Han-Wen NienhuysJun 10, 2020
  306. Junio C HamanoJun 10, 2020
  307. Junio C HamanoJun 10, 2020
  308. Johannes SchindelinJun 10, 2020
  309. Han-Wen NienhuysJun 10, 2020
  310. Johannes SchindelinJun 10, 2020
  311. Han-Wen NienhuysJun 10, 2020
  312. 00/17 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  313. 01/17 lib-t6000.sh: write tag using git-update-refHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  314. 02/17 checkout: add '\n' to reflog messageHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  315. 04/17 Make refs_ref_exists publicHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  316. 03/17 Write pseudorefs through ref backends.Han-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  317. 05/17 Treat BISECT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  318. 07/17 Treat REVERT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  319. 12/17 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  320. SZEDER GáborJun 19, 2020
  321. 14/17 Add GIT_DEBUG_REFS debugging mechanismHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  322. 15/17 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, Jun 16, 2020
  323. 17/17 Add "test-tool dump-reftable" command.Han-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  324. 13/17 Hookup unittests for the reftable library.Han-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  325. 11/17 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  326. 16/17 Add reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  327. SZEDER GáborJun 19, 2020
  328. 10/17 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  329. 09/17 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  330. 06/17 Treat CHERRY_PICK_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  331. 08/17 Move REF_LOG_ONLY to refs-internal.hHan-Wen Nienhuys via GitGitGadget, Jun 16, 2020
  332. 00/19 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  333. 02/19 checkout: add '\n' to reflog messageHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  334. 04/19 Make refs_ref_exists publicHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  335. 05/19 Treat BISECT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  336. 06/19 Treat CHERRY_PICK_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  337. 07/19 Treat REVERT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  338. 08/19 Move REF_LOG_ONLY to refs-internal.hHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  339. 03/19 Write pseudorefs through ref backends.Han-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  340. 01/19 lib-t6000.sh: write tag using git-update-refHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  341. 12/19 Add standalone build infrastructure for reftableHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  342. 18/19 Add reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  343. 11/19 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  344. 09/19 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  345. 19/19 Add "test-tool dump-reftable" command.Han-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  346. 17/19 git-prompt: prepare for reftable refs backendSZEDER Gábor via GitGitGadget, Jun 22, 2020
  347. 10/19 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  348. 15/19 Add GIT_DEBUG_REFS debugging mechanismHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  349. 13/19 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  350. 14/19 Hookup unittests for the reftable library.Han-Wen Nienhuys via GitGitGadget, Jun 22, 2020
  351. 16/19 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, Jun 22, 2020
  352. 00/20 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  353. 05/20 Make refs_ref_exists publicHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  354. 09/20 Move REF_LOG_ONLY to refs-internal.hHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  355. 11/20 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  356. 03/20 checkout: add '\n' to reflog messageHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  357. Junio C HamanoJun 29, 2020
  358. Han-Wen NienhuysJun 30, 2020
  359. Junio C HamanoJun 30, 2020
  360. Han-Wen NienhuysJul 1, 2020
  361. Re* [PATCH v19 03/20] checkout: add '\n' to reflog messageJunio C Hamano, Jul 1, 2020
  362. Han-Wen NienhuysJul 6, 2020
  363. Junio C HamanoJul 6, 2020
  364. 17/20 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, Jun 29, 2020
  365. 08/20 Treat REVERT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  366. 10/20 Iterate over the "refs/" namespace in for_each_[raw]refHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  367. 20/20 Add "test-tool dump-reftable" command.Han-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  368. 19/20 Add reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  369. 16/20 Add GIT_DEBUG_REFS debugging mechanismHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  370. 18/20 git-prompt: prepare for reftable refs backendSZEDER Gábor via GitGitGadget, Jun 29, 2020
  371. 14/20 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  372. 12/20 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  373. 15/20 Hookup unittests for the reftable library.Han-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  374. 13/20 Add standalone build infrastructure for reftableHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  375. 07/20 Treat CHERRY_PICK_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  376. 06/20 Treat BISECT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  377. 04/20 Write pseudorefs through ref backends.Han-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  378. 01/20 lib-t6000.sh: write tag using git-update-refHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  379. 02/20 t3432: use git-reflog to inspect the reflog for HEADHan-Wen Nienhuys via GitGitGadget, Jun 29, 2020
  380. Denton LiuJun 30, 2020
  381. Junio C HamanoJun 29, 2020
  382. Han-Wen NienhuysJun 30, 2020
  383. Junio C HamanoJul 1, 2020
  384. Han-Wen NienhuysJul 1, 2020
  385. Junio C HamanoJul 1, 2020
  386. 00/21 Reftable support git-coreHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  387. 01/21 refs: add \t to reflog in the files backendHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  388. 03/21 t1400: use git rev-parse for testing PSEUDOREF existenceHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  389. 04/21 Modify pseudo refs through ref backend storageHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  390. 05/21 Make HEAD a PSEUDOREF rather than PER_WORKTREE.Han-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  391. 06/21 Make refs_ref_exists publicHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  392. 07/21 Treat CHERRY_PICK_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  393. 08/21 Treat REVERT_HEAD as a pseudo refHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  394. 10/21 Iteration over entire ref namespace is iterating over "refs/"Han-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  395. 02/21 Split off reading loose ref data in separate functionHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  396. 09/21 Move REF_LOG_ONLY to refs-internal.hHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  397. 13/21 Add standalone build infrastructure for reftableHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  398. 11/21 Add .gitattributes for the reftable/ directoryHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  399. 15/21 Read FETCH_HEAD as loose refHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  400. 16/21 Hookup unittests for the reftable library.Han-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  401. 18/21 vcxproj: adjust for the reftable changesJohannes Schindelin via GitGitGadget, Jul 31, 2020
  402. 14/21 Reftable support for git-coreHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  403. 19/21 git-prompt: prepare for reftable refs backendSZEDER Gábor via GitGitGadget, Jul 31, 2020
  404. 21/21 Add "test-tool dump-reftable" command.Han-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  405. 20/21 Add reftable testing infrastructureHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  406. 17/21 Add GIT_DEBUG_REFS debugging mechanismHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  407. 12/21 Add reftable libraryHan-Wen Nienhuys via GitGitGadget, Jul 31, 2020
  408. Jonathan NiederFeb 26, 2020
  409. Han-Wen NienhuysFeb 26, 2020

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.