On Wednesday 07 November 2012 08:57 PM, Stefan Fuhrmann wrote:
On Wed, Nov 7, 2012 at 3:02 PM, vijay <vi...@collab.net
<mailto:vi...@collab.net>> wrote:
On Tuesday 06 November 2012 08:09 PM, Stefan Fuhrmann wrote:
On Mon, Nov 5, 2012 at 5:24 PM, vijay <vi...@collab.net
<mailto:vi...@collab.net>
<mailto:vi...@collab.net <mailto:vi...@collab.net>>> wrote:
Hi,
This patch implements '--include-externals' option to 'svn
list'
[Issue #4225] [1].
All tests pass with 'make check' & 'make davautocheck'.
Attached the patch and log message.
Please review this patch and share your thoughts.
Thanks in advance for your time.
Thanks & Regards,
Vijayaguru
[1]
http://subversion.tigris.org/____issues/show_bug.cgi?id=4225
<http://subversion.tigris.org/__issues/show_bug.cgi?id=4225>
<http://subversion.tigris.org/__issues/show_bug.cgi?id=4225
<http://subversion.tigris.org/issues/show_bug.cgi?id=4225>>
Hi Vijay,
Not sure whether these points have already been
discussed in previous threads, but the following
two points caught my attention:
+typedef svn_error_t *(*svn_client_list_func2_t)(
+ void *baton,
+ const char *path,
+ const svn_dirent_t *dirent,
+ const svn_lock_t *lock,
+ const char *abs_path,
o.k.
+ svn_boolean_t notify_external_start,
+ svn_boolean_t notify_external_end,
+ const char *external_parent_url,
+ const char *external_target,
Maybe, this should be modeled to create a more "seamless"
appearance. Only keep the external_parent_url member.
If it is NULL, this entry has not been pulled in here by
some external. Otherwise it contains the parent URL as
defined by your patch.
I don't see the see the need to expose more information.
Why would you need to group externals? The external_target
member should be given implicitly by path / dirent.
Am I missing something here?
The external_target member will not be given by path / dirent.
We will get it by parsing the externals description.
Suppose that path1 in repo1 has svn:externals set to path2 in repo2.
When we list path1 with externals included,
1. First, list path1.
2. Then, process all the externals defined under path1. Parse
through the individual external description and populate
external_target.
For example,
external description under path1:
external_desc = exdir http://<url-of-path2-in-repo2>
external_target = exdir
external_parent_url = http://<url-of-path1-in-repo1>
url of external = http://<url-of-path2-in-repo2>
3. List the entries by reaching 'url of external'.
OK, I now see what you are trying to do here -
I had read to much into the code.
However, in this form, the added functionality is
of limited use, IMHO. I understand that what you
list is basically which paths you would get for a
"svn co $url".
While this is fine, I see two issues with it:
* trees don't get overlayed. Example:
$>svn ls $URL -R
sub1
sub1/fileA
sub1/fileB
sub2
$>svn propget "svn:externals" $URL
http://somewhere/ sub1/subsub
$>svn ls $URL -R --include-externals
sub1
sub1/fileA
sub1/fileB
sub2
sub1/subsub [external].
Desired output
sub1
sub1/fileA
sub1/fileB
sub1/subsub [external @$URL].
sub2
I was referring externals related code base in checkout/update and
export while implementing this option.
From subversion/libsvn_client/update.c
<snip>
/* We handle externals after the update is complete, so that
handling external items (and any errors therefrom) doesn't delay
the primary operation. */
</snip>
So I preferred the same for 'list' also. But there is a difference in
externals processing between the commands checkout/update and list. The
former processes the externals by default. The latter processes
externals only if we specifically ask it. What should we do here?
* result of ls on a sub-folder results in less output
$>svn ls $URL/sub1 -R --include-externals
fileA
fileB
Desired output:
fileA
fileB
subsub [external @$URL].
Bert raised the same question and C-Mike answered here [1].
The current implementation uses svn_ra_get_dir() to fetch all properties
and filters "svn:externals" under current list target. I don't know how
to extend it for externals defined higher up in the tree.
Thanks & Regards,
Vijayaguru
[1] http://svn.haxx.se/dev/archive-2012-10/0353.shtml
So, it is hard to build e.g. explorer-like GUIs based
on this information. The GUI would still need to collect,
remember and "splice" the externals manually. That
would render your extension almost useless.
-- Stefan^2.
--
Certified & Supported Apache Subversion Downloads:
/
http://www.wandisco.com/subversion/download
/