From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com> To: Han-Wen Nienhuys via GitGitGadget <gitgitgadget@gmail.com> Cc: git@vger.kernel.org, Jeff King <peff@peff.net>, Ramsay Jones <ramsay@ramsayjones.plus.com>, Jonathan Nieder <jrnieder@gmail.com>, Johannes Schindelin <Johannes.Schindelin@gmx.de>, Jonathan Tan <jonathantanmy@google.com>, Josh Steadmon <steadmon@google.com>, Emily Shaffer <emilyshaffer@google.com>, Patrick Steinhardt <ps@pks.im>, Han-Wen Nienhuys <hanwenn@gmail.com>, Han-Wen Nienhuys <hanwen@google.com> Subject: Re: [PATCH v3 14/16] Reftable support for git-core Date: Fri, 27 Nov 2020 11:59:08 +0100 [thread overview] Message-ID: <87czzznk03.fsf@evledraar.gmail.com> (raw) In-Reply-To: <a590865a7008f065b3f4a75deabbf6dc06807623.1606419752.git.gitgitgadget@gmail.com> On Thu, Nov 26 2020, Han-Wen Nienhuys via GitGitGadget wrote: > From: Han-Wen Nienhuys <hanwen@google.com> > > For background, see the previous commit introducing the library. > > This introduces the file refs/reftable-backend.c containing a reftable-powered > ref storage backend. > > It can be activated by passing --ref-storage=reftable to "git init", or setting > GIT_TEST_REFTABLE in the environment. > > Example use: see t/t0031-reftable.sh > > Signed-off-by: Han-Wen Nienhuys <hanwen@google.com> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> > Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de> > Co-authored-by: Jeff King <peff@peff.net> > --- > .../technical/repository-version.txt | 7 + > Makefile | 4 + > builtin/clone.c | 5 +- > builtin/init-db.c | 55 +- > builtin/worktree.c | 27 +- > cache.h | 8 +- > config.mak.uname | 2 +- > contrib/buildsystems/Generators/Vcxproj.pm | 11 +- > refs.c | 27 +- > refs.h | 3 + > refs/refs-internal.h | 1 + > refs/reftable-backend.c | 1418 +++++++++++++++++ > repository.c | 2 + > repository.h | 3 + > setup.c | 9 +- > t/t0031-reftable.sh | 199 +++ > t/t1409-avoid-packing-refs.sh | 6 + > t/t1450-fsck.sh | 6 + > t/t3210-pack-refs.sh | 6 + > t/test-lib.sh | 5 + > 20 files changed, 1771 insertions(+), 33 deletions(-) > create mode 100644 refs/reftable-backend.c > create mode 100755 t/t0031-reftable.sh > > diff --git a/Documentation/technical/repository-version.txt b/Documentation/technical/repository-version.txt > index 7844ef30ff..7257623583 100644 > --- a/Documentation/technical/repository-version.txt > +++ b/Documentation/technical/repository-version.txt > @@ -100,3 +100,10 @@ If set, by default "git config" reads from both "config" and > multiple working directory mode, "config" file is shared while > "config.worktree" is per-working directory (i.e., it's in > GIT_COMMON_DIR/worktrees/<id>/config.worktree) > + > +==== `refStorage` > + > +Specifies the file format for the ref database. Values are `files` > +(for the traditional packed + loose ref format) and `reftable` for the > +binary reftable format. See https://github.com/google/reftable for > +more information. Should also be documented in Documentation/config/extensions.txt, including maybe that setting this will hard die on older git versions. Then if you init with reftable and set it to "files" it'll say "warning: ignoring broken ref refs/heads. Maybe amend that message to say the config is wrong/detect it's a reftable file? > + /* > + * Check to see if .git/HEAD exists; this must happen before > + * initializing the ref db, because we want to see if there is an > + * existing HEAD. > + */ > + path = git_path_buf(&buf, "HEAD"); > + reinit = (!access(path, R_OK) || > + readlink(path, junk, sizeof(junk) - 1) != -1); > + > + /* > + * refs/heads is a file when using reftable. We can't reinitialize with > + * a reftable because it will overwrite HEAD > + */ > + if (reinit && (!strcmp(fmt->ref_storage, "reftable")) == > + is_directory(git_path_buf(&buf, "refs/heads"))) { > + die("cannot switch ref storage format."); > + } > + I found this a bit weird, why would creating .git/refs/heads as a file have to do with .git/HEAD, but reading on what this comment means is that part of the initialization is to put "ref: refs/heads/.invalid" in HEAD And through further dissecting (nothing in this series documents this AFAICT) that value is chosen because if you stray much from it git will die with "not a git repository", i.e. it's invalid content, but not *too* invalid. I wonder if to achive that aim this isn't more useful & self-documenting: $ cat .git/HEAD ref: refs/heads/[this repository uses a reftable for ref storage!] Also since older versions of git will do this: $ __git_ps1 ([this repository uses a reftable for ref storage!]) > /* > * We need to create a "refs" dir in any case so that older > * versions of git can tell that this is a repository. > @@ -260,9 +281,6 @@ static int create_default_files(const char *template_path, > * Point the HEAD symref to the initial branch with if HEAD does > * not yet exist. > */ > - path = git_path_buf(&buf, "HEAD"); > - reinit = (!access(path, R_OK) > - || readlink(path, junk, sizeof(junk)-1) != -1); > if (!reinit) { > char *ref; > > @@ -279,7 +297,7 @@ static int create_default_files(const char *template_path, > free(ref); > } > > - initialize_repository_version(fmt->hash_algo, 0); > + initialize_repository_version(fmt->hash_algo, 0, fmt->ref_storage); > > /* Check filemode trustability */ > path = git_path_buf(&buf, "config"); > @@ -396,7 +414,7 @@ static void validate_hash_algorithm(struct repository_format *repo_fmt, int hash > > int init_db(const char *git_dir, const char *real_git_dir, > const char *template_dir, int hash, const char *initial_branch, > - unsigned int flags) > + const char *ref_storage_format, unsigned int flags) > { > int reinit; > int exist_ok = flags & INIT_DB_EXIST_OK; > @@ -435,6 +453,7 @@ int init_db(const char *git_dir, const char *real_git_dir, > * is an attempt to reinitialize new repository with an old tool. > */ > check_repository_format(&repo_fmt); > + repo_fmt.ref_storage = xstrdup(ref_storage_format); > > validate_hash_algorithm(&repo_fmt, hash); > > @@ -467,6 +486,9 @@ int init_db(const char *git_dir, const char *real_git_dir, > git_config_set("receive.denyNonFastforwards", "true"); > } > > + if (!strcmp(ref_storage_format, "reftable")) > + git_config_set("extensions.refStorage", ref_storage_format); > + > if (!(flags & INIT_DB_QUIET)) { > int len = strlen(git_dir); > > @@ -540,6 +562,7 @@ static const char *const init_db_usage[] = { > int cmd_init_db(int argc, const char **argv, const char *prefix) > { > const char *git_dir; > + const char *ref_storage_format = default_ref_storage(); > const char *real_git_dir = NULL; > const char *work_tree; > const char *template_dir = NULL; > @@ -548,15 +571,18 @@ int cmd_init_db(int argc, const char **argv, const char *prefix) > const char *initial_branch = NULL; > int hash_algo = GIT_HASH_UNKNOWN; > const struct option init_db_options[] = { > - OPT_STRING(0, "template", &template_dir, N_("template-directory"), > - N_("directory from which templates will be used")), > + OPT_STRING(0, "template", &template_dir, > + N_("template-directory"), > + N_("directory from which templates will be used")), > OPT_SET_INT(0, "bare", &is_bare_repository_cfg, > - N_("create a bare repository"), 1), > + N_("create a bare repository"), 1), > { OPTION_CALLBACK, 0, "shared", &init_shared_repository, > - N_("permissions"), > - N_("specify that the git repository is to be shared amongst several users"), > - PARSE_OPT_OPTARG | PARSE_OPT_NONEG, shared_callback, 0}, > + N_("permissions"), > + N_("specify that the git repository is to be shared amongst several users"), > + PARSE_OPT_OPTARG | PARSE_OPT_NONEG, shared_callback, 0 }, > OPT_BIT('q', "quiet", &flags, N_("be quiet"), INIT_DB_QUIET), > + OPT_STRING(0, "ref-storage", &ref_storage_format, N_("backend"), > + N_("the ref storage format to use")), > OPT_STRING(0, "separate-git-dir", &real_git_dir, N_("gitdir"), > N_("separate git dir from working tree")), > OPT_STRING('b', "initial-branch", &initial_branch, N_("name"), > @@ -697,10 +723,11 @@ int cmd_init_db(int argc, const char **argv, const char *prefix) > } > > UNLEAK(real_git_dir); > + UNLEAK(ref_storage_format); > UNLEAK(git_dir); > UNLEAK(work_tree); > > flags |= INIT_DB_EXIST_OK; > return init_db(git_dir, real_git_dir, template_dir, hash_algo, > - initial_branch, flags); > + initial_branch, ref_storage_format, flags); > } > diff --git a/builtin/worktree.c b/builtin/worktree.c > index ce56fdaaa9..7931620788 100644 > --- a/builtin/worktree.c > +++ b/builtin/worktree.c > @@ -12,6 +12,7 @@ > #include "submodule.h" > #include "utf8.h" > #include "worktree.h" > +#include "../refs/refs-internal.h" > > static const char * const worktree_usage[] = { > N_("git worktree add [<options>] <path> [<commit-ish>]"), > @@ -402,9 +403,29 @@ static int add_worktree(const char *path, const char *refname, > * worktree. > */ > strbuf_reset(&sb); > - strbuf_addf(&sb, "%s/HEAD", sb_repo.buf); > - write_file(sb.buf, "%s", oid_to_hex(&null_oid)); > - strbuf_reset(&sb); > + if (get_main_ref_store(the_repository)->be == &refs_be_reftable) { > + /* XXX this is cut & paste from reftable_init_db. */ > + strbuf_addf(&sb, "%s/HEAD", sb_repo.buf); > + write_file(sb.buf, "%s", "ref: refs/heads/.invalid\n"); > + strbuf_reset(&sb); > + > + strbuf_addf(&sb, "%s/refs", sb_repo.buf); > + safe_create_dir(sb.buf, 1); > + strbuf_reset(&sb); > + > + strbuf_addf(&sb, "%s/refs/heads", sb_repo.buf); > + write_file(sb.buf, "this repository uses the reftable format"); > + strbuf_reset(&sb); > + > + strbuf_addf(&sb, "%s/reftable", sb_repo.buf); > + safe_create_dir(sb.buf, 1); > + strbuf_reset(&sb); > + } else { > + strbuf_addf(&sb, "%s/HEAD", sb_repo.buf); > + write_file(sb.buf, "%s", oid_to_hex(&null_oid)); > + strbuf_reset(&sb); > + } > + > strbuf_addf(&sb, "%s/commondir", sb_repo.buf); > write_file(sb.buf, "../.."); > > diff --git a/cache.h b/cache.h > index e986cf4ea9..545d2b7260 100644 > --- a/cache.h > +++ b/cache.h > @@ -627,9 +627,10 @@ int path_inside_repo(const char *prefix, const char *path); > #define INIT_DB_EXIST_OK 0x0002 > > int init_db(const char *git_dir, const char *real_git_dir, > - const char *template_dir, int hash_algo, > - const char *initial_branch, unsigned int flags); > -void initialize_repository_version(int hash_algo, int reinit); > + const char *template_dir, int hash_algo, const char *initial_branch, > + const char *ref_storage_format, unsigned int flags); > +void initialize_repository_version(int hash_algo, int reinit, > + const char *ref_storage_format); > > void sanitize_stdfds(void); > int daemonize(void); > @@ -1043,6 +1044,7 @@ struct repository_format { > int is_bare; > int hash_algo; > char *work_tree; > + char *ref_storage; > struct string_list unknown_extensions; > struct string_list v1_only_extensions; > }; > diff --git a/config.mak.uname b/config.mak.uname > index c7eba69e54..ae4e25a1a4 100644 > --- a/config.mak.uname > +++ b/config.mak.uname > @@ -709,7 +709,7 @@ vcxproj: > # Make .vcxproj files and add them > unset QUIET_GEN QUIET_BUILT_IN; \ > perl contrib/buildsystems/generate -g Vcxproj > - git add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj > + git add -f git.sln {*,*/lib,*/libreftable,t/helper/*}/*.vcxproj > > # Generate the LinkOrCopyBuiltins.targets and LinkOrCopyRemoteHttp.targets file > (echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \ > diff --git a/contrib/buildsystems/Generators/Vcxproj.pm b/contrib/buildsystems/Generators/Vcxproj.pm > index d2584450ba..1a25789d28 100644 > --- a/contrib/buildsystems/Generators/Vcxproj.pm > +++ b/contrib/buildsystems/Generators/Vcxproj.pm > @@ -77,7 +77,7 @@ sub createProject { > my $libs_release = "\n "; > my $libs_debug = "\n "; > if (!$static_library) { > - $libs_release = join(";", sort(grep /^(?!libgit\.lib|xdiff\/lib\.lib|vcs-svn\/lib\.lib)/, @{$$build_structure{"$prefix${name}_LIBS"}})); > + $libs_release = join(";", sort(grep /^(?!libgit\.lib|xdiff\/lib\.lib|vcs-svn\/lib\.lib|reftable\/libreftable\.lib)/, @{$$build_structure{"$prefix${name}_LIBS"}})); > $libs_debug = $libs_release; > $libs_debug =~ s/zlib\.lib/zlibd\.lib/g; > $libs_debug =~ s/libexpat\.lib/libexpatd\.lib/g; > @@ -232,6 +232,7 @@ sub createProject { > EOM > if (!$static_library || $target =~ 'vcs-svn' || $target =~ 'xdiff') { > my $uuid_libgit = $$build_structure{"LIBS_libgit_GUID"}; > + my $uuid_libreftable = $$build_structure{"LIBS_reftable/libreftable_GUID"}; > my $uuid_xdiff_lib = $$build_structure{"LIBS_xdiff/lib_GUID"}; > > print F << "EOM"; > @@ -241,6 +242,14 @@ sub createProject { > <ReferenceOutputAssembly>false</ReferenceOutputAssembly> > </ProjectReference> > EOM > + if (!($name =~ /xdiff|libreftable/)) { > + print F << "EOM"; > + <ProjectReference Include="$cdup\\reftable\\libreftable\\libreftable.vcxproj"> > + <Project>$uuid_libreftable</Project> > + <ReferenceOutputAssembly>false</ReferenceOutputAssembly> > + </ProjectReference> > +EOM > + } > if (!($name =~ 'xdiff')) { > print F << "EOM"; > <ProjectReference Include="$cdup\\xdiff\\lib\\xdiff_lib.vcxproj"> > diff --git a/refs.c b/refs.c > index 392f0bbf68..1b874db334 100644 > --- a/refs.c > +++ b/refs.c > @@ -19,10 +19,16 @@ > #include "repository.h" > #include "sigchain.h" > > +const char *default_ref_storage(void) > +{ > + const char *test = getenv("GIT_TEST_REFTABLE"); > + return test ? "reftable" : "files"; > +} > + > /* > * List of all available backends > */ > -static struct ref_storage_be *refs_backends = &refs_be_files; > +static struct ref_storage_be *refs_backends = &refs_be_reftable; > > static struct ref_storage_be *find_ref_storage_backend(const char *name) > { > @@ -1754,13 +1760,13 @@ static struct ref_store *lookup_ref_store_map(struct hashmap *map, > * Create, record, and return a ref_store instance for the specified > * gitdir. > */ > -static struct ref_store *ref_store_init(const char *gitdir, > +static struct ref_store *ref_store_init(const char *gitdir, const char *be_name, > unsigned int flags) > { > - const char *be_name = "files"; > - struct ref_storage_be *be = find_ref_storage_backend(be_name); > + struct ref_storage_be *be; > struct ref_store *refs; > > + be = find_ref_storage_backend(be_name); > if (!be) > BUG("reference backend %s is unknown", be_name); > > @@ -1776,7 +1782,11 @@ struct ref_store *get_main_ref_store(struct repository *r) > if (!r->gitdir) > BUG("attempting to get main_ref_store outside of repository"); > > - r->refs_private = ref_store_init(r->gitdir, REF_STORE_ALL_CAPS); > + r->refs_private = ref_store_init(r->gitdir, > + r->ref_storage_format ? > + r->ref_storage_format : > + default_ref_storage(), > + REF_STORE_ALL_CAPS); > r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private); > return r->refs_private; > } > @@ -1832,7 +1842,7 @@ struct ref_store *get_submodule_ref_store(const char *submodule) > goto done; > > /* assume that add_submodule_odb() has been called */ > - refs = ref_store_init(submodule_sb.buf, > + refs = ref_store_init(submodule_sb.buf, default_ref_storage(), > REF_STORE_READ | REF_STORE_ODB); > register_ref_store_map(&submodule_ref_stores, "submodule", > refs, submodule); > @@ -1846,6 +1856,7 @@ struct ref_store *get_submodule_ref_store(const char *submodule) > > struct ref_store *get_worktree_ref_store(const struct worktree *wt) > { > + const char *format = default_ref_storage(); > struct ref_store *refs; > const char *id; > > @@ -1859,9 +1870,9 @@ struct ref_store *get_worktree_ref_store(const struct worktree *wt) > > if (wt->id) > refs = ref_store_init(git_common_path("worktrees/%s", wt->id), > - REF_STORE_ALL_CAPS); > + format, REF_STORE_ALL_CAPS); > else > - refs = ref_store_init(get_git_common_dir(), > + refs = ref_store_init(get_git_common_dir(), format, > REF_STORE_ALL_CAPS); > > if (refs) > diff --git a/refs.h b/refs.h > index 6695518156..7dc60472c9 100644 > --- a/refs.h > +++ b/refs.h > @@ -11,6 +11,9 @@ struct string_list; > struct string_list_item; > struct worktree; > > +/* Returns the ref storage backend to use by default. */ > +const char *default_ref_storage(void); > + > /* > * Resolve a reference, recursively following symbolic refererences. > * > diff --git a/refs/refs-internal.h b/refs/refs-internal.h > index 467f4b3c93..28166bf1f8 100644 > --- a/refs/refs-internal.h > +++ b/refs/refs-internal.h > @@ -669,6 +669,7 @@ struct ref_storage_be { > }; > > extern struct ref_storage_be refs_be_files; > +extern struct ref_storage_be refs_be_reftable; > extern struct ref_storage_be refs_be_packed; > > /* > diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c > new file mode 100644 > index 0000000000..894c72ddc4 > --- /dev/null > +++ b/refs/reftable-backend.c > @@ -0,0 +1,1418 @@ > +#include "../cache.h" > +#include "../chdir-notify.h" > +#include "../config.h" > +#include "../iterator.h" > +#include "../lockfile.h" > +#include "../refs.h" > +#include "../reftable/reftable-stack.h" > +#include "../reftable/reftable-record.h" > +#include "../reftable/reftable-error.h" > +#include "../reftable/reftable-blocksource.h" > +#include "../reftable/reftable-reader.h" > +#include "../reftable/reftable-iterator.h" > +#include "../reftable/reftable-merged.h" > +#include "../reftable/reftable-generic.h" > +#include "../worktree.h" > +#include "refs-internal.h" > + > +extern struct ref_storage_be refs_be_reftable; > + > +struct git_reftable_ref_store { > + struct ref_store base; > + unsigned int store_flags; > + > + int err; > + char *repo_dir; > + > + char *reftable_dir; > + char *worktree_reftable_dir; > + > + struct reftable_stack *main_stack; > + struct reftable_stack *worktree_stack; > +}; > + > +static struct reftable_stack *stack_for(struct git_reftable_ref_store *store, > + const char *refname) > +{ > + if (store->worktree_stack == NULL) > + return store->main_stack; > + > + switch (ref_type(refname)) { > + case REF_TYPE_PER_WORKTREE: > + case REF_TYPE_PSEUDOREF: > + case REF_TYPE_OTHER_PSEUDOREF: > + return store->worktree_stack; > + default: > + case REF_TYPE_MAIN_PSEUDOREF: > + case REF_TYPE_NORMAL: > + return store->main_stack; > + } > +} > + > +static int git_reftable_read_raw_ref(struct ref_store *ref_store, > + const char *refname, struct object_id *oid, > + struct strbuf *referent, > + unsigned int *type); > + > +static void clear_reftable_log_record(struct reftable_log_record *log) > +{ > + log->old_hash = NULL; > + log->new_hash = NULL; > + log->message = NULL; > + log->refname = NULL; > + reftable_log_record_release(log); > +} > + > +static void fill_reftable_log_record(struct reftable_log_record *log) > +{ > + const char *info = git_committer_info(0); > + struct ident_split split = { NULL }; > + int result = split_ident_line(&split, info, strlen(info)); > + int sign = 1; > + assert(0 == result); > + > + reftable_log_record_release(log); > + log->name = > + xstrndup(split.name_begin, split.name_end - split.name_begin); > + log->email = > + xstrndup(split.mail_begin, split.mail_end - split.mail_begin);
next prev parent reply other threads:[~2020-11-27 11:01 UTC|newest] Thread overview: 251+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-16 19:10 [PATCH 00/13] reftable library Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 01/13] reftable: add LICENSE Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 02/13] reftable: define the public API Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 03/13] vcxproj: adjust for the reftable changes Johannes Schindelin via GitGitGadget 2020-09-16 19:10 ` [PATCH 04/13] reftable: add a barebones unittest framework Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 05/13] reftable: utility functions Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 06/13] reftable: (de)serialization for the polymorphic record type Han-Wen Nienhuys via GitGitGadget 2020-09-20 1:00 ` Junio C Hamano 2020-09-21 13:13 ` Han-Wen Nienhuys 2020-09-24 7:21 ` Jeff King 2020-09-24 7:31 ` Jeff King 2020-09-24 17:22 ` Junio C Hamano 2020-09-16 19:10 ` [PATCH 07/13] reftable: reading/writing blocks Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 08/13] reftable: a generic binary tree implementation Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 09/13] reftable: write reftable files Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 10/13] reftable: read " Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 11/13] reftable: file level tests Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 12/13] reftable: rest of library Han-Wen Nienhuys via GitGitGadget 2020-09-16 19:10 ` [PATCH 13/13] reftable: "test-tool dump-reftable" command Han-Wen Nienhuys via GitGitGadget 2020-10-01 16:10 ` [PATCH v2 00/13] reftable library Han-Wen Nienhuys via GitGitGadget 2020-10-01 16:10 ` [PATCH v2 01/13] reftable: add LICENSE Han-Wen Nienhuys via GitGitGadget 2020-10-02 3:18 ` Jonathan Nieder 2020-10-01 16:10 ` [PATCH v2 02/13] reftable: define the public API Han-Wen Nienhuys via GitGitGadget 2020-10-02 3:58 ` Jonathan Nieder 2020-10-09 21:13 ` Emily Shaffer 2020-10-10 17:03 ` Han-Wen Nienhuys 2020-11-30 14:44 ` Han-Wen Nienhuys 2020-10-10 13:43 ` Han-Wen Nienhuys 2020-10-12 16:57 ` Jonathan Nieder 2020-11-30 14:55 ` Han-Wen Nienhuys 2020-10-08 1:41 ` Jonathan Tan 2020-10-10 16:57 ` Han-Wen Nienhuys 2020-10-01 16:10 ` [PATCH v2 03/13] vcxproj: adjust for the reftable changes Johannes Schindelin via GitGitGadget 2020-10-02 4:02 ` Jonathan Nieder 2020-10-02 11:43 ` Johannes Schindelin 2020-10-01 16:10 ` [PATCH v2 04/13] reftable: add a barebones unittest framework Han-Wen Nienhuys via GitGitGadget 2020-10-02 4:05 ` Jonathan Nieder 2020-10-08 1:45 ` Jonathan Tan 2020-10-08 22:31 ` Josh Steadmon 2020-10-01 16:10 ` [PATCH v2 05/13] reftable: utility functions Han-Wen Nienhuys via GitGitGadget 2020-10-02 4:12 ` Jonathan Nieder 2020-10-10 17:32 ` Han-Wen Nienhuys 2020-10-12 15:25 ` Jonathan Nieder 2020-10-12 17:05 ` Patrick Steinhardt 2020-10-12 17:45 ` Jonathan Nieder 2020-10-13 12:12 ` Johannes Schindelin 2020-10-13 15:47 ` Junio C Hamano 2020-10-15 11:46 ` Johannes Schindelin 2020-10-15 16:23 ` Junio C Hamano 2020-10-15 19:39 ` Johannes Schindelin 2020-10-16 9:15 ` Patrick Steinhardt 2020-10-02 14:01 ` Johannes Schindelin 2020-10-02 20:47 ` Junio C Hamano 2020-10-03 8:07 ` Johannes Schindelin 2020-10-08 1:48 ` Jonathan Tan 2020-10-10 17:28 ` Han-Wen Nienhuys 2020-10-11 10:52 ` Johannes Schindelin 2020-10-12 15:19 ` Jonathan Nieder 2020-10-12 18:44 ` Johannes Schindelin 2020-10-12 19:41 ` Jonathan Nieder 2020-10-12 20:27 ` Johannes Schindelin 2020-10-12 16:42 ` Junio C Hamano 2020-10-12 19:01 ` Johannes Schindelin 2020-10-23 9:13 ` Ævar Arnfjörð Bjarmason 2020-10-23 17:36 ` Junio C Hamano 2020-10-01 16:10 ` [PATCH v2 06/13] reftable: (de)serialization for the polymorphic record type Han-Wen Nienhuys via GitGitGadget 2020-10-01 19:23 ` Junio C Hamano 2020-10-01 19:59 ` Ramsay Jones 2020-10-01 16:10 ` [PATCH v2 07/13] reftable: reading/writing blocks Han-Wen Nienhuys via GitGitGadget 2020-10-01 16:10 ` [PATCH v2 08/13] reftable: a generic binary tree implementation Han-Wen Nienhuys via GitGitGadget 2020-10-01 16:10 ` [PATCH v2 09/13] reftable: write reftable files Han-Wen Nienhuys via GitGitGadget 2020-10-01 16:11 ` [PATCH v2 10/13] reftable: read " Han-Wen Nienhuys via GitGitGadget 2020-10-01 16:11 ` [PATCH v2 11/13] reftable: file level tests Han-Wen Nienhuys via GitGitGadget 2020-10-01 16:11 ` [PATCH v2 12/13] reftable: rest of library Han-Wen Nienhuys via GitGitGadget 2020-10-02 13:57 ` Johannes Schindelin 2020-10-02 17:08 ` Junio C Hamano 2020-10-04 18:39 ` Johannes Schindelin 2020-10-01 16:11 ` [PATCH v2 13/13] reftable: "test-tool dump-reftable" command Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 00/16] reftable library Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 01/16] move sleep_millisec to git-compat-util.h Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 02/16] init-db: set the_repository->hash_algo early on Han-Wen Nienhuys via GitGitGadget 2020-11-27 10:22 ` Ævar Arnfjörð Bjarmason 2020-11-26 19:42 ` [PATCH v3 03/16] reftable: add LICENSE Han-Wen Nienhuys via GitGitGadget 2020-11-27 10:23 ` Ævar Arnfjörð Bjarmason 2020-11-30 11:26 ` Han-Wen Nienhuys 2020-11-30 20:25 ` Han-Wen Nienhuys 2020-11-30 21:21 ` Felipe Contreras 2020-12-01 9:51 ` Han-Wen Nienhuys 2020-12-01 10:38 ` Felipe Contreras 2020-12-01 11:45 ` Ævar Arnfjörð Bjarmason 2020-12-01 13:34 ` Han-Wen Nienhuys 2020-12-01 23:13 ` Felipe Contreras 2020-12-01 23:03 ` Felipe Contreras 2020-11-26 19:42 ` [PATCH v3 04/16] reftable: add error related functionality Han-Wen Nienhuys via GitGitGadget 2020-11-27 9:13 ` Felipe Contreras 2020-11-27 10:25 ` Ævar Arnfjörð Bjarmason 2020-11-30 11:27 ` Han-Wen Nienhuys 2020-11-26 19:42 ` [PATCH v3 05/16] reftable: utility functions Han-Wen Nienhuys via GitGitGadget 2020-11-27 10:18 ` Felipe Contreras 2020-11-27 10:33 ` Ævar Arnfjörð Bjarmason 2020-11-26 19:42 ` [PATCH v3 06/16] reftable: add blocksource, an abstraction for random access reads Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 07/16] reftable: (de)serialization for the polymorphic record type Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 08/16] reftable: reading/writing blocks Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 09/16] reftable: a generic binary tree implementation Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 10/16] reftable: write reftable files Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 11/16] reftable: read " Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 12/16] reftable: reftable file level tests Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 13/16] reftable: rest of library Han-Wen Nienhuys via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 14/16] Reftable support for git-core Han-Wen Nienhuys via GitGitGadget 2020-11-27 10:59 ` Ævar Arnfjörð Bjarmason [this message] 2020-11-26 19:42 ` [PATCH v3 15/16] git-prompt: prepare for reftable refs backend SZEDER Gábor via GitGitGadget 2020-11-26 19:42 ` [PATCH v3 16/16] Add "test-tool dump-reftable" command Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 00/15] reftable library Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 01/15] init-db: set the_repository->hash_algo early on Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 02/15] reftable: add LICENSE Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 03/15] reftable: add error related functionality Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 04/15] reftable: utility functions Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 05/15] reftable: add blocksource, an abstraction for random access reads Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 06/15] reftable: (de)serialization for the polymorphic record type Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 07/15] reftable: reading/writing blocks Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 08/15] reftable: a generic binary tree implementation Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 09/15] reftable: write reftable files Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 10/15] reftable: read " Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 11/15] reftable: reftable file level tests Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 12/15] reftable: rest of library Han-Wen Nienhuys via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 13/15] Reftable support for git-core Han-Wen Nienhuys via GitGitGadget 2021-01-21 15:55 ` Ævar Arnfjörð Bjarmason 2021-01-21 16:14 ` Han-Wen Nienhuys 2021-01-21 16:21 ` Han-Wen Nienhuys 2021-01-26 13:44 ` Ævar Arnfjörð Bjarmason 2021-04-23 10:22 ` Han-Wen Nienhuys 2021-04-26 13:23 ` Ævar Arnfjörð Bjarmason 2021-04-26 16:17 ` Han-Wen Nienhuys 2021-04-28 16:32 ` Ævar Arnfjörð Bjarmason 2021-04-28 17:40 ` Han-Wen Nienhuys 2021-02-22 0:41 ` [PATCH] refs: introduce API function to write invalid null ref Stefan Beller 2021-02-22 1:20 ` Eric Sunshine 2021-02-22 3:09 ` Eric Sunshine 2021-02-22 18:38 ` Han-Wen Nienhuys 2020-12-09 14:00 ` [PATCH v4 14/15] git-prompt: prepare for reftable refs backend SZEDER Gábor via GitGitGadget 2020-12-09 14:00 ` [PATCH v4 15/15] Add "test-tool dump-reftable" command Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 00/15] reftable library Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 01/15] init-db: set the_repository->hash_algo early on Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 02/15] reftable: add LICENSE Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 03/15] reftable: add error related functionality Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 04/15] reftable: utility functions Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 05/15] reftable: add blocksource, an abstraction for random access reads Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 06/15] reftable: (de)serialization for the polymorphic record type Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 07/15] reftable: reading/writing blocks Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 08/15] reftable: a generic binary tree implementation Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 09/15] reftable: write reftable files Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 10/15] reftable: read " Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 11/15] reftable: reftable file level tests Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 12/15] reftable: rest of library Han-Wen Nienhuys via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 13/15] Reftable support for git-core Han-Wen Nienhuys via GitGitGadget 2021-03-23 11:40 ` Derrick Stolee 2021-03-23 12:20 ` Ævar Arnfjörð Bjarmason 2021-03-23 20:14 ` Junio C Hamano 2021-03-23 20:12 ` Junio C Hamano 2021-03-12 20:19 ` [PATCH v5 14/15] git-prompt: prepare for reftable refs backend SZEDER Gábor via GitGitGadget 2021-03-12 20:19 ` [PATCH v5 15/15] Add "test-tool dump-reftable" command Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 00/20] reftable library Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 01/20] init-db: set the_repository->hash_algo early on Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 02/20] reftable: add LICENSE Han-Wen Nienhuys via GitGitGadget 2021-04-13 7:28 ` Ævar Arnfjörð Bjarmason 2021-04-13 10:50 ` Han-Wen Nienhuys 2021-04-13 13:41 ` Ævar Arnfjörð Bjarmason 2021-04-12 19:25 ` [PATCH v6 03/20] reftable: add error related functionality Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 04/20] reftable: utility functions Han-Wen Nienhuys via GitGitGadget 2021-04-13 8:02 ` Ævar Arnfjörð Bjarmason 2021-04-13 10:58 ` Han-Wen Nienhuys 2021-04-13 12:56 ` Ævar Arnfjörð Bjarmason 2021-04-13 13:14 ` Ævar Arnfjörð Bjarmason 2021-04-15 15:00 ` Han-Wen Nienhuys 2021-04-12 19:25 ` [PATCH v6 05/20] reftable: add blocksource, an abstraction for random access reads Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 06/20] reftable: (de)serialization for the polymorphic record type Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 07/20] reftable: reading/writing blocks Han-Wen Nienhuys via GitGitGadget 2021-04-12 21:40 ` Junio C Hamano 2021-04-13 8:19 ` Ævar Arnfjörð Bjarmason 2021-04-15 8:57 ` Han-Wen Nienhuys 2021-04-12 19:25 ` [PATCH v6 08/20] reftable: a generic binary tree implementation Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 09/20] reftable: write reftable files Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 10/20] reftable: generic interface to tables Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 11/20] reftable: read reftable files Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 12/20] reftable: reftable file level tests Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 13/20] reftable: add a heap-based priority queue for reftable records Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 14/20] reftable: add merged table view Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 15/20] reftable: implement refname validation Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 16/20] reftable: implement stack, a mutable database of reftable files Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 17/20] reftable: add dump utility Han-Wen Nienhuys via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 18/20] Reftable support for git-core Han-Wen Nienhuys via GitGitGadget 2021-04-13 7:18 ` Ævar Arnfjörð Bjarmason 2021-04-14 16:44 ` Han-Wen Nienhuys 2021-04-16 14:55 ` Ævar Arnfjörð Bjarmason 2021-04-16 18:47 ` Junio C Hamano 2021-04-12 19:25 ` [PATCH v6 19/20] git-prompt: prepare for reftable refs backend SZEDER Gábor via GitGitGadget 2021-04-12 19:25 ` [PATCH v6 20/20] Add "test-tool dump-reftable" command Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 00/28] reftable library Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 01/28] refs: ref_iterator_peel returns boolean, rather than peel_status Han-Wen Nienhuys via GitGitGadget 2021-04-20 18:47 ` Junio C Hamano 2021-04-21 10:15 ` Han-Wen Nienhuys 2021-04-21 23:28 ` Junio C Hamano 2021-04-19 11:37 ` [PATCH v7 02/28] refs: document reflog_expire_fn's flag argument Han-Wen Nienhuys via GitGitGadget 2021-04-20 19:34 ` Junio C Hamano 2021-04-27 15:21 ` Han-Wen Nienhuys 2021-04-19 11:37 ` [PATCH v7 03/28] refs/debug: trace into reflog expiry too Han-Wen Nienhuys via GitGitGadget 2021-04-20 19:41 ` Junio C Hamano 2021-04-22 17:27 ` Han-Wen Nienhuys 2021-04-19 11:37 ` [PATCH v7 04/28] hash.h: provide constants for the hash IDs Han-Wen Nienhuys via GitGitGadget 2021-04-20 19:49 ` Junio C Hamano 2021-04-21 1:04 ` brian m. carlson 2021-04-21 9:43 ` Han-Wen Nienhuys 2021-07-22 8:31 ` Han-Wen Nienhuys 2021-04-19 11:37 ` [PATCH v7 05/28] init-db: set the_repository->hash_algo early on Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 06/28] reftable: add LICENSE Han-Wen Nienhuys via GitGitGadget 2021-04-21 7:48 ` Ævar Arnfjörð Bjarmason 2021-04-21 9:15 ` Han-Wen Nienhuys 2021-04-19 11:37 ` [PATCH v7 07/28] reftable: add error related functionality Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 08/28] reftable: utility functions Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 09/28] reftable: add blocksource, an abstraction for random access reads Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 10/28] reftable: (de)serialization for the polymorphic record type Han-Wen Nienhuys via GitGitGadget 2021-05-04 17:23 ` Andrzej Hunt 2021-05-18 13:12 ` Han-Wen Nienhuys 2021-04-19 11:37 ` [PATCH v7 11/28] Provide zlib's uncompress2 from compat/zlib-compat.c Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 12/28] reftable: reading/writing blocks Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 13/28] reftable: a generic binary tree implementation Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 14/28] reftable: write reftable files Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 15/28] reftable: generic interface to tables Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 16/28] reftable: read reftable files Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 17/28] reftable: reftable file level tests Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 18/28] reftable: add a heap-based priority queue for reftable records Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 19/28] reftable: add merged table view Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 20/28] reftable: implement refname validation Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 21/28] reftable: implement stack, a mutable database of reftable files Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 22/28] reftable: add dump utility Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 23/28] Reftable support for git-core Han-Wen Nienhuys via GitGitGadget 2021-04-20 22:44 ` Junio C Hamano 2021-04-21 10:19 ` Han-Wen Nienhuys 2021-04-21 23:22 ` Junio C Hamano 2021-05-04 17:24 ` Andrzej Hunt 2021-05-18 13:18 ` Han-Wen Nienhuys 2021-05-18 13:30 ` Han-Wen Nienhuys 2021-04-19 11:37 ` [PATCH v7 24/28] git-prompt: prepare for reftable refs backend SZEDER Gábor via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 25/28] Add "test-tool dump-reftable" command Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 26/28] t1301: document what needs to be done for REFTABLE Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 27/28] t1401,t2011: parameterize HEAD.lock " Han-Wen Nienhuys via GitGitGadget 2021-04-19 11:37 ` [PATCH v7 28/28] t1404: annotate test cases with REFFILES Han-Wen Nienhuys via GitGitGadget 2021-04-21 7:45 ` [PATCH v7 00/28] reftable library Ævar Arnfjörð Bjarmason 2021-04-21 9:52 ` Han-Wen Nienhuys 2021-04-21 11:21 ` Ævar Arnfjörð Bjarmason 2021-04-26 17:59 ` Han-Wen Nienhuys
Reply instructions: You may reply publicly 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=87czzznk03.fsf@evledraar.gmail.com \ --to=avarab@gmail.com \ --cc=Johannes.Schindelin@gmx.de \ --cc=emilyshaffer@google.com \ --cc=git@vger.kernel.org \ --cc=gitgitgadget@gmail.com \ --cc=hanwen@google.com \ --cc=hanwenn@gmail.com \ --cc=jonathantanmy@google.com \ --cc=jrnieder@gmail.com \ --cc=peff@peff.net \ --cc=ps@pks.im \ --cc=ramsay@ramsayjones.plus.com \ --cc=steadmon@google.com \ --subject='Re: [PATCH v3 14/16] Reftable support for git-core' \ /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
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).