Re: svn commit: r1657026 - in /subversion/trunk/subversion: bindings/javahl/native/ bindings/javahl/src/org/apache/subversion/javahl/ include/ libsvn_client/ libsvn_wc/ svn/ tests/libsvn_wc/

2015-02-04 Thread Branko Čibej
On 04.02.2015 09:36, rhuij...@apache.org wrote:
> Author: rhuijben
> Date: Wed Feb  4 08:36:20 2015
> New Revision: 1657026
>
> URL: http://svn.apache.org/r1657026
> Log:
> As we are revving svn_client_revert() for 1.9 anyway, now is the time to
> give it a 'metadata_only' flag, like we have on copy and move.

I understand the case for a metadata-only copy and/or move.
What's the use case for doing a metadata-only revert?

-- Brane



Re: svn commit: r1656616 - in /subversion/branches/reuse-ra-session: BRANCH-README subversion/libsvn_client/client.h subversion/libsvn_client/ra_cache.c

2015-02-04 Thread Branko Čibej
On 04.02.2015 03:22, Greg Stein wrote:
> On Mon, Feb 2, 2015 at 7:52 PM,  wrote:
>> ...
>> +++ subversion/branches/reuse-ra-session/BRANCH-README Tue Feb  3 01:52:26
>> 2015
>> @@ -8,12 +8,19 @@ all changes made in the branch.
>>
>>  STATUS
>>  ==
>> -+ Initial implementation
>> -- Do not call svn_ra_* methods in find_session_by_url() because callback
>> -  table may be destroyed at that time.
>> +
>> +done:
>> +- Initial implementation.
>> +- Separate active and inactive session lists.
>> +
>> +todo:
>> +- Fix timeout in davautocheck tests at log_tests.py::log_diff_moved.
>> +- Limit the number of unused open sessions.
>> +- Run performance comparisons between trunk and branch to prove that
>> +  the RA session cache does in fact speed things up.
>>
> This is the part that I wonder about. If we had 1000 sessions, then I
> *might* start to believe a separation would be interesting.
>
> A cache of sessions: sure; that's why we already had a cache.
>
> But to split that apart and keep multiple lists? Did you have an indicator
> somewhere that this split could help? That "get me a connected RA session"
> was somehow noticeably slow, relative to a simple iteration sessions?

The important reason is that with this split it's much easier to manage
the cached idle sessions than it was before the change. Before, all the
sessions were stored in an unordered hash table, and the difference
between 'idle' and 'active' was in a few bits of data in the cache entry
struct.

Now, the idle sessions are stored in a doubly-linked list, which is
ordered. This will make it easier in future to limit the number of
cached idle sessions and to remove the least-recently-used ones from the
cache. It also ensures that when we want to reuse a session, we'll
always pick the one that was released most recently, which reduces the
chance that the session might have become invalid (connection timed out,
Kerberos token invalidated, etc.) while it's been idle.

And yes, I do expect that iterating through a shorter list will save
nanoseconds. :)

-- Brane


RE: svn commit: r1657026 - in /subversion/trunk/subversion: bindings/javahl/native/ bindings/javahl/src/org/apache/subversion/javahl/ include/ libsvn_client/ libsvn_wc/ svn/ tests/libsvn_wc/

2015-02-04 Thread Bert Huijben


> -Original Message-
> From: Branko Čibej [mailto:br...@wandisco.com]
> Sent: woensdag 4 februari 2015 10:23
> To: dev@subversion.apache.org
> Subject: Re: svn commit: r1657026 - in /subversion/trunk/subversion:
> bindings/javahl/native/ bindings/javahl/src/org/apache/subversion/javahl/
> include/ libsvn_client/ libsvn_wc/ svn/ tests/libsvn_wc/
> 
> On 04.02.2015 09:36, rhuij...@apache.org wrote:
> > Author: rhuijben
> > Date: Wed Feb  4 08:36:20 2015
> > New Revision: 1657026
> >
> > URL: http://svn.apache.org/r1657026
> > Log:
> > As we are revving svn_client_revert() for 1.9 anyway, now is the time to
> > give it a 'metadata_only' flag, like we have on copy and move.
> 
> I understand the case for a metadata-only copy and/or move.
> What's the use case for doing a metadata-only revert?

