git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* Experimental TDB support for GIT REFS
@ 2014-06-27 21:30 Ronnie Sahlberg
  2014-06-28  0:37 ` Shawn Pearce
  0 siblings, 1 reply; 4+ messages in thread
From: Ronnie Sahlberg @ 2014-06-27 21:30 UTC (permalink / raw)
  To: git@vger.kernel.org; +Cc: Michael Haggerty

List,

One of my ref transaction aims is to make define a stable public API
for accessing refs.
Once this is done I want to make it possible to replace the current
.git/refs/* model with a
different type of backend.
In my case I want to add support to store all refs and reflogs in a TDB database
but once we have a pluggable backend framework for refs, if someone
wants to store the refs
in a SQL database, that should be fairly trivial too.

There are a few series queued before this becomes possible, but is
anyone wants to test or play with my "git can use TDB database" you
can find an implementation of this at

https://github.com/rsahlberg/git/tree/backend-struct-tdb

Most everything works (except submodules) but the code needs more work.
It is also VERY LIKELY that the database schema WILL CHANGE so this is
only for testing
and you will need to blow the repo away and start all over again at some stage.
I.e. no production use.


To activate TDB support a new flag is added to the init-db and clone commands:

git init --tdb-repo-name=RONNIE .

This creates a new git repo and sets core.tdb_repo_name in the config.
This config variable tells git to dlopen and use libtdb instead of
using the files under .git/refs

repo-name=RONNIE is a string that identifies the repository and all
keys in the database is prefixed
with repo-name + '\0'

By default this will create the two database refs.tdb and logs.tdb in
the repositories .git directory
but it is also possible to store the databases somehwere else by
adding --tdb-repo-dir=/var/lib/git/
when creating the repo.

Since the keys in the database are prefixed with the repo name it is
even possible to store all the
refs for multiple independent repos in the same database :

- First repository
  $ cd <somewhere>
  $ git init-db --tdb-repo-name=MyFirstRepo --tdb-repo-dir=/var/lib/git

- Second repository
  $ cd <somewhere else>
  $ git init-db --tdb-repo-name=MySecondRepo --tdb-repo-dir=/var/lib/git


This can also be a solutions for platforms lacking case sensitive
filesystems where today two refs that only differ in case can not be
used.



The current prototype will still apply the naming collision rules that
the existing files backend has.
For example if you have a ref 'm'  you can not create another ref 'm/foo'.
I left those checks as is in order to not break compatibility between
the TDB backend and the current Files backend.


Please feel free to test this out. And comment.


regards
ronnie sahlberg

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-07-02 22:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-27 21:30 Experimental TDB support for GIT REFS Ronnie Sahlberg
2014-06-28  0:37 ` Shawn Pearce
2014-07-02 17:11   ` Ronnie Sahlberg
2014-07-02 22:34     ` Ronnie Sahlberg

Code repositories for project(s) associated with this public 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).