You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2010/11/12 06:22:40 UTC
svn commit: r1034269 - in /subversion/trunk/subversion: include/
libsvn_client/ svn/ tests/cmdline/
Author: cmpilato
Date: Fri Nov 12 05:22:39 2010
New Revision: 1034269
URL: http://svn.apache.org/viewvc?rev=1034269&view=rev
Log:
Fix issue #3748 ("Implement --parents option for svn update").
With this change, checking out a very sparse tree -- say, three files
scattered across our standard Greek tree -- goes from looking like
this:
$ svn co ${PROJECT_ROOT_URL} wc
$ svn up --depth=empty wc/A wc/A/D wc/A/D/G wc/A/D/H wc/A/B wc/A/B/E
$ svn up wc/A/D/G/pi wc/A/D/H/omega wc/A/B/E/alpha
to looking like this:
$ svn co ${PROJECT_ROOT_URL} wc
$ svn up --parents wc/A/D/G/pi wc/A/D/H/omega wc/A/B/E/alpha
Purty handy, eh?
* subversion/include/svn_client.h
(svn_client_update4): New revision of this API.
(svn_client_update3): Deprecate.
* subversion/libsvn_client/client.h
(svn_client__update_internal): Add 'make_parents' parameter.
* subversion/libsvn_client/update.c
(update_internal): Add docstring and 'notify_summary' parameter,
used to determine whether or not to give a final post-update summary
notification.
(svn_client__update_internal): Add 'make_parents' parameter and
backing code. Update call(s) to update_internal().
(svn_client_update4): Was svn_client_update3(). Add 'make_parents'
parameter, passed to updated call to svn_client__update_internal().
* subversion/libsvn_client/checkout.c
(svn_client__checkout_internal): Update call to svn_client__update_internal().
* subversion/libsvn_client/externals.c
(switch_dir_external): Update call to svn_client__update_internal().
* subversion/libsvn_client/deprecated.c
(svn_client_update3): Now just a thin wrapper around svn_client_update4().
* subversion/svn/main.c
(svn_cl__cmd_table): Add support for --parents to the "update"
command, and update the usage message to reflect as much.
* subversion/svn/update-cmd.c
(svn_cl__update): Now use svn_client_update4(), passing the value of
opt_state->parents as the new 'make_parents' parameter.
* subversion/tests/cmdline/depth_tests.py
(sparse_update_with_dash_dash_parents): New test.
(test_list): Add reference to new test.
Modified:
subversion/trunk/subversion/include/svn_client.h
subversion/trunk/subversion/libsvn_client/checkout.c
subversion/trunk/subversion/libsvn_client/client.h
subversion/trunk/subversion/libsvn_client/deprecated.c
subversion/trunk/subversion/libsvn_client/externals.c
subversion/trunk/subversion/libsvn_client/update.c
subversion/trunk/subversion/svn/main.c
subversion/trunk/subversion/svn/update-cmd.c
subversion/trunk/subversion/tests/cmdline/depth_tests.py
Modified: subversion/trunk/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_client.h (original)
+++ subversion/trunk/subversion/include/svn_client.h Fri Nov 12 05:22:39 2010
@@ -1189,6 +1189,9 @@ svn_client_checkout(svn_revnum_t *result
* If @a allow_unver_obstructions is FALSE then the update will abort
* if there are any unversioned obstructing items.
*
+ * If @a make_parents is TRUE, create any non-existent parent
+ * directories also by checking them out at depth=empty.
+ *
* If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with
* @a ctx->notify_baton2 for each item handled by the update, and also for
* files restored from text-base. If @a ctx->cancel_func is non-NULL, invoke
@@ -1207,8 +1210,28 @@ svn_client_checkout(svn_revnum_t *result
* implementation, and allows for the possibility that different
* targets may come from different repositories.
*
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_update4(apr_array_header_t **result_revs,
+ const apr_array_header_t *paths,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ svn_boolean_t depth_is_sticky,
+ svn_boolean_t ignore_externals,
+ svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t make_parents,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_update4() but with @a make_parents always set
+ * to FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
* @since New in 1.5.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_update3(apr_array_header_t **result_revs,
const apr_array_header_t *paths,
Modified: subversion/trunk/subversion/libsvn_client/checkout.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/checkout.c?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/checkout.c (original)
+++ subversion/trunk/subversion/libsvn_client/checkout.c Fri Nov 12 05:22:39 2010
@@ -218,7 +218,7 @@ svn_client__checkout_internal(svn_revnum
revision, depth, TRUE,
ignore_externals,
allow_unver_obstructions,
- use_sleep, innercheckout,
+ use_sleep, innercheckout, FALSE,
ctx, pool);
if (err)
Modified: subversion/trunk/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/client.h?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/client.h (original)
+++ subversion/trunk/subversion/libsvn_client/client.h Fri Nov 12 05:22:39 2010
@@ -491,6 +491,12 @@ svn_client__make_local_parents(const cha
these obstructions cause the update to fail.
If INNERUPDATE is true, no anchor check is performed on the update target.
+
+ If MAKE_PARENTS is true, allow the update to calculate and checkout
+ (with depth=empty) any parent directories of the requested update
+ target which are missing from the working copy.
+
+ NOTE: You may not specify both INNERUPDATE and MAKE_PARENTS as true.
*/
svn_error_t *
svn_client__update_internal(svn_revnum_t *result_rev,
@@ -502,6 +508,7 @@ svn_client__update_internal(svn_revnum_t
svn_boolean_t allow_unver_obstructions,
svn_boolean_t *timestamp_sleep,
svn_boolean_t innerupdate,
+ svn_boolean_t make_parents,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
Modified: subversion/trunk/subversion/libsvn_client/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/deprecated.c?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_client/deprecated.c Fri Nov 12 05:22:39 2010
@@ -1796,6 +1796,22 @@ svn_client_status(svn_revnum_t *result_r
/*** From update.c ***/
svn_error_t *
+svn_client_update3(apr_array_header_t **result_revs,
+ const apr_array_header_t *paths,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ svn_boolean_t depth_is_sticky,
+ svn_boolean_t ignore_externals,
+ svn_boolean_t allow_unver_obstructions,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool)
+{
+ return svn_client_update4(result_revs, paths, revision,
+ depth, depth_is_sticky, ignore_externals,
+ allow_unver_obstructions, FALSE, ctx, pool);
+}
+
+svn_error_t *
svn_client_update2(apr_array_header_t **result_revs,
const apr_array_header_t *paths,
const svn_opt_revision_t *revision,
Modified: subversion/trunk/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/externals.c?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/externals.c (original)
+++ subversion/trunk/subversion/libsvn_client/externals.c Fri Nov 12 05:22:39 2010
@@ -204,7 +204,7 @@ switch_dir_external(const char *path,
SVN_ERR(svn_client__update_internal(NULL, local_abspath,
revision, svn_depth_unknown,
FALSE, FALSE, FALSE,
- timestamp_sleep, TRUE,
+ timestamp_sleep, TRUE, FALSE,
ctx, subpool));
svn_pool_destroy(subpool);
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/update.c?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/update.c (original)
+++ subversion/trunk/subversion/libsvn_client/update.c Fri Nov 12 05:22:39 2010
@@ -44,7 +44,18 @@
/*** Code. ***/
-
+/* This is a helper for svn_client__update_internal(), which see for
+ an explanation of most of these parameters. Some stuff that's
+ unique is as follows:
+
+ ANCHOR_ABSPATH is the local absolute path of the update anchor.
+ This is typically either the same as LOCAL_ABSPATH, or the
+ immediate parent of LOCAL_ABSPATH.
+
+ If NOTIFY_SUMMARY is set (and there's a notification hander in
+ CTX), transmit the final update summary upon successful
+ completion of the update.
+*/
static svn_error_t *
update_internal(svn_revnum_t *result_rev,
const char *local_abspath,
@@ -56,6 +67,7 @@ update_internal(svn_revnum_t *result_rev
svn_boolean_t allow_unver_obstructions,
svn_boolean_t *timestamp_sleep,
svn_boolean_t innerupdate,
+ svn_boolean_t notify_summary,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
@@ -235,8 +247,8 @@ update_internal(svn_revnum_t *result_rev
if (sleep_here)
svn_io_sleep_for_timestamps(local_abspath, pool);
- /* Let everyone know we're finished here. */
- if (ctx->notify_func2)
+ /* Let everyone know we're finished here (unless we're asked not to). */
+ if (ctx->notify_func2 && notify_summary)
{
svn_wc_notify_t *notify
= svn_wc_create_notify(local_abspath, svn_wc_notify_update_completed,
@@ -266,44 +278,99 @@ svn_client__update_internal(svn_revnum_t
svn_boolean_t allow_unver_obstructions,
svn_boolean_t *timestamp_sleep,
svn_boolean_t innerupdate,
+ svn_boolean_t make_parents,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- const char *anchor_abspath;
+ const char *anchor_abspath, *lockroot_abspath;
svn_error_t *err;
+ svn_opt_revision_t peg_revision = *((svn_opt_revision_t *)revision);
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ SVN_ERR_ASSERT(! (innerupdate && make_parents));
+
+ if (make_parents)
+ {
+ int i;
+ const char *parent_abspath = local_abspath;
+ apr_array_header_t *missing_parents =
+ apr_array_make(pool, 4, sizeof(const char *));
+
+ while (1)
+ {
+ /* Try to lock. If we can't lock because our target (or its
+ parent) isn't a working copy, we'll try to walk up the
+ tree to find a working copy, remembering this path's
+ parent as one we need to flesh out. */
+ err = svn_wc__acquire_write_lock(&lockroot_abspath, ctx->wc_ctx,
+ parent_abspath, !innerupdate,
+ pool, pool);
+ if (!err)
+ break;
+ if ((err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ || svn_dirent_is_root(parent_abspath, strlen(parent_abspath)))
+ return err;
+ svn_error_clear(err);
+
+ /* Remember the parent of our update target as a missing
+ parent. */
+ parent_abspath = svn_dirent_dirname(parent_abspath, pool);
+ APR_ARRAY_PUSH(missing_parents, const char *) = parent_abspath;
+ }
+
+ /* Run 'svn up --depth=empty' (effectively) on the missing
+ parents, if any. */
+ anchor_abspath = lockroot_abspath;
+ for (i = missing_parents->nelts - 1; i >= 0; i--)
+ {
+ const char *missing_parent =
+ APR_ARRAY_IDX(missing_parents, i, const char *);
+ err = update_internal(result_rev, missing_parent, anchor_abspath,
+ &peg_revision, svn_depth_empty, FALSE,
+ ignore_externals, allow_unver_obstructions,
+ timestamp_sleep, innerupdate, FALSE,
+ ctx, pool);
+ if (err)
+ goto cleanup;
+ anchor_abspath = missing_parent;
- if (!innerupdate)
- SVN_ERR(svn_wc__acquire_write_lock(&anchor_abspath,
- ctx->wc_ctx, local_abspath, TRUE,
- pool, pool));
+ /* If we successfully updated a missing parent, let's re-use
+ the returned revision number for future updates for the
+ sake of consistency. */
+ peg_revision.kind = svn_opt_revision_number;
+ peg_revision.value.number = *result_rev;
+ }
+ }
else
- SVN_ERR(svn_wc__acquire_write_lock(&anchor_abspath,
- ctx->wc_ctx, local_abspath, FALSE,
- pool, pool));
+ {
+ SVN_ERR(svn_wc__acquire_write_lock(&lockroot_abspath, ctx->wc_ctx,
+ local_abspath, !innerupdate,
+ pool, pool));
+ anchor_abspath = lockroot_abspath;
+ }
err = update_internal(result_rev, local_abspath, anchor_abspath,
- revision, depth, depth_is_sticky,
- ignore_externals, allow_unver_obstructions,
- timestamp_sleep, innerupdate, ctx, pool);
-
+ &peg_revision, depth, depth_is_sticky,
+ ignore_externals, allow_unver_obstructions,
+ timestamp_sleep, innerupdate, TRUE, ctx, pool);
+ cleanup:
err = svn_error_compose_create(
err,
- svn_wc__release_write_lock(ctx->wc_ctx, anchor_abspath, pool));
+ svn_wc__release_write_lock(ctx->wc_ctx, lockroot_abspath, pool));
return svn_error_return(err);
}
svn_error_t *
-svn_client_update3(apr_array_header_t **result_revs,
+svn_client_update4(apr_array_header_t **result_revs,
const apr_array_header_t *paths,
const svn_opt_revision_t *revision,
svn_depth_t depth,
svn_boolean_t depth_is_sticky,
svn_boolean_t ignore_externals,
svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t make_parents,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
@@ -340,7 +407,8 @@ svn_client_update3(apr_array_header_t **
revision, depth, depth_is_sticky,
ignore_externals,
allow_unver_obstructions,
- &sleep, FALSE, ctx, subpool);
+ &sleep, FALSE, make_parents,
+ ctx, subpool);
if (err && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
{
Modified: subversion/trunk/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/main.c?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/main.c (original)
+++ subversion/trunk/subversion/svn/main.c Fri Nov 12 05:22:39 2010
@@ -1168,10 +1168,17 @@ const svn_opt_subcommand_desc2_t svn_cl_
" are applied to the obstructing path. Obstructing paths are reported\n"
" in the first column with code 'E'.\n"
"\n"
+ " If the specified update target is missing from the working copy but its\n"
+ " immediate parent directory is present, checkout the target into its\n"
+ " parent directory at the specified depth. If --parents is specified,\n"
+ " create any missing parent directories of the target by checking them\n"
+ " out, too, at depth=empty.\n"
+ "\n"
" Use the --set-depth option to set a new working copy depth on the\n"
" targets of this operation.\n"),
{'r', 'N', opt_depth, opt_set_depth, 'q', opt_merge_cmd, opt_force,
- opt_ignore_externals, opt_changelist, opt_editor_cmd, opt_accept} },
+ opt_ignore_externals, opt_changelist, opt_editor_cmd, opt_accept,
+ opt_parents} },
{ "upgrade", svn_cl__upgrade, {0}, N_
("Upgrade the metadata storage format for a working copy.\n"
Modified: subversion/trunk/subversion/svn/update-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/update-cmd.c?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/update-cmd.c (original)
+++ subversion/trunk/subversion/svn/update-cmd.c Fri Nov 12 05:22:39 2010
@@ -92,11 +92,11 @@ svn_cl__update(apr_getopt_t *os,
ctx->notify_func2 = svn_cl__check_externals_failed_notify_wrapper;
ctx->notify_baton2 = &nwb;
- SVN_ERR(svn_client_update3(NULL, targets,
+ SVN_ERR(svn_client_update4(NULL, targets,
&(opt_state->start_revision),
depth, depth_is_sticky,
opt_state->ignore_externals,
- opt_state->force,
+ opt_state->force, opt_state->parents,
ctx, scratch_pool));
if (! opt_state->quiet)
Modified: subversion/trunk/subversion/tests/cmdline/depth_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/depth_tests.py?rev=1034269&r1=1034268&r2=1034269&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/depth_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/depth_tests.py Fri Nov 12 05:22:39 2010
@@ -2718,6 +2718,90 @@ def update_depth_empty_root_of_infinite_
None, None,
None, None, None, None, wc_dir)
+def sparse_update_with_dash_dash_parents(sbox):
+ """update --parents"""
+
+ sbox.build(create_wc = False)
+ sbox.add_test_path(sbox.wc_dir, True)
+ alpha_path = os.path.join(sbox.wc_dir, 'A', 'B', 'E', 'alpha')
+ pi_path = os.path.join(sbox.wc_dir, 'A', 'D', 'G', 'pi')
+ omega_path = os.path.join(sbox.wc_dir, 'A', 'D', 'H', 'omega')
+
+ # Start with a depth=empty root checkout.
+ svntest.actions.run_and_verify_svn(
+ "Unexpected error from co --depth=empty",
+ svntest.verify.AnyOutput, [],
+ "co", "--depth", "empty", sbox.repo_url, sbox.wc_dir)
+
+ # Now, let's use --parents to pull in some scattered file children.
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A' : Item(status='A '),
+ 'A/B' : Item(status='A '),
+ 'A/B/E' : Item(status='A '),
+ 'A/B/E/alpha' : Item(status='A '),
+ })
+ expected_disk = svntest.wc.State('', {
+ 'A' : Item(contents=None),
+ 'A/B' : Item(contents=None),
+ 'A/B/E' : Item(contents=None),
+ 'A/B/E/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ })
+ expected_status = svntest.wc.State(sbox.wc_dir, {
+ '' : Item(status=' ', wc_rev=1),
+ 'A' : Item(status=' ', wc_rev=1),
+ 'A/B' : Item(status=' ', wc_rev=1),
+ 'A/B/E' : Item(status=' ', wc_rev=1),
+ 'A/B/E/alpha' : Item(status=' ', wc_rev=1),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None, False,
+ '--parents', alpha_path)
+
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A/D' : Item(status='A '),
+ 'A/D/G' : Item(status='A '),
+ 'A/D/G/pi' : Item(status='A '),
+ })
+ expected_disk.add({
+ 'A/D' : Item(contents=None),
+ 'A/D/G' : Item(contents=None),
+ 'A/D/G/pi' : Item(contents="This is the file 'pi'.\n"),
+ })
+ expected_status.add({
+ 'A/D' : Item(status=' ', wc_rev=1),
+ 'A/D/G' : Item(status=' ', wc_rev=1),
+ 'A/D/G/pi' : Item(status=' ', wc_rev=1),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None, False,
+ '--parents', pi_path)
+
+ expected_output = svntest.wc.State(sbox.wc_dir, {
+ 'A/D/H' : Item(status='A '),
+ 'A/D/H/omega' : Item(status='A '),
+ })
+ expected_disk.add({
+ 'A/D/H' : Item(contents=None),
+ 'A/D/H/omega' : Item(contents="This is the file 'omega'.\n"),
+ })
+ expected_status.add({
+ 'A/D/H' : Item(status=' ', wc_rev=1),
+ 'A/D/H/omega' : Item(status=' ', wc_rev=1),
+ })
+ svntest.actions.run_and_verify_update(sbox.wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None, None, None, False,
+ '--parents', omega_path)
+
+
#----------------------------------------------------------------------
# list all tests here, starting with None:
test_list = [ None,
@@ -2763,6 +2847,7 @@ test_list = [ None,
tree_conflicts_resolved_depth_infinity,
update_excluded_path_sticky_depths,
update_depth_empty_root_of_infinite_children,
+ sparse_update_with_dash_dash_parents,
]
if __name__ == "__main__":
Re: svn commit: r1034269 - in /subversion/trunk/subversion: include/
libsvn_client/ svn/ tests/cmdline/
Posted by "C. Michael Pilato" <cm...@collab.net>.
On 11/12/2010 12:33 AM, Blair Zajac wrote:
> On 11/11/10 9:22 PM, cmpilato@apache.org wrote:
>> Author: cmpilato
>> Date: Fri Nov 12 05:22:39 2010
>> New Revision: 1034269
>>
>> URL: http://svn.apache.org/viewvc?rev=1034269&view=rev
>> Log:
>> Fix issue #3748 ("Implement --parents option for svn update").
>>
>> With this change, checking out a very sparse tree -- say, three files
>> scattered across our standard Greek tree -- goes from looking like
>> this:
>>
>> $ svn co ${PROJECT_ROOT_URL} wc
>> $ svn up --depth=empty wc/A wc/A/D wc/A/D/G wc/A/D/H wc/A/B wc/A/B/E
>> $ svn up wc/A/D/G/pi wc/A/D/H/omega wc/A/B/E/alpha
>
>>
>> to looking like this:
>>
>> $ svn co ${PROJECT_ROOT_URL} wc
>> $ svn up --parents wc/A/D/G/pi wc/A/D/H/omega wc/A/B/E/alpha
>
> Are the checkout commands here meant to have --depth=empty as an command
> line option?
Oops -- yes. Will fix.
--
C. Michael Pilato <cm...@collab.net>
CollabNet <> www.collab.net <> Distributed Development On Demand
Re: svn commit: r1034269 - in /subversion/trunk/subversion: include/
libsvn_client/ svn/ tests/cmdline/
Posted by Blair Zajac <bl...@orcaware.com>.
On 11/11/10 9:22 PM, cmpilato@apache.org wrote:
> Author: cmpilato
> Date: Fri Nov 12 05:22:39 2010
> New Revision: 1034269
>
> URL: http://svn.apache.org/viewvc?rev=1034269&view=rev
> Log:
> Fix issue #3748 ("Implement --parents option for svn update").
>
> With this change, checking out a very sparse tree -- say, three files
> scattered across our standard Greek tree -- goes from looking like
> this:
>
> $ svn co ${PROJECT_ROOT_URL} wc
> $ svn up --depth=empty wc/A wc/A/D wc/A/D/G wc/A/D/H wc/A/B wc/A/B/E
> $ svn up wc/A/D/G/pi wc/A/D/H/omega wc/A/B/E/alpha
>
> to looking like this:
>
> $ svn co ${PROJECT_ROOT_URL} wc
> $ svn up --parents wc/A/D/G/pi wc/A/D/H/omega wc/A/B/E/alpha
Are the checkout commands here meant to have --depth=empty as an command line
option?
Blair