Re: 1.14.4 release

2024-03-11 Thread Johan Corveleyn
On Mon, Mar 11, 2024 at 8:55 AM Stefan Sperling  wrote:
>
> On Sun, Mar 10, 2024 at 07:59:38PM -0400, Nathan Hartman wrote:
> > There is at least a week before I can begin working on it, so there is
> > time for the dev community to respond.
>
> I will be around to help with testing/signing. Thanks for picking this up!

Likewise. +1

-- 
Johan


Re: Assert-Anweisung schlug fehl (! svn_path_is_url(relative))

2024-02-07 Thread Johan Corveleyn
On Tue, Feb 6, 2024 at 10:24 PM Jürgen Loh  wrote:
>
> Am 06.02.2024 um 12:00 schrieb Jürgen Loh:
> > This evening I can try if TourtoiseSVN fails on the clients, too.
>
> I did this test.  The problem is not related to SUBST, it happens the
> same on a network share.
>
> The situation is:
>
> The SVN working copy is on a Windows server, store at C:\User\Data:
>
> Revert fails on the same server on drive G:\ that is a SUBST to
> C:\User\Data.
> Revert fails on a client that linked G:\ to a network share on the
> Windows server that points to C:\User\Data.
> But: Revert WORKS on the server if it is executed on C:\User\Data directly.
>
> I still don't know if it's TortoiseSVN or SVN related.  I don't know how
> to test it with the SVN command line client directly.

You can install the commandline client that comes with TortoiseSVN by
checking the "command line tools" option in the installer. If you have
those installed, you can simply open a cmd window, go to G:\ or
C:\User\Data, and run 'svn revert' (or 'svn revert -R' if you want to
perform the revert operation recursively -- be aware that you'll throw
away local uncommitted changes this way, but I assume you know what
revert does).

I'd like to point out that sharing a working copy this way, allowing
multiple users to access the same working copy from different machines
(especially if they might use it concurrently), is quite dangerous,
and you risk corrupting your working copy (see [1] from TortoiseSVN's
FAQ). I'd strongly advise against it. The normal usage pattern is that
every user / machine checks out its own working copy from the central
repository, runs 'svn update' regularly to keep it updated, and works
from their own copy.

[1] https://tortoisesvn.net/faq.html#wconshare

-- 
Johan


Re: Switching from SHA1 to a checksum type without known collisions in 1.15 working copy format

2024-01-12 Thread Johan Corveleyn
On Fri, Jan 12, 2024 at 12:37 PM Daniel Shahaf  wrote:
...
> Procedurally, the long hiatus is counterproductive.  Neither kfogel nor
> I had the context in our heads, and the cache misses took their toll in
> tuits and in wallclock time.  Furthermore, I have less spare time for
> dev@ discussions than I did when I cast the veto (= a year ago next
> Saturday).  Going forward it might be preferable for threads not to
> hibernate.

I agree, but obviously the hibernation is not some deliberate action
by anyone. It's just that most of us here have less spare time for
dev@ discussions (and for SVN development) than before. Especially for
such complex matters, and especially when people feel there are
walking into a minefield. There are only a few active devs left, and
tuits are running low ...

...
> That being the case, I have considered whether merging the feature
> branch outweighs letting dev@ take a not-only-/pro forma/ role in
> design discussions.  I am of the opinion that it does not, and
> therefore I reäfirrm the veto.

It has become more clear to me (I was only following tangentially)
that your veto is focused on the development methodology and the lack
of design discussion. Is that a valid reason for a veto? We are low on
resources, someone still finds time to make some progress, no one
blocks it on technical grounds, and then someone vetoes it because we
don't have enough resources?

That puts us pretty much in deadlock, because we are too low on
resources. Or maybe I misunderstand?

To be clear: I appreciate your input, Daniel, and your insistence on a
more thorough design discussion. I assume it's coming from a genuine
concern that we formulate problems well, and think hard about possible
solutions (focusing on the precise problem we are trying to solve).
But at the end of the day, if that design discussion doesn't happen
(or not enough to your satisfaction anyway), is that grounds for a
veto? For me it's a tough call, because on the one hand you have a
point, but on the other hand ... you're blocking _some_ progress
because the process behind it is not perfect (which is hard to do with
the 3.25 tuits we have left).

> P.S.  Could that BRANCH-README please state what's the problem the branch
> means to solve, i.e., the goal / acceptance test?  "Make it possible to
> «svn add» SHA-1 collisions"?

I agree that would be a good step.

I too find it a bit unclear what problem we're actually trying to
solve, apart from a vague feeling that SHA-1 will become more and more
broken over time, and that this will cause fatal injury to SVN (in its
WC, protocol, dump format, or repository). And perhaps the fact that
security auditors are becoming more and more triggered by seeing SHA-1
(even if they don't understand the way it is used and its
ramifications). Making it possible to 'svn add' SHA-1 collisions is
not it, I think.

-- 
Johan


Re: Changing the permission checks in libsvn_subr/io.c

2024-01-10 Thread Johan Corveleyn
On Sun, Jan 7, 2024 at 2:46 AM Vincent Lefevre  wrote:
> On 2024-01-05 11:29:16 +0100, Daniel Sahlberg wrote:
> > Den fre 5 jan. 2024 kl 10:51 skrev Johan Corveleyn :
> >
> > > On Fri, Jan 5, 2024 at 8:46 AM Daniel Sahlberg
> > >  wrote:
> > > ...
> > > > Since the file doesn't have svn:needs-lock it should be RW [and the
> > > Reverted message comes from Subversion trying to restore the W flag ...]
> > >
> > > Should it? Intuitively I'd say: since the file doesn't have
> > > svn:needs-lock Subversion shouldn't be looking at R or RW. Why should
> > > we make a file RW? Can't the user make a file readonly just locally,
> > > and expect Subversion not to care?
> > >
> > > Or is "making a file readonly" a committable local change? Will it
> > > show up on 'svn st' and can it be committed as some change that can be
> > > transferred to another working copy?
> > >
> > > I understand that svn:needs-lock adds extra handling of the readonly
> > > status of files, but without that property?
> >
> > All good questions, and I probably agree with you: if svn:needs-lock isn't
> > set then Subversion could just ignore the R/RW status.
>
> I also agree. I never use svn:needs-lock, and I want to be able to
> set some files in my working copy to read-only, in order to make sure
> that I won't modify them by mistake.
>
> > But any change here would change previous behaviour so it would need
> > a solid consensus.
>
> In any case, the current behavior of Subversion is inconsistent.
> "svn revert" is not documented as the command to "fix" the permissions.
>
> > If the check is removed for files that doesn't svn:needs-lock, then we
> > might have to add code to restore RW status if svn:needs-lock is removed.
> >
> > Making a file readonly is currently not a committable change, didn't check
> > 'svn st' but it will be reverted by 'svn revert' and it will not be
> > transferred to another WC. It can only be committed indirectly via
> > svn:needs-lock.
> >
> > Any discussion regarding svn:needs-lock probably also have to consider
> > svn:executable, since it is handled similarly (except on WIN32 and OS2,
> > where the concept of executable doesn't exists).
> >
> > I havn't completely made up my mind, but I think I favour keeping the
> > current behaviour: R/RW status in indicated by the svn:needs-lock property
> > and you shouldn't change R/RW manually within a WC.
>
> Then this should be documented.
>
> But "svn st" should detect and report incorrect permissions, and
> "svn up" should fix them, just like what happens when a file has
> been removed with just "rm" instead of "svn delete".

Interesting discussion. I agree it should at least be documented, and
perhaps be made a bit more clear from the output of 'revert' (but not
sure how far we can go without breaking compat). Changing the current
behavior is probably a more risky move, given the maturity of SVN and
backwards compatibility etc.

BTW, I did some more digging because the problem looked familiar, and
apparently there was a discussion on users@ in 2016 [1] in which I
participated :). It was reported with a Windows client. I ended up
filing an issue which contains some interesting background information
by Bert [2]. A quote that stood out to me just now when I was
rereading it:

"For WC-NG we explicitly made 'svn revert' always revert your working
copy match how it would be after a clean checkout. (I think philipm
worked on this at the time). And he did quite a bit more work to
ensure that we always provide a notification when we change the
working copy. (Older versions could change your working copy, but not
notify you about this)
...
I think it might have been better to use a specific notify for 'fixing
read-only-ness' during revert, but I'm not sure if this is really
worth all the backwards compatibility breakage to apply this three
versions after this behavior was introduced."

BTW, I know about a similar issue of 'spurious revert notifications',
with mismatching timestamps (lastmod-time different from svn metadata,
a condition that is normally fixed by 'svn cleanup'): if you "touch" a
file in your WC so it has a different timestamp from the metadata, it
will be notified when running 'svn revert' (and I believe the metadata
is adjusted in this case). So that's another source of spurious revert
notifications. I thought I had discussed this on one of our
mailinglists, but I can't find it. The fact that revert fixes
timestamps is mentioned in passing in issue SVN-4162.

Perhaps both types of "adjustments" by revert should get a specific
notification (if any -- for the timestamp fixup case I can live with
simply not notifying, it's an adjustment in metadata, not on-disk file
after all).

[1] https://svn.haxx.se/users/archive-2016-03/0004.shtml
[2] https://issues.apache.org/jira/browse/SVN-4637 (Revert affects
unchanged files with changed permissions)
[3] https://issues.apache.org/jira/browse/SVN-4162 (make svn status
fix timestamp mismatches in meta-data)

-- 
Johan


Re: Changing the permission checks in libsvn_subr/io.c

2024-01-05 Thread Johan Corveleyn
On Fri, Jan 5, 2024 at 8:46 AM Daniel Sahlberg
 wrote:
...
> Since the file doesn't have svn:needs-lock it should be RW [and the Reverted 
> message comes from Subversion trying to restore the W flag ...]

Should it? Intuitively I'd say: since the file doesn't have
svn:needs-lock Subversion shouldn't be looking at R or RW. Why should
we make a file RW? Can't the user make a file readonly just locally,
and expect Subversion not to care?

Or is "making a file readonly" a committable local change? Will it
show up on 'svn st' and can it be committed as some change that can be
transferred to another working copy?

I understand that svn:needs-lock adds extra handling of the readonly
status of files, but without that property?

-- 
Johan


Re: Subversion 1.14.3 up for testing/signing

2023-12-22 Thread Johan Corveleyn
On Sat, Dec 9, 2023 at 4:50 PM Nathan Hartman  wrote:
>
> The 1.14.3 release artifacts are now available for testing/signing.
> Please get the tarballs from
>   https://dist.apache.org/repos/dist/dev/subversion
> and add your signatures there.
>
> Thanks!

Summary
---
+1 to release (Windows)

Platform

Windows 10 x64 (Version 1903)
Microsoft Visual Studio 2019 Community Edition (Version 16.5.3)

Verified

Signature and sha512 for subversion-1.14.3.zip.

Contents of subversion-1.14.3.zip are identical to tags/1.14.3,
and to branches/1.14.x@1914484 (except for expected differences in
svn_version.h and svnpubsub, svnwcsub and nominate.pl (symlinks vs. file
contents), and generated files).

Tested
--
[ Release build x64 ] x [ fsfs ] x [ file | svn | http ]
javahl
swig-python

Results
---
All tests pass.

Dependencies

httpd 2.4.58 (apr 1.7.4, apr-util 1.6.3,
  pcre 8.45, expat 2.2.9, openssl 3.0.12)
apr 1.7.4
apr-util 1.6.3
openssl 3.0.12
serf 1.3.10
sqlite 3.44.2.0
zlib 1.3
python 3.9.1
py3c 1.4
swig 4.1.1
(bundled lz4 1.7.5)
(bundled utf8proc 2.1.0)

Manually applied sqlite fix for incomplete #ifdef checks related to the
definition of sqlite3PagerWalSystemErrno
(https://sqlite.org/src/info/7374c2342e66b352)

Other tools
---
perl 5.38.0.1 (Strawberry Perl)
python 3.9.1
Oracle JDK 21.0.1
junit 4.13.2

Signature
-

subversion-1.14.3.zip:
-BEGIN PGP SIGNATURE-

iQIzBAABCgAdFiEEiqLBDuqtRPlpcnrqtZzm1gEMiq0FAmWGGiwACgkQtZzm1gEM
iq1nTBAArXjdcjZwEkAJ+naXAEbpE9jdsFCA6VpRtjcwsWS15hyXk+PpmNFeARs6
+CUTSZA4JiUp68tMYNOuto9lpK6tMpr+XMKldz/k+mUWUOzRG6ONTriEkB1iH3/x
jocYw74F1OsjeHsUyFSMhridXRDOIDQw8B/Zmh4lMjTar3jCrTkG2RjofwiRPj4f
MAFlyLTLSsdZvhflUkuRWMdg3yBEg+4qukzmnEijZpnXLhGEp6k7rD7jiiIJHFtr
Zq6nG2oOkf+eXZcszy0EIw8297FC4yRJdaDEkWzXlV9hyqEwfBpGeZM3dkv6T13f
RxDQ+ctNN9EgNjEI1RXwBhFLSvodWVT4ulmwh6bNh63NTSI/6xBx0mpBn2Kl21sL
dSlh+qXMBa9Kuguxmipymrmh83N44NjOJmI1tq3iPdNCy+BZxO3GhdTE/oHH6X8l
ppvA5SW5fZAMKFHafgXcTkqqn2xyjxZJ2aiZcfiA9nOjxtfgEYwFnAbYZ2lfbcls
lh9mI3XMa6OSV1hEJSJ6jlvjftVv9XhwdUEPs6JM7gGiAuZ7YT/HFc5QZXJUJ6EW
V3CHGYulctHKwWj/FDzmE9W2OmrCezSPLbMizKARHo5OcosF9VeUq2V6s4W7+5MR
zS6U4LDxFPdE6cMYQUjuR5mnhL3XKoWw5bwAve93710ld3/SoLo=
=0Ogy
-END PGP SIGNATURE-

-- 
Johan


Re: Subversion 1.14.3 up for testing/signing

2023-12-22 Thread Johan Corveleyn
On Fri, Dec 22, 2023 at 7:46 AM Daniel Sahlberg
 wrote:
> Den fre 22 dec. 2023 kl 02:49 skrev Johan Corveleyn :
...
>> Then, regardless of the above error, when I start building with
>> msbuild, I run into following error:
>> [[[
>> C:\research\svn\dev\deps64\src\sqlite-amalgamation-3.44.2.0\sqlite3.c(34597,42):
>> error C4013: 'sqlite3PagerWalSystemErrno' undefined; assuming extern
>> returning
>>  int 
>> [C:\research\svn\dev\subversion-1.14.3\build\win32\vcnet-vcproj\libsvn_subr.vcxproj]
>> ]]]
>
>
> The declaration is guarded by:
> #if defined(SQLITE_USE_SEH) && !defined(SQLITE_OMIT_WAL)
>
> While the actual use seems to be guarded by
> #ifdef SQLITE_USE_SEH
>
> In our code we have
> $ grep -r SQLITE_OMIT_WAL
> subversion/libsvn_subr/sqlite3wrapper.c:#  define SQLITE_OMIT_WAL 1
>
> I assume we trigger some bug in SQLite but I don't have time to dig into the 
> SQLite source code. It's not the first time we've hit errors with OMIT_WAL

Googling around I saw that you already reported this issue to sqlite
[1], and it has since been fixed in their repository [2]. Thanks for
that!

After manually applying that patch here the problem is gone, so I was
able to continue with sqlite 3.44.2.

I went on to fix a couple of linking issues locally (possibly I'm
building some dependencies in other ways than the SVN buildscripts on
Windows expect them -- or our buildscripts simply are not adapted to
recent changes in apr, apr-util and openssl, not sure -- the path of
least resistance was copying some *.dll and *.lib files to where our
scripts look for them).

Now everything has been built successfully, and I'm running tests ...
I hope to finish up and commit my signature later tonight or tomorrow
morning. I'll send a transcript of my build steps in a new thread
later.

[1] https://sqlite.org/forum/info/9819032aac
[2] https://sqlite.org/src/info/7374c2342e66b352

-- 
Johan


Re: Subversion 1.14.3 up for testing/signing

2023-12-22 Thread Johan Corveleyn
On Fri, Dec 22, 2023 at 3:07 AM Yasuhito FUTATSUKI  wrote:
>
> Hi,
>
> On 2023/12/22 10:49, Johan Corveleyn wrote:
...
> > Finally, did some tweaks to get gen_win_dependencies.py to run, but
> > then ran into following error:
> > [[[
> > python gen-make.py --release
> > --with-swig=C:\research\swigwin-4.1.1 --with-py3c=C:\research\py3c-1.4
> > --with-junit=C:\research\svn\dev\deps64\src\junit-4.13.2\junit.jar
> > --with-jdk="C:\Program Files\Java\jdk-21" --with-httpd=C:\Apache2.4.58
> > --with-serf=C:\research\svn\dev\deps64\src\serf-1.3.10
> > --with-openssl=C:\research\svn\dev\deps64\src\openssl-3.0.12
> > --with-sqlite=C:\research\svn\dev\deps64\src\sqlite-amalgamation-3.44.2.0
> > --with-zlib=C:\research\svn\dev\deps64\src\zlib-1.3
> > --vsnet-version=2019 -t vcproj 2>&1 | tee log.gen-make
> > C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:233:
> > SyntaxWarning: invalid escape sequence '\.'
> >   if val == '2002' or re.match('^7(\.\d+)?$', val):
> > C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:238:
> > SyntaxWarning: invalid escape sequence '\.'
> >   elif val == '2003' or re.match('^8(\.\d+)?$', val):
> > C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:243:
> > SyntaxWarning: invalid escape sequence '\.'
> >   elif val == '2005' or re.match('^9(\.\d+)?$', val):
> > C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:248:
> > SyntaxWarning: invalid escape sequence '\.'
> >   elif val == '2008' or re.match('^10(\.\d+)?$', val):
> > C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:283:
> > SyntaxWarning: invalid escape sequence '\d'
> >   elif re.match('^20\d+$', val):
> > C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:290:
> > SyntaxWarning: invalid escape sequence '\d'
> >   elif re.match('^1\d+$', val):
> > C:\research\svn\dev\subversion-1.14.3\build\transform_sql.py:53:
> > SyntaxWarning: invalid escape sequence '\('
> >   re_statement = re.compile('-- *STMT_([A-Z_0-9]+)( +\(([^\)]*)\))?')
> > Generating for Visual Studio 2019
> > ]]]
> >
> > That is using Python 3.12.1.
> >
> > When downgrading to Python 3.9 those errors are gone. Just wanted to
> > let you guys know ...
>
> Should we backport r1912632?

Ah, thanks. I missed that. Thanks for pointing it out.

Agreed that we should probably backport this to 1.14.x (but as Daniel
said: not a blocker for this release).

-- 
Johan


Re: Subversion 1.14.3 up for testing/signing

2023-12-21 Thread Johan Corveleyn
On Tue, Dec 19, 2023 at 1:30 PM Johan Corveleyn  wrote:
>
> On Mon, Dec 18, 2023 at 11:13 PM Nathan Hartman
>  wrote:
> >
> > On Sat, Dec 9, 2023 at 10:50 AM Nathan Hartman  
> > wrote:
> > >
> > > The 1.14.3 release artifacts are now available for testing/signing.
> > > Please get the tarballs from
> > >   https://dist.apache.org/repos/dist/dev/subversion
> > > and add your signatures there.
> > >
> > > Thanks!
> >
> >
> > Hi all,
> >
> > Just to help plan ahead a little bit: Who else is planning to
> > test/sign the 1.14.3 tarballs, and approximately how much time do you
> > need?
> >
> > (If it's possible to be done with testing/signing toward the
> > middle/end of this week, I will have a good opportunity to finish up
> > the release work, but please let me know...)
>
> I still plan to go for it (on Windows 10). Not sure if middle of this
> week (i.e. Wednesday night or so) is still realistic, but I'll try. No
> guarantees though, so if you have enough sigs feel free to go ahead.
>
> I started with some initial steps last weekend, but got stranded along
> the way. Basically I realized that OpenSSL 1.1.1 is totally EOL, and I
> should really go for OpenSSL 3 now, which forces me to rebuild serf
> and httpd (fortunately, others have already done work on serf 1.3.10
> to make it work with OpenSSL 3, so I hope that will work out smoothly
> -- as for httpd, that's always a big adventure on Windows). Oh and I'd
> like the latest version of APR 1.7 as well, which includes a relevant
> fix for Windows junctions / subst / something. So far, I've just
> collected everything I need, but have not run a single buildscript
> yet. To be continued ...

Still working on it.

Succesfully built zlib-1.3, openssl-3.0.12, apr-1.7.4, apr-util-1.6.3,
httpd-2.4.58 (and pcre-8.45 and expat-2.2.9) and serf 1.3.10.

Finally, did some tweaks to get gen_win_dependencies.py to run, but
then ran into following error:
[[[
python gen-make.py --release
--with-swig=C:\research\swigwin-4.1.1 --with-py3c=C:\research\py3c-1.4
--with-junit=C:\research\svn\dev\deps64\src\junit-4.13.2\junit.jar
--with-jdk="C:\Program Files\Java\jdk-21" --with-httpd=C:\Apache2.4.58
--with-serf=C:\research\svn\dev\deps64\src\serf-1.3.10
--with-openssl=C:\research\svn\dev\deps64\src\openssl-3.0.12
--with-sqlite=C:\research\svn\dev\deps64\src\sqlite-amalgamation-3.44.2.0
--with-zlib=C:\research\svn\dev\deps64\src\zlib-1.3
--vsnet-version=2019 -t vcproj 2>&1 | tee log.gen-make
C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:233:
SyntaxWarning: invalid escape sequence '\.'
  if val == '2002' or re.match('^7(\.\d+)?$', val):
C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:238:
SyntaxWarning: invalid escape sequence '\.'
  elif val == '2003' or re.match('^8(\.\d+)?$', val):
C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:243:
SyntaxWarning: invalid escape sequence '\.'
  elif val == '2005' or re.match('^9(\.\d+)?$', val):
C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:248:
SyntaxWarning: invalid escape sequence '\.'
  elif val == '2008' or re.match('^10(\.\d+)?$', val):
C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:283:
SyntaxWarning: invalid escape sequence '\d'
  elif re.match('^20\d+$', val):
C:\research\svn\dev\subversion-1.14.3\build\generator\gen_win_dependencies.py:290:
SyntaxWarning: invalid escape sequence '\d'
  elif re.match('^1\d+$', val):
C:\research\svn\dev\subversion-1.14.3\build\transform_sql.py:53:
SyntaxWarning: invalid escape sequence '\('
  re_statement = re.compile('-- *STMT_([A-Z_0-9]+)( +\(([^\)]*)\))?')
Generating for Visual Studio 2019
]]]

That is using Python 3.12.1.

When downgrading to Python 3.9 those errors are gone. Just wanted to
let you guys know ...

Then, regardless of the above error, when I start building with
msbuild, I run into following error:
[[[
C:\research\svn\dev\deps64\src\sqlite-amalgamation-3.44.2.0\sqlite3.c(34597,42):
error C4013: 'sqlite3PagerWalSystemErrno' undefined; assuming extern
returning
 int 
[C:\research\svn\dev\subversion-1.14.3\build\win32\vcnet-vcproj\libsvn_subr.vcxproj]
]]]

I ran out of time for tonight, will continue tomorrow. If anybody
knows what I should do about the above error, let me know :-).
Otherwise I'll try downgrading sqlite to 3.41.2 (the version Evgeny
Kotkov used a couple of days ago).

-- 
Johan


Re: Subversion 1.14.3 up for testing/signing

2023-12-19 Thread Johan Corveleyn
On Mon, Dec 18, 2023 at 11:13 PM Nathan Hartman
 wrote:
>
> On Sat, Dec 9, 2023 at 10:50 AM Nathan Hartman  
> wrote:
> >
> > The 1.14.3 release artifacts are now available for testing/signing.
> > Please get the tarballs from
> >   https://dist.apache.org/repos/dist/dev/subversion
> > and add your signatures there.
> >
> > Thanks!
>
>
> Hi all,
>
> Just to help plan ahead a little bit: Who else is planning to
> test/sign the 1.14.3 tarballs, and approximately how much time do you
> need?
>
> (If it's possible to be done with testing/signing toward the
> middle/end of this week, I will have a good opportunity to finish up
> the release work, but please let me know...)

I still plan to go for it (on Windows 10). Not sure if middle of this
week (i.e. Wednesday night or so) is still realistic, but I'll try. No
guarantees though, so if you have enough sigs feel free to go ahead.

I started with some initial steps last weekend, but got stranded along
the way. Basically I realized that OpenSSL 1.1.1 is totally EOL, and I
should really go for OpenSSL 3 now, which forces me to rebuild serf
and httpd (fortunately, others have already done work on serf 1.3.10
to make it work with OpenSSL 3, so I hope that will work out smoothly
-- as for httpd, that's always a big adventure on Windows). Oh and I'd
like the latest version of APR 1.7 as well, which includes a relevant
fix for Windows junctions / subst / something. So far, I've just
collected everything I need, but have not run a single buildscript
yet. To be continued ...

-- 
Johan


Re: 1.14.3 release planning

2023-12-07 Thread Johan Corveleyn
Sounds like a plan :).

I'm currently swamped with $dayjob myself, until half of next week at
least. After which I'll try to join the effort (I'll first need to
blow the dust off my old svn-dev environment, so don't expect me to be
quick, but I'll try).

-- 
Johan

On Tue, Dec 5, 2023 at 11:25 AM Daniel Sahlberg
 wrote:
>
> Hi
>
> Sounds great! Good work!
>
> I’m working on preparations for signing on my end, will try to get everything 
> going on Windows and Ubuntu 23.10 this time.
>
> Kind regards
> Daniel
> Daniel
>
> mån 4 dec. 2023 kl. 18:34 skrev Nathan Hartman :
>>
>> Hi all,
>>
>> Just a heads up, I plan to roll tarballs this week.
>>
>> Hopefully all goes well and we'll be able to make the release soon...
>>
>> Cheers,
>> Nathan


Re: Is there a write opposite to "svn cat"?

2023-11-27 Thread Johan Corveleyn
>>> The documentation say:
>>> [[[
>>>   put SRC-FILE URL   : add or modify file URL with contents copied from
>>>SRC-FILE (use "-" to read from standard input)
>>> ]]]

Just chiming in here from the sideline, without ability to test right
now, but: has anyone tried to use a full "-" (double quote, dash,
double quote) as argument? As in:

svnmucc put "-" URL

Maybe that's what that help text is actually trying to say.

-- 
Johan


Re: New release

2023-11-10 Thread Johan Corveleyn
On Thu, Nov 9, 2023 at 6:08 PM Nathan Hartman  wrote:
>
> On Fri, Nov 3, 2023 at 12:00 AM Nathan Hartman  
> wrote:
> > Previously I mentioned I plan to RM for the upcoming 1.14.3 release.
> > This being my first time, I need to solve some issues first.
> >
> > One of these, which has been a stumbling block for me since the
> > beginning, is getting the JavaHL bindings to build and test
> > successfully.
> >
> > I have made progress on this, but not a complete breakthrough yet.
>
> First, thanks to Stefan, Daniel, and Mark for your input.
>
> I haven't solved my issue with the JavaHL tests yet. I have (mostly)
> written a detailed reply, where I respond to each question and
> suggestion. I'll send it soon, but first, while I was writing it, I
> thought of several specific additional things I want to check. So,
> rather than send a reply full of loose ends, I'll investigate those
> items (probably tonight) and I'll respond then -- wish me luck, and
> hopefully I'll be able to report success!
>
> Nathan

Hi Nathan,

Sorry I haven't helped so far ... I should be able to say something
useful here, since I'm a java dev in my dayjob. But I have been
drowning a bit in that same dayjob lately, so I can barely find the
time to scan these mails, and then forget about them because my
attention is needed elsewhere.

Anyway, I'll try to find some more time to take a closer look at the
errors you get.

Just as a first shot: if there is no RunTests.class in the location
where it should be (one of the directories in the classpath), then it
probably has not been compiled (or it has not been put in the right
location). My first guess would also be, like Daniel mentioned, that
you'll need the --with-junit option (referring to a junit-X.Y.jar
somewhere on your system) and then the build scripts should compile
the test classes.

But I guess you already tried that, after Daniel's reply, and you're
still running into problems. I'll take a closer look when you send
your detailed mail then.

-- 
Johan


Re: New release

2023-10-13 Thread Johan Corveleyn
On Fri, Oct 13, 2023 at 5:35 PM Stefan Sperling  wrote:
>
> On Fri, Oct 13, 2023 at 08:43:59AM +0200, Daniel Sahlberg wrote:
> > Hi,
> >
> > There are quite a number of improvements waiting to be released. Can we
> > muster the energy to do a new release?
> >
> > In trunk there are a lot of changes that warrant a 1.15, but before doing
> > that I think we should also go back to the discussion of changing the /
> > adding a checksum algorithm in the WC. That deserves a separate thread and
> > I'm half way through summarising the previous discussions so I'd like to
> > hold back 1.15 for the moment.
> >
> > Still in 1.14 there have been a number of bugfixes that might be good to
> > get released. Maybe doing 1.14.3 first could set us up to do 1.15 a little
> > later?
>
> The first problem to solve before the ball starts rolling would be
> finding a release manager. I don't have enough spare time to play RM
> this time around but I would support the RM as far as my time allows for.
>
> Doing 1.14.3 first sounds like a good plan. This would help potential
> new releases managers to get bootstrapped into the process. A major
> release tends to involve a little bit more effort because some new problems
> may only show up on specific operating system platforms during -rc testing.

+1

-- 
Johan


Fwd: Public funding for contributions available

2023-06-09 Thread Johan Corveleyn
Maybe interesting for some people here on dev@subversion?

The switch from funded development to almost-all-volunteer work has
been hard for our little community, and I always thought some of the
originally-funded-devs might have wanted to continue some work here,
if only there would be a way to organize funding ... And if there are
already other avenues, maybe this just provides some additional
options.

-- 
Johan

-- Forwarded message -
From: Isabel Drost-Fromm 
Date: Thu, Jun 8, 2023 at 11:14 AM
Subject: Public funding for contributions available
To: 


Hi,

