Author: brane
Date: Wed Feb 4 11:23:29 2015
New Revision: 1657122
URL: http://svn.apache.org/r1657122
Log:
On the reuse-ra-session branch: Sync with trunk up to r1657111.
Modified:
subversion/branches/reuse-ra-session/ (props changed)
subversion/branches/reuse-ra-session/build/run_tests.py
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/RemoteSession.cpp
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.cpp
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.h
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
subversion/branches/reuse-ra-session/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
subversion/branches/reuse-ra-session/subversion/include/private/svn_ra_private.h
subversion/branches/reuse-ra-session/subversion/include/svn_client.h
subversion/branches/reuse-ra-session/subversion/include/svn_fs.h
subversion/branches/reuse-ra-session/subversion/include/svn_ra.h
subversion/branches/reuse-ra-session/subversion/include/svn_wc.h
subversion/branches/reuse-ra-session/subversion/libsvn_client/deprecated.c
subversion/branches/reuse-ra-session/subversion/libsvn_client/diff.c
subversion/branches/reuse-ra-session/subversion/libsvn_client/revert.c
subversion/branches/reuse-ra-session/subversion/libsvn_ra/ra_loader.c
subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/get_lock.c
subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/lock.c
subversion/branches/reuse-ra-session/subversion/libsvn_repos/rev_hunt.c
subversion/branches/reuse-ra-session/subversion/libsvn_subr/utf.c
subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.c
subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.h
subversion/branches/reuse-ra-session/subversion/libsvn_wc/deprecated.c
subversion/branches/reuse-ra-session/subversion/libsvn_wc/revert.c
subversion/branches/reuse-ra-session/subversion/svn/revert-cmd.c
subversion/branches/reuse-ra-session/subversion/svn/svn.c
subversion/branches/reuse-ra-session/subversion/svnserve/serve.c
subversion/branches/reuse-ra-session/subversion/svnsync/sync.c
subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.dump
subversion/branches/reuse-ra-session/subversion/tests/libsvn_client/mtcc-test.c
subversion/branches/reuse-ra-session/subversion/tests/libsvn_ra/ra-test.c
subversion/branches/reuse-ra-session/subversion/tests/libsvn_subr/ (props
changed)
subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/op-depth-test.c
subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/utils.c
subversion/branches/reuse-ra-session/subversion/tests/libsvn_wc/utils.h
subversion/branches/reuse-ra-session/subversion/tests/svn_test.h
subversion/branches/reuse-ra-session/subversion/tests/svn_test_fs.c
subversion/branches/reuse-ra-session/subversion/tests/svn_test_fs.h
subversion/branches/reuse-ra-session/subversion/tests/svn_test_main.c
subversion/branches/reuse-ra-session/tools/dev/ (props changed)
Propchange: subversion/branches/reuse-ra-session/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Feb 4 11:23:29 2015
@@ -86,4 +86,4 @@
/subversion/branches/verify-at-commit:1462039-1462408
/subversion/branches/verify-keep-going:1439280-1546110
/subversion/branches/wc-collate-path:1402685-1480384
-/subversion/trunk:1501802-1656689
+/subversion/trunk:1501802-1657111
Modified: subversion/branches/reuse-ra-session/build/run_tests.py
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/build/run_tests.py?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/build/run_tests.py (original)
+++ subversion/branches/reuse-ra-session/build/run_tests.py Wed Feb 4 11:23:29
2015
@@ -385,6 +385,22 @@ class TestHarness:
if self.config_file is not None:
cmdline.append('--config-file=' + self.config_file)
+ if self.base_url is not None:
+ subdir = 'subversion/tests/cmdline/svn-test-work'
+
+ cmdline.append('--repos-url=%s' % self.base_url +
+ '/svn-test-work/repositories')
+ cmdline.append('--repos-dir=%s'
+ % os.path.abspath(
+ os.path.join(self.builddir, subdir, 'repositories')))
+
+ # Enable access for http
+ if self.base_url.startswith('http'):
+ open(os.path.join(self.builddir, subdir, 'authz'), 'w').write(
+ '[/]\n' +
+ '* = rw\n')
+
+ # ### Support --repos-template
if self.verbose is not None:
cmdline.append('--verbose')
if self.cleanup is not None:
Modified:
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/RemoteSession.cpp
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/RemoteSession.cpp?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/RemoteSession.cpp
(original)
+++
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/RemoteSession.cpp
Wed Feb 4 11:23:29 2015
@@ -1174,7 +1174,9 @@ public:
static_cast<FileRevisionHandler*>(baton);
SVN_ERR_ASSERT(self->m_jcallback != NULL);
self->call(path, revision, revision_props,
- result_of_merge, prop_diffs, scratch_pool);
+ result_of_merge, prop_diffs,
+ (delta_handler != NULL),
+ scratch_pool);
SVN_ERR(JNIUtil::checkJavaException(SVN_ERR_BASE));
return SVN_NO_ERROR;
}
@@ -1199,6 +1201,7 @@ private:
apr_hash_t* revision_props,
svn_boolean_t result_of_merge,
apr_array_header_t* prop_diffs,
+ svn_boolean_t has_text_delta,
apr_pool_t* scratch_pool)
{
JNIEnv* env = JNIUtil::getEnv();
@@ -1211,7 +1214,7 @@ private:
{
mid = env->GetMethodID(cls, "<init>",
"(Ljava/lang/String;JZ"
- "Ljava/util/Map;Ljava/util/Map;)V");
+ "Ljava/util/Map;Ljava/util/Map;Z)V");
if (JNIUtil::isJavaExceptionThrown())
return;
}
@@ -1229,7 +1232,8 @@ private:
env->CallVoidMethod(m_jcallback, m_call_mid,
env->NewObject(cls, mid, jpath, jlong(revision),
jboolean(result_of_merge),
- jrevprops, jpropdelta));
+ jrevprops, jpropdelta,
+ jboolean(has_text_delta)));
if (JNIUtil::isJavaExceptionThrown())
return;
env->DeleteLocalRef(jpath);
Modified:
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.cpp
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.cpp?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.cpp
(original)
+++
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.cpp
Wed Feb 4 11:23:29 2015
@@ -339,7 +339,8 @@ void SVNClient::remove(Targets &targets,
void SVNClient::revert(StringArray &paths, svn_depth_t depth,
StringArray &changelists,
- bool clear_changelists)
+ bool clear_changelists,
+ bool metadata_only)
{
SVN::Pool subPool(pool);
@@ -352,6 +353,7 @@ void SVNClient::revert(StringArray &path
SVN_JNI_ERR(svn_client_revert3(targets.array(subPool), depth,
changelists.array(subPool),
clear_changelists,
+ metadata_only,
ctx, subPool.getPool()), );
}
Modified:
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.h
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.h?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.h
(original)
+++
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/SVNClient.h
Wed Feb 4 11:23:29 2015
@@ -161,7 +161,7 @@ class SVNClient :public SVNBase
void add(const char *path, svn_depth_t depth, bool force,
bool no_ignore, bool no_autoprops, bool add_parents);
void revert(StringArray &paths, svn_depth_t depth, StringArray &changelists,
- bool clear_changelists);
+ bool clear_changelists, bool metadata_only);
void remove(Targets &targets, CommitMessage *message, bool force,
bool keep_local, PropertyTable &revprops,
CommitCallback *callback);
Modified:
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
(original)
+++
subversion/branches/reuse-ra-session/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
Wed Feb 4 11:23:29 2015
@@ -439,7 +439,7 @@ Java_org_apache_subversion_javahl_SVNCli
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_revert
(JNIEnv *env, jobject jthis, jobject jpaths, jobject jdepth,
- jobject jchangelists, jboolean jclear_changelists)
+ jobject jchangelists, jboolean jclear_changelists, jboolean jmetadata_only)
{
JNIEntry(SVNClient, revert);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -459,7 +459,7 @@ Java_org_apache_subversion_javahl_SVNCli
return;
cl->revert(paths, EnumMapper::toDepth(jdepth),
- changelists, bool(jclear_changelists));
+ changelists, bool(jclear_changelists), bool(jmetadata_only));
}
JNIEXPORT void JNICALL
Modified:
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
(original)
+++
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
Wed Feb 4 11:23:29 2015
@@ -261,12 +261,15 @@ public interface ISVNClient
* @param changelists changelists to filter by
* @param clearChangelists If set, will clear changelist association
* from the reverted paths.
+ * @param metadataOnly Revert just the metadata (including conflict data)
+ * and not the working files/dirs
* @throws ClientException
* @since 1.9
*/
void revert(Set<String> paths, Depth depth,
Collection<String> changelists,
- boolean clearChangelists)
+ boolean clearChangelists,
+ boolean metadataOnly)
throws ClientException;
/**
Modified:
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
(original)
+++
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
Wed Feb 4 11:23:29 2015
@@ -599,13 +599,15 @@ public interface ISVNRemote
private FileRevision(String path, long revision,
boolean resultOfMerge,
Map<String, byte[]> revisionProperties,
- Map<String, byte[]> propertiesDelta)
+ Map<String, byte[]> propertiesDelta,
+ boolean textDelta)
{
this.path = path;
this.revision = revision;
this.resultOfMerge = resultOfMerge;
this.revisionProperties = revisionProperties;
this.propertiesDelta = propertiesDelta;
+ this.textDelta = textDelta;
}
/**
@@ -643,11 +645,17 @@ public interface ISVNRemote
return propertiesDelta;
}
+ /**
+ * @return A flag indicating that this revision has a text delta.
+ */
+ public boolean hasTextDelta() { return textDelta; }
+
private String path;
private long revision;
private boolean resultOfMerge;
private Map<String, byte[]> revisionProperties;
private Map<String, byte[]> propertiesDelta;
+ private boolean textDelta;
}
/**
Modified:
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
(original)
+++
subversion/branches/reuse-ra-session/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
Wed Feb 4 11:23:29 2015
@@ -194,21 +194,22 @@ public class SVNClient implements ISVNCl
public native void revert(Set<String> paths, Depth depth,
Collection<String> changelists,
- boolean clearChangelists)
+ boolean clearChangelists,
+ boolean metadataOnly)
throws ClientException;
public void revert(Set<String> paths, Depth depth,
Collection<String> changelists)
throws ClientException
{
- revert(paths, depth, changelists, false);
+ revert(paths, depth, changelists, false, false);
}
public void revert(String path, Depth depth,
Collection<String> changelists)
throws ClientException
{
- revert(Collections.singleton(path), depth, changelists, false);
+ revert(Collections.singleton(path), depth, changelists, false, false);
}
public native void add(String path, Depth depth, boolean force,
Modified:
subversion/branches/reuse-ra-session/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
(original)
+++
subversion/branches/reuse-ra-session/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
Wed Feb 4 11:23:29 2015
@@ -1398,6 +1398,7 @@ public class SVNRemoteTests extends SVNT
ISVNRemote.FileRevision rev = result.get(0);
assertEquals("/iota", rev.getPath());
assertFalse(rev.isResultOfMerge());
+ assertTrue(rev.hasTextDelta());
}
// This test is a result of a threading bug that was identified in
Modified:
subversion/branches/reuse-ra-session/subversion/include/private/svn_ra_private.h
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/include/private/svn_ra_private.h?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/include/private/svn_ra_private.h
(original)
+++
subversion/branches/reuse-ra-session/subversion/include/private/svn_ra_private.h
Wed Feb 4 11:23:29 2015
@@ -39,6 +39,32 @@
extern "C" {
#endif /* __cplusplus */
+
+/**
+ * Open a new ra session @a *new_session to the same repository as an existing
+ * ra session @a old_session, copying the callbacks, auth baton, etc. from the
+ * old session. This essentially limits the lifetime of the new, duplicated
+ * session to the lifetime of the old session. If the new session should
+ * outlive the new session, creating a new session using svn_ra_open4() is
+ * recommended.
+ *
+ * If @a session_url is not NULL, parent the new session at session_url. Note
+ * that @a session_url MUST BE in the same repository as @a old_session or an
+ * error will be returned. When @a session_url NULL the same session root
+ * will be used.
+ *
+ * Allocate @a new_session in @a result_pool. Perform temporary allocations
+ * in @a scratch_pool.
+ *
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_ra__dup_session(svn_ra_session_t **new_session,
+ svn_ra_session_t *old_session,
+ const char *session_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/**
* Close the conneection managed by @a session and destroy the
* session. When this function returns, the @a session pointer
@@ -49,7 +75,6 @@ extern "C" {
void
svn_ra__close(svn_ra_session_t *session);
-
/* Equivalent to svn_ra__assert_capable_server()
for SVN_RA_CAPABILITY_MERGEINFO. */
svn_error_t *
Modified: subversion/branches/reuse-ra-session/subversion/include/svn_client.h
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/include/svn_client.h?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/include/svn_client.h
(original)
+++ subversion/branches/reuse-ra-session/subversion/include/svn_client.h Wed
Feb 4 11:23:29 2015
@@ -4289,6 +4289,10 @@ svn_client_relocate(const char *dir,
* If @a clear_changelists is TRUE, then changelist information for the
* paths is cleared while reverting.
*
+ * If @a metadata_only is TRUE, the files and directories aren't changed
+ * by the operation. If there are conflict marker files attached to the
+ * targets these are removed.
+ *
* If @a ctx->notify_func2 is non-NULL, then for each item reverted,
* call @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of
* the reverted item.
@@ -4304,11 +4308,12 @@ svn_client_revert3(const apr_array_heade
svn_depth_t depth,
const apr_array_header_t *changelists,
svn_boolean_t clear_changelists,
+ svn_boolean_t metadata_only,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
/** Similar to svn_client_revert2, but with @a clear_changelists set to
- * FALSE.
+ * FALSE and @a metadata_only set to FALSE.
*
* @since New in 1.5.
* @deprecated Provided for backwards compatibility with the 1.8 API.
Modified: subversion/branches/reuse-ra-session/subversion/include/svn_fs.h
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/include/svn_fs.h?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/include/svn_fs.h (original)
+++ subversion/branches/reuse-ra-session/subversion/include/svn_fs.h Wed Feb 4
11:23:29 2015
@@ -2807,7 +2807,7 @@ svn_fs_unlock(svn_fs_t *fs,
/** If @a path is locked in @a fs, set @a *lock to an svn_lock_t which
* represents the lock, allocated in @a pool.
*
- * If @a path is not locked, set @a *lock to NULL.
+ * If @a path is not locked or does not exist in HEAD, set @a *lock to NULL.
*/
svn_error_t *
svn_fs_get_lock(svn_lock_t **lock,
Modified: subversion/branches/reuse-ra-session/subversion/include/svn_ra.h
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/include/svn_ra.h?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/include/svn_ra.h (original)
+++ subversion/branches/reuse-ra-session/subversion/include/svn_ra.h Wed Feb 4
11:23:29 2015
@@ -785,32 +785,6 @@ svn_ra_open(svn_ra_session_t **session_p
apr_hash_t *config,
apr_pool_t *pool);
-/**
- * Open a new ra session @a *new_session to the same repository as an existing
- * ra session @a old_session, copying the callbacks, auth baton, etc. from the
- * old session. This essentially limits the lifetime of the new, duplicated
- * session to the lifetime of the old session. If the new session should
- * outlive the new session, creating a new session using svn_ra_open4() is
- * recommended.
- *
- * If @a session_url is not NULL, parent the new session at session_url. Note
- * that @a session_url MUST BE in the same repository as @a old_session or an
- * error will be returned. When @a session_url NULL the same session root
- * will be used.
- *
- * Allocate @a new_session in @a result_pool. Perform temporary allocations
- * in @a scratch_pool.
- *
- * @since New in 1.9.
- */
-svn_error_t *
-svn_ra_dup_session(svn_ra_session_t **new_session,
- svn_ra_session_t *old_session,
- const char *session_url,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
/** Change the root URL of an open @a ra_session to point to a new path in the
* same repository. @a url is the new root URL. Use @a pool for
* temporary allocations.
@@ -1932,8 +1906,12 @@ svn_ra_unlock(svn_ra_session_t *session,
/**
* If @a path is locked, set @a *lock to an svn_lock_t which
- * represents the lock, allocated in @a pool. If @a path is not
- * locked, set @a *lock to NULL.
+ * represents the lock, allocated in @a pool.
+ *
+ * If @a path is not locked or does not exist in HEAD, set @a *lock to NULL.
+ *
+ * @note Before 1.9, this function could return SVN_ERR_FS_NOT_FOUND
+ * when @a path didn't exist in HEAD on specific ra layers.
*
* @since New in 1.2.
*/
Modified: subversion/branches/reuse-ra-session/subversion/include/svn_wc.h
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/include/svn_wc.h?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/include/svn_wc.h (original)
+++ subversion/branches/reuse-ra-session/subversion/include/svn_wc.h Wed Feb 4
11:23:29 2015
@@ -7539,6 +7539,10 @@ svn_wc_relocate(const char *path,
* If @a clear_changelists is TRUE, then changelist information for the
* paths is cleared.
*
+ * If @a metadata_only is TRUE, the working copy files are untouched, but
+ * if there are conflict marker files attached to these files these
+ * markers are removed.
+ *
* If @a cancel_func is non-NULL, call it with @a cancel_baton at
* various points during the reversion process. If it returns an
* error (typically #SVN_ERR_CANCELLED), return that error
@@ -7564,6 +7568,7 @@ svn_wc_revert5(svn_wc_context_t *wc_ctx,
svn_boolean_t use_commit_times,
const apr_array_header_t *changelist_filter,
svn_boolean_t clear_changelists,
+ svn_boolean_t metadata_only,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -7571,7 +7576,7 @@ svn_wc_revert5(svn_wc_context_t *wc_ctx,
apr_pool_t *scratch_pool);
/** Similar to svn_wc_revert5() but with @a clear_changelists always set to
- * FALSE.
+ * FALSE and @a metadata_only set to FALSE.
*
* @since New in 1.7.
* @deprecated Provided for backward compatibility with the 1.8 API.
Modified:
subversion/branches/reuse-ra-session/subversion/libsvn_client/deprecated.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/deprecated.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/deprecated.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/deprecated.c
Wed Feb 4 11:23:29 2015
@@ -2821,6 +2821,7 @@ svn_client_revert2(const apr_array_heade
depth,
changelists,
FALSE /* clear_changelists */,
+ FALSE /* metadata_only */,
ctx,
pool));
}
Modified: subversion/branches/reuse-ra-session/subversion/libsvn_client/diff.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/diff.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/diff.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/diff.c Wed
Feb 4 11:23:29 2015
@@ -52,6 +52,7 @@
#include "private/svn_diff_private.h"
#include "private/svn_subr_private.h"
#include "private/svn_io_private.h"
+#include "private/svn_ra_private.h"
#include "svn_private_config.h"
@@ -1805,8 +1806,8 @@ diff_repos_repos(const char **root_relpa
/* Now, we open an extra RA session to the correct anchor
location for URL1. This is used during the editor calls to fetch file
contents. */
- SVN_ERR(svn_ra_dup_session(&extra_ra_session, ra_session, anchor1,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_ra__dup_session(&extra_ra_session, ra_session, anchor1,
+ scratch_pool, scratch_pool));
if (ddi)
{
Modified: subversion/branches/reuse-ra-session/subversion/libsvn_client/revert.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_client/revert.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_client/revert.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_client/revert.c Wed
Feb 4 11:23:29 2015
@@ -50,6 +50,7 @@ struct revert_with_write_lock_baton {
svn_boolean_t use_commit_times;
const apr_array_header_t *changelists;
svn_boolean_t clear_changelists;
+ svn_boolean_t metadata_only;
svn_client_ctx_t *ctx;
};
@@ -85,6 +86,7 @@ revert(void *baton, apr_pool_t *result_p
b->use_commit_times,
b->changelists,
b->clear_changelists,
+ b->metadata_only,
b->ctx->cancel_func, b->ctx->cancel_baton,
b->ctx->notify_func2, b->ctx->notify_baton2,
scratch_pool);
@@ -98,11 +100,18 @@ revert(void *baton, apr_pool_t *result_p
|| err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
{
if (b->ctx->notify_func2)
- b->ctx->notify_func2(
- b->ctx->notify_baton2,
- svn_wc_create_notify(b->local_abspath, svn_wc_notify_skip,
- scratch_pool),
- scratch_pool);
+ {
+ svn_wc_notify_t *notify;
+
+ notify = svn_wc_create_notify(b->local_abspath,
+ svn_wc_notify_skip,
+ scratch_pool);
+
+ notify->err = err;
+
+ b->ctx->notify_func2(b->ctx->notify_baton2,
+ notify, scratch_pool);
+ }
svn_error_clear(err);
}
else
@@ -118,10 +127,11 @@ svn_client_revert3(const apr_array_heade
svn_depth_t depth,
const apr_array_header_t *changelists,
svn_boolean_t clear_changelists,
+ svn_boolean_t metadata_only,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- apr_pool_t *subpool;
+ apr_pool_t *iterpool;
svn_error_t *err = SVN_NO_ERROR;
int i;
svn_config_t *cfg;
@@ -148,7 +158,7 @@ svn_client_revert3(const apr_array_heade
SVN_CONFIG_OPTION_USE_COMMIT_TIMES,
FALSE));
- subpool = svn_pool_create(pool);
+ iterpool = svn_pool_create(pool);
for (i = 0; i < paths->nelts; i++)
{
@@ -156,14 +166,14 @@ svn_client_revert3(const apr_array_heade
const char *local_abspath, *lock_target;
svn_boolean_t wc_root;
- svn_pool_clear(subpool);
+ svn_pool_clear(iterpool);
/* See if we've been asked to cancel this operation. */
if ((ctx->cancel_func)
&& ((err = ctx->cancel_func(ctx->cancel_baton))))
goto errorful;
- err = svn_dirent_get_absolute(&local_abspath, path, pool);
+ err = svn_dirent_get_absolute(&local_abspath, path, iterpool);
if (err)
goto errorful;
@@ -172,15 +182,17 @@ svn_client_revert3(const apr_array_heade
baton.use_commit_times = use_commit_times;
baton.changelists = changelists;
baton.clear_changelists = clear_changelists;
+ baton.metadata_only = metadata_only;
baton.ctx = ctx;
- err = svn_wc__is_wcroot(&wc_root, ctx->wc_ctx, local_abspath, pool);
+ err = svn_wc__is_wcroot(&wc_root, ctx->wc_ctx, local_abspath, iterpool);
if (err)
goto errorful;
lock_target = wc_root ? local_abspath
: svn_dirent_dirname(local_abspath, pool);
err = svn_wc__call_with_write_lock(revert, &baton, ctx->wc_ctx,
- lock_target, FALSE, pool, pool);
+ lock_target, FALSE,
+ iterpool, iterpool);
if (err)
goto errorful;
}
@@ -196,10 +208,10 @@ svn_client_revert3(const apr_array_heade
if (paths->nelts == 1)
sleep_path = APR_ARRAY_IDX(paths, 0, const char *);
- svn_io_sleep_for_timestamps(sleep_path, subpool);
+ svn_io_sleep_for_timestamps(sleep_path, iterpool);
}
- svn_pool_destroy(subpool);
+ svn_pool_destroy(iterpool);
return svn_error_trace(err);
}
Modified: subversion/branches/reuse-ra-session/subversion/libsvn_ra/ra_loader.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_ra/ra_loader.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_ra/ra_loader.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_ra/ra_loader.c Wed
Feb 4 11:23:29 2015
@@ -541,11 +541,11 @@ svn_error_t *svn_ra_open4(svn_ra_session
}
svn_error_t *
-svn_ra_dup_session(svn_ra_session_t **new_session,
- svn_ra_session_t *old_session,
- const char *session_url,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_ra__dup_session(svn_ra_session_t **new_session,
+ svn_ra_session_t *old_session,
+ const char *session_url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_ra_session_t *session;
@@ -1020,8 +1020,8 @@ svn_error_t *svn_ra_stat(svn_ra_session_
svn_uri_split(&parent_url, &base_name, session_url,
scratch_pool);
- SVN_ERR(svn_ra_dup_session(&parent_session, session, parent_url,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_ra__dup_session(&parent_session, session, parent_url,
+ scratch_pool, scratch_pool));
/* Get all parent's entries, no props. */
SVN_ERR(svn_ra_get_dir2(parent_session, &parent_ents, NULL,
Modified:
subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/get_lock.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/get_lock.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/get_lock.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/get_lock.c
Wed Feb 4 11:23:29 2015
@@ -321,8 +321,8 @@ svn_ra_serf__get_lock(svn_ra_session_t *
return svn_error_trace(
svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err,
_("Server does not support locking features")));
- else if (err)
- return svn_error_trace(err);
+ else if (svn_error_find_cause(err, SVN_ERR_FS_NOT_FOUND))
+ svn_error_clear(err); /* Behave like the other RA layers */
else if (handler->sline.code != 207)
return svn_error_trace(svn_ra_serf__unexpected_status(handler));
Modified: subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/lock.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/lock.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/lock.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_ra_serf/lock.c Wed
Feb 4 11:23:29 2015
@@ -336,7 +336,7 @@ run_locks(svn_ra_serf__session_t *sess,
{
svn_lock_t *report_lock = NULL;
- if (locking)
+ if (locking && ctx->lock->token)
report_lock = ctx->lock;
cb_err = lock_func(lock_baton, ctx->path, locking,
Modified:
subversion/branches/reuse-ra-session/subversion/libsvn_repos/rev_hunt.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_repos/rev_hunt.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_repos/rev_hunt.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_repos/rev_hunt.c Wed
Feb 4 11:23:29 2015
@@ -1386,7 +1386,7 @@ send_path_revision(struct path_revision
/* Compute and send delta if client asked for it.
Note that this was initialized to NULL, so if !contents_changed,
no deltas will be computed. */
- if (delta_handler)
+ if (delta_handler && delta_handler != svn_delta_noop_window_handler)
{
/* Get the content delta. */
SVN_ERR(svn_fs_get_file_delta_stream(&delta_stream,
Modified: subversion/branches/reuse-ra-session/subversion/libsvn_subr/utf.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_subr/utf.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_subr/utf.c (original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_subr/utf.c Wed Feb
4 11:23:29 2015
@@ -59,6 +59,12 @@ static const char *SVN_APR_UTF8_CHARSET
static svn_mutex__t *xlate_handle_mutex = NULL;
static svn_boolean_t assume_native_charset_is_utf8 = FALSE;
+#if defined(WIN32)
+typedef svn_subr__win32_xlate_t xlate_handle_t;
+#else
+typedef apr_xlate_t xlate_handle_t;
+#endif
+
/* The xlate handle cache is a global hash table with linked lists of xlate
* handles. In multi-threaded environments, a thread "borrows" an xlate
* handle from the cache during a translation and puts it back afterwards.
@@ -69,7 +75,7 @@ static svn_boolean_t assume_native_chars
* is the number of simultanous handles in use for that key. */
typedef struct xlate_handle_node_t {
- apr_xlate_t *handle;
+ xlate_handle_t *handle;
/* FALSE if the handle is not valid, since its pool is being
destroyed. */
svn_boolean_t valid;
@@ -205,7 +211,7 @@ xlate_alloc_handle(xlate_handle_node_t *
apr_pool_t *pool)
{
apr_status_t apr_err;
- apr_xlate_t *handle;
+ xlate_handle_t *handle;
const char *name;
/* The error handling doesn't support the following cases, since we don't
@@ -217,7 +223,7 @@ xlate_alloc_handle(xlate_handle_node_t *
/* Try to create a handle. */
#if defined(WIN32)
- apr_err = svn_subr__win32_xlate_open((win32_xlate_t **)&handle, topage,
+ apr_err = svn_subr__win32_xlate_open(&handle, topage,
frompage, pool);
name = "win32-xlate: ";
#else
@@ -486,9 +492,8 @@ convert_to_stringbuf(xlate_handle_node_t
#ifdef WIN32
apr_status_t apr_err;
- apr_err = svn_subr__win32_xlate_to_stringbuf((win32_xlate_t *) node->handle,
- src_data, src_length,
- dest, pool);
+ apr_err = svn_subr__win32_xlate_to_stringbuf(node->handle, src_data,
+ src_length, dest, pool);
#else
apr_size_t buflen = src_length * 2;
apr_status_t apr_err;
Modified:
subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.c
Wed Feb 4 11:23:29 2015
@@ -77,11 +77,11 @@ initialize_com(void *baton, apr_pool_t*
return SVN_NO_ERROR;
}
-typedef struct win32_xlate_t
+struct svn_subr__win32_xlate_t
{
UINT from_page_id;
UINT to_page_id;
-} win32_xlate_t;
+};
static apr_status_t
get_page_id_from_name(UINT *page_id_p, const char *page_name, apr_pool_t *pool)
@@ -166,12 +166,12 @@ get_page_id_from_name(UINT *page_id_p, c
}
apr_status_t
-svn_subr__win32_xlate_open(win32_xlate_t **xlate_p, const char *topage,
+svn_subr__win32_xlate_open(svn_subr__win32_xlate_t **xlate_p, const char
*topage,
const char *frompage, apr_pool_t *pool)
{
UINT from_page_id, to_page_id;
apr_status_t apr_err = APR_SUCCESS;
- win32_xlate_t *xlate;
+ svn_subr__win32_xlate_t *xlate;
apr_err = get_page_id_from_name(&to_page_id, topage, pool);
if (apr_err == APR_SUCCESS)
@@ -190,7 +190,7 @@ svn_subr__win32_xlate_open(win32_xlate_t
}
apr_status_t
-svn_subr__win32_xlate_to_stringbuf(win32_xlate_t *handle,
+svn_subr__win32_xlate_to_stringbuf(svn_subr__win32_xlate_t *handle,
const char *src_data,
apr_size_t src_length,
svn_stringbuf_t **dest,
Modified:
subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.h
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.h?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.h
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_subr/win32_xlate.h
Wed Feb 4 11:23:29 2015
@@ -27,25 +27,27 @@
#ifdef WIN32
/* Opaque translation buffer. */
-typedef struct win32_xlate_t win32_xlate_t;
+typedef struct svn_subr__win32_xlate_t svn_subr__win32_xlate_t;
/* Set *XLATE_P to a handle node for converting from FROMPAGE to TOPAGE.
Returns APR_EINVAL or APR_ENOTIMPL, if a conversion isn't supported.
If fail for any other reason, return the error.
Allocate *RET in POOL. */
-apr_status_t svn_subr__win32_xlate_open(win32_xlate_t **xlate_p,
- const char *topage,
- const char *frompage,
- apr_pool_t *pool);
+apr_status_t
+svn_subr__win32_xlate_open(svn_subr__win32_xlate_t **xlate_p,
+ const char *topage,
+ const char *frompage,
+ apr_pool_t *pool);
/* Convert SRC_LENGTH bytes of SRC_DATA in NODE->handle, store the result
in *DEST, which is allocated in POOL. */
-apr_status_t svn_subr__win32_xlate_to_stringbuf(win32_xlate_t *handle,
- const char *src_data,
- apr_size_t src_length,
- svn_stringbuf_t **dest,
- apr_pool_t *pool);
+apr_status_t
+svn_subr__win32_xlate_to_stringbuf(svn_subr__win32_xlate_t *handle,
+ const char *src_data,
+ apr_size_t src_length,
+ svn_stringbuf_t **dest,
+ apr_pool_t *pool);
#endif /* WIN32 */
Modified: subversion/branches/reuse-ra-session/subversion/libsvn_wc/deprecated.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_wc/deprecated.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_wc/deprecated.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_wc/deprecated.c Wed
Feb 4 11:23:29 2015
@@ -1076,7 +1076,8 @@ svn_wc_revert4(svn_wc_context_t *wc_ctx,
depth,
use_commit_times,
changelist_filter,
- FALSE /* clear_changelists*/,
+ FALSE /* clear_changelists */,
+ FALSE /* metadata_only */,
cancel_func, cancel_baton,
notify_func, notify_baton,
scratch_pool));
Modified: subversion/branches/reuse-ra-session/subversion/libsvn_wc/revert.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/libsvn_wc/revert.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/libsvn_wc/revert.c
(original)
+++ subversion/branches/reuse-ra-session/subversion/libsvn_wc/revert.c Wed Feb
4 11:23:29 2015
@@ -246,6 +246,22 @@ revert_restore_handle_copied_dirs(svn_bo
return SVN_NO_ERROR;
}
+/* Forward definition */
+static svn_error_t *
+revert_wc_data(svn_boolean_t *run_wq,
+ svn_boolean_t *notify_required,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc__db_status_t status,
+ svn_node_kind_t kind,
+ svn_node_kind_t reverted_kind,
+ svn_filesize_t recorded_size,
+ apr_time_t recorded_time,
+ svn_boolean_t copied_here,
+ svn_boolean_t use_commit_times,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
/* Make the working tree under LOCAL_ABSPATH to depth DEPTH match the
versioned tree. This function is called after svn_wc__db_op_revert
@@ -254,56 +270,63 @@ revert_restore_handle_copied_dirs(svn_bo
REVERT_ROOT is true for explicit revert targets and FALSE for targets
reached via recursion.
+
+ Sets *RUN_WQ to TRUE when the caller should (eventually) run the workqueue.
+ (The function sets it to FALSE when it has run the WQ itself)
+
+ If INFO is NULL, LOCAL_ABSPATH doesn't exist in DB. Otherwise INFO
+ specifies the state of LOCAL_ABSPATH in DB.
*/
static svn_error_t *
-revert_restore(svn_wc__db_t *db,
+revert_restore(svn_boolean_t *run_wq,
+ svn_wc__db_t *db,
const char *local_abspath,
svn_depth_t depth,
+ svn_boolean_t metadata_only,
svn_boolean_t use_commit_times,
svn_boolean_t revert_root,
+ const struct svn_wc__db_info_t *info,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
apr_pool_t *scratch_pool)
{
- svn_error_t *err;
svn_wc__db_status_t status;
svn_node_kind_t kind;
- svn_node_kind_t on_disk;
svn_boolean_t notify_required;
const apr_array_header_t *conflict_files;
svn_filesize_t recorded_size;
apr_time_t recorded_time;
- apr_finfo_t finfo;
-#ifdef HAVE_SYMLINK
- svn_boolean_t special;
-#endif
svn_boolean_t copied_here;
svn_node_kind_t reverted_kind;
- svn_boolean_t is_wcroot;
-
if (cancel_func)
SVN_ERR(cancel_func(cancel_baton));
- SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath, scratch_pool));
- if (is_wcroot && !revert_root)
+ if (!revert_root)
{
- /* Issue #4162: Obstructing working copy. We can't access the working
- copy data from the parent working copy for this node by just using
- local_abspath */
+ svn_boolean_t is_wcroot;
- if (notify_func)
+ SVN_ERR(svn_wc__db_is_wcroot(&is_wcroot, db, local_abspath,
scratch_pool));
+ if (is_wcroot)
{
- svn_wc_notify_t *notify = svn_wc_create_notify(
+ /* Issue #4162: Obstructing working copy. We can't access the working
+ copy data from the parent working copy for this node by just using
+ local_abspath */
+
+ if (notify_func)
+ {
+ svn_wc_notify_t *notify =
+ svn_wc_create_notify(
local_abspath,
svn_wc_notify_update_skip_obstruction,
scratch_pool);
- notify_func(notify_baton, notify, scratch_pool);
- }
+ notify_func(notify_baton, notify, scratch_pool);
+ }
- return SVN_NO_ERROR; /* We don't revert obstructing working copies */
+ return SVN_NO_ERROR; /* We don't revert obstructing working copies */
+ }
}
SVN_ERR(svn_wc__db_revert_list_read(¬ify_required,
@@ -312,17 +335,15 @@ revert_restore(svn_wc__db_t *db,
db, local_abspath,
scratch_pool, scratch_pool));
- err = svn_wc__db_read_info(&status, &kind,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- &recorded_size, &recorded_time, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- db, local_abspath, scratch_pool, scratch_pool);
-
- if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ if (info)
+ {
+ status = info->status;
+ kind = info->kind;
+ recorded_size = info->recorded_size;
+ recorded_time = info->recorded_time;
+ }
+ else
{
- svn_error_clear(err);
-
if (!copied_here)
{
if (notify_func && notify_required)
@@ -349,9 +370,116 @@ revert_restore(svn_wc__db_t *db,
recorded_time = 0;
}
}
- else if (err)
- return svn_error_trace(err);
+ if (!metadata_only)
+ {
+ SVN_ERR(revert_wc_data(run_wq,
+ ¬ify_required,
+ db, local_abspath, status, kind,
+ reverted_kind, recorded_size, recorded_time,
+ copied_here, use_commit_times,
+ cancel_func, cancel_baton, scratch_pool));
+ }
+
+ /* We delete these marker files even though they are not strictly metadata.
+ But for users that use revert as an API with metadata_only, these are. */
+ if (conflict_files)
+ {
+ int i;
+ for (i = 0; i < conflict_files->nelts; i++)
+ {
+ SVN_ERR(remove_conflict_file(¬ify_required,
+ APR_ARRAY_IDX(conflict_files, i,
+ const char *),
+ local_abspath, scratch_pool));
+ }
+ }
+
+ if (notify_func && notify_required)
+ notify_func(notify_baton,
+ svn_wc_create_notify(local_abspath, svn_wc_notify_revert,
+ scratch_pool),
+ scratch_pool);
+
+ if (depth == svn_depth_infinity && kind == svn_node_dir)
+ {
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ apr_hash_t *children, *conflicts;
+ apr_hash_index_t *hi;
+
+ SVN_ERR(revert_restore_handle_copied_dirs(NULL, db, local_abspath, FALSE,
+ cancel_func, cancel_baton,
+ iterpool));
+
+ SVN_ERR(svn_wc__db_read_children_info(&children, &conflicts,
+ db, local_abspath, FALSE,
+ scratch_pool, iterpool));
+
+ for (hi = apr_hash_first(scratch_pool, children);
+ hi;
+ hi = apr_hash_next(hi))
+ {
+ const char *child_name = apr_hash_this_key(hi);
+ const char *child_abspath;
+
+ svn_pool_clear(iterpool);
+
+ child_abspath = svn_dirent_join(local_abspath, child_name, iterpool);
+
+ SVN_ERR(revert_restore(run_wq,
+ db, child_abspath, depth, metadata_only,
+ use_commit_times, FALSE /* revert root */,
+ apr_hash_this_val(hi),
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ iterpool));
+ }
+
+ /* Run the queue per directory */
+ if (*run_wq)
+ {
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
+ iterpool));
+ *run_wq = FALSE;
+ }
+
+ svn_pool_destroy(iterpool);
+ }
+
+ if (notify_func && (revert_root || kind == svn_node_dir))
+ SVN_ERR(svn_wc__db_revert_list_notify(notify_func, notify_baton,
+ db, local_abspath, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+/* Perform the in-working copy revert of LOCAL_ABSPATH, to what is stored in
DB */
+static svn_error_t *
+revert_wc_data(svn_boolean_t *run_wq,
+ svn_boolean_t *notify_required,
+ svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_wc__db_status_t status,
+ svn_node_kind_t kind,
+ svn_node_kind_t reverted_kind,
+ svn_filesize_t recorded_size,
+ apr_time_t recorded_time,
+ svn_boolean_t copied_here,
+ svn_boolean_t use_commit_times,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool)
+{
+ svn_error_t *err;
+ apr_finfo_t finfo;
+ svn_node_kind_t on_disk;
+#ifdef HAVE_SYMLINK
+ svn_boolean_t special;
+#endif
+
+ /* Would be nice to use svn_io_dirent2_t here, but the performance
+ improvement that provides doesn't work, because we need the read
+ only and executable bits later on, in the most likely code path */
err = svn_io_stat(&finfo, local_abspath,
APR_FINFO_TYPE | APR_FINFO_LINK
| APR_FINFO_SIZE | APR_FINFO_MTIME
@@ -477,14 +605,14 @@ revert_restore(svn_wc__db_t *db,
modified = FALSE;
}
else
+ /* Side effect: fixes recorded timestamps */
SVN_ERR(svn_wc__internal_file_modified_p(&modified,
db, local_abspath,
TRUE, scratch_pool));
if (modified)
{
- SVN_ERR(svn_io_remove_file2(local_abspath, FALSE,
- scratch_pool));
+ /* Install will replace the file */
on_disk = svn_node_none;
}
else
@@ -504,14 +632,14 @@ revert_restore(svn_wc__db_t *db,
SVN_ERR(svn_io_set_file_read_only(local_abspath,
FALSE,
scratch_pool));
- notify_required = TRUE;
+ *notify_required = TRUE;
}
else if (!needs_lock_prop && read_only)
{
SVN_ERR(svn_io_set_file_read_write(local_abspath,
FALSE,
scratch_pool));
- notify_required = TRUE;
+ *notify_required = TRUE;
}
}
@@ -532,14 +660,14 @@ revert_restore(svn_wc__db_t *db,
SVN_ERR(svn_io_set_file_executable(local_abspath,
TRUE, FALSE,
scratch_pool));
- notify_required = TRUE;
+ *notify_required = TRUE;
}
else if (!executable_prop && executable)
{
SVN_ERR(svn_io_set_file_executable(local_abspath,
FALSE, FALSE,
scratch_pool));
- notify_required = TRUE;
+ *notify_required = TRUE;
}
}
#endif
@@ -563,74 +691,16 @@ revert_restore(svn_wc__db_t *db,
{
svn_skel_t *work_item;
- /* ### Get the checksum from read_info above and pass in here? */
SVN_ERR(svn_wc__wq_build_file_install(&work_item, db, local_abspath,
NULL, use_commit_times, TRUE,
scratch_pool, scratch_pool));
SVN_ERR(svn_wc__db_wq_add(db, local_abspath, work_item,
scratch_pool));
- SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
- scratch_pool));
- }
- notify_required = TRUE;
- }
-
- if (conflict_files)
- {
- int i;
- for (i = 0; i < conflict_files->nelts; i++)
- {
- SVN_ERR(remove_conflict_file(¬ify_required,
- APR_ARRAY_IDX(conflict_files, i,
- const char *),
- local_abspath, scratch_pool));
+ *run_wq = TRUE;
}
+ *notify_required = TRUE;
}
- if (notify_func && notify_required)
- notify_func(notify_baton,
- svn_wc_create_notify(local_abspath, svn_wc_notify_revert,
- scratch_pool),
- scratch_pool);
-
- if (depth == svn_depth_infinity && kind == svn_node_dir)
- {
- apr_pool_t *iterpool = svn_pool_create(scratch_pool);
- const apr_array_header_t *children;
- int i;
-
- SVN_ERR(revert_restore_handle_copied_dirs(NULL, db, local_abspath, FALSE,
- cancel_func, cancel_baton,
- iterpool));
-
- SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
- local_abspath,
- scratch_pool,
- iterpool));
- for (i = 0; i < children->nelts; ++i)
- {
- const char *child_abspath;
-
- svn_pool_clear(iterpool);
-
- child_abspath = svn_dirent_join(local_abspath,
- APR_ARRAY_IDX(children, i,
- const char *),
- iterpool);
-
- SVN_ERR(revert_restore(db, child_abspath, depth,
- use_commit_times, FALSE /* revert root */,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- iterpool));
- }
-
- svn_pool_destroy(iterpool);
- }
-
- if (notify_func)
- SVN_ERR(svn_wc__db_revert_list_notify(notify_func, notify_baton,
- db, local_abspath, scratch_pool));
return SVN_NO_ERROR;
}
@@ -641,6 +711,7 @@ revert(svn_wc__db_t *db,
svn_depth_t depth,
svn_boolean_t use_commit_times,
svn_boolean_t clear_changelists,
+ svn_boolean_t metadata_only,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -648,6 +719,8 @@ revert(svn_wc__db_t *db,
apr_pool_t *scratch_pool)
{
svn_error_t *err;
+ const struct svn_wc__db_info_t *info = NULL;
+ svn_boolean_t run_queue = FALSE;
SVN_ERR_ASSERT(depth == svn_depth_empty || depth == svn_depth_infinity);
@@ -667,15 +740,37 @@ revert(svn_wc__db_t *db,
SVN_ERR(svn_wc__write_check(db, dir_abspath, scratch_pool));
}
- err = svn_wc__db_op_revert(db, local_abspath, depth, clear_changelists,
- scratch_pool, scratch_pool);
+ err = svn_error_trace(
+ svn_wc__db_op_revert(db, local_abspath, depth, clear_changelists,
+ scratch_pool, scratch_pool));
if (!err)
- err = revert_restore(db, local_abspath, depth,
- use_commit_times, TRUE /* revert root */,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool);
+ {
+ err = svn_error_trace(
+ svn_wc__db_read_single_info(&info, db, local_abspath, FALSE,
+ scratch_pool, scratch_pool));
+
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ {
+ svn_error_clear(err);
+ err = NULL;
+ info = NULL;
+ }
+ }
+
+ if (!err)
+ err = svn_error_trace(
+ revert_restore(&run_queue, db, local_abspath, depth,
metadata_only,
+ use_commit_times, TRUE /* revert root */,
+ info, cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+
+ if (run_queue)
+ err = svn_error_compose_create(err,
+ svn_wc__wq_run(db, local_abspath,
+ cancel_func, cancel_baton,
+ scratch_pool));
err = svn_error_compose_create(err,
svn_wc__db_revert_list_done(db,
@@ -695,6 +790,7 @@ revert_changelist(svn_wc__db_t *db,
svn_boolean_t use_commit_times,
apr_hash_t *changelist_hash,
svn_boolean_t clear_changelists,
+ svn_boolean_t metadata_only,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -713,6 +809,7 @@ revert_changelist(svn_wc__db_t *db,
scratch_pool))
SVN_ERR(revert(db, local_abspath,
svn_depth_empty, use_commit_times, clear_changelists,
+ metadata_only,
cancel_func, cancel_baton,
notify_func, notify_baton,
scratch_pool));
@@ -747,7 +844,7 @@ revert_changelist(svn_wc__db_t *db,
SVN_ERR(revert_changelist(db, child_abspath, depth,
use_commit_times, changelist_hash,
- clear_changelists,
+ clear_changelists, metadata_only,
cancel_func, cancel_baton,
notify_func, notify_baton,
iterpool));
@@ -773,6 +870,7 @@ revert_partial(svn_wc__db_t *db,
svn_depth_t depth,
svn_boolean_t use_commit_times,
svn_boolean_t clear_changelists,
+ svn_boolean_t metadata_only,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -793,7 +891,7 @@ revert_partial(svn_wc__db_t *db,
/* Revert the root node itself (depth=empty), then move on to the
children. */
SVN_ERR(revert(db, local_abspath, svn_depth_empty,
- use_commit_times, clear_changelists,
+ use_commit_times, clear_changelists, metadata_only,
cancel_func, cancel_baton,
notify_func, notify_baton, iterpool));
@@ -828,6 +926,7 @@ revert_partial(svn_wc__db_t *db,
/* Revert just this node (depth=empty). */
SVN_ERR(revert(db, child_abspath,
svn_depth_empty, use_commit_times, clear_changelists,
+ metadata_only,
cancel_func, cancel_baton,
notify_func, notify_baton,
iterpool));
@@ -846,6 +945,7 @@ svn_wc_revert5(svn_wc_context_t *wc_ctx,
svn_boolean_t use_commit_times,
const apr_array_header_t *changelist_filter,
svn_boolean_t clear_changelists,
+ svn_boolean_t metadata_only,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -862,6 +962,7 @@ svn_wc_revert5(svn_wc_context_t *wc_ctx,
depth, use_commit_times,
changelist_hash,
clear_changelists,
+ metadata_only,
cancel_func, cancel_baton,
notify_func, notify_baton,
scratch_pool));
@@ -870,6 +971,7 @@ svn_wc_revert5(svn_wc_context_t *wc_ctx,
if (depth == svn_depth_empty || depth == svn_depth_infinity)
return svn_error_trace(revert(wc_ctx->db, local_abspath,
depth, use_commit_times, clear_changelists,
+ metadata_only,
cancel_func, cancel_baton,
notify_func, notify_baton,
scratch_pool));
@@ -883,7 +985,7 @@ svn_wc_revert5(svn_wc_context_t *wc_ctx,
if (depth == svn_depth_files || depth == svn_depth_immediates)
return svn_error_trace(revert_partial(wc_ctx->db, local_abspath,
depth, use_commit_times,
- clear_changelists,
+ clear_changelists, metadata_only,
cancel_func, cancel_baton,
notify_func, notify_baton,
scratch_pool));
Modified: subversion/branches/reuse-ra-session/subversion/svn/revert-cmd.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/revert-cmd.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/revert-cmd.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/revert-cmd.c Wed Feb 4
11:23:29 2015
@@ -70,6 +70,7 @@ svn_cl__revert(apr_getopt_t *os,
err = svn_client_revert3(targets, opt_state->depth,
opt_state->changelists,
FALSE /* clear_changelists */,
+ FALSE /* metadata_only */,
ctx, scratch_pool);
if (err
&& (err->apr_err == SVN_ERR_WC_INVALID_OPERATION_DEPTH)
Modified: subversion/branches/reuse-ra-session/subversion/svn/svn.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/svn.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/svn.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/svn.c Wed Feb 4
11:23:29 2015
@@ -1300,7 +1300,9 @@ const svn_opt_subcommand_desc2_t svn_cl_
"\n"
" 1. Removes versioned props in working copy.\n"
" 2. Removes unversioned remote prop on repos revision.\n"
- " TARGET only determines which repository to access.\n"),
+ " TARGET only determines which repository to access.\n"
+ "\n"
+ " See 'svn help propset' for descriptions of the svn:* special
properties.\n"),
{'q', 'R', opt_depth, 'r', opt_revprop, opt_changelist} },
{ "propedit", svn_cl__propedit, {"pedit", "pe"}, N_
@@ -1312,7 +1314,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
" 2. Edits unversioned remote prop on repos revision.\n"
" TARGET only determines which repository to access.\n"
"\n"
- " See 'svn help propset' for more on setting properties.\n"),
+ " See 'svn help propset' for descriptions of the svn:* special
properties.\n"),
{'r', opt_revprop, SVN_CL__LOG_MSG_OPTIONS, opt_force} },
{ "propget", svn_cl__propget, {"pget", "pg"}, N_
@@ -1333,7 +1335,9 @@ const svn_opt_subcommand_desc2_t svn_cl_
" By default, an extra newline is printed after the property value so
that\n"
" the output looks pretty. With a single TARGET, depth 'empty' and
without\n"
" --show-inherited-props, you can use the --strict option to disable
this\n"
- " (useful when redirecting a binary property value to a file, for
example).\n"),
+ " (useful when redirecting a binary property value to a file, for
example).\n"
+ "\n"
+ " See 'svn help propset' for descriptions of the svn:* special
properties.\n"),
{'v', 'R', opt_depth, 'r', opt_revprop, opt_strict, opt_xml,
opt_changelist, opt_show_inherited_props },
{{'v', N_("print path, name and value on separate lines")},
@@ -1350,7 +1354,9 @@ const svn_opt_subcommand_desc2_t svn_cl_
" TARGET only determines which repository to access.\n"
"\n"
" With --verbose, the property values are printed as well, like 'svn
propget\n"
- " --verbose'. With --quiet, the paths are not printed.\n"),
+ " --verbose'. With --quiet, the paths are not printed.\n"
+ "\n"
+ " See 'svn help propset' for descriptions of the svn:* special
properties.\n"),
{'v', 'R', opt_depth, 'r', 'q', opt_revprop, opt_xml, opt_changelist,
opt_show_inherited_props },
{{'v', N_("print path, name and value on separate lines")},
Modified: subversion/branches/reuse-ra-session/subversion/svnserve/serve.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svnserve/serve.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svnserve/serve.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svnserve/serve.c Wed Feb 4
11:23:29 2015
@@ -1725,6 +1725,11 @@ static svn_error_t *get_dir(svn_ra_svn_c
&ab, root, full_path,
pool));
+ /* Fetch the directories' entries before starting the response, to allow
+ proper error handling in cases like when FULL_PATH doesn't exist */
+ if (want_contents)
+ SVN_CMD_ERR(svn_fs_dir_entries(&entries, root, full_path, pool));
+
/* Begin response ... */
SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "w(r(!", "success", rev));
SVN_ERR(svn_ra_svn__write_proplist(conn, pool, props));
@@ -1736,8 +1741,6 @@ static svn_error_t *get_dir(svn_ra_svn_c
/* Use epoch for a placeholder for a missing date. */
const char *missing_date = svn_time_to_cstring(0, pool);
- SVN_CMD_ERR(svn_fs_dir_entries(&entries, root, full_path, pool));
-
/* Transform the hash table's FS entries into dirents. This probably
* belongs in libsvn_repos. */
subpool = svn_pool_create(pool);
Modified: subversion/branches/reuse-ra-session/subversion/svnsync/sync.c
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svnsync/sync.c?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svnsync/sync.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svnsync/sync.c Wed Feb 4
11:23:29 2015
@@ -158,6 +158,12 @@ remove_r0_mergeinfo(const svn_string_t *
svn_stringbuf_appendbytes(new_str, line, colon + 1 - line);
svn_stringbuf_appendcstr(new_str, rangelist);
}
+ else
+ {
+ if (new_str->len)
+ svn_stringbuf_appendbyte(new_str, '\n');
+ svn_stringbuf_appendcstr(new_str, line);
+ }
}
if (strcmp((*str)->data, new_str->data) != 0)
Modified:
subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
(original)
+++
subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
Wed Feb 4 11:23:29 2015
@@ -64,10 +64,10 @@ PROPS-END
Node-path: foo.txt
Node-kind: file
Node-action: add
-Prop-content-length: 86
-Text-content-length: 0
Text-content-md5: d41d8cd98f00b204e9800998ecf8427e
Text-content-sha1: da39a3ee5e6b4b0d3255bfef95601890afd80709
+Prop-content-length: 86
+Text-content-length: 0
Content-length: 86
K 13
@@ -83,3 +83,54 @@ V 51
PROPS-END
+Revision-number: 3
+Prop-content-length: 97
+Content-length: 97
+
+K 10
+svn:author
+V 2
+pm
+K 8
+svn:date
+V 27
+2015-02-03T18:38:47.017031Z
+K 7
+svn:log
+V 1
+m
+PROPS-END
+
+Node-path: zag
+Node-kind: dir
+Node-action: add
+Prop-content-length: 76
+Content-length: 76
+
+K 13
+svn:mergeinfo
+V 45
+/a:1,4
+/b:0,4
+/c:2-3
+/d:0-3
+/e:2,5-6
+/f:0,5-6
+PROPS-END
+
+
+Node-path: zig
+Node-kind: dir
+Node-action: add
+Prop-content-length: 55
+Content-length: 55
+
+K 13
+svn:mergeinfo
+V 20
+/a:1
+/b:2-3
+/c:4,7-8
+PROPS-END
+
+
Modified:
subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.dump
URL:
http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.dump?rev=1657122&r1=1657121&r2=1657122&view=diff
==============================================================================
---
subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.dump
(original)
+++
subversion/branches/reuse-ra-session/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.dump
Wed Feb 4 11:23:29 2015
@@ -64,10 +64,10 @@ PROPS-END
Node-path: foo.txt
Node-kind: file
Node-action: add
-Prop-content-length: 75
-Text-content-length: 0
Text-content-md5: d41d8cd98f00b204e9800998ecf8427e
Text-content-sha1: da39a3ee5e6b4b0d3255bfef95601890afd80709
+Prop-content-length: 75
+Text-content-length: 0
Content-length: 75
K 13
@@ -83,3 +83,54 @@ V 40
PROPS-END
+Revision-number: 3
+Prop-content-length: 97
+Content-length: 97
+
+K 10
+svn:author
+V 2
+pm
+K 8
+svn:date
+V 27
+2015-02-03T18:38:47.017031Z
+K 7
+svn:log
+V 1
+m
+PROPS-END
+
+Node-path: zag
+Node-kind: dir
+Node-action: add
+Prop-content-length: 76
+Content-length: 76
+
+K 13
+svn:mergeinfo
+V 41
+/a:1,4
+/b:4
+/c:2-3
+/d:1-3
+/e:2,5-6
+/f:5-6
+PROPS-END
+
+
+Node-path: zig
+Node-kind: dir
+Node-action: add
+Prop-content-length: 55
+Content-length: 55
+
+K 13
+svn:mergeinfo
+V 20
+/a:1
+/b:2-3
+/c:4,7-8
+PROPS-END
+
+