#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#

module Buildr
  module GPG
    extend self

    def sign_task(pkg)
      file(pkg.to_s + '.asc') do
        puts "GPG signing #{pkg.to_spec}"
        cmd = 'gpg',
               '--local-user', ENV['GPG_USER'],
               '--armor',
               '--output', pkg.to_s + '.asc'
        cmd += ['--passphrase', ENV['GPG_PASS']] if ENV['GPG_PASS']
        cmd += ['--detach-sig', pkg]
        #cmd << { :verbose => true }
        #sh *cmd
        system *cmd
      end
    end

    def sign_and_upload(pkg)
      task(:upload).enhance do
        artifact = Buildr.artifact(pkg.to_spec_hash.merge(:type => "#{pkg.type}.asc"))
        artifact.from sign_task(pkg)
        artifact.invoke
        artifact.upload
      end
    end

    def gpg_sign_before_upload
      self.enhance do 
        [self, self.projects].flatten.each { |prj|
          prj.packages.each { |pkg| sign_and_upload(pkg) }
          prj.packages.map {|pkg| pkg.pom }.uniq.each { |pom| sign_and_upload(pom) }
        }
      end
    end
  end
end

class Buildr::Project
  include Buildr::GPG
end
