kosmos 0.0.1 → 0.0.2.pre.test2
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.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/README.md +109 -8
- data/bin/kosmos +6 -79
- data/kosmos.gemspec +4 -1
- data/lib/kosmos.rb +18 -4
- data/lib/kosmos/download_url.rb +4 -0
- data/lib/kosmos/git_adapter.rb +5 -3
- data/lib/kosmos/package.rb +41 -57
- data/lib/kosmos/package_attrs.rb +79 -0
- data/lib/kosmos/package_downloads.rb +80 -0
- data/lib/kosmos/packages/achievements.rb +8 -0
- data/lib/kosmos/packages/active_texture_management.rb +1 -1
- data/lib/kosmos/packages/advanced_animator.rb +9 -0
- data/lib/kosmos/packages/advanced_jet_engine.rb +9 -0
- data/lib/kosmos/packages/aerojet_kerbodyne.rb +9 -0
- data/lib/kosmos/packages/aies_aerospace.rb +9 -0
- data/lib/kosmos/packages/ambient_light_adjustment.rb +9 -0
- data/lib/kosmos/packages/amok_dynamics.rb +9 -0
- data/lib/kosmos/packages/antenna_range.rb +10 -0
- data/lib/kosmos/packages/asmis_eclss_mod.rb +9 -0
- data/lib/kosmos/packages/astronomers_visual_pack.rb +5 -0
- data/lib/kosmos/packages/atmospheric_sound_enhancement.rb +9 -0
- data/lib/kosmos/packages/auto_asparagus.rb +9 -0
- data/lib/kosmos/packages/aviation_lights.rb +9 -0
- data/lib/kosmos/packages/b9_aerospace_pack.rb +11 -0
- data/lib/kosmos/packages/b9_cockpit_extended.rb +9 -0
- data/lib/kosmos/packages/b9_iva_extension.rb +9 -0
- data/lib/kosmos/packages/baha_extraplanetary_parts.rb +9 -0
- data/lib/kosmos/packages/better_rove_mates.rb +9 -0
- data/lib/kosmos/packages/better_than_starting_manned.rb +9 -0
- data/lib/kosmos/packages/bob_catind_soviet_american_packs.rb +10 -0
- data/lib/kosmos/packages/bolt_on_mission_probe.rb +9 -0
- data/lib/kosmos/packages/cargo_transfer_bagsand_tanks.rb +9 -0
- data/lib/kosmos/packages/celestial_body_science_multiplier_editor.rb +9 -0
- data/lib/kosmos/packages/celss_greenhouse.rb +9 -0
- data/lib/kosmos/packages/chatterer.rb +9 -0
- data/lib/kosmos/packages/coffee_industries_modular_airliner.rb +9 -0
- data/lib/kosmos/packages/conics_configurator.rb +9 -0
- data/lib/kosmos/packages/connected_living_space_api.rb +9 -0
- data/lib/kosmos/packages/constellation_essentials.rb +9 -0
- data/lib/kosmos/packages/cross_feed_enabler.rb +9 -0
- data/lib/kosmos/packages/custom_asteroids.rb +9 -0
- data/lib/kosmos/packages/dang_it.rb +9 -0
- data/lib/kosmos/packages/dark_multi_player.rb +10 -0
- data/lib/kosmos/packages/davon_supply.rb +9 -0
- data/lib/kosmos/packages/davon_throttle_controlsystems.rb +9 -0
- data/lib/kosmos/packages/dmagic_orbital_science.rb +9 -0
- data/lib/kosmos/packages/down_under_aerospace.rb +9 -0
- data/lib/kosmos/packages/editor_extensions.rb +9 -0
- data/lib/kosmos/packages/editor_part_highlighter.rb +9 -0
- data/lib/kosmos/packages/engine_ignitor.rb +9 -0
- data/lib/kosmos/packages/fasa.rb +18 -0
- data/lib/kosmos/packages/flight_managerfor_reusable_stages.rb +9 -0
- data/lib/kosmos/packages/fus_tek_station_parts.rb +9 -0
- data/lib/kosmos/packages/fusebox.rb +9 -0
- data/lib/kosmos/packages/gimbal_auto_trim.rb +9 -0
- data/lib/kosmos/packages/ginger_corp_station_hubs.rb +9 -0
- data/lib/kosmos/packages/glow_strips.rb +9 -0
- data/lib/kosmos/packages/habitat_pack.rb +9 -0
- data/lib/kosmos/packages/hangar_extender.rb +9 -0
- data/lib/kosmos/packages/home_grown_rockets.rb +10 -0
- data/lib/kosmos/packages/hooligan_labs.rb +26 -0
- data/lib/kosmos/packages/hullcam_vds.rb +8 -0
- data/lib/kosmos/packages/kerbal_attachment_system.rb +1 -1
- data/lib/kosmos/packages/kerbal_engineer_redux.rb +11 -0
- data/lib/kosmos/packages/launch_countdown.rb +9 -0
- data/lib/kosmos/packages/remote_tech.rb +1 -11
- data/lib/kosmos/packages/void.rb +9 -0
- data/lib/kosmos/user_interface.rb +120 -0
- data/lib/kosmos/util.rb +5 -1
- data/lib/kosmos/version.rb +1 -1
- data/lib/kosmos/versioner.rb +3 -3
- data/lib/kosmos/web/app.rb +36 -0
- data/lib/kosmos/web/public/css/main.css +69 -0
- data/lib/kosmos/web/public/css/normalize.css +527 -0
- data/lib/kosmos/web/public/index.html +107 -0
- data/lib/kosmos/web/public/js/main.js +125 -0
- data/lib/kosmos/web/public/js/plugins.js +24 -0
- data/lib/kosmos/web/public/js/vendor/jquery-1.10.2.min.js +6 -0
- data/lib/kosmos/web/public/js/vendor/modernizr-2.6.2.min.js +4 -0
- data/lib/kosmos/web/public/js/vendor/underscore.js +5 -0
- data/package_generator.rb +197 -0
- data/spec/package_spec.rb +32 -1
- data/spec/spec_helper.rb +6 -0
- data/spec/versioner_spec.rb +2 -21
- metadata +113 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8000615d26f3885d770b8ca1dfd6da6ba94f5a25
|
|
4
|
+
data.tar.gz: dfb4bccece00fc1ead2a60c80b56d46b5c365474
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9d47f76253588612ce48c3bc45a0d42c14f44ac21615c0dadf4b2716d665a8f8b34441dc3e40e0a317fb00a35e5b0b78936ac9d5edbea1ce0f20e0d3fe94f4ed
|
|
7
|
+
data.tar.gz: 082ac15a0c4dcb4884975b8013934a70b9c016dce178f31f05eac7216cadda8e0fee874221fa39e228551be61108c06d29c4dc53c534de0f5167f864bb23a45a
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,21 +1,122 @@
|
|
|
1
1
|
# Kosmos
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A simple package manager for Kerbal Space Program. Install any mod by simply
|
|
4
|
+
saying `kosmos install name-of-mod`. For example, install Mechjeb by issuing the
|
|
5
|
+
command:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
kosmos install mechjeb
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
*Note:* Kosmos is still in active development, and is not meant for serious use
|
|
12
|
+
unless you're brave or stupid.
|
|
4
13
|
|
|
5
14
|
## Installation
|
|
6
15
|
|
|
7
|
-
|
|
16
|
+
*Note:* Kosmos is indeed not super easy to install if you're not used to
|
|
17
|
+
installing things by hand. When Kosmos is ready for "production" use, one-click
|
|
18
|
+
installers will be added.
|
|
19
|
+
|
|
20
|
+
Kosmos has three dependencies, all of which are currently expected to be on your
|
|
21
|
+
`PATH`. They are:
|
|
22
|
+
|
|
23
|
+
* Ruby version 2.0+,
|
|
24
|
+
* Git, and
|
|
25
|
+
* PhantomJS
|
|
26
|
+
|
|
27
|
+
### Installing Ruby
|
|
28
|
+
|
|
29
|
+
Kosmos has been tested on Ruby 2.0.0, and it is recommended that you use Ruby
|
|
30
|
+
2.0.0 or greater. Check your version of Ruby using:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
ruby -v
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
If you need to update Ruby, use one of the following tools:
|
|
37
|
+
|
|
38
|
+
* *Mac*: [RVM](https://rvm.io/) is the recommended tool for the job, but not
|
|
39
|
+
everyone is comfortable with it. If you prefer, you may use
|
|
40
|
+
[Homebrew](http://brew.sh) and install Ruby 2.0 with: `brew install ruby20`.
|
|
41
|
+
* *Windows*: Install Ruby 2.0+ with [Ruby Installer](http://rubyinstaller.org/).
|
|
42
|
+
* *Linux*: Use [RVM](https://rvm.io/).
|
|
43
|
+
|
|
44
|
+
Verify that you're running Ruby 2.0+ by running:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
ruby -v
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Installing Git
|
|
51
|
+
|
|
52
|
+
* *Mac*: Use the [Mac Git installer][mac-git], or use Homebrew. Remember to
|
|
53
|
+
check any box asking to add Git to your path.
|
|
54
|
+
* *Windows*: Install Git using [this installer][win-git]. Remember to check any
|
|
55
|
+
box asking to add Git to your path.
|
|
56
|
+
* *Linux*: Run the command:
|
|
57
|
+
* `yum install git-core` on Fedora, or
|
|
58
|
+
* `apt-get install git` on Debian / Ubuntu.
|
|
59
|
+
|
|
60
|
+
Verify that Git is installed properly by running:
|
|
8
61
|
|
|
9
|
-
|
|
62
|
+
```sh
|
|
63
|
+
git --version
|
|
64
|
+
```
|
|
10
65
|
|
|
11
|
-
|
|
66
|
+
### Installing PhantomJS
|
|
12
67
|
|
|
13
|
-
|
|
68
|
+
Install PhantomJS [here][phantom]. You will need to add PhantomJS to your path
|
|
69
|
+
manually. Verify that PhantomJS is installed properly by running:
|
|
14
70
|
|
|
15
|
-
|
|
71
|
+
```sh
|
|
72
|
+
phantomjs --version
|
|
73
|
+
```
|
|
16
74
|
|
|
17
|
-
|
|
75
|
+
### Installing Kosmos itself
|
|
76
|
+
|
|
77
|
+
Just run:
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
gem install kosmos
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
And it'll be ready to go.
|
|
18
84
|
|
|
19
85
|
## Usage
|
|
20
86
|
|
|
21
|
-
|
|
87
|
+
Install any command by running:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
kosmos install name-of-the-mod-goes-here
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Uninstall any mod by running:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
kosmos uninstall name-of-the-mod-goes-here
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
You can install multiple mods by separating the names by spaces:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
kosmos install mod-a mod-b mod-c
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
You can ask Kosmos what mods it's installed by running:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
kosmos list
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### A complete example
|
|
112
|
+
|
|
113
|
+
Almost all of the mods Scott Manley uses in Interstellar Quest are available
|
|
114
|
+
through Kosmos. You can install them all by running:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
kosmos install active-texture-management b9 b9-fix b9-modzero kerbal-alarm-clock kw-rocketry ksp-interstellar ferram deadly-reentry kethane infernal-robotics distant-object-enhancement better-atmospheres remote-tech-2 remote-tech-2-fixpack tac-life-support enhanced-navball kerbal-joint-reinforcement docking-port-alignment-indicator safe-chute kerbal-attachment-system real-chute tac-fuel-balancer
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
[mac-git]: http://sourceforge.net/projects/git-osx-installer/
|
|
121
|
+
[win-git]: http://git-scm.com/download/win
|
|
122
|
+
[phantom]: http://phantomjs.org/download.html
|
data/bin/kosmos
CHANGED
|
@@ -6,88 +6,15 @@ Kosmos.configure do |config|
|
|
|
6
6
|
config.verbose = true
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
def pretty_print_list(list)
|
|
10
|
-
list.each { |value| puts " * #{value}" }
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def load_packages(package_names)
|
|
14
|
-
packages = Hash[package_names.map do |name|
|
|
15
|
-
[name, Kosmos::Package.find(name)]
|
|
16
|
-
end]
|
|
17
|
-
|
|
18
|
-
unknown_packages = packages.select { |_, package| package.nil? }
|
|
19
|
-
|
|
20
|
-
if unknown_packages.any?
|
|
21
|
-
puts "Error: Kosmos couldn't find any packages with the following names:"
|
|
22
|
-
pretty_print_list(unknown_packages.keys)
|
|
23
|
-
exit
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
packages.values
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def check_installed_packages(ksp_path, packages)
|
|
30
|
-
installed_titles = Kosmos::Versioner.installed_packages(ksp_path)
|
|
31
|
-
|
|
32
|
-
installed_packages = packages.select do |package|
|
|
33
|
-
installed_titles.include?(package.title)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
if installed_packages.any?
|
|
37
|
-
puts "Error: You have already installed the following packages using Kosmos:"
|
|
38
|
-
pretty_print_list(installed_packages.map(&:title))
|
|
39
|
-
exit
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
9
|
case ARGV.shift
|
|
44
10
|
when 'init'
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
puts "Initializing Kosmos into #{ksp_path} (This will take a sec) ..."
|
|
48
|
-
|
|
49
|
-
Kosmos::Versioner.init_repo(ksp_path)
|
|
50
|
-
Kosmos.save_ksp_path(ksp_path)
|
|
51
|
-
|
|
52
|
-
puts "Done! You're ready to begin installing mods."
|
|
53
|
-
puts
|
|
54
|
-
puts "Install your first mod by running the command:"
|
|
55
|
-
puts " kosmos install [name-of-the-mod]"
|
|
56
|
-
puts
|
|
57
|
-
|
|
11
|
+
Kosmos::UserInterface.init(ARGV)
|
|
58
12
|
when 'install'
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
packages = load_packages(ARGV)
|
|
62
|
-
check_installed_packages(ksp_path, packages)
|
|
63
|
-
|
|
64
|
-
puts "Kosmos is about to install #{packages.count} package(s):"
|
|
65
|
-
pretty_print_list(packages.map(&:title))
|
|
66
|
-
|
|
67
|
-
packages.each do |package|
|
|
68
|
-
puts "Installing package #{package.title} ..."
|
|
69
|
-
package.new.install!(ksp_path)
|
|
70
|
-
puts "Done!"
|
|
71
|
-
end
|
|
72
|
-
|
|
13
|
+
Kosmos::UserInterface.install(ARGV)
|
|
73
14
|
when 'uninstall'
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
package_name = ARGV.shift
|
|
77
|
-
package = Kosmos::Package.find(package_name)
|
|
78
|
-
|
|
79
|
-
if package
|
|
80
|
-
puts "Preparing to uninstall #{package.title} ..."
|
|
81
|
-
Kosmos::Versioner.uninstall_package(ksp_path, package)
|
|
82
|
-
puts "Done! Just uninstalled: #{package.title}."
|
|
83
|
-
else
|
|
84
|
-
puts "Error: Kosmos couldn't find any packages with the name #{package_name.inspect}."
|
|
85
|
-
end
|
|
86
|
-
|
|
15
|
+
Kosmos::UserInterface.uninstall(ARGV)
|
|
87
16
|
when 'list'
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
puts "You have installed #{packages.length} mod(s) using Kosmos:"
|
|
92
|
-
pretty_print_list(packages)
|
|
17
|
+
Kosmos::UserInterface.list(ARGV)
|
|
18
|
+
when 'server'
|
|
19
|
+
Kosmos::UserInterface.server(ARGV)
|
|
93
20
|
end
|
data/kosmos.gemspec
CHANGED
|
@@ -17,8 +17,11 @@ Gem::Specification.new do |spec|
|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
18
18
|
spec.require_paths = ["lib"]
|
|
19
19
|
|
|
20
|
+
spec.add_dependency "json_pure"
|
|
20
21
|
spec.add_dependency "rubyzip"
|
|
21
|
-
spec.add_dependency "rugged"
|
|
22
22
|
spec.add_dependency "httparty"
|
|
23
23
|
spec.add_dependency "nokogiri"
|
|
24
|
+
spec.add_dependency "damerau-levenshtein"
|
|
25
|
+
spec.add_dependency "sinatra"
|
|
26
|
+
spec.add_dependency "thin"
|
|
24
27
|
end
|
data/lib/kosmos.rb
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
require 'kosmos/package_dsl'
|
|
2
|
+
require 'kosmos/package_attrs'
|
|
3
|
+
require 'kosmos/package_downloads'
|
|
2
4
|
require 'kosmos/package'
|
|
3
5
|
require 'kosmos/versioner'
|
|
4
6
|
require 'kosmos/git_adapter'
|
|
5
7
|
require 'kosmos/download_url'
|
|
8
|
+
require 'kosmos/user_interface'
|
|
9
|
+
require 'kosmos/web/app'
|
|
6
10
|
require 'kosmos/util'
|
|
7
11
|
require 'kosmos/version'
|
|
8
12
|
|
|
9
|
-
require 'json'
|
|
13
|
+
require 'json/pure'
|
|
10
14
|
|
|
11
15
|
module Kosmos
|
|
12
16
|
class << self
|
|
@@ -26,16 +30,25 @@ module Kosmos
|
|
|
26
30
|
read_config[:ksp_path]
|
|
27
31
|
end
|
|
28
32
|
|
|
33
|
+
def cache_dir
|
|
34
|
+
read_config[:cache_dir]
|
|
35
|
+
end
|
|
36
|
+
|
|
29
37
|
private
|
|
30
38
|
|
|
31
39
|
def write_config(opts)
|
|
32
|
-
File.open(config_path, "
|
|
40
|
+
File.open(config_path, "r+") do |file|
|
|
33
41
|
file.write JSON.pretty_generate(read_config.merge(opts))
|
|
34
42
|
end
|
|
35
43
|
end
|
|
36
44
|
|
|
37
45
|
def read_config
|
|
38
|
-
|
|
46
|
+
config = File.read(config_path)
|
|
47
|
+
if config.empty?
|
|
48
|
+
{}
|
|
49
|
+
else
|
|
50
|
+
JSON.parse(config, symbolize_names: true)
|
|
51
|
+
end
|
|
39
52
|
end
|
|
40
53
|
|
|
41
54
|
def config_path
|
|
@@ -44,11 +57,12 @@ module Kosmos
|
|
|
44
57
|
end
|
|
45
58
|
|
|
46
59
|
class Configuration
|
|
47
|
-
attr_accessor :verbose, :post_processors
|
|
60
|
+
attr_accessor :verbose, :post_processors, :output_method
|
|
48
61
|
|
|
49
62
|
def initialize
|
|
50
63
|
@verbose = false
|
|
51
64
|
@post_processors = [Kosmos::PostProcessors::ModuleManagerResolver]
|
|
65
|
+
@output_method = Proc.new { |str| puts str }
|
|
52
66
|
end
|
|
53
67
|
end
|
|
54
68
|
end
|
data/lib/kosmos/download_url.rb
CHANGED
data/lib/kosmos/git_adapter.rb
CHANGED
|
@@ -6,6 +6,10 @@ module Kosmos
|
|
|
6
6
|
def init_repo(path)
|
|
7
7
|
Dir.chdir(path) do
|
|
8
8
|
`git init`
|
|
9
|
+
|
|
10
|
+
File.open('.gitignore', 'w') do |file|
|
|
11
|
+
file.write "!*\n"
|
|
12
|
+
end
|
|
9
13
|
end
|
|
10
14
|
end
|
|
11
15
|
|
|
@@ -16,11 +20,9 @@ module Kosmos
|
|
|
16
20
|
end
|
|
17
21
|
end
|
|
18
22
|
|
|
19
|
-
def revert_commit(repo_path, commit
|
|
23
|
+
def revert_commit(repo_path, commit)
|
|
20
24
|
Dir.chdir(repo_path) do
|
|
21
25
|
`git revert --no-commit #{commit.sha}`
|
|
22
|
-
`git add -A -f`
|
|
23
|
-
`git commit --allow-empty -m #{commit_message.shellescape}`
|
|
24
26
|
end
|
|
25
27
|
end
|
|
26
28
|
|
data/lib/kosmos/package.rb
CHANGED
|
@@ -2,50 +2,46 @@ require 'pathname'
|
|
|
2
2
|
require 'httparty'
|
|
3
3
|
require 'zip'
|
|
4
4
|
require 'tmpdir'
|
|
5
|
+
require 'damerau-levenshtein'
|
|
5
6
|
|
|
6
7
|
module Kosmos
|
|
7
8
|
class Package
|
|
8
9
|
include PackageDsl
|
|
10
|
+
include PackageAttrs
|
|
9
11
|
|
|
10
12
|
attr_reader :ksp_path, :download_dir
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
instance_variable_set("@#{param}", value)
|
|
16
|
-
else
|
|
17
|
-
instance_variable_get("@#{param}")
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Internal version of the `install` method, which saves before actually
|
|
23
|
-
# performing the installation.
|
|
14
|
+
# Internal version of the `install` method, which handles procedures commong
|
|
15
|
+
# to all packages, such as saving work before and after installation, as
|
|
16
|
+
# well as downloading and unzipping packages and running post-processors.
|
|
24
17
|
def install!(ksp_path)
|
|
25
18
|
@ksp_path = ksp_path
|
|
19
|
+
|
|
20
|
+
install_prerequisites!
|
|
21
|
+
|
|
26
22
|
@download_dir = self.class.unzip!
|
|
27
23
|
|
|
28
24
|
Util.log "Saving your work before installing ..."
|
|
29
|
-
Versioner.mark_preinstall(ksp_path, self
|
|
25
|
+
Versioner.mark_preinstall(ksp_path, self)
|
|
30
26
|
|
|
31
|
-
Util.log "Installing #{
|
|
27
|
+
Util.log "Installing #{title} ..."
|
|
32
28
|
install
|
|
33
29
|
|
|
34
30
|
Util.log "Cleaning up ..."
|
|
35
|
-
|
|
31
|
+
Util.run_post_processors!(ksp_path)
|
|
36
32
|
|
|
37
|
-
Versioner.mark_postinstall(ksp_path, self
|
|
33
|
+
Versioner.mark_postinstall(ksp_path, self)
|
|
34
|
+
|
|
35
|
+
install_postrequisites!
|
|
38
36
|
end
|
|
39
37
|
|
|
40
38
|
class << self
|
|
41
|
-
def
|
|
42
|
-
|
|
39
|
+
def unzip!
|
|
40
|
+
PackageDownloads.download_and_unzip_package(self)
|
|
41
|
+
end
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
else
|
|
47
|
-
@aliases
|
|
48
|
-
end
|
|
43
|
+
def download!
|
|
44
|
+
PackageDownloads.download_package(self)
|
|
49
45
|
end
|
|
50
46
|
|
|
51
47
|
# a callback for when a subclass of this class is created
|
|
@@ -57,52 +53,40 @@ module Kosmos
|
|
|
57
53
|
name.downcase.gsub(' ', "-")
|
|
58
54
|
end
|
|
59
55
|
|
|
56
|
+
def normalized_title
|
|
57
|
+
normalize_for_find(title)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
60
|
def find(name)
|
|
61
61
|
@@packages.find do |package|
|
|
62
|
-
|
|
62
|
+
package.names.any? do |candidate_name|
|
|
63
63
|
normalize_for_find(candidate_name) == normalize_for_find(name)
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
def
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
output_path = Pathname.new(download_file.path).parent.to_s
|
|
74
|
-
|
|
75
|
-
Zip::File.open(download_file.path) do |zip_file|
|
|
76
|
-
zip_file.each do |entry|
|
|
77
|
-
destination = File.join(output_path, entry.name)
|
|
78
|
-
parent_dir = File.expand_path('..', destination)
|
|
79
|
-
|
|
80
|
-
FileUtils.mkdir_p(parent_dir) unless File.exists?(parent_dir)
|
|
81
|
-
|
|
82
|
-
entry.extract(destination)
|
|
83
|
-
end
|
|
68
|
+
def search(name)
|
|
69
|
+
@@packages.min_by do |package|
|
|
70
|
+
package.names.map do |candidate_name|
|
|
71
|
+
DamerauLevenshtein.distance(name, candidate_name)
|
|
72
|
+
end.min
|
|
84
73
|
end
|
|
85
|
-
|
|
86
|
-
File.delete(File.absolute_path(download_file))
|
|
87
|
-
|
|
88
|
-
output_path
|
|
89
74
|
end
|
|
75
|
+
end
|
|
90
76
|
|
|
91
|
-
|
|
92
|
-
Util.log "The package is found at #{url}. Finding the download URL ..."
|
|
93
|
-
download_url = DownloadUrl.new(url).resolve_download_url
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
Util.log "Found it. Downloading from #{download_url} ..."
|
|
97
|
-
downloaded_file = HTTParty.get(download_url)
|
|
98
|
-
|
|
99
|
-
tmpdir = Dir.mktmpdir
|
|
77
|
+
private
|
|
100
78
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
79
|
+
def install_prerequisites!
|
|
80
|
+
resolve_prerequisites.each do |package|
|
|
81
|
+
Util.log "#{title} has prerequisite #{package.title}."
|
|
82
|
+
package.new.install!(ksp_path)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
104
85
|
|
|
105
|
-
|
|
86
|
+
def install_postrequisites!
|
|
87
|
+
resolve_postrequisites.each do |package|
|
|
88
|
+
Util.log "#{title} has postrequisite #{package.title}."
|
|
89
|
+
package.new.install!(ksp_path)
|
|
106
90
|
end
|
|
107
91
|
end
|
|
108
92
|
|