In my particular case:
Users automatically replacing files like .dll's (shared libraries) and .xls 
document files.

The delete is automatically handled and properly recorded as a delete in 
Subversion. (The --keep-local flag is essentially delete's metadata only, as it 
allows deleting without error)

But then the file is replaced, by some outside process. The current worst case 
is the NuGet Visual Studio addin, that just tells me that the user does things 
(who doesn't) and sometimes blocks access.

The user goes on with his work and locks the file... (opens excel, starts 
debugging, whatever)

Now the user wants to commit his workspace, but explicitly doesn't want to 
record the delete + add as a delete, but as a normal file update.


To change the in-wc state to a normal update I have to call revert... But that 
currently requires replacing the in-wc file with the old version.
(And moving around the file to keep the copy has all those other nice side 
effects)


This patch allows handling this workflow with a single call to revert, that 
typically can't fail unless another Subversion client changes the same wc at 
the same time.



TortoiseSVN has a similar workflow, somewhere in its context menus.

Bert



Re: svn commit: r1656893 - in /subversion/trunk/subversion: svnsync/sync.c tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.d

2015-02-04 Thread Julian Foad
Hi Philip,

Thanks for fixing my embarrassing bug.

I've just finished fixing this too, and expanding the test, and then found you 
already committed this last night. We should have used more words to 
communicate. The fix was easy (not too different from yours) but I spent some 
time on the tests.

As I think I have made a considerably more thorough set of test cases for this 
issue, I'm taking the liberty of committing that part. r1657182.

Apparently we had no test that synced a repository containing merginfo at all. 
That's another deficiency we could address with the approach of running 
additional (svnsync in this case) tests at the end of existing tests. I'll look 
into doing that after reintegrating the 'dump-load-cross-check' branch.

- Julian



> Author: philip
> Date: Tue Feb  3 19:07:09 2015
> New Revision: 1656893
> 
> URL: http://svn.apache.org/r1656893
> Log:
> Fix svnsync r0 filtering to handle svn:mergeinfo where not all
> lines contain r0.
> 
> * subversion/svnsync/sync.c
>   (remove_r0_mergeinfo): Build up new string when r0 not present.
> 
> [In subversion/tests/cmdline/svnsync_tests_data/]
> 
> * mergeinfo-contains-r0.dump: Extend with svn:mergeinfo that has
>    only some, or no, lines with r0.
> 
> * mergeinfo-contains-r0.expected.dump: Adjust.
> 
> Modified:
>     subversion/trunk/subversion/svnsync/sync.c
>     
> subversion/trunk/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
>     
> subversion/trunk/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.dump



Re: svn commit: r1656893 - in /subversion/trunk/subversion: svnsync/sync.c tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.d

2015-02-04 Thread Julian Foad
I (Julian Foad) wrote:
> I've just finished fixing this too, and expanding the test, and then found 

> you already committed this last night. We should have used more words to 
> communicate. The fix was easy (not too different from yours) but I spent some 
> time on the tests.

It turns out your fix was not quite right -- see r1657195. Before committing 
r1657182, I briefly inspected it and thought it looked OK and re-ran my tests 
on it but I must have failed to re-build. The buildbots caught it.

- Julian


Enhancement requests

2015-02-04 Thread Julian Foad
Can we manage enhancement requests better?


Users often ask when they can have a certain feature. For example, I was asked 
recently (for a customer at work) when diff and patch will support full 
Subversion tree changes such as copy and rename. That's an issue that I 
personally think is important and has been mentioned in the tracker for a long 
time (ahem, 2003). Over the years we've added bits of support in the area (such 
as git diff format) but it still has no road map, and there isn't a single 
issue describing it, and there is not even a vague design plan written down for 
it as far as I can find.

The users generally want to know whether the feature is on our roadmap, 
approximately when we will develop it, and where it is on our priority list -- 
that is, what other developments are higher priority.

Our usual response is that we don't have a priority list, we only put a few key 
goals on our roadmap, and it will happen when somebody makes it happen. We say 
we're volunteer-led so there's no way to force anything to be done. But is it 
good for us to have no priorities about most proposals and not to make any 
further decisions about the proposed enhancement, just leaving it to possibly 
happen one day? I think it would be good for us if we were a bit more active in 
managing things.