tl;dr: Want to contribute to Open Source (including projects here at the
ASF) and have that time publicly funded? Head over to:

https://sovereigntechfund.de/en/challenges/

>From the title page:

"The Sovereign Tech Fund is looking for developers who use open source and
want to contribute back to it. [...] In three challenges, participants can
work on contributing back to open source for up to eight months with a
budget of up to €300,000 per round.

Many more people use open source software every day than contribute to it.
It’s time to give back and invest in this ecosystem, to increase its
security and sustainability, and to create a digital world that we
collectively shape.

The Sovereign Tech Fund invests in open digital infrastructure. For us,
this means fundamental technologies that enable the creation of other
software. These components – like libraries and open standards – are openly
accessible, trustworthy and can be used freely."


>From the description of the projects they want to fund I see a lot of
overlap with our projects here at the ASF. Feel free to share this
information publicly and widely!


Warm regards,

Isabel


Re: Plaintext cache release notes (was: svn commit: r1909352 - /subversion/trunk/CHANGES)

2023-04-27 Thread Johan Corveleyn
On Tue, Apr 25, 2023 at 5:00 AM Nathan Hartman  wrote:
>
> On Mon, Apr 24, 2023 at 12:38 PM Daniel Sahlberg
>  wrote:
> >
> > Den mån 24 apr. 2023 kl 18:11 skrev Nathan Hartman 
> > :
> (snip)
> >> Sometime in the next few days, I'll draft some text for the 1.15.x
> >> release notes about this change (unless you or someone else wants to
> >> do it or has already started; in that case, just let me know)... Also
> >> the FAQ entry might need an update; I'll look at that at the same
> >> time.
> >
> >
> > Great! Thanks for taking the time to do this!
>
> Here's a first draft, obviously without HTML markup...
>
> Whatever this ultimately morphs into will go in the 1.15 release notes.
>
> Normally, I would not recommend to write a dissertation in the release
> notes, but I think there is a lot of room for confusion and
> misunderstandings, so perhaps it is better to be a little verbose here
> and present the brief history of how we got here and why we're making
> this change.
>
> Feedback welcome!
>
> [[[
>
> # Plaintext credential cache is supported by default on Unix-like systems
>
> Subversion supports several credential caches to prevent re-typing
> usernames and passwords repeatedly. Which credential cache(s) are used
> depends on the operating system, compile-time options, and the user's
> runtime configuration. On Windows and macOS, Subversion uses OS
> facilities to save passwords in encrypted form. Unix-like operating
> systems do not have a single standard facility to do this; on these
> systems, Subversion supports up to four credential caches: GNOME
> Keyring, KWallet, GPG Agent, and (as a fallback) the Plaintext cache.
>
> The rest of this section discusses the Plaintext cache and is
> applicable only to Subversion clients running on Unix-like operating
> systems.
>
> In Subversion 1.12 through 1.14, write access to the Plaintext cache
> was disabled by default at _compile-time_. Binaries compiled in the
> default configuration could not store new plaintext credentials, but
> would continue to use any that were already stored. Users and binary
> packagers could explicitly enable write access to the Plaintext cache
> by compiling Subversion with the --enable-plaintext-password-storage
> option to configure. (See r1845377.)
>
> Unfortunately, this has caused a variety of problems for users,
> especially when using the svn client in unattended processes such as
> CI systems, or on remote machines through ssh (a GUI password prompt
> would display on the remote machine, inaccessible to the ssh user).
> Users reported that they had to employ workarounds that caused
> passwords to be stored in plaintext anyway, or refused to upgrade
> their Subversion installations to these releases. Some binary
> packagers built with --enable-plaintext-password-storage while others
> didn't, creating inconsistent experiences within the same release
> lines.
>
> Based on the feedback received, Subversion 1.15 inverts the default.
> (See r1909351.) Binaries compiled in the default configuration can
> once again store new plaintext credentials (after warning and asking
> the user). Sites that wish to eliminate this possibility can do one or
> both of the following:
>
> * Compile Subversion with the --disable-plaintext-password-storage
> option to configure or install a binary package that was compiled this
> way. Be aware that users can circumvent this by compiling or
> installing their own Subversion binaries and/or by creating a
> plaintext cache manually.
>
> * Allow encrypted stores like GNOME Keyring and KWallet, but not the
> Plaintext cache, by setting store-plaintext-passwords = no in
> Subversion's run-time config settings. See the per user files at
> ~/.subversion/config and ~/.subversion/servers, and the systemwide
> files at /etc/subversion/config and /etc/subversion/servers.
>
> For more on plaintext credentials, see the FAQ entry:
> https://subversion.apache.org/faq.html#plaintext-passwords
>
> ]]]

Great. Well written, looks good to me.

-- 
Johan


Re: svn commit: r1909352 - /subversion/trunk/CHANGES

2023-04-22 Thread Johan Corveleyn
On Sat, Apr 22, 2023 at 6:25 PM  wrote:
>
> Author: dsahlberg
> Date: Sat Apr 22 16:25:30 2023
> New Revision: 1909352
>
> URL: http://svn.apache.org/viewvc?rev=1909352=rev
> Log:
> * CHANGES: Document r1909351
...
> +  - Other tool improvements and bugfixes:
> +* Storing passwords in plain text on disk is again enabled by default 
> (r1909351)

I would suggest rephrasing this a bit, to make it clear that we simply
re-enabled the *possibility* of storing passwords in plain text (on
Unix, if the runtime configuration allows it and no better password
stores are available). Obviously that's a bit long, but I can't come
up with a good concrete suggestion right now, sorry :-). But as it
reads there it could be interpreted as "wow? what?".

-- 
Johan


Re: [VOTE] Reverting r1845377 (Was: [PROPOSAL] Allow plaintext passwords again.)

2023-04-21 Thread Johan Corveleyn
On Sun, Apr 16, 2023 at 11:19 PM Daniel Sahlberg
 wrote:
>
> The dicussion died again, but this time I intend make sure we complete it 
> once and for all. I've marked the subject as VOTE to hopefully get some 
> attention, although I believe votes have already been cast.

Thanks for picking it up once again :-). Let's hope we can land this now ...

> In my mind, it seems we have consensus to revert r1845377 (+1 from Nathan 
> Hartman, Evgeny Kotkov, Johan Corveleyn, myself, I'm also considering Karl 
> Fogel to have voted for this by making the initial proposition and 
> volunteering to do it. No objections).

Indeed, +1 from me.

> Then we have a two other suggestions:
>
> * Changing the default value of store-plaintext-passwords
> Option 1 - set the default value of store-plaintext-passwords to no. For a 
> non-edited servers config file, this will put the behaviour of 1.15 in line 
> with 1.12-1.14.
> Option 2 - keep store-plaintext-passwords = ask. For a non-edited servers 
> config file, the behaviour of 1.15 will be in line with pre-1.12.
>
> I have previously expressed support (but no formal vote, and I will not stand 
> in the way of consensus) for option 1, since I was under the impression that 
> it was a longterm goal go disable the plaintext password store (I have 
> previously commented on how quickly r1845377 was discussed and implemented). 
> Nathan has argued that it might give a bad user experience if credentials are 
> not stored even though plaintext storage is enabled in the build options. We 
> can improve on this by updating the svn --version output to explicitly say if 
> plaintext cache is build but runtime disabled.
>
> If I'm counting correctly, Nathan, Evgeny and Johan has expressed +1 for 
> option 2.
>
> Considering this, I conclude we have consensus for option 2.
>
>
> * Changing handling of already stored plaintext passwords
> This was discussed in 2022 and there were some suggestions that Subversion 
> should not even use plaintext passwords even if they were found in the 
> plaintext password store (initially suggested by Mark Phippard as a way to 
> soften the impact of reverting r1845377). I'm proposing we choose amoung one 
> of the following three options:
>
> Option 1 - do nothing. Keep using the stored passwords.
> Option 2 - add a new runtime config option dont-use-plaintext-passwords 
> [default no] global overrides local.
> Option 3 - new compile time option to disable reading/using plaintext 
> passwords.

Why a new compile-time option for disabling reading? Why not keep it
simple, and disable the reading of plaintext passwords if the
compile-time option that will be re-introduced by reverting r1845377
is supplied (--disable-plaintext-password-storage)? I think that is
what Mark was suggesting, and I still like it because it's simple and
doesn't add more knobs than necessary.

So maybe:
Option 4 - disable reading/using plaintext passwords if compile-time
/storing/ of plaintext-passwords is configured
(--disable-plaintext-password-storage).

>
> Options 2 and 3 should probably imply disabling storing plaintext passwords 
> as well. I think they should also warn if the code finds a stored password 
> and suggest the user to delete it using svn auth --remove. (It was hinted 
> previously that we would disable the code that searches for the files storing 
> the password, however the same files also store the username and we read them 
> as an apr_hash_t so we don't really have the option to "not read the 
> password").
>
> With option 2 or 3 we let a security consious organisation configure their 
> system to their liking. I would love to have them, but I can't avoid the 
> feeling that it is security theater: As far as I can tell it is not possible 
> to avoid that a user can upload their own version of the svn binary and then 
> all bets are off anyway. (On Windows and MacOS it is possible to only allow 
> execution of signed binaries, and they don't even store the passwords in 
> plaintext anyway).
>
> If we go with either 2 or 3, then I'm perfering option 2 since it will allow 
> the administrators to set this without compiling their own version (which 
> seems to be a major obstacle, considering the reaction to r1845377). I 
> believe Karl Fogel and Mark was also leaning towards doing something during 
> the discussion in 2022.
>
> Johan seems to believe option 1 is fine ("these additional \"mitigations\" 
> are not absolutely required").
>
> In my mind, it is perfectly acceptable to vote +1 on both option 1 AND one of 
> option 2/3. I would interpret that as "do nothing in the short term, but do X 
> in the long term".

Agreed. So option 1 follows automatically from reverting r1845377; and
option 2, 3

Re: [PROPOSAL] Allow plaintext passwords again.

2023-03-30 Thread Johan Corveleyn
On Thu, Mar 30, 2023 at 12:15 AM Nathan Hartman
 wrote:
>
> On Wed, Mar 29, 2023 at 6:02 PM Evgeny Kotkov
>  wrote:
> >
> > Nathan Hartman  writes:
> >
> > > I think a good middle ground is:
> > >
> > > * Build with --enable-plaintext-password-storage by default; users who
> > >   want to harden their system can do so, but will need to build their
> > >   own client.
> >
> > +1.

+1

> > > * Set the default run-time config to store-plaintext-passwords = no
> > >   (if it isn't already; haven't checked) and instruct users on how to
> > >   change it. This makes the decision to store in plaintext an explicit
> > >   one that the user can opt into. (I appreciate that this could be
> > >   changed without the user's knowledge; perhaps the systemwide config
> > >   should always take precedence over the user-controlled one for this
> > >   setting?)
> >
> > So, apparently, the current default is "ask".
> >
> > I haven't checked all the details, but I think that defaulting to "ask"
> > already makes the user decision explicit and allows it to happen naturally,
> > without requiring any additional instructions or knowledge.
> >
> > If we change the default to "no", this part of the experience could be 
> > worse,
> > because for the end users it might look like the credentials aren't being
> > stored for unknown reasons / a bug in the software.
>
> Ah, this makes sense. In that case, I'm +1 to leave it as "ask" (no change).

+1

Basically this would correspond to kfogel's proposal earlier in this
thread [1] (and the one most participants agreed with):

"I think it's just a matter of reverting r1845377, right?  (And
updating CHANGES, etc.)"

For completeness, I want to quickly summarize two additional
suggestions made by Mark Phippard [2][3]:

- If plaintext-pwd-caching support is compiled out (by explicitly
giving the compile-time flag for this), also stop reading already
cached ones. This would render Daniel's python script useless in these
environments. It might satisfy some security sensitive people who
would regard the script as a way to "circumvent" the
plaintext-disablement. It would make the "plaintext-disabling" more of
a complete feature. Additionally, it was suggested that svn could warn
or erase such legacy plaintext-cached passwords (instead of just
ignoring them), as yet another mitigation improvement.

- Apply some obfuscation or encryption with a key hidden in the code
(or even supplied by a compile time option) to the plaintext
passwords. This helps against non-malicious exposure, and makes it a
tad harder for simple scripts to extract the password (which might
appease some part of our user base). This might break legitimate
scripts that explicitly (mis-)use the cached password for other
purposes, though we could regard such uses as hacks that we are
allowed to break.


IMHO these additional "mitigations" are not absolutely required (I
mainly would like to see r1845377 reverted), but if some people feel
strongly about them ... sure, why not (though in that case we'd need
someone to put in the work too).

[1] https://lists.apache.org/thread/shzxh04l493qnj8pdt8vl0x4gkjrkvcy
[2] https://lists.apache.org/thread/1tfny40nokqf6p6nll30p06t8or2c8hm
[3] https://lists.apache.org/thread/p2vn6foj8qz3lfvdl70bs62vg5krcgr7

-- 
Johan


Re: [PROPOSAL] Allow plaintext passwords again.

2023-03-28 Thread Johan Corveleyn
On Mon, Jan 24, 2022 at 5:02 PM Mark Phippard  wrote:
>
> On Mon, Jan 24, 2022 at 10:44 AM Daniel Shahaf  
> wrote:
>
> > > > >I return to my "two camps" argument. The people that do not want
> > > > >plaintext passwords to be cached ... do not want them being
> > > > >cached.
> > > >
> > > > I see what you mean.
> > > >
> > > > If svn is compiled to not cache passwords, but a legacy cached
> > > > password exists on disk for a given repository, should svn not
> > > > only not read it but actually warn the user that the cached
> > > > password exists?
> > >
> > > IMO, it is not necessary and if a compiler option disables the code
> > > then I would envision we do not even have any code running that is
> > > looking for those files to give the warning.
> >
> > Plaintext passwords are saved in the "password" element of the
> > serialized hash in ~/.subversion/auth/svn.simple/.
> >
> > Those are the same files that cache the username when the username is
> > cached without its password.
> >
> > We can't know whether a file contains a password or not until we have
> > opened, read, and parsed it.
> >
> > So, "not even have any code running that is looking for those files"
> > isn't an option (unless we're willing to throw away cached usernames
> > even if they were cached without a password)
> >
> > So, what should we do if we have parsed one of those files and the
> > resulting apr_hash_t contains a "password" key?
> >
> > Ignore it?  Erase it (memset() it to zero)?  Warn about it?  Use it?
>
> Good points and excellent questions. If we would already be
> discovering this file then I suppose we could do something. I would be
> fine with just ignoring the cached password but some kind of other
> option would also be good.
>
>
> > And for that matter, should there be a configure option that disables
> > the --password command-line option?  It, too, can be used insecurely
> > (see above about filesystem-level encryption).
>
> Also a good question. A configure option to disable this might be
> appreciated by some users.

Is this issue on someone's radar? It seems the discussion died out
here, and I can't find anything further. Maybe worth taking another
look now that we're getting closer to 1.15?

We seemed to get stuck "finding consensus on desired behaviour".
Various proposals were made, but none got over the "bar of
objections", and we ran out of steam. Which leaves us with the status
quo, however imperfect it is :-(.

(This recently came up in my company, when we were looking at
upgrading the svn client on a unix build machine -- oops can't upgrade
past SVN 1.12 or so, because of the compiled-out plain-text pwd
caching support)

For some background (warning long read):

https://lists.apache.org/thread/b6g2hx2m3s117wcmno08opl874ons3q8
https://lists.apache.org/thread/shzxh04l493qnj8pdt8vl0x4gkjrkvcy

-- 
Johan


Re: svn st shows missing for root folder

2023-02-08 Thread Johan Corveleyn
On Wed, Apr 15, 2020 at 10:40 AM Johan Corveleyn  wrote:
>
> On Tue, Nov 19, 2019 at 9:44 PM Evgeny Kotkov
>  wrote:
> >
> > Stefan Kueng  writes:
> >
> > > Using svn 1.13.0 on Windows:
> > >
> > > SUBST G:\ D:\Development\TestWC
> > > G:
> > > svn st .
> > >
> > > !   .
> > > ?   Foo
> > > ?   src\nonversioned
> > >
> > > As you can see, the root folder doesn't show the correct status.
> > > This showed the correct status with 1.12.x.
> >
> > On my side, this issue *does not* reproduce with Subversion 1.13.0 built
> > against APR 1.6.x, but reproduces with the TortoiseSVN 1.13.1 command-line
> > binaries.
> >
> > I see that TortoiseSVN 1.13 has recently switched to APR 1.7.0, so that may
> > be causing the issue:
> >
> >   https://osdn.net/projects/tortoisesvn/scm/svn/commits/28674
> >
> > Among the changes in APR 1.7.0, this one could be responsible for the faulty
> > behavior, since it changes how apr_stat() works for reparse points:
> >
> >   https://svn.apache.org/r1855950
> >
> >
> > Regards,
> > Evgeny Kotkov
>
> Somehow, this fell through the cracks, and was not reported to APR as
> it should have been. So it came back to this list later, in another
> report (unfortunately still not forwarded to APR):
>
> 
> https://lists.apache.org/thread.html/4797303a065e9c1091bbf445acaa3121ccb27ac2d661eb0debd1cf40%40%3Cdev.subversion.apache.org%3E
>
> Anyway, I've forwarded this thread to dev@apr last week, where it is
> currently being discussed:
>
> 
> https://lists.apache.org/thread.html/r28e478074055436b27b13f7487203448079aea5adfe4207007ad7ea9%40%3Cdev.apr.apache.org%3E
>
> We know now that the problem isn't specific to the use of "subst", but
> actually to all "working copies on drive roots", so also when you
> perform a checkout to C:\ for example.
> Probably also with "shared folders"  over the network, when the
> wc-root is the share-root, as was just reported to TSVN here:
>
> 
> https://groups.google.com/forum/?utm_medium=email_source=footer#!msg/tortoisesvn/jgHE5_sHfFI/xOpP1Ce3AAAJ
>

Just closing the loop on this issue:
It has taken some time, but this issue (in APR) has been fixed now and
backported to the 1.7.x branch in r1904030. It was released last week
as part of APR 1.7.1.

(I've also left a message on the tortoisesvn-users list about this, in
reply to an old thread about this problem)

-- 
Johan


Re: Getting to first release of pristines-on-demand feature (#525).

2022-11-29 Thread Johan Corveleyn
My thanks also to the courageous people having developed this, and the
gentle souls keeping the ball rolling :-).

About the name:

On Thu, Nov 24, 2022 at 3:57 PM Nathan Hartman  wrote:
...
> Previously we got stuck trying to choose the user-facing name of this
> feature and its command line switches.
>
> Currently the CLI switch is --store-pristine={yes|no}.
>
> I'm okay with this, but for completeness I'll mention that earlier in
> the year there was a little bit of push back because pristines, up
> until now, have been an internal implementation detail that users
> needn't concern themselves with. (Except that they double the storage
> space...)
>
> I've been trying to think of something better for months now, and
> here's what I've come up with:
>
> --optimize=storage
> --optimize=network

FWIW, my vote still goes to --store-pristines={yes|no}

I prefer such an explicit option here, rather than vague ones that
could cover many different things. Also, --optimize=X can easily be
interpreted inversely as intended (for instance: when I have an
optimal network, do I use --optimize=network?)

Apart from {yes|no} the feature might grow other option values in the
future ('size-based' or 'text-only', or maybe simply 'auto' if we come
up with a good general strategy that works for 99% of the cases, the
details of which we don't want to burden our users with). We could
even, in some distant future, allow user-defined names that are
specified in ~/.subversion/config by the user (using some syntax where
the user can set configurable size limits or mime-types or whatever).


One other suggestion: not a blocker of course, but a
runtime-config-area default would be nice :-). Users might want to
choose the same option all the time, without having to remember to add
the option to their checkout command.

Something like, in ~/.suversion/config

store-pristines-default={yes|no}

Just my 2 cents of course ...
-- 
Johan


Re: Subversion 1.10.0 end-of-life

2022-04-29 Thread Johan Corveleyn
On Thu, Apr 28, 2022 at 9:26 PM Nathan Hartman  wrote:
> On Thu, Apr 28, 2022 at 3:12 PM Stefan Sperling  wrote:
>> On Thu, Apr 28, 2022 at 01:29:43PM +, Daniel Shahaf wrote:
>> > Stefan Sperling wrote on Thu, 28 Apr 2022 09:55 +00:00:
>> > > I think it would be better to have such details spelled out in English
>> > > in a manner that is easy to understand for anyone, with illustrating
>> > > examples, instead of (or in addition to) mathematical notation that
>> > > requires abstract thinking to figure out.
>> >
>> > I'm unable to interpret this charitably.
>>
>> Fine, I'll best just shut up then.
>
> Please, let's not have any of that!!

Indeed!

Stefan, I always appreciate your input / feedback / opinion / view on
things, just as much as I appreciate Daniel's. So please keep it
coming, both of you :-).

I did not sense any sort of negative undertone or implicit criticism.
Just useful feedback. At least that's my interpretation.

Anyhow, moving on ... I agree with the direction this is heading, and
+1 to Daniel's concrete patch that was posted a bit later (thanks for
spelling things out).

(But please, please, please ... keep input, feedback, ideas, chiming
in, reservations, cheering, ... coming. Always.)

-- 
Johan


Re: Pristines-on-demand=enabled == format 32?

2022-04-19 Thread Johan Corveleyn
On Thu, Apr 7, 2022 at 6:07 PM Julian Foad  wrote:
>
> Johan Corveleyn wrote:
> > Ah, yes, I think that makes #4889 a blocker.
>
> Well, I'm having a hard time deciding what exactly we need and why.
>
> I previously said "it's pretty clear it needs to be uncoupled" but
> actually just now I've dived into it for a couple of hours, coding and
> thinking, and it's not at all clear what this means.
>
> Is it mainly about UI level naming in "checkout" and "upgrade" -- in
> other words, that we would prefer the user to say
>
>   "svn checkout --enable-POD525"
>
> instead of (or in addition to) "--compatible-version=1.15"? And we would
> not need to support the combination of "=1.15" without "--enable-POD525"
> (in other words the feature is still coupled to the format in the
> implementation), but require it to be specified explicitly and error out
> if it isn't, in order to set a precedent that that's the option you'll
> also be needing to use in future versions?
>
> ('POD525' used here as a place-holder for the feature name that is to be 
> decided.)
>
> If it's that kind of UI-level naming issue, then we probably want to
> also put corresponding entry in "svn info" saying "POD525 enabled?
> yes/no". And anywhere else the idea is exposed in the UI, if anywhere.
>
> And/or, is it that we want to put internal APIs in place that let the
> higher level code layers ask "is POD525 enabled?" and not have to change
> those callers when 1.16/new-wc-format-33 comes around? But I don't see a
> strong need for that. We are not making a strong case for any of this to
> be exposed in public APIs at this time at all and the internal API calls
> can surely be updated as and when needed.
>
> And/or, is it that we really need users to be able to create a format-32
> (v=1.15) WC that doesn't have POD525 enabled? I am pretty sure that is
> not the case.

Sorry for the late reply, but mainly this, yes. Users will not expect
the latest wc format to "force" them into POD525-enabledness. I think
it would be a mistake to hard-couple format-32 to POD525-enabled. And
uncoupling it only when format-33 comes around with another shiny
feature would be highly confusing IMHO.

