def packages
      @packages ||= begin
        publish_packages = Array.new
        build_packages   = FileSyncer.glob(@pattern).map { |path| Package.new(path) }

        if @options[:platform_mappings]
          # the platform map is a simple hash with publish to build platform mappings
          @options[:platform_mappings].each_pair do |build_platform, publish_platforms|
            # Splits `ubuntu-12.04` into `ubuntu` and `12.04`
            build_platform, build_platform_version = build_platform.rpartition("-") - %w{ - }

            # locate the package for the build platform
            packages = build_packages.select do |p|
              p.metadata[:platform] == build_platform &&
                p.metadata[:platform_version] == build_platform_version
            end

            if packages.empty?
              log.warn(log_key) do
                "Could not locate a package for build platform #{build_platform}-#{build_platform_version}. " \
                "Publishing will be skipped for: #{publish_platforms.join(', ')}"
              end
            end

            publish_platforms.each do |publish_platform|
              publish_platform, publish_platform_version = publish_platform.rpartition("-") - %w{ - }

              packages.each do |p|
                # create a copy of our package before mucking with its metadata
                publish_package  = p.dup
                publish_metadata = p.metadata.dup.to_hash

                # override the platform and platform version in the metadata
                publish_metadata[:platform]         = publish_platform
                publish_metadata[:platform_version] = publish_platform_version

                # Set the updated metadata on the package object
                publish_package.metadata = Metadata.new(publish_package, publish_metadata)

                publish_packages << publish_package
              end
            end
          end
        else
          publish_packages.concat(build_packages)
        end

        if publish_packages.empty?
          log.info(log_key) { "No packages found, skipping publish" }
        end

        publish_packages
      end
    end
def packages
      @packages ||= begin
        publish_packages = Array.new
        build_packages   = FileSyncer.glob(@pattern).map { |path| Package.new(path) }

        if @options[:platform_mappings]
          # the platform map is a simple hash with publish to build platform mappings
          @options[:platform_mappings].each_pair do |build_platform, publish_platforms|
            # Splits `ubuntu-12.04` into `ubuntu` and `12.04`
            build_platform, build_platform_version = build_platform.rpartition("-") - %w{ - }

            # locate the package for the build platform
            packages = build_packages.select do |p|
              p.metadata[:platform] == build_platform &&
                p.metadata[:platform_version] == build_platform_version
            end

            if packages.empty?
              log.warn(log_key) do
                "Could not locate a package for build platform #{build_platform}-#{build_platform_version}. " \
                "Publishing will be skipped for: #{publish_platforms.join(', ')}"
              end
            end

            publish_platforms.each do |publish_platform|
              publish_platform, publish_platform_version = publish_platform.rpartition("-") - %w{ - }

              packages.each do |p|
                # create a copy of our package before mucking with its metadata
                publish_package  = p.dup
                publish_metadata = p.metadata.dup.to_hash

                # override the platform and platform version in the metadata
                publish_metadata[:platform]         = publish_platform
                publish_metadata[:platform_version] = publish_platform_version

                # Set the updated metadata on the package object
                publish_package.metadata = Metadata.new(publish_package, publish_metadata)

                publish_packages << publish_package
              end
            end
          end
        else
          publish_packages.concat(build_packages)
        end

        if publish_packages.empty?
          log.info(log_key) { "No packages found, skipping publish" }
        end

        publish_packages
      end
    end
Create a new publisher from the given pattern.

 @param [String] pattern
   the path/pattern of the release artifact(s)

 @param [Hash] options
   the list of options passed to the publisher
 @option options [Hash] :platform_mappings A simple
   mapping of build to publish platform(s)
 @example
   {
     'ubuntu-10.04' => [
       'ubuntu-10.04',
       'ubuntu-12.04',
       'ubuntu-14.04',
     ],
   }


 The list of packages that match the pattern in the initializer.

 @return [Array<String>]