I think one element needed here is some way in which the user can see what *is* 
planned. Communication often helps things go well in life generally. For an 
enhancement that is not planned, we might suppose there would be not much to 
see, but there should still be something saying: "yes this enhancement is 
one that we agree we want, and is waiting for developer resources to do 
it". Or "this proposal has been assessed as not currently of much interest to 
the community as a whole, but of course this decision can be reviewed if anyone 
wishes".

Would it help if we maintain some sort of priority indicator in the issue 
tracker or on the web?



Should we be going through the issues in the tracker and "triaging" them, 
deciding how sensible/important/feasible they are and rejecting the weak ones, 
much more actively than we currently do? I would be willing to do more of that.

Should we spend a bit more time jointly exploring some of the main ideas that 
we're all largely aware of (things we broadly agree we want but haven't dug 
into), a sort of sketching out of high level design goals, that would not be 
binding but could then be recorded as projects that are a bit more ready to 
work on that just an initial idea?

Should we spend a bit more effort on our web pages, particularly the "what's in 
development and what's next" pages? I think that would be useful in encouraging 
potential helpers to get interested and to contact us.

What do others think?

- Julian


Re: [vote] pin-externals branch to trunk

2015-02-04 Thread Stefan Sperling
On Fri, Jan 30, 2015 at 06:14:02PM +0100, Stefan Kueng wrote:
> But can you maybe implement my other request about using an array of
> externals to tag so the user can chose which externals to tag and which ones
> to just leave as-is?

Does this API do the job? http://svn.apache.org/r1657267


RE: svn commit: r1657267 - in /subversion/branches/pin-externals/subversion: include/svn_client.h libsvn_client/copy.c libsvn_client/deprecated.c svn/copy-cmd.c tests/libsvn_client/client-test.c

2015-02-04 Thread Bert Huijben


> -Original Message-
> From: s...@apache.org [mailto:s...@apache.org]
> Sent: woensdag 4 februari 2015 15:59
> To: comm...@subversion.apache.org
> Subject: svn commit: r1657267 - in /subversion/branches/pin-
> externals/subversion: include/svn_client.h libsvn_client/copy.c
> libsvn_client/deprecated.c svn/copy-cmd.c tests/libsvn_client/client-test.c
> 
> Author: stsp
> Date: Wed Feb  4 14:58:59 2015
> New Revision: 1657267
> 
> URL: http://svn.apache.org/r1657267
> Log:
> On the pin-externals branch, allow fine-grained API-level control over which
> externals get pinned during a copy. This feature is intended for clients which
> allow users to select specific externals for pinning, like TortoiseSVN does.
> 
> Suggested by: steveking
> 
> * subversion/include/svn_client.h
>   (svn_client_copy7): Add externals_to_pin parameter. Extend docstring.
> 
> * subversion/libsvn_client/copy.c
>   (make_external_description): New. Factored out from pin_externals_prop().
>   (pin_externals_prop): Add externals_to_pin parameter. If set, only pin
>externals matching those in externals_to_pin.
>   (resolve_pinned_externals, do_wc_to_wc_copies_with_write_lock,
>do_wc_to_wc_copies, repos_to_repos_copy, wc_to_repos_copy,
>repos_to_wc_copy_single, repos_to_wc_copy_locked, repos_to_wc_copy,
>try_copy, svn_client_copy7): Add new externals_to_pin parameter
> and pass it all the way down to pin_externals_prop().
>   (svn_client_move7): Pass NULL for externals_to_pin.
> 
> * subversion/libsvn_client/deprecated.c
>   (svn_client_copy6): Pass NULL for externals_to_pin.
> 
> * subversion/svn/copy-cmd.c
>   (svn_cl__copy): Pass NULL for externals_to_pin.
> 
> * subversion/tests/libsvn_client/client-test.c
>   (test_copy_pin_externals, test_funcs): New test.
> 
> Modified:
> subversion/branches/pin-externals/subversion/include/svn_client.h
> subversion/branches/pin-externals/subversion/libsvn_client/copy.c
> subversion/branches/pin-externals/subversion/libsvn_client/deprecated.c
> subversion/branches/pin-externals/subversion/svn/copy-cmd.c
> subversion/branches/pin-externals/subversion/tests/libsvn_client/client-
> test.c
> 
> Modified: subversion/branches/pin-externals/subversion/include/svn_client.h
> URL: http://svn.apache.org/viewvc/subversion/branches/pin-
> externals/subversion/include/svn_client.h?rev=1657267&r1=1657266&r2=1657
> 267&view=diff
> 
> ==
> --- subversion/branches/pin-externals/subversion/include/svn_client.h 
> (original)
> +++ subversion/branches/pin-externals/subversion/include/svn_client.h Wed
> Feb  4 14:58:59 2015
> @@ -4493,8 +4493,16 @@ typedef struct svn_client_copy_source_t
>   * as part of this operation.
>   *
>   * If @a pin_externals is set, pin URLs in copied externals definitions
> - * to their last-changed revision unless they were already pinned to a
> - * particular revision.
> + * to their current revision unless they were already pinned to a
> + * particular revision. If non-NULL, @a externals_to_pin restricts pinning
> + * to a subset of externals. It is a hash table keyed by either a local
> + * absolute path or a URL at which an svn:externals property is set.
> + * The hash table contains apr_array_header_t* elements as returned
> + * by svn_wc_parse_externals_description3(). These arrays contain elements
> + * of type svn_wc_external_item2_t*. Externals corresponding to these
> + * items will be pinned, other externals will not be pinned.
> + * If @a externals_to_pin is @c NULL then all externals are pinned.
> + * If @a pin_externals is @c FALSE then @a externals_to_pin is ignored.

