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 <apache....@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 <apache....@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 <seb...@gmail.com 
> >> <mailto:seb...@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....@gmail.com 
> >> <mailto:apache....@gmail.com>> wrote:
> >>>
> >>> Hi Sebb,
> >>>
> >>> Is this ready for testing, or should I wait?
> >>>
> >>> Thanks,
> >>> Craig
> >>>
> >>>> Begin forwarded message:
> >>>>
> >>>> From: s...@apache.org <mailto:s...@apache.org>
> >>>> Subject: [whimsy] branch master updated: += create_ metthod
> >>>> Date: July 7, 2020 at 4:07:34 AM PDT
> >>>> To: "comm...@whimsical.apache.org <mailto:comm...@whimsical.apache.org>" 
> >>>> <comm...@whimsical.apache.org <mailto:comm...@whimsical.apache.org>>
> >>>> Reply-To: dev@whimsical.apache.org <mailto: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 
> >>>> <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 <s...@apache.org <mailto:s...@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
> >>> c...@apache.org <mailto:c...@apache.org>
> >>>
> >
> > Craig L Russell
> > c...@apache.org <mailto:c...@apache.org>
> >
>
> Craig L Russell
> c...@apache.org
>

Reply via email to