# File lib/capistrano/configuration/callbacks.rb, line 98
      def on(event, *args, &block)
        options = args.last.is_a?(Hash) ? args.pop : {}
        callbacks[event] ||= []

        if args.empty? && block.nil?
          raise ArgumentError, "please specify either a task name or a block to invoke"
        elsif args.any? && block
          raise ArgumentError, "please specify only a task name or a block, but not both"
        elsif block
          callbacks[event] << ProcCallback.new(block, options)
        else
          args = filter_deprecated_tasks(args)
          options[:only] = filter_deprecated_tasks(options[:only])
          options[:except] = filter_deprecated_tasks(options[:except])

          callbacks[event].concat(args.map { |name| TaskCallback.new(self, name, options) })
        end
      end