From f8db968262e25069e3f8c534e777234505cd01c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Molina=20Colmenero?= Date: Wed, 9 Jul 2014 17:46:04 +0200 Subject: [PATCH 01/25] Added documentation when opening a module information screen --- bin/puppet-library | 0 lib/puppet_library/app/views/layout.haml | 2 +- lib/puppet_library/app/views/module.haml | 5 ++ lib/puppet_library/forge.rb | 1 + lib/puppet_library/forge/abstract.rb | 7 +- lib/puppet_library/forge/directory.rb | 12 ++- lib/puppet_library/forge/source_directory.rb | 92 ++++++++++++++++++++ lib/puppet_library/puppet_library.rb | 8 +- puppet-library.gemspec | 1 + 9 files changed, 124 insertions(+), 4 deletions(-) mode change 100755 => 100644 bin/puppet-library create mode 100644 lib/puppet_library/forge/source_directory.rb diff --git a/bin/puppet-library b/bin/puppet-library old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/layout.haml b/lib/puppet_library/app/views/layout.haml index 6f3b06e..a3107bb 100644 --- a/lib/puppet_library/app/views/layout.haml +++ b/lib/puppet_library/app/views/layout.haml @@ -27,7 +27,7 @@ %style :plain body { - padding-top: 50px; + padding-top: 100px; } input.search-query { padding-left:32px; diff --git a/lib/puppet_library/app/views/module.haml b/lib/puppet_library/app/views/module.haml index af99ca7..fac5312 100644 --- a/lib/puppet_library/app/views/module.haml +++ b/lib/puppet_library/app/views/module.haml @@ -23,3 +23,8 @@ %ul - metadata["releases"].each do |release| %li= release["version"] + +%hr + +%div= "#{metadata["documentation"]}" + diff --git a/lib/puppet_library/forge.rb b/lib/puppet_library/forge.rb index 1e59d4f..a4718f9 100644 --- a/lib/puppet_library/forge.rb +++ b/lib/puppet_library/forge.rb @@ -22,6 +22,7 @@ class ModuleNotFound < Exception require 'puppet_library/forge/abstract' require 'puppet_library/forge/cache' require 'puppet_library/forge/directory' + require 'puppet_library/forge/source_directory' require 'puppet_library/forge/forge' require 'puppet_library/forge/git_repository' require 'puppet_library/forge/multi' diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb index 7b592f6..cf69066 100644 --- a/lib/puppet_library/forge/abstract.rb +++ b/lib/puppet_library/forge/abstract.rb @@ -153,6 +153,10 @@ def project_page def dependency_names dependencies.map {|d| d["name"]} end + + def documentation + @metadata["documentation"] + end def to_info { @@ -160,7 +164,8 @@ def to_info "full_name" => full_name, "name" => name, "desc" => description, - "releases" => [ { "version" => version } ] + "releases" => [ { "version" => version } ], + "documentation" => documentation } end diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index 6c22527..a3b6bd9 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -15,6 +15,7 @@ # along with this program. If not, see . require 'json' +require 'redcarpet' require 'puppet_library/forge/abstract' require 'puppet_library/archive/archive_reader' require 'puppet_library/util/config_api' @@ -78,7 +79,16 @@ def get_metadata(author, module_name) def read_metadata(archive_path) archive = PuppetLibrary::Archive::ArchiveReader.new(archive_path) metadata_file = archive.read_entry %r[[^/]+/metadata\.json$] - JSON.parse(metadata_file) + + + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + readmeText = archive.read_entry %r[/README\.(md|markdown)] + readmeHTML = markdown.render(readmeText) + parsedJSON = JSON.parse(metadata_file) + + parsedJSON["documentation"] = readmeHTML + parsedJSON + rescue => error warn "Error reading from module archive #{archive_path}: #{error}" return nil diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb new file mode 100644 index 0000000..2bef7cb --- /dev/null +++ b/lib/puppet_library/forge/source_directory.rb @@ -0,0 +1,92 @@ +# Puppet Library +# Copyright (C) 2014 drrb +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +require 'json' +require 'redcarpet' +require 'puppet_library/forge/abstract' +require 'puppet_library/util/config_api' + +module PuppetLibrary::Forge + + # A forge that serves modules in unpacked format from a directory on disk. + # + # Note: + # * The modules must be in unpacked format + # * The modules (directories) must be named in the format modulename + # * The modules must contain a +metadata.json+ file + # + # Usage: + # + # forge = PuppetLibrary::Forge::SourceDirectory.configure do + # # The path to serve the modules from + # path "/var/modules/cache" + # end + class SourceDirectory < PuppetLibrary::Forge::Abstract + def self.configure(&block) + config_api = PuppetLibrary::Util::ConfigApi.for(SourceDirectory) do + required :path, "path to the modules' source" do |path| + Dir.new(File.expand_path(path)) + end + end + config = config_api.configure(&block) + Source.new(config.get_path) + end + + # * :module_dir - The directory containing the packaged modules. + def initialize(module_dir) + super(self) + @module_dir = module_dir + end + + def get_module(name) + file_name = "#{name}" + path = File.join(@module_dir.path, file_name) + if File.exist? path + File.open(path, 'r') + else + nil + end + end + + def get_all_metadata + get_metadata("*") + end + + def get_metadata(module_name) + archives = Dir["#{@module_dir.path}/#{module_name}"] + archives.map {|path| read_metadata(path) }.compact + end + + private + + def read_metadata(archive_path) + metadata_file = File.open(File.join(@module_dir.path, "metadata.json"), "r").read + + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + readmeText = File.open("README.md", "r").read + readmeHTML = markdown.render(readmeText) + parsedJSON = JSON.parse(metadata_file) + + parsedJSON["documentation"] = readmeHTML + parsedJSON + + rescue => error + warn "Error reading from module archive #{archive_path}: #{error}" + return nil + end + end +end + diff --git a/lib/puppet_library/puppet_library.rb b/lib/puppet_library/puppet_library.rb index 0b63a9d..0d73960 100644 --- a/lib/puppet_library/puppet_library.rb +++ b/lib/puppet_library/puppet_library.rb @@ -18,6 +18,7 @@ require 'optparse' require 'rack' require 'yaml' +require 'puppet_library/forge/source_directory' require 'puppet_library/forge/directory' require 'puppet_library/forge/multi' require 'puppet_library/forge/proxy' @@ -86,6 +87,11 @@ def parse_options(args) opts.on("--cache-basedir DIR", "Cache all proxies' downloaded modules under this directory") do |cache_basedir| options[:cache_basedir] = cache_basedir end + + #new option --modulepath + opts.on("--modulepath DIR", "Directory containing all module's sources") do |modulepath| + options[:forges] << [Forge::SourceDirectory, modulepath] + end end begin option_parser.parse(args) @@ -161,7 +167,7 @@ def load_defaults!(options) def process_options!(options) options[:forges].map! do |(forge_type, config)| - if [ Forge::Directory, Forge::Source ].include? forge_type + if [ Forge::Directory, Forge::Source, Forge::SourceDirectory ].include? forge_type [ forge_type, [ Dir.new(sanitize_path(config)) ]] elsif forge_type == Forge::Proxy && options[:cache_basedir] cache_dir = File.join(options[:cache_basedir], url_hostname(config)) diff --git a/puppet-library.gemspec b/puppet-library.gemspec index 8abcb9c..d63292e 100644 --- a/puppet-library.gemspec +++ b/puppet-library.gemspec @@ -41,6 +41,7 @@ Gem::Specification.new do |spec| spec.add_dependency "haml" spec.add_dependency "docile", ">= 1.0.0" spec.add_dependency "open4" + spec.add_dependency "redcarpet", "~> 2.3.0" spec.add_development_dependency "bundler", "~> 1.3" spec.add_development_dependency "coveralls" From eec26073e2db515b6485bdee93410dba98e8b8f8 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Sat, 19 Jul 2014 13:05:15 +0200 Subject: [PATCH 02/25] Added --modulepath option successfully --- bin/puppet-library | 0 lib/puppet_library/forge/source_directory.rb | 21 ++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) mode change 100644 => 100755 bin/puppet-library diff --git a/bin/puppet-library b/bin/puppet-library old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 2bef7cb..27fd815 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -20,7 +20,7 @@ require 'puppet_library/util/config_api' module PuppetLibrary::Forge - + # A forge that serves modules in unpacked format from a directory on disk. # # Note: @@ -42,10 +42,10 @@ def self.configure(&block) end end config = config_api.configure(&block) - Source.new(config.get_path) + SourceDirectory.new(config.get_path) end - # * :module_dir - The directory containing the packaged modules. + # * :module_dir - The directory containing the unpackaged modules. def initialize(module_dir) super(self) @module_dir = module_dir @@ -62,21 +62,22 @@ def get_module(name) end def get_all_metadata - get_metadata("*") + get_metadata("*","*") end - def get_metadata(module_name) + def get_metadata(author, module_name) archives = Dir["#{@module_dir.path}/#{module_name}"] archives.map {|path| read_metadata(path) }.compact end private - - def read_metadata(archive_path) - metadata_file = File.open(File.join(@module_dir.path, "metadata.json"), "r").read + def read_metadata(directory_path) + metadata_file = File.open(File.join(directory_path, "metadata.json"), "r").read markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) - readmeText = File.open("README.md", "r").read + Dir.chdir(directory_path) + readmePath = Dir["README.{md,markdown}"].first + readmeText = File.open("#{directory_path}/#{readmePath}").read readmeHTML = markdown.render(readmeText) parsedJSON = JSON.parse(metadata_file) @@ -84,7 +85,7 @@ def read_metadata(archive_path) parsedJSON rescue => error - warn "Error reading from module archive #{archive_path}: #{error}" + warn "Error reading from module archive #{directory_path}: #{error}" return nil end end From 146da3a9efd4bd05447820ba29f85fa6aabc3fbb Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Sat, 19 Jul 2014 14:46:04 +0200 Subject: [PATCH 03/25] Added Modulefile compatibility --- lib/puppet_library/forge/source_directory.rb | 25 +++++++++++++------ .../puppet_module/modulefile.rb | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 27fd815..365fbb9 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -51,11 +51,11 @@ def initialize(module_dir) @module_dir = module_dir end - def get_module(name) + def get_module(author, name, version) file_name = "#{name}" path = File.join(@module_dir.path, file_name) if File.exist? path - File.open(path, 'r') + File.open(path, 'r:UTF-8') else nil end @@ -72,20 +72,29 @@ def get_metadata(author, module_name) private def read_metadata(directory_path) - metadata_file = File.open(File.join(directory_path, "metadata.json"), "r").read + metadata_file_path = File.join(directory_path, "metadata.json") + modulefile_path = File.join(directory_path, "Modulefile") + + if File.exist?(metadata_file_path) + metadata_file = File.open(metadata_file_path, "r:UTF-8").read + parsedJSON = JSON.parse(metadata_file) + elsif File.exist?(modulefile_path) + parsedJSON = PuppetLibrary::PuppetModule::Modulefile.read(modulefile_path).to_metadata + else + return nil + end markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) - Dir.chdir(directory_path) - readmePath = Dir["README.{md,markdown}"].first - readmeText = File.open("#{directory_path}/#{readmePath}").read + Dir.chdir("#{directory_path}") + readmePath = Dir["README*"].first + readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read readmeHTML = markdown.render(readmeText) - parsedJSON = JSON.parse(metadata_file) parsedJSON["documentation"] = readmeHTML parsedJSON rescue => error - warn "Error reading from module archive #{directory_path}: #{error}" + warn "Error reading from module archive #{directory_path}: #{error.backtrace.join("\n")}" return nil end end diff --git a/lib/puppet_library/puppet_module/modulefile.rb b/lib/puppet_library/puppet_module/modulefile.rb index 4cf90d0..b131129 100644 --- a/lib/puppet_library/puppet_module/modulefile.rb +++ b/lib/puppet_library/puppet_module/modulefile.rb @@ -17,7 +17,7 @@ module PuppetLibrary::PuppetModule class Modulefile def self.read(modulefile_path) - parse(File.read(modulefile_path)) + parse(File.open(modulefile_path, "r:UTF-8").read) end def self.parse(modulefile_source) From 3d3e5a981411753782ce484a82db585eff2e8162 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Tue, 22 Jul 2014 10:52:45 +0200 Subject: [PATCH 04/25] Sorting search results alphabetically and displaying modules with wrong Modulefile --- lib/puppet_library/forge/abstract.rb | 260 +++++++++---------- lib/puppet_library/forge/source_directory.rb | 36 ++- 2 files changed, 154 insertions(+), 142 deletions(-) diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb index cf69066..275d132 100644 --- a/lib/puppet_library/forge/abstract.rb +++ b/lib/puppet_library/forge/abstract.rb @@ -21,7 +21,7 @@ require 'puppet_library/util/patches' module PuppetLibrary::Forge - + # An abstract forge implementation that makes it easier to create new forge # types. # @@ -30,166 +30,166 @@ class Abstract < Forge def initialize(module_repo) @repo = module_repo end - + def search_modules(query) search = Search.new(query) - + search_results = retrieve_all_metadata.select do |result| search.matches? result end.sort_by do |result| - result.version - end.reverse.map do |result| + result.full_name.downcase + end.map do |result| result.to_search_result end - + SearchResult.merge_by_full_name(search_results) end - + def get_module_metadata(author, name) modules = retrieve_metadata(author, name) - + raise ModuleNotFound if modules.empty? - + modules = modules.version_sort_by { |m| m.version } module_infos = modules.map { |m| m.to_info } module_infos.deep_merge end - + def get_module_metadata_with_dependencies(author, name, version) raise ModuleNotFound if retrieve_metadata(author, name).empty? - + full_name = "#{author}/#{name}" versions = collect_dependencies_versions(full_name) return versions if version.nil? - + versions[full_name] = versions[full_name].select do |v| PuppetLibrary::Util::Dependency.new(name, version).match?(name, v["version"]) end - + dependencies = versions[full_name].map do |v| v["dependencies"].map {|(name, spec)| name} end.flatten versions = Hash[versions.select do |name, info| name == full_name || dependencies.include?(name) - end] - return versions - end - - def collect_dependencies_versions(module_full_name, metadata = {}) - author, module_name = module_full_name.split "/" - module_versions = retrieve_metadata(author, module_name) - metadata[module_full_name] = module_versions.map {|v| v.to_version } - - dependencies = module_versions.map {|v| v.dependency_names }.flatten - dependencies.each do |dependency| - collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency + end] + return versions + end + + def collect_dependencies_versions(module_full_name, metadata = {}) + author, module_name = module_full_name.split "/" + module_versions = retrieve_metadata(author, module_name) + metadata[module_full_name] = module_versions.map {|v| v.to_version } + + dependencies = module_versions.map {|v| v.dependency_names }.flatten + dependencies.each do |dependency| + collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency + end + return metadata + end + + def get_module_buffer(author, name, version) + @repo.get_module(author, name, version) or raise ModuleNotFound + end + + def retrieve_metadata(author, module_name) + @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} + end + + def retrieve_all_metadata + @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} end - return metadata - end - - def get_module_buffer(author, name, version) - @repo.get_module(author, name, version) or raise ModuleNotFound - end - - def retrieve_metadata(author, module_name) - @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} - end - - def retrieve_all_metadata - @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} - end - end - - class Search - def initialize(query) - @query = query - end - - def matches?(metadata) - return true if @query.nil? - return true if metadata.name.include? @query - return true if metadata.author.include? @query - return false - end - end - - class ModuleMetadata - def initialize(metadata) - @metadata = metadata - end - - def author - @metadata["name"][/^[^-]+/] - end - - def name - @metadata["name"].sub(/^[^-]+-/, "") - end - - def full_name - @metadata["name"].sub("-", "/") - end - - def version - @metadata["version"] - end - - def dependencies - @metadata["dependencies"] - end - - def summary - @metadata["summary"] - end - - def description - @metadata["description"] - end - - def project_page - @metadata["project_page"] - end - - def dependency_names - dependencies.map {|d| d["name"]} end - def documentation - @metadata["documentation"] - end - - def to_info - { - "author" => author, - "full_name" => full_name, - "name" => name, - "desc" => description, - "releases" => [ { "version" => version } ], - "documentation" => documentation - } - end - - def to_version - { - "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", - "version" => version, - "dependencies" => dependencies.map do |dependency| - [ dependency["name"], dependency["version_requirement"] ] - end - } + class Search + def initialize(query) + @query = query + end + + def matches?(metadata) + return true if @query.nil? + return true if metadata.name.include? @query + return true if metadata.author.include? @query + return false + end end - - def to_search_result - { - "author" => author, - "full_name" => full_name, - "name" => name, - "desc" => summary, - "project_url" => project_page, - "releases" => [{ "version" => version}], - "version" => version, - "tag_list" => [author, name] - } + + class ModuleMetadata + def initialize(metadata) + @metadata = metadata + end + + def author + @metadata["name"][/^[^-]+/] + end + + def name + @metadata["name"].sub(/^[^-]+-/, "") + end + + def full_name + @metadata["name"].sub("-", "/") + end + + def version + @metadata["version"] + end + + def dependencies + @metadata["dependencies"] + end + + def summary + @metadata["summary"] + end + + def description + @metadata["description"] + end + + def project_page + @metadata["project_page"] + end + + def dependency_names + dependencies.map {|d| d["name"]} + end + + def documentation + @metadata["documentation"] + end + + def to_info + { + "author" => author, + "full_name" => full_name, + "name" => name, + "desc" => description, + "releases" => [ { "version" => version } ], + "documentation" => documentation + } + end + + def to_version + { + "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", + "version" => version, + "dependencies" => dependencies.map do |dependency| + [ dependency["name"], dependency["version_requirement"] ] + end + } + end + + def to_search_result + { + "author" => author, + "full_name" => full_name, + "name" => name, + "desc" => summary, + "project_url" => project_page, + "releases" => [{ "version" => version}], + "version" => version, + "tag_list" => [author, name] + } + end end - end -end + end \ No newline at end of file diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 365fbb9..026e748 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -8,11 +8,11 @@ # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . require 'json' require 'redcarpet' @@ -30,10 +30,10 @@ module PuppetLibrary::Forge # # Usage: # - # forge = PuppetLibrary::Forge::SourceDirectory.configure do - # # The path to serve the modules from - # path "/var/modules/cache" - # end + # forge = PuppetLibrary::Forge::SourceDirectory.configure do + # # The path to serve the modules from + # path "/var/modules/cache" + # end class SourceDirectory < PuppetLibrary::Forge::Abstract def self.configure(&block) config_api = PuppetLibrary::Util::ConfigApi.for(SourceDirectory) do @@ -63,6 +63,7 @@ def get_module(author, name, version) def get_all_metadata get_metadata("*","*") +#.sort! { |x,y| "#{x["name"]}" <=> "#{y["name"]}" } end def get_metadata(author, module_name) @@ -84,19 +85,30 @@ def read_metadata(directory_path) return nil end - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) Dir.chdir("#{directory_path}") readmePath = Dir["README*"].first - readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read - readmeHTML = markdown.render(readmeText) + if File.exist?(readmePath) + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read + readmeHTML = markdown.render(readmeText) + parsedJSON["documentation"] = readmeHTML + end - parsedJSON["documentation"] = readmeHTML parsedJSON rescue => error warn "Error reading from module archive #{directory_path}: #{error.backtrace.join("\n")}" - return nil + return { + "name" => "unknown/#{directory_path.split("/").last}", + "version" => "unknown", + "source" => "unknown", + "author" => "unknown", + "license" => "unknown", + "summary" => "unknown", + "description" => "unknown", + "project_page" => "unknown", + "dependencies" => "unknown" + } end end end - From a8ec08defa0aa04160e1639a076f94ae3018c27f Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Mon, 4 Aug 2014 15:25:35 +0200 Subject: [PATCH 05/25] Fixed library files --- CHANGELOG.yml | 0 Gemfile | 0 Guardfile | 0 LICENSE.txt | 0 README.md | 0 Rakefile | 0 TODO.yml | 0 config.ru | 0 features/module_list.feature | 0 features/module_page.feature | 0 features/module_search.feature | 0 features/step_definitions/sinatra_steps.rb | 0 features/support/env.rb | 0 lib/puppet_library.rb | 0 lib/puppet_library/app/views/index.haml | 0 lib/puppet_library/app/views/layout.haml | 0 lib/puppet_library/app/views/module.haml | 1 - .../app/views/module_not_found.haml | 0 lib/puppet_library/archive.rb | 0 lib/puppet_library/archive/archive_reader.rb | 0 lib/puppet_library/archive/archiver.rb | 0 lib/puppet_library/forge.rb | 0 lib/puppet_library/forge/abstract.rb | 73 ++++++++++--------- lib/puppet_library/forge/cache.rb | 0 lib/puppet_library/forge/forge.rb | 0 lib/puppet_library/forge/git_repository.rb | 0 lib/puppet_library/forge/multi.rb | 0 lib/puppet_library/forge/proxy.rb | 0 lib/puppet_library/forge/search_result.rb | 0 lib/puppet_library/forge/source.rb | 0 lib/puppet_library/forge/source_directory.rb | 1 + lib/puppet_library/http.rb | 0 lib/puppet_library/http/cache.rb | 0 lib/puppet_library/http/cache/disk.rb | 0 lib/puppet_library/http/cache/in_memory.rb | 0 lib/puppet_library/http/cache/noop.rb | 0 lib/puppet_library/http/http_client.rb | 0 lib/puppet_library/http/url.rb | 0 lib/puppet_library/puppet_module.rb | 0 .../puppet_module/modulefile.rb | 2 +- lib/puppet_library/server.rb | 0 lib/puppet_library/util.rb | 0 lib/puppet_library/util/config_api.rb | 0 lib/puppet_library/util/dependency.rb | 0 lib/puppet_library/util/git.rb | 0 lib/puppet_library/util/logging.rb | 0 lib/puppet_library/util/patches.rb | 0 lib/puppet_library/util/temp_dir.rb | 0 spec/archive/archive_reader_spec.rb | 0 spec/archive/archiver_spec.rb | 0 spec/forge/abstract_spec.rb | 0 spec/forge/cache_spec.rb | 0 spec/forge/directory_spec.rb | 0 spec/forge/git_repository_spec.rb | 0 spec/forge/multi_spec.rb | 0 spec/forge/proxy_spec.rb | 0 spec/forge/source_spec.rb | 0 spec/http/cache/disk_spec.rb | 0 spec/http/cache/in_memory_spec.rb | 0 spec/http/cache/noop_spec.rb | 0 spec/http/http_client_spec.rb | 0 spec/http/url_spec.rb | 0 spec/integration_test_helper.rb | 0 spec/module_spec_helper.rb | 0 spec/puppet_library_spec.rb | 0 spec/puppet_module/modulefile_spec.rb | 0 spec/server_spec.rb | 0 spec/spec_helper.rb | 0 spec/util/config_api_spec.rb | 0 spec/util/dependency_spec.rb | 0 spec/util/git_spec.rb | 0 spec/util/patches_spec.rb | 0 spec/util/temp_dir_spec.rb | 0 test/directory_forge_integration_test.rb | 0 ...offline_git_repo_forge_integration_test.rb | 0 test/offline_proxy_forge_integration_test.rb | 0 .../online_git_repo_forge_integration_test.rb | 0 test/online_proxy_forge_integration_test.rb | 0 test/source_forge_integration_test.rb | 0 79 files changed, 40 insertions(+), 37 deletions(-) mode change 100644 => 100755 CHANGELOG.yml mode change 100644 => 100755 Gemfile mode change 100644 => 100755 Guardfile mode change 100644 => 100755 LICENSE.txt mode change 100644 => 100755 README.md mode change 100644 => 100755 Rakefile mode change 100644 => 100755 TODO.yml mode change 100644 => 100755 config.ru mode change 100644 => 100755 features/module_list.feature mode change 100644 => 100755 features/module_page.feature mode change 100644 => 100755 features/module_search.feature mode change 100644 => 100755 features/step_definitions/sinatra_steps.rb mode change 100644 => 100755 features/support/env.rb mode change 100644 => 100755 lib/puppet_library.rb mode change 100644 => 100755 lib/puppet_library/app/views/index.haml mode change 100644 => 100755 lib/puppet_library/app/views/layout.haml mode change 100644 => 100755 lib/puppet_library/app/views/module.haml mode change 100644 => 100755 lib/puppet_library/app/views/module_not_found.haml mode change 100644 => 100755 lib/puppet_library/archive.rb mode change 100644 => 100755 lib/puppet_library/archive/archive_reader.rb mode change 100644 => 100755 lib/puppet_library/archive/archiver.rb mode change 100644 => 100755 lib/puppet_library/forge.rb mode change 100644 => 100755 lib/puppet_library/forge/abstract.rb mode change 100644 => 100755 lib/puppet_library/forge/cache.rb mode change 100644 => 100755 lib/puppet_library/forge/forge.rb mode change 100644 => 100755 lib/puppet_library/forge/git_repository.rb mode change 100644 => 100755 lib/puppet_library/forge/multi.rb mode change 100644 => 100755 lib/puppet_library/forge/proxy.rb mode change 100644 => 100755 lib/puppet_library/forge/search_result.rb mode change 100644 => 100755 lib/puppet_library/forge/source.rb mode change 100644 => 100755 lib/puppet_library/http.rb mode change 100644 => 100755 lib/puppet_library/http/cache.rb mode change 100644 => 100755 lib/puppet_library/http/cache/disk.rb mode change 100644 => 100755 lib/puppet_library/http/cache/in_memory.rb mode change 100644 => 100755 lib/puppet_library/http/cache/noop.rb mode change 100644 => 100755 lib/puppet_library/http/http_client.rb mode change 100644 => 100755 lib/puppet_library/http/url.rb mode change 100644 => 100755 lib/puppet_library/puppet_module.rb mode change 100644 => 100755 lib/puppet_library/puppet_module/modulefile.rb mode change 100644 => 100755 lib/puppet_library/server.rb mode change 100644 => 100755 lib/puppet_library/util.rb mode change 100644 => 100755 lib/puppet_library/util/config_api.rb mode change 100644 => 100755 lib/puppet_library/util/dependency.rb mode change 100644 => 100755 lib/puppet_library/util/git.rb mode change 100644 => 100755 lib/puppet_library/util/logging.rb mode change 100644 => 100755 lib/puppet_library/util/patches.rb mode change 100644 => 100755 lib/puppet_library/util/temp_dir.rb mode change 100644 => 100755 spec/archive/archive_reader_spec.rb mode change 100644 => 100755 spec/archive/archiver_spec.rb mode change 100644 => 100755 spec/forge/abstract_spec.rb mode change 100644 => 100755 spec/forge/cache_spec.rb mode change 100644 => 100755 spec/forge/directory_spec.rb mode change 100644 => 100755 spec/forge/git_repository_spec.rb mode change 100644 => 100755 spec/forge/multi_spec.rb mode change 100644 => 100755 spec/forge/proxy_spec.rb mode change 100644 => 100755 spec/forge/source_spec.rb mode change 100644 => 100755 spec/http/cache/disk_spec.rb mode change 100644 => 100755 spec/http/cache/in_memory_spec.rb mode change 100644 => 100755 spec/http/cache/noop_spec.rb mode change 100644 => 100755 spec/http/http_client_spec.rb mode change 100644 => 100755 spec/http/url_spec.rb mode change 100644 => 100755 spec/integration_test_helper.rb mode change 100644 => 100755 spec/module_spec_helper.rb mode change 100644 => 100755 spec/puppet_library_spec.rb mode change 100644 => 100755 spec/puppet_module/modulefile_spec.rb mode change 100644 => 100755 spec/server_spec.rb mode change 100644 => 100755 spec/spec_helper.rb mode change 100644 => 100755 spec/util/config_api_spec.rb mode change 100644 => 100755 spec/util/dependency_spec.rb mode change 100644 => 100755 spec/util/git_spec.rb mode change 100644 => 100755 spec/util/patches_spec.rb mode change 100644 => 100755 spec/util/temp_dir_spec.rb mode change 100644 => 100755 test/directory_forge_integration_test.rb mode change 100644 => 100755 test/offline_git_repo_forge_integration_test.rb mode change 100644 => 100755 test/offline_proxy_forge_integration_test.rb mode change 100644 => 100755 test/online_git_repo_forge_integration_test.rb mode change 100644 => 100755 test/online_proxy_forge_integration_test.rb mode change 100644 => 100755 test/source_forge_integration_test.rb diff --git a/CHANGELOG.yml b/CHANGELOG.yml old mode 100644 new mode 100755 diff --git a/Gemfile b/Gemfile old mode 100644 new mode 100755 diff --git a/Guardfile b/Guardfile old mode 100644 new mode 100755 diff --git a/LICENSE.txt b/LICENSE.txt old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/Rakefile b/Rakefile old mode 100644 new mode 100755 diff --git a/TODO.yml b/TODO.yml old mode 100644 new mode 100755 diff --git a/config.ru b/config.ru old mode 100644 new mode 100755 diff --git a/features/module_list.feature b/features/module_list.feature old mode 100644 new mode 100755 diff --git a/features/module_page.feature b/features/module_page.feature old mode 100644 new mode 100755 diff --git a/features/module_search.feature b/features/module_search.feature old mode 100644 new mode 100755 diff --git a/features/step_definitions/sinatra_steps.rb b/features/step_definitions/sinatra_steps.rb old mode 100644 new mode 100755 diff --git a/features/support/env.rb b/features/support/env.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library.rb b/lib/puppet_library.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/app/views/index.haml b/lib/puppet_library/app/views/index.haml old mode 100644 new mode 100755 diff --git a/lib/puppet_library/app/views/layout.haml b/lib/puppet_library/app/views/layout.haml old mode 100644 new mode 100755 diff --git a/lib/puppet_library/app/views/module.haml b/lib/puppet_library/app/views/module.haml old mode 100644 new mode 100755 index fac5312..35c9383 --- a/lib/puppet_library/app/views/module.haml +++ b/lib/puppet_library/app/views/module.haml @@ -27,4 +27,3 @@ %hr %div= "#{metadata["documentation"]}" - diff --git a/lib/puppet_library/app/views/module_not_found.haml b/lib/puppet_library/app/views/module_not_found.haml old mode 100644 new mode 100755 diff --git a/lib/puppet_library/archive.rb b/lib/puppet_library/archive.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/archive/archive_reader.rb b/lib/puppet_library/archive/archive_reader.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/archive/archiver.rb b/lib/puppet_library/archive/archiver.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge.rb b/lib/puppet_library/forge.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb old mode 100644 new mode 100755 index 275d132..7191405 --- a/lib/puppet_library/forge/abstract.rb +++ b/lib/puppet_library/forge/abstract.rb @@ -21,7 +21,7 @@ require 'puppet_library/util/patches' module PuppetLibrary::Forge - + # An abstract forge implementation that makes it easier to create new forge # types. # @@ -30,42 +30,42 @@ class Abstract < Forge def initialize(module_repo) @repo = module_repo end - + def search_modules(query) search = Search.new(query) - + search_results = retrieve_all_metadata.select do |result| search.matches? result end.sort_by do |result| - result.full_name.downcase - end.map do |result| + result.version + end.reverse.map do |result| result.to_search_result end - + SearchResult.merge_by_full_name(search_results) end - + def get_module_metadata(author, name) modules = retrieve_metadata(author, name) - + raise ModuleNotFound if modules.empty? - + modules = modules.version_sort_by { |m| m.version } module_infos = modules.map { |m| m.to_info } module_infos.deep_merge end - + def get_module_metadata_with_dependencies(author, name, version) raise ModuleNotFound if retrieve_metadata(author, name).empty? - + full_name = "#{author}/#{name}" versions = collect_dependencies_versions(full_name) return versions if version.nil? - + versions[full_name] = versions[full_name].select do |v| PuppetLibrary::Util::Dependency.new(name, version).match?(name, v["version"]) end - + dependencies = versions[full_name].map do |v| v["dependencies"].map {|(name, spec)| name} end.flatten @@ -74,37 +74,37 @@ def get_module_metadata_with_dependencies(author, name, version) end] return versions end - + def collect_dependencies_versions(module_full_name, metadata = {}) author, module_name = module_full_name.split "/" module_versions = retrieve_metadata(author, module_name) metadata[module_full_name] = module_versions.map {|v| v.to_version } - + dependencies = module_versions.map {|v| v.dependency_names }.flatten dependencies.each do |dependency| collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency end return metadata end - + def get_module_buffer(author, name, version) @repo.get_module(author, name, version) or raise ModuleNotFound end - + def retrieve_metadata(author, module_name) @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} end - + def retrieve_all_metadata @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} end end - + class Search def initialize(query) @query = query end - + def matches?(metadata) return true if @query.nil? return true if metadata.name.include? @query @@ -112,52 +112,52 @@ def matches?(metadata) return false end end - + class ModuleMetadata def initialize(metadata) @metadata = metadata end - + def author @metadata["name"][/^[^-]+/] end - + def name @metadata["name"].sub(/^[^-]+-/, "") end - + def full_name @metadata["name"].sub("-", "/") end - + def version @metadata["version"] end - + def dependencies @metadata["dependencies"] end - + def summary @metadata["summary"] end - + def description @metadata["description"] end - + def project_page @metadata["project_page"] end - + def dependency_names dependencies.map {|d| d["name"]} end - + def documentation @metadata["documentation"] end - + def to_info { "author" => author, @@ -168,7 +168,7 @@ def to_info "documentation" => documentation } end - + def to_version { "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", @@ -178,7 +178,7 @@ def to_version end } end - + def to_search_result { "author" => author, @@ -187,9 +187,12 @@ def to_search_result "desc" => summary, "project_url" => project_page, "releases" => [{ "version" => version}], + "documentation" => documentation, "version" => version, "tag_list" => [author, name] } end end - end \ No newline at end of file + end +end + diff --git a/lib/puppet_library/forge/cache.rb b/lib/puppet_library/forge/cache.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/forge.rb b/lib/puppet_library/forge/forge.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/git_repository.rb b/lib/puppet_library/forge/git_repository.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/multi.rb b/lib/puppet_library/forge/multi.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/proxy.rb b/lib/puppet_library/forge/proxy.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/search_result.rb b/lib/puppet_library/forge/search_result.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/source.rb b/lib/puppet_library/forge/source.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 026e748..7215f6a 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -1,3 +1,4 @@ +# -*- encoding: utf-8 -*- # Puppet Library # Copyright (C) 2014 drrb # diff --git a/lib/puppet_library/http.rb b/lib/puppet_library/http.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/cache.rb b/lib/puppet_library/http/cache.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/cache/disk.rb b/lib/puppet_library/http/cache/disk.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/cache/in_memory.rb b/lib/puppet_library/http/cache/in_memory.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/cache/noop.rb b/lib/puppet_library/http/cache/noop.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/http_client.rb b/lib/puppet_library/http/http_client.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/url.rb b/lib/puppet_library/http/url.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/puppet_module.rb b/lib/puppet_library/puppet_module.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/puppet_module/modulefile.rb b/lib/puppet_library/puppet_module/modulefile.rb old mode 100644 new mode 100755 index b131129..4cf90d0 --- a/lib/puppet_library/puppet_module/modulefile.rb +++ b/lib/puppet_library/puppet_module/modulefile.rb @@ -17,7 +17,7 @@ module PuppetLibrary::PuppetModule class Modulefile def self.read(modulefile_path) - parse(File.open(modulefile_path, "r:UTF-8").read) + parse(File.read(modulefile_path)) end def self.parse(modulefile_source) diff --git a/lib/puppet_library/server.rb b/lib/puppet_library/server.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util.rb b/lib/puppet_library/util.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/config_api.rb b/lib/puppet_library/util/config_api.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/dependency.rb b/lib/puppet_library/util/dependency.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/git.rb b/lib/puppet_library/util/git.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/logging.rb b/lib/puppet_library/util/logging.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/patches.rb b/lib/puppet_library/util/patches.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/temp_dir.rb b/lib/puppet_library/util/temp_dir.rb old mode 100644 new mode 100755 diff --git a/spec/archive/archive_reader_spec.rb b/spec/archive/archive_reader_spec.rb old mode 100644 new mode 100755 diff --git a/spec/archive/archiver_spec.rb b/spec/archive/archiver_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/abstract_spec.rb b/spec/forge/abstract_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/cache_spec.rb b/spec/forge/cache_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/directory_spec.rb b/spec/forge/directory_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/git_repository_spec.rb b/spec/forge/git_repository_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/multi_spec.rb b/spec/forge/multi_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/proxy_spec.rb b/spec/forge/proxy_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/source_spec.rb b/spec/forge/source_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/cache/disk_spec.rb b/spec/http/cache/disk_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/cache/in_memory_spec.rb b/spec/http/cache/in_memory_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/cache/noop_spec.rb b/spec/http/cache/noop_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/http_client_spec.rb b/spec/http/http_client_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/url_spec.rb b/spec/http/url_spec.rb old mode 100644 new mode 100755 diff --git a/spec/integration_test_helper.rb b/spec/integration_test_helper.rb old mode 100644 new mode 100755 diff --git a/spec/module_spec_helper.rb b/spec/module_spec_helper.rb old mode 100644 new mode 100755 diff --git a/spec/puppet_library_spec.rb b/spec/puppet_library_spec.rb old mode 100644 new mode 100755 diff --git a/spec/puppet_module/modulefile_spec.rb b/spec/puppet_module/modulefile_spec.rb old mode 100644 new mode 100755 diff --git a/spec/server_spec.rb b/spec/server_spec.rb old mode 100644 new mode 100755 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb old mode 100644 new mode 100755 diff --git a/spec/util/config_api_spec.rb b/spec/util/config_api_spec.rb old mode 100644 new mode 100755 diff --git a/spec/util/dependency_spec.rb b/spec/util/dependency_spec.rb old mode 100644 new mode 100755 diff --git a/spec/util/git_spec.rb b/spec/util/git_spec.rb old mode 100644 new mode 100755 diff --git a/spec/util/patches_spec.rb b/spec/util/patches_spec.rb old mode 100644 new mode 100755 diff --git a/spec/util/temp_dir_spec.rb b/spec/util/temp_dir_spec.rb old mode 100644 new mode 100755 diff --git a/test/directory_forge_integration_test.rb b/test/directory_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/offline_git_repo_forge_integration_test.rb b/test/offline_git_repo_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/offline_proxy_forge_integration_test.rb b/test/offline_proxy_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/online_git_repo_forge_integration_test.rb b/test/online_git_repo_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/online_proxy_forge_integration_test.rb b/test/online_proxy_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/source_forge_integration_test.rb b/test/source_forge_integration_test.rb old mode 100644 new mode 100755 From 1ab3f47a7fa2f599b398d2ef05a047ab2d1b3460 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Tue, 5 Aug 2014 14:22:52 +0200 Subject: [PATCH 06/25] Added UTF-8 encoding to HTML documentation --- .gitignore | 1 + lib/puppet_library/forge/directory.rb | 18 ++++++++++-------- lib/puppet_library/forge/source_directory.rb | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 7878408..996017a 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ test/version_tmp tmp .rake_t_cache /Gemfile.lock +.DS_Store diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index a3b6bd9..a2bd237 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -79,16 +79,18 @@ def get_metadata(author, module_name) def read_metadata(archive_path) archive = PuppetLibrary::Archive::ArchiveReader.new(archive_path) metadata_file = archive.read_entry %r[[^/]+/metadata\.json$] - - - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) - readmeText = archive.read_entry %r[/README\.(md|markdown)] - readmeHTML = markdown.render(readmeText) parsedJSON = JSON.parse(metadata_file) - - parsedJSON["documentation"] = readmeHTML + + + readmeText = archive.read_entry %r[/README[\.(md|markdown)]] + if !readmeText.empty? && readmeText.length > 0 + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") + parsedJSON["documentation"] = readmeHTML + end + parsedJSON - + rescue => error warn "Error reading from module archive #{archive_path}: #{error}" return nil diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 7215f6a..2c560f9 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -91,7 +91,7 @@ def read_metadata(directory_path) if File.exist?(readmePath) markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read - readmeHTML = markdown.render(readmeText) + readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML end From 39f21c398ee636b96f021df4b40203c5ecac555d Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 15:33:18 +0200 Subject: [PATCH 07/25] Not raising an exception when there is no concrete file in a tar.gz module. Changed markdawn parser to allow anchors --- lib/puppet_library/archive/archive_reader.rb | 6 ++++-- lib/puppet_library/forge/directory.rb | 6 ++---- lib/puppet_library/forge/source_directory.rb | 13 +++++++++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/puppet_library/archive/archive_reader.rb b/lib/puppet_library/archive/archive_reader.rb index 4854dac..3464720 100755 --- a/lib/puppet_library/archive/archive_reader.rb +++ b/lib/puppet_library/archive/archive_reader.rb @@ -26,8 +26,10 @@ def initialize(path) def read_entry(entry_name_regex) tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(@path)) 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 + entry = tar.find {|e| e.full_name =~ entry_name_regex } # or raise "Couldn't find entry in archive matching #{entry_name_regex.inspect}" + if !entry.nil? + entry.read + end end end end diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index a2bd237..6ff2268 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -81,14 +81,12 @@ def read_metadata(archive_path) metadata_file = archive.read_entry %r[[^/]+/metadata\.json$] parsedJSON = JSON.parse(metadata_file) - readmeText = archive.read_entry %r[/README[\.(md|markdown)]] - if !readmeText.empty? && readmeText.length > 0 - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + if !readmeText.nil? && !readmeText.empty? && readmeText.length > 0 + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML end - parsedJSON rescue => error diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 2c560f9..8d9b314 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -88,8 +88,16 @@ def read_metadata(directory_path) Dir.chdir("#{directory_path}") readmePath = Dir["README*"].first + + # firstly trying to get the README.md file + readmePath = Dir["README.md"].last + + if ! File.exist?(readmePath) + readmePath = Dir["README*"].last + end + if File.exist?(readmePath) - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML @@ -108,7 +116,8 @@ def read_metadata(directory_path) "summary" => "unknown", "description" => "unknown", "project_page" => "unknown", - "dependencies" => "unknown" + "dependencies" => "unknown", + "documentation" => "" } end end From 6b43232cc61fb2a463b8160adc7013b92a330d93 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 16:16:15 +0200 Subject: [PATCH 08/25] Fixed specs to pass test with the new features --- lib/puppet_library/archive/archive_reader.rb | 13 +++++++++---- lib/puppet_library/forge/directory.rb | 5 +++-- lib/puppet_library/forge/source_directory.rb | 15 ++++++++------- spec/forge/abstract_spec.rb | 5 +++++ 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/puppet_library/archive/archive_reader.rb b/lib/puppet_library/archive/archive_reader.rb index 3464720..2855c26 100755 --- a/lib/puppet_library/archive/archive_reader.rb +++ b/lib/puppet_library/archive/archive_reader.rb @@ -23,13 +23,18 @@ def initialize(path) @path = path end + def check_entry?(entry_name_regex) + tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(@path)) + tar.rewind + entry = tar.find {|e| e.full_name =~ entry_name_regex } + !entry.nil? + end + def read_entry(entry_name_regex) tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(@path)) 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}" - if !entry.nil? - entry.read - end + 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 end end end diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index 6ff2268..b6020c4 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -81,8 +81,9 @@ def read_metadata(archive_path) metadata_file = archive.read_entry %r[[^/]+/metadata\.json$] parsedJSON = JSON.parse(metadata_file) - readmeText = archive.read_entry %r[/README[\.(md|markdown)]] - if !readmeText.nil? && !readmeText.empty? && readmeText.length > 0 + readme_regex = %r[/README[\.(md|markdown)]] + if archive.check_entry? readme_regex + readmeText = archive.read_entry readme_regex markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 8d9b314..c45bc18 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -91,15 +91,16 @@ def read_metadata(directory_path) # firstly trying to get the README.md file readmePath = Dir["README.md"].last + puts "First: #{readmePath}" - if ! File.exist?(readmePath) + if readmePath.nil? || !File.exist?(readmePath) readmePath = Dir["README*"].last end - - if File.exist?(readmePath) - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) - readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read - readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") + puts "Second: #{readmePath}" + if !readmePath.nil? && File.exist?(readmePath) + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:with_toc_data => true), extensions = {}) + readmeText = File.open("#{directory_path}/#{readmePath}").read + readmeHTML = markdown.render(readmeText) #rendering twice for table of contents parsedJSON["documentation"] = readmeHTML end @@ -117,7 +118,7 @@ def read_metadata(directory_path) "description" => "unknown", "project_page" => "unknown", "dependencies" => "unknown", - "documentation" => "" + "documentation" => nil } end end diff --git a/spec/forge/abstract_spec.rb b/spec/forge/abstract_spec.rb index dc729e0..88e3041 100755 --- a/spec/forge/abstract_spec.rb +++ b/spec/forge/abstract_spec.rb @@ -76,6 +76,7 @@ module PuppetLibrary::Forge "name"=>"apache", "desc"=>"Puppet module for Apache", "project_url"=>"https://github.com/puppetlabs/puppetlabs-apache", + "documentation" => nil, "releases"=>[{"version"=>"0.10.0"}], "version"=>"0.10.0", "tag_list"=>["puppetlabs", "apache"] @@ -91,6 +92,7 @@ module PuppetLibrary::Forge "desc"=>"Puppet module for NTP", "project_url"=>"https://github.com/dodgybrothers/puppet-ntp", "releases"=>[{"version"=>"1.0.0"}], + "documentation" => nil, "version"=>"1.0.0", "tag_list"=>["dodgybrothers", "ntp"] }] @@ -127,6 +129,7 @@ module PuppetLibrary::Forge "desc"=>"New Puppet module for Apache", "project_url"=>"https://github.com/puppetlabs/puppetlabs-apache-new", "releases"=>[{"version"=>"1.0.0"},{"version"=>"0.10.0"}], + "documentation" => nil, "version"=>"1.0.0", "tag_list"=>["puppetlabs", "apache"] }] @@ -145,6 +148,7 @@ module PuppetLibrary::Forge "desc"=>"Puppet module for Apache", "project_url"=>"https://github.com/puppetlabs/puppetlabs-apache", "releases"=>[{"version"=>"0.10.0"}], + "documentation" => nil, "version"=>"0.10.0", "tag_list"=>["puppetlabs", "apache"] },{ @@ -154,6 +158,7 @@ module PuppetLibrary::Forge "desc"=>"Puppet module for NTP", "project_url"=>"https://github.com/dodgybrothers/puppet-ntp", "releases"=>[{"version"=>"1.0.0"}], + "documentation" => nil, "version"=>"1.0.0", "tag_list"=>["dodgybrothers", "ntp"] }] From c2200aa8bef4fdb3523ddf64f509694e6fd81802 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 16:16:15 +0200 Subject: [PATCH 09/25] Fixed specs to pass test with the new features --- lib/puppet_library/forge/directory.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index b6020c4..49b8554 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -84,7 +84,7 @@ def read_metadata(archive_path) readme_regex = %r[/README[\.(md|markdown)]] if archive.check_entry? readme_regex readmeText = archive.read_entry readme_regex - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:with_tocdata => true), extensions = {}) readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML end From 018700026e294ce41adbaec523874016302ca82a Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 16:16:15 +0200 Subject: [PATCH 10/25] Fixed specs to pass test with the new features --- lib/puppet_library/forge/source_directory.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index c45bc18..47fc6a5 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -68,7 +68,7 @@ def get_all_metadata end def get_metadata(author, module_name) - archives = Dir["#{@module_dir.path}/#{module_name}"] + archives = Dir["#{@module_dir.path}/*#{module_name}*"] archives.map {|path| read_metadata(path) }.compact end @@ -96,7 +96,7 @@ def read_metadata(directory_path) if readmePath.nil? || !File.exist?(readmePath) readmePath = Dir["README*"].last end - puts "Second: #{readmePath}" + if !readmePath.nil? && File.exist?(readmePath) markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:with_toc_data => true), extensions = {}) readmeText = File.open("#{directory_path}/#{readmePath}").read From e5baa1b9786e36bb3b9bea6c34ff29f680dd1443 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 16:16:15 +0200 Subject: [PATCH 11/25] Fixed specs to pass test with the new features --- lib/puppet_library/forge/source_directory.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index c45bc18..47fc6a5 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -68,7 +68,7 @@ def get_all_metadata end def get_metadata(author, module_name) - archives = Dir["#{@module_dir.path}/#{module_name}"] + archives = Dir["#{@module_dir.path}/*#{module_name}*"] archives.map {|path| read_metadata(path) }.compact end @@ -96,7 +96,7 @@ def read_metadata(directory_path) if readmePath.nil? || !File.exist?(readmePath) readmePath = Dir["README*"].last end - puts "Second: #{readmePath}" + if !readmePath.nil? && File.exist?(readmePath) markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:with_toc_data => true), extensions = {}) readmeText = File.open("#{directory_path}/#{readmePath}").read From 0d707ff99894bb820c587d3267e0f39fe079f578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Molina=20Colmenero?= Date: Wed, 9 Jul 2014 17:46:04 +0200 Subject: [PATCH 12/25] Added documentation when opening a module information screen --- bin/puppet-library | 0 lib/puppet_library/app/views/layout.haml | 2 +- lib/puppet_library/app/views/module.haml | 5 ++ lib/puppet_library/forge.rb | 1 + lib/puppet_library/forge/abstract.rb | 7 +- lib/puppet_library/forge/directory.rb | 12 ++- lib/puppet_library/forge/source_directory.rb | 92 ++++++++++++++++++++ lib/puppet_library/puppet_library.rb | 8 +- puppet-library.gemspec | 1 + 9 files changed, 124 insertions(+), 4 deletions(-) mode change 100755 => 100644 bin/puppet-library create mode 100644 lib/puppet_library/forge/source_directory.rb diff --git a/bin/puppet-library b/bin/puppet-library old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/layout.haml b/lib/puppet_library/app/views/layout.haml index 6f3b06e..a3107bb 100644 --- a/lib/puppet_library/app/views/layout.haml +++ b/lib/puppet_library/app/views/layout.haml @@ -27,7 +27,7 @@ %style :plain body { - padding-top: 50px; + padding-top: 100px; } input.search-query { padding-left:32px; diff --git a/lib/puppet_library/app/views/module.haml b/lib/puppet_library/app/views/module.haml index af99ca7..fac5312 100644 --- a/lib/puppet_library/app/views/module.haml +++ b/lib/puppet_library/app/views/module.haml @@ -23,3 +23,8 @@ %ul - metadata["releases"].each do |release| %li= release["version"] + +%hr + +%div= "#{metadata["documentation"]}" + diff --git a/lib/puppet_library/forge.rb b/lib/puppet_library/forge.rb index 1e59d4f..a4718f9 100644 --- a/lib/puppet_library/forge.rb +++ b/lib/puppet_library/forge.rb @@ -22,6 +22,7 @@ class ModuleNotFound < Exception require 'puppet_library/forge/abstract' require 'puppet_library/forge/cache' require 'puppet_library/forge/directory' + require 'puppet_library/forge/source_directory' require 'puppet_library/forge/forge' require 'puppet_library/forge/git_repository' require 'puppet_library/forge/multi' diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb index 7b592f6..cf69066 100644 --- a/lib/puppet_library/forge/abstract.rb +++ b/lib/puppet_library/forge/abstract.rb @@ -153,6 +153,10 @@ def project_page def dependency_names dependencies.map {|d| d["name"]} end + + def documentation + @metadata["documentation"] + end def to_info { @@ -160,7 +164,8 @@ def to_info "full_name" => full_name, "name" => name, "desc" => description, - "releases" => [ { "version" => version } ] + "releases" => [ { "version" => version } ], + "documentation" => documentation } end diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index 6c22527..a3b6bd9 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -15,6 +15,7 @@ # along with this program. If not, see . require 'json' +require 'redcarpet' require 'puppet_library/forge/abstract' require 'puppet_library/archive/archive_reader' require 'puppet_library/util/config_api' @@ -78,7 +79,16 @@ def get_metadata(author, module_name) def read_metadata(archive_path) archive = PuppetLibrary::Archive::ArchiveReader.new(archive_path) metadata_file = archive.read_entry %r[[^/]+/metadata\.json$] - JSON.parse(metadata_file) + + + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + readmeText = archive.read_entry %r[/README\.(md|markdown)] + readmeHTML = markdown.render(readmeText) + parsedJSON = JSON.parse(metadata_file) + + parsedJSON["documentation"] = readmeHTML + parsedJSON + rescue => error warn "Error reading from module archive #{archive_path}: #{error}" return nil diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb new file mode 100644 index 0000000..2bef7cb --- /dev/null +++ b/lib/puppet_library/forge/source_directory.rb @@ -0,0 +1,92 @@ +# Puppet Library +# Copyright (C) 2014 drrb +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +require 'json' +require 'redcarpet' +require 'puppet_library/forge/abstract' +require 'puppet_library/util/config_api' + +module PuppetLibrary::Forge + + # A forge that serves modules in unpacked format from a directory on disk. + # + # Note: + # * The modules must be in unpacked format + # * The modules (directories) must be named in the format modulename + # * The modules must contain a +metadata.json+ file + # + # Usage: + # + # forge = PuppetLibrary::Forge::SourceDirectory.configure do + # # The path to serve the modules from + # path "/var/modules/cache" + # end + class SourceDirectory < PuppetLibrary::Forge::Abstract + def self.configure(&block) + config_api = PuppetLibrary::Util::ConfigApi.for(SourceDirectory) do + required :path, "path to the modules' source" do |path| + Dir.new(File.expand_path(path)) + end + end + config = config_api.configure(&block) + Source.new(config.get_path) + end + + # * :module_dir - The directory containing the packaged modules. + def initialize(module_dir) + super(self) + @module_dir = module_dir + end + + def get_module(name) + file_name = "#{name}" + path = File.join(@module_dir.path, file_name) + if File.exist? path + File.open(path, 'r') + else + nil + end + end + + def get_all_metadata + get_metadata("*") + end + + def get_metadata(module_name) + archives = Dir["#{@module_dir.path}/#{module_name}"] + archives.map {|path| read_metadata(path) }.compact + end + + private + + def read_metadata(archive_path) + metadata_file = File.open(File.join(@module_dir.path, "metadata.json"), "r").read + + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + readmeText = File.open("README.md", "r").read + readmeHTML = markdown.render(readmeText) + parsedJSON = JSON.parse(metadata_file) + + parsedJSON["documentation"] = readmeHTML + parsedJSON + + rescue => error + warn "Error reading from module archive #{archive_path}: #{error}" + return nil + end + end +end + diff --git a/lib/puppet_library/puppet_library.rb b/lib/puppet_library/puppet_library.rb index 0b63a9d..0d73960 100644 --- a/lib/puppet_library/puppet_library.rb +++ b/lib/puppet_library/puppet_library.rb @@ -18,6 +18,7 @@ require 'optparse' require 'rack' require 'yaml' +require 'puppet_library/forge/source_directory' require 'puppet_library/forge/directory' require 'puppet_library/forge/multi' require 'puppet_library/forge/proxy' @@ -86,6 +87,11 @@ def parse_options(args) opts.on("--cache-basedir DIR", "Cache all proxies' downloaded modules under this directory") do |cache_basedir| options[:cache_basedir] = cache_basedir end + + #new option --modulepath + opts.on("--modulepath DIR", "Directory containing all module's sources") do |modulepath| + options[:forges] << [Forge::SourceDirectory, modulepath] + end end begin option_parser.parse(args) @@ -161,7 +167,7 @@ def load_defaults!(options) def process_options!(options) options[:forges].map! do |(forge_type, config)| - if [ Forge::Directory, Forge::Source ].include? forge_type + if [ Forge::Directory, Forge::Source, Forge::SourceDirectory ].include? forge_type [ forge_type, [ Dir.new(sanitize_path(config)) ]] elsif forge_type == Forge::Proxy && options[:cache_basedir] cache_dir = File.join(options[:cache_basedir], url_hostname(config)) diff --git a/puppet-library.gemspec b/puppet-library.gemspec index 8abcb9c..d63292e 100644 --- a/puppet-library.gemspec +++ b/puppet-library.gemspec @@ -41,6 +41,7 @@ Gem::Specification.new do |spec| spec.add_dependency "haml" spec.add_dependency "docile", ">= 1.0.0" spec.add_dependency "open4" + spec.add_dependency "redcarpet", "~> 2.3.0" spec.add_development_dependency "bundler", "~> 1.3" spec.add_development_dependency "coveralls" From b9a614509a15d9648cd1fbec8b0f5b4bc04bc98d Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Sat, 19 Jul 2014 13:05:15 +0200 Subject: [PATCH 13/25] Added --modulepath option successfully --- bin/puppet-library | 0 lib/puppet_library/forge/source_directory.rb | 21 ++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) mode change 100644 => 100755 bin/puppet-library diff --git a/bin/puppet-library b/bin/puppet-library old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 2bef7cb..27fd815 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -20,7 +20,7 @@ require 'puppet_library/util/config_api' module PuppetLibrary::Forge - + # A forge that serves modules in unpacked format from a directory on disk. # # Note: @@ -42,10 +42,10 @@ def self.configure(&block) end end config = config_api.configure(&block) - Source.new(config.get_path) + SourceDirectory.new(config.get_path) end - # * :module_dir - The directory containing the packaged modules. + # * :module_dir - The directory containing the unpackaged modules. def initialize(module_dir) super(self) @module_dir = module_dir @@ -62,21 +62,22 @@ def get_module(name) end def get_all_metadata - get_metadata("*") + get_metadata("*","*") end - def get_metadata(module_name) + def get_metadata(author, module_name) archives = Dir["#{@module_dir.path}/#{module_name}"] archives.map {|path| read_metadata(path) }.compact end private - - def read_metadata(archive_path) - metadata_file = File.open(File.join(@module_dir.path, "metadata.json"), "r").read + def read_metadata(directory_path) + metadata_file = File.open(File.join(directory_path, "metadata.json"), "r").read markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) - readmeText = File.open("README.md", "r").read + Dir.chdir(directory_path) + readmePath = Dir["README.{md,markdown}"].first + readmeText = File.open("#{directory_path}/#{readmePath}").read readmeHTML = markdown.render(readmeText) parsedJSON = JSON.parse(metadata_file) @@ -84,7 +85,7 @@ def read_metadata(archive_path) parsedJSON rescue => error - warn "Error reading from module archive #{archive_path}: #{error}" + warn "Error reading from module archive #{directory_path}: #{error}" return nil end end From 3f1e0a7ea4646db4ef7b0684cec8008afd1450ab Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Sat, 19 Jul 2014 14:46:04 +0200 Subject: [PATCH 14/25] Added Modulefile compatibility --- lib/puppet_library/forge/source_directory.rb | 25 +++++++++++++------ .../puppet_module/modulefile.rb | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 27fd815..365fbb9 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -51,11 +51,11 @@ def initialize(module_dir) @module_dir = module_dir end - def get_module(name) + def get_module(author, name, version) file_name = "#{name}" path = File.join(@module_dir.path, file_name) if File.exist? path - File.open(path, 'r') + File.open(path, 'r:UTF-8') else nil end @@ -72,20 +72,29 @@ def get_metadata(author, module_name) private def read_metadata(directory_path) - metadata_file = File.open(File.join(directory_path, "metadata.json"), "r").read + metadata_file_path = File.join(directory_path, "metadata.json") + modulefile_path = File.join(directory_path, "Modulefile") + + if File.exist?(metadata_file_path) + metadata_file = File.open(metadata_file_path, "r:UTF-8").read + parsedJSON = JSON.parse(metadata_file) + elsif File.exist?(modulefile_path) + parsedJSON = PuppetLibrary::PuppetModule::Modulefile.read(modulefile_path).to_metadata + else + return nil + end markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) - Dir.chdir(directory_path) - readmePath = Dir["README.{md,markdown}"].first - readmeText = File.open("#{directory_path}/#{readmePath}").read + Dir.chdir("#{directory_path}") + readmePath = Dir["README*"].first + readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read readmeHTML = markdown.render(readmeText) - parsedJSON = JSON.parse(metadata_file) parsedJSON["documentation"] = readmeHTML parsedJSON rescue => error - warn "Error reading from module archive #{directory_path}: #{error}" + warn "Error reading from module archive #{directory_path}: #{error.backtrace.join("\n")}" return nil end end diff --git a/lib/puppet_library/puppet_module/modulefile.rb b/lib/puppet_library/puppet_module/modulefile.rb index 4cf90d0..b131129 100644 --- a/lib/puppet_library/puppet_module/modulefile.rb +++ b/lib/puppet_library/puppet_module/modulefile.rb @@ -17,7 +17,7 @@ module PuppetLibrary::PuppetModule class Modulefile def self.read(modulefile_path) - parse(File.read(modulefile_path)) + parse(File.open(modulefile_path, "r:UTF-8").read) end def self.parse(modulefile_source) From ee262d90bc6a98df0bcb35b50a7dc09c29c25c77 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Tue, 22 Jul 2014 10:52:45 +0200 Subject: [PATCH 15/25] Sorting search results alphabetically and displaying modules with wrong Modulefile --- lib/puppet_library/forge/abstract.rb | 260 +++++++++---------- lib/puppet_library/forge/source_directory.rb | 36 ++- 2 files changed, 154 insertions(+), 142 deletions(-) diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb index cf69066..275d132 100644 --- a/lib/puppet_library/forge/abstract.rb +++ b/lib/puppet_library/forge/abstract.rb @@ -21,7 +21,7 @@ require 'puppet_library/util/patches' module PuppetLibrary::Forge - + # An abstract forge implementation that makes it easier to create new forge # types. # @@ -30,166 +30,166 @@ class Abstract < Forge def initialize(module_repo) @repo = module_repo end - + def search_modules(query) search = Search.new(query) - + search_results = retrieve_all_metadata.select do |result| search.matches? result end.sort_by do |result| - result.version - end.reverse.map do |result| + result.full_name.downcase + end.map do |result| result.to_search_result end - + SearchResult.merge_by_full_name(search_results) end - + def get_module_metadata(author, name) modules = retrieve_metadata(author, name) - + raise ModuleNotFound if modules.empty? - + modules = modules.version_sort_by { |m| m.version } module_infos = modules.map { |m| m.to_info } module_infos.deep_merge end - + def get_module_metadata_with_dependencies(author, name, version) raise ModuleNotFound if retrieve_metadata(author, name).empty? - + full_name = "#{author}/#{name}" versions = collect_dependencies_versions(full_name) return versions if version.nil? - + versions[full_name] = versions[full_name].select do |v| PuppetLibrary::Util::Dependency.new(name, version).match?(name, v["version"]) end - + dependencies = versions[full_name].map do |v| v["dependencies"].map {|(name, spec)| name} end.flatten versions = Hash[versions.select do |name, info| name == full_name || dependencies.include?(name) - end] - return versions - end - - def collect_dependencies_versions(module_full_name, metadata = {}) - author, module_name = module_full_name.split "/" - module_versions = retrieve_metadata(author, module_name) - metadata[module_full_name] = module_versions.map {|v| v.to_version } - - dependencies = module_versions.map {|v| v.dependency_names }.flatten - dependencies.each do |dependency| - collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency + end] + return versions + end + + def collect_dependencies_versions(module_full_name, metadata = {}) + author, module_name = module_full_name.split "/" + module_versions = retrieve_metadata(author, module_name) + metadata[module_full_name] = module_versions.map {|v| v.to_version } + + dependencies = module_versions.map {|v| v.dependency_names }.flatten + dependencies.each do |dependency| + collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency + end + return metadata + end + + def get_module_buffer(author, name, version) + @repo.get_module(author, name, version) or raise ModuleNotFound + end + + def retrieve_metadata(author, module_name) + @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} + end + + def retrieve_all_metadata + @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} end - return metadata - end - - def get_module_buffer(author, name, version) - @repo.get_module(author, name, version) or raise ModuleNotFound - end - - def retrieve_metadata(author, module_name) - @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} - end - - def retrieve_all_metadata - @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} - end - end - - class Search - def initialize(query) - @query = query - end - - def matches?(metadata) - return true if @query.nil? - return true if metadata.name.include? @query - return true if metadata.author.include? @query - return false - end - end - - class ModuleMetadata - def initialize(metadata) - @metadata = metadata - end - - def author - @metadata["name"][/^[^-]+/] - end - - def name - @metadata["name"].sub(/^[^-]+-/, "") - end - - def full_name - @metadata["name"].sub("-", "/") - end - - def version - @metadata["version"] - end - - def dependencies - @metadata["dependencies"] - end - - def summary - @metadata["summary"] - end - - def description - @metadata["description"] - end - - def project_page - @metadata["project_page"] - end - - def dependency_names - dependencies.map {|d| d["name"]} end - def documentation - @metadata["documentation"] - end - - def to_info - { - "author" => author, - "full_name" => full_name, - "name" => name, - "desc" => description, - "releases" => [ { "version" => version } ], - "documentation" => documentation - } - end - - def to_version - { - "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", - "version" => version, - "dependencies" => dependencies.map do |dependency| - [ dependency["name"], dependency["version_requirement"] ] - end - } + class Search + def initialize(query) + @query = query + end + + def matches?(metadata) + return true if @query.nil? + return true if metadata.name.include? @query + return true if metadata.author.include? @query + return false + end end - - def to_search_result - { - "author" => author, - "full_name" => full_name, - "name" => name, - "desc" => summary, - "project_url" => project_page, - "releases" => [{ "version" => version}], - "version" => version, - "tag_list" => [author, name] - } + + class ModuleMetadata + def initialize(metadata) + @metadata = metadata + end + + def author + @metadata["name"][/^[^-]+/] + end + + def name + @metadata["name"].sub(/^[^-]+-/, "") + end + + def full_name + @metadata["name"].sub("-", "/") + end + + def version + @metadata["version"] + end + + def dependencies + @metadata["dependencies"] + end + + def summary + @metadata["summary"] + end + + def description + @metadata["description"] + end + + def project_page + @metadata["project_page"] + end + + def dependency_names + dependencies.map {|d| d["name"]} + end + + def documentation + @metadata["documentation"] + end + + def to_info + { + "author" => author, + "full_name" => full_name, + "name" => name, + "desc" => description, + "releases" => [ { "version" => version } ], + "documentation" => documentation + } + end + + def to_version + { + "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", + "version" => version, + "dependencies" => dependencies.map do |dependency| + [ dependency["name"], dependency["version_requirement"] ] + end + } + end + + def to_search_result + { + "author" => author, + "full_name" => full_name, + "name" => name, + "desc" => summary, + "project_url" => project_page, + "releases" => [{ "version" => version}], + "version" => version, + "tag_list" => [author, name] + } + end end - end -end + end \ No newline at end of file diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 365fbb9..026e748 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -8,11 +8,11 @@ # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . require 'json' require 'redcarpet' @@ -30,10 +30,10 @@ module PuppetLibrary::Forge # # Usage: # - # forge = PuppetLibrary::Forge::SourceDirectory.configure do - # # The path to serve the modules from - # path "/var/modules/cache" - # end + # forge = PuppetLibrary::Forge::SourceDirectory.configure do + # # The path to serve the modules from + # path "/var/modules/cache" + # end class SourceDirectory < PuppetLibrary::Forge::Abstract def self.configure(&block) config_api = PuppetLibrary::Util::ConfigApi.for(SourceDirectory) do @@ -63,6 +63,7 @@ def get_module(author, name, version) def get_all_metadata get_metadata("*","*") +#.sort! { |x,y| "#{x["name"]}" <=> "#{y["name"]}" } end def get_metadata(author, module_name) @@ -84,19 +85,30 @@ def read_metadata(directory_path) return nil end - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) Dir.chdir("#{directory_path}") readmePath = Dir["README*"].first - readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read - readmeHTML = markdown.render(readmeText) + if File.exist?(readmePath) + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read + readmeHTML = markdown.render(readmeText) + parsedJSON["documentation"] = readmeHTML + end - parsedJSON["documentation"] = readmeHTML parsedJSON rescue => error warn "Error reading from module archive #{directory_path}: #{error.backtrace.join("\n")}" - return nil + return { + "name" => "unknown/#{directory_path.split("/").last}", + "version" => "unknown", + "source" => "unknown", + "author" => "unknown", + "license" => "unknown", + "summary" => "unknown", + "description" => "unknown", + "project_page" => "unknown", + "dependencies" => "unknown" + } end end end - From a4dca383e2911b241453210d9ebdddd320424ca5 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Mon, 4 Aug 2014 15:25:35 +0200 Subject: [PATCH 16/25] Fixed library files --- CHANGELOG.yml | 0 Gemfile | 0 Guardfile | 0 LICENSE.txt | 0 README.md | 0 Rakefile | 0 TODO.yml | 0 config.ru | 0 features/module_list.feature | 0 features/module_page.feature | 0 features/module_search.feature | 0 features/step_definitions/sinatra_steps.rb | 0 features/support/env.rb | 0 lib/puppet_library.rb | 0 lib/puppet_library/app/views/index.haml | 0 lib/puppet_library/app/views/layout.haml | 0 lib/puppet_library/app/views/module.haml | 1 - .../app/views/module_not_found.haml | 0 lib/puppet_library/archive.rb | 0 lib/puppet_library/archive/archive_reader.rb | 0 lib/puppet_library/archive/archiver.rb | 0 lib/puppet_library/forge.rb | 0 lib/puppet_library/forge/abstract.rb | 73 ++++++++++--------- lib/puppet_library/forge/cache.rb | 0 lib/puppet_library/forge/forge.rb | 0 lib/puppet_library/forge/git_repository.rb | 0 lib/puppet_library/forge/multi.rb | 0 lib/puppet_library/forge/proxy.rb | 0 lib/puppet_library/forge/search_result.rb | 0 lib/puppet_library/forge/source.rb | 0 lib/puppet_library/forge/source_directory.rb | 1 + lib/puppet_library/http.rb | 0 lib/puppet_library/http/cache.rb | 0 lib/puppet_library/http/cache/disk.rb | 0 lib/puppet_library/http/cache/in_memory.rb | 0 lib/puppet_library/http/cache/noop.rb | 0 lib/puppet_library/http/http_client.rb | 0 lib/puppet_library/http/url.rb | 0 lib/puppet_library/puppet_module.rb | 0 .../puppet_module/modulefile.rb | 2 +- lib/puppet_library/server.rb | 0 lib/puppet_library/util.rb | 0 lib/puppet_library/util/config_api.rb | 0 lib/puppet_library/util/dependency.rb | 0 lib/puppet_library/util/git.rb | 0 lib/puppet_library/util/logging.rb | 0 lib/puppet_library/util/patches.rb | 0 lib/puppet_library/util/temp_dir.rb | 0 spec/archive/archive_reader_spec.rb | 0 spec/archive/archiver_spec.rb | 0 spec/forge/abstract_spec.rb | 0 spec/forge/cache_spec.rb | 0 spec/forge/directory_spec.rb | 0 spec/forge/git_repository_spec.rb | 0 spec/forge/multi_spec.rb | 0 spec/forge/proxy_spec.rb | 0 spec/forge/source_spec.rb | 0 spec/http/cache/disk_spec.rb | 0 spec/http/cache/in_memory_spec.rb | 0 spec/http/cache/noop_spec.rb | 0 spec/http/http_client_spec.rb | 0 spec/http/url_spec.rb | 0 spec/integration_test_helper.rb | 0 spec/module_spec_helper.rb | 0 spec/puppet_library_spec.rb | 0 spec/puppet_module/modulefile_spec.rb | 0 spec/server_spec.rb | 0 spec/spec_helper.rb | 0 spec/util/config_api_spec.rb | 0 spec/util/dependency_spec.rb | 0 spec/util/git_spec.rb | 0 spec/util/patches_spec.rb | 0 spec/util/temp_dir_spec.rb | 0 test/directory_forge_integration_test.rb | 0 ...offline_git_repo_forge_integration_test.rb | 0 test/offline_proxy_forge_integration_test.rb | 0 .../online_git_repo_forge_integration_test.rb | 0 test/online_proxy_forge_integration_test.rb | 0 test/source_forge_integration_test.rb | 0 79 files changed, 40 insertions(+), 37 deletions(-) mode change 100644 => 100755 CHANGELOG.yml mode change 100644 => 100755 Gemfile mode change 100644 => 100755 Guardfile mode change 100644 => 100755 LICENSE.txt mode change 100644 => 100755 README.md mode change 100644 => 100755 Rakefile mode change 100644 => 100755 TODO.yml mode change 100644 => 100755 config.ru mode change 100644 => 100755 features/module_list.feature mode change 100644 => 100755 features/module_page.feature mode change 100644 => 100755 features/module_search.feature mode change 100644 => 100755 features/step_definitions/sinatra_steps.rb mode change 100644 => 100755 features/support/env.rb mode change 100644 => 100755 lib/puppet_library.rb mode change 100644 => 100755 lib/puppet_library/app/views/index.haml mode change 100644 => 100755 lib/puppet_library/app/views/layout.haml mode change 100644 => 100755 lib/puppet_library/app/views/module.haml mode change 100644 => 100755 lib/puppet_library/app/views/module_not_found.haml mode change 100644 => 100755 lib/puppet_library/archive.rb mode change 100644 => 100755 lib/puppet_library/archive/archive_reader.rb mode change 100644 => 100755 lib/puppet_library/archive/archiver.rb mode change 100644 => 100755 lib/puppet_library/forge.rb mode change 100644 => 100755 lib/puppet_library/forge/abstract.rb mode change 100644 => 100755 lib/puppet_library/forge/cache.rb mode change 100644 => 100755 lib/puppet_library/forge/forge.rb mode change 100644 => 100755 lib/puppet_library/forge/git_repository.rb mode change 100644 => 100755 lib/puppet_library/forge/multi.rb mode change 100644 => 100755 lib/puppet_library/forge/proxy.rb mode change 100644 => 100755 lib/puppet_library/forge/search_result.rb mode change 100644 => 100755 lib/puppet_library/forge/source.rb mode change 100644 => 100755 lib/puppet_library/http.rb mode change 100644 => 100755 lib/puppet_library/http/cache.rb mode change 100644 => 100755 lib/puppet_library/http/cache/disk.rb mode change 100644 => 100755 lib/puppet_library/http/cache/in_memory.rb mode change 100644 => 100755 lib/puppet_library/http/cache/noop.rb mode change 100644 => 100755 lib/puppet_library/http/http_client.rb mode change 100644 => 100755 lib/puppet_library/http/url.rb mode change 100644 => 100755 lib/puppet_library/puppet_module.rb mode change 100644 => 100755 lib/puppet_library/puppet_module/modulefile.rb mode change 100644 => 100755 lib/puppet_library/server.rb mode change 100644 => 100755 lib/puppet_library/util.rb mode change 100644 => 100755 lib/puppet_library/util/config_api.rb mode change 100644 => 100755 lib/puppet_library/util/dependency.rb mode change 100644 => 100755 lib/puppet_library/util/git.rb mode change 100644 => 100755 lib/puppet_library/util/logging.rb mode change 100644 => 100755 lib/puppet_library/util/patches.rb mode change 100644 => 100755 lib/puppet_library/util/temp_dir.rb mode change 100644 => 100755 spec/archive/archive_reader_spec.rb mode change 100644 => 100755 spec/archive/archiver_spec.rb mode change 100644 => 100755 spec/forge/abstract_spec.rb mode change 100644 => 100755 spec/forge/cache_spec.rb mode change 100644 => 100755 spec/forge/directory_spec.rb mode change 100644 => 100755 spec/forge/git_repository_spec.rb mode change 100644 => 100755 spec/forge/multi_spec.rb mode change 100644 => 100755 spec/forge/proxy_spec.rb mode change 100644 => 100755 spec/forge/source_spec.rb mode change 100644 => 100755 spec/http/cache/disk_spec.rb mode change 100644 => 100755 spec/http/cache/in_memory_spec.rb mode change 100644 => 100755 spec/http/cache/noop_spec.rb mode change 100644 => 100755 spec/http/http_client_spec.rb mode change 100644 => 100755 spec/http/url_spec.rb mode change 100644 => 100755 spec/integration_test_helper.rb mode change 100644 => 100755 spec/module_spec_helper.rb mode change 100644 => 100755 spec/puppet_library_spec.rb mode change 100644 => 100755 spec/puppet_module/modulefile_spec.rb mode change 100644 => 100755 spec/server_spec.rb mode change 100644 => 100755 spec/spec_helper.rb mode change 100644 => 100755 spec/util/config_api_spec.rb mode change 100644 => 100755 spec/util/dependency_spec.rb mode change 100644 => 100755 spec/util/git_spec.rb mode change 100644 => 100755 spec/util/patches_spec.rb mode change 100644 => 100755 spec/util/temp_dir_spec.rb mode change 100644 => 100755 test/directory_forge_integration_test.rb mode change 100644 => 100755 test/offline_git_repo_forge_integration_test.rb mode change 100644 => 100755 test/offline_proxy_forge_integration_test.rb mode change 100644 => 100755 test/online_git_repo_forge_integration_test.rb mode change 100644 => 100755 test/online_proxy_forge_integration_test.rb mode change 100644 => 100755 test/source_forge_integration_test.rb diff --git a/CHANGELOG.yml b/CHANGELOG.yml old mode 100644 new mode 100755 diff --git a/Gemfile b/Gemfile old mode 100644 new mode 100755 diff --git a/Guardfile b/Guardfile old mode 100644 new mode 100755 diff --git a/LICENSE.txt b/LICENSE.txt old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/Rakefile b/Rakefile old mode 100644 new mode 100755 diff --git a/TODO.yml b/TODO.yml old mode 100644 new mode 100755 diff --git a/config.ru b/config.ru old mode 100644 new mode 100755 diff --git a/features/module_list.feature b/features/module_list.feature old mode 100644 new mode 100755 diff --git a/features/module_page.feature b/features/module_page.feature old mode 100644 new mode 100755 diff --git a/features/module_search.feature b/features/module_search.feature old mode 100644 new mode 100755 diff --git a/features/step_definitions/sinatra_steps.rb b/features/step_definitions/sinatra_steps.rb old mode 100644 new mode 100755 diff --git a/features/support/env.rb b/features/support/env.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library.rb b/lib/puppet_library.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/app/views/index.haml b/lib/puppet_library/app/views/index.haml old mode 100644 new mode 100755 diff --git a/lib/puppet_library/app/views/layout.haml b/lib/puppet_library/app/views/layout.haml old mode 100644 new mode 100755 diff --git a/lib/puppet_library/app/views/module.haml b/lib/puppet_library/app/views/module.haml old mode 100644 new mode 100755 index fac5312..35c9383 --- a/lib/puppet_library/app/views/module.haml +++ b/lib/puppet_library/app/views/module.haml @@ -27,4 +27,3 @@ %hr %div= "#{metadata["documentation"]}" - diff --git a/lib/puppet_library/app/views/module_not_found.haml b/lib/puppet_library/app/views/module_not_found.haml old mode 100644 new mode 100755 diff --git a/lib/puppet_library/archive.rb b/lib/puppet_library/archive.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/archive/archive_reader.rb b/lib/puppet_library/archive/archive_reader.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/archive/archiver.rb b/lib/puppet_library/archive/archiver.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge.rb b/lib/puppet_library/forge.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb old mode 100644 new mode 100755 index 275d132..7191405 --- a/lib/puppet_library/forge/abstract.rb +++ b/lib/puppet_library/forge/abstract.rb @@ -21,7 +21,7 @@ require 'puppet_library/util/patches' module PuppetLibrary::Forge - + # An abstract forge implementation that makes it easier to create new forge # types. # @@ -30,42 +30,42 @@ class Abstract < Forge def initialize(module_repo) @repo = module_repo end - + def search_modules(query) search = Search.new(query) - + search_results = retrieve_all_metadata.select do |result| search.matches? result end.sort_by do |result| - result.full_name.downcase - end.map do |result| + result.version + end.reverse.map do |result| result.to_search_result end - + SearchResult.merge_by_full_name(search_results) end - + def get_module_metadata(author, name) modules = retrieve_metadata(author, name) - + raise ModuleNotFound if modules.empty? - + modules = modules.version_sort_by { |m| m.version } module_infos = modules.map { |m| m.to_info } module_infos.deep_merge end - + def get_module_metadata_with_dependencies(author, name, version) raise ModuleNotFound if retrieve_metadata(author, name).empty? - + full_name = "#{author}/#{name}" versions = collect_dependencies_versions(full_name) return versions if version.nil? - + versions[full_name] = versions[full_name].select do |v| PuppetLibrary::Util::Dependency.new(name, version).match?(name, v["version"]) end - + dependencies = versions[full_name].map do |v| v["dependencies"].map {|(name, spec)| name} end.flatten @@ -74,37 +74,37 @@ def get_module_metadata_with_dependencies(author, name, version) end] return versions end - + def collect_dependencies_versions(module_full_name, metadata = {}) author, module_name = module_full_name.split "/" module_versions = retrieve_metadata(author, module_name) metadata[module_full_name] = module_versions.map {|v| v.to_version } - + dependencies = module_versions.map {|v| v.dependency_names }.flatten dependencies.each do |dependency| collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency end return metadata end - + def get_module_buffer(author, name, version) @repo.get_module(author, name, version) or raise ModuleNotFound end - + def retrieve_metadata(author, module_name) @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} end - + def retrieve_all_metadata @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} end end - + class Search def initialize(query) @query = query end - + def matches?(metadata) return true if @query.nil? return true if metadata.name.include? @query @@ -112,52 +112,52 @@ def matches?(metadata) return false end end - + class ModuleMetadata def initialize(metadata) @metadata = metadata end - + def author @metadata["name"][/^[^-]+/] end - + def name @metadata["name"].sub(/^[^-]+-/, "") end - + def full_name @metadata["name"].sub("-", "/") end - + def version @metadata["version"] end - + def dependencies @metadata["dependencies"] end - + def summary @metadata["summary"] end - + def description @metadata["description"] end - + def project_page @metadata["project_page"] end - + def dependency_names dependencies.map {|d| d["name"]} end - + def documentation @metadata["documentation"] end - + def to_info { "author" => author, @@ -168,7 +168,7 @@ def to_info "documentation" => documentation } end - + def to_version { "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", @@ -178,7 +178,7 @@ def to_version end } end - + def to_search_result { "author" => author, @@ -187,9 +187,12 @@ def to_search_result "desc" => summary, "project_url" => project_page, "releases" => [{ "version" => version}], + "documentation" => documentation, "version" => version, "tag_list" => [author, name] } end end - end \ No newline at end of file + end +end + diff --git a/lib/puppet_library/forge/cache.rb b/lib/puppet_library/forge/cache.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/forge.rb b/lib/puppet_library/forge/forge.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/git_repository.rb b/lib/puppet_library/forge/git_repository.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/multi.rb b/lib/puppet_library/forge/multi.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/proxy.rb b/lib/puppet_library/forge/proxy.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/search_result.rb b/lib/puppet_library/forge/search_result.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/source.rb b/lib/puppet_library/forge/source.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 026e748..7215f6a 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -1,3 +1,4 @@ +# -*- encoding: utf-8 -*- # Puppet Library # Copyright (C) 2014 drrb # diff --git a/lib/puppet_library/http.rb b/lib/puppet_library/http.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/cache.rb b/lib/puppet_library/http/cache.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/cache/disk.rb b/lib/puppet_library/http/cache/disk.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/cache/in_memory.rb b/lib/puppet_library/http/cache/in_memory.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/cache/noop.rb b/lib/puppet_library/http/cache/noop.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/http_client.rb b/lib/puppet_library/http/http_client.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/http/url.rb b/lib/puppet_library/http/url.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/puppet_module.rb b/lib/puppet_library/puppet_module.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/puppet_module/modulefile.rb b/lib/puppet_library/puppet_module/modulefile.rb old mode 100644 new mode 100755 index b131129..4cf90d0 --- a/lib/puppet_library/puppet_module/modulefile.rb +++ b/lib/puppet_library/puppet_module/modulefile.rb @@ -17,7 +17,7 @@ module PuppetLibrary::PuppetModule class Modulefile def self.read(modulefile_path) - parse(File.open(modulefile_path, "r:UTF-8").read) + parse(File.read(modulefile_path)) end def self.parse(modulefile_source) diff --git a/lib/puppet_library/server.rb b/lib/puppet_library/server.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util.rb b/lib/puppet_library/util.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/config_api.rb b/lib/puppet_library/util/config_api.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/dependency.rb b/lib/puppet_library/util/dependency.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/git.rb b/lib/puppet_library/util/git.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/logging.rb b/lib/puppet_library/util/logging.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/patches.rb b/lib/puppet_library/util/patches.rb old mode 100644 new mode 100755 diff --git a/lib/puppet_library/util/temp_dir.rb b/lib/puppet_library/util/temp_dir.rb old mode 100644 new mode 100755 diff --git a/spec/archive/archive_reader_spec.rb b/spec/archive/archive_reader_spec.rb old mode 100644 new mode 100755 diff --git a/spec/archive/archiver_spec.rb b/spec/archive/archiver_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/abstract_spec.rb b/spec/forge/abstract_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/cache_spec.rb b/spec/forge/cache_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/directory_spec.rb b/spec/forge/directory_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/git_repository_spec.rb b/spec/forge/git_repository_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/multi_spec.rb b/spec/forge/multi_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/proxy_spec.rb b/spec/forge/proxy_spec.rb old mode 100644 new mode 100755 diff --git a/spec/forge/source_spec.rb b/spec/forge/source_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/cache/disk_spec.rb b/spec/http/cache/disk_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/cache/in_memory_spec.rb b/spec/http/cache/in_memory_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/cache/noop_spec.rb b/spec/http/cache/noop_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/http_client_spec.rb b/spec/http/http_client_spec.rb old mode 100644 new mode 100755 diff --git a/spec/http/url_spec.rb b/spec/http/url_spec.rb old mode 100644 new mode 100755 diff --git a/spec/integration_test_helper.rb b/spec/integration_test_helper.rb old mode 100644 new mode 100755 diff --git a/spec/module_spec_helper.rb b/spec/module_spec_helper.rb old mode 100644 new mode 100755 diff --git a/spec/puppet_library_spec.rb b/spec/puppet_library_spec.rb old mode 100644 new mode 100755 diff --git a/spec/puppet_module/modulefile_spec.rb b/spec/puppet_module/modulefile_spec.rb old mode 100644 new mode 100755 diff --git a/spec/server_spec.rb b/spec/server_spec.rb old mode 100644 new mode 100755 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb old mode 100644 new mode 100755 diff --git a/spec/util/config_api_spec.rb b/spec/util/config_api_spec.rb old mode 100644 new mode 100755 diff --git a/spec/util/dependency_spec.rb b/spec/util/dependency_spec.rb old mode 100644 new mode 100755 diff --git a/spec/util/git_spec.rb b/spec/util/git_spec.rb old mode 100644 new mode 100755 diff --git a/spec/util/patches_spec.rb b/spec/util/patches_spec.rb old mode 100644 new mode 100755 diff --git a/spec/util/temp_dir_spec.rb b/spec/util/temp_dir_spec.rb old mode 100644 new mode 100755 diff --git a/test/directory_forge_integration_test.rb b/test/directory_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/offline_git_repo_forge_integration_test.rb b/test/offline_git_repo_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/offline_proxy_forge_integration_test.rb b/test/offline_proxy_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/online_git_repo_forge_integration_test.rb b/test/online_git_repo_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/online_proxy_forge_integration_test.rb b/test/online_proxy_forge_integration_test.rb old mode 100644 new mode 100755 diff --git a/test/source_forge_integration_test.rb b/test/source_forge_integration_test.rb old mode 100644 new mode 100755 From a84cef16398ec0b4059b1c63165ac313617a21a7 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Tue, 5 Aug 2014 14:22:52 +0200 Subject: [PATCH 17/25] Added UTF-8 encoding to HTML documentation --- .gitignore | 1 + lib/puppet_library/forge/directory.rb | 18 ++++++++++-------- lib/puppet_library/forge/source_directory.rb | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 7878408..996017a 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ test/version_tmp tmp .rake_t_cache /Gemfile.lock +.DS_Store diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index a3b6bd9..a2bd237 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -79,16 +79,18 @@ def get_metadata(author, module_name) def read_metadata(archive_path) archive = PuppetLibrary::Archive::ArchiveReader.new(archive_path) metadata_file = archive.read_entry %r[[^/]+/metadata\.json$] - - - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) - readmeText = archive.read_entry %r[/README\.(md|markdown)] - readmeHTML = markdown.render(readmeText) parsedJSON = JSON.parse(metadata_file) - - parsedJSON["documentation"] = readmeHTML + + + readmeText = archive.read_entry %r[/README[\.(md|markdown)]] + if !readmeText.empty? && readmeText.length > 0 + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") + parsedJSON["documentation"] = readmeHTML + end + parsedJSON - + rescue => error warn "Error reading from module archive #{archive_path}: #{error}" return nil diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 7215f6a..2c560f9 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -91,7 +91,7 @@ def read_metadata(directory_path) if File.exist?(readmePath) markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read - readmeHTML = markdown.render(readmeText) + readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML end From a50db20e2d14d95fc4b15f24416e8d0c6d065264 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 15:33:18 +0200 Subject: [PATCH 18/25] Not raising an exception when there is no concrete file in a tar.gz module. Changed markdawn parser to allow anchors --- lib/puppet_library/archive/archive_reader.rb | 6 ++++-- lib/puppet_library/forge/directory.rb | 6 ++---- lib/puppet_library/forge/source_directory.rb | 13 +++++++++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/puppet_library/archive/archive_reader.rb b/lib/puppet_library/archive/archive_reader.rb index 4854dac..3464720 100755 --- a/lib/puppet_library/archive/archive_reader.rb +++ b/lib/puppet_library/archive/archive_reader.rb @@ -26,8 +26,10 @@ def initialize(path) def read_entry(entry_name_regex) tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(@path)) 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 + entry = tar.find {|e| e.full_name =~ entry_name_regex } # or raise "Couldn't find entry in archive matching #{entry_name_regex.inspect}" + if !entry.nil? + entry.read + end end end end diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index a2bd237..6ff2268 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -81,14 +81,12 @@ def read_metadata(archive_path) metadata_file = archive.read_entry %r[[^/]+/metadata\.json$] parsedJSON = JSON.parse(metadata_file) - readmeText = archive.read_entry %r[/README[\.(md|markdown)]] - if !readmeText.empty? && readmeText.length > 0 - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + if !readmeText.nil? && !readmeText.empty? && readmeText.length > 0 + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML end - parsedJSON rescue => error diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 2c560f9..8d9b314 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -88,8 +88,16 @@ def read_metadata(directory_path) Dir.chdir("#{directory_path}") readmePath = Dir["README*"].first + + # firstly trying to get the README.md file + readmePath = Dir["README.md"].last + + if ! File.exist?(readmePath) + readmePath = Dir["README*"].last + end + if File.exist?(readmePath) - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, extensions = {}) + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML @@ -108,7 +116,8 @@ def read_metadata(directory_path) "summary" => "unknown", "description" => "unknown", "project_page" => "unknown", - "dependencies" => "unknown" + "dependencies" => "unknown", + "documentation" => "" } end end From 72e5064f0c6f31b899b5b20b3441916080d60b05 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 16:16:15 +0200 Subject: [PATCH 19/25] Fixed specs to pass test with the new features --- lib/puppet_library/archive/archive_reader.rb | 13 +++++++++---- lib/puppet_library/forge/directory.rb | 5 +++-- lib/puppet_library/forge/source_directory.rb | 15 ++++++++------- spec/forge/abstract_spec.rb | 5 +++++ 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/puppet_library/archive/archive_reader.rb b/lib/puppet_library/archive/archive_reader.rb index 3464720..2855c26 100755 --- a/lib/puppet_library/archive/archive_reader.rb +++ b/lib/puppet_library/archive/archive_reader.rb @@ -23,13 +23,18 @@ def initialize(path) @path = path end + def check_entry?(entry_name_regex) + tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(@path)) + tar.rewind + entry = tar.find {|e| e.full_name =~ entry_name_regex } + !entry.nil? + end + def read_entry(entry_name_regex) tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(@path)) 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}" - if !entry.nil? - entry.read - end + 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 end end end diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index 6ff2268..b6020c4 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -81,8 +81,9 @@ def read_metadata(archive_path) metadata_file = archive.read_entry %r[[^/]+/metadata\.json$] parsedJSON = JSON.parse(metadata_file) - readmeText = archive.read_entry %r[/README[\.(md|markdown)]] - if !readmeText.nil? && !readmeText.empty? && readmeText.length > 0 + readme_regex = %r[/README[\.(md|markdown)]] + if archive.check_entry? readme_regex + readmeText = archive.read_entry readme_regex markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index 8d9b314..c45bc18 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -91,15 +91,16 @@ def read_metadata(directory_path) # firstly trying to get the README.md file readmePath = Dir["README.md"].last + puts "First: #{readmePath}" - if ! File.exist?(readmePath) + if readmePath.nil? || !File.exist?(readmePath) readmePath = Dir["README*"].last end - - if File.exist?(readmePath) - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) - readmeText = File.open("#{directory_path}/#{readmePath}", "r:UTF-8").read - readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") + puts "Second: #{readmePath}" + if !readmePath.nil? && File.exist?(readmePath) + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:with_toc_data => true), extensions = {}) + readmeText = File.open("#{directory_path}/#{readmePath}").read + readmeHTML = markdown.render(readmeText) #rendering twice for table of contents parsedJSON["documentation"] = readmeHTML end @@ -117,7 +118,7 @@ def read_metadata(directory_path) "description" => "unknown", "project_page" => "unknown", "dependencies" => "unknown", - "documentation" => "" + "documentation" => nil } end end diff --git a/spec/forge/abstract_spec.rb b/spec/forge/abstract_spec.rb index dc729e0..88e3041 100755 --- a/spec/forge/abstract_spec.rb +++ b/spec/forge/abstract_spec.rb @@ -76,6 +76,7 @@ module PuppetLibrary::Forge "name"=>"apache", "desc"=>"Puppet module for Apache", "project_url"=>"https://github.com/puppetlabs/puppetlabs-apache", + "documentation" => nil, "releases"=>[{"version"=>"0.10.0"}], "version"=>"0.10.0", "tag_list"=>["puppetlabs", "apache"] @@ -91,6 +92,7 @@ module PuppetLibrary::Forge "desc"=>"Puppet module for NTP", "project_url"=>"https://github.com/dodgybrothers/puppet-ntp", "releases"=>[{"version"=>"1.0.0"}], + "documentation" => nil, "version"=>"1.0.0", "tag_list"=>["dodgybrothers", "ntp"] }] @@ -127,6 +129,7 @@ module PuppetLibrary::Forge "desc"=>"New Puppet module for Apache", "project_url"=>"https://github.com/puppetlabs/puppetlabs-apache-new", "releases"=>[{"version"=>"1.0.0"},{"version"=>"0.10.0"}], + "documentation" => nil, "version"=>"1.0.0", "tag_list"=>["puppetlabs", "apache"] }] @@ -145,6 +148,7 @@ module PuppetLibrary::Forge "desc"=>"Puppet module for Apache", "project_url"=>"https://github.com/puppetlabs/puppetlabs-apache", "releases"=>[{"version"=>"0.10.0"}], + "documentation" => nil, "version"=>"0.10.0", "tag_list"=>["puppetlabs", "apache"] },{ @@ -154,6 +158,7 @@ module PuppetLibrary::Forge "desc"=>"Puppet module for NTP", "project_url"=>"https://github.com/dodgybrothers/puppet-ntp", "releases"=>[{"version"=>"1.0.0"}], + "documentation" => nil, "version"=>"1.0.0", "tag_list"=>["dodgybrothers", "ntp"] }] From 5a70c7fe520445484cbd68a4f13f7a37d824dbd5 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 16:16:15 +0200 Subject: [PATCH 20/25] Fixed specs to pass test with the new features --- lib/puppet_library/forge/directory.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/puppet_library/forge/directory.rb b/lib/puppet_library/forge/directory.rb index b6020c4..49b8554 100644 --- a/lib/puppet_library/forge/directory.rb +++ b/lib/puppet_library/forge/directory.rb @@ -84,7 +84,7 @@ def read_metadata(archive_path) readme_regex = %r[/README[\.(md|markdown)]] if archive.check_entry? readme_regex readmeText = archive.read_entry readme_regex - markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html => true, with_tocdata => true), extensions = {quote => true, lax_spacing => true}) + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:with_tocdata => true), extensions = {}) readmeHTML = markdown.render(readmeText).force_encoding("UTF-8") parsedJSON["documentation"] = readmeHTML end From 0f5c619e762149400a3d8b8f28853ec098b64b38 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Wed, 6 Aug 2014 16:16:15 +0200 Subject: [PATCH 21/25] Fixed specs to pass test with the new features --- lib/puppet_library/forge/source_directory.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/puppet_library/forge/source_directory.rb b/lib/puppet_library/forge/source_directory.rb index c45bc18..47fc6a5 100644 --- a/lib/puppet_library/forge/source_directory.rb +++ b/lib/puppet_library/forge/source_directory.rb @@ -68,7 +68,7 @@ def get_all_metadata end def get_metadata(author, module_name) - archives = Dir["#{@module_dir.path}/#{module_name}"] + archives = Dir["#{@module_dir.path}/*#{module_name}*"] archives.map {|path| read_metadata(path) }.compact end @@ -96,7 +96,7 @@ def read_metadata(directory_path) if readmePath.nil? || !File.exist?(readmePath) readmePath = Dir["README*"].last end - puts "Second: #{readmePath}" + if !readmePath.nil? && File.exist?(readmePath) markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(:with_toc_data => true), extensions = {}) readmeText = File.open("#{directory_path}/#{readmePath}").read From 49d102a2805969f6f1fc058251c3a77f84c41494 Mon Sep 17 00:00:00 2001 From: Moliholy Date: Fri, 8 Aug 2014 18:12:16 +0200 Subject: [PATCH 22/25] Fixed minor syntax error --- lib/puppet_library/forge/abstract.rb | 320 +++++++++++++-------------- 1 file changed, 159 insertions(+), 161 deletions(-) diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb index 7191405..2faf47b 100755 --- a/lib/puppet_library/forge/abstract.rb +++ b/lib/puppet_library/forge/abstract.rb @@ -21,178 +21,176 @@ require 'puppet_library/util/patches' module PuppetLibrary::Forge + # An abstract forge implementation that makes it easier to create new forge + # types. + # + # See PuppetLibrary::Forge::Directory for an example + class Abstract < Forge + def initialize(module_repo) + @repo = module_repo + end - # An abstract forge implementation that makes it easier to create new forge - # types. - # - # See PuppetLibrary::Forge::Directory for an example - class Abstract < Forge - def initialize(module_repo) - @repo = module_repo - end + def search_modules(query) + search = Search.new(query) - def search_modules(query) - search = Search.new(query) + search_results = retrieve_all_metadata.select do |result| + search.matches? result + end.sort_by do |result| + result.version + end.reverse.map do |result| + result.to_search_result + end - search_results = retrieve_all_metadata.select do |result| - search.matches? result - end.sort_by do |result| - result.version - end.reverse.map do |result| - result.to_search_result - end + SearchResult.merge_by_full_name(search_results) + end - SearchResult.merge_by_full_name(search_results) - end + def get_module_metadata(author, name) + modules = retrieve_metadata(author, name) - def get_module_metadata(author, name) - modules = retrieve_metadata(author, name) + raise ModuleNotFound if modules.empty? - raise ModuleNotFound if modules.empty? + modules = modules.version_sort_by { |m| m.version } + module_infos = modules.map { |m| m.to_info } + module_infos.deep_merge + end - modules = modules.version_sort_by { |m| m.version } - module_infos = modules.map { |m| m.to_info } - module_infos.deep_merge - end + def get_module_metadata_with_dependencies(author, name, version) + raise ModuleNotFound if retrieve_metadata(author, name).empty? - def get_module_metadata_with_dependencies(author, name, version) - raise ModuleNotFound if retrieve_metadata(author, name).empty? - - full_name = "#{author}/#{name}" - versions = collect_dependencies_versions(full_name) - return versions if version.nil? - - versions[full_name] = versions[full_name].select do |v| - PuppetLibrary::Util::Dependency.new(name, version).match?(name, v["version"]) - end - - dependencies = versions[full_name].map do |v| - v["dependencies"].map {|(name, spec)| name} - end.flatten - versions = Hash[versions.select do |name, info| - name == full_name || dependencies.include?(name) - end] - return versions - end - - def collect_dependencies_versions(module_full_name, metadata = {}) - author, module_name = module_full_name.split "/" - module_versions = retrieve_metadata(author, module_name) - metadata[module_full_name] = module_versions.map {|v| v.to_version } - - dependencies = module_versions.map {|v| v.dependency_names }.flatten - dependencies.each do |dependency| - collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency - end - return metadata - end - - def get_module_buffer(author, name, version) - @repo.get_module(author, name, version) or raise ModuleNotFound - end - - def retrieve_metadata(author, module_name) - @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} - end - - def retrieve_all_metadata - @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} - end - end + full_name = "#{author}/#{name}" + versions = collect_dependencies_versions(full_name) + return versions if version.nil? - class Search - def initialize(query) - @query = query - end - - def matches?(metadata) - return true if @query.nil? - return true if metadata.name.include? @query - return true if metadata.author.include? @query - return false - end - end + versions[full_name] = versions[full_name].select do |v| + PuppetLibrary::Util::Dependency.new(name, version).match?(name, v["version"]) + end + + dependencies = versions[full_name].map do |v| + v["dependencies"].map {|(name, spec)| name} + end.flatten + versions = Hash[versions.select do |name, info| + name == full_name || dependencies.include?(name) + end] + return versions + end + + def collect_dependencies_versions(module_full_name, metadata = {}) + author, module_name = module_full_name.split "/" + module_versions = retrieve_metadata(author, module_name) + metadata[module_full_name] = module_versions.map {|v| v.to_version } + + dependencies = module_versions.map {|v| v.dependency_names }.flatten + dependencies.each do |dependency| + collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency + end + return metadata + end + + def get_module_buffer(author, name, version) + @repo.get_module(author, name, version) or raise ModuleNotFound + end + + def retrieve_metadata(author, module_name) + @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} + end + + def retrieve_all_metadata + @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} + end + end + + class Search + def initialize(query) + @query = query + end + + def matches?(metadata) + return true if @query.nil? + return true if metadata.name.include? @query + return true if metadata.author.include? @query + return false + end + end + + class ModuleMetadata + def initialize(metadata) + @metadata = metadata + end - class ModuleMetadata - def initialize(metadata) - @metadata = metadata - end - - def author - @metadata["name"][/^[^-]+/] - end - - def name - @metadata["name"].sub(/^[^-]+-/, "") - end - - def full_name - @metadata["name"].sub("-", "/") - end - - def version - @metadata["version"] - end - - def dependencies - @metadata["dependencies"] - end - - def summary - @metadata["summary"] - end - - def description - @metadata["description"] - end - - def project_page - @metadata["project_page"] - end - - def dependency_names - dependencies.map {|d| d["name"]} - end - - def documentation - @metadata["documentation"] - end - - def to_info - { - "author" => author, - "full_name" => full_name, - "name" => name, - "desc" => description, - "releases" => [ { "version" => version } ], - "documentation" => documentation - } - end - - def to_version - { - "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", - "version" => version, - "dependencies" => dependencies.map do |dependency| - [ dependency["name"], dependency["version_requirement"] ] - end - } - end - - def to_search_result - { - "author" => author, - "full_name" => full_name, - "name" => name, - "desc" => summary, - "project_url" => project_page, - "releases" => [{ "version" => version}], - "documentation" => documentation, - "version" => version, - "tag_list" => [author, name] - } - end + def author + @metadata["name"][/^[^-]+/] + end + + def name + @metadata["name"].sub(/^[^-]+-/, "") + end + + def full_name + @metadata["name"].sub("-", "/") + end + + def version + @metadata["version"] + end + + def dependencies + @metadata["dependencies"] + end + + def summary + @metadata["summary"] + end + + def description + @metadata["description"] + end + + def project_page + @metadata["project_page"] + end + + def dependency_names + dependencies.map {|d| d["name"]} + end + + def documentation + @metadata["documentation"] + end + + def to_info + { + "author" => author, + "full_name" => full_name, + "name" => name, + "desc" => description, + "releases" => [ { "version" => version } ], + "documentation" => documentation + } + end + + def to_version + { + "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", + "version" => version, + "dependencies" => dependencies.map do |dependency| + [ dependency["name"], dependency["version_requirement"] ] end + } + end + + def to_search_result + { + "author" => author, + "full_name" => full_name, + "name" => name, + "desc" => summary, + "project_url" => project_page, + "releases" => [{ "version" => version}], + "documentation" => documentation, + "version" => version, + "tag_list" => [author, name] + } end + end end From e5cd22341f8cd11af7044e50548049ed6e4c56d0 Mon Sep 17 00:00:00 2001 From: Moliholy Date: Fri, 8 Aug 2014 18:12:16 +0200 Subject: [PATCH 23/25] Fixed minor syntax error --- lib/puppet_library/forge/abstract.rb | 193 +++++++++++++-------------- 1 file changed, 95 insertions(+), 98 deletions(-) diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb index 7191405..3be1945 100755 --- a/lib/puppet_library/forge/abstract.rb +++ b/lib/puppet_library/forge/abstract.rb @@ -71,128 +71,125 @@ def get_module_metadata_with_dependencies(author, name, version) end.flatten versions = Hash[versions.select do |name, info| name == full_name || dependencies.include?(name) - end] - return versions - end + end] + return versions + end - def collect_dependencies_versions(module_full_name, metadata = {}) - author, module_name = module_full_name.split "/" - module_versions = retrieve_metadata(author, module_name) - metadata[module_full_name] = module_versions.map {|v| v.to_version } + def collect_dependencies_versions(module_full_name, metadata = {}) + author, module_name = module_full_name.split "/" + module_versions = retrieve_metadata(author, module_name) + metadata[module_full_name] = module_versions.map {|v| v.to_version } - dependencies = module_versions.map {|v| v.dependency_names }.flatten - dependencies.each do |dependency| - collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency - end - return metadata + dependencies = module_versions.map {|v| v.dependency_names }.flatten + dependencies.each do |dependency| + collect_dependencies_versions(dependency, metadata) unless metadata.include? dependency end + return metadata + end - def get_module_buffer(author, name, version) - @repo.get_module(author, name, version) or raise ModuleNotFound - end + def get_module_buffer(author, name, version) + @repo.get_module(author, name, version) or raise ModuleNotFound + end - def retrieve_metadata(author, module_name) - @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} - end + def retrieve_metadata(author, module_name) + @repo.get_metadata(author, module_name).map {|metadata| ModuleMetadata.new(metadata)} + end - def retrieve_all_metadata - @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} - end + def retrieve_all_metadata + @repo.get_all_metadata.map {|metadata| ModuleMetadata.new(metadata)} end + end - class Search - def initialize(query) - @query = query - end + class Search + def initialize(query) + @query = query + end - def matches?(metadata) - return true if @query.nil? - return true if metadata.name.include? @query - return true if metadata.author.include? @query - return false - end + def matches?(metadata) + return true if @query.nil? + return true if metadata.name.include? @query + return true if metadata.author.include? @query + return false end + end - class ModuleMetadata - def initialize(metadata) - @metadata = metadata - end + class ModuleMetadata + def initialize(metadata) + @metadata = metadata + end - def author - @metadata["name"][/^[^-]+/] - end + def author + @metadata["name"][/^[^-]+/] + end - def name - @metadata["name"].sub(/^[^-]+-/, "") - end + def name + @metadata["name"].sub(/^[^-]+-/, "") + end - def full_name - @metadata["name"].sub("-", "/") - end + def full_name + @metadata["name"].sub("-", "/") + end - def version - @metadata["version"] - end + def version + @metadata["version"] + end - def dependencies - @metadata["dependencies"] - end + def dependencies + @metadata["dependencies"] + end - def summary - @metadata["summary"] - end + def summary + @metadata["summary"] + end - def description - @metadata["description"] - end + def description + @metadata["description"] + end - def project_page - @metadata["project_page"] - end + def project_page + @metadata["project_page"] + end - def dependency_names - dependencies.map {|d| d["name"]} - end + def dependency_names + dependencies.map {|d| d["name"]} + end - def documentation - @metadata["documentation"] - end + def documentation + @metadata["documentation"] + end - def to_info - { - "author" => author, - "full_name" => full_name, - "name" => name, - "desc" => description, - "releases" => [ { "version" => version } ], - "documentation" => documentation - } - end + def to_info + { + "author" => author, + "full_name" => full_name, + "name" => name, + "desc" => description, + "releases" => [ { "version" => version } ] + } + end - def to_version - { - "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", - "version" => version, - "dependencies" => dependencies.map do |dependency| - [ dependency["name"], dependency["version_requirement"] ] - end - } - end + def to_version + { + "file" => "/modules/#{author}-#{name}-#{version}.tar.gz", + "version" => version, + "dependencies" => dependencies.map do |dependency| + [ dependency["name"], dependency["version_requirement"] ] + end + } + end - def to_search_result - { - "author" => author, - "full_name" => full_name, - "name" => name, - "desc" => summary, - "project_url" => project_page, - "releases" => [{ "version" => version}], - "documentation" => documentation, - "version" => version, - "tag_list" => [author, name] - } - end + def to_search_result + { + "author" => author, + "full_name" => full_name, + "name" => name, + "desc" => summary, + "project_url" => project_page, + "releases" => [{ "version" => version}], + "documentation" => documentation, + "version" => version, + "tag_list" => [author, name] + } end end end - From 6a0d5397a20ea23758b30048ba708e56f234df13 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Mon, 11 Aug 2014 14:32:25 +0200 Subject: [PATCH 24/25] Fixed files permissions --- CHANGELOG.yml | 0 Gemfile | 0 Guardfile | 0 LICENSE.txt | 0 README.md | 0 Rakefile | 0 TODO.yml | 0 config.ru | 0 features/module_list.feature | 0 features/module_page.feature | 0 features/module_search.feature | 0 features/step_definitions/sinatra_steps.rb | 0 features/support/env.rb | 0 lib/puppet_library.rb | 0 lib/puppet_library/app/views/index.haml | 0 lib/puppet_library/app/views/layout.haml | 0 lib/puppet_library/app/views/module.haml | 0 lib/puppet_library/app/views/module_not_found.haml | 0 lib/puppet_library/archive.rb | 0 lib/puppet_library/archive/archive_reader.rb | 0 lib/puppet_library/archive/archiver.rb | 0 lib/puppet_library/forge.rb | 0 lib/puppet_library/http.rb | 0 lib/puppet_library/http/cache.rb | 0 lib/puppet_library/http/cache/disk.rb | 0 lib/puppet_library/http/cache/in_memory.rb | 0 lib/puppet_library/http/cache/noop.rb | 0 lib/puppet_library/http/http_client.rb | 0 lib/puppet_library/http/url.rb | 0 lib/puppet_library/puppet_module.rb | 0 lib/puppet_library/puppet_module/modulefile.rb | 0 lib/puppet_library/server.rb | 0 lib/puppet_library/util.rb | 0 lib/puppet_library/util/config_api.rb | 0 lib/puppet_library/util/dependency.rb | 0 lib/puppet_library/util/git.rb | 0 lib/puppet_library/util/logging.rb | 0 lib/puppet_library/util/patches.rb | 0 lib/puppet_library/util/temp_dir.rb | 0 39 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 CHANGELOG.yml mode change 100755 => 100644 Gemfile mode change 100755 => 100644 Guardfile mode change 100755 => 100644 LICENSE.txt mode change 100755 => 100644 README.md mode change 100755 => 100644 Rakefile mode change 100755 => 100644 TODO.yml mode change 100755 => 100644 config.ru mode change 100755 => 100644 features/module_list.feature mode change 100755 => 100644 features/module_page.feature mode change 100755 => 100644 features/module_search.feature mode change 100755 => 100644 features/step_definitions/sinatra_steps.rb mode change 100755 => 100644 features/support/env.rb mode change 100755 => 100644 lib/puppet_library.rb mode change 100755 => 100644 lib/puppet_library/app/views/index.haml mode change 100755 => 100644 lib/puppet_library/app/views/layout.haml mode change 100755 => 100644 lib/puppet_library/app/views/module.haml mode change 100755 => 100644 lib/puppet_library/app/views/module_not_found.haml mode change 100755 => 100644 lib/puppet_library/archive.rb mode change 100755 => 100644 lib/puppet_library/archive/archive_reader.rb mode change 100755 => 100644 lib/puppet_library/archive/archiver.rb mode change 100755 => 100644 lib/puppet_library/forge.rb mode change 100755 => 100644 lib/puppet_library/http.rb mode change 100755 => 100644 lib/puppet_library/http/cache.rb mode change 100755 => 100644 lib/puppet_library/http/cache/disk.rb mode change 100755 => 100644 lib/puppet_library/http/cache/in_memory.rb mode change 100755 => 100644 lib/puppet_library/http/cache/noop.rb mode change 100755 => 100644 lib/puppet_library/http/http_client.rb mode change 100755 => 100644 lib/puppet_library/http/url.rb mode change 100755 => 100644 lib/puppet_library/puppet_module.rb mode change 100755 => 100644 lib/puppet_library/puppet_module/modulefile.rb mode change 100755 => 100644 lib/puppet_library/server.rb mode change 100755 => 100644 lib/puppet_library/util.rb mode change 100755 => 100644 lib/puppet_library/util/config_api.rb mode change 100755 => 100644 lib/puppet_library/util/dependency.rb mode change 100755 => 100644 lib/puppet_library/util/git.rb mode change 100755 => 100644 lib/puppet_library/util/logging.rb mode change 100755 => 100644 lib/puppet_library/util/patches.rb mode change 100755 => 100644 lib/puppet_library/util/temp_dir.rb diff --git a/CHANGELOG.yml b/CHANGELOG.yml old mode 100755 new mode 100644 diff --git a/Gemfile b/Gemfile old mode 100755 new mode 100644 diff --git a/Guardfile b/Guardfile old mode 100755 new mode 100644 diff --git a/LICENSE.txt b/LICENSE.txt old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/Rakefile b/Rakefile old mode 100755 new mode 100644 diff --git a/TODO.yml b/TODO.yml old mode 100755 new mode 100644 diff --git a/config.ru b/config.ru old mode 100755 new mode 100644 diff --git a/features/module_list.feature b/features/module_list.feature old mode 100755 new mode 100644 diff --git a/features/module_page.feature b/features/module_page.feature old mode 100755 new mode 100644 diff --git a/features/module_search.feature b/features/module_search.feature old mode 100755 new mode 100644 diff --git a/features/step_definitions/sinatra_steps.rb b/features/step_definitions/sinatra_steps.rb old mode 100755 new mode 100644 diff --git a/features/support/env.rb b/features/support/env.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library.rb b/lib/puppet_library.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/index.haml b/lib/puppet_library/app/views/index.haml old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/layout.haml b/lib/puppet_library/app/views/layout.haml old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/module.haml b/lib/puppet_library/app/views/module.haml old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/module_not_found.haml b/lib/puppet_library/app/views/module_not_found.haml old mode 100755 new mode 100644 diff --git a/lib/puppet_library/archive.rb b/lib/puppet_library/archive.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/archive/archive_reader.rb b/lib/puppet_library/archive/archive_reader.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/archive/archiver.rb b/lib/puppet_library/archive/archiver.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge.rb b/lib/puppet_library/forge.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http.rb b/lib/puppet_library/http.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/cache.rb b/lib/puppet_library/http/cache.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/cache/disk.rb b/lib/puppet_library/http/cache/disk.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/cache/in_memory.rb b/lib/puppet_library/http/cache/in_memory.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/cache/noop.rb b/lib/puppet_library/http/cache/noop.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/http_client.rb b/lib/puppet_library/http/http_client.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/url.rb b/lib/puppet_library/http/url.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/puppet_module.rb b/lib/puppet_library/puppet_module.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/puppet_module/modulefile.rb b/lib/puppet_library/puppet_module/modulefile.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/server.rb b/lib/puppet_library/server.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util.rb b/lib/puppet_library/util.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/config_api.rb b/lib/puppet_library/util/config_api.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/dependency.rb b/lib/puppet_library/util/dependency.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/git.rb b/lib/puppet_library/util/git.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/logging.rb b/lib/puppet_library/util/logging.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/patches.rb b/lib/puppet_library/util/patches.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/temp_dir.rb b/lib/puppet_library/util/temp_dir.rb old mode 100755 new mode 100644 From e2bbf1ac62d53107ff5316f058bb09fd83ae1f09 Mon Sep 17 00:00:00 2001 From: Jose Molina Date: Mon, 11 Aug 2014 14:32:25 +0200 Subject: [PATCH 25/25] Fixed files permissions --- CHANGELOG.yml | 0 Gemfile | 0 Guardfile | 0 LICENSE.txt | 0 README.md | 0 Rakefile | 0 TODO.yml | 0 config.ru | 0 features/module_list.feature | 0 features/module_page.feature | 0 features/module_search.feature | 0 features/step_definitions/sinatra_steps.rb | 0 features/support/env.rb | 0 lib/puppet_library.rb | 0 lib/puppet_library/app/views/index.haml | 0 lib/puppet_library/app/views/layout.haml | 0 lib/puppet_library/app/views/module.haml | 0 lib/puppet_library/app/views/module_not_found.haml | 0 lib/puppet_library/archive.rb | 0 lib/puppet_library/archive/archive_reader.rb | 0 lib/puppet_library/archive/archiver.rb | 0 lib/puppet_library/forge.rb | 0 lib/puppet_library/forge/abstract.rb | 0 lib/puppet_library/forge/cache.rb | 0 lib/puppet_library/forge/forge.rb | 0 lib/puppet_library/forge/git_repository.rb | 0 lib/puppet_library/forge/multi.rb | 0 lib/puppet_library/forge/proxy.rb | 0 lib/puppet_library/forge/search_result.rb | 0 lib/puppet_library/forge/source.rb | 0 lib/puppet_library/http.rb | 0 lib/puppet_library/http/cache.rb | 0 lib/puppet_library/http/cache/disk.rb | 0 lib/puppet_library/http/cache/in_memory.rb | 0 lib/puppet_library/http/cache/noop.rb | 0 lib/puppet_library/http/http_client.rb | 0 lib/puppet_library/http/url.rb | 0 lib/puppet_library/puppet_module.rb | 0 lib/puppet_library/puppet_module/modulefile.rb | 0 lib/puppet_library/server.rb | 0 lib/puppet_library/util.rb | 0 lib/puppet_library/util/config_api.rb | 0 lib/puppet_library/util/dependency.rb | 0 lib/puppet_library/util/git.rb | 0 lib/puppet_library/util/logging.rb | 0 lib/puppet_library/util/patches.rb | 0 lib/puppet_library/util/temp_dir.rb | 0 spec/archive/archive_reader_spec.rb | 0 spec/archive/archiver_spec.rb | 0 spec/forge/abstract_spec.rb | 0 spec/forge/cache_spec.rb | 0 spec/forge/directory_spec.rb | 0 spec/forge/git_repository_spec.rb | 0 spec/forge/multi_spec.rb | 0 spec/forge/proxy_spec.rb | 0 spec/forge/source_spec.rb | 0 spec/http/cache/disk_spec.rb | 0 spec/http/cache/in_memory_spec.rb | 0 spec/http/cache/noop_spec.rb | 0 spec/http/http_client_spec.rb | 0 spec/http/url_spec.rb | 0 spec/integration_test_helper.rb | 0 spec/module_spec_helper.rb | 0 spec/puppet_library_spec.rb | 0 spec/puppet_module/modulefile_spec.rb | 0 spec/server_spec.rb | 0 spec/spec_helper.rb | 0 spec/util/config_api_spec.rb | 0 spec/util/dependency_spec.rb | 0 spec/util/git_spec.rb | 0 spec/util/patches_spec.rb | 0 spec/util/temp_dir_spec.rb | 0 test/directory_forge_integration_test.rb | 0 test/offline_git_repo_forge_integration_test.rb | 0 test/offline_proxy_forge_integration_test.rb | 0 test/online_git_repo_forge_integration_test.rb | 0 test/online_proxy_forge_integration_test.rb | 0 test/source_forge_integration_test.rb | 0 78 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 CHANGELOG.yml mode change 100755 => 100644 Gemfile mode change 100755 => 100644 Guardfile mode change 100755 => 100644 LICENSE.txt mode change 100755 => 100644 README.md mode change 100755 => 100644 Rakefile mode change 100755 => 100644 TODO.yml mode change 100755 => 100644 config.ru mode change 100755 => 100644 features/module_list.feature mode change 100755 => 100644 features/module_page.feature mode change 100755 => 100644 features/module_search.feature mode change 100755 => 100644 features/step_definitions/sinatra_steps.rb mode change 100755 => 100644 features/support/env.rb mode change 100755 => 100644 lib/puppet_library.rb mode change 100755 => 100644 lib/puppet_library/app/views/index.haml mode change 100755 => 100644 lib/puppet_library/app/views/layout.haml mode change 100755 => 100644 lib/puppet_library/app/views/module.haml mode change 100755 => 100644 lib/puppet_library/app/views/module_not_found.haml mode change 100755 => 100644 lib/puppet_library/archive.rb mode change 100755 => 100644 lib/puppet_library/archive/archive_reader.rb mode change 100755 => 100644 lib/puppet_library/archive/archiver.rb mode change 100755 => 100644 lib/puppet_library/forge.rb mode change 100755 => 100644 lib/puppet_library/forge/abstract.rb mode change 100755 => 100644 lib/puppet_library/forge/cache.rb mode change 100755 => 100644 lib/puppet_library/forge/forge.rb mode change 100755 => 100644 lib/puppet_library/forge/git_repository.rb mode change 100755 => 100644 lib/puppet_library/forge/multi.rb mode change 100755 => 100644 lib/puppet_library/forge/proxy.rb mode change 100755 => 100644 lib/puppet_library/forge/search_result.rb mode change 100755 => 100644 lib/puppet_library/forge/source.rb mode change 100755 => 100644 lib/puppet_library/http.rb mode change 100755 => 100644 lib/puppet_library/http/cache.rb mode change 100755 => 100644 lib/puppet_library/http/cache/disk.rb mode change 100755 => 100644 lib/puppet_library/http/cache/in_memory.rb mode change 100755 => 100644 lib/puppet_library/http/cache/noop.rb mode change 100755 => 100644 lib/puppet_library/http/http_client.rb mode change 100755 => 100644 lib/puppet_library/http/url.rb mode change 100755 => 100644 lib/puppet_library/puppet_module.rb mode change 100755 => 100644 lib/puppet_library/puppet_module/modulefile.rb mode change 100755 => 100644 lib/puppet_library/server.rb mode change 100755 => 100644 lib/puppet_library/util.rb mode change 100755 => 100644 lib/puppet_library/util/config_api.rb mode change 100755 => 100644 lib/puppet_library/util/dependency.rb mode change 100755 => 100644 lib/puppet_library/util/git.rb mode change 100755 => 100644 lib/puppet_library/util/logging.rb mode change 100755 => 100644 lib/puppet_library/util/patches.rb mode change 100755 => 100644 lib/puppet_library/util/temp_dir.rb mode change 100755 => 100644 spec/archive/archive_reader_spec.rb mode change 100755 => 100644 spec/archive/archiver_spec.rb mode change 100755 => 100644 spec/forge/abstract_spec.rb mode change 100755 => 100644 spec/forge/cache_spec.rb mode change 100755 => 100644 spec/forge/directory_spec.rb mode change 100755 => 100644 spec/forge/git_repository_spec.rb mode change 100755 => 100644 spec/forge/multi_spec.rb mode change 100755 => 100644 spec/forge/proxy_spec.rb mode change 100755 => 100644 spec/forge/source_spec.rb mode change 100755 => 100644 spec/http/cache/disk_spec.rb mode change 100755 => 100644 spec/http/cache/in_memory_spec.rb mode change 100755 => 100644 spec/http/cache/noop_spec.rb mode change 100755 => 100644 spec/http/http_client_spec.rb mode change 100755 => 100644 spec/http/url_spec.rb mode change 100755 => 100644 spec/integration_test_helper.rb mode change 100755 => 100644 spec/module_spec_helper.rb mode change 100755 => 100644 spec/puppet_library_spec.rb mode change 100755 => 100644 spec/puppet_module/modulefile_spec.rb mode change 100755 => 100644 spec/server_spec.rb mode change 100755 => 100644 spec/spec_helper.rb mode change 100755 => 100644 spec/util/config_api_spec.rb mode change 100755 => 100644 spec/util/dependency_spec.rb mode change 100755 => 100644 spec/util/git_spec.rb mode change 100755 => 100644 spec/util/patches_spec.rb mode change 100755 => 100644 spec/util/temp_dir_spec.rb mode change 100755 => 100644 test/directory_forge_integration_test.rb mode change 100755 => 100644 test/offline_git_repo_forge_integration_test.rb mode change 100755 => 100644 test/offline_proxy_forge_integration_test.rb mode change 100755 => 100644 test/online_git_repo_forge_integration_test.rb mode change 100755 => 100644 test/online_proxy_forge_integration_test.rb mode change 100755 => 100644 test/source_forge_integration_test.rb diff --git a/CHANGELOG.yml b/CHANGELOG.yml old mode 100755 new mode 100644 diff --git a/Gemfile b/Gemfile old mode 100755 new mode 100644 diff --git a/Guardfile b/Guardfile old mode 100755 new mode 100644 diff --git a/LICENSE.txt b/LICENSE.txt old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/Rakefile b/Rakefile old mode 100755 new mode 100644 diff --git a/TODO.yml b/TODO.yml old mode 100755 new mode 100644 diff --git a/config.ru b/config.ru old mode 100755 new mode 100644 diff --git a/features/module_list.feature b/features/module_list.feature old mode 100755 new mode 100644 diff --git a/features/module_page.feature b/features/module_page.feature old mode 100755 new mode 100644 diff --git a/features/module_search.feature b/features/module_search.feature old mode 100755 new mode 100644 diff --git a/features/step_definitions/sinatra_steps.rb b/features/step_definitions/sinatra_steps.rb old mode 100755 new mode 100644 diff --git a/features/support/env.rb b/features/support/env.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library.rb b/lib/puppet_library.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/index.haml b/lib/puppet_library/app/views/index.haml old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/layout.haml b/lib/puppet_library/app/views/layout.haml old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/module.haml b/lib/puppet_library/app/views/module.haml old mode 100755 new mode 100644 diff --git a/lib/puppet_library/app/views/module_not_found.haml b/lib/puppet_library/app/views/module_not_found.haml old mode 100755 new mode 100644 diff --git a/lib/puppet_library/archive.rb b/lib/puppet_library/archive.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/archive/archive_reader.rb b/lib/puppet_library/archive/archive_reader.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/archive/archiver.rb b/lib/puppet_library/archive/archiver.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge.rb b/lib/puppet_library/forge.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge/abstract.rb b/lib/puppet_library/forge/abstract.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge/cache.rb b/lib/puppet_library/forge/cache.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge/forge.rb b/lib/puppet_library/forge/forge.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge/git_repository.rb b/lib/puppet_library/forge/git_repository.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge/multi.rb b/lib/puppet_library/forge/multi.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge/proxy.rb b/lib/puppet_library/forge/proxy.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge/search_result.rb b/lib/puppet_library/forge/search_result.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/forge/source.rb b/lib/puppet_library/forge/source.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http.rb b/lib/puppet_library/http.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/cache.rb b/lib/puppet_library/http/cache.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/cache/disk.rb b/lib/puppet_library/http/cache/disk.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/cache/in_memory.rb b/lib/puppet_library/http/cache/in_memory.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/cache/noop.rb b/lib/puppet_library/http/cache/noop.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/http_client.rb b/lib/puppet_library/http/http_client.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/http/url.rb b/lib/puppet_library/http/url.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/puppet_module.rb b/lib/puppet_library/puppet_module.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/puppet_module/modulefile.rb b/lib/puppet_library/puppet_module/modulefile.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/server.rb b/lib/puppet_library/server.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util.rb b/lib/puppet_library/util.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/config_api.rb b/lib/puppet_library/util/config_api.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/dependency.rb b/lib/puppet_library/util/dependency.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/git.rb b/lib/puppet_library/util/git.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/logging.rb b/lib/puppet_library/util/logging.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/patches.rb b/lib/puppet_library/util/patches.rb old mode 100755 new mode 100644 diff --git a/lib/puppet_library/util/temp_dir.rb b/lib/puppet_library/util/temp_dir.rb old mode 100755 new mode 100644 diff --git a/spec/archive/archive_reader_spec.rb b/spec/archive/archive_reader_spec.rb old mode 100755 new mode 100644 diff --git a/spec/archive/archiver_spec.rb b/spec/archive/archiver_spec.rb old mode 100755 new mode 100644 diff --git a/spec/forge/abstract_spec.rb b/spec/forge/abstract_spec.rb old mode 100755 new mode 100644 diff --git a/spec/forge/cache_spec.rb b/spec/forge/cache_spec.rb old mode 100755 new mode 100644 diff --git a/spec/forge/directory_spec.rb b/spec/forge/directory_spec.rb old mode 100755 new mode 100644 diff --git a/spec/forge/git_repository_spec.rb b/spec/forge/git_repository_spec.rb old mode 100755 new mode 100644 diff --git a/spec/forge/multi_spec.rb b/spec/forge/multi_spec.rb old mode 100755 new mode 100644 diff --git a/spec/forge/proxy_spec.rb b/spec/forge/proxy_spec.rb old mode 100755 new mode 100644 diff --git a/spec/forge/source_spec.rb b/spec/forge/source_spec.rb old mode 100755 new mode 100644 diff --git a/spec/http/cache/disk_spec.rb b/spec/http/cache/disk_spec.rb old mode 100755 new mode 100644 diff --git a/spec/http/cache/in_memory_spec.rb b/spec/http/cache/in_memory_spec.rb old mode 100755 new mode 100644 diff --git a/spec/http/cache/noop_spec.rb b/spec/http/cache/noop_spec.rb old mode 100755 new mode 100644 diff --git a/spec/http/http_client_spec.rb b/spec/http/http_client_spec.rb old mode 100755 new mode 100644 diff --git a/spec/http/url_spec.rb b/spec/http/url_spec.rb old mode 100755 new mode 100644 diff --git a/spec/integration_test_helper.rb b/spec/integration_test_helper.rb old mode 100755 new mode 100644 diff --git a/spec/module_spec_helper.rb b/spec/module_spec_helper.rb old mode 100755 new mode 100644 diff --git a/spec/puppet_library_spec.rb b/spec/puppet_library_spec.rb old mode 100755 new mode 100644 diff --git a/spec/puppet_module/modulefile_spec.rb b/spec/puppet_module/modulefile_spec.rb old mode 100755 new mode 100644 diff --git a/spec/server_spec.rb b/spec/server_spec.rb old mode 100755 new mode 100644 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb old mode 100755 new mode 100644 diff --git a/spec/util/config_api_spec.rb b/spec/util/config_api_spec.rb old mode 100755 new mode 100644 diff --git a/spec/util/dependency_spec.rb b/spec/util/dependency_spec.rb old mode 100755 new mode 100644 diff --git a/spec/util/git_spec.rb b/spec/util/git_spec.rb old mode 100755 new mode 100644 diff --git a/spec/util/patches_spec.rb b/spec/util/patches_spec.rb old mode 100755 new mode 100644 diff --git a/spec/util/temp_dir_spec.rb b/spec/util/temp_dir_spec.rb old mode 100755 new mode 100644 diff --git a/test/directory_forge_integration_test.rb b/test/directory_forge_integration_test.rb old mode 100755 new mode 100644 diff --git a/test/offline_git_repo_forge_integration_test.rb b/test/offline_git_repo_forge_integration_test.rb old mode 100755 new mode 100644 diff --git a/test/offline_proxy_forge_integration_test.rb b/test/offline_proxy_forge_integration_test.rb old mode 100755 new mode 100644 diff --git a/test/online_git_repo_forge_integration_test.rb b/test/online_git_repo_forge_integration_test.rb old mode 100755 new mode 100644 diff --git a/test/online_proxy_forge_integration_test.rb b/test/online_proxy_forge_integration_test.rb old mode 100755 new mode 100644 diff --git a/test/source_forge_integration_test.rb b/test/source_forge_integration_test.rb old mode 100755 new mode 100644