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

[PATCH v2 00/21] refs backend reroll

From
David Turner <dturner@twopensource.com>
Date
Jan 12, 2016, 01:21 UTC
Message-ID
<1452561740-8668-1-git-send-email-dturner@twopensource.com>

This version incorporates many changes suggested by Michael Haggerty, Junio, Jonathan Nieder, Eric Sunshine, and Jeff King. I think I have addressed of the comments that were sent to me. Those that I chose not to incorporate, I responded to on the mailing list.

Thanks for all of the feed back so far.
In response to comments, I did the following:

I incorporated Michael's use child_process for recursive checkouts patch.

I fixed some formatting and convention (extern) errors.
I removed a bit of dead code.

I added checks to ensure that submodules have the same backend as parent modules; this turned up a bunch of weird stuff, which was mostly fixed by the above.

I rewrote the ref splitting code along the lines suggested by Michael. Now we split symbolic-ref updates as well as separating updates by backend.

Documentation clarifications.
Some spelling/grammar fixes.

In addition (and in part inspired by these comments), I made the following changes:

In general, I tried to simplify alternate ref backend selection code.

The major API change is to remove the backend init function. There was no right place to call this function; if it got called too early, we might not yet know what repo we're talking about, and if it got called too late, other backend functions would fail. So now the convention is that backends must initialize themselves on first call. This is a little irritating, but does work.

I added a patch to make git-svn support alternate ref backends.

I re-tested with the usual test hacks and have no new failures (although testing did turn up one minor missed update to transport.c; I think I must have missed some of the test hacks in the last round).

This version fixes one silly bug in lmdb_delete_refs that I noticed while testing.

David Turner (17):
  refs: add do_for_each_per_worktree_ref
  refs: add methods for reflog
  refs: add method for initial ref transaction commit
  refs: add method for delete_refs
  refs: add methods to init refs db
  refs: add method to rename refs
  refs: make lock generic
  refs: move duplicate check to common code
  refs: allow log-only updates
  refs: resolve symbolic refs first
  refs: always handle non-normal refs in files backend
  init: allow alternate backends to be set for new repos
  refs: check submodules ref storage config
  refs: allow ref backend to be set for clone
  svn: learn ref-storage argument
  refs: add LMDB refs backend
  refs: tests for lmdb backend
Michael Haggerty (1):
  clone: use child_process for recursive checkouts
Ronnie Sahlberg (3):
  refs: add a backend method structure with transaction functions
  refs: add methods for misc ref operations
  refs: add methods for the ref iterators
 .gitignore                                     |    1 +
 Documentation/config.txt                       |    7 +
 Documentation/git-clone.txt                    |    5 +
 Documentation/git-init-db.txt                  |    2 +-
 Documentation/git-init.txt                     |    7 +-
 Documentation/technical/refs-lmdb-backend.txt  |   52 +
 Documentation/technical/repository-version.txt |    5 +
 Makefile                                       |   12 +
 builtin/clone.c                                |   19 +-
 builtin/init-db.c                              |   40 +-
 builtin/submodule--helper.c                    |    2 +-
 cache.h                                        |    2 +
 config.c                                       |   29 +
 configure.ac                                   |   33 +
 contrib/workdir/git-new-workdir                |    3 +
 git-submodule.sh                               |   13 +
 git-svn.perl                                   |    6 +-
 path.c                                         |   29 +-
 refs.c                                         |  453 +++++-
 refs.h                                         |   17 +
 refs/files-backend.c                           |  389 +++--
 refs/lmdb-backend.c                            | 2049 ++++++++++++++++++++++++
 refs/refs-internal.h                           |  128 +-
 setup.c                                        |   23 +-
 t/t0001-init.sh                                |   24 +
 t/t1460-refs-lmdb-backend.sh                   | 1109 +++++++++++++
 t/t1470-refs-lmdb-backend-reflog.sh            |  359 +++++
 t/t1480-refs-lmdb-submodule.sh                 |   85 +
 t/test-lib.sh                                  |    1 +
 test-refs-lmdb-backend.c                       |   64 +
 30 files changed, 4762 insertions(+), 206 deletions(-)
 create mode 100644 Documentation/technical/refs-lmdb-backend.txt
 create mode 100644 refs/lmdb-backend.c
 create mode 100755 t/t1460-refs-lmdb-backend.sh
 create mode 100755 t/t1470-refs-lmdb-backend-reflog.sh
 create mode 100755 t/t1480-refs-lmdb-submodule.sh
 create mode 100644 test-refs-lmdb-backend.c
-- 
2.4.2.749.g730654d-twtrsrc
Next: David Turner
Message 1 of 35 in “refs backend reroll”
  1. 00/21 refs backend rerollDavid Turner, Jan 12, 2016
  2. 01/21 refs: add a backend method structure with transaction functionsDavid Turner, Jan 12, 2016
  3. 02/21 refs: add methods for misc ref operationsDavid Turner, Jan 12, 2016
  4. 03/21 refs: add methods for the ref iteratorsDavid Turner, Jan 12, 2016
  5. 04/21 refs: add do_for_each_per_worktree_refDavid Turner, Jan 12, 2016
  6. 05/21 refs: add methods for reflogDavid Turner, Jan 12, 2016
  7. 06/21 refs: add method for initial ref transaction commitDavid Turner, Jan 12, 2016
  8. 07/21 refs: add method for delete_refsDavid Turner, Jan 12, 2016
  9. 08/21 refs: add methods to init refs dbDavid Turner, Jan 12, 2016
  10. 09/21 refs: add method to rename refsDavid Turner, Jan 12, 2016
  11. 10/21 refs: make lock genericDavid Turner, Jan 12, 2016
  12. 11/21 refs: move duplicate check to common codeDavid Turner, Jan 12, 2016
  13. 12/21 refs: allow log-only updatesDavid Turner, Jan 12, 2016
  14. 13/21 refs: resolve symbolic refs firstDavid Turner, Jan 12, 2016
  15. Junio C HamanoJan 13, 2016
  16. David TurnerJan 13, 2016
  17. 14/21 refs: always handle non-normal refs in files backendDavid Turner, Jan 12, 2016
  18. Junio C HamanoJan 13, 2016
  19. David TurnerJan 13, 2016
  20. 15/21 init: allow alternate backends to be set for new reposDavid Turner, Jan 12, 2016
  21. 16/21 refs: check submodules ref storage configDavid Turner, Jan 12, 2016
  22. Junio C HamanoJan 13, 2016
  23. David TurnerJan 13, 2016
  24. Junio C HamanoJan 13, 2016
  25. 17/21 clone: use child_process for recursive checkoutsDavid Turner, Jan 12, 2016
  26. 18/21 refs: allow ref backend to be set for cloneDavid Turner, Jan 12, 2016
  27. 19/21 svn: learn ref-storage argumentDavid Turner, Jan 12, 2016
  28. 20/21 refs: add LMDB refs backendDavid Turner, Jan 12, 2016
  29. Jeff KingJan 14, 2016
  30. David TurnerJan 14, 2016
  31. 21/21 refs: tests for lmdb backendDavid Turner, Jan 12, 2016
  32. Junio C HamanoJan 13, 2016
  33. Jeff KingJan 14, 2016
  34. David TurnerJan 14, 2016
  35. Jeff KingJan 14, 2016

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.