You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/08/18 21:07:48 UTC
svn commit: r1159359 - in /subversion/trunk/subversion/libsvn_wc:
wc-queries.sql wc_db.c
Author: stsp
Date: Thu Aug 18 19:07:47 2011
New Revision: 1159359
URL: http://svn.apache.org/viewvc?rev=1159359&view=rev
Log:
Do not destroy moved-to information when updating BASE nodes.
* subversion/libsvn_wc/wc-queries.sql
(STMT_SELECT_BASE_NODE, STMT_SELECT_BASE_NODE_WITH_LOCK): Return the
moved_to column. Both queries return it at the same coluumn position
in the result row.
(STMT_INSERT_NODE): Allow setting the moved_to column via a new parameter.
* subversion/libsvn_wc/wc_db.c
(insert_base_node): If a previous BASE node exists, copy its moved_to
column into the newly created BASE node. Update parameter indices for
lock information returned by STMT_SELECT_BASE_NODE_WITH_LOCK, which
got shifted due to the new moved_to column in the result row.
Modified:
subversion/trunk/subversion/libsvn_wc/wc-queries.sql
subversion/trunk/subversion/libsvn_wc/wc_db.c
Modified: subversion/trunk/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-queries.sql?rev=1159359&r1=1159358&r2=1159359&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Thu Aug 18 19:07:47 2011
@@ -51,7 +51,8 @@ ORDER BY op_depth DESC
-- STMT_SELECT_BASE_NODE
SELECT repos_id, repos_path, presence, kind, revision, checksum,
translated_size, changed_revision, changed_date, changed_author, depth,
- symlink_target, last_mod_time, properties, file_external IS NOT NULL
+ symlink_target, last_mod_time, properties, file_external IS NOT NULL,
+ moved_to
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
@@ -59,6 +60,7 @@ WHERE wc_id = ?1 AND local_relpath = ?2
SELECT nodes.repos_id, nodes.repos_path, presence, kind, revision,
checksum, translated_size, changed_revision, changed_date, changed_author,
depth, symlink_target, last_mod_time, properties, file_external IS NOT NULL,
+ moved_to,
/* All the columns until now must match those returned by
STMT_SELECT_BASE_NODE. The implementation of svn_wc__db_base_get_info()
assumes that these columns are followed by the lock information) */
@@ -164,9 +166,9 @@ INSERT OR REPLACE INTO nodes (
wc_id, local_relpath, op_depth, parent_relpath, repos_id, repos_path,
revision, presence, depth, kind, changed_revision, changed_date,
changed_author, checksum, properties, translated_size, last_mod_time,
- dav_cache, symlink_target, file_external)
+ dav_cache, symlink_target, file_external, moved_to)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14,
- ?15, ?16, ?17, ?18, ?19, ?20)
+ ?15, ?16, ?17, ?18, ?19, ?20, ?21)
-- STMT_SELECT_OP_DEPTH_CHILDREN
SELECT local_relpath FROM nodes
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1159359&r1=1159358&r2=1159359&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Thu Aug 18 19:07:47 2011
@@ -781,6 +781,8 @@ insert_base_node(void *baton,
svn_sqlite__stmt_t *stmt;
svn_filesize_t recorded_size = SVN_INVALID_FILESIZE;
apr_int64_t recorded_mod_time;
+ const char *moved_to_relpath = NULL;
+ svn_boolean_t have_row;
/* The directory at the WCROOT has a NULL parent_relpath. Otherwise,
bind the appropriate parent_relpath. */
@@ -798,24 +800,28 @@ insert_base_node(void *baton,
/* ### we can't handle this right now */
SVN_ERR_ASSERT(pibb->conflict == NULL);
- if (pibb->keep_recorded_info)
+ SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
+ STMT_SELECT_BASE_NODE));
+ SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
+ SVN_ERR(svn_sqlite__step(&have_row, stmt));
+ if (have_row)
{
- SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
- STMT_SELECT_BASE_NODE));
-
- SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
- SVN_ERR(svn_sqlite__step_row(stmt));
-
- recorded_size = get_recorded_size(stmt, 6);
- recorded_mod_time = svn_sqlite__column_int64(stmt, 12);
-
- SVN_ERR(svn_sqlite__reset(stmt));
+ /* A BASE node already exists. */
+ if (pibb->keep_recorded_info)
+ {
+ /* Preserve size and modification time if caller asked us to. */
+ recorded_size = get_recorded_size(stmt, 6);
+ recorded_mod_time = svn_sqlite__column_int64(stmt, 12);
+ }
+ /* Always preserve moved-to info. */
+ moved_to_relpath = svn_sqlite__column_text(stmt, 15, scratch_pool);
}
+ SVN_ERR(svn_sqlite__reset(stmt));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_INSERT_NODE));
SVN_ERR(svn_sqlite__bindf(stmt, "isisisr"
"tstr" /* 8 - 11 */
- "isnnnnns", /* 12 - 19 */
+ "isnnnnnsss", /* 12 - 21 */
wcroot->wc_id, /* 1 */
local_relpath, /* 2 */
(apr_int64_t)0, /* op_depth is 0 for base */
@@ -831,8 +837,9 @@ insert_base_node(void *baton,
pibb->changed_date, /* 12 */
pibb->changed_author, /* 13 */
(pibb->kind == svn_wc__db_kind_symlink) ?
- pibb->target : NULL)); /* 19 */
-
+ pibb->target : NULL, /* 19 */
+ NULL /* 20 */,
+ moved_to_relpath /* 21 */));
if (pibb->kind == svn_wc__db_kind_file)
{
SVN_ERR(svn_sqlite__bind_checksum(stmt, 14, pibb->checksum,
@@ -2022,7 +2029,7 @@ base_get_info(svn_wc__db_status_t *statu
SVN_ERR_ASSERT(!repos_relpath || *repos_relpath);
if (lock)
{
- *lock = lock_from_columns(stmt, 15, 16, 17, 18, result_pool);
+ *lock = lock_from_columns(stmt, 16, 17, 18, 19, result_pool);
}
if (changed_rev)
{