You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@whimsical.apache.org by Craig Russell <ap...@gmail.com> on 2020/07/08 21:57:49 UTC
ASF::SVN.create_ method used in roster-emeritus
Hi Sebb,
Here's the code snippet from memstat.json.rb.
EMERITUS_REQUEST_URL = ASF::SVN.svnpath('emeritus-requests-received').untaint
rc = ASF::SVN.create_(EMERITUS_REQUEST_URL, "#{USERID}.txt", signed_request, "Emeritus request from #{USERNAME} (#{USERID}", env, _)
if rc == 1 break # do nothing if there is already an emeritus request
I'm not sure about whether if rc==1 break is correct. There is nothing else to do if there is already a pending emeritus request... And there was already an exception if there was anything else amiss.
This is actually a lot more readable than I expected when I asked if there was a create_ function.
Craig
> On Jul 8, 2020, at 12:39 PM, sebb <se...@gmail.com> wrote:
>
> By all means test it.
>
> I think it works, however it may be necessary to change the API or
> behaviour which is why it is marked as draft.
>
> On Wed, 8 Jul 2020 at 19:46, Craig Russell <ap...@gmail.com> wrote:
>>
>> Hi Sebb,
>>
>> Is this ready for testing, or should I wait?
>>
>> Thanks,
>> Craig
>>
>>> Begin forwarded message:
>>>
>>> From: sebb@apache.org
>>> Subject: [whimsy] branch master updated: += create_ metthod
>>> Date: July 7, 2020 at 4:07:34 AM PDT
>>> To: "commits@whimsical.apache.org" <co...@whimsical.apache.org>
>>> Reply-To: dev@whimsical.apache.org
>>>
>>> This is an automated email from the ASF dual-hosted git repository.
>>>
>>> sebb pushed a commit to branch master
>>> in repository https://gitbox.apache.org/repos/asf/whimsy.git
>>>
>>>
>>> The following commit(s) were added to refs/heads/master by this push:
>>> new 4d3e6fc += create_ metthod
>>> 4d3e6fc is described below
>>>
>>> commit 4d3e6fc5da801224cda3421041a86750984dc711
>>> Author: Sebb <se...@apache.org>
>>> AuthorDate: Tue Jul 7 12:07:23 2020 +0100
>>>
>>> += create_ metthod
>>> ---
>>> lib/whimsy/asf/svn.rb | 31 ++++++++++++++++++++++++++++++-
>>> 1 file changed, 30 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/lib/whimsy/asf/svn.rb b/lib/whimsy/asf/svn.rb
>>> index 6c78056..0dfdb60 100644
>>> --- a/lib/whimsy/asf/svn.rb
>>> +++ b/lib/whimsy/asf/svn.rb
>>> @@ -717,7 +717,36 @@ module ASF
>>> FileUtils.rm_rf tmpdir unless temp
>>> end
>>> end
>>> -
>>> +
>>> + # DRAFT DRAFT
>>> + # create a new file and fail if it already exists
>>> + # Parameters:
>>> + # directory - parent directory as an SVN URL
>>> + # filename - name of file to create
>>> + # source - file to upload
>>> + # msg - commit message
>>> + # env - user/pass
>>> + # _ - wunderbar context
>>> + # Returns:
>>> + # 0 on success
>>> + # 1 if the file exists
>>> + # RuntimeError on unexpected error
>>> + def self.create_(directory, filename, source, msg, env, _)
>>> + parentrev, err = self.getInfoItem(directory, 'revision', env.user, env.password)
>>> + unless parentrev
>>> + throw RuntimeError.new("Failed to get revision for #{directory}: #{err}")
>>> + end
>>> + target = File.join(directory, filename)
>>> + out, err = self.svn('list', target, {env: env})
>>> + return 1 if out # already exists
>>> + # Need to check for unexpected errors; the error message does not include the full repo URL
>>> + unless err =~ %r{^svn: warning: W160013: Path '.+#{filename}' not found}
>>> + throw RuntimeError.new("#{filename} already exists! #{err}")
>>> + end
>>> + commands = [['put', source, target]]
>>> + self.svnmucc_(commands, msg, env, _, parentrev)
>>> + end
>>> +
>>> # DRAFT DRAFT DRAFT
>>> # checkout file and update it using svnmucc put
>>> # the block can return additional info, which is used
>>>
>>
>> Craig L Russell
>> clr@apache.org
>>
Craig L Russell
clr@apache.org
Re: ASF::SVN.create_ method used in roster-emeritus
Posted by Craig Russell <ap...@gmail.com>.
Reducing the regular expression gets past this particular error.
err =~ %r{^svn: warning: W160013:} # file does not exist error
How specific do we want to make this test?
Thanks,
Craig
> On Jul 9, 2020, at 10:03 AM, Craig Russell <ap...@gmail.com> wrote:
>
> Hi Sebb,
>
> Maybe the regular expression is too strict or doesn't cover all the cases. The code expects not only to get an error but a very specific kind of error.
>
> # Need to check for unexpected errors; the error message does not include the full repo URL
> unless err =~
> %r{^svn: warning: W160013: Path '.+#{filename}' not found}
> throw RuntimeError.new("#{filename} already exists! #{err}")
>
> Could you tell a bit more about what you are checking for here?
>
> Thanks,
> Craig
>
>> On Jul 8, 2020, at 4:00 PM, Craig Russell <apache.clr@gmail.com <ma...@gmail.com>> wrote:
>>
>> svn: warning: W160013: URL 'https://svn.apache.org/repos/private/documents/emeritus-requests-received/clr.txt <https://svn.apache.org/repos/private/documents/emeritus-requests-received/clr.txt>' non-existent in revision 98098\nsvn: E200009: Could not list all targets because some targets don't exist\n
>
> Craig L Russell
> clr@apache.org <ma...@apache.org>
>
Craig L Russell
clr@apache.org
Re: ASF::SVN.create_ method used in roster-emeritus
Posted by Craig Russell <ap...@gmail.com>.
Hi Sebb,
Maybe the regular expression is too strict or doesn't cover all the cases. The code expects not only to get an error but a very specific kind of error.
# Need to check for unexpected errors; the error message does not include the full repo URL
unless err =~
%r{^svn: warning: W160013: Path '.+#{filename}' not found}
throw RuntimeError.new("#{filename} already exists! #{err}")
Could you tell a bit more about what you are checking for here?
Thanks,
Craig
> On Jul 8, 2020, at 4:00 PM, Craig Russell <ap...@gmail.com> wrote:
>
> svn: warning: W160013: URL 'https://svn.apache.org/repos/private/documents/emeritus-requests-received/clr.txt <https://svn.apache.org/repos/private/documents/emeritus-requests-received/clr.txt>' non-existent in revision 98098\nsvn: E200009: Could not list all targets because some targets don't exist\n
Craig L Russell
clr@apache.org
Re: ASF::SVN.create_ method used in roster-emeritus
Posted by sebb <se...@gmail.com>.
I don't have time to look at it now, but here is a sample way to test
the library code:
-- cut here --
#!/usr/bin/env ruby
$LOAD_PATH.unshift '/srv/whimsy/lib'
require 'whimsy/asf'
require 'wunderbar'
def env
Struct.new(:user, :password).new('test', nil) # as needed for SVN repo
end
name=`date +'%H-%M.tmp'`.chomp # create a new name every minute
Wunderbar.json do |_|
rc = ASF::SVN.create_('file:////var/tools/svnrep/test',name,__FILE__,'Test',
env, _)
puts "rc = #{rc}"
end
-- cut here --
On Thu, 9 Jul 2020 at 00:00, Craig Russell <ap...@gmail.com> wrote:
>
> I've pushed changes to roster-emeritus branch to:
> - enable sending email to secretary, cc member
> - enable creating the file emeritus-requests-received/member.txt
>
> There is a problem with the create_ function. [1]
>
> Any ideas?
>
> Thanks,
> Craig
>
> Line 83:
> # Write the emeritus request to emeritus-requests-received
> EMERITUS_REQUEST_URL = ASF::SVN.svnpath!('emeritus-requests-received').untaint
> 83=> rc = ASF::SVN.create_(EMERITUS_REQUEST_URL, "#{USERID}.txt", signed_request, "Emeritus request from #{USERNAME} (#{USERID}", env, _)
>
> [1] {
> "exception": "#<UncaughtThrowError: uncaught throw #<RuntimeError: clr.txt already exists! svn: warning: W160013: URL 'https://svn.apache.org/repos/private/documents/emeritus-requests-received/clr.txt' non-existent in revision 98098\nsvn: E200009: Could not list all targets because some targets don't exist\n>>",
> "backtrace": [
> "/Users/clr/apache/git/whimsy/lib/whimsy/asf/svn.rb:757:in `throw'",
> "/Users/clr/apache/git/whimsy/lib/whimsy/asf/svn.rb:757:in `create_'",
> "/Users/clr/apache/git/whimsy/www/roster/views/actions/memstat.json.rb:83:in `_evaluate'",
> "/Users/clr/apache/git/whimsy/www/roster/main.rb:204:in `block in <top (required)>'",
> "/Users/clr/apache/git/whimsy/lib/whimsy/asf/rack.rb:225:in `call'",
> "/Users/clr/apache/git/whimsy/lib/whimsy/asf/rack.rb:50:in `call'",
> "/Users/clr/apache/git/whimsy/lib/whimsy/asf/rack.rb:202:in `call'",
> "/Users/clr/apache/git/whimsy/lib/whimsy/asf/rack.rb:256:in `call'"
> ]
> }
>
> > On Jul 8, 2020, at 2:57 PM, Craig Russell <ap...@gmail.com> wrote:
> >
> > Hi Sebb,
> >
> > Here's the code snippet from memstat.json.rb.
> >
> > EMERITUS_REQUEST_URL = ASF::SVN.svnpath('emeritus-requests-received').untaint
> > rc = ASF::SVN.create_(EMERITUS_REQUEST_URL, "#{USERID}.txt", signed_request, "Emeritus request from #{USERNAME} (#{USERID}", env, _)
> > if rc == 1 break # do nothing if there is already an emeritus request
> >
> > I'm not sure about whether if rc==1 break is correct. There is nothing else to do if there is already a pending emeritus request... And there was already an exception if there was anything else amiss.
> >
> > This is actually a lot more readable than I expected when I asked if there was a create_ function.
> >
> > Craig
> >
> >> On Jul 8, 2020, at 12:39 PM, sebb <sebbaz@gmail.com <ma...@gmail.com>> wrote:
> >>
> >> By all means test it.
> >>
> >> I think it works, however it may be necessary to change the API or
> >> behaviour which is why it is marked as draft.
> >>
> >> On Wed, 8 Jul 2020 at 19:46, Craig Russell <apache.clr@gmail.com <ma...@gmail.com>> wrote:
> >>>
> >>> Hi Sebb,
> >>>
> >>> Is this ready for testing, or should I wait?
> >>>
> >>> Thanks,
> >>> Craig
> >>>
> >>>> Begin forwarded message:
> >>>>
> >>>> From: sebb@apache.org <ma...@apache.org>
> >>>> Subject: [whimsy] branch master updated: += create_ metthod
> >>>> Date: July 7, 2020 at 4:07:34 AM PDT
> >>>> To: "commits@whimsical.apache.org <ma...@whimsical.apache.org>" <commits@whimsical.apache.org <ma...@whimsical.apache.org>>
> >>>> Reply-To: dev@whimsical.apache.org <ma...@whimsical.apache.org>
> >>>>
> >>>> This is an automated email from the ASF dual-hosted git repository.
> >>>>
> >>>> sebb pushed a commit to branch master
> >>>> in repository https://gitbox.apache.org/repos/asf/whimsy.git <https://gitbox.apache.org/repos/asf/whimsy.git>
> >>>>
> >>>>
> >>>> The following commit(s) were added to refs/heads/master by this push:
> >>>> new 4d3e6fc += create_ metthod
> >>>> 4d3e6fc is described below
> >>>>
> >>>> commit 4d3e6fc5da801224cda3421041a86750984dc711
> >>>> Author: Sebb <sebb@apache.org <ma...@apache.org>>
> >>>> AuthorDate: Tue Jul 7 12:07:23 2020 +0100
> >>>>
> >>>> += create_ metthod
> >>>> ---
> >>>> lib/whimsy/asf/svn.rb | 31 ++++++++++++++++++++++++++++++-
> >>>> 1 file changed, 30 insertions(+), 1 deletion(-)
> >>>>
> >>>> diff --git a/lib/whimsy/asf/svn.rb b/lib/whimsy/asf/svn.rb
> >>>> index 6c78056..0dfdb60 100644
> >>>> --- a/lib/whimsy/asf/svn.rb
> >>>> +++ b/lib/whimsy/asf/svn.rb
> >>>> @@ -717,7 +717,36 @@ module ASF
> >>>> FileUtils.rm_rf tmpdir unless temp
> >>>> end
> >>>> end
> >>>> -
> >>>> +
> >>>> + # DRAFT DRAFT
> >>>> + # create a new file and fail if it already exists
> >>>> + # Parameters:
> >>>> + # directory - parent directory as an SVN URL
> >>>> + # filename - name of file to create
> >>>> + # source - file to upload
> >>>> + # msg - commit message
> >>>> + # env - user/pass
> >>>> + # _ - wunderbar context
> >>>> + # Returns:
> >>>> + # 0 on success
> >>>> + # 1 if the file exists
> >>>> + # RuntimeError on unexpected error
> >>>> + def self.create_(directory, filename, source, msg, env, _)
> >>>> + parentrev, err = self.getInfoItem(directory, 'revision', env.user, env.password)
> >>>> + unless parentrev
> >>>> + throw RuntimeError.new("Failed to get revision for #{directory}: #{err}")
> >>>> + end
> >>>> + target = File.join(directory, filename)
> >>>> + out, err = self.svn('list', target, {env: env})
> >>>> + return 1 if out # already exists
> >>>> + # Need to check for unexpected errors; the error message does not include the full repo URL
> >>>> + unless err =~ %r{^svn: warning: W160013: Path '.+#{filename}' not found}
> >>>> + throw RuntimeError.new("#{filename} already exists! #{err}")
> >>>> + end
> >>>> + commands = [['put', source, target]]
> >>>> + self.svnmucc_(commands, msg, env, _, parentrev)
> >>>> + end
> >>>> +
> >>>> # DRAFT DRAFT DRAFT
> >>>> # checkout file and update it using svnmucc put
> >>>> # the block can return additional info, which is used
> >>>>
> >>>
> >>> Craig L Russell
> >>> clr@apache.org <ma...@apache.org>
> >>>
> >
> > Craig L Russell
> > clr@apache.org <ma...@apache.org>
> >
>
> Craig L Russell
> clr@apache.org
>
Re: ASF::SVN.create_ method used in roster-emeritus
Posted by Craig Russell <ap...@gmail.com>.
I've pushed changes to roster-emeritus branch to:
- enable sending email to secretary, cc member
- enable creating the file emeritus-requests-received/member.txt
There is a problem with the create_ function. [1]
Any ideas?
Thanks,
Craig
Line 83:
# Write the emeritus request to emeritus-requests-received
EMERITUS_REQUEST_URL = ASF::SVN.svnpath!('emeritus-requests-received').untaint
83=> rc = ASF::SVN.create_(EMERITUS_REQUEST_URL, "#{USERID}.txt", signed_request, "Emeritus request from #{USERNAME} (#{USERID}", env, _)
[1] {
"exception": "#<UncaughtThrowError: uncaught throw #<RuntimeError: clr.txt already exists! svn: warning: W160013: URL 'https://svn.apache.org/repos/private/documents/emeritus-requests-received/clr.txt' non-existent in revision 98098\nsvn: E200009: Could not list all targets because some targets don't exist\n>>",
"backtrace": [
"/Users/clr/apache/git/whimsy/lib/whimsy/asf/svn.rb:757:in `throw'",
"/Users/clr/apache/git/whimsy/lib/whimsy/asf/svn.rb:757:in `create_'",
"/Users/clr/apache/git/whimsy/www/roster/views/actions/memstat.json.rb:83:in `_evaluate'",
"/Users/clr/apache/git/whimsy/www/roster/main.rb:204:in `block in <top (required)>'",
"/Users/clr/apache/git/whimsy/lib/whimsy/asf/rack.rb:225:in `call'",
"/Users/clr/apache/git/whimsy/lib/whimsy/asf/rack.rb:50:in `call'",
"/Users/clr/apache/git/whimsy/lib/whimsy/asf/rack.rb:202:in `call'",
"/Users/clr/apache/git/whimsy/lib/whimsy/asf/rack.rb:256:in `call'"
]
}
> On Jul 8, 2020, at 2:57 PM, Craig Russell <ap...@gmail.com> wrote:
>
> Hi Sebb,
>
> Here's the code snippet from memstat.json.rb.
>
> EMERITUS_REQUEST_URL = ASF::SVN.svnpath('emeritus-requests-received').untaint
> rc = ASF::SVN.create_(EMERITUS_REQUEST_URL, "#{USERID}.txt", signed_request, "Emeritus request from #{USERNAME} (#{USERID}", env, _)
> if rc == 1 break # do nothing if there is already an emeritus request
>
> I'm not sure about whether if rc==1 break is correct. There is nothing else to do if there is already a pending emeritus request... And there was already an exception if there was anything else amiss.
>
> This is actually a lot more readable than I expected when I asked if there was a create_ function.
>
> Craig
>
>> On Jul 8, 2020, at 12:39 PM, sebb <sebbaz@gmail.com <ma...@gmail.com>> wrote:
>>
>> By all means test it.
>>
>> I think it works, however it may be necessary to change the API or
>> behaviour which is why it is marked as draft.
>>
>> On Wed, 8 Jul 2020 at 19:46, Craig Russell <apache.clr@gmail.com <ma...@gmail.com>> wrote:
>>>
>>> Hi Sebb,
>>>
>>> Is this ready for testing, or should I wait?
>>>
>>> Thanks,
>>> Craig
>>>
>>>> Begin forwarded message:
>>>>
>>>> From: sebb@apache.org <ma...@apache.org>
>>>> Subject: [whimsy] branch master updated: += create_ metthod
>>>> Date: July 7, 2020 at 4:07:34 AM PDT
>>>> To: "commits@whimsical.apache.org <ma...@whimsical.apache.org>" <commits@whimsical.apache.org <ma...@whimsical.apache.org>>
>>>> Reply-To: dev@whimsical.apache.org <ma...@whimsical.apache.org>
>>>>
>>>> This is an automated email from the ASF dual-hosted git repository.
>>>>
>>>> sebb pushed a commit to branch master
>>>> in repository https://gitbox.apache.org/repos/asf/whimsy.git <https://gitbox.apache.org/repos/asf/whimsy.git>
>>>>
>>>>
>>>> The following commit(s) were added to refs/heads/master by this push:
>>>> new 4d3e6fc += create_ metthod
>>>> 4d3e6fc is described below
>>>>
>>>> commit 4d3e6fc5da801224cda3421041a86750984dc711
>>>> Author: Sebb <sebb@apache.org <ma...@apache.org>>
>>>> AuthorDate: Tue Jul 7 12:07:23 2020 +0100
>>>>
>>>> += create_ metthod
>>>> ---
>>>> lib/whimsy/asf/svn.rb | 31 ++++++++++++++++++++++++++++++-
>>>> 1 file changed, 30 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/lib/whimsy/asf/svn.rb b/lib/whimsy/asf/svn.rb
>>>> index 6c78056..0dfdb60 100644
>>>> --- a/lib/whimsy/asf/svn.rb
>>>> +++ b/lib/whimsy/asf/svn.rb
>>>> @@ -717,7 +717,36 @@ module ASF
>>>> FileUtils.rm_rf tmpdir unless temp
>>>> end
>>>> end
>>>> -
>>>> +
>>>> + # DRAFT DRAFT
>>>> + # create a new file and fail if it already exists
>>>> + # Parameters:
>>>> + # directory - parent directory as an SVN URL
>>>> + # filename - name of file to create
>>>> + # source - file to upload
>>>> + # msg - commit message
>>>> + # env - user/pass
>>>> + # _ - wunderbar context
>>>> + # Returns:
>>>> + # 0 on success
>>>> + # 1 if the file exists
>>>> + # RuntimeError on unexpected error
>>>> + def self.create_(directory, filename, source, msg, env, _)
>>>> + parentrev, err = self.getInfoItem(directory, 'revision', env.user, env.password)
>>>> + unless parentrev
>>>> + throw RuntimeError.new("Failed to get revision for #{directory}: #{err}")
>>>> + end
>>>> + target = File.join(directory, filename)
>>>> + out, err = self.svn('list', target, {env: env})
>>>> + return 1 if out # already exists
>>>> + # Need to check for unexpected errors; the error message does not include the full repo URL
>>>> + unless err =~ %r{^svn: warning: W160013: Path '.+#{filename}' not found}
>>>> + throw RuntimeError.new("#{filename} already exists! #{err}")
>>>> + end
>>>> + commands = [['put', source, target]]
>>>> + self.svnmucc_(commands, msg, env, _, parentrev)
>>>> + end
>>>> +
>>>> # DRAFT DRAFT DRAFT
>>>> # checkout file and update it using svnmucc put
>>>> # the block can return additional info, which is used
>>>>
>>>
>>> Craig L Russell
>>> clr@apache.org <ma...@apache.org>
>>>
>
> Craig L Russell
> clr@apache.org <ma...@apache.org>
>
Craig L Russell
clr@apache.org