Skip to content

Commit

Permalink
Remove any puppet-library code and reference
Browse files Browse the repository at this point in the history
Minor cleanup and adjustments
  • Loading branch information
Ilja Bobkevic committed Jun 21, 2015
1 parent 36c0d14 commit 48b631a
Show file tree
Hide file tree
Showing 16 changed files with 89 additions and 150 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Puppet Forge Server

Private Puppet Forge Server supporting local files and both v1 and v3 API proxies. Heavily inspired by the [Puppet Library](https://github.com/drrb/puppet-library).
Private Puppet Forge Server supporting local files and both v1 and v3 API proxies.

[![Build Status](https://api.travis-ci.org/unibet/puppet-forge-server.svg)](https://travis-ci.org/unibet/puppet-forge-server)
[![Gem Version](https://badge.fury.io/rb/puppet-forge-server.svg)](http://badge.fury.io/rb/puppet-forge-server)
Expand Down Expand Up @@ -216,5 +216,4 @@ Puppet module *metadata* json representation is used as a main business *model*.

## Reference

* [Puppet Library](https://github.com/drrb/puppet-library)
* [Puppet Anvil](https://github.com/jhaals/puppet-anvil)
4 changes: 2 additions & 2 deletions lib/puppet_forge_server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.

require 'puppet_forge_server/patches'
require 'puppet_forge_server/version'
require 'puppet_forge_server/patches/gem.rb'

module PuppetForgeServer
autoload :Server, 'puppet_forge_server/server'
Expand Down Expand Up @@ -65,4 +65,4 @@ module Utils
module Http
autoload :HttpClient, 'puppet_forge_server/http/http_client'
end
end
end
57 changes: 22 additions & 35 deletions lib/puppet_forge_server/api/v1/modules.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# -*- encoding: utf-8 -*-
#
# Copyright 2014 drrb
# Copyright 2014 North Development AB
# Copyright 2015 North Development AB
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand All @@ -19,49 +18,37 @@ module PuppetForgeServer::Api::V1
module Modules

def get_modules(metadata)
modules = metadata.map do |element|
name = element[:metadata].name.sub(/^[^-]+-/, '')
full_name = element[:metadata].name.sub('-', '/')
{
modules = {}
metadata.each do |element|
if modules[element[:metadata].name]
if max_version(modules[element[:metadata].name][:version], element[:metadata].version) == element[:metadata].version
modules[element[:metadata].name][:desc] = element[:metadata].description,
modules[element[:metadata].name][:version] = element[:metadata].version,
modules[element[:metadata].name][:project_url] = element[:metadata].project_page,
modules[element[:metadata].name][:tag_list] = (modules[element[:metadata].name][:tag_list] + element[:tags]).uniq.compact
end
modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).sort_by { |r| Gem::Version.new(r[:version]) }.reverse
else
name = element[:metadata].name.sub(/^[^-]+-/, '')
modules[element[:metadata].name] = {
:author => element[:metadata].author,
:full_name => full_name,
:full_name => element[:metadata].name.sub('-', '/'),
:name => name,
:desc => element[:metadata].description,
:version => element[:metadata].version,
:project_url => element[:metadata].project_page,
:releases => [{:version => element[:metadata].version}],
:tag_list => [element[:metadata].author, name]
}
:releases => releases_version(element[:metadata]),
:tag_list => element[:tags] ? element[:tags] : [element[:metadata].author, name],
}
end
end

merge_modules(modules)
modules.values
end

private
def merge_modules(modules)
grouped_modules = modules.group_by do |result|
result[:full_name]
end

grouped_modules.values.map do |value|
merge_values(value)
end.flatten.uniq
end

def merge_values(value)
highest_version, tags, releases = value.inject([nil, [], []]) do |(highest_version, tags, releases), result|
[
max_version(highest_version, result[:version]),
tags + (result[:tag_list] || []),
releases + (result[:releases] || [])
]
end

value.first.tap do |result|
result[:version] = highest_version
result[:tag_list] = tags.uniq
result[:releases] = releases.uniq.version_sort_by { |r| r[:version] }.reverse
end
def releases_version(metadata)
[{:version => metadata.version}]
end

def max_version(left, right)
Expand Down
4 changes: 2 additions & 2 deletions lib/puppet_forge_server/api/v1/releases.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ def get_releases(metadata)
{
:file => "/api/v1/files#{element[:path]}",
:version => element[:metadata].version,
:dependencies => element[:metadata].dependencies.map {|dep| [dep.name, dep.version_requirement]}
:dependencies => element[:metadata].dependencies.map {|dep| [dep.name, dep.version_requirement]}.compact
}
end.version_sort_by { |r| r[:version] }
end.sort_by { |r| Gem::Version.new(r[:version]) }
end
end
end
11 changes: 5 additions & 6 deletions lib/puppet_forge_server/api/v3/modules.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,21 @@ def get_modules(metadata)
metadata.each do |element|
if modules[element[:metadata].name]
if max_version(modules[element[:metadata].name][:current_release][:version], element[:metadata].version) == element[:metadata].version
# Saving curret release tags for merging with new max version current release
tags = modules[element[:metadata].name][:current_release][:tags]
modules[element[:metadata].name][:current_release] = get_releases([element]).first
modules[element[:metadata].name][:current_release][:tags] = (modules[element[:metadata].name][:current_release][:tags] + tags).uniq
modules[element[:metadata].name][:current_release][:tags] = (modules[element[:metadata].name][:current_release][:tags] + tags).uniq.compact
end
modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).version_sort_by { |r| r[:version] }.reverse
modules[element[:metadata].name][:releases] = (modules[element[:metadata].name][:releases] + releases_version(element[:metadata])).sort_by { |r| Gem::Version.new(r[:version]) }.reverse
else
name = element[:metadata].name.sub(/^[^-]+-/, '')
author = element[:metadata].name.split('-')[0]
modules[element[:metadata].name] = {
:uri => "/v3/modules/#{element[:metadata].name}",
:name => name,
:name => element[:metadata].name.sub(/^[^-]+-/, ''),
:homepage_url => element[:metadata].project_page,
:issues_url => element[:metadata].issues_url,
:releases => releases_version(element[:metadata]),
:current_release => get_releases([element]).first,
:owner => {:username => author, :uri => "/v3/users/#{author}"}
:owner => {:username => element[:metadata].author, :uri => "/v3/users/#{element[:metadata].author}"}
}
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/puppet_forge_server/api/v3/releases.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def get_releases(metadata)
:file_uri => "/v3/files#{element[:path]}",
:file_md5 => element[:checksum]
}
end.version_sort_by { |r| r[:version] }
end.sort_by { |r| Gem::Version.new(r[:version]) }
end
end
end
2 changes: 1 addition & 1 deletion lib/puppet_forge_server/backends/directory.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def upload(file_data)

private
def read_metadata(archive_path)
metadata_file = read_entry(archive_path, %r[[^/]+/metadata\.json$])
metadata_file = read_from_archive(archive_path, %r[[^/]+/metadata\.json$])
JSON.parse(metadata_file)
rescue => error
warn "Error reading from module archive #{archive_path}: #{error}"
Expand Down
5 changes: 4 additions & 1 deletion lib/puppet_forge_server/http/http_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

require 'open-uri'
require 'open_uri_redirections'
require 'timeout'

module PuppetForgeServer::Http
class HttpClient
Expand All @@ -29,7 +30,9 @@ def download(url)

private
def open_uri(url)
open(url, 'User-Agent' => "Puppet-Forge-Server/#{PuppetForgeServer::VERSION}", :allow_redirections => :safe)
::Timeout.timeout(10) do
open(url, 'User-Agent' => "Puppet-Forge-Server/#{PuppetForgeServer::VERSION}", :allow_redirections => :safe)
end
end
end
end
72 changes: 0 additions & 72 deletions lib/puppet_forge_server/patches.rb

This file was deleted.

21 changes: 21 additions & 0 deletions lib/puppet_forge_server/patches/gem.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- encoding: utf-8 -*-
#
# Copyright 2015 North Development AB
#
# Licensed 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.

class Gem::Version
def initialize version
@version = self.class.correct?(version) ? version.to_s.strip.gsub('-', '.pre.') : '0'
end
end
13 changes: 6 additions & 7 deletions lib/puppet_forge_server/server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -92,21 +92,20 @@ def start(server, options)

private
def backends(options)
options[:backend].map do |type, typed_backends|
# Add directory backend for serving cached modules in case proxy flips over
backends = options[:backend]['Proxy'] && ! options[:backend]['Proxy'].empty? ? [PuppetForgeServer::Backends.const_get('Directory').new(options[:cache_basedir])] : []
backends << options[:backend].map do |type, typed_backends|
typed_backends.map do |url|
case type
when 'Proxy'
@log.info "Detecting API version for #{url}..."
[
PuppetForgeServer::Backends.const_get("#{type}V#{get_api_version(url)}").new(url.chomp('/'), options[:cache_basedir]),
# Add directory backend for serving cached modules in case proxy flips over
PuppetForgeServer::Backends.const_get('Directory').new(options[:cache_basedir])
]
PuppetForgeServer::Backends.const_get("#{type}V#{get_api_version(url)}").new(url.chomp('/'), options[:cache_basedir])
else
PuppetForgeServer::Backends.const_get(type).new(url)
end
end
end.flatten.sort_by { |backend| backend.PRIORITY }
end
backends.flatten.sort_by { |backend| backend.PRIORITY }
end
end
end
10 changes: 6 additions & 4 deletions lib/puppet_forge_server/utils/archiver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@

module PuppetForgeServer::Utils
module Archiver
def read_entry(path, entry_name_regex)
tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(path))
def read_from_archive(archive, name_regex)
tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(archive))
tar.rewind
entry = tar.find { |e| e.full_name =~ entry_name_regex } or raise "Couldn't find entry in archive matching #{entry_name_regex.inspect}"
entry.read
tar.each do |obj|
return obj.read if obj.full_name =~ name_regex
end
raise "Given name #{name_regex} not found in #{archive}"
end
end
end
Loading

0 comments on commit 48b631a

Please sign in to comment.