Author: stsp Date: Mon Dec 8 15:38:51 2014 New Revision: 1643844 URL: http://svn.apache.org/r1643844 Log: On the pin-externals branch: Don't crash when setting externals within a copy.
* subversion/libsvn_client/copy.c (path_driver_cb_func): When setting a new svn:externals value, open the target directory if it wasn't already opened, and close it afterwards. Modified: subversion/branches/pin-externals/subversion/libsvn_client/copy.c subversion/branches/pin-externals/subversion/tests/cmdline/externals_tests.py Modified: subversion/branches/pin-externals/subversion/libsvn_client/copy.c URL: http://svn.apache.org/viewvc/subversion/branches/pin-externals/subversion/libsvn_client/copy.c?rev=1643844&r1=1643843&r2=1643844&view=diff ============================================================================== --- subversion/branches/pin-externals/subversion/libsvn_client/copy.c (original) +++ subversion/branches/pin-externals/subversion/libsvn_client/copy.c Mon Dec 8 15:38:51 2014 @@ -973,9 +973,24 @@ path_driver_cb_func(void **dir_baton, if (path_info->externals) { + svn_boolean_t opened_dir = FALSE; + + if (*dir_baton == NULL) + { + SVN_ERR(cb_baton->editor->open_directory(path, parent_baton, + SVN_INVALID_REVNUM, + pool, dir_baton)); + opened_dir = TRUE; + } + SVN_DBG(("New externals for %s: %s", path_info->dst_path, path_info->externals->data)); SVN_ERR(cb_baton->editor->change_dir_prop(*dir_baton, SVN_PROP_EXTERNALS, path_info->externals, pool)); + if (opened_dir) + { + SVN_ERR(cb_baton->editor->close_directory(*dir_baton, pool)); + *dir_baton = NULL; + } } return SVN_NO_ERROR; Modified: subversion/branches/pin-externals/subversion/tests/cmdline/externals_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pin-externals/subversion/tests/cmdline/externals_tests.py?rev=1643844&r1=1643843&r2=1643844&view=diff ============================================================================== --- subversion/branches/pin-externals/subversion/tests/cmdline/externals_tests.py (original) +++ subversion/branches/pin-externals/subversion/tests/cmdline/externals_tests.py Mon Dec 8 15:38:51 2014 @@ -3479,6 +3479,32 @@ def switch_relative_externals(sbox): svntest.actions.run_and_verify_svn(None, None, [], 'up', wc) +def pin_externals(sbox): + "test svn copy --pin-externals" + + externals_test_setup(sbox) + + wc_dir = sbox.wc_dir + repo_url = sbox.repo_url + + # Perform a repos->repos copy, pinning externals + svntest.actions.run_and_verify_svn(None, None, [], + 'copy', + repo_url + '/A', + repo_url + '/A_copy', + '-m', 'copy', + '--pin-externals') + + # Create a working copy. + svntest.actions.run_and_verify_svn(None, None, [], + 'checkout', + repo_url, wc_dir) + + # Perform a repos->wc copy, pinning externals + + # Perform a wc->repos copy, pinning externals + + # Perform a wc->wc copy, pinning externals ######################################################################## # Run the tests @@ -3538,6 +3564,7 @@ test_list = [ None, update_external_peg_rev, update_deletes_file_external, switch_relative_externals, + pin_externals, ] if __name__ == '__main__':