" absolute path or a URL at which an svn:externals property is set."

When should I use URL and when an abspath?
Does that depend on which copy operation I use? (repos->wc, wc->wc, 
repos->repos)

Do I need to specify the source or the destination path/url?

This already huge chunk of documentation, still leaves out a lot of details I 
would need to use it.



Personally I liked the feature better, before adding this configuration knob, 
which still doesn't allow per external pinning (only per svn:externals 
property), and still requires api users to walk all the externals themselves.

Bert



Re: svn commit: r1657267 - in /subversion/branches/pin-externals/subversion: include/svn_client.h libsvn_client/copy.c libsvn_client/deprecated.c svn/copy-cmd.c tests/libsvn_client/client-test.c

2015-02-04 Thread Stefan Sperling
On Wed, Feb 04, 2015 at 04:30:11PM +0100, Bert Huijben wrote:
> >   * If @a pin_externals is set, pin URLs in copied externals definitions
> > - * to their last-changed revision unless they were already pinned to a
> > - * particular revision.
> > + * to their current revision unless they were already pinned to a
> > + * particular revision. If non-NULL, @a externals_to_pin restricts pinning
> > + * to a subset of externals. It is a hash table keyed by either a local
> > + * absolute path or a URL at which an svn:externals property is set.
> > + * The hash table contains apr_array_header_t* elements as returned
> > + * by svn_wc_parse_externals_description3(). These arrays contain elements
> > + * of type svn_wc_external_item2_t*. Externals corresponding to these
> > + * items will be pinned, other externals will not be pinned.
> > + * If @a externals_to_pin is @c NULL then all externals are pinned.
> > + * If @a pin_externals is @c FALSE then @a externals_to_pin is ignored.
> 
> " absolute path or a URL at which an svn:externals property is set."
> 
> When should I use URL and when an abspath?
> Does that depend on which copy operation I use? (repos->wc, wc->wc, 
> repos->repos)

If the copy source is a URL, then use a URL.
If the copy source is a WC, then use an abspath.

This is just what is returned from the APIs you can use to recursively
list properties.

> Do I need to specify the source or the destination path/url?

Source/Destination of what? The copy? The external?
 
> This already huge chunk of documentation, still leaves out a lot of details I 
> would need to use it.

Let's try to improve it then.
 
> Personally I liked the feature better, before adding this configuration knob,
> which still doesn't allow per external pinning (only per svn:externals
> property), and still requires api users to walk all the externals themselves.

