You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/12/03 23:47:30 UTC
svn commit: r1717860 - in
/subversion/branches/ra-git/subversion/libsvn_fs_git: fs_git.h
fsgit-metadata.sql fsgit-queries.sql gitdb.c revmap.c
Author: rhuijben
Date: Thu Dec 3 22:47:30 2015
New Revision: 1717860
URL: http://svn.apache.org/viewvc?rev=1717860&view=rev
Log:
On the ra-git branch: Start filling the branchmap table in the sqlite database
to fix svn ls ^/branches and to prepare hiding and re-adding branches pointing
to existing revisions during repository syncs.
* subversion/libsvn_fs_git/fsgit-metadata.sql
(BRANCHMAP): Rename and add column.
* subversion/libsvn_fs_git/fsgit-queries.sql
(STMT_SELECT_HEADREV): Tweak query.
(STMT_SELECT_BRANCH_EXACT,
STMT_INSERT_BRANCH): New query.
(STMT_SELECT_BRANCHES): Tweak query.
* subversion/libsvn_fs_git/fs_git.h
(svn_fs_git__db_branch_ensure): New function.
* subversion/libsvn_fs_git/gitdb.c
(db_branch_ensure,
svn_fs_git__db_branch_ensure): New function.
* subversion/libsvn_fs_git/revmap.c
(revmap_update_branch): Ensure branch if necessary.
Modified:
subversion/branches/ra-git/subversion/libsvn_fs_git/fs_git.h
subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-metadata.sql
subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-queries.sql
subversion/branches/ra-git/subversion/libsvn_fs_git/gitdb.c
subversion/branches/ra-git/subversion/libsvn_fs_git/revmap.c
Modified: subversion/branches/ra-git/subversion/libsvn_fs_git/fs_git.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_fs_git/fs_git.h?rev=1717860&r1=1717859&r2=1717860&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_fs_git/fs_git.h (original)
+++ subversion/branches/ra-git/subversion/libsvn_fs_git/fs_git.h Thu Dec 3 22:47:30 2015
@@ -144,6 +144,13 @@ svn_fs_git__db_get_tags_branches(apr_has
apr_pool_t *scratch_pool);
svn_error_t *
+svn_fs_git__db_branch_ensure(svn_fs_t *fs,
+ const char *relpath,
+ svn_revnum_t youngest_rev,
+ svn_revnum_t from_rev,
+ apr_pool_t *scratch_pool);
+
+svn_error_t *
svn_fs_git__db_set_uuid(svn_fs_t *fs,
const char *uuid,
apr_pool_t *scratch_pool);
Modified: subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-metadata.sql
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-metadata.sql?rev=1717860&r1=1717859&r2=1717860&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-metadata.sql (original)
+++ subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-metadata.sql Thu Dec 3 22:47:30 2015
@@ -61,8 +61,10 @@ CREATE TABLE BRANCHMAP (
relpath TEXT NOT NULL,
- from_rev INTEGER NOT NULL,
- to_rev INTEGER NULL
+ revnum INTEGER NOT NULL,
+ to_rev INTEGER NULL,
+
+ from_rev INTEGER NULL
);
CREATE UNIQUE INDEX I_BRANCHMAP_RELPATH ON BRANCHMAP (relpath, from_rev);
Modified: subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-queries.sql
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-queries.sql?rev=1717860&r1=1717859&r2=1717860&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-queries.sql (original)
+++ subversion/branches/ra-git/subversion/libsvn_fs_git/fsgit-queries.sql Thu Dec 3 22:47:30 2015
@@ -37,7 +37,7 @@ INSERT OR REPLACE INTO REPOSITORY(id, uu
SELECT MAX(
IFNULL((SELECT MAX(revnum) FROM REVMAP), 0),
IFNULL((SELECT MAX(revnum) FROM TAGMAP), 0),
- IFNULL((SELECT MAX(from_rev) FROM BRANCHMAP), 0))
+ IFNULL((SELECT MAX(revnum) FROM BRANCHMAP), 0))
-- STMT_SELECT_REV_BY_COMMITID
SELECT revnum, relpath FROM REVMAP WHERE commit_id = ?1
@@ -83,6 +83,15 @@ WHERE relpath = ?1 AND revnum <= ?2
ORDER BY relpath DESC, revnum DESC
LIMIT 1
+-- STMT_SELECT_BRANCH_EXACT
+SELECT relpath, revnum, to_rev, from_rev
+FROM BRANCHMAP
+WHERE relpath =?1 AND revnum <= ?2 AND (to_rev > ?2 OR to_rev IS NULL)
+
+-- STMT_INSERT_BRANCH
+INSERT INTO BRANCHMAP (relpath, revnum, to_rev, from_rev)
+VALUES (?1, ?2, ?3, ?4)
+
-- STMT_SELECT_TAG
SELECT revnum, from_rev, relpath FROM TAGMAP where relpath = ?1
@@ -92,7 +101,7 @@ INSERT INTO TAGMAP (revnum, from_rev, re
-- STMT_SELECT_BRANCHES
SELECT DISTINCT relpath FROM BRANCHMAP
WHERE relpath > ?1 || '/' AND relpath < ?1 || '0'
-AND from_rev <= ?2 AND (to_rev > ?2 OR to_rev IS NULL)
+AND revnum <= ?2 AND (to_rev > ?2 OR to_rev IS NULL)
-- STMT_SELECT_TAGS
SELECT DISTINCT relpath FROM TAGMAP
Modified: subversion/branches/ra-git/subversion/libsvn_fs_git/gitdb.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_fs_git/gitdb.c?rev=1717860&r1=1717859&r2=1717860&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_fs_git/gitdb.c (original)
+++ subversion/branches/ra-git/subversion/libsvn_fs_git/gitdb.c Thu Dec 3 22:47:30 2015
@@ -392,6 +392,54 @@ svn_fs_git__db_tag_create(svn_revnum_t *
}
static svn_error_t *
+db_branch_ensure(svn_fs_t *fs,
+ const char *relpath,
+ svn_revnum_t youngest_rev,
+ svn_revnum_t from_rev,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_git_fs_t *fgf = fs->fsap_data;
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t got_row;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, fgf->sdb,
+ STMT_SELECT_BRANCH_EXACT));
+ SVN_ERR(svn_sqlite__bind_text(stmt, 1, relpath));
+ SVN_ERR(svn_sqlite__bind_revnum(stmt, 2, youngest_rev));
+ SVN_ERR(svn_sqlite__step(&got_row, stmt));
+ SVN_ERR(svn_sqlite__reset(stmt));
+ if (got_row)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_sqlite__get_statement(&stmt, fgf->sdb,
+ STMT_INSERT_BRANCH));
+ SVN_ERR(svn_sqlite__bind_text(stmt, 1, relpath));
+ SVN_ERR(svn_sqlite__bind_revnum(stmt, 2, youngest_rev));
+ /* 3: to_rev */
+ SVN_ERR(svn_sqlite__bind_revnum(stmt, 4, from_rev));
+ SVN_ERR(svn_sqlite__update(NULL, stmt));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_fs_git__db_branch_ensure(svn_fs_t *fs,
+ const char *relpath,
+ svn_revnum_t youngest_rev,
+ svn_revnum_t from_rev,
+ apr_pool_t *scratch_pool)
+{
+ svn_fs_git_fs_t *fgf = fs->fsap_data;
+
+ SVN_SQLITE__WITH_LOCK(db_branch_ensure(fs, relpath,
+ youngest_rev, from_rev,
+ scratch_pool),
+ fgf->sdb);
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
db_get_tags_branches(apr_hash_t **tags,
apr_hash_t **branches,
svn_fs_t *fs,
@@ -421,7 +469,7 @@ db_get_tags_branches(apr_hash_t **tags,
name = svn_relpath_skip_ancestor(relpath, path);
if (!strchr(name, '/'))
- svn_hash_sets(*tags, name, path);
+ svn_hash_sets(*branches, name, path);
SVN_ERR(svn_sqlite__step(&got_row, stmt));
}
Modified: subversion/branches/ra-git/subversion/libsvn_fs_git/revmap.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_fs_git/revmap.c?rev=1717860&r1=1717859&r2=1717860&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_fs_git/revmap.c (original)
+++ subversion/branches/ra-git/subversion/libsvn_fs_git/revmap.c Thu Dec 3 22:47:30 2015
@@ -51,7 +51,7 @@ revmap_update_branch(svn_fs_t *fs,
int git_err;
git_oid oid;
svn_revnum_t last_rev = SVN_INVALID_REVNUM;
-
+ svn_boolean_t ensured_branch = (relpath != NULL);
/* ### TODO: Return if walk_oid is already mapped */
@@ -88,6 +88,14 @@ revmap_update_branch(svn_fs_t *fs,
if (rev > y_rev)
{
*latest_rev = rev;
+
+ if (!ensured_branch)
+ {
+ SVN_ERR(svn_fs_git__db_branch_ensure(fs, relpath,
+ rev, rev,
+ scratch_pool));
+ ensured_branch = TRUE;
+ }
}
last_rev = rev;