On Mon, Apr 28, 2008 at 05:57:52PM -0400, Karl Fogel wrote:
>
> Basically, I think just adding depth to the regular add API is okay.
>
Here comes the patch that introduce a new svn_wc_add3() to handle depth on add
correctly.
svn_add3.diff:
[[[
Introduced a new svn_wc_add3() to handle depth correctly. This makes the
--depth option in 'svn add' works in the same way as ci, up etc.
* subversion/include/svn_wc.h
(svn_wc_add3): New, accept depth parameters and ignore it for files.
(svn_wc_add2): Now deprecated.
* subversion/libsvn_wc/adm_ops.c
(svn_wc_add3): New, accept depth parameters and ignore it for files.
svn_depth_infinity will be used upon invalid depth value. Obsolete comment
deleted.
(svn_wc_add2): Deprecated. Now calls svn_wc_add3 with a default
svn_depth_infinity.
* subversion/libsvn_wc/copy.c
(copy_added_file_administratively,
copy_added_dir_administratively,
copy_dir_administratively): Switch to svn_wc_add3, with a default
svn_depth_infinity depth.
* subversion/libsvn_client/merge.c
(merge_dir_added): Switch to svn_wc_add3, with a default svn_depth_infinity
depth.
* subversion/libsvn_client/copy.c
(repos_to_wc_copy_single): Switch to svn_wc_add3, with a default
svn_depth_infinity depth.
* subversion/libsvn_client/add.c
(add_file, add_dir_recursive,
add, add_parent_dirs): Switch to svn_wc_add3, with a default
svn_depth_infinity depth.
(add): Pass all directory target to add_dir_recursive, otherwise adjustment
will also be needed here.
* subversion/tests/cmdline/depth_tests.py
(add_tree_with_depth_files): Renamed to add_tree_with_depth to reflect the
new content: depth verified & new tests added for the --force & --parents
situation
(test_list): update according to the rename.
]]]
svn_add3_cleanup.diff
[[[
Some cleanups:
* subversion/include/svn_client.h
(svn_client_add3): Update the document that -N is mapped to svn_depth_empty
* subversion/libsvn_client/add.c
(svn_client_add4): Fold up duplicated code in both path of a branch
(svn_client_add3): Map the -N to svn_depth_empty, make it consistent with
the mapping in svn/main.c
]]]
Some questions about the svn_wc__do_update_cleanup() call in the original
svn_wc_add2(). This function is called only when add-with-history and will
recursively tweak the children entries. However, the svn_wc_add2() adds only
the single item specified in the parameter, rather than the whole tree. So, to
put a sub-tree under version control, we have to crawl the tree and call
svn_wc_add2() many times. If we call svn_wc_add2() in a root-first favor, the
svn_wc__do_update_cleanup() call does nothing more than tweak 'this_dir'; if
we call svn_wc_add2() in a root_last favor (I really doubt this), the
svn_wc__do_update_cleanup() call will tweak each children many times. Why do
we have to call this function?
Rui, Guo
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe_at_subversion.tigris.org
For additional commands, e-mail: dev-help_at_subversion.tigris.org
Received on 2008-05-04 15:27:17 CEST