It does allow for pinning indivual externals.
Each item in the array (the hash table's value for a given abspath_or_url)
corresponds to one line in an svn:externals property, i.e. the definition
of a single external. It is matched by external URL (in unresolved form,
i.e. relative external URLs stay relative) and the target path provided
in the external definition. Together, these uniquely identify an
individual external.

Of course, the API user needs to walk externals first and then select
a few of them for pinning. I don't see a way around that. How else can
we find out which externals the API user wants to pin?


Re: [vote] pin-externals branch to trunk

2015-02-04 Thread Stefan Kueng



On 04.02.2015 16:07, Stefan Sperling wrote:

On Fri, Jan 30, 2015 at 06:14:02PM +0100, Stefan Kueng wrote:

But can you maybe implement my other request about using an array of
externals to tag so the user can chose which externals to tag and which ones
to just leave as-is?


Does this API do the job? http://svn.apache.org/r1657267



Perfect! That's what I needed.

Maybe one more improvement:
Add a new API to fetch the list of externals which would be pegged if 
NULL is passed to the svn_client_copy7 API.

Suggested name: svn_client_get_externals_for_copy()
which returns the hash of all externals.
I figure the code to do that is already in place (you have to do that if 
NULL is passed). And it would make it easier for clients.


I can easily do this myself on a working copy, but I'm guessing I can't 
do it using the client API's as efficiently as a new API could for urls.


Stefan

--
   ___
  oo  // \\  "De Chelonian Mobile"
 (_,\/ \_/ \ TortoiseSVN
   \ \_/_\_/>The coolest interface to (Sub)version control
   /_/   \_\ http://tortoisesvn.net


Re: svn commit: r1656893 - in /subversion/trunk/subversion: svnsync/sync.c tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.d

2015-02-04 Thread Julian Foad
So we're on the third version of the code and third version of the test, for a 
tiny edge-case feature. Clearly it's fragile. I had a bad feeling about writing 
it this way in the first place.

I have proceeded to implement 'svnsync' cross-checking in the test suite: 
running every repository produced by a test through 'svnsync' and checking 
there is no change.

This turns up at least one further bug: assertion failure on deleting a 
mergeinfo property.

I'll get to fixing that and committing the extra testing tomorrow.

- Julian



Re: [vote] pin-externals branch to trunk

2015-02-04 Thread Stefan Sperling
On Wed, Feb 04, 2015 at 06:42:08PM +0100, Stefan Kueng wrote:
> Maybe one more improvement:
> Add a new API to fetch the list of externals which would be pegged if NULL
> is passed to the svn_client_copy7 API.
> 
> Suggested name: svn_client_get_externals_for_copy()
> which returns the hash of all externals.
> I figure the code to do that is already in place (you have to do that if
> NULL is passed). And it would make it easier for clients.
> 
> I can easily do this myself on a working copy, but I'm guessing I can't do
> it using the client API's as efficiently as a new API could for urls.

A recursive propget on the copy source gives you that list. Plus you'd have
to pass the externals you get through svn_wc_parse_externals_description3()
to get them represented as an array of svn_wc_external_item2_t. 


Re: svn commit: r1657267 - in /subversion/branches/pin-externals/subversion: include/svn_client.h libsvn_client/copy.c libsvn_client/deprecated.c svn/copy-cmd.c tests/libsvn_client/client-test.c

2015-02-04 Thread Branko Čibej
On 04.02.2015 15:59, s...@apache.org wrote:
> Author: stsp
> Date: Wed Feb  4 14:58:59 2015
> New Revision: 1657267
>
> URL: http://svn.apache.org/r1657267
> Log:
> On the pin-externals branch, allow fine-grained API-level control over which
> externals get pinned during a copy. This feature is intended for clients which
> allow users to select specific externals for pinning, like TortoiseSVN does.
[...]
> @@ -4523,6 +4531,7 @@ svn_client_copy7(const apr_array_header_
>   svn_boolean_t make_parents,
>   svn_boolean_t ignore_externals,
>   svn_boolean_t pin_externals,
> + const apr_hash_t *externals_to_pin,
>   const apr_hash_t *revprop_table,
>   svn_commit_callback2_t commit_callback,
>   void *commit_baton,

.../subversion/bindings/javahl/native/SVNClient.cpp:463:17: error: no matching 
function for
  call to 'svn_client_copy7'
SVN_JNI_ERR(svn_client_copy7(srcs, destinationPath.c_str(),
^~~~
.../subversion/bindings/javahl/native/JNIUtil.h:234:39: note: expanded from 
macro 'SVN_JNI_ERR'
svn_error_t *svn_jni_err__temp = (expr);\
  ^
.../subversion/include/svn_client.h:4528:1: note: candidate function not 
viable: requires 12
  arguments, but 11 were provided

-- Brane



Re: [vote] pin-externals branch to trunk

2015-02-04 Thread Stefan Kueng



On 04.02.2015 19:08, Stefan Sperling wrote:

On Wed, Feb 04, 2015 at 06:42:08PM +0100, Stefan Kueng wrote:

Maybe one more improvement:
Add a new API to fetch the list of externals which would be pegged if NULL
is passed to the svn_client_copy7 API.

Suggested name: svn_client_get_externals_for_copy()
which returns the hash of all externals.
I figure the code to do that is already in place (you have to do that if
NULL is passed). And it would make it easier for clients.

I can easily do this myself on a working copy, but I'm guessing I can't do
it using the client API's as efficiently as a new API could for urls.


A recursive propget on the copy source gives you that list. Plus you'd have
to pass the externals you get through svn_wc_parse_externals_description3()
to get them represented as an array of svn_wc_external_item2_t.


Thanks for the hint. Will do that.

Stefan


[PATCH] Fix possible crash in svn_fs_fs__lock() / svn_fs_fs__unlock()

2015-02-04 Thread Sergey Raevskiy
Hi!

Recenty I've discovered possible crash in FSFS locking code.  If, for some
reason, 'write-lock' cannot be obtained for lock/unlock operation, the FSFS
will SEGFAULT.

This happens beacuse lb.infos field is getting initialized only in function
lock_body() (see the code below).  So, if svn_fs_fs__with_write_lock() fails
without actual invoking the lock_body(), lb.infos will be left uninitialized.

[[[
svn_error_t *
svn_fs_fs__lock(svn_fs_t *fs,

  ...

  struct lock_baton lb;

  ...

  lb.fs = fs;
  lb.targets = sorted_targets;
  lb.comment = comment;
  lb.is_dav_comment = is_dav_comment;
  lb.expiration_date = expiration_date;
  lb.steal_lock = steal_lock;
  lb.result_pool = result_pool;

  err = svn_fs_fs__with_write_lock(fs, lock_body, &lb, scratch_pool);
  for (i = 0; i < lb.infos->nelts; ++i)
{

  ...
]]]

The same thing with svn_fs_fs__unlock().

I've attached the patch with crashing test and simple fix for this issue.

Log message:
[[[
Fix possible crash in svn_fs_fs__lock() / svn_fs_fs__unlock().

* subversion/subversion/tests/libsvn_fs/locks-test.c
  (obtain_write_lock_failure_test): New; test for the issue.

* subversion/subversion/libsvn_fs_fs/lock.c
  (lock_body,
   svn_fs_fs__lock): Initialize the lb.infos field before calling to
 svn_fs_fs__with_write_lock().
  (unlock_body,
   svn_fs_fs__unlock): Same.

Patch by: Sergey Raevskiy 
]]]
Index: subversion/libsvn_fs_fs/lock.c
===
--- subversion/libsvn_fs_fs/lock.c  (revision 1657295)
+++ subversion/libsvn_fs_fs/lock.c  (working copy)
@@ -853,9 +853,6 @@ lock_body(void *baton, apr_pool_t *pool)
   int i, outstanding = 0;
   apr_pool_t *iterpool = svn_pool_create(pool);
 
-  lb->infos = apr_array_make(lb->result_pool, lb->targets->nelts,
- sizeof(struct lock_info_t));
-
   /* Until we implement directory locks someday, we only allow locks
  on files or non-existent paths. */
   /* Use fs->vtable->foo instead of svn_fs_foo to avoid circular
@@ -1056,9 +1053,6 @@ unlock_body(void *baton, apr_pool_t *pool)
   int i, max_components = 0, outstanding = 0;
   apr_pool_t *iterpool = svn_pool_create(pool);
 
-  ub->infos = apr_array_make(ub->result_pool, ub->targets->nelts,
- sizeof(struct unlock_info_t));
-
   SVN_ERR(ub->fs->vtable->youngest_rev(&youngest, ub->fs, pool));
   SVN_ERR(ub->fs->vtable->revision_root(&root, ub->fs, youngest, pool));
 
@@ -1240,6 +1234,8 @@ svn_fs_fs__lock(svn_fs_t *fs,
 
   lb.fs = fs;
   lb.targets = sorted_targets;
+  lb.infos = apr_array_make(result_pool, sorted_targets->nelts,
+sizeof(struct lock_info_t));
   lb.comment = comment;
   lb.is_dav_comment = is_dav_comment;
   lb.expiration_date = expiration_date;
@@ -1330,6 +1326,8 @@ svn_fs_fs__unlock(svn_fs_t *fs,
 
   ub.fs = fs;
   ub.targets = sorted_targets;
+  ub.infos = apr_array_make(result_pool, sorted_targets->nelts,
+sizeof(struct unlock_info_t));
   ub.skip_check = FALSE;
   ub.break_lock = break_lock;
   ub.result_pool = result_pool;
Index: subversion/tests/libsvn_fs/locks-test.c
===
--- subversion/tests/libsvn_fs/locks-test.c (revision 1657295)
+++ subversion/tests/libsvn_fs/locks-test.c (working copy)
@@ -1079,6 +1079,62 @@ lock_cb_error(const svn_test_opts_t *opts,
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+obtain_write_lock_failure_test(const svn_test_opts_t *opts,
+   apr_pool_t *pool)
+{
+  svn_fs_t *fs;
+  const char *conflict;
+  svn_revnum_t newrev;
+  svn_fs_access_t *access;
+  svn_fs_lock_target_t *target;
+  struct lock_many_baton_t baton;
+  apr_hash_t *lock_paths, *unlock_paths;
+
+  /* The test makes sense only for FSFS. */
+  if (strcmp(opts->fs_type, SVN_FS_TYPE_FSFS) != 0)
+return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL,
+"this will test FSFS repositories only");
+
+  SVN_ERR(create_greek_fs(&fs, &newrev, "obtain-write-lock-failure-test",
+  opts, pool));
+  SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
+  SVN_ERR(svn_fs_set_access(fs, access));
+
+  /* Make a read only 'write-lock' file.  This prevents any write operations
+ from being executed. */
+  
SVN_ERR(svn_io_set_file_read_only("obtain-write-lock-failure-test/write-lock",
+TRUE, pool));
+
+  baton.results = apr_hash_make(pool);
+  baton.pool = pool;
+  baton.count = 0;
+
+  /* Trying to lock some paths.  We don't really care about error; the test
+ shouldn't crash. */
+  target = svn_fs_lock_target_create(NULL, newrev, pool);
+  lock_paths = apr_hash_make(pool);
+  svn_hash_sets(lock_paths, "/iota", target);
+  svn_hash_sets(lock_paths, "/A/mu", target);
+
+  apr_hash_clear(baton.results);
+  SVN_TEST_ASSERT_ANY_ERROR(svn_fs_lock_many(fs, lock_paths, "comme

[no subject]

2015-02-04 Thread Hiroaki Nakamura
ゆうちょのATMは9時からだったので、それまで待ってからお金おろして帰りますね

--


Re: svn commit: r1657451 - in /subversion/branches/reuse-ra-session: ./ subversion/libsvn_client/

2015-02-04 Thread Branko Čibej
On 05.02.2015 01:44, br...@apache.org wrote:
> Author: brane
> Date: Thu Feb  5 00:44:57 2015
> New Revision: 1657451
>
> URL: http://svn.apache.org/r1657451
> Log:
> On the reuse-ra-session branch: Add explicit session reuse in libsvn_client.

Anyone who's interested in the RA session cache, please take time to
review this commit.

All tests pass for me (ra_local, ra_svn and ra_dav) and I re-read the
diffs about five times to check that sessions are being released to
cache only when it's certain that they're valid. But I'd really like to
have a few more pairs of eyes on this, because there's potential for
some nasty bugs being introduced.

-- Brane