summaryrefslogtreecommitdiff
path: root/omnibus.to_chunk
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-10-21 15:45:21 +0100
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-10-21 15:45:21 +0100
commit61e835845955c3653198ffd6a64df7ff0f6a547e (patch)
tree57de2dbc9555cc4bbad3602ea4803cc6a206750e /omnibus.to_chunk
parent44ee17802dc04b4ecfa7ec812a5a0318bf69c62f (diff)
downloadimport-61e835845955c3653198ffd6a64df7ff0f6a547e.tar.gz
Organise import extensions and data into subdirectories
Finally the repo starts to look a little more tidy!
Diffstat (limited to 'omnibus.to_chunk')
-rwxr-xr-xomnibus.to_chunk134
1 files changed, 0 insertions, 134 deletions
diff --git a/omnibus.to_chunk b/omnibus.to_chunk
deleted file mode 100755
index 5e527a9..0000000
--- a/omnibus.to_chunk
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/env ruby
-#
-# Create a chunk morphology to build Omnibus software in Baserock
-#
-# Copyright (C) 2014 Codethink Limited
-#
-# 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; version 2 of the License.
-#
-# 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, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-require_relative 'importer_base'
-require_relative 'importer_omnibus_extensions'
-
-BANNER = "Usage: omnibus.to_chunk PROJECT_DIR PROJECT_NAME SOURCE_DIR SOFTWARE_NAME"
-
-DESCRIPTION = <<-END
-Generate a .morph file for a given Omnibus software component.
-END
-
-class OmnibusChunkMorphologyGenerator < Importer::Base
- def parse_options(arguments)
- opts = create_option_parser(BANNER, DESCRIPTION)
-
- parsed_arguments = opts.parse!(arguments)
-
- if parsed_arguments.length != 4 and parsed_arguments.length != 5
- STDERR.puts "Expected 4 or 5 arguments, got #{parsed_arguments}."
- opts.parse(['-?'])
- exit 255
- end
-
- project_dir, project_name, source_dir, software_name, expected_version = \
- parsed_arguments
- # Not yet implemented
- #if expected_version != nil
- # expected_version = Gem::Version.new(expected_version)
- #end
- [project_dir, project_name, source_dir, software_name, expected_version]
- end
-
- class SubprocessError < RuntimeError
- end
-
- def run_tool_capture_output(tool_name, *args)
- scripts_dir = local_data_path('.')
- tool_path = local_data_path(tool_name)
-
- # FIXME: something breaks when we try to share this FD, it's not
- # ideal that the subprocess doesn't log anything, though.
- env_changes = {'MORPH_LOG_FD' => nil}
-
- command = [[tool_path, tool_name], *args]
- log.info("Running #{command.join(' ')} in #{scripts_dir}")
-
- text = IO.popen(
- env_changes, command, :chdir => scripts_dir, :err => [:child, :out]
- ) do |io|
- io.read
- end
-
- if $? == 0
- text
- else
- raise SubprocessError, text
- end
- end
-
- def generate_chunk_morph_for_rubygems_software(software, source_dir)
- # This is a better heuristic for getting the name of the Gem
- # than the software name, it seems ...
- gem_name = software.relative_path
-
- text = run_tool_capture_output('rubygems.to_chunk', source_dir, gem_name)
- log.debug("Text from output: #{text}, result #{$?}")
-
- morphology = YAML::load(text)
- return morphology
- rescue SubprocessError => e
- error "Tried to import #{software.name} as a RubyGem, got the " \
- "following error from rubygems.to_chunk: #{e.message}"
- exit 1
- end
-
- def generate_chunk_morph_for_software(project, software, source_dir)
- if software.builder.built_gemspec != nil
- morphology = generate_chunk_morph_for_rubygems_software(software,
- source_dir)
- else
- morphology = {
- "name" => software.name,
- "kind" => "chunk",
- "description" => "Automatically generated by omnibus.to_chunk"
- }
- end
-
- # Possibly this tool should look at software.build and
- # generate suitable configure, build and install-commands.
- # For now: don't bother!
-
- if software.description
- morphology['description'] = software.description + '\n\n' +
- morphology['description']
- end
-
- morphology
- end
-
- def run
- project_dir, project_name, source_dir, software_name = parse_options(ARGV)
-
- log.info("Creating chunk morph for #{software_name} from project " +
- "#{project_name}, defined in #{project_dir}")
-
- Dir.chdir(project_dir)
-
- project = Omnibus::Project.load(project_name)
-
- software = Omnibus::Software.load(@project, software_name)
-
- morph = generate_chunk_morph_for_software(project, software, source_dir)
- write_morph(STDOUT, morph)
- end
-end
-
-OmnibusChunkMorphologyGenerator.new.run