The method below is a sample showing the main steps for processing an
emeritus request.
It needs some work.

  def to_emeritus(id, env, _)
    user = ASF::Person[id]
    unless user
      raise ArgumentError.new("Person record not found for #{id}")
    end

    # is there already an emeritus file?
    emfile = ASF::EmeritusFiles.find(user)
    if emfile
      raise ArgumentError.new("Emeritus file is already present for
#{id}: #{emfile}")
    end

    # find the request file name for the id
    file = ASF::EmeritusRequestFiles.find(user)
    unless file
      raise ArgumentError.new("Emeritus request file not found for #{id}")
    end

    # this is the file we want to update
    members = File.join(ASF::SVN.svnurl('foundation'),'members.txt')
    msg = "to_emeritus_#{id}"
    begin
      ASF::SVN.multiUpdate(members,msg,env,_) do |text|

        text += "\n#{msg}\n" # TODO update members.txt properly

        src = File.join(ASF::SVN.svnurl('emeritus-requests-received'),file)
        dst = File.join(ASF::SVN.svnurl('emeritus'),file)
        [text,[['mv', src, dst]]]
      end
    rescue => e
      p e
      # TODO add recovery. In theory, should not fail because cannot
have request where
    end
  end

Reply via email to