software_smithy 1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +114 -0
- data/bin/smithy +586 -0
- data/etc/completion/smithy-completion.bash +266 -0
- data/etc/completion/zsh/_smithy +130 -0
- data/etc/smithyrc +36 -0
- data/etc/templates/build/.owners +1 -0
- data/etc/templates/build/build-notes +0 -0
- data/etc/templates/build/dependencies +0 -0
- data/etc/templates/build/rebuild +13 -0
- data/etc/templates/build/relink +2 -0
- data/etc/templates/build/remodule.erb +21 -0
- data/etc/templates/build/retest +6 -0
- data/etc/templates/build/status +0 -0
- data/etc/templates/modulefile.erb +30 -0
- data/etc/templates/package/.check4newver +2 -0
- data/etc/templates/package/.exceptions +3 -0
- data/etc/templates/package/description +18 -0
- data/etc/templates/package/description.markdown +17 -0
- data/etc/templates/package/support +1 -0
- data/etc/templates/package/versions +3 -0
- data/etc/templates/web/all.html.erb +19 -0
- data/etc/templates/web/alphabetical.html.erb +12 -0
- data/etc/templates/web/category.html.erb +74 -0
- data/etc/templates/web/machine_version_table.html.erb +35 -0
- data/etc/templates/web/package.html.erb +53 -0
- data/etc/templates/web/version_list.html.erb +7 -0
- data/etc/templates/web/version_table.html.erb +24 -0
- data/lib/smithy/config.rb +167 -0
- data/lib/smithy/description.rb +276 -0
- data/lib/smithy/file_operations.rb +234 -0
- data/lib/smithy/format.rb +134 -0
- data/lib/smithy/helpers.rb +159 -0
- data/lib/smithy/module_file.rb +224 -0
- data/lib/smithy/package.rb +647 -0
- data/lib/smithy.rb +45 -0
- data/lib/smithy_version.rb +40 -0
- data/man/man1/smithy.1 +262 -0
- data/smithy.rdoc +281 -0
- metadata +230 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
<h2>Available Versions</h2>
|
2
|
+
|
3
|
+
<table class="kb-table kb-table-bordered">
|
4
|
+
<thead>
|
5
|
+
<tr>
|
6
|
+
<td style="text-align:center;"><b>System</b></td>
|
7
|
+
<td style="text-align:center;"><b>Application/Version</b></td>
|
8
|
+
<td style="text-align:center;"><b>Build</b></td>
|
9
|
+
<!-- <%# ModuleFile::Environments.reject{|e| e[:human_name]=="pathscale"}.each do |e| %> -->
|
10
|
+
<!-- <td style="text-align:center;"> -->
|
11
|
+
<!-- <b> -->
|
12
|
+
<!-- <%#= e[:human_name].upcase %> -->
|
13
|
+
<!-- </b> -->
|
14
|
+
<!-- </td> -->
|
15
|
+
<!-- <%# end %> -->
|
16
|
+
</tr>
|
17
|
+
</thead>
|
18
|
+
|
19
|
+
<tbody>
|
20
|
+
<% @machine_table.each do |machine, version_table| %>
|
21
|
+
<% version_table.each do |version, builds| %>
|
22
|
+
<% builds.each do |build| %>
|
23
|
+
<tr>
|
24
|
+
<td style="text-align:center;"><%= machine.humanize %></td>
|
25
|
+
<td style="text-align:center;"><%= "#{@name}/#{version}" %></td>
|
26
|
+
<td style="text-align:center;"><%= build %></td>
|
27
|
+
</tr>
|
28
|
+
<% end %>
|
29
|
+
<% end %>
|
30
|
+
<% end %>
|
31
|
+
</tbody>
|
32
|
+
</table>
|
33
|
+
|
34
|
+
|
35
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<h1>Git</h1>
|
2
|
+
|
3
|
+
<p> Category: Program Dev-Tools
|
4
|
+
|
5
|
+
<h2>Description</h2>
|
6
|
+
|
7
|
+
<p> <a href="http://git.or.cz/">Git</a> is an open source version
|
8
|
+
control system designed to handle very large projects with speed and
|
9
|
+
efficiency, but just as well suited for small personal repositories;
|
10
|
+
it is especially popular in the open source community, serving as a
|
11
|
+
development platform for projects like the Linux Kernel, Ruby on
|
12
|
+
Rails, WINE or X.org.
|
13
|
+
|
14
|
+
<p>Git falls in the category of distributed source code management tools,
|
15
|
+
similar to e.g. Mercurial or Bazaar. Every Git working directory is a
|
16
|
+
full-fledged repository with complete history and full revision
|
17
|
+
tracking capabilities, not dependent on network access or a central
|
18
|
+
server. Still, Git stays extremely fast and space efficient.
|
19
|
+
|
20
|
+
<h2>Use</h2>
|
21
|
+
|
22
|
+
<pre>
|
23
|
+
module avail git
|
24
|
+
module load git
|
25
|
+
git
|
26
|
+
</pre>
|
27
|
+
|
28
|
+
|
29
|
+
<h2>Support</h2><p>This package has the following support level : Unsupported
|
30
|
+
<br>
|
31
|
+
<h2>Available Versions</h2>
|
32
|
+
|
33
|
+
<table class="inline">
|
34
|
+
<tr>
|
35
|
+
<th rowspan = "2">Version</th>
|
36
|
+
<th colspan = "6">Available Builds</th> </tr><tr>
|
37
|
+
<th>pgi</th>
|
38
|
+
<th>pathscale</th>
|
39
|
+
<th>gnu</th>
|
40
|
+
<th>intel</th>
|
41
|
+
<th>cray</th>
|
42
|
+
<th>Other</th>
|
43
|
+
<tr>
|
44
|
+
<th>1.7.8</th>
|
45
|
+
<td></td>
|
46
|
+
<td></td>
|
47
|
+
<td><table class="inline"><tr><td class="hidden">gnu4.3.4</td><td class="hidden2">?</td></tr></table></td>
|
48
|
+
<td></td>
|
49
|
+
<td></td>
|
50
|
+
<td><table class="inline"></table></td>
|
51
|
+
</tr>
|
52
|
+
|
53
|
+
</table>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<h2>Available Versions</h2>
|
2
|
+
|
3
|
+
Checkmarks indicate a given version is available for the compiler specified in each column.
|
4
|
+
|
5
|
+
<table class="kb-table kb-table-bordered">
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<td style="text-align:center;"><b>Version</b></td>
|
9
|
+
<% ModuleFile::Environments.reject{|e| e[:human_name]=="pathscale"}.each do |e| %>
|
10
|
+
<td style="text-align:center;"><b><%= e[:human_name].upcase %></b></td>
|
11
|
+
<% end %>
|
12
|
+
</tr>
|
13
|
+
</thead>
|
14
|
+
<tbody>
|
15
|
+
<% @version_table.each do |version, builds| %>
|
16
|
+
<tr>
|
17
|
+
<td style="text-align:center;"><b><%= "#{@name}/#{version}" %></b></td>
|
18
|
+
<% ModuleFile::Environments.reject{|e| e[:human_name]=="pathscale"}.each do |e| %>
|
19
|
+
<td style="text-align:center;"><% if builds.select{|b|b=~e[:regex]}.size > 0 %><img width="23" height="18" style="margin:0;" title="checkmark" alt="" src="http://www.olcf.ornl.gov/wp-content/uploads/2011/03/checkmark.png"><% end %></td>
|
20
|
+
<% end %>
|
21
|
+
</tr>
|
22
|
+
<% end %>
|
23
|
+
</tbody>
|
24
|
+
</table>
|
@@ -0,0 +1,167 @@
|
|
1
|
+
# Smithy is freely available under the terms of the BSD license given below. {{{
|
2
|
+
#
|
3
|
+
# Copyright (c) 2012. UT-BATTELLE, LLC. All rights reserved.
|
4
|
+
#
|
5
|
+
# Produced by the National Center for Computational Sciences at Oak Ridge
|
6
|
+
# National Laboratory. Smithy is a based on SWTools, more information on SWTools
|
7
|
+
# can be found at: http://www.olcf.ornl.gov/center-projects/swtools/
|
8
|
+
#
|
9
|
+
# This product includes software produced by UT-Battelle, LLC under Contract No.
|
10
|
+
# DE-AC05-00OR22725 with the Department of Energy.
|
11
|
+
#
|
12
|
+
# Redistribution and use in source and binary forms, with or without
|
13
|
+
# modification, are permitted provided that the following conditions are met:
|
14
|
+
#
|
15
|
+
# - Redistributions of source code must retain the above copyright notice, this
|
16
|
+
# list of conditions and the following disclaimer.
|
17
|
+
#
|
18
|
+
# - Redistributions in binary form must reproduce the above copyright notice, this
|
19
|
+
# list of conditions and the following disclaimer in the documentation and/or
|
20
|
+
# other materials provided with the distribution.
|
21
|
+
#
|
22
|
+
# - Neither the name of the UT-BATTELLE nor the names of its contributors may
|
23
|
+
# be used to endorse or promote products derived from this software without
|
24
|
+
# specific prior written permission.
|
25
|
+
#
|
26
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
27
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
28
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
29
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
30
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
31
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
32
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
33
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
34
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
35
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
36
|
+
# }}}
|
37
|
+
|
38
|
+
module Smithy
|
39
|
+
class Config
|
40
|
+
class << self
|
41
|
+
attr_accessor :config_file_name, :config_file_hash, :global, :hostname,
|
42
|
+
:arch, :root, :full_root, :web_root, :file_group, :descriptions_root,
|
43
|
+
:web_architecture_names
|
44
|
+
|
45
|
+
def group_writeable?
|
46
|
+
@global[:"disable-group-writable"] ? false : true
|
47
|
+
end
|
48
|
+
|
49
|
+
def load_configuration(gli_options = {})
|
50
|
+
@global = gli_options
|
51
|
+
options_to_merge = {}
|
52
|
+
load_config_yaml
|
53
|
+
|
54
|
+
return nil unless @config_file_hash
|
55
|
+
|
56
|
+
# Pick some values from the config file
|
57
|
+
options_to_merge[:"software-root"] = @config_file_hash.try(:[], "software-root")
|
58
|
+
options_to_merge[:"web-root"] = @config_file_hash.try(:[], "web-root")
|
59
|
+
options_to_merge[:"file-group-name"] = @config_file_hash.try(:[], "file-group-name")
|
60
|
+
options_to_merge[:"descriptions-root"] = @config_file_hash.try(:[], "descriptions-root")
|
61
|
+
options_to_merge[:"web-architecture-names"] = @config_file_hash.try(:[], "web-architecture-names")
|
62
|
+
|
63
|
+
set_hostname_and_arch
|
64
|
+
options_to_merge[:arch] = @arch
|
65
|
+
options_to_merge[:"prgenv-prefix"] = get_prgenv_prefix
|
66
|
+
|
67
|
+
# Merge the config file values with command line values,
|
68
|
+
# options on the command line take precedence.
|
69
|
+
@global.merge!(options_to_merge) do |key, values_command_line, values_config|
|
70
|
+
if values_command_line.nil?
|
71
|
+
values_config
|
72
|
+
else
|
73
|
+
values_command_line
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
@arch = @global[:arch]
|
78
|
+
@root = @global[:"software-root"]
|
79
|
+
@file_group = @global[:"file-group-name"]
|
80
|
+
@full_root = get_software_root
|
81
|
+
@web_root = @global[:"web-root"]
|
82
|
+
@descriptions_root = @global[:"descriptions-root"]
|
83
|
+
@web_architecture_names = @global[:"web-architecture-names"]
|
84
|
+
|
85
|
+
# Add new info
|
86
|
+
@global[:full_software_root_path] = @full_root
|
87
|
+
@global[:"file-group-id"] = Etc.getgrnam(options_to_merge[:"file-group-name"]).try(:gid) if @global[:"file-group-name"]
|
88
|
+
end
|
89
|
+
|
90
|
+
def load_config_yaml
|
91
|
+
config_path = File.expand_path(ENV['SMITHY_CONFIG']) if ENV['SMITHY_CONFIG']
|
92
|
+
config_path = File.expand_path(global[:"config-file"]) if global[:"config-file"]
|
93
|
+
config_path = File.expand_path(@config_file_name) if config_path.blank?
|
94
|
+
|
95
|
+
if File.exists? config_path
|
96
|
+
@config_file_name = config_path
|
97
|
+
@config_file_hash = YAML.load_file(config_path).stringify_keys
|
98
|
+
else
|
99
|
+
raise """warning: Cannot read config file: #{@config_file_name}
|
100
|
+
Please update the file or set SMITHY_CONFIG """
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def architectures
|
105
|
+
notice_command "Current Hostname: ", @hostname, 30
|
106
|
+
notice_command "Current Architecture: ", @arch, 30
|
107
|
+
notice_command "All Architectures: ", @config_file_hash["hostname-architectures"].values.uniq.sort.join(", "), 30
|
108
|
+
end
|
109
|
+
|
110
|
+
def get_prgenv_prefix
|
111
|
+
default_prefix = "PrgEnv-"
|
112
|
+
|
113
|
+
default_prefix_from_config = @config_file_hash.try(:[], "programming-environment-prefix").try(:[], "default")
|
114
|
+
default_prefix = default_prefix_from_config unless default_prefix_from_config.blank?
|
115
|
+
|
116
|
+
prefix_from_config = @config_file_hash.try(:[], "programming-environment-prefix").try(:[], @arch)
|
117
|
+
|
118
|
+
return prefix_from_config unless prefix_from_config.blank?
|
119
|
+
|
120
|
+
return default_prefix
|
121
|
+
end
|
122
|
+
|
123
|
+
def set_hostname_and_arch
|
124
|
+
@hostname ||= ENV.try(:[], 'HOSTNAME').try(:dup)
|
125
|
+
@hostname ||= `hostname -s`.try(:dup)
|
126
|
+
@hostname.chomp!
|
127
|
+
# Remove trailing numbers (if they exist) and a possible single trailing period
|
128
|
+
@hostname.gsub!(/\.?$/,'')
|
129
|
+
machine = @hostname.gsub(/(\d*)$/,'')
|
130
|
+
|
131
|
+
@arch = global[:arch] if @arch.nil?
|
132
|
+
@arch = @config_file_hash.try(:[], "hostname-architectures").try(:[], machine) if @arch.nil?
|
133
|
+
@arch = @config_file_hash.try(:[], "hostname-architectures").try(:[], @hostname) if @arch.nil?
|
134
|
+
end
|
135
|
+
|
136
|
+
def get_software_root
|
137
|
+
if @root.blank? || @arch.blank?
|
138
|
+
raise """Cannot determine which architecture we are using.
|
139
|
+
Please specify using --arch or add a '#{@hostname}' hostname entry to:
|
140
|
+
#{@config_file_name}"""
|
141
|
+
end
|
142
|
+
|
143
|
+
s = File.join(@root, @arch)
|
144
|
+
raise "The software-root directory '#{s}' does not exist" unless Dir.exist?(s)
|
145
|
+
return s
|
146
|
+
end
|
147
|
+
|
148
|
+
def last_prefix
|
149
|
+
rc_file = File.join(ENV['HOME'], '.smithyrc')
|
150
|
+
if File.exists?(rc_file)
|
151
|
+
h = YAML.load_file(rc_file).stringify_keys rescue nil
|
152
|
+
return h["last"]
|
153
|
+
else
|
154
|
+
return nil
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def save_last_prefix(prefix)
|
159
|
+
rc_file = File.join(ENV['HOME'], '.smithyrc')
|
160
|
+
h = {:last => prefix}
|
161
|
+
File.open(rc_file, "w+") do |f|
|
162
|
+
f.write(h.to_yaml)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,276 @@
|
|
1
|
+
# Smithy is freely available under the terms of the BSD license given below. {{{
|
2
|
+
#
|
3
|
+
# Copyright (c) 2012. UT-BATTELLE, LLC. All rights reserved.
|
4
|
+
#
|
5
|
+
# Produced by the National Center for Computational Sciences at Oak Ridge
|
6
|
+
# National Laboratory. Smithy is a based on SWTools, more information on SWTools
|
7
|
+
# can be found at: http://www.olcf.ornl.gov/center-projects/swtools/
|
8
|
+
#
|
9
|
+
# This product includes software produced by UT-Battelle, LLC under Contract No.
|
10
|
+
# DE-AC05-00OR22725 with the Department of Energy.
|
11
|
+
#
|
12
|
+
# Redistribution and use in source and binary forms, with or without
|
13
|
+
# modification, are permitted provided that the following conditions are met:
|
14
|
+
#
|
15
|
+
# - Redistributions of source code must retain the above copyright notice, this
|
16
|
+
# list of conditions and the following disclaimer.
|
17
|
+
#
|
18
|
+
# - Redistributions in binary form must reproduce the above copyright notice, this
|
19
|
+
# list of conditions and the following disclaimer in the documentation and/or
|
20
|
+
# other materials provided with the distribution.
|
21
|
+
#
|
22
|
+
# - Neither the name of the UT-BATTELLE nor the names of its contributors may
|
23
|
+
# be used to endorse or promote products derived from this software without
|
24
|
+
# specific prior written permission.
|
25
|
+
#
|
26
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
27
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
28
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
29
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
30
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
31
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
32
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
33
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
34
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
35
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
36
|
+
# }}}
|
37
|
+
|
38
|
+
module Smithy
|
39
|
+
class Description
|
40
|
+
attr_accessor :path, :package, :root, :arch, :www_root, :name, :content,
|
41
|
+
:categories, :versions, :builds, :global_description
|
42
|
+
|
43
|
+
def initialize(args = {})
|
44
|
+
@www_root = Smithy::Config.web_root
|
45
|
+
@package = args[:package]
|
46
|
+
@global_description = true if Smithy::Config.descriptions_root
|
47
|
+
|
48
|
+
if @package.class == Package
|
49
|
+
@root = @package.root
|
50
|
+
@arch = @package.arch
|
51
|
+
@name = @package.name
|
52
|
+
@path = args[:package].application_directory
|
53
|
+
@path = File.join(Smithy::Config.descriptions_root, @name) if @global_description
|
54
|
+
else
|
55
|
+
@root = Smithy::Config.root
|
56
|
+
@arch = Smithy::Config.arch
|
57
|
+
|
58
|
+
if @global_description
|
59
|
+
@name = @package.gsub(/#{Smithy::Config.descriptions_root}\/?/, "")
|
60
|
+
@path = @package
|
61
|
+
else
|
62
|
+
if @package == 'last'
|
63
|
+
@name = last_prefix.split('/').try(:first)
|
64
|
+
else
|
65
|
+
@name = Package.normalize_name :name => args[:package], :root => @root, :arch => @arch
|
66
|
+
end
|
67
|
+
@path = File.join @root, @arch, @name
|
68
|
+
end
|
69
|
+
end
|
70
|
+
@categories = []
|
71
|
+
end
|
72
|
+
|
73
|
+
def description_file_path
|
74
|
+
File.join(@path, "description.markdown")
|
75
|
+
end
|
76
|
+
|
77
|
+
def valid?
|
78
|
+
raise "Cannot find the package #{@path}" unless Dir.exists? @path
|
79
|
+
return true
|
80
|
+
end
|
81
|
+
|
82
|
+
def exceptions_file
|
83
|
+
File.join(@path, Package::PackageFileNames[:exception])
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.publishable?(path)
|
87
|
+
exceptions_file = File.join(path, Package::PackageFileNames[:exception])
|
88
|
+
description_file = File.join(path, "description")
|
89
|
+
publishable = true
|
90
|
+
if File.exists?(exceptions_file) && ( File.exists?(description_file) || File.exists?(description_file+".markdown") )
|
91
|
+
File.open(exceptions_file).readlines.each do |line|
|
92
|
+
publishable = false if line =~ /^\s*noweb\s*$/
|
93
|
+
end
|
94
|
+
end
|
95
|
+
return publishable
|
96
|
+
end
|
97
|
+
|
98
|
+
def publishable?
|
99
|
+
Description.publishable?(path)
|
100
|
+
end
|
101
|
+
|
102
|
+
def remove_ptag_linebreaks!
|
103
|
+
# Find paragraph tag contents
|
104
|
+
results = []
|
105
|
+
@content.scan(/<p>(.*?)<\/p>/m) {|m| results << [m.first, Regexp.last_match.offset(0)[0]] }
|
106
|
+
newlines = []
|
107
|
+
# For each paragraph
|
108
|
+
results.each do |string, index|
|
109
|
+
# Find newlines and save their index
|
110
|
+
# index + 3 to accomodate '<p>'
|
111
|
+
string.scan(/\n/) {|m| newlines << index+3+Regexp.last_match.offset(0)[0] }
|
112
|
+
end
|
113
|
+
# Replace the newlines with spaces
|
114
|
+
newlines.each {|i| @content[i] = ' '}
|
115
|
+
end
|
116
|
+
|
117
|
+
def sanitize_content!
|
118
|
+
# Increment h tags by 2
|
119
|
+
@content.gsub!(/<h(\d)>/) {|m| "<h#{$1.to_i+1}>"}
|
120
|
+
@content.gsub!(/<\/h(\d)>/) {|m| "</h#{$1.to_i+1}>"}
|
121
|
+
|
122
|
+
# Don't use <code> inside a <pre>
|
123
|
+
@content.gsub!(/<pre(.*?)><code>/) {|m| "<pre#{$1}>"}
|
124
|
+
@content.gsub!(/<\/code><\/pre>/, "</pre>")
|
125
|
+
end
|
126
|
+
|
127
|
+
def add_system_info!
|
128
|
+
system_string = @machine_table.keys.reject{|m| @machine_table[m].empty?}.collect{|m| m.humanize}.sort.join(', ')
|
129
|
+
@content.sub!(/(<h\d>.*?<\/h\d>\n)/) do
|
130
|
+
"#{$&}\n<p>Systems: #{system_string}</p>\n"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def parse_categories
|
135
|
+
if @content =~ /Categor(y|ies):\s+(.*?)(<\/p>)$/i
|
136
|
+
@categories = $2.split(',')
|
137
|
+
@categories.map do |t|
|
138
|
+
t.downcase!
|
139
|
+
t.strip!
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def render_version_table
|
145
|
+
if Smithy::Config.descriptions_root
|
146
|
+
@machine_table = {}
|
147
|
+
web_arches = Smithy::Config.web_architecture_names.keys
|
148
|
+
web_arches.each do |a|
|
149
|
+
architecture_path = File.join( Smithy::Config.root, a, @name )
|
150
|
+
next unless Dir.exists? architecture_path
|
151
|
+
web_machine_name = Smithy::Config.web_architecture_names[a]
|
152
|
+
@machine_table[web_machine_name] = {}
|
153
|
+
Package.alternate_versions(architecture_path).each do |v|
|
154
|
+
@machine_table[web_machine_name][v] = Package.alternate_builds(File.join(architecture_path, v))
|
155
|
+
end
|
156
|
+
end
|
157
|
+
erb_file = File.join(@@smithy_bin_root, "/etc/templates/web/machine_version_table.html.erb")
|
158
|
+
|
159
|
+
else
|
160
|
+
@version_table = {}
|
161
|
+
universal = false
|
162
|
+
Package.alternate_versions(@path).each do |v|
|
163
|
+
@version_table[v] = Package.alternate_builds(File.join(@path, v))
|
164
|
+
universal = true if @version_table[v].select{|b| b =~ /(universal|binary)/}.size > 0
|
165
|
+
end
|
166
|
+
if universal
|
167
|
+
erb_file = File.join(@@smithy_bin_root, "/etc/templates/web/version_list.html.erb")
|
168
|
+
else
|
169
|
+
erb_file = File.join(@@smithy_bin_root, "/etc/templates/web/version_table.html.erb")
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
erb = ERB.new(File.read(erb_file), nil, "<>")
|
175
|
+
return erb.result(binding)
|
176
|
+
end
|
177
|
+
|
178
|
+
def deploy(args = {})
|
179
|
+
options = {:verbose => false, :noop => false}
|
180
|
+
options = {:verbose => true, :noop => true} if args[:dry_run]
|
181
|
+
|
182
|
+
www_arch = File.join(www_root, "/#{arch.downcase}")
|
183
|
+
www_arch = File.join(www_root, "all") if global_description
|
184
|
+
|
185
|
+
FileUtils.mkdir_p www_root, options unless Dir.exists? www_root
|
186
|
+
raise "Cannot access web-root directory #{www_root}" unless Dir.exists? www_root
|
187
|
+
FileUtils.mkdir_p www_arch, options unless Dir.exists? www_arch
|
188
|
+
raise "Cannot create web-root directory #{www_arch}" unless Dir.exists? www_arch
|
189
|
+
|
190
|
+
description_file = File.join(path, "description.markdown")
|
191
|
+
|
192
|
+
begin
|
193
|
+
if File.exist? description_file
|
194
|
+
f = File.open description_file
|
195
|
+
d = Kramdown::Document.new(f.read, :auto_ids => false)
|
196
|
+
@content = d.to_html
|
197
|
+
remove_ptag_linebreaks!
|
198
|
+
else
|
199
|
+
description_file = File.join(path, "description")
|
200
|
+
f = File.open description_file
|
201
|
+
@content = f.read
|
202
|
+
end
|
203
|
+
rescue => exception
|
204
|
+
raise "#{exception}\nCannot read #{description_file}"
|
205
|
+
end
|
206
|
+
|
207
|
+
@content += render_version_table
|
208
|
+
sanitize_content!
|
209
|
+
parse_categories
|
210
|
+
add_system_info! if global_description
|
211
|
+
|
212
|
+
description_output = File.join(www_arch, "/#{name.downcase}.html")
|
213
|
+
unless args[:dry_run]
|
214
|
+
d = File.open(description_output, "w+")
|
215
|
+
d.write(@content)
|
216
|
+
d.close
|
217
|
+
end
|
218
|
+
puts "updated ".rjust(12).bright + description_output
|
219
|
+
|
220
|
+
#TODO update category list
|
221
|
+
|
222
|
+
#notice_success "SUCCESS #{path} published to web"
|
223
|
+
end
|
224
|
+
|
225
|
+
def self.update_page(file = 'alphabetical', args = {})
|
226
|
+
root = Smithy::Config.root
|
227
|
+
arch = Smithy::Config.arch
|
228
|
+
if Smithy::Config.descriptions_root
|
229
|
+
www_arch = File.join(Smithy::Config.web_root, "all")
|
230
|
+
else
|
231
|
+
www_arch = File.join(Smithy::Config.web_root, arch)
|
232
|
+
end
|
233
|
+
|
234
|
+
unless args[:descriptions].nil?
|
235
|
+
@descriptions = args[:descriptions]
|
236
|
+
@descriptions.sort! {|x,y| x.name <=> y.name}
|
237
|
+
|
238
|
+
#tags.each do |tag|
|
239
|
+
#t = tag.gsub(/^ *| *$|"/, '').downcase
|
240
|
+
#@packages[@last_package][:tags] << t
|
241
|
+
#@tags[t] = [] unless @tags.has_key?(t)
|
242
|
+
#@tags[t] << name
|
243
|
+
#end
|
244
|
+
#@max_tag_count = 0
|
245
|
+
#@min_tag_count = 1000000
|
246
|
+
#@tags.each do |tag|
|
247
|
+
#@max_tag_count = tag[1].size if tag[1].size > @max_tag_count
|
248
|
+
#@min_tag_count = tag[1].size if tag[1].size < @min_tag_count
|
249
|
+
#end
|
250
|
+
end
|
251
|
+
|
252
|
+
@packages = Package.all_web :root => File.join(root,arch)
|
253
|
+
@packages.collect! do |p|
|
254
|
+
if Smithy::Config.descriptions_root
|
255
|
+
File.basename(p)
|
256
|
+
else
|
257
|
+
Package.normalize_name(:name => p, :root => root, :arch => arch)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
@packages.sort!
|
261
|
+
|
262
|
+
erb_file = File.join(@@smithy_bin_root, "/etc/templates/web/#{file}.html.erb")
|
263
|
+
output = File.join(www_arch, "/#{file}.html")
|
264
|
+
|
265
|
+
erb = ERB.new(File.read(erb_file), nil, "<>")
|
266
|
+
unless args[:dry_run]
|
267
|
+
File.open(output, "w+") do |f|
|
268
|
+
f.write erb.result(binding)
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
puts "updated ".rjust(12).bright + output
|
273
|
+
end
|
274
|
+
|
275
|
+
end
|
276
|
+
end
|