Upgrading to the latest format is a natural thing to do. People might
just expect it to fix security bugs, or to give them the latest and
greatest features. People won't expect a simple
TortoiseSVN-right-click->upgrade to completely re-arrange their
working copy into POD525-enabled state (which is an optional feature
that won't benefit every possible working copy). If this is coupled I
am willing to bet that TortoiseSVN will have to introduce a warning
popup for the "upgrade" action telling them about POD525, what it will
do to their pristine-store (trying to explain what it even is to most
users), how it might cripple their experience if they are on
high-latency network, etc etc ...

It's different for WC-features that are not optional and that are the
"way forward" for everyone (like WC-NG was ... there was no option).
But when the new format introduces a choice of WC-layout (both of
which are valid and supported into the future), the format upgrade
itself should not make that "new choice" automatically (possibly
causing huge pristine-store reshuffling right then and there), but
keep things the old way for backwards compatibility, IMHO.

So yes, I think format-32 and POD525 should be decoupled in the API
and in the UI, and stored somewhere in the WC storage (in wc.db, as
Evgeny already suggested elsewhere I think).

-- 
Johan


Re: Pristines-on-demand: fix disabled tests (#4891)

2022-04-07 Thread Johan Corveleyn
Okay, with --wc-format-version=1.8, I now get these (X)FAILs and
XPASSes (fails_wc-format-version1.8.log in attachment):

[[[
XFAIL: diff-diff3-test 18: 3-way merge, double add
XFAIL: dirent_uri-test 47: test match with RFC 6125 s. 6.4.3 Rule 3
XFAIL: op-depth-test 42: mixed_rev_move
   [[needs different libsvn_wc entry point]]
XFAIL: op-depth-test 56: commit_moved_away_descendant
XFAIL: op-depth-test 68: move retract (issue 4336)
XFAIL: op-depth-test 69: move/delete file externals (issue 4293)
XFAIL: op-depth-test 75: move more than once, revert intermediate
XFAIL: op-depth-test 79: del4: delete AAA
XFAIL: op-depth-test 80: del4: add AAA
XFAIL: op-depth-test 81: del4: replace AAA
XFAIL: op-depth-test 83: del4: replace self AAA
XFAIL: op-depth-test 85: move4: delete AAA
XFAIL: op-depth-test 87: move4: replace AAA
XFAIL: op-depth-test 86: move4: add AAA
XFAIL: op-depth-test 89: move4: replace self AAA
XFAIL: op-depth-test 95: move within mixed move
XFAIL: basic_tests.py 9: basic corruption detection on update
   [[Relies on wc.text_base_path()]]
XFAIL: basic_tests.py 63: peg rev resolution on non-existent wc paths
XFAIL: blame_tests.py 15: blame -g handles changes from empty mergeinfo
XFAIL: changelist_tests.py 5: diff --changelist (wc-wc and repos-wc)
XFAIL: commit_tests.py 66: last changed of copied subdir
XFAIL: commit_tests.py 74: commit sees tree conflict on unversioned path
XFAIL: copy_tests.py 105: copy and move conflicts
XFAIL: depth_tests.py 49: deleted & moved items left untouched
XFAIL: depth_tests.py 50: unversioned files in excluded directory
XFAIL: diff_tests.py 77: diff repo to wc of a copy
XFAIL: diff_tests.py 90: diff unversioned files in git format
XFAIL: diff_tests.py 92: diff summary repo wc local copy unmodified
XFAIL: diff_tests.py 94: diff git format copy
XFAIL: export_tests.py 11: export working copy at base revision
XFAIL: externals_tests.py 25: update that modifies a file external
XFAIL: externals_tests.py 39: file external remap segfaults due to deleted props
XFAIL: externals_tests.py 44: move with file externals
XFAIL: externals_tests.py 49: file externals versioned obstruction
XFAIL: externals_tests.py 68: check file external recorded info
XFAIL: log_tests.py 46: log --use-merge-history --search
XFAIL: log_tests.py 47: log --use-merge-history --xml
XFAIL: merge_automatic_tests.py 16: cherry2_fwd
XFAIL: merge_automatic_tests.py 17: cherry3_fwd
XFAIL: merge_tests.py 49: avoid repeated merges for cyclic merging
XFAIL: merge_tests.py 64: merge target with non inheritable mergeinfo
XFAIL: merge_tests.py 114: don't inherit bogus mergeinfo
XFAIL: merge_tests.py 115: don't inherit bogus working mergeinfo
XFAIL: patch_tests.py 52: hunks that overlap
XFAIL: patch_tests.py 78: patching a specific merge
XFAIL: patch_tests.py 80: patch empty prop
XFAIL: patch_tests.py 81: patch working copy root
XFAIL: patch_tests.py 82: patch working copy root
XFAIL: pegrev_parse_tests.py 11: add file '.@tau' without pegrev escape
   [[The error message mentions '@tau' instead of '.@tau']]
XFAIL: pegrev_parse_tests.py 23: add file 'E/@tau' without pegrev escape
   [[The error message mentions 'E@tau' instead of 'E/@tau']]
XFAIL: pegrev_parse_tests.py 25: add file 'E/.@tau' without pegrev escape
   [[The error message mentions 'E@tau' instead of 'E/.@tau']]
XFAIL: pegrev_parse_tests.py 28: add file 'E/@' without pegrev escape
   [[The error message is E29 but should be E125001]]
XFAIL: pegrev_parse_tests.py 39: create directory '.@T' without pegrev escape
   [[The error message mentions '@T' instead of '.@T']]
XFAIL: pegrev_parse_tests.py 49: create directory 'E/@T' without pegrev escape
   [[The error message mentions 'E@T' instead of 'E/@T']]
XFAIL: pegrev_parse_tests.py 51: create directory 'E/.@T' without pegrev escape
   [[The error message mentions 'E@T' instead of 'E/.@T']]
XFAIL: pegrev_parse_tests.py 52: create directory 'E/@' without pegrev escape
   [[Reports error that E exists but should be E125001 for E/@]]
XFAIL: pegrev_parse_tests.py 63: remove '.@kappa' without pegrev escape
   [[The error message mentions '@kappa' instead of '.@kappa']]
XFAIL: pegrev_parse_tests.py 77: remove 'B/@beta' without pegrev escape
   [[The error message mentions 'B@beta' instead of 'B/@beta']]
XFAIL: pegrev_parse_tests.py 79: remove 'D/.@delta' without pegrev escape
   [[The error message mentions 'D@delta' instead of 'D/.@delta']]
XFAIL: pegrev_parse_tests.py 80: remove 'B/@' without pegrev escape
   [[Removes B instead of reporting E125001 for B/@]]
XFAIL: pegrev_parse_tests.py 81: remove missing 'E/@' without pegrev escape
   [[Removes E instead of reporting ENOENT or E125001 for E/@]]
XFAIL: pegrev_parse_tests.py 82: remove missing '@/@' without pegrev escape
   [[Removes @ instead of reporting ENOENT or E125001 for @/@]]
XFAIL: pegrev_parse_tests.py 83: rename 'iota' to 'E/@tau with pegrev escape
   [[Rename creates 'E/@tau@' instead of 

Re: Pristines-on-demand: fix disabled tests (#4891)

2022-04-07 Thread Johan Corveleyn
On Thu, Apr 7, 2022 at 11:31 AM Julian Foad  wrote:
> Now can you run the test suite with --wc-format-version=1.15? On Unixy
> systems that is done by, for example:
>
> $ make svnserveautocheck WC_FORMAT_VERSION=1.15 ...

Okay, passing that option to win-tests.py (the test runner on Windows) failed.
Should be fixed now, with r1899654.

I suppose not passing the option uses wc-format-version=1.15
automatically? Or what is the default? Is format 1.8 the same as 1.14
and anything in between?

Should I run with 'None' and 1.8? Or 1.8 and 1.15?

-- 
Johan


Re: Pristines-on-demand: fix disabled tests (#4891)

2022-04-07 Thread Johan Corveleyn
On Thu, Apr 7, 2022 at 11:31 AM Julian Foad  wrote:
> Jun Omae wrote:
> >> FAIL:  diff_tests.py 48: svn diff --diff-cmd provides the correct arguments
> >
> > I've posted patch for the failure.
> > See https://lists.apache.org/thread/2o0xtqfzy9xg8wzxscj2wb641p2kyo9c
>
> Thank you, Jun Omae. Sorry, I missed that before. Committed now in r1899645.

Thanks, confirmed fixed on Windows.

-- 
Johan


Re: Pristines-on-demand: fix disabled tests (#4891)

2022-04-06 Thread Johan Corveleyn
On Wed, Apr 6, 2022 at 5:12 PM Julian Foad  wrote:
> Johan Corveleyn wrote:
> >> A few of these are Windows-specific. I can't very well investigate those
> >> myself. Who could volunteer to look at those? They are:
> >>
> >> externals_tests.py ... ... ...:
> >>   update_modify_file_external(),
> >>   remap_file_external_with_prop_del(),
> >>   file_external_recorded_info():
> >> existing issue (Windows only)
> >>
> >> These tests are commented with "# Existing issue: `src_stream` not
> >> closed in externals.c:apply_textdelta()"
> >>
> >> Does that mean it's a problem already on trunk? Or a hidden problem? If
> >> someone could please take a look, that would be great. If not, could
> >> anyone volunteer to test a possible fix if one of us unixers made a guess?
> >
> > I have no idea what those tests are about, but I can probably help
> > test things on Windows.
> > I'll try to get the branch built on my Windows machine tonight, and
> > then I can help try out various things.
>
> Great! Thanks.
>
> I found also this one is a Windows-only test:
>
> update_tests.py 57 skip_access_denied(): access denied paths should
> be skipped
>
> (In principle I don't see why we shouldn't test a similar access-denied
> condition on unix-like systems, though the error code would be
> different. Maybe the answer is the semantics would be so different it
> would fail at a different place in the code path and so be a different
> test case. I don't plan to pursue this.)
>
> I think the current state is this test will report XFAIL/WIMP with
> pristines-on-demand enabled (currently meaning WC format 32) and XPASS 
> otherwise.
>
> This test was introduced in r1143071 with the log message "Make svn
> update handle some access denied scenarios with a proper skip. This
> makes it less likely that the database will be closed after updating with
> working queue items left."
>
> I would guess that gracefully handling the case where the working file
> on disk has this particular kind of OS lock isn't of primary concern.

Just quickly reporting that I've got the branch built and up and
running on Windows now. Running the test suite currently gives these
(X)FAILS and XPASSES. Will look closer tonight ...

[[[
XFAIL: diff-diff3-test 18: 3-way merge, double add
XFAIL: dirent_uri-test 47: test match with RFC 6125 s. 6.4.3 Rule 3
XFAIL: op-depth-test 42: mixed_rev_move
   [[needs different libsvn_wc entry point]]
XFAIL: op-depth-test 56: commit_moved_away_descendant
XFAIL: op-depth-test 68: move retract (issue 4336)
XFAIL: op-depth-test 69: move/delete file externals (issue 4293)
XFAIL: op-depth-test 75: move more than once, revert intermediate
XFAIL: op-depth-test 79: del4: delete AAA
XFAIL: op-depth-test 80: del4: add AAA
XFAIL: op-depth-test 81: del4: replace AAA
XFAIL: op-depth-test 83: del4: replace self AAA
XFAIL: op-depth-test 85: move4: delete AAA
XFAIL: op-depth-test 86: move4: add AAA
XFAIL: op-depth-test 87: move4: replace AAA
XFAIL: op-depth-test 89: move4: replace self AAA
XFAIL: op-depth-test 95: move within mixed move
XFAIL: basic_tests.py 9: basic corruption detection on update
   [[Relies on wc.text_base_path()]]
XFAIL: basic_tests.py 63: peg rev resolution on non-existent wc paths
XFAIL: blame_tests.py 15: blame -g handles changes from empty mergeinfo
XFAIL: changelist_tests.py 5: diff --changelist (wc-wc and repos-wc)
XFAIL: commit_tests.py 66: last changed of copied subdir
XFAIL: commit_tests.py 74: commit sees tree conflict on unversioned path
XFAIL: copy_tests.py 105: copy and move conflicts
XFAIL: depth_tests.py 49: deleted & moved items left untouched
XFAIL: depth_tests.py 50: unversioned files in excluded directory
XFAIL: diff_tests.py 77: diff repo to wc of a copy
XFAIL: diff_tests.py 90: diff unversioned files in git format
XFAIL: diff_tests.py 92: diff summary repo wc local copy unmodified
XFAIL: diff_tests.py 94: diff git format copy
XFAIL: export_tests.py 11: export working copy at base revision
XFAIL: externals_tests.py 25: update that modifies a file external
XFAIL: externals_tests.py 39: file external remap segfaults due to deleted props
XFAIL: externals_tests.py 44: move with file externals
XFAIL: externals_tests.py 49: file externals versioned obstruction
XFAIL: externals_tests.py 68: check file external recorded info
XFAIL: log_tests.py 46: log --use-merge-history --search
XFAIL: log_tests.py 47: log --use-merge-history --xml
XFAIL: merge_automatic_tests.py 16: cherry2_fwd
XFAIL: merge_automatic_tests.py 17: cherry3_fwd
XFAIL: merge_tests.py 49: avoid repeated merges for cyclic merging
XFAIL: merge_tests.py 64: merge target with non inheritable mergeinfo
XFAIL: merge_tests.py 114: don't inherit bogus mer

Re: Pristines-on-demand=enabled == format 32?

2022-04-06 Thread Johan Corveleyn
On Wed, Apr 6, 2022 at 4:28 PM Julian Foad  wrote:
>
> Johan Corveleyn wrote:
> > I think this was asked several times before, but I can't find the
> > thread: is the pristines-on-demand behavior still unconditionally tied
> > to format 32? Or is it that format 32 makes it _possible_ to enable
> > pristines-on-demand?
>
> Currently it's tied to f32, but it's pretty clear it needs to be
> uncoupled. The issue is:
>
> https://subversion.apache.org/issue/4889 "Pristines-on-demand: per-WC config"
>
> In principle we could address this later, only when a further new
> version is released with a further new format and a further new feature
> that users need to have available without enabling pristines-on-demand;
> but it seems more responsible to uncouple it before we release it.
>
> I think that means #4889 is the other blocker issue. (Does anyone see
> any way around it?)

Ah, yes, I think that makes #4889 a blocker.

I tried to suggest a slightly more flexible per-WC-config than just a
yes/no flag, but rather an open-ended "pristine strategy" or "pristine
storage strategy" value (of which we would now introduces two options:
"full" and "on-demand" / "lazy" / whatever) [1] [2]. But maybe that's
overdesign without having an idea about what other "pristine storage
strategies" might require in additional config details.

[1] https://lists.apache.org/thread/h7xomovdclcm91vrskvj8kb0dbm1jng5
[2] https://lists.apache.org/thread/n3j50zv4sssqjcjfnz44ht5ho9p6db3f

-- 
Johan


Pristines-on-demand=enabled == format 32?

2022-04-06 Thread Johan Corveleyn
I think this was asked several times before, but I can't find the
thread: is the pristines-on-demand behavior still unconditionally tied
to format 32? Or is it that format 32 makes it _possible_ to enable
pristines-on-demand?

I would object to having pristines-on-demand=enabled coupled to simply
having WC format 32. Enabling pristines-on-demand should be optional.
Having the feature available as of format 32 sounds fine, but coupling
it unconditionally to format 32 sounds wrong. What if 1.16 introduces
format 33 with a nice new feature I want, but I want a pristine-full
working copy with it?

-- 
Johan


Re: Pristines-on-demand: fix disabled tests (#4891)

2022-04-06 Thread Johan Corveleyn
On Wed, Apr 6, 2022 at 4:02 PM Julian Foad  wrote:
> === Windows-specific issues
>
> A few of these are Windows-specific. I can't very well investigate those
> myself. Who could volunteer to look at those? They are:
>
> externals_tests.py ... ... ...:
>   update_modify_file_external(),
>   remap_file_external_with_prop_del(),
>   file_external_recorded_info():
> existing issue (Windows only)
>
> These tests are commented with "# Existing issue: `src_stream` not
> closed in externals.c:apply_textdelta()"
>
> Does that mean it's a problem already on trunk? Or a hidden problem? If
> someone could please take a look, that would be great. If not, could
> anyone volunteer to test a possible fix if one of us unixers made a guess?

I have no idea what those tests are about, but I can probably help
test things on Windows.
I'll try to get the branch built on my Windows machine tonight, and
then I can help try out various things.

-- 
Johan


Re: Website prep work and questions (mainly about the 1.15 release notes)

2022-04-06 Thread Johan Corveleyn
On Wed, Apr 6, 2022 at 1:28 AM Nathan Hartman  wrote:
> On Tue, Apr 5, 2022 at 7:19 PM Mark Phippard  wrote:
>> On Tue, Apr 5, 2022 at 4:49 PM Johan Corveleyn  wrote:

>> > 4. Signature verified OK, but Mark's key not trusted, which, as Nathan
>> > also said, is normal because it hasn't been crossed-signed by anyone
>> > in my "web of trust". Okay, it's in the KEYS file (i.e. part of the
>> > Apache records for Mark's id). This is as good as we can do, so +1.
>>
>> I am surprised that you all try to verify to this depth. I always just
>> treated the signatures like a slightly better sha1 and did a simple
>> gpg --verify to see if the signature was valid? Did you all cross sign
>> each other's keys at one of the old developer meetups or something?
>
> gpg --verify checks if the key is in your web of trust automatically and 
> prints a warning if not, so it wasn't anything special we had to do.
>
> Perhaps other SVN devs crossed signed each other's keys in past hackathons 
> but mine isn't cross signed yet.

Yes, at various occasions in the past we did have so called
"keysigning parties", where we exchanged / cross-signed each others
keys. At all of the SVN Hackathons hosted by Elego in Berlin for
instance. I suppose other Apache events do them too.

I don't remember the exact details, but I found some background here:
https://infra.apache.org/release-signing.html#web-of-trust
https://infra.apache.org/release-signing.html#key-signing-party

-- 
Johan


Re: Website prep work and questions (mainly about the 1.15 release notes)

2022-04-05 Thread Johan Corveleyn
Thanks all for sharing your gpg key hurdles. It saved me a lot of time
when I ran into the same issues while verifying Mark's signature :-).

1. Signature algorithm not recognized
-> updated my gpg to latest version (2.3.4)

2. keyserver problem when running 'gpg --refresh-keys'
-> put 'keyserver hkp://keyserver.ubuntu.com' into my
%APPDATA%/gnupg/gpg.conf like Julian did

3. Mark's key unknown
-> executed 'gpg --recv-key EC25FCC105618D04ADB43429C4416167349A3BCB' to get it

4. Signature verified OK, but Mark's key not trusted, which, as Nathan
also said, is normal because it hasn't been crossed-signed by anyone
in my "web of trust". Okay, it's in the KEYS file (i.e. part of the
Apache records for Mark's id). This is as good as we can do, so +1.

Phew
-- 
Johan


Re: Subversion 1.10.8 up for testing.signing

2022-04-05 Thread Johan Corveleyn
On Sat, Apr 2, 2022 at 3:27 PM Mark Phippard  wrote:
>
> The 1.10.8 release artifacts are now available for testing/signing.
>
> Please get the tarballs from
>   https://dist.apache.org/repos/dist/dev/subversion
> and add your signatures there.
>
> Thanks!

Summary
---
+1 to release

Platform

Windows 10 x64 (Version 1903)
Microsoft Visual Studio 2019 Community Edition (Version 16.5.3)

Verified

Signature, sha1 and sha512 for subversion-1.10.8.zip.

Contents of subversion-1.10.8.zip are identical to tags/1.10.8,
and to branches/1.10.x@1899510 (except for expected differences in
svn_version.h and svnpubsub, svnwcsub and nominate.pl (symlinks vs. file
contents), and generated files).

Tested
--
[ Release build x64 ] x [ fsfs ] x [ file | svn | http ]

Results
---
All tests pass.

Dependencies

httpd 2.4.43 (apr 1.6.5, apr-util 1.6.1,
  pcre 8.44, expat 2.2.9, openssl 1.1.1g)
apr 1.6.5
apr-util 1.6.1
openssl 1.1.1g
serf 1.3.9
sqlite 3.31.1.0
zlib 1.2.11
(bundled lz4 1.7.5)
(bundled utf8proc 2.1.0)

Other tools
---
perl 5.30.2 (Strawberry Perl)
python 2.7.17

Signature
-

subversion-1.10.8.zip:
-BEGIN PGP SIGNATURE-

iQIzBAABCgAdFiEEiqLBDuqtRPlpcnrqtZzm1gEMiq0FAmJMpwUACgkQtZzm1gEM
iq0gTxAAoa4wBU3ZEVm0b5BLxQpJN8pctERN2u8ayEqDFM8Zbm+5DAq+LDbAJQ44
1OJia3yEYpBNGWu8v3qoC7XNQ/f7QXHhMNnUMCm82bwjHufnib1qzUJZYLHSK9gy
iQqTRU81Jo+C8aPrbRjzqEX6j6sckv23+0vHYqZYYBKLZ8BOOwcXEzSfmXrk9shR
m/794W2OweXaJ4bfD1dYUH3viUuRoCTygQYEErmpIC4c8I/CMDXYeCp93mMJoZwf
8+ReJJ1Zsq1ffnGtv+TDcRY0xMFveKdtOrbvFn16Eu3mUgIyD2VQEGjj4e/1alyv
DgRibiHlT6YIwOgSHf+G6RJp3NH78jVf0t3UY8bdrAe5klExbQ8BkW5xs/833bJW
KMCKpfnWakvnn4sYw0P1wbUm+gRukhQ0vklegyOD2kO4RGGlMHXvaSA6qjONvmaa
n7wRJUTK4xEL+wLe0sXQ0ARmZwLNJTbSQjdsjH5v/n40jDzXUCrynI5XEox5nT74
hSBq2CKjm0OY9jVMol6GgzYzD6kxR9/IHHwMJaNolLw99CJqCKVsYC2dNbSCmP5L
qmwvprB2ofXxG4R1eJ7urebfIOx6B0hmev8aw7KVQpcrm2Wp2WS+FG+jKn0tHMTW
SJkrvo+HS8oS5sX5uc2e6ieGjYIaoobANq4XOBCtE09oNDCAUv8=
=Vigs
-END PGP SIGNATURE-

-- 
Johan


Re: Subversion 1.14.2 up for testing/signing

2022-04-05 Thread Johan Corveleyn
On Sat, Apr 2, 2022 at 3:28 PM Mark Phippard  wrote:
>
> The 1.14.2 release artifacts are now available for testing/signing.
>
> Please get the tarballs from
>   https://dist.apache.org/repos/dist/dev/subversion
> and add your signatures there.
>
> Thanks!

Summary
---
+1 to release (Windows)

Platform

Windows 10 x64 (Version 1903)
Microsoft Visual Studio 2019 Community Edition (Version 16.5.3)

Verified

Signature and sha512 for subversion-1.14.2.zip.

Contents of subversion-1.14.2.zip are identical to tags/1.14.2,
and to branches/1.14.x@1899510 (except for expected differences in
svn_version.h and svnpubsub, svnwcsub and nominate.pl (symlinks vs. file
contents), and generated files).

Tested
--
[ Release build x64 ] x [ fsfs ] x [ file | svn | http ]
javahl
swig-python

Results
---
All tests pass.

Dependencies

httpd 2.4.43 (apr 1.6.5, apr-util 1.6.1,
  pcre 8.44, expat 2.2.9, openssl 1.1.1g)
apr 1.6.5
apr-util 1.6.1
openssl 1.1.1g
serf 1.3.9
sqlite 3.31.1.0
zlib 1.2.11
python 3.9.1
py3c 1.0
swig 4.0.1
(bundled lz4 1.7.5)
(bundled utf8proc 2.1.0)

Other tools
---
perl 5.30.2 (Strawberry Perl)
python 3.9.1
AdoptOpenJDK 11.0.6
junit 4.12

Signature
-

subversion-1.14.2.zip:
-BEGIN PGP SIGNATURE-

iQIzBAABCgAdFiEEiqLBDuqtRPlpcnrqtZzm1gEMiq0FAmJMpmQACgkQtZzm1gEM
iq30HA/8CCJwOHHYmx6qzumeTxmiW+ZORSGYRn52j3C2EQOZPfbeKXkNQh052ntx
3JI3GMhlQPhms/QzDyDqfMy6zw6quVhP1BKNR4fjcts3SC+bjUcbplwEUM38BiA8
RZiaAlO7fwIjgEFLSixKKwL/+RAr+U35Q8yPw2gtszMTIOZVg8MBKWmNC1fv5GJN
64lDGCtnzgPdZTcNsvaVqXCpPl1O8hNmLCPSQyLzom5UsNy6wkW1VEHJqA8dXm4K
tMpuGURW/8NBjKlXOT/gg7TijjXKHk8PqyFcCEUFzpAdL/V2/wzO4W3FT1yD1UiL
y1837e2PUWDydeAnt2atYxjm3BiGiBiJEdfy1MIKm508KNRQy5E+0VOaN4F9B0pe
ZrmPh9t2IzxdB+AWbYS74BFQUHXc93LNjQ4abQl7zWZkcNibkNN32lULNgLqurEG
RKSBgRyycxL6uzyovuhiLGI7WA+uOC1Bu1CD5KYrhrSWtoBFEf8pV42w+Loi6SHm
xCrgbycWZbDzmrFzlsnTpHvgq60aKJodaIAox4pJkd5Xx1vTSkLs8bdGs8xy0j8a
mc7kM1NJ8p+8wpPvjqS7rBKfEy3uPbgNyPrsExcbowNZk0L/QC4XYKvNanQRvsC/
92AoiwxxsoOD24r4eRCN2x53TfE303X9f9mlQg4JKwwGnlI1PPA=
=v/9k
-END PGP SIGNATURE-

-- 
Johan


Re: [PATCH] limit diff effort to fix performance issue

2022-04-01 Thread Johan Corveleyn
On Fri, Apr 1, 2022 at 5:19 PM Stefan Sperling  wrote:
>
> On Fri, Apr 01, 2022 at 05:04:49PM +0200, Johan Corveleyn wrote:
> > Yes, I suppose this is the case: Patience feeds different (smaller)
> > things to LCS. Because, as far as I understand, Myers' way of
> > calculating the LCS is fundamentally "somewhat" quadratic (according
> > to the Myers paper from 1986 [1], titled "An O(ND) Difference
> > Algorithm and Its Variations").
> >
> > That is: O(ND) where N = the sum of the lengths of both sides of the
> > diff and D = the size of the minimal diff. That's why eliminating the
> > common prefix and suffix (added as an optimization years ago) is
> > useful, it makes N much smaller.
> >
> > Now, in cases where both texts are huge (even after prefix-suffix
> > stripping), but the minimal diff is small, the algorithm should in
> > theory be fast (because D is small). Just not sure what is going wrong
> > then in our variation of this algorithm. Or have we implemented
> > another algorithm than the one described by Myers?
>
> SVN diff is allegedly "based on the approach described by ... Meyers (sic),
> [...]  but has been modified for better performance."
> I guess the modifications refer to prefix/suffix scanning,
> because this description dates from r1128862.

Hm, not the prefix/suffix scanning, as I implemented those (it was my
first big patch / work in SVN), and that's outside of the LCS
algorithm (it happens in a phase before assembling "tokens (=lines)"
and before handing it off to the LCS algorithm). It was integrated
into trunk in r1067800 (and some further fixes followed afterwards).
Basically, that work is done in
libsvn_diff/diff_file.c#find_identical_{prefix,suffix}.

I suppose the "modified for better performance" refers to some
optimisations done by Morten Kloster, who then later submitted the
patch adding this comment in r1128862. His optimisations were more
related to the LCS algorithm (further reducing the problem space, and
providing early exits in certain cases or some such).

The core LCS algorithm in libsvn_diff/lcs.c was from way before my
time, and according to 'svn blame' was mainly written by Sander
Striker. I don't understand it fully either :-), but I always assumed
it was basically some clever implementation of Myers' algorithm.


--
Johan


Re: [PATCH] limit diff effort to fix performance issue

2022-04-01 Thread Johan Corveleyn
On Fri, Apr 1, 2022 at 4:37 PM Stefan Sperling  wrote:
> Yes, roughly, Patience diff involves two algorithms, the grouping of
> lines along similar-line boundaries performed by Patience, and an
> LCS for parts of the files which Patience cannot deal with by itself.
>
> But LCS needs to complete its work before Patience can do its thing,
> and vice-versa. For a given input, each algorithm might run multiple
> times, switching whenever the current algorithm cannot make any process.
> So if LCS still has a fundamental performance issue for some inputs,
> adding Patience diff probably won't help. It could help in cases where
> LCS is now fed with different inputs as determined by Patience, such
> that bad inputs for LCS are avoided. But I don't know if that would
> always be the case.

Yes, I suppose this is the case: Patience feeds different (smaller)
things to LCS. Because, as far as I understand, Myers' way of
calculating the LCS is fundamentally "somewhat" quadratic (according
to the Myers paper from 1986 [1], titled "An O(ND) Difference
Algorithm and Its Variations").

That is: O(ND) where N = the sum of the lengths of both sides of the
diff and D = the size of the minimal diff. That's why eliminating the
common prefix and suffix (added as an optimization years ago) is
useful, it makes N much smaller.

Now, in cases where both texts are huge (even after prefix-suffix
stripping), but the minimal diff is small, the algorithm should in
theory be fast (because D is small). Just not sure what is going wrong
then in our variation of this algorithm. Or have we implemented
another algorithm than the one described by Myers?

Anyway, if Patience diff is able to split up the work for LCS in
smaller bits (with their small O(ND) complexity), then I can totally
understand that this can be faster.

[1] http://www.xmailserver.org/diff2.pdf

-- 
Johan


Re: [PATCH] limit diff effort to fix performance issue

2022-04-01 Thread Johan Corveleyn
On Fri, Apr 1, 2022 at 1:12 PM Stefan Sperling  wrote:
>
> On Fri, Apr 01, 2022 at 12:44:24PM +0200, Johan Corveleyn wrote:
> > On Tue, Jun 8, 2021 at 5:58 PM Johan Corveleyn  wrote:
> > > On Tue, Jun 8, 2021 at 3:24 PM Stefan Sperling  wrote:
> > > > On Tue, Jun 08, 2021 at 02:57:34PM +0200, Johan Corveleyn wrote:
> > > > > Okay, I focused on the first revision causing the annotate to differ,
> > > > > and with some debug logging:
> > > > > - p went up to 139
> > > > > - length[0]=1942, length[1]=1817
> > > > >
> > > > > Now, 1942 lines on the left and 1817 on the right doesn't seem all
> > > > > that many (that's what remains after prefix-suffix stripping). I see
> > > > > no reason 'svn diff' shouldn't be able to calculate a minimal diff for
> > > > > those sizes in a reasonable amount of time. So if p can go up to such
> > > > > a "cost" for such "reasonable" lenghts, I imagine we should put the
> > > > > actual limit much higher. I suppose we can just as well set "min_cost"
> > > > > to 1024 or even higher. 64 is way too low.
> > > >
> > > > Thanks!
> > > > I have set the value back to at least 1024 with this new version of 
> > > > patch.
> > >
> > > Hmmm, apparently I'm still running into the limit. Even with 8192 I'm
> > > hitting it at least once. The actual diff there is not really pretty,
> > > but it's an actual manual change made by some developer years ago, and
> > > the "minimal diff" is more or less readable / understandable. The log
> > > message is something like "Group sections related to multimedia
> > > module", and it shuffles around a lot of xml sections to group them
> > > together.
> > >
> > > In this case, length[0]==length[1]==46780. Pretty big for the LCS, but
> > > not humongous. The value of 'p' goes up to 8279.
> > >
> > > With the limit set to 16384, I'm not hitting it, and the annotate
> > > comes out as with the original.
> > >
> > > Now, I'm a bit puzzled why limit==8192 already takes 18s in your
> > > tests. In my situation, with the above diff, I get:
> > > limit==8192: 3.3s
> > > limit==16384: 3.5s
> > >
> > > (that's including downloading both versions from the server over https)
> > >
> > > So I'm wondering why it takes so long in your case. One thing to keep
> > > in mind here is that, since this is cpu intensive, optimizations might
> > > matter. I remember back in 2011 that I did most of my measurements
> > > with a "Release" build for example. But the above tests I did were
> > > with a debug build, so ... dunno.
> >
> > [ snip part about another optimization by Morten Kloster in r1140247,
> > which seemed not to work for Stefan. ]
> >
> > Coming back to this thread from last year, just wondering if you want
> > to pick this up again, Stefan (or anyone else), since a 1.15 release
> > might be happening in the near future.
> >
> > I think we already concluded that changing this behaviour in a patch
> > release would be hard to justify. But for 1.15 it might be acceptable
> > in some form.
> >
> > Just wanted to bring this back up, I have no vested interest here. I'm
> > still skeptical about changing the output of diff & blame in cases
> > where we hit "this takes too much work", but I won't stand in the way
> > if that what others consense on :-). If we want to pick a limit of the
> > maximum effort, then I'd suggest 16384 (or above), but that's a purely
> > personal / local suggestion, because the use case I had above would
> > then not be impacted.
> >
> > BTW: it's a pity that we can's say: "limit the diff effort in case of
> > 'update' or 'merge', but not in case of 'diff' or 'blame'". Because in
> > the latter case, the user might care more about the actual output, and
> > in the former they might not (until they hit a text conflict of
> > course, then they will care again ...)
> >
> > It might be interesting if someone could take a more "profiling" look
> > at why Stefan's example takes much more time, even with limit==8192
> > (18 seconds), compared to my example (3.3 seconds). Is that purely
> > because of the total size of the files / number of lines? I find that
> > difference quite strange. There might be something that can be
> > optimized without changing behaviour. But I'

Re: [PATCH] limit diff effort to fix performance issue

2022-04-01 Thread Johan Corveleyn
On Tue, Jun 8, 2021 at 5:58 PM Johan Corveleyn  wrote:
> On Tue, Jun 8, 2021 at 3:24 PM Stefan Sperling  wrote:
> > On Tue, Jun 08, 2021 at 02:57:34PM +0200, Johan Corveleyn wrote:
> > > Okay, I focused on the first revision causing the annotate to differ,
> > > and with some debug logging:
> > > - p went up to 139
> > > - length[0]=1942, length[1]=1817
> > >
> > > Now, 1942 lines on the left and 1817 on the right doesn't seem all
> > > that many (that's what remains after prefix-suffix stripping). I see
> > > no reason 'svn diff' shouldn't be able to calculate a minimal diff for
> > > those sizes in a reasonable amount of time. So if p can go up to such
> > > a "cost" for such "reasonable" lenghts, I imagine we should put the
> > > actual limit much higher. I suppose we can just as well set "min_cost"
> > > to 1024 or even higher. 64 is way too low.
> >
> > Thanks!
> > I have set the value back to at least 1024 with this new version of patch.
>
> Hmmm, apparently I'm still running into the limit. Even with 8192 I'm
> hitting it at least once. The actual diff there is not really pretty,
> but it's an actual manual change made by some developer years ago, and
> the "minimal diff" is more or less readable / understandable. The log
> message is something like "Group sections related to multimedia
> module", and it shuffles around a lot of xml sections to group them
> together.
>
> In this case, length[0]==length[1]==46780. Pretty big for the LCS, but
> not humongous. The value of 'p' goes up to 8279.
>
> With the limit set to 16384, I'm not hitting it, and the annotate
> comes out as with the original.
>
> Now, I'm a bit puzzled why limit==8192 already takes 18s in your
> tests. In my situation, with the above diff, I get:
> limit==8192: 3.3s
> limit==16384: 3.5s
>
> (that's including downloading both versions from the server over https)
>
> So I'm wondering why it takes so long in your case. One thing to keep
> in mind here is that, since this is cpu intensive, optimizations might
> matter. I remember back in 2011 that I did most of my measurements
> with a "Release" build for example. But the above tests I did were
> with a debug build, so ... dunno.

[ snip part about another optimization by Morten Kloster in r1140247,
which seemed not to work for Stefan. ]

Coming back to this thread from last year, just wondering if you want
to pick this up again, Stefan (or anyone else), since a 1.15 release
might be happening in the near future.

I think we already concluded that changing this behaviour in a patch
release would be hard to justify. But for 1.15 it might be acceptable
in some form.

Just wanted to bring this back up, I have no vested interest here. I'm
still skeptical about changing the output of diff & blame in cases
where we hit "this takes too much work", but I won't stand in the way
if that what others consense on :-). If we want to pick a limit of the
maximum effort, then I'd suggest 16384 (or above), but that's a purely
personal / local suggestion, because the use case I had above would
then not be impacted.

BTW: it's a pity that we can's say: "limit the diff effort in case of
'update' or 'merge', but not in case of 'diff' or 'blame'". Because in
the latter case, the user might care more about the actual output, and
in the former they might not (until they hit a text conflict of
course, then they will care again ...)

It might be interesting if someone could take a more "profiling" look
at why Stefan's example takes much more time, even with limit==8192
(18 seconds), compared to my example (3.3 seconds). Is that purely
because of the total size of the files / number of lines? I find that
difference quite strange. There might be something that can be
optimized without changing behaviour. But I'm afraid I don't have time
to dig deeply into this.

-- 
Johan


Re: r1897441 (ping to jun66j5 and futatuki)

2022-03-31 Thread Johan Corveleyn
On Thu, Mar 31, 2022 at 1:25 AM Jun Omae  wrote:
>
> On Thu, Mar 31, 2022 at 3:00 AM Johan Corveleyn  wrote:
> > Mark nominated it, and I just tested it again. However, r1884474 only
> > seems to fix mod_authz_svn_tests.py#10.
> >
> > mod_authz_svn_tests.py#11 still fails for me after merging r1884474. I
> > haven't looked into it, and have to run right now. It's very well
> > possible that I have done something wrong or that my test-setup is
> > broken locally, don't know yet.
> >
> > In case anyone want to take a closer look, here is the dav-fails.log
> > in attachment. If no one else beats me to it, I'll take another look
> > later tonight or tomorrow.
>
> In my environment (Windows 10), 2 failures go away after merging r1884474:
>
> [[[
> ['httpd.exe', '-f',
> 'C:\\usr\\src\\subversion\\1.14.x-py310\\Release\\subversion\\tests\\cmdline\\httpd\\httpd.conf']
> Testing Release configuration on remote repository http://localhost:10229.
> [1/1] 
> mod_authz_svn_tests.pysuccess
> At least one test XFAILED, checking
> C:\usr\src\subversion\1.14.x-py310\Release\dav-tests.log
> XFAIL: mod_authz_svn_tests.py 3: test mixed with noauthwhenanon directive
> Summary of test results:
>   10 tests PASSED
>   1 test XFAILED
> Python version: 3.10.0.
> SUMMARY: All tests successful
> 
>
> The connection was closed by httpd.exe in mod_authz_svn_tests.py#11,
> but no hints for the reason.
> [[[
> ConnectionResetError: [WinError 10054] De externe host heeft een
> verbinding verbroken
> ]]]
> Please check Release\subversion\tests\cmdline\httpd\log file in your
> environment.
>

Ah, thanks. I've sorted it out. Seems to work now.

I'll vote for the backport shortly.

Thanks for you help, Jun!
-- 
Johan


Re: r1897441 (ping to jun66j5 and futatuki)

2022-03-30 Thread Johan Corveleyn
On Wed, Mar 30, 2022 at 8:28 AM Daniel Sahlberg
 wrote:
>
> Den ons 30 mars 2022 kl 00:54 skrev Jun Omae :
>>
>> On Wed, Mar 30, 2022 at 6:20 AM Daniel Sahlberg
>>  wrote:
>> >
>> > Hi,
>> >
>> > Does anyone with experience in the bindings have time to look at the 
>> > backport of r1897441 (in 1.14.x/STATUS)? It was nominated by jun66j5, 
>> > however it doesn't apply cleanly. I think it would work if at least 
>> > r1885008 is added to the group, but probably also r1886858 and r1886872.
>> >
>> > It would be good to have it merged if it increases test coverage.
>> >
>> > Kind regards,
>> > Daniel
>>
>> Sorry, I noticed that the nomination r1897441 is not needed for 1.14.x.
>> Removed it from STATUS file.
>>
>> However, I get 2 failures from 1.14.x/win-tests.py on Windows
>> (tests for swig-py, swig-pl and javahl pass).
>>
>> FAIL: mod_authz_svn_tests.py 10: repos-relative access file
>> FAIL: mod_authz_svn_tests.py 11: repos-relative access file with bad
>> repository URL
>>
>> It seems to be necessary to merge r1884474 to fix.
>
>
> That one seems quite straight forward. Feel free to nominate!

Mark nominated it, and I just tested it again. However, r1884474 only
seems to fix mod_authz_svn_tests.py#10.

mod_authz_svn_tests.py#11 still fails for me after merging r1884474. I
haven't looked into it, and have to run right now. It's very well
possible that I have done something wrong or that my test-setup is
broken locally, don't know yet.

In case anyone want to take a closer look, here is the dav-fails.log
in attachment. If no one else beats me to it, I'll take another look
later tonight or tomorrow.

-- 
Johan


dav-fails.log
Description: Binary data


Generating CHANGES

2022-03-29 Thread Johan Corveleyn
In the thread with subject "Re: svn commit: r1899324 -
/subversion/site/publish/upcoming.part.html":

On Mon, Mar 28, 2022 at 10:14 PM Daniel Sahlberg
 wrote:
>
> Den mån 28 mars 2022 kl 22:04 skrev Mark Phippard :
>>
>> What is this file used for? Is it displayed on the website somewhere?
>
>
> Yes, it is included in the release-notes page (via an SSI #include): 
> https://subversion.apache.org/docs/release-notes/
>
>> It is just showing merged changes since the last release? So I guess
>> could help us write CHANGES?
>
>
> Yes, it should only show merged changes since last release. It didn't work 
> properly and showed changes since 1.14.0 but I hope it should be alright now. 
> It is generated by site/tools/generate-upcoming-changes-log.sh (you should be 
> able to run it locally, but make sure that `cwd` is in the 1.14.x branch). 
> And yes, it would probably be a good starting point for CHANGES.

For generating CHANGES you can also try the 'write-changelog'
subcommand of tools/dist/release.py, with the
--include-unlabeled-summaries option, and '--branch branches/1.14.x':

[[[
$ release.py write-changelog -h
usage: release.py write-changelog [-h] [--include-unlabeled-summaries] previous

positional arguments:
  previous  The "previous" branch or tag, relative to
^/subversion/, to compare "branch" against.

options:
  -h, --helpshow this help message and exit
  --include-unlabeled-summaries
Include summary lines that do not have a
changes label, unless an explicit [c:skip] or [c:ignore] is part of
the
commit message (except if the summary line
contains 'STATUS', 'CHANGES', 'Post-release housekeeping', 'Follow-up'
or starts with '*').

]]]

For example:

[[[
release.py --branch branches/1.14.x write-changelog
--include-unlabeled-summaries tags/1.14.1
* -1 vote for r1892471 as explained in dev@. (r1892509)
* Add test coverage for CVE-2020-17525 (mod_authz_svn NULL deref) (r1899256)
* Document how the port number is passed to custom tunnels. (r1899258)
* Fix a bug where «make davautocheck» immediately after configure
failed hard because of an unbuilt dependency. (r1899242)
* Fix an error message when running make davautocheck. (r1899340)
* Fix encoding of error message on failure of system() call. (r1899257)
* Fix issue #4880, "Use-after-free of object-pools when running in
httpd" (r1899339)
* Fix misleading -r option documentation for some svnadmin
subcommands. (r1896935)
* Follow up to r1865987, r1866588: Unbreak a msgid. (r1899241)
* Reverting my recent commit r1892122 (backporting r1892121). It
depends on (r1892123)
* Upgrade my vote for the r1892470 group. (r1892547)
* Use the APR-1.4+ API for flushing file contents to disk. (r1899341)
* swig-py: Fix dependency of make copy-swig-py target. (r1899255)
* swig-py: Fix doubly destroying memory pool with cyclic garbage
collector. (r1889654)
* swig-py: Skip some tests on Python 2 if default encoding is
'utf-8'. (r1899243)
* tests: Include additional information in an error message. (r1899259)

 User-visible changes:

 Developer-visible changes:

]]]

This is just a skeleton of course. If nothing else, you can take a
look at it to see if you missed something.

It extracts either lines from STATUS, or "summary lines" (first lines
of commit messages) of revisions that are in branches/1.14.x but not
in tags/1.14.1 (it uses 'svn mergeinfo --show-revs eligible
^/branches/1.14.x ^/tags/1.14.1' for determining those).

Auto-generating the changelog would get more powerful if we'd adopt
some commit message conventions for "tagging" / "labeling" commit
messages immediately when they are committed for the first time, but
this idea never got much traction on dev@ [1], so now this is pretty
basic (just extracting "summary lines" with revision numbers and
putting them in a list).

[1] https://svn.haxx.se/dev/archive-2017-12/0020.shtml

-- 
Johan


Re: Issue #525/#4892: on only fetching the pristines we really need

2022-03-17 Thread Johan Corveleyn
On Wed, Mar 16, 2022 at 9:59 PM Julian Foad  wrote:
> Daniel Shahaf wrote:
> > Also, why is this specific to «svn update»?
>
> It's not specific to update. Update is a particular case that Karl cares 
> about so I looked at doing "update" first. Implementing this approach in one 
> subcommand at a time could be considered releasable incremental steps, 
> because each one is a further optimisation.

It's not specific to 'svn update' per se, but it's logical that it
leads to this discussion, because it is a (commonly used) case where
the pristine is not actually needed for the operation (if there is no
actual incoming update to the concerned file). 'svn diff' and 'svn
revert' cannot do their work without the pristine, but 'update without
an actual incoming edit'?

And even with an 'incoming edit on update (on top of local mod)' it
might in theory be possible to delay the download of the full pristine
until after conflict-resolution decision (but I imagine that's even
more difficult to untangle).

Also, why should 'svn update' be in the business of (silently)
restoring "the branch's invariant" (even when it does not need the
file), and not any other operation (like 'svn status -u' for example)?

-- 
Johan


Re: Issue #525/#4892: on only fetching the pristines we really need

2022-03-14 Thread Johan Corveleyn
On Mon, Mar 14, 2022 at 5:26 PM Julian Foad  wrote:
>
> Johan Corveleyn wrote:
> >Speaking from the peanut gallery, [...]
> >If I would be a user with several huge binaries in the repo / WC, I
> >imagine I would not be happy with this proposal. The reason is that I
> >have always, forever, only done "svn update the-whole-wc". Updating
> >individual subdirs is micro-managing. [...]
>
> But do you locally modify those huge binaries?

Well, as I said, I don't have huge binaries myself (nor do my
colleagues, for that matter). We have a single build server with 400
working copies, each with 10's of "normal sized" files. But
apparently some users, like Karl (or Karl's customer), do have huge
binaries in their WC, and I suppose sometimes they will be modified.

All I can say is: individual-directory-updating is not something I've
often witnessed being used (unless maybe for a short ad-hoc purpose,
not on a regular basis). With lots of things going on, and lots of
things being worked on at the same time, the usual workflow I know is
"update entire WC to keep up with others; start working (or continue
where you left yesterday)". So if I would locally modify a huge binary
(it might be left there for days, weeks, ... locally modified, until
I'm happy for it to be committed), every time I update I would update
the entire WC. That's just me speculating of course ... maybe I should
leave the floor for Karl and others ...

Just one more thing: if people "micro-manage" their working copy, in
my experience they will usually do this once, by setting up an
appropriately arranged sparse working copy (leaving out for example
the huge binaries of other teams they're not interested in, or source
modules that are not important for their work). After this one-time
setup (now and then finetuned to exclude or add another directory or
file), people just "svn update entire-sparse-wc". It makes no sense to
me to update only subdirectories, at least not on a regular basis.
That's too much fiddly work everytime (and you can't save that
"to-be-updated selection" for next time), and you might end up with
inconsistent stuff locally (for instance a library not being updated
together with its callers). But again, I might have wrong assumptions
here, since I don't work with huge binaries in SVN myself.

-- 
Johan


Re: Issue #525/#4892: on only fetching the pristines we really need

2022-03-14 Thread Johan Corveleyn
On Mon, Mar 14, 2022 at 11:48 AM Julian Foad  wrote:
>
> Dear dev community, and especially Karl and Mark:
>
> A plea to test the current design/implementation.
>
> I wonder if we are missing some perspective.
>
> We are worried that the current design won't be acceptable because it
> has poor behaviour in a particular use case.
>
> The use case involved running "svn update" at the root of the WC. (It
> didn't explicitly say that. More precisely, it implied the update target
> tree contains the huge locally modified file.)
>
> Using this new feature necessarily requires some adjustments to user
> expectations and work flow.
>
> What if we ask the user to limit their "svn update" to target the
> particular files/paths that they need to update, keeping their huge
> locally modified file out of its scope? Examples:
>
> svn update readme.txt
> svn update small-docs/
> # BUT NOT: svn update the-whole-wc/
>
> Then we side-step the issue. It only fetches pristines for modified
> files that are within the tree scope of the specified targets. (This is
> how it works already, not a proposal.)
>
> OK that's not optimal but it might be sufficient.

Speaking from the peanut gallery, as I or "my users" probably won't be
bothered too much by the occasional "superfluous pristine" (as I said
before, I'm more interested in this feature for our build server with
400 working copies -- not particularly for rare huge files, but more
for the general overhead of duplicating thousands of files):

If I would be a user with several huge binaries in the repo / WC, I
imagine I would not be happy with this proposal. The reason is that I
have always, forever, only done "svn update the-whole-wc". Updating
individual subdirs is micro-managing. I update my entire project (i.e.
working copy) daily just to keep up with whatever my 100 colleagues
have done since the last time I updated. It's just daily routine:
Press Ctrl-T (Update Project) in IntelliJ, and start working. I'm not
going to bother thinking about what exactly I need updated, and
multi-selecting the 80 subdirs that I might need to keep in sync with
the most important stuff.

That's just my opinion, or my feeling trying to place myself in the
position of such users. I'm not doing any actual work here, so I
certainly don't want to stand in the way of consensus / progress, if
the current implementation is sufficient for others.

-- 
Johan


Re: Issue #525/#4892: on only fetching the pristines we really need

2022-03-12 Thread Johan Corveleyn
On Fri, Mar 11, 2022 at 9:17 PM Nathan Hartman  wrote:
> If possible and not overly burdensome, I think it would be a good
> thing to keep the "restore" functionality for the following reasons:
[snip]

I agree. I know about the restore feature too, and am used to it.
Also, I think it would be a mistake to create different behaviour
between "normal (pristine-full)" and "pristines-on-demand" working
copies.

On "update's essential functionality": the main problem, I feel, is
that the current implementation fetches missing pristines for modified
files *even if they will not be updated*. I understand that this
happens because, at the point of "textbase-sync" (check for and
download missing pristines, which happens before the operation goes
into details), it doesn't know yet which files will effectively
receive an update. So this really feels like a waste (fetching stuff
which will not even be needed, and indeed in many use cases like
Karl's often won't be).

But you all know that already, I guess, and I appreciate all efforts
in trying to come up with creative approaches to avoid this "waste"
:-).

Don't know if this is realistic or useful, but:
Apart from pushing this textbase-sync closer to the point of access,
one could imagine that during textbase-sync the client would already
have more information about what will be updated later on. For example
by organizing the client-server exchange so that the client first
receives a report, without texts, about what will be updated, then
fetching missing pristines if needed, and then going on to request the
actual update texts. IIRC, this kind of exchange is already the
default since 1.8 with serf (except if certain directives / config
flags are set) [1]. Then again, it might be quite awkward to implement
this kind of flow only for one particular variation of our
client-server protocol.

[1] 
https://subversion.apache.org/docs/release-notes/1.8.html#serf-skelta-default

-- 
Johan


Re: A two-part vision for Subversion and large binary objects.

2022-02-14 Thread Johan Corveleyn
On Mon, Feb 14, 2022 at 11:13 AM Ivan Zhakov  wrote:
> On Mon, 14 Feb 2022 at 01:39, Karl Fogel  wrote:
>> On 12 Feb 2022, Mark Phippard wrote:
...
>> In any case, the branch name doesn't matter too much here,
>> especially since it's going to get merged soon.  However, for the
>> user-facing name of the feature, we should pick a name based on
>> the essence of the feature, not on a not-yet-fully-implemented
>> optional enhancement to the feature, discussed further below.
>>
>> On 13 Feb 2022, Julian Foad wrote:
>> >That name came, as far as I am aware, from Evgeny's branch which
>> >implements the latter.
>> >
>> >This may be a case where the public facing name for the feature
>> >ought to differ from the internal development name.
>> >
>> >Any ideas for a good public name?
>> >
>> >Pristines on Subversion's demand?
>> >Dehydrated WC?
>>
>> I kind of like the dehydration/rehydration theme -- it's certainly
>> memorable!  Other possibilities:
>>
>>   - blob-optimized checkouts
>>
>>   - "blobtimized" checkouts (okay, kidding there... :-) )
>>
> I would suggest:
> - optional pristines

As I tried to explain before, I think it makes more sense (also to new
users who have never used pre-1.15) to try to expose the feature as a
knob for the pristine storing (or caching) strategy. Because,
effectively, the pristine store is just a cache, right? All the
information is there on the server, and the client simply duplicates /
caches that information locally to make some operations more
efficient. Up until know, the pristine caching strategy was fixed:
"cache them all, all the time, forever".

So now we're working on a very lazy or minimal type of pristine
caching strategy (or "no caching", if you will -- we might consider it
an implementation detail that a pristine is fetched in the "regular
pristine store" for a moment, and cleaned up after the operation -- it
might just as well have been spooled to a tmp location, or in memory,
or ... during the operation).

To expose this to users, I would take a step back, and open the door
for other types of pristine caching strategy in the future. So I'd
say:

"New feature in 1.15: Configurable Pristine Caching", or "Flexible
Pristine Caching" or "Pristine Caching Options". Where it was
previously a fixed strategy, you now have some choice. In 1.15 we
introduce the "lazy" (or "short-lived", or "minimal") pristine caching
strategy. Apart from that we still have the (default, old) "full" /
"complete" caching strategy. In the future we might introduce
additional (more flexible) strategies, such as those dictated by some
rules, potentially with a repos-side suggestion (like with
svn:auto-props).

Instead of taking about "Pristine Caching Strategy", we could also
talk about the "Pristine Strorage Strategy" or "Storing Strategy"
('storing' instead of 'fetching', as the former is the more permanent
effect; fetching might be seen as an implementation detail on what
subversion needs to do when it runs into a non-stored pristine).

-- 
Johan


Re: Streamlining Subversion patch releases

2022-02-09 Thread Johan Corveleyn
On Wed, Feb 9, 2022 at 2:19 PM Stefan Sperling  wrote:
>
> On Wed, Feb 09, 2022 at 08:01:26AM -0500, Mark Phippard wrote:
> > Anyway, my feeling has been that one of the blockers to being RM is
> > motivation. My feeling has been that it is a fair amount of work that
> > might not go anywhere because we do not have enough interest in
> > reviewing and signing the release. So why put in the effort to do this
> > when the votes are not going to happen?
>
> It is a bit of a chicken and egg problem. We have never had a problem
> getting the release out the door once an RM did step up. Enough people
> always joined in to help once the ball got rolling.

Indeed. In recent years we never had a problem getting enough PMC
testers and signatures.

In fact, getting my build environment dusted off again, and testing
and signing releases, is about the only thing I still do around here
:-). So, dear RM, just give me a tarball (or release zip I should say
for Windows, I guess), and I'll give it a go.

> > We have also always had what I
> > thought was a peculiar policy that the RM's votes did not "count". So
> > often the most motivated member of our community steps forward to do
> > the RM work, and now we have lost the one sure thing vote we would
> > have had for the release.
>
> We have already made the RM's vote count during our most recent releases,
> as far as I remember. At least I did it that way to expedite the process.
> The ASF requires release signatures by at least 3 PMC members. Any further
> restrictions are self-imposed and can be avoided if needed.

Yes, the last couple of releases we relaxed our old "3 *nix + 3
windows" requirement to just "3 PMC sigs (of which at least 1 *nix and
1 Windows)" [1]. That last part (1 *nix and 1 Windows) is a
Subversion-PMC-self-imposed requirement, which could in theory be
lifted (depending on consensus of the PMC), but I'm not sure we
should. In any case, so far we've never been blocked by this.

For me that's also one of the main differences between votes in STATUS
and votes on the release. The voting requirements are different (not
only the "1 *nix and 1 Windows", which applies only to release votes;
but also the rule that backports of bindings and a couple of other
things only require 2 votes in STATUS). Also: a vote in STATUS does
not necessarily imply that I have run the entire testsuite across 3 ra
flavours etc. So a vote there does not mean the same thing as a
release vote.

[1] 
https://subversion.apache.org/docs/community-guide/releasing.html#releasing-votes

-- 
Johan


Re: A two-part vision for Subversion and large binary objects.

2022-01-31 Thread Johan Corveleyn
Replying to a few different points in this thread.

On Jan 27, Julian Foad wrote:
> The user can choose one mode, per WC, from a list of options that may include:
>
>   - off: as in previous versions, no checking, just assume all pristines
> are present
>   - pristines-on-demand: fetch "wanted" pristines; discard others
>   - fetch-only: fetch any pristine that's absent; do not discard

I think, whatever the name of the property here, "off" is confusing
for wanting all pristines (the back-compat / old / default (?)
behaviour).

To me it sounds like I am setting the feature "do not fetch all
pristines" to off, so "please fetch all pristines" with a double
negation.

Maybe we should go for something like:
pristine-fetching = full (or "eager", or "all", i.e. default) | lazy
(or "on-demand")

Perhaps with a third option "lazy-keep" (like your "fetch-only"),
indicating on-demand, but not immediately cleaning it after use (don't
know if this would be useful -- could be added later of course). Or
"lazy-transient" for the "lazy with immediate cleaning after use" as
opposed to "lazy" (which keeps fetched pristines once fetched).


On Sat, Jan 29, 2022 at 9:22 AM Julian Foad  wrote:
>
> Vincent Lefevre wrote:
> >> [...] Specifying a pattern to match the WC path [or] per repository [...]
> >
> >But what if a WC can be accessed from different machines [...]?
>
> Then:
> - The config option should be designed never to assume or depend on the 
> pristine store being in a particular state (such as fully populated).
> - The user might want different behaviour on different machines, or the same 
> on all.
> - The patch I posted yesterday in a separate thread allows the user to set 
> the config option in the user config or per-wc config.
> - I noticed we already have some other config options in the '[working-copy]' 
> config section. We probably should allow the user to set those per-wc too.
> - Julian

Hmm. I think the pristine-fetching strategy that is chosen for a
particular working copy should a property of that working copy. That's
because it has a "persistent" impact on that working copy. Changing
that strategy (if we would support that) severely impacts the disk
layout of that particular working copy. It's not just a runtime thing,
like using "exclusive sqllite locks" or some such (leaves no trace for
the next user).

If it would be a runtime setting, and Alice and Bob would both work on
the same working copy, and the former has "pristine-fetching=full" and
the latter "pristine-fetching=lazy" (or some detailed strategy with
patterns, whatever), the working copy would be changed severely every
time one or the other touches it.

So I think the chosen pristine-fetching strategy for a working copy
should be stored in the WC itself, probably in wc.db.

However, we would still need related runtime config options. But I see
them as "defaults" for when creating a new working copy. Perhaps these
belong in a [working-copy defaults] or [working-copy creation]
section, as opposed to the [working-copy] section which is more about
runtime behaviour.

Basically:
  - The chosen pristine-fetching strategy should be a persistent
property of the WC, to be chosen at creation time.
  - Defaults for this should be part of our runtime-config area (and
perhaps also options for 'svn checkout').
  - We might introduce ways to change the setting of a given WC (but
it's not a must have for the first iteration, I guess)


On Fri, Jan 28, 2022 at 6:11 PM Evgeny Kotkov
 wrote:
>
> Julian Foad  writes:
>
> > We could swap the scanning logic around to do the (quick) check for
> > missing pristines before deciding whether a (slower) file "stat" is
> > necessary. Positives: eliminates the redundant "stat" overhead which may
> > be significant in working trees containing many files. Negatives: some
> > re-work needed in the current implementation.
> >
> > Of these, the last one currently looks viable and useful.
> >
> > Does that one look promising to you?
>
> I might be missing something, but I don't yet see how we could save a stat().
>
> Currently, a pristine is hydrated if and only if the corresponding working
> file is modified.  Let's say we check if a pristine is hydrated beforehand.
> If we find out that pristine is dehydrated, we have to stat(), because if the
> file is modified, then we need to hydrate.  If we find out that pristine is
> hydrated, we still have to stat(), because if the file is no longer modified,
> then we need to dehydrate.

What seems important to me is that, if a WC is set to
pristine-fetching=full (or SVN 1.15 would be working with an older
working copy, without the "pristine-fetching" property (say if
upgrading of the wc format would not be needed)), that the code here
can assume (like the old code) that the pristine is present. No need
for an extra stat, just assume it is there, if not, error out like
today (incidentally, this is a very annoying error to run into (if a
pristine is accidentally deleted for some 

Re: A two-part vision for Subversion and large binary objects.

2022-01-21 Thread Johan Corveleyn
On Fri, Jan 21, 2022 at 5:56 AM Karl Fogel  wrote:
>
> On 20 Jan 2022, Julian Foad wrote:
> >The more I think about this, the more I think we are prematurely
> >complicating the requirements in this respect. I'm going to
> >back-track
> >and posit that a simple per-WC switch should suffice for the vast
> >majority of cases, and has the benefit of simplicity. (The user
> >might
> >wish to set this based on the repository location -- local/fast
> >versus remote/slow.)
>
> Personally I'd be very happy to start with this.  We can always
> improve the client-side UI for the feature more in the future.
>
> >I will note that I previously misunderstood the current
> >'pristines-on-demand' implementation as fetching the pristine
> >before a
> >diff (for example) and discarding it afterwards.  In fact it
> >keeps the
> >pristine as long as the file in question remains in a locally
> >modified
> >state, and only discards the pristine when (before or after some
> >client
> >operation) the file is no longer in a modified state. That is to
> >say, it
> >fetches pristines less often than I had thought.
>
> And it only fetches pristine for commands that absolutely need
> pristine, I assume?  (I think you said earlier that it does not
> fetch for 'commit'.)
>
> I like the trick of keeping the pristine, once fetched, for as
> long as the file is locally modified.
>
> >The only case in which a simple per-WC setting might be
> >unsatisfactory
> >is the following combination:
> >
> >  - the repository is "slow" (and/or offline working is
> >  required);
> >
> >  - and, in a single WC:
> >- the WC data set is "huge" (relative to local disk space) in
> >total; and
> >- there is a subset of files on which the user needs to work
> >(requiring diffs, etc.) often enough that fetching their
> >pristines "on
> >demand" is a problem; and
> >- that subset of files is not "huge" in total; and
> >- that subset of files can be distinguished from the rest by
> >metadata.
> >
> >That is certainly a possible case, but we have no suggestion that
> >it is
> >at all common. It is not one of the cases driving this
> >feature. So I
> >think it is not something to design for at this stage.
>
> Well, that case is almost exactly our use case at my company :-),
> except that I think fetching pristines on demand will be fine.
> Thus, we can live with a per-WC setting.
>
> >I'm going to work on getting something more basic (per-WC yes/no)
> >closer
> >to production-ready and then we can re-assess it.
>
> Sounds good!
>
> Best regards,
> -Karl

I like where this is going. Thanks to all involved for pushing it forward :-).

Just as another data point, at my company we have a slightly different
use case where this feature would be great (I think), and where a
simple per-WC-yes/no switch would work fine. In this case, we'd
probably also want a "system-wide runtime config area default".

The use case: we have a couple of build machines for "official full
builds" (for test, staging, production, ... different stages) of our
major applications. To save time, for most big applications, we keep
re-using the large checked-out working copies (update, build, and
switch to the next release branch if there is a next release). We also
use those same working copies for backporting cherrypick merges to our
release branches (it's all part of our release process, supported by
build scripts and procedures to do these things).

So, currently, our largest build server has 400 such working copies on
disk, and they remain there "dormant" until someone updates, builds,
cherrypick-merges, commits-a-tag-from-WC, ... Totalling around 450 GB
at the moment. Not an absolute killer, but this is a growing number,
and our sysadmins would be quite happy to see that number be +/-
divided by 2 :-). Besides, these build servers are located in our data
centers, "right next to" the SVN server, i.e. having a 1 Gb or 10 Gb
connection to the repository. A perfect fit for "I don't need 99.9% of
those pristines most of the time, and it's blazingly fast to get them
when needed".

Ideally, after pristines-on-demand become possible, I'd do the following:
- Set a system-wide flag to make pristines-on-demand the default for new WC's.
- Run a script to "convert" all existing working copies to
pristines-on-demand (setting the per-WC flag).
- Run a script to "vacuum-pristines" those converted working copies.
- Receive chocolates from our sysadmins (probably not, but I can try).

(BTW: a lot of those working copies are similar, so a feature to have
a "shared pristine store" would also help, but that's another feature
altogether, and perhaps much more difficult to get right -- both
features would solve the wasted-disk-storage problem here, so I'm
happy either way)

Kind regards,
-- 
Johan


Re: New release

2022-01-13 Thread Johan Corveleyn
On Tue, Jan 11, 2022 at 5:12 PM Daniel Sahlberg
 wrote:
> Den tis 11 jan. 2022 15:34Julian Foad  skrev:
>>
>> Johan Corveleyn wrote:
>> > Thanks for starting to get this ball rolling, Daniel.
>>
>> Seconded.
>>
>> >> I have been pondering the question of which release(s) and in what
>> >> order. I think 1.14.2 and 1.10.8 first, then 1.15.x later.
>>
>> Sounds good.
>>
>> As mentioned in another thread just now, I'm now able to work on issue #525 
>> (pristines-on-demand) so we might consider if it's going to fit into the 
>> 1.15.0 time scale. I'm just starting today so if we could consider this in a 
>> few days once we've got some summary/plan/idea of how it might progress that 
>> would be good.
>
> I see several votes for releasing 1.15 "later". Nathan (I think) at one point 
> suggested that 1.15 might be "the performance release" with the "streaming 
> checkouts" from last summer so I think it makes sense to also bring this to 
> completion. So: Later = +1 for me.
>
>>
>> As for release management, I can volunteer at least a little support to a 
>> release manager, based on what I learnt and can remember from doing it a few 
>> times in the last few years.
>
>
> Agree it is good if more hands know the skills. For me January and February 
> are quite busy and I hope we can find someone to do 1.10.8 and 1.14.2 during 
> that timeframe. I might be able to free some time for a 1.15 release in 
> March/April.

In principle I could volunteer for RM, but there are at least 3 things
holding me back:

1. Lack of time, but I guess that goes for a lot of us around here.

2. I'm on Windows, and AFAIU our current release process requires *nix
(at least our docs refer to a lot of unix-specific build tools that
are needed [1]). I could in theory do all those things on another
machine, for instance our own svn-qavm (though I guess I'd need enough
permissions on such a machine to install tools etc), or set up a
temporary (virtual?) machine on my own, but I'm not sure I want to go
through all the hassle (given my previous point). And given the
previous point, I certainly don't have the time to investigate and
update our release process to make it work on Windows (though that
would definitely be useful).

3. I'm on Windows, and am usually the only one who provides a binding
release-vote for the Windows platform, and traditionally we don't
count the RM's own vote among the three required (and at least one per
major platform [2]). I know that's not really required (the RM's vote
is just as valid as any other from a PMC member), but we seem to have
been able to do it this way until now (I think).

I suppose number 3 is not a very big issue, so let's say I have 2.5 reasons :-).
Number 2 (unix required) is the big one.

[1] 
https://subversion.apache.org/docs/community-guide/releasing.html#before-release
[2] 
https://subversion.apache.org/docs/community-guide/releasing.html#releasing-votes

-- 
Johan


Re: New release

2022-01-11 Thread Johan Corveleyn
Thanks for starting to get this ball rolling, Daniel.

On Thu, Jan 6, 2022 at 6:41 AM Nathan Hartman  wrote:
...
> I have been pondering the question of which release(s) and in what
> order. I think 1.14.2 and 1.10.8 first, then 1.15.x later.

+1

> Regarding drumming up support for the backports: I will make an effort
> to review items and look for other good candidates that aren't
> nominated yet.

I'll try to take some closer looks too.

-- 
Johan


Re: Jira issues cleanup

2022-01-11 Thread Johan Corveleyn
Late to the party, but: thanks for doing this. Some more below.

On Tue, Dec 28, 2021 at 12:20 PM Daniel Sahlberg
 wrote:
>
> Thanks Nathan for the quick review!
>
> I'm going to continue to add to this mail to have "one mail to rule them all" 
> and add more issues to the end as I go along. Please feel free to clean up 
> the mail when replying.
>
> Den tis 28 dec. 2021 kl 01:50 skrev Nathan Hartman :
>>
>> > SVN-4848: ARM BUILD ERROR
>> > SVN-3007: perl bindings segfault very often
>> > SVN-3609: Assertion in svn_path_is_canonical, svn_path_join with 'file:' 
>> > URL
>> > SVN-4578: svnadmin pack cannot delete files during packing
>> > SVN-4447: Error Conflict 409
>
>
> I've closed the ones above.

+1

>>
>> > SVN-4639: svn.exe causes ACCESS_VIOLATION
>> > Reported in 2016, no comments, not discussed in the mailing list. 
>> > Relatively sparse on data, I've tested using a trunk build under Windows 
>> > 11 and "works for me".
>> > * Close as cannot reproduce
>>
>> I haven't looked at this one in detail yet; gotta run... I'll try to
>> come back to it.

I agree you can close this as "cannot reproduce".

>
> SVN-667 handle file name case sensitivity edge cases
> I know almost nothing about OSX file systems but I think the more modern ones 
> are case sensitive. This leaves win32, where (I believe) all file systems are 
> case insensitive but most are case preserving. According to my tests it 
> behaves much better than originally described. If someone on OSX could test 
> we should probably close this and add a new issue describing the current 
> state.
> * Close as ... Later?

Yeah, I'd say that issue is 99% solved since 1.7. The "case-only
rename on Windows" problem was fixed in issue
https://issues.apache.org/jira/browse/SVN-3702 (I think this fix also
applies to case-insensitive filesystems on MacOS, though I have not
tested that (but then again, perhaps case-insensitive filesystems on
MacOS are not widely used anymore)). I'd say: let's close SVN-667 as
"resolved", and add an issue link to SVN-3702.

> SVN-3694 SWIG bindings, tempfiles cleanup
> A script in Perl is using SWIG bindings. Filed in 2010 and there is a comment 
> by Roderich Schupp in 2015 "This is not a bug, it's a user error" suggesting 
> to that it is based on incorrect understanding of the SVN pools. According to 
> my test, I can reproduce the original issue but if I update the script 
> according to Roderich Schupp' suggestion, the error goes away.
> * Close as Invalid

+1

> SVN-3398 Seg fault with BDB repos
> Close, since BDB is deprecated since Subversion 1.8.
> * Close as Won't fix

+1

> SVN-3494 moving a branch stumps svnmerge.py
> Very sparse on details. No mentioning of the mailing list (but I didn't 
> search the archives.
> * Close as Invalid

+1, or as "won't fix", because svnmerge.py is part of contrib, and
contrib is not supported anymore (not by the Subversion community
anyway) -- and in any case svnmerge.py is deprecated I think. IIRC,
svnmerge.py was a script that did some form of merge tracking, before
the core implementation arrived in Subverison 1.5.

Out of curiosity I've taken a quick look in its documentation: the
README 
(https://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svnmerge/svnmerge.README)
refers to a wiki page that still exists:
https://www.orcaware.com/svn/wiki/Svnmerge.py. That page contains a
FAQ entry:
[[[
How do I migrate from svnmerge.py to Subversion 1.5's Merge Tracking?
Use svnmerge-migrate-history.py to convert the merge history written
by svnmerge.py into Subversion 1.5's format.
]]]

In any case I think it's pretty OK to close all outstanding issues
about svnmerge.py.

> SVN-2802 Tests failing to cleanup bdb repositories over ra_neon
> BDB and Neon are both deprecated.
> * Close as Won't fix

+1

> * SVN-3276 Access violation (svn move, using some java client)
> Reported in 2008 on 1.5.x and there is a comment that it is not directly 
> using the javahl bindings but a higher level client. Nothing happened since 
> 2010.
> * Close as Invalid

+1

> * SVN-2635 svnsync pre-revprop-change hook failed
> An error occured when using a batch file as pre-revprop-change hook script. 
> Problem went away when using a compiled program. Lesson learned: Write proper 
> scripts.
> * Close as Invalid

+0. I'm not sure about this one (maybe as "cannot reproduce", but I
haven't tried to reproduce it myself). I think using BAT for hook
scripts on Windows should be fine in general, so it's not clear to me
why this failed. But it's oh so fragile and difficult. Maybe there is
some quoting issue or something similar. Hard to say. Perhaps, to be
able to make the decision for closing it with "cannot reproduce",
someone might need to try the example the user gave in:
https://issues.apache.org/jira/browse/SVN-2635?focusedCommentId=14923562=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-14923562

> * SVN-3534 Failed ra_neon commit without --no-unlock results in dead 

Re: A strong WTF on compiling out plaintext password support by default?!

2021-10-03 Thread Johan Corveleyn
On Sun, Oct 3, 2021 at 12:39 PM Daniel Sahlberg 
wrote:
>
> Hi,
>
> I would like to reboot this thread once again. I have read through all
messages and I have tried to make a summary of the important points. The
date/time references are as seen in
https://mail-archives.apache.org/mod_mbox/subversion-dev/.
>
> There are numerous descriptions of problems with the different keyrings.
I think the most important are:
> - Some requiring GUI boxes to unlock, even showing GUI boxes on the local
display while running over SSH
> - No easy way to work with the keyrings non-interactive
>
> The original request was to find some way to store credentials in the
plaintext cache.
>
> Two different solutions have been presented:
> - Reverting the compile time default to enable the plaintext password
store, while setting runtime configuration options to disable it, following
the example set by OpenBSD.
> Four persons seem to have expressed support for this idea (Mark Phippard,
Johan Corveleyn, myself (2021-08-26 13:34 to 2021-08-27 07:56) and Martin
Edgar Furter Rathod (2021-08-31 12:46)). The former three prefering it over
the svn auth, but accepting the idea of svn auth. Martin suggested to move
the plaintext support to a separate library that could be installed
separately (or removed after installation), no-one picked up this idea.
>
> - Adding an svn auth add command
> One person seem to have expressed support for this (Stefan Sperling
(2021-08-24 08:27 and again 2021-08-27 12:40)). The first message is the
earliest suggestion of svn auth add that I can find. In the latter message,
Stefan clarifies that he belives svn auth add is the better design but
wouldn't stand in the way of consensus. He also wrote he had been willing
to invest time in writing the code for svn auth add but not for switching
the default compile-time behaviour.
> Regarding the need to validate the credentials with the server, it seems
this was based on pseudocode by Johan Corveleyn (2021-08-24 14:25) doing
svn ls, and then asking for a new password if svn ls failed. It was
mentioned by Daniel Shahaf that svn ls might succeed even if the
credentials were incorrect (as with svn.apache.org offering anonymous
access) or that the check only verified "r" access and later code might
require "w" access.
> It seems to be a general agreement that it is currently not possible to
validate if some credentials have a certain level of access to a certain
path, in a general case. It was suggested to add RA API calls, but these
would only work with new versions of both the server and the client.
> There has been a significant discussion whether to verify the credentials
and whose responsibility it is to store correct credentials (with
appropriate access).
>
>  This is the end of the summary. Below are my personal reflections
>
> I have ignored the discussion regarding rethorics since I hope we can
continue without it. If someone feels hurt because of the discussion I hope
it can be worked out without affecting the future discussion in this
thread. I think all contributors have come with valuable input on the
design questions so far.
>
> It seems most messages are concerning the svn auth add solution. To add
this command without contacting the server seems to be quite a bit of code
but not impossible. It would also be a client-side only solution not
requiring any specific server version. To add support on the server side
might be difficult, especially considering that (part of) the
authentication/authorization might be done outside of the Subversion code.
>
> The decision to change the compile time default was made in 2018-10-31
within less than 12 hours and without much debate. It was committed less
than 19 hours after the initial message.
> I'm assume the impact of an incorrect password in the store is
application dependant but a password can grow stale even if it was correct
at the time of writing so the administrator would have to manage this
anyhow. From my point of view, verifying the credentials is nice but not
necessary to solve the initial use case.
>
> Until we completely remove the possibility to read the plaintext store
security conscious organisation might have issues. Having svn auth add as
an official command makes it more obvious that this possibility exists -
instead of users running unofficial scripts or even manually editing the
config files. Anyone who feel it should not even read the plaintext
password store could convince their vendor to remove it or roll their own.
>
>  Below is  my understanding of the decision tree and my proposal:
>
> The first point where we must reach agreement is whether or not to do
anything at all:
>  * There has been several complaints from several different users over
>the last years who's workflow has been interrupted. There may be users
>or organisations who dispro

Re: SVN 1.14.1 slightly broken on Windows for working copies in drive root?

2021-09-30 Thread Johan Corveleyn
On Thu, Sep 30, 2021 at 11:24 AM Thomas Singer
 wrote:
>
> Hello,
>
> I have a working copy of the SVN repository at D:\src\svn. With SVN
> 1.14.1 binaries I'm getting following status output
>
> D:\src\svn>svn.exe status -u
> Status against revision: 1893746
>
> When I create a 'substed' drive G: for that directory using
>
> D:\src\svn>subst g: D:\src\svn
>
> D:\src\svn>g:
>
> I'm getting following output (note the exclamation mark):
>
> G:\>C:\temp\svn\svn.exe status -u
> !  1892650   .
> Status against revision: 1893746
>
> Is this a known/already fixed regression?

Yes, this is a known issue. However it's not a bug in Subversion, but
in APR 1.7.x. If you use APR 1.6.5 you'll see the problem will no
longer occur.

It has been reported here some time ago ("Subversion reports status
fault on substituted drive"):
https://lists.apache.org/thread.html/4797303a065e9c1091bbf445acaa3121ccb27ac2d661eb0debd1cf40%40%3Cdev.subversion.apache.org%3E

It has also been brought to the dev@apr list, where it has been
discussed somewhat, but so far without conclusion:
https://lists.apache.org/thread.html/r28e478074055436b27b13f7487203448079aea5adfe4207007ad7ea9%40%3Cdev.apr.apache.org%3E

-- 
Johan


Re: Subversion on Solaris (was Re: A strong WTF on compiling out plaintext password support by default?!)

2021-09-02 Thread Johan Corveleyn
On Thu, Sep 2, 2021 at 7:29 AM Daniel Sahlberg
 wrote:
>
> Den mån 23 aug. 2021 kl 12:15 skrev Johan Corveleyn :
>>
>> Anyway, concerning package maintainers, for Solaris, I'm getting even
>> more depressed ...
>> * We were using Collab.net's distro, but apparently their Solaris
>> build is no longer maintained:
>> https://www.collab.net/downloads/subversion
>> * Wandisco then? Nope:
>> https://www.wandisco.com/source-code-management/subversion#solaris ...
>> only Windows, Linux and MacOS.
>> * Fortunately, there is still a relatively recent build on OpenCSW:
>> https://www.opencsw.org/packages/subversion/
>
>
> I have been working with Dagobert Michelsen of OpenCSW to build Subversion 
> 1.14.1 (mailing list thread starting at 
> http://lists.opencsw.org/pipermail/users/2021-August/010493.html).
>
> Due to my relative inexperience with Solaris I have not been able to compile 
> Subversion myself so I have had some problems to execute the complete test 
> suite but I have run the majority of tests and it all seems fine. The failing 
> tests are because some missing tooling and not because of errors in the 
> Subversion build.
>
>>
>> (-> Wandisco's link should be removed from
>> http://subversion.apache.org/packages.html#solaris -- making that
>> section empty ... or should we add a link to opencsw then?)
>> (-> this abandoning of packagers / maintainers makes me feel our
>> ecosystem is breaking down)
>
>
> This was implemented in the main site as r1892681
>
>> So I guess my best shot is contacting the maintainer of the openCSW
>> package, and asking him to add the --enable-plaintext-password-storage
>> configure flag and make a new build then.
>
>
> I have raised this question, see mailing list thread above.
>
> Kind regards,
> Daniel

Thanks Daniel. You're a star! :-)

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-27 Thread Johan Corveleyn
On Fri, Aug 27, 2021 at 2:03 PM Daniel Shahaf  wrote:
>
> Consensus can only result from an open discussion.  That's a standard
> ASF operating principle.
>
> The rhetoric in this thread effects chill on anyone who has an opinion
> different from the opinion of certain speakers.

I must say I have not seen / felt any rhetoric. Only on-topic
arguments pro and contra certain approaches. So I'm a bit lost here.

I rebooted this thread last Monday after it lay low for a week or so.
Not because I wanted to start an argument, but mainly to express my
frustration over this issue *as an svn admin* (because I was
investigating, in our company, the upgrade to a more recent svn client
on a build server -- which I have since postponed, possibly forever,
mainly because of this issue).

I was happy to see so many people weighing in with their thoughts and
suggestions. As far as I could see, this was a productive thread.

> Therefore, this thread _cannot_ consense at this time.
>
> I think we should (US)table the matter for a few weeks and then (UK)table
> it again.

Np from my part, we can (US)table it for a while. For me, there is no
urgency. We'll just not upgrade svn on our build machine for the time
being (no rush). But of course, there are others (including the OP of
this thread) who might be interested in a solution. Anyway, what's a
couple of weeks in an svn release cycle ;-) ...

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-27 Thread Johan Corveleyn
On Thu, Aug 26, 2021 at 3:44 PM Mark Phippard  wrote:
>
> On Thu, Aug 26, 2021 at 6:30 AM Stefan Sperling  wrote:
>
> > The answer might be that 'svn authz add' should simply not contact the
> > server to check credentials. Which means we cannot check upfront whether
> > the user running 'svn auth add' knows valid credentials.
>
> Yeah that seems reasonable. Basically an "official" version of what
> the scripts are doing.
>
> All that said, I still favor restoring the previous behavior where
> this is enabled by default and a packager can compile it out if they
> so choose.

+1, I would prefer that as well (was quite happy with the previous
behavior :-)).

If that's not an option (because of $security-reasons / loud voices),
a workaround with some 'svn auth' extension would definitely help
mitigate the break in usability / backwards compatibility that now
occurred.

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-26 Thread Johan Corveleyn
On Thu, Aug 26, 2021 at 4:31 PM Daniel Shahaf  wrote:
>
> Johan Corveleyn wrote on Thu, 26 Aug 2021 12:41 +00:00:
> > On Wed, Aug 25, 2021 at 8:52 PM Daniel Shahaf  
> > wrote:
> > > This thread is on dev@ as opposed to users@, so I'm trying to solve the
> > > problem generically, rather than just your specific $WORK scenario.
> >
> > I get the feeling I'm missing something, but I still don't understand
> > what authz has to do with the problem at hand here (i.e. detecting
> > expired passwords so we can ask the user for the new one).
>
> Your problem statement is "Replace cached passwords that are expired".
>
> I'm solving a more general problem statement, "Replace cached passwords
> that can't be used to commit with", regardless of why.

Okay, sure, but that's another question than what we started with.

BTW, I don't really follow how you can replace just a cached password
for getting "write access". Doesn't "upgrading from read-only to
read-write access" also imply using another username? Or can I have
two passwords for one user, where one gives me read-only access and
one gives me write access?

I.e. shouldn't the more general problem statement be "Replace cached
username+passwords that can't be used to commit with"?

(hence my first response with "huh, shouldn't a --username make that
problem moot"? I.e. the user knows which user he's willing to connect
with, and he knows the authz rules, he just wants the password to be
checked and "re-cached" if need be)

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-26 Thread Johan Corveleyn
On Wed, Aug 25, 2021 at 8:52 PM Daniel Shahaf  wrote:
> Johan Corveleyn wrote on Wed, 25 Aug 2021 07:16 +00:00:
> > On Tue, Aug 24, 2021 at 7:03 PM Daniel Shahaf  
> > wrote:
> > > Johan Corveleyn wrote on Tue, 24 Aug 2021 15:22 +00:00:
> > > > On Tue, Aug 24, 2021 at 4:45 PM Daniel Shahaf  
> > > > wrote:
> > > > > Johan Corveleyn wrote on Tue, 24 Aug 2021 14:25 +00:00:
> > > > > > OTOH, if this kind of behaviour is too far-fetched for a single
> > > > > > subcommand, I might be able to do it by invoking two commands, if I
> > > > > > could succesfully (and invisibly) detect that a cached password is 
> > > > > > no
> > > > > > longer correct. As in:
> > > > > >
> > > > > > svn ls --non-interactive $URL >/dev/null
> > > > > > # if exit-code != 0, parse error code to see if it indicates 
> > > > > > "auth failed"
> > > > > > if ("auth failed"):
> > > > > > svn auth add $URL
> > > > > >
> > > > >
> > > > > What happens if a valid username/password are cached that have read-
> > > > > only access and one wants to preseed a username/password that have 
> > > > > read-
> > > > > write access?
> > > >
> > > > I don't know. We don't have that use case at $company, trying to keep
> > > > things simple :-).
> > > >
> > > > Ah but shouldn't 'svn auth' carry an optional --username parameter? In
> > > > that case, I don't see the problem, I guess.
> > >
> > > My point here is that that pseudocode doesn't handle ensuring that the
> > > cached credentials have read-write access.  Existence of «svn auth 
> > > --username»
> > > won't change that, because the «svn auth» call is inside an if() block
> > > whose condition will false negative.
> > >
> > > Is there a way to test whether one has rw access without actually doing
> > > a commit or a revprop edit?  It's possible with hooks, of course, but is
> > > it also possible without hooks?
> >
> > I'm not sure I understand: why would I need to know that the cached
> > credentials have read-write access?
> >
>
> Your pseudocode detects credentials that have no read access, whether
> for lack of authz or for failing to authn.

Oh? I was assuming that we would be able to discern failed authn (as
in "incorrect username or password") from failed authz (as in "403
Forbidden"). Is that not the case? Do both failed authn and failed
authz yield the same error code / message?

I'm only interested in failed authn, because this entire thread is
about the disabling of the plaintext password cache, and I just want
to know if the cached password is now invalid (with failed authn) so I
have to ask the user for a new one (to potentially use another tool to
inject that new password into the plaintext cache).

> I was asking how to
> generalize this to detecting credentials that successfully authn and
> authz but only for read-only access rather than for full access.  That
> would be necessary if the "preseeded" credentials are to be used for
> a write operation (a commit or a revprop edit).
>
> > I only want to verify the authentication part,
>
> This thread is on dev@ as opposed to users@, so I'm trying to solve the
> problem generically, rather than just your specific $WORK scenario.

I get the feeling I'm missing something, but I still don't understand
what authz has to do with the problem at hand here (i.e. detecting
expired passwords so we can ask the user for the new one).

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-25 Thread Johan Corveleyn
On Tue, Aug 24, 2021 at 7:03 PM Daniel Shahaf  wrote:
> Johan Corveleyn wrote on Tue, 24 Aug 2021 15:22 +00:00:
> > On Tue, Aug 24, 2021 at 4:45 PM Daniel Shahaf  
> > wrote:
> > > Johan Corveleyn wrote on Tue, 24 Aug 2021 14:25 +00:00:
> > > > OTOH, if this kind of behaviour is too far-fetched for a single
> > > > subcommand, I might be able to do it by invoking two commands, if I
> > > > could succesfully (and invisibly) detect that a cached password is no
> > > > longer correct. As in:
> > > >
> > > > svn ls --non-interactive $URL >/dev/null
> > > > # if exit-code != 0, parse error code to see if it indicates "auth 
> > > > failed"
> > > > if ("auth failed"):
> > > > svn auth add $URL
> > > >
> > >
> > > What happens if a valid username/password are cached that have read-
> > > only access and one wants to preseed a username/password that have read-
> > > write access?
> >
> > I don't know. We don't have that use case at $company, trying to keep
> > things simple :-).
> >
> > Ah but shouldn't 'svn auth' carry an optional --username parameter? In
> > that case, I don't see the problem, I guess.
>
> My point here is that that pseudocode doesn't handle ensuring that the
> cached credentials have read-write access.  Existence of «svn auth --username»
> won't change that, because the «svn auth» call is inside an if() block
> whose condition will false negative.
>
> Is there a way to test whether one has rw access without actually doing
> a commit or a revprop edit?  It's possible with hooks, of course, but is
> it also possible without hooks?

I'm not sure I understand: why would I need to know that the cached
credentials have read-write access?

I only want to verify the authentication part, and see if the password
that was cached is no longer valid (in which case we need to ask the
new one to the user). I don't really care at this point whether we're
talking about read-only or read-write access, just want to refresh the
password in the cache (for whatever username the user is using ...
it's his business to use the correct username for whatever use case
he's using here :-)).

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-24 Thread Johan Corveleyn
On Tue, Aug 24, 2021 at 4:45 PM Daniel Shahaf  wrote:
>
> Johan Corveleyn wrote on Tue, 24 Aug 2021 14:25 +00:00:
> > OTOH, if this kind of behaviour is too far-fetched for a single
> > subcommand, I might be able to do it by invoking two commands, if I
> > could succesfully (and invisibly) detect that a cached password is no
> > longer correct. As in:
> >
> > svn ls --non-interactive $URL >/dev/null
> > # if exit-code != 0, parse error code to see if it indicates "auth 
> > failed"
> > if ("auth failed"):
> > svn auth add $URL
> >
>
> What happens if a valid username/password are cached that have read-
> only access and one wants to preseed a username/password that have read-
> write access?

I don't know. We don't have that use case at $company, trying to keep
things simple :-).

Ah but shouldn't 'svn auth' carry an optional --username parameter? In
that case, I don't see the problem, I guess.

> > But then the burden is on me detecting the "auth failed" correctly,
> > and making sure it's the "password refused" kind of auth failure (I
> > guess there's an error code for that).
>
> There's an error code for that, but it's the E42 value in stderr,
> not the exit code.  The exit code is generally 1 (unless segfault or
> something).

Yup, parsing the error code from stderr was what I was thinking of.
Not great, but it'd work.

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-24 Thread Johan Corveleyn
On Tue, Aug 24, 2021 at 1:24 PM Stefan Sperling  wrote:
>
> On Tue, Aug 24, 2021 at 12:16:48PM +0200, Johan Corveleyn wrote:
> > But: obviously I have disabled, in the runtime config area, the
> > warning prompt that "Your password will be stored in plaintext" (I
> > have disabled it system-wide, in /etc/subversion). Yes, we know this
> > and we accept it. I would not like this nag screen to be forced with
> > no way for an admin to disable it. Ah, I might be able to write a
> > wrapper script to dev/null the warning :-). All this effort for ...
> > nothing (from my perspective).
> >
> > Perhaps a meta-itch here: the old behaviour has been there for 20
> > years, and then we decided to change this. In the
> > super-stable-mature-super-backwards-compatible part of our lifecycle.
> > Not the best timing I think. Perhaps this should have rather been on
> > the 2.0-wishlist ("Come up with a better pwd caching solution on
> > non-Windows platforms").
>
> OK, I see why my proposal as it is wouldn't help you.
> But if we tweak it slightly, it could work?
>
> We could make 'svn auth add' only ask for a password if no valid
> password can be found in the cache. The command would first contact
> the server and if it manages to authenticate it would do nothing else.

Thanks for thinking along, Stefan :-).

Yes, that might work. But perhaps 'add' wouldn't be a great name for
this kind of behaviour. Maybe something like 'svn auth cache-validate
$URL' or 'cache-freshen' or something like that.

OTOH, if this kind of behaviour is too far-fetched for a single
subcommand, I might be able to do it by invoking two commands, if I
could succesfully (and invisibly) detect that a cached password is no
longer correct. As in:

svn ls --non-interactive $URL >/dev/null
# if exit-code != 0, parse error code to see if it indicates "auth failed"
if ("auth failed"):
svn auth add $URL

But then the burden is on me detecting the "auth failed" correctly,
and making sure it's the "password refused" kind of auth failure (I
guess there's an error code for that).

> And we could avoid showing a plaintext prompt. Instead we could require
> a --plaintext command line option to allow storage in plaintext.
> Without --plaintext, 'svn auth add' would fail if the password cannot
> be stored encrypted and general plaintext-support was not enabled at
> compile time. The only interactive component presented to the user would
> be a password prompt.

Uhuh, sound sensible. Perhaps it should be '--allow-plaintext' or
something, so that, like now, it tries to use encrypted storage if
available, but is allowed to fallback to plaintext if there is nothing
else. Or do we rather want an option to force plaintext, even if there
is encrypted storage available (should that be named --force-plaintext
then?)? Dunno.

> Failing that, I agree that the best solution would be to simply
> revert the default setting of the compile-time switch back to 'yes'.
>
> This won't make the hardline "no plaintext, please" crowd very happy.
> But the middle ground, where all this can be configured at run-time
> probably won't satisfy them either. I guess that is why a compile-time
> switch exists in the first place.

To make things even more complicated, we could add another
compile-time switch (which would not be on by default!) to
compile-time disable support for the --allow-plaintext option to 'svn
auth add' :-). Companies / packagers that are extra sensitive can roll
their own then.

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-24 Thread Johan Corveleyn
[ sorry Robby, I left you out of a previous reply -- looping you back
in in case you're interested in this tangent ... ]

On Tue, Aug 24, 2021 at 10:34 AM Stefan Sperling  wrote:
>
> On Mon, Aug 23, 2021 at 02:45:44PM +0200, Johan Corveleyn wrote:
> > Thanks, those are good efforts (and thanks to both Daniels for writing
> > them), but I'm afraid those workarounds are not good enough. The thing
> > is: this is not for me alone. This needs to be handled in buildscripts
> > that can be run by around 50 developers.
>
> One thing is unclear to me:
>
> At some point, someone has to run an svn command to get the passward
> cached on Solaris in the first place or build scripts would be failing.
>
> How is this done? Each of the 50 developers ran 'svn checkout' or
> something similar to get the password cached? Or does the password
> get cached in a non-interactive, automated way?
>
> The point of this question is to understand whether my 'svn auth add'
> proposal described elsewhere in this thread would solve your problem.

These buildscripts are run manually / interactively on this machine
(developers take turns for this weekly task, for different
applications). For most applications there is a canonical (shared)
working copy on this build-server, so they reuse that (or otherwise
they can set one up quickly with a script). The buildscripts are
written in ant (we're building Java applications actually).

The ant targets that do something with svn have a
"depends=svn-checkpwd" clause, which makes them first call the
"svn-checkpwd" target. This does a minimal password-requiring thing
with svn (I think it is something like 'svn ls https://svnserver/repo
>/dev/null'). If the cached password is still correct, user sees
nothing (carry on), if not they get a password prompt and type in the
new password.

I suppose I could rewrite that 'svn-checkpwd' target to use 'svn auth
add' or something similar, but I should also have a way to verify
whether the cached password is still valid (so I can get the same
behaviour as before: only bother the user if the cached password is no
longer valid).

But: obviously I have disabled, in the runtime config area, the
warning prompt that "Your password will be stored in plaintext" (I
have disabled it system-wide, in /etc/subversion). Yes, we know this
and we accept it. I would not like this nag screen to be forced with
no way for an admin to disable it. Ah, I might be able to write a
wrapper script to dev/null the warning :-). All this effort for ...
nothing (from my perspective).

Perhaps a meta-itch here: the old behaviour has been there for 20
years, and then we decided to change this. In the
super-stable-mature-super-backwards-compatible part of our lifecycle.
Not the best timing I think. Perhaps this should have rather been on
the 2.0-wishlist ("Come up with a better pwd caching solution on
non-Windows platforms").

-- 
Johan


Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-23 Thread Johan Corveleyn
On Mon, Aug 23, 2021 at 1:50 PM Nathan Hartman  wrote:
>
> On Mon, Aug 23, 2021 at 6:15 AM Johan Corveleyn  wrote:
>>
>> On Fri, Aug 7, 2020 at 7:01 AM Robby Zinchak  wrote:
>> >
>> > Small rant here from a very long time subversion user, regarding 
>> > subversion project's decision to compile out plaintext password storage by 
>> > default (https://marc.info/?l=subversion-commits=154101482302608=2).
>> >
>> > There are a tremendous number of scenarios where users would desire to use 
>> > subversion without a keyring -- for me, that's today running Ubuntu 20.04 
>> > and trying to set up an automated subversion client on a server VM.  I 
>> > obviously can't be logging into a keyring every time the server reboots, 
>> > that'd be idiotic.
>> >
>> > I cannot fathom how the team thought this was a good decision.  It reeks 
>> > of devs thinking "we know better, force the users to do it this way," 
>> > without actually understanding the needs of your users.
>> >
>> > I'm left with four solutions as far as I can see it:
>> >
>> > 1) Crowbarring one of the supported keyrings into not needing a keyring 
>> > password.  Assuming this is even possible, it seems like a lot of extra 
>> > work with no benefit, and added fragility.  I am loathe to dive into a 
>> > whole set of docs to try and figure this out (assuming it's even 
>> > possible), when the old methods worked just fine.
>> >
>> > 2) Compiling my own subversion with the enable-plaintext-password-storage 
>> > flag -- obviously insecure since there's no way I'll be able to keep up 
>> > with software updates.  And I've heard it's quite difficult to compile 
>> > subversion, so that'll waste precious time I could be spending on 
>> > something else that's actually productive for my business.
>> >
>> > 3) Finding an ubuntu package overlay by a third party, questionably 
>> > insecure since now I have to trust an unofficial/unvetted third party with 
>> > providing svn builds.
>> >
>> > 4) Bite the bullet and just switch to another VCS
>> >
>> > Every time version control comes up in dev conversations among my peers, I 
>> > go to great lengths to defend SVN against the many criticisms my peers 
>> > level at it and promote it to other devs looking for a quality VCS.  But 
>> > honestly this decision is one of the most myopic ones I've seen in years 
>> > on any software project and reeks of the project developers making an 
>> > idealistic stand that inconveniences users with no practical real-world 
>> > benefit.  The decision should be left to the user, rather than forcing 
>> > them into a difficult situation.  The earlier change to make plaintext 
>> > something users have to intentionally opt into makes total sense so that 
>> > users are aware of what they're opting into - but removing it entirely is 
>> > too far.  I guarantee you, right now there are people trying to puzzle 
>> > through this stack overflow answer, giving up, and switching to git.  
>> > (https://stackoverflow.com/questions/2899209/how-to-save-password-when-using-subversion-from-the-console)
>> >   This is a downright awful decision for the overall long term health of 
>> > what's left of the subversion userbase.
>> >
>> > I would love to hear what the expected workaround is for users running 
>> > automated subversion clients on server VMs, because all the options look 
>> > rather terrible.
>> >
>> > Thanks for listening to my rant, and be assured it comes only from a place 
>> > of wanting to see subversion succeed.
>> >
>> > Best,
>> > Robby
>>
>> Late to te party, but I have to agree with Robby here. I'm only
>> running into this now, since we'd like to upgrade the 1.9 client on
>> our Solaris build machine to a more recent version ... sigh.
>>
>> I know the decision to disable plaintext pwd storage by default was
>> briefly discussed on this very list [1], but sadly I didn't pay
>> attention back then. I have a lot of respect for all people involved
>> here, but I think this was a mistake, especially WRT server machines
>> which don't have a GUI, no X11 etc. Or even if they have it installed,
>> why force additional work on users / sysadmins that have been running
>> these machines for years, and now have to jump through additional
>> hoops, even if they decided before (through explicit configuration)
>> that they were OK with

Re: A strong WTF on compiling out plaintext password support by default?!

2021-08-23 Thread Johan Corveleyn
On Fri, Aug 7, 2020 at 7:01 AM Robby Zinchak  wrote:
>
> Small rant here from a very long time subversion user, regarding subversion 
> project's decision to compile out plaintext password storage by default 
> (https://marc.info/?l=subversion-commits=154101482302608=2).
>
> There are a tremendous number of scenarios where users would desire to use 
> subversion without a keyring -- for me, that's today running Ubuntu 20.04 and 
> trying to set up an automated subversion client on a server VM.  I obviously 
> can't be logging into a keyring every time the server reboots, that'd be 
> idiotic.
>
> I cannot fathom how the team thought this was a good decision.  It reeks of 
> devs thinking "we know better, force the users to do it this way," without 
> actually understanding the needs of your users.
>
> I'm left with four solutions as far as I can see it:
>
> 1) Crowbarring one of the supported keyrings into not needing a keyring 
> password.  Assuming this is even possible, it seems like a lot of extra work 
> with no benefit, and added fragility.  I am loathe to dive into a whole set 
> of docs to try and figure this out (assuming it's even possible), when the 
> old methods worked just fine.
>
> 2) Compiling my own subversion with the enable-plaintext-password-storage 
> flag -- obviously insecure since there's no way I'll be able to keep up with 
> software updates.  And I've heard it's quite difficult to compile subversion, 
> so that'll waste precious time I could be spending on something else that's 
> actually productive for my business.
>
> 3) Finding an ubuntu package overlay by a third party, questionably insecure 
> since now I have to trust an unofficial/unvetted third party with providing 
> svn builds.
>
> 4) Bite the bullet and just switch to another VCS
>
> Every time version control comes up in dev conversations among my peers, I go 
> to great lengths to defend SVN against the many criticisms my peers level at 
> it and promote it to other devs looking for a quality VCS.  But honestly this 
> decision is one of the most myopic ones I've seen in years on any software 
> project and reeks of the project developers making an idealistic stand that 
> inconveniences users with no practical real-world benefit.  The decision 
> should be left to the user, rather than forcing them into a difficult 
> situation.  The earlier change to make plaintext something users have to 
> intentionally opt into makes total sense so that users are aware of what 
> they're opting into - but removing it entirely is too far.  I guarantee you, 
> right now there are people trying to puzzle through this stack overflow 
> answer, giving up, and switching to git.  
> (https://stackoverflow.com/questions/2899209/how-to-save-password-when-using-subversion-from-the-console)
>   This is a downright awful decision for the overall long term health of 
> what's left of the subversion userbase.
>
> I would love to hear what the expected workaround is for users running 
> automated subversion clients on server VMs, because all the options look 
> rather terrible.
>
> Thanks for listening to my rant, and be assured it comes only from a place of 
> wanting to see subversion succeed.
>
> Best,
> Robby

Late to te party, but I have to agree with Robby here. I'm only
running into this now, since we'd like to upgrade the 1.9 client on
our Solaris build machine to a more recent version ... sigh.

I know the decision to disable plaintext pwd storage by default was
briefly discussed on this very list [1], but sadly I didn't pay
attention back then. I have a lot of respect for all people involved
here, but I think this was a mistake, especially WRT server machines
which don't have a GUI, no X11 etc. Or even if they have it installed,
why force additional work on users / sysadmins that have been running
these machines for years, and now have to jump through additional
hoops, even if they decided before (through explicit configuration)
that they were OK with plaintext password storage (= their decision /
responsability).

I have been defending Subversion at my company for a long time,
highlighting its stability, simplicity and care for *backwards
compatibility*. Unfortunately, backwards compatibility is broken here
(I understand security can trump backwards compatibility, but to me
this feels more like a "let's make this even more inconvenient" kind
of security; not plugging a glaring security hole). So there goes one
of my most important arguments pro SVN :-(.

I know Stefan Sperling suggested in a reply to convince package
maintainers, if necessary, to re-enable it with a configure flag (as
he did for OpenBSD). But isn't that world upside down? Should every
packager now explicitly enable it? Why not leave the default as it
was, and tell package maintainers to disable it if they feel sensitive
about this?

Anyway, concerning package maintainers, for Solaris, I'm getting even
more depressed ...
* We were using Collab.net's distro, but 

Re: [PATCH] limit diff effort to fix performance issue

2021-06-09 Thread Johan Corveleyn
On Tue, Jun 8, 2021 at 3:29 PM Nathan Hartman  wrote:
>
> On Tue, Jun 8, 2021 at 5:55 AM Stefan Sperling  wrote:
> >
> > On Tue, Jun 08, 2021 at 01:45:00AM -0400, Nathan Hartman wrote:
> > > In order to do some testing, I needed some test data that reproduces
> > > the issue; since stsp can't share the customer's 100MB XML file, and
> > > we'd probably want other inputs or sizes anyway, I wrote a program
> > > that attempts to generate such a thing. I'm attaching that program...
> > >
> > > To build, rename to .c extension and, e.g.,
> > > $ gcc gen_diff_test_data.c -o gen_diff_test_data
> > >
> > > To run it, provide two parameters:
> > >
> > > The first is a 'seed' value like you'd provide to a pseudo random
> > > number generator at init time.
> > >
> > > The second is a 'length' parameter that says how long (approximately)
> > > you want the output data to be. (The program nearly always overshoots
> > > this by a small amount.)
> > >
> > > Rather than using the system's pseudo random number generator, this
> > > program includes its own implementation to ensure that users on any
> > > system can get the same results when using the same parameters. So if
> > > different people want to test with the same sets of input, you only
> > > have to share 2 numbers, rather than send each other files >100MB of
> > > useless junk.
> > >
> > > Example: Generate two files of approx 100 MB, containing lots of
> > > differences and diff them:
> > >
> > > $ gen_diff_test_data 98 100m > one.txt
> > > $ gen_diff_test_data 99 100m > two.txt
> > > $ time diff one.txt two.txt > /dev/null
> > >
> > > With the above parameters, it takes my system's diff about 50 seconds
> > > to come up with something that looks reasonable at a glance; svn's
> > > diff has been crunching away for a while now...
> >
> > Thank you Nathan, this is incredibly useful!
> >
> > Would you consider committing this tool to our repository, e.g. somewhere
> > within the tools/dev/ subtree?
>
>
> Sure, done in r1890601.
>
> It's in tools/dev/gen-test-data/gen_diff_test_data.c.
>
> I added the gen-test-data directory in case we want to add other
> sample data generators in the future.

As for test data, I just remembered something: in 2015 Bert developed
a tool called "AnonymizedFileDumper", after some discussions we had
during a hackathon and on IRC (related to blame and diff performance).
With this tool one can create a dump file from (part of) a repository,
with all text lines replaced by their CRC32 checksum (so identical
lines remain identical, but other than that the actual information is
mostly gone). If you combine this with svndumpfilter for stripping out
the log messages and the author names, I think it's pretty much
stripped of all sensitive information (I remember I asked Bert to add
'eliding autor names and log messages' as extra features of his dumper
tool, but don't remember whether he eventually got around to that). It
is the perfect tool for creating test data out of real repositories
out there, without leaking company data, so other devs can take a
look.

I don't have the tool handy anymore, but I just searched the IRC logs
and found some mentions of it here:
https://colabti.org/irclogger/irclogger_log_search/svn-dev?search=nonymized=search=20150101-20151231=checked

The binary download link still works, but it's a Windows binary. I
don't know if the sources are still available from the sharpsvn
repository.

@Stefan: maybe you can use this to create an anonymized test case out
of the 100 MB XML file of the elego client? You'd need a Windows
machine if you want to use that binary from 2015.

@Bert: WDYT? Are the sources still out there? Maybe this can be ported
to "plain old svn test tools" (perhaps with the help of someone here
that can spend some time on it)?
(and hello by the way :-))

--
Johan


Re: [PATCH] limit diff effort to fix performance issue

2021-06-08 Thread Johan Corveleyn
On Tue, Jun 8, 2021 at 3:24 PM Stefan Sperling  wrote:
>
> On Tue, Jun 08, 2021 at 02:57:34PM +0200, Johan Corveleyn wrote:
> > Okay, I focused on the first revision causing the annotate to differ,
> > and with some debug logging:
> > - p went up to 139
> > - length[0]=1942, length[1]=1817
> >
> > Now, 1942 lines on the left and 1817 on the right doesn't seem all
> > that many (that's what remains after prefix-suffix stripping). I see
> > no reason 'svn diff' shouldn't be able to calculate a minimal diff for
> > those sizes in a reasonable amount of time. So if p can go up to such
> > a "cost" for such "reasonable" lenghts, I imagine we should put the
> > actual limit much higher. I suppose we can just as well set "min_cost"
> > to 1024 or even higher. 64 is way too low.
>
> Thanks!
> I have set the value back to at least 1024 with this new version of patch.

Hmmm, apparently I'm still running into the limit. Even with 8192 I'm
hitting it at least once. The actual diff there is not really pretty,
but it's an actual manual change made by some developer years ago, and
the "minimal diff" is more or less readable / understandable. The log
message is something like "Group sections related to multimedia
module", and it shuffles around a lot of xml sections to group them
together.

In this case, length[0]==length[1]==46780. Pretty big for the LCS, but
not humongous. The value of 'p' goes up to 8279.

With the limit set to 16384, I'm not hitting it, and the annotate
comes out as with the original.

Now, I'm a bit puzzled why limit==8192 already takes 18s in your
tests. In my situation, with the above diff, I get:
limit==8192: 3.3s
limit==16384: 3.5s

(that's including downloading both versions from the server over https)

So I'm wondering why it takes so long in your case. One thing to keep
in mind here is that, since this is cpu intensive, optimizations might
matter. I remember back in 2011 that I did most of my measurements
with a "Release" build for example. But the above tests I did were
with a debug build, so ... dunno.

Also: one of the last things that Morten Kloster committed in 2011 was
another performance improvement, namely "restarting the LCS" in some
specific cases. At the time, I didn't have enough time to review this
properly, and had some reservations (but mainly lack of time), so I
asked him to commit it on a branch (diff-improvements). This feature
branch never made it to trunk. Just as another "shot", perhaps you
could try r1140247 and see if it helps?

-- 
Johan


Re: [PATCH] limit diff effort to fix performance issue

2021-06-08 Thread Johan Corveleyn
On Sun, Jun 6, 2021 at 4:57 PM Stefan Sperling  wrote:
>
> On Sat, Jun 05, 2021 at 08:56:24PM +0200, Johan Corveleyn wrote:
> > Hmm, I tried this patch with my "annotate large XML file with deep
> > history test", but the result isn't the same as with 1.14. I'd have to
> > investigate a bit more to find out where it took another turn, and
> > what that diff looks like (and whether or not the "other diff" is a
> > problem for me).
>
> It would be good to know how many iterations your file needs to produce
> a diff without a limit. You can use something like SVN_DBG(("p=%d\n", p))
> to print this number.

Okay, I focused on the first revision causing the annotate to differ,
and with some debug logging:
- p went up to 139
- length[0]=1942, length[1]=1817

Now, 1942 lines on the left and 1817 on the right doesn't seem all
that many (that's what remains after prefix-suffix stripping). I see
no reason 'svn diff' shouldn't be able to calculate a minimal diff for
those sizes in a reasonable amount of time. So if p can go up to such
a "cost" for such "reasonable" lenghts, I imagine we should put the
actual limit much higher. I suppose we can just as well set "min_cost"
to 1024 or even higher. 64 is way too low.

BTW, the actual revision (and proper diff) here was not really
unreadable. It had 86 hunks. The log message was something like
"refactor contact parameters", and the change was removing 4 lines and
replacing them with 1 line, throughout an entire section. If the
lcs-limit gets hit, the entire "remaining part" (which normally would
have been some more small hunks) becomes one giant remove+add of 1000
lines or so (i.e. quite useless for a diff that a human might want to
review).

To give you some more numbers about this large XML file:
- it has 17701 revisions
- it has almost 140,000 lines in the HEAD revision
- it's a little less than 4 MB

Annotating the full history (i.e. performing 17700 diffs) takes around
10 minutes, with or without your lcs-limit patch. So it's not like any
of those 17700 diffs are taking a long time. I just tried running it
with min_cost set to 160, and I still get differences. Next I'll try
with 1024.

Finally, a couple of small remarks related to the patch itself:
[[[
+  int max_cost;
+  /* The minimum cost 'p' (# moves away from k=0) we are willing to invest. */
+  const int min_cost = 64;
]]]

I get confused by the naming of the variables here (unless we use
min_max_cost or something). Perhaps something like 'cost_limit' and
'min_cost_limit' or something like that?

[[[
+  max_cost = shift_sqrt(length[0] + length[1] / 2);
]]]

Is that correct WRT operator precedence? It looks like you want to
take the sqrt of the average length, which would be (length[0] +
length[1]) / 2. Or maybe I misunderstand. I'm not really sure why this
is used as an estimate for the "acceptable cost" / max_cost. But then
again, it's been a while since I read the details of Myers algorithm.

-- 
Johan


Re: [PATCH] limit diff effort to fix performance issue

2021-06-05 Thread Johan Corveleyn
On Thu, Jun 3, 2021 at 12:57 PM Stefan Sperling  wrote:
>
> On Wed, Jun 02, 2021 at 02:20:12PM +0200, Stefan Sperling wrote:
> > The patch below implements an effort limit for Subversion's LCS diff.
>
> Here is an updated version of this patch. I took a closer look at
> other diff implementations again, and realized that they don't use
> a fixed limit but one which is scaled to the size of the Myers graph.
> With a square root applied to keep the effort within certain bounds
> as the files being compared become larger.
>
> Compared to the previous patch, I have added comments, and renamed
> 'max_effort' to 'max_cost' to better align with existing documentation
> of the algorithm in existing comments.
>
> We already maintain a variable 'p' which represents the cost of
> the algorithm. So instead of maintaining a separate counter I am
> now setting an upper bound on 'p'.
>
> With this new patch the limit ends up being 2048 for the files I have.
> For regular files in a working copy of SVN trunk, the loop typically
> needs less than 10 iterations.
>
> For reference, run-times of 'svn diff' on my test files with various
> limits, including no limit:
>
> limit = 1024
> 0m06.82s real 0m05.40s user 0m01.41s system
> limit = 2048
> 0m08.15s real 0m06.55s user 0m01.56s system
> limit = 4096
> 0m11.10s real 0m09.59s user 0m01.52s system
> limit = 8192
> 0m18.40s real 0m16.57s user 0m01.57s system
> limit = 65536
> 7m55.40s real 7m53.81s user 0m01.58s system
> Full run without limit:
>   163m31.49s real   163m16.77s user 0m02.37s system
>
> Git/libxdiff somehow manages to produce a smaller collection of larger
> chunks on the problematic files, rather than many small chunks with
> one giant chunk at the end which we end up produing when we bail out
> of the loop.
> I have made some attempts to produce a more readable diff result in
> case the limit is reached but I haven't been successful. Ideas welcome.
> Still, I don't think it makes sense to invest a lot of time into
> optimizing output in this case, under the assumption that nobody is
> going to be carefully reading affected diffs anyway.
>
> [[[
> * subversion/libsvn_diff/lcs.c
>   (shift_sqrt): New helper function. Borrowed from Game of Trees' diff.
>   (svn_diff__lcs): Limit the effort spent on finding an optimal diff to
>avoid spinning on the CPU for a long time (30 minutes or more) for
>some input files. Large XML documents were known to trigger this.
> ]]
>
> Index: subversion/libsvn_diff/lcs.c
> ===
> --- subversion/libsvn_diff/lcs.c(revision 1890390)
> +++ subversion/libsvn_diff/lcs.c(working copy)
> @@ -227,7 +227,18 @@ prepend_lcs(svn_diff__lcs_t *lcs, apr_off_t lines,
>return new_lcs;
>  }
>
> +/* Integer square root approximation */
> +static int
> +shift_sqrt(apr_off_t val)
> +{
> +  int i;
>
> +  for (i = 1; val > 0; val >>= 2)
> +i <<= 1;
> +
> +  return i;
> +}
> +
>  svn_diff__lcs_t *
>  svn_diff__lcs(svn_diff__position_t *position_list1, /* pointer to tail 
> (ring) */
>svn_diff__position_t *position_list2, /* pointer to tail 
> (ring) */
> @@ -247,6 +258,9 @@ svn_diff__lcs(svn_diff__position_t *position_list1
>apr_off_t k;
>apr_off_t p = 0;
>svn_diff__lcs_t *lcs, *lcs_freelist = NULL;
> +  int max_cost;
> +  /* The minimum cost 'p' (# moves away from k=0) we are willing to invest. 
> */
> +  const int min_cost = 64;
>
>svn_diff__position_t sentinel_position[2];
>
> @@ -337,6 +351,24 @@ svn_diff__lcs(svn_diff__position_t *position_list1
>fp[d - 1].position[0] = sentinel_position[0].next;
>fp[d - 1].position[1] = _position[1];
>
> +  /* Limit the effort spent looking for a diff snake. If files have
> +   * very few lines in common, the effort spent to find nice diff
> +   * snakes is just not worth it, the diff result will still be
> +   * essentially minus everything on the left, plus everything on
> +   * the right, with a few useless matches here and there.
> +   *
> +   * Very large files which have a lot of common lines interleaved with
> +   * changed lines (such as humongous auto-generated XML documents) could
> +   * easily keep us busy here for a very long time, in the order of hours.
> +   * In such cases we abort the algorithm before it is finished and use
> +   * the most recently computed intermediate result. The diff will not be
> +   * pretty but a quick suboptimal result is better than a perfect result
> +   * which takes hours to compute.
> +   */
> +  max_cost = shift_sqrt(length[0] + length[1] / 2);
> +  if (max_cost < min_cost)
> +max_cost = min_cost;
> +
>p = 0;
>do
>  {
> @@ -353,7 +385,7 @@ svn_diff__lcs(svn_diff__position_t *position_list1
>
>p++;
>  }
> -  while (fp[0].position[1] != _position[1]);
> +  while (fp[0].position[1] != _position[1] && p < max_cost);
>
>if (suffix_lines)
>  

Re: [PATCH] limit diff effort to fix performance issue

2021-06-02 Thread Johan Corveleyn
On Wed, Jun 2, 2021 at 4:05 PM Daniel Shahaf  wrote:
>
> Stefan Sperling wrote on Wed, 02 Jun 2021 12:20 +00:00:
> > The test suite is passing, which implies that trivial diffs aren't affected
> > by this change. I expect that most, if not all, diffs which people actually
> > want to read will remain unaffected. But I cannot tell with 100% certainty.
>
> Not with 100% certainty, but you could run «svn diff -c $i ^/» on the
> last few thousand revisions of /repos/asf, diff the resulting diffs, and
> review the non-empty interdiffs.

Another thing I could try is running my old "blame huge XML file with
lots of revisions", which I used to do when I worked on diff
optimisations back in 2011 (prefix/suffix-scanning and some other
things -- also some other people back then did some other optimisation
contributions which I double checked this way). I'm guessing my huge
XML file is not huge enough (or our diffs not pathological enough) for
this limit to have much impact, because after the 2011 optimisations I
can't remember running into longer times than say 5 seconds or so per
diff. Or otherwise, I can at least give some feedback about a good
"effort limit" with a real-world case where we still consider the
actual diff output somewhat important (for assigning blame :-)).

I'll try to give it a go in a couple of days (but I'll have to dust
off my local build first).

BTW: for whoever is interested, some discussion about this on IRC just
now: https://colabti.org/irclogger/irclogger_log/svn-dev?date=2021-06-02
Feel free to join on #svn-dev on irc.libera.chat ...

-- 
Johan


Re: Migrate off Freenode IRC?

2021-05-20 Thread Johan Corveleyn
On Thu, May 20, 2021 at 4:24 PM Nathan Hartman  wrote:
>
> On Thu, May 20, 2021 at 7:18 AM Stefan Sperling  wrote:
>>
>>
>> In order to signal our move to the new IRC service, I believe we should
>> mark our freenode channels as 'moved to libera.chat' in their topic lines,
>> as soon as we have consensus in this project that we indeed want to move.
>>
>> Are there any objections to this?
>
>
>
> No objection from me.
>
> Since channels exist on both services now, I think the freenode channels 
> should be marked "deprecated" and kept around for some period of time; I have 
> no particular suggestion on how long that should be, but I guess until the 
> dust settles and we become confident that libera.chat is stable.
>

+1

I'm a bit slow picking up things these days (or maybe I've always been
slow :-)), but from what I can gather following this from a distance:
sure, migration to libera.chat sounds good (plus some form of
deprecation on freenode), and future avenues remain to be explored.

I'll get there on libera.chat someday in the future :-), but I'm happy
to see some of us have already made it there, and taken control of our
channels over there.

-- 
Johan


Re: Commit reviews' author statistics: bus factor issue?

2021-04-28 Thread Johan Corveleyn
On Sun, Apr 25, 2021 at 4:44 PM Nathan Hartman  wrote:
>
> On Fri, Apr 23, 2021 at 9:40 AM Daniel Shahaf  wrote:
> >
> > Nathan Hartman wrote on Thu, 22 Apr 2021 21:41 +00:00:
> > > Not knowing whether / how many people have reviewed a particular
> > > commit is, as was said elsewhere, a silent failure mode of the CTR
> > > (commit-then-review) convention.
> > >
> > > Do we want to try switching to a RTC (review-then-commit) convention?
> >
> > If we do switch to RTC, we might want to also retroactively ensure all
> > commits post 1.14.x's branching have been reviewed by at least two pairs
> > of eyes each.
> >
> > However, I wonder whether there's a smaller change we can do first,
> > rather than a full-blown s/CTR/RTC/ flag day.  For instance, how
> > about we agree, for the next N weeks, to make our commit reviews
> > explicit?  I.e., to explicitly say "I've reviewed this commit and
> > found no issues"?  (Call this Commit-Then-Explicit-Review.)
>
> I'm +1 to this idea. It sounds to me like a reasonable middle ground
> to gain some insights before making bigger workflow-altering changes.

I'm doubtful that this will improve our bus factor for reviews, except
perhaps by drawing in some more reviewer-attention by seeing more of
it on the list.

So far I'm mostly seeing reviews by DanielSh and Nathan. Switching
from CTR to CTER (or to RTC) will not really change that. It might
change the _potential impact_ of DanielSh being hit by a bus (mainly
that Nathan's commits will get stuck in "no explicit review by someone
else" (CTER) vs. "on trunk but reviewed by no one else" (CTR)). Okay,
with CTR this is less visible at first, and might bite us much harder
later on, but we'll have a big problem in any case if one of our few
remaining volunteers loses the ability / energy / time / interest to
do their bit.

IMHO the only thing that can really help is attracting more active
contributors who are willing and able to spend some of their precious
time on the development of Subversion.

-- 
Johan


Re: Commit reviews' author statistics: bus factor issue?

2021-04-22 Thread Johan Corveleyn
On Thu, Apr 22, 2021 at 9:22 PM Daniel Shahaf  wrote:
>
> [ Forwarding from private@ with an addition between triple dashes and
> some paragraphs omitted altogether. ]
>
> Methodology: In my dev@ mailbox, I looked at "Re: svn commit" threads
> where the subject line contained "trunk" somewhere, filtered by date
> (using, e.g., «~s 'Re: svn commit' !~<( ~s 'Re: svn commit' ) ~d '<730d'
> ~s trunk» in Mutt¹).  I then did a author histogram (the moral equivalent
> of «SELECT author, COUNT(*) AS cnt FROM results_of_the_filter GROUP BY
> author ORDER BY cnt»).
>
> With the date filter set to ">6 years ago", the histogram is:
> .
> 1, 1, 1, 1, 2, 3, 6, 7, 10, 12, 13, 13, 19, 27, 49, 58, 86
> .
> Top three: 28.1%, 19.0%, 16.0%.
>
> With the date filter set to "<2 years ago", the histogram is:
> .
> 1, 1, 1, 1, 1, 1, 1, 1, 4, 5, 30
> .
> Top three: 64%, 10.6%, 8.5%.
>
> Do we have a bus factor problem?
>
> ---
>
> I'm deliberately not posting the author identities part of the
> histograms.  It's public info (and I literally did just post
> instructions for how to compute it, for reproducibility), but
> no individual's contributions or contribution statistics are the point.
>
> The histogram is of the authors of commit review threads, not of
> everyone who participated in such threads.
>
> ---
>
> Having few reviewers is problematic in various ways:
>
> - Bus factor
>
> - Single point of failure (cf. Linus' Law)
>
> - Possibility of zero reviews for some areas of the code
>
> - Review standards should be seen as community standards rather than
>   a reviewer's idiosyncrasies; cf. the point about new projects needing
>   at least two mentors ("parents"), rather than just one
>
> - [not an exhaustive list]
>
> Cheers,
>
> Daniel
>
> ¹ There may be a better way to express "first in a thread".  I tried
> «!~<(^)», but couldn't get it to work.

Good point. But I believe we have many other areas where our bus
factor is getting very low.

- RM -- after Julian, only Stefan volunteered. We seem to depend a lot
on the available volunteer time of just a single person, for whether
or not a release will be made and in what timeframe.

- Security issues: sometimes they linger for a long time because ...
well they just lie there. Sometimes some of us perform a couple of
steps, but then we stall again waiting for reviewers, other people to
chime in, etc. This can take weeks or months of "standstill", and I'm
guessing some of the people pushing the cart often feel "I'll give a
little push because it's been stuck for too long, and it's getting
embarrasing -- otherwise it might be lying here for years"

- Approving backports. Last time we really had to scrape the very few
resources we have left to get anything backported (I used to almost
never spend any effort on reviewing backports -- there were plenty of
other more experienced devs around -- but this time I more or less
felt "forced" to go that extra mile).

- Signing releases: last couple of years I'm the only one to build /
test / sign for Windows. I have often wondered how long one of our
releases would be stuck if I were to disappear / drop my laptop.


Perhaps the lack of review-activity for us as a CTR project is more
critical, I don't know. Good observation in any case.

-- 
Johan


Re: JavaHL test failure and warning in 1.14.1

2021-02-19 Thread Johan Corveleyn
On Thu, Feb 18, 2021 at 10:19 PM Alexandr Miloslavskiy
 wrote:
>
> Going to take longer, sorry. I'm bombarded with things to take care
> of... While trying to have vacation, huh. Again, of the flaky test
> stands in the way, I wouldn't mind of you just comment it out for now.

Please enjoy your vacation first and foremost, Alexandr :-). I hope
you don't get bombarded too much.

There is nothing on fire here, and as you say: the test can be
commented out or otherwise disabled (as I understand it, the test is
simply exercising the code in a particular way, so if anything errors
out or crashes, it's not really the test's fault).

We should definitely look further into it (and I can try to make some
time for this too, next week or so). But it's nothing that can't wait
for a couple more days / weeks, IMHO.

Cheers,
-- 
Johan


Re: JavaHL test failure and warning in 1.14.1

2021-02-14 Thread Johan Corveleyn
On Fri, Feb 12, 2021 at 6:36 PM James McCoy  wrote:
>
> One of the new JavaHL tests
> (testCrash_RequestChannel_nativeRead_AfterException) is failing on
> Debian's armhf, mips64el, mipsel, and powerpc builders:
>
> https://buildd.debian.org/status/logs.php?pkg=subversion=1.14.1-1=sid
>
> There was 1 failure:
> 1) 
> testCrash_RequestChannel_nativeRead_AfterException(org.apache.subversion.javahl.BasicTests)junit.framework.AssertionFailedError:
>  IOException was caught in run()
> at 
> org.apache.subversion.javahl.BasicTests$TestTunnelAgent.joinAndTest(BasicTests.java:4477)
> at 
> org.apache.subversion.javahl.BasicTests.testCrash_RequestChannel_nativeRead_AfterException(BasicTests.java:4679)
> at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at org.apache.subversion.javahl.RunTests.main(RunTests.java:119)
>
> FAILURES!!!
> Tests run: 147,  Failures: 1,  Errors: 0
>
> On most of those, we're also getting these warnings:
>
> OpenJDK 64-Bit Zero VM warning: You have loaded library 
> subversion-1.14.1/BUILD/subversion/bindings/javahl/native/.libs/libsvnjavahl-1.so.0.0.0
>  which might have disabled stack guard. The VM will try to fix the stack 
> guard now.
> It's highly recommended that you fix the library with 'execstack -c 
> ', or link it with '-z noexecstack'.
> .WARNING in native method: JNI call made without 
> checking exceptions when required to from CallVoidMethodV
> at java.lang.Object.getClass(java.base@11.0.10/Native Method)
> at 
> java.util.ArrayList.equals(java.base@11.0.10/ArrayList.java:560)
> at 
> org.apache.subversion.javahl.BasicTests.testBasicChangelist(BasicTests.java:2626)
> at 
> jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.10/Native
>  Method)
> at 
> jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.10/NativeMethodAccessorImpl.java:62)
> at 
> jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.10/DelegatingMethodAccessorImpl.java:43)
> at 
> java.lang.reflect.Method.invoke(java.base@11.0.10/Method.java:566)
> at junit.framework.TestCase.runTest(TestCase.java:177)
> at junit.framework.TestCase.runBare(TestCase.java:142)
> at junit.framework.TestResult$1.protect(TestResult.java:122)
> at junit.framework.TestResult.runProtected(TestResult.java:142)
> at junit.framework.TestResult.run(TestResult.java:125)
> at junit.framework.TestCase.run(TestCase.java:130)
> at junit.framework.TestSuite.runTest(TestSuite.java:241)
> at junit.framework.TestSuite.run(TestSuite.java:236)
> at junit.framework.TestSuite.runTest(TestSuite.java:241)
> at junit.framework.TestSuite.run(TestSuite.java:236)
> at junit.textui.TestRunner.doRun(TestRunner.java:116)
> at junit.textui.TestRunner.doRun(TestRunner.java:109)
> at junit.textui.TestRunner.run(TestRunner.java:77)
> at org.apache.subversion.javahl.RunTests.main(RunTests.java:119)
>
> If I re-run the tests without clearing out
> /subversion/bindings/javahl/test-work, then the test passes.
> Hopefully that helps provide some insight.
>
> I can run tests as needed on Debian's porterboxes.

[ cc += Alexandr Miloslavkiy, as he wrote those new tests ]

Thanks for reporting these, James.

Which JDK version is this? Or is it different on the different architectures?

Did you also test 1.14.0 previously with the same JDK, and you didn't
see those warnings then?

-- 
Johan


Re: svn commit: r45955 - /dev/subversion/ /release/subversion/

2021-02-10 Thread Johan Corveleyn
On Wed, Feb 10, 2021 at 2:23 PM Stefan Sperling  wrote:
>
> On Wed, Feb 10, 2021 at 02:16:31PM +0100, Johan Corveleyn wrote:
> > On Wed, Feb 10, 2021 at 12:27 PM  wrote:
> > >
> > > Author: stsp
> > > Date: Wed Feb 10 11:27:48 2021
> > > New Revision: 45955
> > >
> > > Log:
> > > Publish Subversion-1.14.1.
> >
> > Hi Stefan,
> >
> > Don't we need at least 3 votes? Or did you mean to count also your own
> > (implicit perhaps, as RM), in addition to Brane's and mine? If so, I'm
> > inclined to think that you should also explicitly state your "+1 for
> > release" on the dev@ vote thread (including your test details,
> > platform, etc ... as usual). Otherwise it would be a bit unclear
> > (especially since we rarely counted the RM's vote as an extra release
> > vote, certainly not implicitly).
>
> Yes, I counted my own vote towards the total of 3.
> We need 3 PMC members to bless a release. I can add my votes to the thread.

+1

> I did not want to sit on the security fix any longer.
> The embargo elapsed today and distributions are expecting a fix to show up.

Ack, thanks.

-- 
Johan


Re: Subversion 1.10.7 up for testing/signing

2021-02-07 Thread Johan Corveleyn
On Thu, Feb 4, 2021 at 1:57 PM Stefan Sperling  wrote:
>
> The 1.10.7 release artifacts are now available for testing/signing.
> Please get the tarballs from
>   https://dist.apache.org/repos/dist/dev/subversion
> and add your signatures there.
>
> Thanks!

Summary
---
+1 to release

Platform

Windows 10 x64 (Version 1903)
Microsoft Visual Studio 2019 Community Edition (Version 16.5.3)

Verified

Signature, sha1 and sha512 for subversion-1.10.7.zip.

Contents of subversion-1.10.7.zip are identical to tags/1.10.7,
and to branches/1.10.x@1886195 (except for expected differences in
svn_version.h and svnpubsub, svnwcsub and nominate.pl (symlinks vs. file
contents), and generated files).

Tested
--
[ Release build x86 ] x [ fsfs ] x [ file | svn | http ]

Results
---
All tests pass.

Dependencies

httpd 2.4.43 (apr 1.6.5, apr-util 1.6.1
  pcre 8.44, expat 2.2.9, openssl 1.1.1f)
apr 1.6.5
apr-util 1.6.1
openssl 1.1.1f
serf 1.3.9
sqlite 3.31.1.0
zlib 1.2.11
(bundled lz4 1.7.5)
(bundled utf8proc 2.1.0)

Other tools
---
perl 5.20 (Strawberry Perl)
python 2.7.17

Signature
-

subversion-1.10.7.zip:
-BEGIN PGP SIGNATURE-

iQIcBAABCgAGBQJgIDMeAAoJELWc5tYBDIqtXWAP/0fYa6wGyVbvcpcnPXKM760D
aEBjTqs3/YbFN3ZeRaOJ4ewDQ7zWYXH0FGCoxuZEBSIkfXUT4FAnyKJrtfhuY9pD
SZkXzssB7rsgrWmSBBiZ8CldMFsXdRmH/CwnV/ii9fykGNOa9C1DqgsfAxCJeIMu
8yzVzEZvRnbpBzEL/HirJJ7JmdffW6/Wb8vq+8+NVjlInEZuy+JDOUOQ4CW6v7sG
gE+mVPhWWIxYHgqRrluNYq9LXS/NYZsCczUsq/lWZXbz+9zVXJO5ozgPxAJY+ZIz
zr8QE3HryJaK/pBbwJVRXmO31m0vGLpelj635h9kl5ZUo8SCW2PTcj0gQca8zuXa
MmE1Ropn/HrOKE927jwXAlZJQ89xKNLR7JR/x3EXbTjmeclqqjp7638XBLEe7J9s
NKS/n419rRSmLAQfBYPa3cSvecpRglVkDdFWLogFeYpxdwsEqLFJEWAjZeysF55z
IPyOxvT8/y+gAl1w5ai6emX0YW63ngnUUr7ZnOHVXhaKiLb3tLoafOePRPGoBED4
0YBRTmONboBeXayQ//O+QMsiQmhZpsE6G9+nr/GmYRR4G+A7az6FwGtKoBd80zSc
j3vBQbbXWPsWI07eqVIrD6ARv36YjoTkR5Cuqh09+yi/Gj2soanHH2zXIvt1E64i
+2eAxVY76YZiwJTYUlL9
=6LYN
-END PGP SIGNATURE-

-- 
Johan


Re: Subversion 1.14.1 up for testing/signing

2021-02-07 Thread Johan Corveleyn
On Thu, Feb 4, 2021 at 1:56 PM Stefan Sperling  wrote:
>
> The 1.14.1 release artifacts are now available for testing/signing.
> Please get the tarballs from
>   https://dist.apache.org/repos/dist/dev/subversion
> and add your signatures there.
>
> Thanks!

Summary
---
+1 to release (Windows)

Platform

Windows 10 x64 (Version 1903)
Microsoft Visual Studio 2019 Community Edition (Version 16.5.3)

Verified

Signature and sha512 for subversion-1.14.1.zip.

Contents of subversion-1.14.1.zip are identical to tags/1.14.1,
and to branches/1.14.x@1886195 (except for expected differences in
svn_version.h and svnpubsub, svnwcsub and nominate.pl (symlinks vs. file
contents), and generated files).

Tested
--
[ Release build x64 ] x [ fsfs ] x [ file | svn | http ]
javahl
swig-python

Results
---
All tests pass.

Dependencies

httpd 2.4.43 (apr 1.6.5, apr-util 1.6.1,
  pcre 8.44, expat 2.2.9, openssl 1.1.1g)
apr 1.6.5
apr-util 1.6.1
openssl 1.1.1g
serf 1.3.9
sqlite 3.31.1.0
zlib 1.2.11
python 3.9.1
py3c 1.0
swig 4.0.1
(bundled lz4 1.7.5)
(bundled utf8proc 2.1.0)

Other tools
---
perl 5.30.2 (Strawberry Perl)
python 3.9.1
AdoptOpenJDK 11.0.6
junit 4.12

Signature
-

subversion-1.14.1.zip:
-BEGIN PGP SIGNATURE-

iQIcBAABCgAGBQJgICJ8AAoJELWc5tYBDIqtgqkP/2xOi+s+iose90xD4wtdJgVq
xwJ3gcCxws1HHdcMNtUudP740gI7J4BFNEDExuQLNQ8RjhysvXTKEO7nhwo4GyX9
HgKwafyyrRy6dTQ6tBAl0FC40GeACa2CSXMJfmn2I0UBKUe7RgG4l806FoI/Amw0
i/IQjwcqLYdNhBfkv70XoJxW35W1nVE9KsELVN7KJk1JRXsJRZ0+VyUjE5pBulYH
7FYoNNOgl1O9eJKRjSQXGD+FltYhYSi84uJ4fXntOZGEztqvbATmSw52wrKyZpOX
ewzjltvknbgNXbYcs8Xm/0WVaB0QH43gqZfUZJ4wtZcTrqtf6bgtEXoVk7HIpRZG
Jw/tqcmNIuGXTchZRu2eTNW2O9LdCv68r1NnMFhk6sFvwiyKmtOslCUItiAaYx0b
Yj4MYeG39it9+I6I3eM+9zeJqGiJYR+vhKCDf8G0GiwA2oJktBqcW3xHlx814IiE
/7AtaMz9Uw2rAgaHGJbyxTtskddK6rCpEX4UX3LXk8v4C44UYcNEpBeZvVCp7Ava
VWAaiofdqeaUneDxNQ9Ji4JoojT2hhNvQuXjKxI+JZTqIawCvxiyW837hK/QlZnT
A4zZ1NWMkBTxHIXfcJ4tqH/57LgB3YQXELrMcXAZ8w8oc7iuW2fN2XAEBqKRtGk8
2Zf01GEAIl1J8WD3UOS/
=6k//
-END PGP SIGNATURE-

-- 
Johan


Re: Release note entry for 1.14.1 Fix for issue #4762 "authz doesn't combine global and repository rules"?

2021-01-29 Thread Johan Corveleyn
On Fri, Jan 29, 2021 at 9:46 PM Stefan Sperling  wrote:
>
> On Fri, Jan 29, 2021 at 09:29:52PM +0100, Johan Corveleyn wrote:
> > I was wondering whether the change in authz behavior, by fixing #4762,
> > should be called out explicitly in the 1.14 release notes (maybe
> > somewhere in the "Known issues" section, describing the issue of
> > 1.14.0, and how it is fixed in 1.14.1).
>
> Yes. Thanks for the reminder. I will try to keep this in mind
> and update the web site when the fixes are released.
>
> > And if we would also backport it to 1.10.x (it currently has 2 votes
> > there), of course the same there.
>
> It is already listed as a known problem in 1.10:
> http://subversion.apache.org/docs/release-notes/1.10.html#issue-svn-4762

Ah yes, thanks. I missed that.

-- 
Johan


Re: svn commit: r1882518 - /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java

2021-01-29 Thread Johan Corveleyn
On Fri, Jan 29, 2021 at 9:29 PM Alexandr Miloslavskiy
 wrote:
>
> On 29.01.2021 20:51, Johan Corveleyn wrote:
>
> > Fingers crossed for a second vote in STATUS now :-).
>
> Did that, hopefully I didn't mess anything up, it's my first experience
> with it :)

Looks good! Looks like everything is good to go now for your javahl
fixes in 1.14.1 :-).

Just to clarify: backports to bindings require only 2 votes (in fact
even only one +1, and one +0 or "concept +1"). Backports to core code
require 3 votes (or for non-LTS releases also just 2 votes). See [1]
for the official explanation.

And, as you did correctly, usually the one who adds the last needed
vote moves the section below the "Approved changes" line (provided
there are no vetoes). This helps for our nightly backport bot which
automatically processes the STATUS file, and merges everything below
the Approved line (with the svn-role account).

[1] 
http://subversion.apache.org/docs/community-guide/releasing.html#release-stabilization-how-many-votes

-- 
Johan


Release note entry for 1.14.1 Fix for issue #4762 "authz doesn't combine global and repository rules"?

2021-01-29 Thread Johan Corveleyn
I was wondering whether the change in authz behavior, by fixing #4762,
should be called out explicitly in the 1.14 release notes (maybe
somewhere in the "Known issues" section, describing the issue of
1.14.0, and how it is fixed in 1.14.1).

And if we would also backport it to 1.10.x (it currently has 2 votes
there), of course the same there.

Some admins might be surprised by the change and impact on their
existing authz files, and might appreciate the discoverability via the
release notes.

(I'm not volunteering, sorry (don't understand it enough, and I'm a
bit out of svn cycles). Just putting it out here.)

-- 
Johan


Re: svn commit: r1882518 - /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java

2021-01-29 Thread Johan Corveleyn
On Thu, Jan 28, 2021 at 11:28 AM Johan Corveleyn  wrote:
...
> With that, the branch looks good to me, and I think we should merge
> this to trunk, and then nominate it (the merge-to-trunk commit I
> guess) for backport to 1.14 (concretely, this means adding an entry to
> 1.14.x/STATUS [1]).
>
> @Alexandr: would you like to do the honors? First to merge your branch
> to trunk, and after that to add a corresponding section to
> 1.14.x/STATUS?
>
> In fact: please consider your partial committership (javahl bindings)
> now to be no longer confined to branches. Feel free to perform commits
> to the javahl bindings area also on trunk (which includes the above
> merge of course).
> This also means you have a binding vote on backport proposals related
> to the javahl bindings.
>
> [1] https://svn.apache.org/repos/asf/subversion/branches/1.14.x/STATUS

Small update for whoever is following along: I just merged the branch
to trunk in r1886029, and nominated it in 1.14.x/STATUS.

To assure the list that I'm not bypassing Alexandr here: we mailed
offlist about this, and he preferred that I would perform the merge,
so I did :-).

Fingers crossed for a second vote in STATUS now :-).
-- 
Johan


Re: Escaping SVN_EDITOR broken on Windows

2021-01-28 Thread Johan Corveleyn
On Thu, Jan 28, 2021 at 4:22 PM Yasuhito FUTATSUKI
 wrote:
>
> On 2021/01/28 20:13, Johan Corveleyn wrote:
> > On Thu, Jan 28, 2021 at 12:55 AM Yasuhito FUTATSUKI
> >  wrote:
> >>
> >> On 2021/01/28 7:33, Johan Corveleyn wrote:
> >>> On Wed, Jan 27, 2021 at 10:19 PM Yasuhito FUTATSUKI
> >>>  wrote:
> >>>>
> >>>> On 2021/01/28 5:43, Johan Corveleyn wrote:
> >>>>> On Mon, Mar 16, 2020 at 5:11 AM  wrote:
> >>
> >>
> >>>>> [[[
> >>>>> C:\test>set EDITOR="C:\Program Files\Notepad++\notepad++" -nosession 
> >>>>> -multiInst
> >>>>>
> >>>>> C:\test>svn pe svn:ignore .
> >>>>> 'C:\Program' is not recognized as an internal or external command,
> >>>>> operable program or batch file.
> >>>>> svn: E200012: system('"C:\Program Files\Notepad++\notepad++"
> >>>>> -nosession -multiInst "svn-prop.tmp"') returned 1
> >>>>> ]]]
> >>>>
> >>>> Perhaps my pending patch also fix this.
> >>>>
> >>>> Please see
> >>>>
> >>>> https://lists.apache.org/thread.html/r2b8b0b4ca0f833e371590fadb33ee24c6335127e967664c6e612e154%40%3Cdev.subversion.apache.org%3E
> >>>>
> >>>> and attached patch
> >>>>
> >>>> https://lists.apache.org/api/email.lua?attachment=true=r2b8b0b4ca0f833e371590fadb33ee24c6335127e967664c6e612e154@%3Cdev.subversion.apache.org%3E=d76c6fedb56414d73e0d481910f7e62bde6d0582e975c4b2134c8521b5f9e30f
> >>>
> >>> Yes indeed, that seems to fix it :). Nice!
> >>>
> >>> Is anything holding this patch back from being committed? We're mainly
> >>> a CTR - Commit Then Review - project, so if you feel okay about it ...
> >>> I haven't studied it in depth, but on a cursory look, it seems fine to
> >>> me (and it works / fixes my problem, yay!).
> >>  Then I commited it in r1885953, with minor fix in comment.
> >
> > Great!
> >
> > I took the liberty to nominate it (with my vote) for 1.14.x, not in
> > the least because I'm personally affected by this (always a good
> > motivation :-)). Not sure if it'll gather enough votes in time to make
> > it into 1.14.1, but it doesn't hurt to try :-).
>
> Unfortunately this causes conflict on 1.14.x because it depends on r1882234.

Argh, sorry should have noticed that. Hmmm.

Should I withdraw the nomination? Or should I add r1882234 to it? I
don't know the context of these revisions very well ...

-- 
Johan


Re: Escaping SVN_EDITOR broken on Windows

2021-01-28 Thread Johan Corveleyn
On Thu, Jan 28, 2021 at 12:55 AM Yasuhito FUTATSUKI
 wrote:
>
> On 2021/01/28 7:33, Johan Corveleyn wrote:
> > On Wed, Jan 27, 2021 at 10:19 PM Yasuhito FUTATSUKI
> >  wrote:
> >>
> >> On 2021/01/28 5:43, Johan Corveleyn wrote:
> >>> On Mon, Mar 16, 2020 at 5:11 AM  wrote:
>
>
> >>> [[[
> >>> C:\test>set EDITOR="C:\Program Files\Notepad++\notepad++" -nosession 
> >>> -multiInst
> >>>
> >>> C:\test>svn pe svn:ignore .
> >>> 'C:\Program' is not recognized as an internal or external command,
> >>> operable program or batch file.
> >>> svn: E200012: system('"C:\Program Files\Notepad++\notepad++"
> >>> -nosession -multiInst "svn-prop.tmp"') returned 1
> >>> ]]]
> >>
> >> Perhaps my pending patch also fix this.
> >>
> >> Please see
> >>
> >> https://lists.apache.org/thread.html/r2b8b0b4ca0f833e371590fadb33ee24c6335127e967664c6e612e154%40%3Cdev.subversion.apache.org%3E
> >>
> >> and attached patch
> >>
> >> https://lists.apache.org/api/email.lua?attachment=true=r2b8b0b4ca0f833e371590fadb33ee24c6335127e967664c6e612e154@%3Cdev.subversion.apache.org%3E=d76c6fedb56414d73e0d481910f7e62bde6d0582e975c4b2134c8521b5f9e30f
> >
> > Yes indeed, that seems to fix it :). Nice!
> >
> > Is anything holding this patch back from being committed? We're mainly
> > a CTR - Commit Then Review - project, so if you feel okay about it ...
> > I haven't studied it in depth, but on a cursory look, it seems fine to
> > me (and it works / fixes my problem, yay!).
>  Then I commited it in r1885953, with minor fix in comment.

Great!

I took the liberty to nominate it (with my vote) for 1.14.x, not in
the least because I'm personally affected by this (always a good
motivation :-)). Not sure if it'll gather enough votes in time to make
it into 1.14.1, but it doesn't hurt to try :-).

Cheers,
-- 
Johan


Re: svn commit: r1882518 - /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java

2021-01-28 Thread Johan Corveleyn
On Thu, Jan 28, 2021 at 1:15 AM Alexandr Miloslavskiy
 wrote:
>
> On 27.01.2021 13:00, Johan Corveleyn wrote:
>
> > ^^ some lines indented with tabs instead of spaces
>
> > ^^ curly brace should be on next line
>
> > ^^ The comment above, describing how the JVM crashes, refers to the
> > situation before you actually fixed that :-). Can you rephrase it a
> > bit, so it is still applicable even with the crash now fixed?
>
> > ^^ same here, the comments describe the behavior before the fix, maybe
> > rephrase it so it's still valid after you fixed it.
>
> Thanks, I fixed everything in r1885955.

Thanks. I see you did a bit more than what I mentioned above (I guess
you did a "reformat" of the entire section you added), but that's fine
of course (I only spotted a couple of tidbits, not everything :)).

With that, the branch looks good to me, and I think we should merge
this to trunk, and then nominate it (the merge-to-trunk commit I
guess) for backport to 1.14 (concretely, this means adding an entry to
1.14.x/STATUS [1]).

@Alexandr: would you like to do the honors? First to merge your branch
to trunk, and after that to add a corresponding section to
1.14.x/STATUS?

In fact: please consider your partial committership (javahl bindings)
now to be no longer confined to branches. Feel free to perform commits
to the javahl bindings area also on trunk (which includes the above
merge of course).
This also means you have a binding vote on backport proposals related
to the javahl bindings.

[1] https://svn.apache.org/repos/asf/subversion/branches/1.14.x/STATUS

--
Johan


Re: Escaping SVN_EDITOR broken on Windows

2021-01-27 Thread Johan Corveleyn
On Wed, Jan 27, 2021 at 10:19 PM Yasuhito FUTATSUKI
 wrote:
>
> On 2021/01/28 5:43, Johan Corveleyn wrote:
> > On Mon, Mar 16, 2020 at 5:11 AM  wrote:
> >>
> >> Author: jamessan
> >> Date: Mon Mar 16 04:11:36 2020
> >> New Revision: 1875230
> >>
> >> URL: http://svn.apache.org/viewvc?rev=1875230=rev
> >> Log:
> >> Followup to r1874093, add Windows-specific argument escaping
> >>
> >> Rather than directly using apr_pescape_shell(), use apr_escape_shell() to 
> >> give
> >> an indication whether escaping is needed.  If APR reports no escaping is
> >> needed, simply surround the argument in double-quotes to handle any 
> >> embedded
> >> whitespace.
> >>
> >> When escaping is needed, on Unix we continue to use APR's escaping +
> >> post-processing for whitespace.  On Windows, perform the escaping 
> >> ourselves per
> >> these rules:
> >>
> >>   1. Surround the string with double-quotes
> >>   2. Escape any double-quotes or backslashes preceding a double-quote
> >>   3. Escape any metacharacters, including double-quotes, with ^
> >>
> >> * subversion/libsvn_subr/cmdline.c
> >>   (escape_path): Refactored as above
> >
> > I'm sorry I didn't notice this before, but on Windows, since this
> > commit r1875230 (which is included in 1.14.0) the escaping of
> > SVN_EDITOR is broken. If the envvar refers to a program with a space
> > in its path, between quotes, those quotes seem to be lost now, which
> > results in:
> >
> > [[[
> > C:\test>set EDITOR="C:\Program Files\Notepad++\notepad++" -nosession 
> > -multiInst
> >
> > C:\test>svn pe svn:ignore .
> > 'C:\Program' is not recognized as an internal or external command,
> > operable program or batch file.
> > svn: E200012: system('"C:\Program Files\Notepad++\notepad++"
> > -nosession -multiInst "svn-prop.tmp"') returned 1
> > ]]]
>
> Perhaps my pending patch also fix this.
>
> Please see
>
> https://lists.apache.org/thread.html/r2b8b0b4ca0f833e371590fadb33ee24c6335127e967664c6e612e154%40%3Cdev.subversion.apache.org%3E
>
> and attached patch
>
> https://lists.apache.org/api/email.lua?attachment=true=r2b8b0b4ca0f833e371590fadb33ee24c6335127e967664c6e612e154@%3Cdev.subversion.apache.org%3E=d76c6fedb56414d73e0d481910f7e62bde6d0582e975c4b2134c8521b5f9e30f

Yes indeed, that seems to fix it :). Nice!

Is anything holding this patch back from being committed? We're mainly
a CTR - Commit Then Review - project, so if you feel okay about it ...
I haven't studied it in depth, but on a cursory look, it seems fine to
me (and it works / fixes my problem, yay!).

-- 
Johan


Re: svn commit: r1882523 - in /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl: native/ src/org/apache/subversion/javahl/util/

2021-01-27 Thread Johan Corveleyn
On Wed, Jan 27, 2021 at 10:47 PM Alexandr Miloslavskiy
 wrote:
>
> On 27.01.2021 11:34, Johan Corveleyn wrote:
> >> +  jobject jrequest;
> >> +  jobject jresponse;
> >
> > These new fields are not mentioned in the log message.
> >
> >> @@ -523,7 +527,10 @@ jobject create_Channel(const char *class
> >> jmethodID ctor = env->GetMethodID(cls, "", "(J)V");
> >
> > ^^ also not mentioned in log message.
> >
> > (rest looks fine, so if you could amend the commit message with the
> > missing details, that'd be great)
>
> I tried to change commit message, not sure if it actually worked.
>
> Can you please check?

Yes, perfectly. Thanks.

BTW, if you would subscribe to comm...@subversion.apache.org (by
sending a mail to commits-subscribe@s.a.o), you would see the
log-message-changes (and all commits) from that side too. Not required
of course, but I use it as a means to follow along a bit, and to
double verify my own commits / changes :).

-- 
Johan


Re: svn commit: r1882522 - /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp

2021-01-27 Thread Johan Corveleyn
On Wed, Jan 27, 2021 at 10:32 PM Alexandr Miloslavskiy
 wrote:
>
> On 27.01.2021 11:13, Johan Corveleyn wrote:
> >> +void
> >> +OperationContext::closeTunnel(void *tunnel_context, void *)
> >> +{
> >> +  TunnelContext* tc = static_cast(tunnel_context);
> >> +  jobject jclosecb = tc->jclosecb;
> >> +  delete tc;
> >> +
> >> +  JNIEnv *env = JNIUtil::getEnv();
> >> +  if (JNIUtil::isJavaExceptionThrown())
> >> +return;
> >> +
> >> +  if (jclosecb)
> >> +callCloseTunnelCallback(env, jclosecb);
> >>   }
> >>
> >>
> >
> > Here above in closeTunnel(), you dropped the early exit on if
> > (!jclosecb) (before the call to JNIUtil::getEnv()). Was this
> > intentional?
> >
> > Previously, in the case of a null jclosecb, the unnecessary calls to
> > JNIUtil::getEnv() and JNIUtil::isJavaExceptionThrown() were also
> > avoided. In the new version they aren't (not sure if that's important,
> > but it's a small behavioral difference).
>
> Yes, this is intentional. In r1882523, I further extend the cleanup by
> also cleaning 'jrequest' and 'jresponse'. In this case, early exit is no
> good, because everything needs to be cleaned independently. For the
> purpose of reducing the amount of diffs, I removed the early exit one
> patch earlier.
>
> I believe that calling 'JNIUtil::getEnv()' and
> 'JNIUtil::isJavaExceptionThrown()' is merely a negligible performance
> change. I thought that it's not worthy to describe in commit message,
> but I could do that if you think otherwise.

Thanks for explaining. Hm, maybe it would be good to note this in some
form in the commit message, yes. Just to make sure others scrolling
through this in the future are not puzzled by it. Something like:
"While here, remove the early exit on null jclosecb for $reasons (also
see the followup commits where cleanup of ... is further improved, and
everything needs to be cleaned up independently)". (this is just a
quick off the cuff example, feel free to word it how you would best
describe it)

Brane also replied (on dev@) this morning, giving a cleanup-argument too:

"It's a minor performance degradation in the case where there's no
callback, but it is in fact safer because it catches more Java
exceptions during tunnel destruction. The null check is still there, so
that's fine. IMO (and it's been a long time) this change is good."

So I'm entirely convinced :-).

-- 
Johan


Re: svn commit: r1882520 - /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/JNIUtil.cpp

2021-01-27 Thread Johan Corveleyn
On Wed, Jan 27, 2021 at 10:16 PM Alexandr Miloslavskiy
 wrote:
>
> Thanks for reviewing! You're quite the savior of this branch :)

Heh, you're welcome :). And thanks for bringing it here in the first place.

> On 27.01.2021 11:02, Johan Corveleyn wrote:
>  > was wondering what you meant by "This error is easily seen
>  > when running JavaHL tests"
>
> If you checkout r1882518, tests die with 'Bad global or local ref passed
> to JNI' before this error can be seen. However, if you also cherry-pick
> r1882522 on top to fix this problem, that's where you'll see 'JNI call
> made with exception pending' that I fixed in r1882520.

Ah, okay. I'll give that another try.

> Sorry for confusion. I edited/reordered patches a few times before
> committing, and didn't notice that the commit message is not too good
> with this ordering.
>
> Which brings me to next question. In other replies, you suggested that I
> make some edits in code and also amend commit messages. How do I do that
> in SVN? I understand that unlike git, a submitted branch is already set
> in stone? Please advise. This branch is my sole SVN experience in entire
> life, so I'm quite a newbie. I did google and ask another guy, though,
> to no avail.

Well, committed content is indeed "set in stone", so to speak (i.e.
"part of history"). You could of course start a new branch and redo
everything, but I wouldn't recommend it (that would force me / others
to review it all again). The usual practice, if there are remarks
about the content, is to simply add additional commits fixing the
problems / adding more code / ... So for changes to the contents of
the file, I suggest you perform further commits on the branch.

