spade-packager 0.1.0
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/.gitignore +2 -0
- data/.gitmodules +6 -0
- data/bin/spadepkg +8 -0
- data/lib/libgems_ext.rb +8 -0
- data/lib/libgems_ext/config_file.rb +33 -0
- data/lib/libgems_ext/dependency_installer.rb +150 -0
- data/lib/libgems_ext/installer.rb +39 -0
- data/lib/libgems_ext/libgems.rb +39 -0
- data/lib/libgems_ext/spec_fetcher.rb +11 -0
- data/lib/spade-packager.rb +1 -0
- data/lib/spade/packager.rb +18 -0
- data/lib/spade/packager/cli.rb +9 -0
- data/lib/spade/packager/cli/base.rb +196 -0
- data/lib/spade/packager/cli/owner.rb +46 -0
- data/lib/spade/packager/cli/project_generator.rb +117 -0
- data/lib/spade/packager/credentials.rb +38 -0
- data/lib/spade/packager/local.rb +50 -0
- data/lib/spade/packager/package.rb +160 -0
- data/lib/spade/packager/remote.rb +98 -0
- data/lib/spade/packager/repository.rb +18 -0
- data/lib/spade/packager/version.rb +5 -0
- data/packages/coffee-script/.gitignore +8 -0
- data/packages/coffee-script/.npmignore +11 -0
- data/packages/coffee-script/Cakefile +229 -0
- data/packages/coffee-script/LICENSE +22 -0
- data/packages/coffee-script/README +47 -0
- data/packages/coffee-script/Rakefile +78 -0
- data/packages/coffee-script/bin/cake +7 -0
- data/packages/coffee-script/bin/coffee +7 -0
- data/packages/coffee-script/documentation/coffee/aliases.coffee +11 -0
- data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/block_comment.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +9 -0
- data/packages/coffee-script/documentation/coffee/classes.coffee +25 -0
- data/packages/coffee-script/documentation/coffee/comparisons.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/conditionals.coffee +13 -0
- data/packages/coffee-script/documentation/coffee/default_args.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/do.coffee +4 -0
- data/packages/coffee-script/documentation/coffee/embedded.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/existence.coffee +10 -0
- data/packages/coffee-script/documentation/coffee/expressions.coffee +9 -0
- data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/expressions_try.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/functions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/heredocs.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/heregexes.coffee +11 -0
- data/packages/coffee-script/documentation/coffee/interpolation.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +4 -0
- data/packages/coffee-script/documentation/coffee/object_extraction.coffee +13 -0
- data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +19 -0
- data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/overview.coffee +28 -0
- data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/prototypes.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/scope.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/slices.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/soaks.coffee +1 -0
- data/packages/coffee-script/documentation/coffee/splats.coffee +27 -0
- data/packages/coffee-script/documentation/coffee/splices.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/strings.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/switch.coffee +10 -0
- data/packages/coffee-script/documentation/coffee/try.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/while.coffee +10 -0
- data/packages/coffee-script/documentation/css/docs.css +374 -0
- data/packages/coffee-script/documentation/css/idle.css +64 -0
- data/packages/coffee-script/documentation/docs/browser.html +25 -0
- data/packages/coffee-script/documentation/docs/cake.html +43 -0
- data/packages/coffee-script/documentation/docs/coffee-script.html +51 -0
- data/packages/coffee-script/documentation/docs/command.html +161 -0
- data/packages/coffee-script/documentation/docs/docco.css +186 -0
- data/packages/coffee-script/documentation/docs/grammar.html +399 -0
- data/packages/coffee-script/documentation/docs/helpers.html +31 -0
- data/packages/coffee-script/documentation/docs/index.html +3 -0
- data/packages/coffee-script/documentation/docs/lexer.html +490 -0
- data/packages/coffee-script/documentation/docs/nodes.html +1338 -0
- data/packages/coffee-script/documentation/docs/optparse.html +78 -0
- data/packages/coffee-script/documentation/docs/repl.html +24 -0
- data/packages/coffee-script/documentation/docs/rewriter.html +251 -0
- data/packages/coffee-script/documentation/docs/scope.html +54 -0
- data/packages/coffee-script/documentation/docs/underscore.html +295 -0
- data/packages/coffee-script/documentation/images/background.png +0 -0
- data/packages/coffee-script/documentation/images/banding.png +0 -0
- data/packages/coffee-script/documentation/images/button_bg.png +0 -0
- data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
- data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
- data/packages/coffee-script/documentation/images/favicon.ico +0 -0
- data/packages/coffee-script/documentation/images/logo.png +0 -0
- data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
- data/packages/coffee-script/documentation/index.html.erb +1607 -0
- data/packages/coffee-script/documentation/js/aliases.js +17 -0
- data/packages/coffee-script/documentation/js/array_comprehensions.js +6 -0
- data/packages/coffee-script/documentation/js/block_comment.js +4 -0
- data/packages/coffee-script/documentation/js/cake_tasks.js +10 -0
- data/packages/coffee-script/documentation/js/classes.js +44 -0
- data/packages/coffee-script/documentation/js/comparisons.js +3 -0
- data/packages/coffee-script/documentation/js/conditionals.js +12 -0
- data/packages/coffee-script/documentation/js/default_args.js +7 -0
- data/packages/coffee-script/documentation/js/do.js +10 -0
- data/packages/coffee-script/documentation/js/embedded.js +4 -0
- data/packages/coffee-script/documentation/js/existence.js +6 -0
- data/packages/coffee-script/documentation/js/expressions.js +15 -0
- data/packages/coffee-script/documentation/js/expressions_assignment.js +2 -0
- data/packages/coffee-script/documentation/js/expressions_comprehension.js +9 -0
- data/packages/coffee-script/documentation/js/expressions_try.js +7 -0
- data/packages/coffee-script/documentation/js/fat_arrow.js +9 -0
- data/packages/coffee-script/documentation/js/functions.js +7 -0
- data/packages/coffee-script/documentation/js/heredocs.js +2 -0
- data/packages/coffee-script/documentation/js/heregexes.js +2 -0
- data/packages/coffee-script/documentation/js/interpolation.js +4 -0
- data/packages/coffee-script/documentation/js/multiple_return_values.js +5 -0
- data/packages/coffee-script/documentation/js/object_comprehensions.js +15 -0
- data/packages/coffee-script/documentation/js/object_extraction.js +10 -0
- data/packages/coffee-script/documentation/js/objects_and_arrays.js +17 -0
- data/packages/coffee-script/documentation/js/objects_reserved.js +4 -0
- data/packages/coffee-script/documentation/js/overview.js +35 -0
- data/packages/coffee-script/documentation/js/parallel_assignment.js +4 -0
- data/packages/coffee-script/documentation/js/patterns_and_splats.js +4 -0
- data/packages/coffee-script/documentation/js/prototypes.js +3 -0
- data/packages/coffee-script/documentation/js/range_comprehensions.js +9 -0
- data/packages/coffee-script/documentation/js/scope.js +8 -0
- data/packages/coffee-script/documentation/js/slices.js +4 -0
- data/packages/coffee-script/documentation/js/soaks.js +2 -0
- data/packages/coffee-script/documentation/js/splats.js +15 -0
- data/packages/coffee-script/documentation/js/splices.js +3 -0
- data/packages/coffee-script/documentation/js/strings.js +2 -0
- data/packages/coffee-script/documentation/js/switch.js +23 -0
- data/packages/coffee-script/documentation/js/try.js +8 -0
- data/packages/coffee-script/documentation/js/while.js +18 -0
- data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +6240 -0
- data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +16 -0
- data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +13 -0
- data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +34 -0
- data/packages/coffee-script/examples/blocks.coffee +54 -0
- data/packages/coffee-script/examples/code.coffee +167 -0
- data/packages/coffee-script/examples/computer_science/README +4 -0
- data/packages/coffee-script/examples/computer_science/binary_search.coffee +25 -0
- data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +11 -0
- data/packages/coffee-script/examples/computer_science/linked_list.coffee +108 -0
- data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +36 -0
- data/packages/coffee-script/examples/computer_science/merge_sort.coffee +19 -0
- data/packages/coffee-script/examples/computer_science/selection_sort.coffee +23 -0
- data/packages/coffee-script/examples/poignant.coffee +181 -0
- data/packages/coffee-script/examples/potion.coffee +206 -0
- data/packages/coffee-script/examples/underscore.coffee +682 -0
- data/packages/coffee-script/examples/web_server.coffee +12 -0
- data/packages/coffee-script/extras/EXTRAS +7 -0
- data/packages/coffee-script/extras/coffee-script.js +8 -0
- data/packages/coffee-script/extras/jsl.conf +44 -0
- data/packages/coffee-script/index.html +2515 -0
- data/packages/coffee-script/lib/browser.js +52 -0
- data/packages/coffee-script/lib/cake.js +76 -0
- data/packages/coffee-script/lib/coffee-script.js +82 -0
- data/packages/coffee-script/lib/command.js +263 -0
- data/packages/coffee-script/lib/grammar.js +581 -0
- data/packages/coffee-script/lib/helpers.js +66 -0
- data/packages/coffee-script/lib/index.js +8 -0
- data/packages/coffee-script/lib/lexer.js +633 -0
- data/packages/coffee-script/lib/nodes.js +2165 -0
- data/packages/coffee-script/lib/optparse.js +111 -0
- data/packages/coffee-script/lib/parser.js +649 -0
- data/packages/coffee-script/lib/repl.js +42 -0
- data/packages/coffee-script/lib/rewriter.js +353 -0
- data/packages/coffee-script/lib/scope.js +120 -0
- data/packages/coffee-script/lib/spade-format.js +45 -0
- data/packages/coffee-script/package.json +26 -0
- data/packages/coffee-script/src/browser.coffee +43 -0
- data/packages/coffee-script/src/cake.coffee +69 -0
- data/packages/coffee-script/src/coffee-script.coffee +92 -0
- data/packages/coffee-script/src/command.coffee +214 -0
- data/packages/coffee-script/src/grammar.coffee +590 -0
- data/packages/coffee-script/src/helpers.coffee +56 -0
- data/packages/coffee-script/src/index.coffee +2 -0
- data/packages/coffee-script/src/lexer.coffee +653 -0
- data/packages/coffee-script/src/nodes.coffee +1754 -0
- data/packages/coffee-script/src/optparse.coffee +99 -0
- data/packages/coffee-script/src/repl.coffee +42 -0
- data/packages/coffee-script/src/rewriter.coffee +326 -0
- data/packages/coffee-script/src/scope.coffee +94 -0
- data/packages/coffee-script/test/arguments.coffee +127 -0
- data/packages/coffee-script/test/assignment.coffee +98 -0
- data/packages/coffee-script/test/break.coffee +18 -0
- data/packages/coffee-script/test/comments.coffee +201 -0
- data/packages/coffee-script/test/conditionals.coffee +181 -0
- data/packages/coffee-script/test/exception_handling.coffee +90 -0
- data/packages/coffee-script/test/helpers.coffee +96 -0
- data/packages/coffee-script/test/importing.coffee +18 -0
- data/packages/coffee-script/test/operators.coffee +225 -0
- data/packages/coffee-script/test/ranges_slices_and_splices.coffee +186 -0
- data/packages/coffee-script/test/regular_expressions.coffee +56 -0
- data/packages/coffee-script/test/test.html +123 -0
- data/packages/coffee-script/test/test_chaining.coffee +77 -0
- data/packages/coffee-script/test/test_classes.coffee +372 -0
- data/packages/coffee-script/test/test_compilation.coffee +26 -0
- data/packages/coffee-script/test/test_comprehensions.coffee +318 -0
- data/packages/coffee-script/test/test_existence.coffee +165 -0
- data/packages/coffee-script/test/test_functions.coffee +379 -0
- data/packages/coffee-script/test/test_heredocs.coffee +111 -0
- data/packages/coffee-script/test/test_literals.coffee +270 -0
- data/packages/coffee-script/test/test_option_parser.coffee +27 -0
- data/packages/coffee-script/test/test_pattern_matching.coffee +162 -0
- data/packages/coffee-script/test/test_returns.coffee +63 -0
- data/packages/coffee-script/test/test_splats.coffee +102 -0
- data/packages/coffee-script/test/test_strings.coffee +118 -0
- data/packages/coffee-script/test/test_switch.coffee +103 -0
- data/packages/coffee-script/test/test_while.coffee +71 -0
- data/packages/ivory/LICENSE.txt +1 -0
- data/packages/ivory/README.md +19 -0
- data/packages/ivory/lib/buffer.js +111 -0
- data/packages/ivory/lib/events.js +137 -0
- data/packages/ivory/lib/fs.js +266 -0
- data/packages/ivory/lib/main.js +13 -0
- data/packages/ivory/lib/path.js +158 -0
- data/packages/ivory/lib/ruby/buffer.rb +145 -0
- data/packages/ivory/lib/ruby/constants.rb +585 -0
- data/packages/ivory/lib/ruby/events.rb +32 -0
- data/packages/ivory/lib/ruby/fs.rb +245 -0
- data/packages/ivory/lib/ruby/process.rb +28 -0
- data/packages/ivory/lib/stream.js +115 -0
- data/packages/ivory/lib/util.js +414 -0
- data/packages/ivory/package.json +11 -0
- data/packages/ivory/spade-boot.js +78 -0
- data/packages/jquery/main.js +7179 -0
- data/packages/jquery/package.json +10 -0
- data/packages/json/lib/main.js +14 -0
- data/packages/json/package.json +8 -0
- data/packages/lproj/README.md +77 -0
- data/packages/lproj/examples/demo-app/en.lproj/localized.strings +2 -0
- data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +3 -0
- data/packages/lproj/examples/demo-app/index.html +8 -0
- data/packages/lproj/examples/demo-app/lib/main.js +7 -0
- data/packages/lproj/examples/demo-app/package.json +9 -0
- data/packages/lproj/lib/main.js +78 -0
- data/packages/lproj/lib/strings-format.js +6 -0
- data/packages/lproj/package.json +9 -0
- data/packages/optparse/README.md +161 -0
- data/packages/optparse/TODO +1 -0
- data/packages/optparse/examples/browser-test.html +75 -0
- data/packages/optparse/examples/nodejs-test.js +90 -0
- data/packages/optparse/lib/optparse.js +309 -0
- data/packages/optparse/package.json +13 -0
- data/packages/optparse/seed.yml +5 -0
- data/packages/text/lib/main.js +8 -0
- data/packages/text/package.json +9 -0
- data/packages/web-file/README.md +7 -0
- data/packages/web-file/lib/errors.js +32 -0
- data/packages/web-file/lib/file-reader.js +10 -0
- data/packages/web-file/lib/file-system.js +234 -0
- data/packages/web-file/lib/file-writer.js +10 -0
- data/packages/web-file/lib/file.js +9 -0
- data/packages/web-file/lib/main.js +34 -0
- data/packages/web-file/lib/platform.js +25 -0
- data/packages/web-file/lib/ruby/file.rb +252 -0
- data/packages/web-file/lib/ruby/file_reader.rb +69 -0
- data/packages/web-file/lib/ruby/file_system.rb +134 -0
- data/packages/web-file/lib/ruby/file_writer.rb +78 -0
- data/packages/web-file/package.json +12 -0
- data/packages/web-typed-array/README.md +7 -0
- data/packages/web-typed-array/lib/array-buffer-view.js +9 -0
- data/packages/web-typed-array/lib/array-buffer.js +7 -0
- data/packages/web-typed-array/lib/main.js +33 -0
- data/packages/web-typed-array/lib/platform.js +20 -0
- data/packages/web-typed-array/lib/ruby/array_buffer.rb +31 -0
- data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +130 -0
- data/packages/web-typed-array/lib/ruby/typed_array.rb +133 -0
- data/packages/web-typed-array/lib/typed-array.js +26 -0
- data/packages/web-typed-array/package.json +9 -0
- data/spade-packager.gemspec +39 -0
- data/spec/cli/build_spec.rb +57 -0
- data/spec/cli/install_spec.rb +119 -0
- data/spec/cli/installed_spec.rb +55 -0
- data/spec/cli/list_spec.rb +74 -0
- data/spec/cli/login_spec.rb +75 -0
- data/spec/cli/new_spec.rb +5 -0
- data/spec/cli/owner_spec.rb +114 -0
- data/spec/cli/push_spec.rb +73 -0
- data/spec/cli/uninstall_spec.rb +58 -0
- data/spec/cli/unpack_spec.rb +72 -0
- data/spec/cli/unyank_spec.rb +73 -0
- data/spec/cli/yank_spec.rb +73 -0
- data/spec/credentials_spec.rb +23 -0
- data/spec/fixtures/badrake-0.8.7.spd +0 -0
- data/spec/fixtures/builder-3.0.0.spd +0 -0
- data/spec/fixtures/bundler-1.1.pre.spd +0 -0
- data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
- data/spec/fixtures/core-test-0.4.3.spd +0 -0
- data/spec/fixtures/core-test/bin/cot +3 -0
- data/spec/fixtures/core-test/lib/main.js +1 -0
- data/spec/fixtures/core-test/resources/runner.css +0 -0
- data/spec/fixtures/core-test/tests/test.js +1 -0
- data/spec/fixtures/highline-1.6.1.spd +0 -0
- data/spec/fixtures/ivory-0.0.1.spd +0 -0
- data/spec/fixtures/jquery-1.4.3.spd +0 -0
- data/spec/fixtures/optparse-1.0.1.spd +0 -0
- data/spec/fixtures/package.json +30 -0
- data/spec/fixtures/rake-0.8.6.spd +0 -0
- data/spec/fixtures/rake-0.8.7.spd +0 -0
- data/spec/gauntlet_spec.rb +27 -0
- data/spec/package_spec.rb +267 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/support/cli.rb +103 -0
- data/spec/support/fake.rb +48 -0
- data/spec/support/fake_gem_server.rb +67 -0
- data/spec/support/fake_gemcutter.rb +50 -0
- data/spec/support/matchers.rb +32 -0
- data/spec/support/path.rb +61 -0
- data/templates/project/LICENSE +19 -0
- data/templates/project/README.md +21 -0
- data/templates/project/lib/main.js +9 -0
- data/templates/project/project.json +31 -0
- data/templates/project/tests/main-test.js +8 -0
- metadata +484 -0
data/.gitignore
ADDED
data/.gitmodules
ADDED
data/bin/spadepkg
ADDED
data/lib/libgems_ext.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'libgems/config_file'
|
2
|
+
|
3
|
+
module LibGems
|
4
|
+
class ConfigFile
|
5
|
+
|
6
|
+
# Duplicate, with slight work-arounds, but needed for SYSTEM_WIDE_CONFIG_FILE
|
7
|
+
system_config_path =
|
8
|
+
if defined?(Win32API) # Already required in original version
|
9
|
+
CSIDL_COMMON_APPDATA = 0x0023
|
10
|
+
path = 0.chr * 260
|
11
|
+
if RUBY_VERSION > '1.9' then
|
12
|
+
SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP',
|
13
|
+
'L', :stdcall
|
14
|
+
SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path
|
15
|
+
else
|
16
|
+
SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'LLLLP',
|
17
|
+
'L'
|
18
|
+
SHGetFolderPath.call 0, CSIDL_COMMON_APPDATA, 0, 1, path
|
19
|
+
end
|
20
|
+
|
21
|
+
path.strip
|
22
|
+
else
|
23
|
+
'/etc'
|
24
|
+
end
|
25
|
+
|
26
|
+
remove_const(:SYSTEM_WIDE_CONFIG_FILE)
|
27
|
+
SYSTEM_WIDE_CONFIG_FILE = File.join system_config_path, 'spaderc'
|
28
|
+
|
29
|
+
def credentials_path
|
30
|
+
File.join(LibGems.user_dir, "credentials")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'libgems/dependency_installer'
|
2
|
+
|
3
|
+
module LibGems
|
4
|
+
class DependencyInstaller
|
5
|
+
|
6
|
+
# Had to overwrite this all just to change the match from /gem$/ to /spd$/
|
7
|
+
# TODO: Consider whether extension should be settable in LibGems
|
8
|
+
def find_spec_by_name_and_version(gem_name,
|
9
|
+
version = LibGems::Requirement.default,
|
10
|
+
prerelease = false)
|
11
|
+
spec_and_source = nil
|
12
|
+
|
13
|
+
glob = if File::ALT_SEPARATOR then
|
14
|
+
gem_name.gsub File::ALT_SEPARATOR, File::SEPARATOR
|
15
|
+
else
|
16
|
+
gem_name
|
17
|
+
end
|
18
|
+
|
19
|
+
local_gems = Dir["#{glob}*"].sort.reverse
|
20
|
+
|
21
|
+
unless local_gems.empty? then
|
22
|
+
local_gems.each do |gem_file|
|
23
|
+
next unless gem_file =~ /spd$/
|
24
|
+
begin
|
25
|
+
spec = LibGems::Format.from_file_by_path(gem_file).spec
|
26
|
+
spec_and_source = [spec, gem_file]
|
27
|
+
break
|
28
|
+
rescue SystemCallError, LibGems::Package::FormatError
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
if spec_and_source.nil? then
|
34
|
+
dep = LibGems::Dependency.new gem_name, version
|
35
|
+
dep.prerelease = true if prerelease
|
36
|
+
spec_and_sources = find_gems_with_sources(dep).reverse
|
37
|
+
|
38
|
+
spec_and_source = spec_and_sources.find { |spec, source|
|
39
|
+
LibGems::Platform.match spec.platform
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
if spec_and_source.nil? then
|
44
|
+
raise LibGems::GemNotFoundException.new(
|
45
|
+
"Could not find a valid spd '#{gem_name}' (#{version}) locally or in a repository",
|
46
|
+
gem_name, version, @errors)
|
47
|
+
end
|
48
|
+
|
49
|
+
@specs_and_sources = [spec_and_source]
|
50
|
+
end
|
51
|
+
|
52
|
+
# Overwrite this to use our custom installer
|
53
|
+
def install dep_or_name, version = LibGems::Requirement.default
|
54
|
+
LibGems.with_rubygems_compat do
|
55
|
+
if String === dep_or_name then
|
56
|
+
find_spec_by_name_and_version dep_or_name, version, @prerelease
|
57
|
+
else
|
58
|
+
dep_or_name.prerelease = @prerelease
|
59
|
+
@specs_and_sources = [find_gems_with_sources(dep_or_name).last]
|
60
|
+
end
|
61
|
+
|
62
|
+
@installed_gems = []
|
63
|
+
|
64
|
+
gather_dependencies
|
65
|
+
|
66
|
+
@gems_to_install.each do |spec|
|
67
|
+
last = spec == @gems_to_install.last
|
68
|
+
# HACK is this test for full_name acceptable?
|
69
|
+
next if @source_index.any? { |n,_| n == spec.full_name } and not last
|
70
|
+
|
71
|
+
# TODO: make this sorta_verbose so other users can benefit from it
|
72
|
+
say "Installing spd #{spec.full_name}" if LibGems.configuration.really_verbose
|
73
|
+
|
74
|
+
_, source_uri = @specs_and_sources.assoc spec
|
75
|
+
begin
|
76
|
+
local_gem_path = LibGems::RemoteFetcher.fetcher.download spec, source_uri,
|
77
|
+
@cache_dir
|
78
|
+
rescue LibGems::RemoteFetcher::FetchError
|
79
|
+
next if @force
|
80
|
+
raise
|
81
|
+
end
|
82
|
+
|
83
|
+
inst = LibGems::Installer.new local_gem_path,
|
84
|
+
:bin_dir => @bin_dir,
|
85
|
+
:development => @development,
|
86
|
+
:env_shebang => @env_shebang,
|
87
|
+
:force => @force,
|
88
|
+
:format_executable => @format_executable,
|
89
|
+
:ignore_dependencies => @ignore_dependencies,
|
90
|
+
:install_dir => @install_dir,
|
91
|
+
:security_policy => @security_policy,
|
92
|
+
:source_index => @source_index,
|
93
|
+
:user_install => @user_install,
|
94
|
+
:wrappers => @wrappers
|
95
|
+
|
96
|
+
spec = inst.install
|
97
|
+
|
98
|
+
@installed_gems << spec
|
99
|
+
end
|
100
|
+
|
101
|
+
@installed_gems
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def find_gems_with_sources(dep)
|
106
|
+
# Reset the errors
|
107
|
+
@errors = nil
|
108
|
+
gems_and_sources = []
|
109
|
+
|
110
|
+
if @domain == :both or @domain == :local then
|
111
|
+
Dir[File.join(Dir.pwd, "#{dep.name}-[0-9]*.spd")].each do |gem_file|
|
112
|
+
spec = LibGems::Format.from_file_by_path(gem_file).spec
|
113
|
+
gems_and_sources << [spec, gem_file] if spec.name == dep.name
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
if @domain == :both or @domain == :remote then
|
118
|
+
begin
|
119
|
+
requirements = dep.requirement.requirements.map do |req, ver|
|
120
|
+
req
|
121
|
+
end
|
122
|
+
|
123
|
+
all = !dep.prerelease? &&
|
124
|
+
# we only need latest if there's one requirement and it is
|
125
|
+
# guaranteed to match the newest specs
|
126
|
+
(requirements.length > 1 or
|
127
|
+
(requirements.first != ">=" and requirements.first != ">"))
|
128
|
+
|
129
|
+
found, @errors = LibGems::SpecFetcher.fetcher.fetch_with_errors dep, all, true, dep.prerelease?
|
130
|
+
|
131
|
+
gems_and_sources.push(*found)
|
132
|
+
|
133
|
+
rescue LibGems::RemoteFetcher::FetchError => e
|
134
|
+
if LibGems.configuration.really_verbose then
|
135
|
+
say "Error fetching remote data:\t\t#{e.message}"
|
136
|
+
say "Falling back to local-only install"
|
137
|
+
end
|
138
|
+
@domain = :local
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
gems_and_sources.sort_by do |gem, source|
|
143
|
+
[gem, source =~ /^http:\/\// ? 0 : 1] # local gems win
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'libgems/installer'
|
2
|
+
|
3
|
+
module LibGems
|
4
|
+
class Installer
|
5
|
+
|
6
|
+
def app_script_text(bin_file_name)
|
7
|
+
<<-TEXT
|
8
|
+
#{shebang bin_file_name}
|
9
|
+
#
|
10
|
+
# This file was generated by Spade.
|
11
|
+
#
|
12
|
+
# The application '#{@spec.name}' is installed as part of an spd, and
|
13
|
+
# this file is here to facilitate running it.
|
14
|
+
#
|
15
|
+
|
16
|
+
version = "#{LibGems::Requirement.default}"
|
17
|
+
|
18
|
+
if ARGV.first =~ /^_(.*)_$/ and LibGems::Version.correct? $1 then
|
19
|
+
version = $1
|
20
|
+
ARGV.shift
|
21
|
+
end
|
22
|
+
|
23
|
+
gem '#{@spec.name}', version
|
24
|
+
|
25
|
+
path = LibGems.bin_path('#{@spec.name}', '#{bin_file_name}', version)
|
26
|
+
shebang = File.open(path){|f| f.readline }
|
27
|
+
|
28
|
+
if shebang =~ /^\#\!.*ruby/
|
29
|
+
load path
|
30
|
+
else
|
31
|
+
exec path, *ARGV
|
32
|
+
end
|
33
|
+
TEXT
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'libgems'
|
2
|
+
|
3
|
+
module LibGems
|
4
|
+
def self.default_sources
|
5
|
+
%w[https://sproutcutter.heroku.com/]
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.host
|
9
|
+
@host ||= "https://sproutcutter.heroku.com"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.default_dir
|
13
|
+
File.join LibGems.user_home, Spade::SPADE_DIR
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.user_dir
|
17
|
+
File.join LibGems.user_home, Spade::SPADE_DIR
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.config_file
|
21
|
+
File.join LibGems.user_home, '.spaderc'
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.path
|
25
|
+
@gem_path ||= nil
|
26
|
+
|
27
|
+
unless @gem_path then
|
28
|
+
paths = [ENV['SPADE_PATH'] || LibGems.configuration.path || default_path]
|
29
|
+
set_paths paths.compact.join(File::PATH_SEPARATOR)
|
30
|
+
end
|
31
|
+
|
32
|
+
@gem_path
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.dir
|
36
|
+
set_home(ENV['SPADE_HOME'] || LibGems.configuration.home || default_dir) unless @gem_home
|
37
|
+
@gem_home
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'spade/packager'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spade/core'
|
2
|
+
require 'libgems'
|
3
|
+
require 'libgems_ext'
|
4
|
+
|
5
|
+
module Spade
|
6
|
+
module Packager
|
7
|
+
TEMPLATES_DIR = File.expand_path("../../../templates", __FILE__)
|
8
|
+
|
9
|
+
autoload :CLI, 'spade/packager/cli'
|
10
|
+
autoload :Credentials, 'spade/packager/credentials'
|
11
|
+
autoload :Local, 'spade/packager/local'
|
12
|
+
autoload :Package, 'spade/packager/package'
|
13
|
+
autoload :Remote, 'spade/packager/remote'
|
14
|
+
autoload :Repository, 'spade/packager/repository'
|
15
|
+
autoload :Version, 'spade/packager/version'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,196 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'highline'
|
3
|
+
|
4
|
+
module Spade
|
5
|
+
module Packager
|
6
|
+
module CLI
|
7
|
+
LOGIN_MESSAGE = "Please login first with `spade login`."
|
8
|
+
|
9
|
+
class Base < Thor
|
10
|
+
|
11
|
+
class_option :verbose, :type => :boolean, :default => false,
|
12
|
+
:aliases => ['-V'],
|
13
|
+
:desc => 'Show additional debug information while running'
|
14
|
+
|
15
|
+
desc "owner", "Manage users for a package"
|
16
|
+
subcommand "owner", Spade::Packager::CLI::Owner
|
17
|
+
|
18
|
+
desc "install [PACKAGE]", "Installs one or many spade packages"
|
19
|
+
method_option :version, :type => :string, :default => ">= 0", :aliases => ['-v'], :desc => 'Specify a version to install'
|
20
|
+
method_option :prerelease, :type => :boolean, :default => false, :aliases => ['--pre'], :desc => 'Install a prerelease version'
|
21
|
+
def install(*packages)
|
22
|
+
report_arity_error("install") and return if packages.size.zero?
|
23
|
+
|
24
|
+
begin
|
25
|
+
packages.each do |package|
|
26
|
+
installed = Spade::Packager::Remote.new.install(package, options[:version], options[:prerelease])
|
27
|
+
installed.each do |spec|
|
28
|
+
say "Successfully installed #{spec.full_name}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
rescue LibGems::InstallError => e
|
32
|
+
abort "Install error: #{e}"
|
33
|
+
rescue LibGems::GemNotFoundException => e
|
34
|
+
abort "Can't find package #{e.name} #{e.version} available for install"
|
35
|
+
rescue Errno::EACCES, LibGems::FilePermissionError => e
|
36
|
+
abort e.message
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "installed [PACKAGE]", "Shows what spade packages are installed"
|
41
|
+
def installed(*packages)
|
42
|
+
local = Spade::Packager::Local.new
|
43
|
+
index = local.installed(packages)
|
44
|
+
print_specs(packages, index)
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "uninstall [PACKAGE]", "Uninstalls one or many packages"
|
48
|
+
def uninstall(*packages)
|
49
|
+
local = Spade::Packager::Local.new
|
50
|
+
if packages.size > 0
|
51
|
+
packages.each do |package|
|
52
|
+
if !local.uninstall(package)
|
53
|
+
abort %{No packages installed named "#{package}"}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
else
|
57
|
+
report_arity_error('uninstall')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
desc "login", "Log in with your Spade credentials"
|
62
|
+
def login
|
63
|
+
highline = HighLine.new
|
64
|
+
say "Enter your Spade credentials."
|
65
|
+
|
66
|
+
begin
|
67
|
+
email = highline.ask "\nEmail:" do |q|
|
68
|
+
next unless STDIN.tty?
|
69
|
+
q.readline = true
|
70
|
+
end
|
71
|
+
|
72
|
+
password = highline.ask "\nPassword:" do |q|
|
73
|
+
next unless STDIN.tty?
|
74
|
+
q.echo = "*"
|
75
|
+
end
|
76
|
+
rescue Interrupt => ex
|
77
|
+
abort "Cancelled login."
|
78
|
+
end
|
79
|
+
|
80
|
+
say "\nLogging in as #{email}..."
|
81
|
+
|
82
|
+
if Spade::Packager::Remote.new.login(email, password)
|
83
|
+
say "Logged in!"
|
84
|
+
else
|
85
|
+
say "Incorrect email or password."
|
86
|
+
login
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
desc "push", "Distribute your spade package"
|
91
|
+
def push(package)
|
92
|
+
remote = Spade::Packager::Remote.new
|
93
|
+
if remote.logged_in?
|
94
|
+
say remote.push(package)
|
95
|
+
else
|
96
|
+
say LOGIN_MESSAGE
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
desc "yank", "Remove a specific package version release from SproutCutter"
|
101
|
+
method_option :version, :type => :string, :default => nil, :aliases => ['-v'], :desc => 'Specify a version to yank'
|
102
|
+
method_option :undo, :type => :boolean, :default => false, :desc => 'Unyank package'
|
103
|
+
def yank(package)
|
104
|
+
if options[:version]
|
105
|
+
remote = Spade::Packager::Remote.new
|
106
|
+
if remote.logged_in?
|
107
|
+
if options[:undo]
|
108
|
+
say remote.unyank(package, options[:version])
|
109
|
+
else
|
110
|
+
say remote.yank(package, options[:version])
|
111
|
+
end
|
112
|
+
else
|
113
|
+
say LOGIN_MESSAGE
|
114
|
+
end
|
115
|
+
else
|
116
|
+
say "Version required"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
desc "list", "View available packages for download"
|
121
|
+
method_option :all, :type => :boolean, :default => false, :aliases => ['-a'], :desc => 'List all versions available'
|
122
|
+
method_option :prerelease, :type => :boolean, :default => false, :aliases => ['--pre'], :desc => 'List prerelease versions available'
|
123
|
+
def list(*packages)
|
124
|
+
remote = Spade::Packager::Remote.new
|
125
|
+
index = remote.list_packages(packages, options[:all], options[:prerelease])
|
126
|
+
print_specs(packages, index)
|
127
|
+
end
|
128
|
+
|
129
|
+
desc "new [NAME]", "Generate a new project skeleton"
|
130
|
+
def new(name)
|
131
|
+
ProjectGenerator.new(self,
|
132
|
+
name, File.expand_path(name)).run
|
133
|
+
end
|
134
|
+
|
135
|
+
desc "build", "Build a spade package from a package.json"
|
136
|
+
def build
|
137
|
+
local = Spade::Packager::Local.new
|
138
|
+
if local.logged_in?
|
139
|
+
package = local.pack("package.json")
|
140
|
+
if package.errors.empty?
|
141
|
+
puts "Successfully built package: #{package.to_ext}"
|
142
|
+
else
|
143
|
+
failure_message = "Spade encountered the following problems building your package:"
|
144
|
+
package.errors.each do |error|
|
145
|
+
failure_message << "\n* #{error}"
|
146
|
+
end
|
147
|
+
abort failure_message
|
148
|
+
end
|
149
|
+
else
|
150
|
+
abort LOGIN_MESSAGE
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
desc "unpack [PACKAGE]", "Extract files from a spade package"
|
155
|
+
method_option :target, :type => :string, :default => ".", :aliases => ['-t'], :desc => 'Unpack to given directory'
|
156
|
+
def unpack(*paths)
|
157
|
+
local = Spade::Packager::Local.new
|
158
|
+
|
159
|
+
paths.each do |path|
|
160
|
+
begin
|
161
|
+
package = local.unpack(path, options[:target])
|
162
|
+
unpack_path = File.expand_path(File.join(Dir.pwd, options[:target], package.to_full_name))
|
163
|
+
puts "Unpacked spade into: #{unpack_path}"
|
164
|
+
rescue Errno::EACCES, LibGems::FilePermissionError => ex
|
165
|
+
abort "There was a problem unpacking #{path}:\n#{ex.message}"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
private
|
171
|
+
|
172
|
+
def report_arity_error(name)
|
173
|
+
self.class.handle_argument_error(self.class.tasks[name], nil)
|
174
|
+
end
|
175
|
+
|
176
|
+
def print_specs(packages, index)
|
177
|
+
spades = {}
|
178
|
+
|
179
|
+
index.each do |(name, version, platform)|
|
180
|
+
spades[name] ||= []
|
181
|
+
spades[name] << version
|
182
|
+
end
|
183
|
+
|
184
|
+
if spades.size.zero?
|
185
|
+
abort %{No packages found matching "#{packages.join('", "')}".}
|
186
|
+
else
|
187
|
+
spades.each do |name, versions|
|
188
|
+
puts "#{name} (#{versions.sort.reverse.join(", ")})"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|