OTOH, _commit messages_ are editable in SVN. They are part of the so
called "revision properties" (contrary to "versioned properties"). So,
for remarks about the commit messages, the usual practice is to simply
edit them. For example with this command:

svn propedit --revprop -r$REV svn:log $URL
(the $URL can be any url pointing to the svn repository, since
revision numbers are global for the repo)

This will open the current log message in your $SVN_EDITOR (fallback
to $EDITOR).

>  > I do get 8 warnings with this sort of message (always similar
>  > stacktrace, always coming from UtilTests.testFileMerge, line 120):
>  > [[[
>  > WARNING: JNI local refs: 33, exceeds capacity: 32
>  > at java.net.NetworkInterface.getAll(java.base@11.0.6/Native Method)
>  > at
> java.net.NetworkInterface.getNetworkInterfaces(java.base@11.0.6/NetworkInterface.java:359)
>
> To my knowledge, this is an oversight in
> 'java.net.NetworkInterface.getAll' itself.
>
> JNI documentation says [1]:
> [[[
> You can call the JNI EnsureLocalCapacity() method to tell the JVM that
> you'll be using more than 16 local references. This allows the JVM to
> optimize the handling of local references for that native. Failure to
> inform the JVM can lead to a FatalError if the required local references
> cannot be created, or poor performance that's due to a mismatch between
> the local-reference management employed by the JVM and the number of
> local references used.
> ]]]
>
> I'm observing the same warnings in other Java programs which are
> unrelated to SVN. I think that this can be ignored for the purposes of
> this JavaHL related discussion.
>
> [1] https://developer.ibm.com/languages/java/articles/j-jni/

Yes, let's ignore that here ... it's unrelated.

-- 
Johan


Escaping SVN_EDITOR broken on Windows (was: svn commit: r1875230 - /subversion/trunk/subversion/libsvn_subr/cmdline.c)

2021-01-27 Thread Johan Corveleyn
On Mon, Mar 16, 2020 at 5:11 AM  wrote:
>
> Author: jamessan
> Date: Mon Mar 16 04:11:36 2020
> New Revision: 1875230
>
> URL: http://svn.apache.org/viewvc?rev=1875230=rev
> Log:
> Followup to r1874093, add Windows-specific argument escaping
>
> Rather than directly using apr_pescape_shell(), use apr_escape_shell() to give
> an indication whether escaping is needed.  If APR reports no escaping is
> needed, simply surround the argument in double-quotes to handle any embedded
> whitespace.
>
> When escaping is needed, on Unix we continue to use APR's escaping +
> post-processing for whitespace.  On Windows, perform the escaping ourselves 
> per
> these rules:
>
>   1. Surround the string with double-quotes
>   2. Escape any double-quotes or backslashes preceding a double-quote
>   3. Escape any metacharacters, including double-quotes, with ^
>
> * subversion/libsvn_subr/cmdline.c
>   (escape_path): Refactored as above

I'm sorry I didn't notice this before, but on Windows, since this
commit r1875230 (which is included in 1.14.0) the escaping of
SVN_EDITOR is broken. If the envvar refers to a program with a space
in its path, between quotes, those quotes seem to be lost now, which
results in:

[[[
C:\test>set EDITOR="C:\Program Files\Notepad++\notepad++" -nosession -multiInst

C:\test>svn pe svn:ignore .
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
svn: E200012: system('"C:\Program Files\Notepad++\notepad++"
-nosession -multiInst "svn-prop.tmp"') returned 1
]]]

This used to work (it works in 1.13.x), I've been using this for a long time.

This commit was the last of three commits related to escaping:

r1874057 (Escape filenames when invoking $SVN_EDITOR)
r1874093 (Followup to r1874057, escape whitespace instead of quoting filename)
r1875230 (Followup to r1874093, add Windows-specific argument escaping)

Interestingly:
- before all three: works
- after r1874057: fails
- after r1874093: works
- after r1875230: fails

Apparently, there was a test failing on Windows after r1874093, which
was pointed out by Bert in this thread:
https://lists.apache.org/thread.html/r8b61c011f4ab66006dd96d61d0e099da03da74b6e8b1d6f73cf1baa0%40%3Cdev.subversion.apache.org%3E

Perhaps this should have been fixed in another way than the approach
of r1875230? Or maybe it just needs another small tweak? I haven't
investigated further (I have pretty much used up my 'svn cycles' these
last couple of days), but I wanted to highlight this nonetheless. If
anyone wants me to try something out on Windows, just say the word ...

Links to the revisions on viewvc:
https://svn.apache.org/r1874057
https://svn.apache.org/r1874093
https://svn.apache.org/r1875230

I'm leaving the diff from the last commit mail here below for quick
scanning, in case it helps anyone.

> Modified:
> subversion/trunk/subversion/libsvn_subr/cmdline.c
>
> Modified: subversion/trunk/subversion/libsvn_subr/cmdline.c
> URL: 
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/cmdline.c?rev=1875230=1875229=1875230=diff
> ==
> --- subversion/trunk/subversion/libsvn_subr/cmdline.c (original)
> +++ subversion/trunk/subversion/libsvn_subr/cmdline.c Mon Mar 16 04:11:36 2020
> @@ -1305,36 +1305,92 @@ static const char *
>  escape_path(apr_pool_t *pool, const char *orig_path)
>  {
>apr_size_t len, esc_len;
> -  const char *path;
> -  char *p, *esc_path;
> +  apr_status_t status;
>
> -  path = apr_pescape_shell(pool, orig_path);
> +  len = strlen(orig_path);
> +  esc_len = 0;
>
> -  len = esc_len = 0;
> +  status = apr_escape_shell(NULL, orig_path, len, _len);
>
> -  /* Now that apr has done its escaping, we can check whether there's any
> - whitespace that also needs to be escaped.  This must be done after the
> - fact, otherwise apr_pescape_shell() would escape the backslashes we're
> - inserting. */
> -  for (p = (char *)path; *p; p++)
> +  if (status == APR_NOTFOUND)
>  {
> -  len++;
> -  if (*p == ' ' || *p == '\t')
> -esc_len++;
> +  /* No special characters found by APR, so just surround it in double
> + quotes in case there is whitespace, which APR (as of 1.6.5) doesn't
> + consider special. */
> +  return apr_psprintf(pool, "\"%s\"", orig_path);
>  }
> -
> -  if (esc_len == 0)
> -return path;
> -
> -  p = esc_path = apr_pcalloc(pool, len + esc_len + 1);
> -  while (*path)
> +  else
>  {
> -  if (*path == ' ' || *path == '\t')
> -*p++ = '\\';
> -  *p++ = *path++;
> -}
> +#ifdef WIN32
> +  const char *p;
> +  /* Following the advice from
> + 
> https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way
> + 1. Surround argument with double-quotes
> + 2. Escape backslashes, if they're followed by a double-quote, and 
> double-quotes
> + 

Re: svn commit: r1882518 - /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java

2021-01-27 Thread Johan Corveleyn
On Thu, Oct 15, 2020 at 12:12 PM  wrote:
>
> Author: amiloslavskiy
> Date: Thu Oct 15 10:12:52 2020
> New Revision: 1882518
>
> URL: http://svn.apache.org/viewvc?rev=1882518=rev
> Log:
> JavaHL: Introduce tests showing JVM crashes with TunnelAgent
>
> The crashes will be addressed in subsequent commits.
>
> [in subversion/bindings/javahl]
> * tests/org/apache/subversion/javahl/BasicTests.java
>   Add helper class 'TestTunnelAgent' to emulate server replies in test
>   environment.
>   Add new tests which currently causes JVM to crash:
>   * testCrash_RemoteSession_nativeDispose
>   * testCrash_RequestChannel_nativeRead_AfterException
>   * testCrash_RequestChannel_nativeRead_AfterSvnError

A couple more small remarks here below ...


> +private String readClient(ByteBuffer readBuffer)
> +   throws IOException
> +   {
> +   readBuffer.reset();
> +   request.read(readBuffer);
> +
> +   final int offset = readBuffer.arrayOffset();
> +   return new String(readBuffer.array(),
> +   offset,
> +   readBuffer.position() - offset);
> +   }
> +
> +   private void emulateServer(String serverMessage)
> +   throws IOException
> +   {
> +   final byte[] responseBytes = serverMessage.getBytes();
> +   response.write(ByteBuffer.wrap(responseBytes));
> +   }

^^ some lines indented with tabs instead of spaces


> +public void testCrash_RemoteSession_nativeDispose() {

^^ curly brace should be on next line


> +// 'OperationContext::openTunnel()' doesn't 'NewGlobalRef()' 
> callback returned by 'TunnelAgent.openTunnel()'.
> +// When GC runs, it disposes the callback. When JavaHL tries to call 
> it in 'remote.dispose()', JVM crashes.

^^ The comment above, describing how the JVM crashes, refers to the
situation before you actually fixed that :-). Can you rephrase it a
bit, so it is still applicable even with the crash now fixed?


> +public void testCrash_RequestChannel_nativeRead_AfterSvnError()
> +{
> +final String wcRoot = new File("tempSvnRepo").getAbsolutePath();
> +
> +final ScriptItem[] script = new ScriptItem[]{
> +// openRemoteSession
> +new ScriptItem(Actions.EMUL_SERVER, "( success ( 2 2 ( ) ( 
> edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops 
> atomic-revprops partial-replay inherited-props ephemeral-txnprops 
> file-revs-reverse ) ) ) "),
> +new ScriptItem(Actions.READ_CLIENT, "edit-pipeline"),
> +new ScriptItem(Actions.EMUL_SERVER, "( success ( ( ANONYMOUS ) 
> 36:0113e071-0208-4a7b-9f20-3038f9caf0f0 ) ) "),
> +new ScriptItem(Actions.READ_CLIENT, "ANONYMOUS"),
> +new ScriptItem(Actions.EMUL_SERVER, "( success ( ) ) ( success ( 
> 36:---- 25:svn+test://localhost/test ( 
> mergeinfo ) ) ) "),
> +// checkout
> +new ScriptItem(Actions.READ_CLIENT, "( get-latest-rev ( ) ) "),
> +// Error causes a SubversionException to be created, which then
> +// skips closing the Tunnel properly due to 'ExceptionOccurred()'
> +// in 'OperationContext::closeTunnel()'.
> +// If TunnelAgent is unaware and calls 
> 'RequestChannel.nativeRead()',
> +// it will either crash or try to use a random file.
> +new ScriptItem(Actions.EMUL_SERVER, "( success ( ( ) 0: ) ) ( 
> failure ( ( 160006 20:This is a test error 0: 0 ) ) ) "),
> +// TunnelAgent is not aware about the error and just keeps 
> reading.

^^ same here, the comments describe the behavior before the fix, maybe
rephrase it so it's still valid after you fixed it.

-- 
Johan


Re: preparing to release 1.14.1 and 1.10.7

2021-01-27 Thread Johan Corveleyn
On Wed, Jan 27, 2021 at 11:03 AM Thomas Singer
 wrote:
>
> Hi Johan,
>
> Yes, I mean those of Alex' patches that hang around in pending state
> since October. Thank you for reviewing them.
>
> I'm not sure whether other patches from Alex from August
>
> - [PATCH] Fix JavaHL crash in RequestChannel.nativeRead
> - [PATCH] Fix JavaHL crash in TunnelAgent.CloseTunnelCallback after GC

Ah, I think he re-introduced them in the javahl-1.14-fixes branch
which I'm reviewing. So if all goes well, we should get those in
(/crossing fingers).

> or September
>
> - [PATCH] Fix JavaHL error in SVNBase::createCppBoundObject
>
> already were accepted.

Yes, I believe that one was committed [1], and is already backported
to the 1.14.x branch [2], so will be part of 1.14.1.

[1] https://svn.apache.org/r1882115
[2] https://svn.apache.org/r1883407


> --
> Best regards,
> Thomas Singer
>
>
> On 2021-01-27 10:45, Johan Corveleyn wrote:
> > On Wed, Jan 27, 2021 at 10:30 AM Thomas Singer
> >  wrote:
> >>
> >> Please include Alexandr Miloslavskii's JavaHL fixes with SVN 1.14.1.
> >> Thanks in advance.
> >
> > Yep, working on it :-). I assume you're referring to the
> > javahl-1.14-fixes branch, which he pointed to in the dev@ thread with
> > subject "A series of JavaHL fixes on branch 'javahl-1.14-fixes'"? Or
> > are there other fixes that slipped through the cracks?
> >
> > I agree we should try to get them in, if possible. I hope to wrap up
> > my review today.
> >



--
Johan


Re: A series of JavaHL fixes on branch 'javahl-1.14-fixes'

2021-01-27 Thread Johan Corveleyn
On Wed, Jan 27, 2021 at 2:40 AM Johan Corveleyn  wrote:
>
> On Tue, Jan 26, 2021 at 9:56 PM Johan Corveleyn  wrote:
> >
> > On Tue, Jan 26, 2021 at 7:43 PM Alexandr Miloslavskiy
> >  wrote:
> > >
> > > On 25.01.2021 1:55, Johan Corveleyn wrote:
> > >
> > > > As an update: I've started looking into this, but it's a bit more work
> > > > than I anticipated. I want to understand and properly review the
> > > > changes.
> > >
> > > Thanks! I already started thinking that all hope is lost :)
> > >
> > > The branch contains additional tests (added over a few commits). If you
> > > keep the tests but discard my patches to JavaHL, you'll see the crashes.
> > > With patches, crashes are no more.
> > >
> > > I tried to properly explain everything in code comments and commit
> > > messages. However, if you have any questions, please ask, and I'll do my
> > > best to explain.
> >
> > Great! Thanks for sticking around. I'll try to get through it all :-).
>
> Okay, I went through it all, and it looks good to me. Those are some
> pretty delicate bugs / fixes, so thanks for explaining everything so
> well in the comments and commit messages. Great work!
>
> Apart from reading the code, I've applied the tests and their fixes
> individually to better understand them, and to make sure they first
> failed on my system and were subsequently fixed by the corresponding
> fix. After that, I'm satisfied that they are a good step forward.
>
> I did have a couple of tiny questions / remarks, but I'm going to get
> back to them tomorrow, after another fresh look.

Done.

@Alexandr: if you could please take a look at the small remarks /
questions I raised on r1882520, r1882522 and r1882523, that would be
great.

Thanks,
-- 
Johan


Re: svn commit: r1882523 - in /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl: native/ src/org/apache/subversion/javahl/util/

2021-01-27 Thread Johan Corveleyn
On Thu, Oct 15, 2020 at 12:16 PM  wrote:
>
> Author: amiloslavskiy
> Date: Thu Oct 15 10:16:39 2020
> New Revision: 1882523
>
> URL: http://svn.apache.org/viewvc?rev=1882523=rev
> Log:
> JavaHL: Fix crash when TunnelAgent continues reading after being closed
>
> The problem here is that when 'RemoteSession' is destroyed, it also
> does 'apr_pool_destroy()' which frees memory behind 'apr_file_t', which
> is represented by 'TunnelChannel.nativeChannel' in Java.
> 'TunnelChannel' runs on a different thread and is unaware that
> 'apr_file_t' pointer is now invalid.
>
> Fix this by informing 'TunnelChannel' before 'apr_file_t' is freed.
>
> This crash is demonstrated by the following JavaHL tests:
> * testCrash_RequestChannel_nativeRead_AfterException
> * testCrash_RequestChannel_nativeRead_AfterSvnError
>
> This commit alone does not fix all problems in these tests, see
> subsequent commits as well.
>
> [in subversion/bindings/javahl]
> * native/OperationContext.cpp
>   (close_TunnelChannel): New function to inform Java side.
>   (openTunnel): Keep references to Java tunnel objects.
>   (closeTunnel): Inform Java side when tunnel is closed.
> * src/org/apache/subversion/javahl/util/RequestChannel.java
> * src/org/apache/subversion/javahl/util/ResponseChannel.java
>   Add 'synchronized' to avoid error described in 'syncClose()'
> * src/org/apache/subversion/javahl/util/Tunnel.java
>   A new function to clean up. I decided not to change old '.close()'
>   because the new function can lead to a deadlock if used incorrectly.
>
> Modified:
> 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp
> 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/RequestChannel.java
> 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/ResponseChannel.java
> 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/TunnelChannel.java
>
> Modified: 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp
> URL: 
> http://svn.apache.org/viewvc/subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp?rev=1882523=1882522=1882523=diff
> ==
> --- 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp
>  (original)
> +++ 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp
>  Thu Oct 15 10:16:39 2020
> @@ -492,6 +492,8 @@ public:
>request_out(NULL),
>response_in(NULL),
>response_out(NULL),
> +  jrequest(NULL),
> +  jresponse(NULL),
>jclosecb(NULL)
>  {
>status = apr_file_pipe_create_ex(_in, _out,
> @@ -512,6 +514,8 @@ public:
>apr_file_t *response_in;
>apr_file_t *response_out;
>apr_status_t status;
> +  jobject jrequest;
> +  jobject jresponse;

These new fields are not mentioned in the log message.

>jobject jclosecb;
>  };
>
> @@ -523,7 +527,10 @@ jobject create_Channel(const char *class
>jmethodID ctor = env->GetMethodID(cls, "", "(J)V");
>if (JNIUtil::isJavaExceptionThrown())
>  return NULL;
> -  return env->NewObject(cls, ctor, reinterpret_cast(fd));
> +  jobject channel = env->NewObject(cls, ctor, reinterpret_cast(fd));
> +  if (JNIUtil::isJavaExceptionThrown())
> +return NULL;
> +  return env->NewGlobalRef(channel);
>  }

^^ also not mentioned in log message.

(rest looks fine, so if you could amend the commit message with the
missing details, that'd be great)

--
Johan


Re: svn commit: r1882522 - /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp

2021-01-27 Thread Johan Corveleyn
On Thu, Oct 15, 2020 at 12:16 PM  wrote:
>
> Author: amiloslavskiy
> Date: Thu Oct 15 10:15:47 2020
> New Revision: 1882522
>
> URL: http://svn.apache.org/viewvc?rev=1882522=rev
> Log:
> JavaHL: Fix crash in TunnelAgent.CloseTunnelCallback after GC
>
> When jobject reference is kept across different JNI calls, a new global
> reference must be requested with NewGlobalRef(). Otherwise, GC is free
> to remove the object. Even if Java code keeps a reference to the object,
> GC can still move the object around, invalidating the kept jobject,
> which results in a native crash when trying to access it.
>
> This crash is demonstrated by the following JavaHL test:
> 'testCrash_RemoteSession_nativeDispose'
>
> [in subversion/bindings/javahl]
> * native/OperationContext.cpp
>   (callCloseTunnelCallback): Extract function to facilitate changes in
>  further commits.
>   (openTunnel):  Add NewGlobalRef() for kept jobject.
>   (callCloseTunnelCallback): Add a matching DeleteGlobalRef().
>
> Modified:
> 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp
>
> Modified: 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp
> URL: 
> http://svn.apache.org/viewvc/subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp?rev=1882522=1882521=1882522=diff
> ==
> --- 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp
>  (original)
> +++ 
> subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/OperationContext.cpp
>  Thu Oct 15 10:15:47 2020
> @@ -629,23 +629,17 @@ OperationContext::openTunnel(svn_stream_
>jtunnel_name, juser, jhostname, jint(port)),
>SVN_ERR_BASE);
>
> +  if (tc->jclosecb)
> +{
> +  tc->jclosecb = env->NewGlobalRef(tc->jclosecb);
> +  SVN_JNI_CATCH(, SVN_ERR_BASE);
> +}
> +
>return SVN_NO_ERROR;
>  }
>
> -void
> -OperationContext::closeTunnel(void *tunnel_context, void *)
> +void callCloseTunnelCallback(JNIEnv* env, jobject jclosecb)
>  {
> -  TunnelContext* tc = static_cast(tunnel_context);
> -  jobject jclosecb = tc->jclosecb;
> -  delete tc;
> -
> -  if (!jclosecb)
> -return;
> -
> -  JNIEnv *env = JNIUtil::getEnv();
> -  if (JNIUtil::isJavaExceptionThrown())
> -return;
> -
>static jmethodID mid = 0;
>if (0 == mid)
>  {
> @@ -656,4 +650,20 @@ OperationContext::closeTunnel(void *tunn
>SVN_JNI_CATCH_VOID(mid = env->GetMethodID(cls, "closeTunnel", "()V"));
>  }
>SVN_JNI_CATCH_VOID(env->CallVoidMethod(jclosecb, mid));
> +  env->DeleteGlobalRef(jclosecb);
> +}
> +
> +void
> +OperationContext::closeTunnel(void *tunnel_context, void *)
> +{
> +  TunnelContext* tc = static_cast(tunnel_context);
> +  jobject jclosecb = tc->jclosecb;
> +  delete tc;
> +
> +  JNIEnv *env = JNIUtil::getEnv();
> +  if (JNIUtil::isJavaExceptionThrown())
> +return;
> +
> +  if (jclosecb)
> +callCloseTunnelCallback(env, jclosecb);
>  }
>
>

Here above in closeTunnel(), you dropped the early exit on if
(!jclosecb) (before the call to JNIUtil::getEnv()). Was this
intentional?

Previously, in the case of a null jclosecb, the unnecessary calls to
JNIUtil::getEnv() and JNIUtil::isJavaExceptionThrown() were also
avoided. In the new version they aren't (not sure if that's important,
but it's a small behavioral difference).

-- 
Johan


Re: svn commit: r1882520 - /subversion/branches/javahl-1.14-fixes/subversion/bindings/javahl/native/JNIUtil.cpp

2021-01-27 Thread Johan Corveleyn
On Thu, Oct 15, 2020 at 12:14 PM  wrote:
>
> Author: amiloslavskiy
> Date: Thu Oct 15 10:14:30 2020
> New Revision: 1882520
>
> URL: http://svn.apache.org/viewvc?rev=1882520=rev
> Log:
> JavaHL: Fix 'JNI call made with exception pending' error
>
> It is incorrect to call Java method with 'CallObjectMethod' when there
> is an unhandled Java exception already pending. The fix is to
> temporarily move exception out of the way.
>
> This error is easily seen when running JavaHL tests.

Hi Alexandr,

I agree with this change, but was wondering what you meant by "This
error is easily seen when running JavaHL tests"? Is there a warning or
...? Can you explain how to see the effect of "the absence of this
fix"?

Same remark / question for your next commit, r1882521, where you say
in the commit message:
"These warnings are seen in JavaHL tests due to '-Xcheck:jni' option."

For context: I'm building on Windows, with AdoptOpenJDK-11.0.6.10. I
have performed a "release" build, but have adjusted win-tests.py to
pass the -Xcheck:jni option. I'm not seeing any warnings that point to
this, when running the javahl testsuite.

I am however seeing a bunch of other warnings, but I assume these are
totally unrelated to the work you did on the javahl-1.14-fixes branch:

I do get 8 warnings with this sort of message (always similar
stacktrace, always coming from UtilTests.testFileMerge, line 120):
[[[
WARNING: JNI local refs: 33, exceeds capacity: 32
at java.net.NetworkInterface.getAll(java.base@11.0.6/Native Method)
at 
java.net.NetworkInterface.getNetworkInterfaces(java.base@11.0.6/NetworkInterface.java:359)
at 
sun.security.provider.SeedGenerator.addNetworkAdapterInfo(java.base@11.0.6/SeedGenerator.java:229)
at 
sun.security.provider.SeedGenerator$1.run(java.base@11.0.6/SeedGenerator.java:179)
at 
sun.security.provider.SeedGenerator$1.run(java.base@11.0.6/SeedGenerator.java:167)
at java.security.AccessController.doPrivileged(java.base@11.0.6/Native
Method)
at 
sun.security.provider.SeedGenerator.getSystemEntropy(java.base@11.0.6/SeedGenerator.java:167)
at 
sun.security.provider.AbstractDrbg$SeederHolder.(java.base@11.0.6/AbstractDrbg.java:551)
at 
sun.security.provider.AbstractDrbg.getEntropyInput(java.base@11.0.6/AbstractDrbg.java:505)
at 
sun.security.provider.AbstractDrbg.getEntropyInput(java.base@11.0.6/AbstractDrbg.java:494)
at 
sun.security.provider.AbstractDrbg.instantiateIfNecessary(java.base@11.0.6/AbstractDrbg.java:696)
- locked <0x8a727f88> (a sun.security.provider.HashDrbg)
at 
sun.security.provider.AbstractDrbg.engineNextBytes(java.base@11.0.6/AbstractDrbg.java:378)
at 
sun.security.provider.AbstractDrbg.engineNextBytes(java.base@11.0.6/AbstractDrbg.java:334)
at 
sun.security.provider.DRBG.engineNextBytes(java.base@11.0.6/DRBG.java:233)
at 
java.security.SecureRandom.nextBytes(java.base@11.0.6/SecureRandom.java:741)
at 
java.security.SecureRandom.next(java.base@11.0.6/SecureRandom.java:798)
at java.util.Random.nextLong(java.base@11.0.6/Random.java:424)
at 
java.io.File$TempDirectory.generateFile(java.base@11.0.6/File.java:1930)
at java.io.File.createTempFile(java.base@11.0.6/File.java:2078)
at 
org.apache.subversion.javahl.UtilTests.testFileMerge(UtilTests.java:120)
at 
jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.6/Native
Method)
at 
jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.6/NativeMethodAccessorImpl.java:62)
at 
jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.6/DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(java.base@11.0.6/Method.java:566)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:252)
at junit.framework.TestSuite.run(TestSuite.java:247)
at junit.framework.TestSuite.runTest(TestSuite.java:252)
at junit.framework.TestSuite.run(TestSuite.java:247)
at junit.textui.TestRunner.doRun(TestRunner.java:116)
at junit.textui.TestRunner.doRun(TestRunner.java:109)
at junit.textui.TestRunner.run(TestRunner.java:77)
at org.apache.subversion.javahl.RunTests.main(RunTests.java:119)
]]]

I suppose I have some lower default limit for these JNI local refs ...
perhaps this should be adjusted somewhere in our test suite (maybe
this was already done for unix, but not for Windows, but I haven't
investigated further)

Thanks,
-- 
Johan


Re: preparing to release 1.14.1 and 1.10.7

2021-01-27 Thread Johan Corveleyn
On Wed, Jan 27, 2021 at 10:30 AM Thomas Singer
 wrote:
>
> Please include Alexandr Miloslavskii's JavaHL fixes with SVN 1.14.1.
> Thanks in advance.

Yep, working on it :-). I assume you're referring to the
javahl-1.14-fixes branch, which he pointed to in the dev@ thread with
subject "A series of JavaHL fixes on branch 'javahl-1.14-fixes'"? Or
are there other fixes that slipped through the cracks?

I agree we should try to get them in, if possible. I hope to wrap up
my review today.

-- 
Johan


Re: A series of JavaHL fixes on branch 'javahl-1.14-fixes'

2021-01-26 Thread Johan Corveleyn
On Tue, Jan 26, 2021 at 9:56 PM Johan Corveleyn  wrote:
>
> On Tue, Jan 26, 2021 at 7:43 PM Alexandr Miloslavskiy
>  wrote:
> >
> > On 25.01.2021 1:55, Johan Corveleyn wrote:
> >
> > > As an update: I've started looking into this, but it's a bit more work
> > > than I anticipated. I want to understand and properly review the
> > > changes.
> >
> > Thanks! I already started thinking that all hope is lost :)
> >
> > The branch contains additional tests (added over a few commits). If you
> > keep the tests but discard my patches to JavaHL, you'll see the crashes.
> > With patches, crashes are no more.
> >
> > I tried to properly explain everything in code comments and commit
> > messages. However, if you have any questions, please ask, and I'll do my
> > best to explain.
>
> Great! Thanks for sticking around. I'll try to get through it all :-).

Okay, I went through it all, and it looks good to me. Those are some
pretty delicate bugs / fixes, so thanks for explaining everything so
well in the comments and commit messages. Great work!

Apart from reading the code, I've applied the tests and their fixes
individually to better understand them, and to make sure they first
failed on my system and were subsequently fixed by the corresponding
fix. After that, I'm satisfied that they are a good step forward.

I did have a couple of tiny questions / remarks, but I'm going to get
back to them tomorrow, after another fresh look.

-- 
Johan


Re: preparing to release 1.14.1 and 1.10.7

2021-01-26 Thread Johan Corveleyn
On Tue, Jan 26, 2021 at 11:47 PM Stefan Sperling  wrote:
>
> On Tue, Jan 26, 2021 at 04:45:32PM -0500, Nathan Hartman wrote:
> > On Tue, Jan 26, 2021 at 4:28 PM Daniel Shahaf 
> > wrote:
> >
> > > Stefan Sperling wrote on Fri, Jan 22, 2021 at 14:36:56 +0100:
> > > > [...] I will allow myself to merge any nominations which received at
> > > least
> > > > two +1 votes and no vetoes.
> > >
> > > HACKING [1] states:
> > >
> > > "For an LTS release line, a change is approved if it receives three +1s
> > > and no
> > > vetoes. (Only binding votes count; see above.)"
> > >
> > > If you want to change the policy, do so in a new thread with an 
> > > appropriate
> > > subject line.
> >
> >
> > I read that as meaning that stsp will vote on items that need a third vote.
> >
> > Nathan
>
> I literally meant that if there turned out to be lack of voting activity
> with important-looking fixes still in STATUS, I would just merge them with
> two +1s instead of three, applying the "silence implies consensus" principle.
>
> But I'll follow Daniel's opinion now and will simply leave any such fixes 
> dangling.

Yes, I agree we should stick to our established policy here.

We recently loosened our backport-voting policy a bit for non-LTS
(Regular) releases, but we didn't for LTS releases (no time to dig up
the thread, but ISTR we discussed it a bit, but didn't reach consensus
on that). I know it's tempting to loosen even more, with the ever
decreasing developer / volunteer activity, but we shouldn't do so
without proper discussion about our policy.

If we really start running into backport-vote-shortage for important
fixes we should probably highlight this in our next board report.

Anyway, so far, for 1.14.1 and 1.10.7 we seem to be getting just
enough votes on most backport proposals (albeit just barely, and after
months of waiting in some cases).

If any are still in there that you (Stefan) or anyone feels should
really get more votes, please highlight them a bit on the mailinglist
... maybe it's not too late to convince some more people to join the
effort.

-- 
Johan


  1   2   3   4   5   6   7   8   9   10   >