lyp 0.0.5 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +190 -36
- data/bin/get.sh +886 -0
- data/lib/lyp.rb +20 -1
- data/lib/lyp/{directories.rb → base.rb} +5 -2
- data/lib/lyp/cli.rb +53 -7
- data/lib/lyp/git_based_rugged.rb +38 -0
- data/lib/lyp/package.rb +89 -30
- data/lib/lyp/resolver.rb +3 -1
- data/lib/lyp/system.rb +3 -4
- data/lib/lyp/version.rb +1 -1
- metadata +19 -29
data/lib/lyp.rb
CHANGED
@@ -1,5 +1,23 @@
|
|
1
|
+
# test for existence of
|
2
|
+
$rugged_available = begin
|
3
|
+
gem 'rugged', '>=0.23.0'
|
4
|
+
require 'rugged'
|
5
|
+
rescue Exception
|
6
|
+
nil
|
7
|
+
end
|
8
|
+
|
9
|
+
$git_available = `git --version` rescue nil
|
10
|
+
|
11
|
+
unless $rugged_available || $git_available
|
12
|
+
raise "Lyp needs git in order to be able to install packages. Please install git and then try again."
|
13
|
+
end
|
14
|
+
|
15
|
+
unless $rugged_available
|
16
|
+
require 'lyp/git_based_rugged'
|
17
|
+
end
|
18
|
+
|
1
19
|
%w{
|
2
|
-
|
20
|
+
base
|
3
21
|
system
|
4
22
|
settings
|
5
23
|
|
@@ -12,3 +30,4 @@
|
|
12
30
|
}.each do |f|
|
13
31
|
require File.expand_path("lyp/#{f}", File.dirname(__FILE__))
|
14
32
|
end
|
33
|
+
|
@@ -3,8 +3,11 @@ require 'fileutils'
|
|
3
3
|
module Lyp
|
4
4
|
# A package specifier is of the form <package>@<version specifier>, where
|
5
5
|
# the version specifier can be simply a version number, or include an operator
|
6
|
-
# before the version number.
|
7
|
-
|
6
|
+
# before the version number.
|
7
|
+
#
|
8
|
+
# Accepted operators: >=, ~>
|
9
|
+
PACKAGE_RE = /^([^@\>~]+)(?:@?((?:\>=|~\>)?.+))?/ #/^([^@]+)(?:@(.+))?$/
|
10
|
+
LILYPOND_RE = /^lilypond(?:@?((?:\>=|~\>)?.+))?/
|
8
11
|
|
9
12
|
LYP_DIRECTORY = File.expand_path('~/.lyp')
|
10
13
|
LYP_BIN_DIRECTORY = File.join(LYP_DIRECTORY, 'bin')
|
data/lib/lyp/cli.rb
CHANGED
@@ -51,7 +51,7 @@ class Lyp::CLI < Thor
|
|
51
51
|
end
|
52
52
|
|
53
53
|
desc "search [PATTERN|lilypond]", "List available packages matching PATTERN or versions of lilypond"
|
54
|
-
def search(pattern)
|
54
|
+
def search(pattern = '')
|
55
55
|
# Lyp::System.test_installed_status!
|
56
56
|
|
57
57
|
pattern =~ Lyp::PACKAGE_RE
|
@@ -85,7 +85,7 @@ class Lyp::CLI < Thor
|
|
85
85
|
if packages.empty?
|
86
86
|
puts "\nNo matching package found in lyp-index\n\n"
|
87
87
|
else
|
88
|
-
puts "\nAvailable packages:\n\n"
|
88
|
+
puts "\nAvailable packages on lyp-index:\n\n"
|
89
89
|
packages.each do |p|
|
90
90
|
puts " #{p[:name]}"
|
91
91
|
end
|
@@ -111,7 +111,7 @@ class Lyp::CLI < Thor
|
|
111
111
|
case package
|
112
112
|
when 'self'
|
113
113
|
Lyp::System.install!
|
114
|
-
when
|
114
|
+
when Lyp::LILYPOND_RE
|
115
115
|
Lyp::System.test_installed_status!
|
116
116
|
Lyp::Lilypond.install($1, options)
|
117
117
|
else
|
@@ -130,7 +130,7 @@ class Lyp::CLI < Thor
|
|
130
130
|
case package
|
131
131
|
when 'self'
|
132
132
|
Lyp::System.uninstall!
|
133
|
-
when
|
133
|
+
when Lyp::LILYPOND_RE
|
134
134
|
Lyp::System.test_installed_status!
|
135
135
|
Lyp::Lilypond.uninstall($1)
|
136
136
|
else
|
@@ -145,7 +145,7 @@ class Lyp::CLI < Thor
|
|
145
145
|
def use(version)
|
146
146
|
Lyp::System.test_installed_status!
|
147
147
|
|
148
|
-
if version =~
|
148
|
+
if version =~ Lyp::LILYPOND_RE
|
149
149
|
version = $1
|
150
150
|
end
|
151
151
|
|
@@ -162,7 +162,24 @@ class Lyp::CLI < Thor
|
|
162
162
|
Lyp::Lilypond.list.each {|info| puts format_lilypond_entry(info)}
|
163
163
|
STDOUT.puts LILYPOND_LEGEND
|
164
164
|
else
|
165
|
-
Lyp::Package.list(args.first)
|
165
|
+
list = Lyp::Package.list(args.first)
|
166
|
+
if list.empty?
|
167
|
+
if args.first
|
168
|
+
return puts "\nNo installed packages found matching '#{args.first}'\n\n"
|
169
|
+
else
|
170
|
+
return puts "\nNo packages are currently installed\n\n"
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
by_package = list.inject({}) do |m, p|
|
175
|
+
p =~ Lyp::PACKAGE_RE; (m[$1] ||= []) << $2; m
|
176
|
+
end
|
177
|
+
|
178
|
+
puts "\nInstalled packages:\n\n"
|
179
|
+
by_package.keys.sort.each do |p|
|
180
|
+
puts " #{p} => (#{by_package[p].sort.join(', ')})"
|
181
|
+
end
|
182
|
+
puts "\n\n"
|
166
183
|
end
|
167
184
|
end
|
168
185
|
|
@@ -177,6 +194,35 @@ class Lyp::CLI < Thor
|
|
177
194
|
end
|
178
195
|
end
|
179
196
|
|
197
|
+
desc "deps FILE", "Lists dependencies found in user's files"
|
198
|
+
def deps(fn)
|
199
|
+
resolver = Lyp::Resolver.new(fn)
|
200
|
+
tree = resolver.get_dependency_tree(ignore_missing: true)
|
201
|
+
tree[:dependencies].each do |package, leaf|
|
202
|
+
versions = leaf[:versions].keys.map {|k| k =~ Lyp::PACKAGE_RE; $2 }.sort
|
203
|
+
if versions.empty?
|
204
|
+
puts " #{leaf[:clause]} => (no local version found)"
|
205
|
+
else
|
206
|
+
puts " #{leaf[:clause]} => #{versions.join(', ')}"
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
desc "resolve FILE", "Resolves and installs missing dependencies found in user's files"
|
212
|
+
method_option :all, aliases: '-a', type: :boolean, desc: 'Install all found dependencies'
|
213
|
+
def resolve(fn)
|
214
|
+
resolver = Lyp::Resolver.new(fn)
|
215
|
+
tree = resolver.get_dependency_tree(ignore_missing: true)
|
216
|
+
tree[:dependencies].each do |package, leaf|
|
217
|
+
if options[:all] || leaf[:versions].empty?
|
218
|
+
Lyp::Package.install(leaf[:clause])
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
180
222
|
end
|
181
223
|
|
182
|
-
|
224
|
+
begin
|
225
|
+
Lyp::CLI.start(ARGV)
|
226
|
+
rescue => e
|
227
|
+
puts e.message
|
228
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# A quick-n-dirty rugged swap-in
|
2
|
+
|
3
|
+
puts "git_based_rugged"
|
4
|
+
|
5
|
+
module Rugged
|
6
|
+
class Repository
|
7
|
+
def self.clone_at(url, path)
|
8
|
+
`git clone -q \"#{url}\" \"#{path}\"`
|
9
|
+
new(path)
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(path)
|
13
|
+
@path = path
|
14
|
+
exec('status')
|
15
|
+
end
|
16
|
+
|
17
|
+
Ref = Struct.new(:name)
|
18
|
+
|
19
|
+
def head
|
20
|
+
h = exec("show-ref --head").lines.map {|r| r =~ /^(\S+)\sHEAD$/ && $1}[0]
|
21
|
+
Ref.new(h)
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def checkout(ref, opts)
|
26
|
+
# strategy: :force
|
27
|
+
exec("checkout -qf #{ref}")
|
28
|
+
end
|
29
|
+
|
30
|
+
def tags
|
31
|
+
exec("tag").lines.map {|l| Ref.new(l.chomp)}
|
32
|
+
end
|
33
|
+
|
34
|
+
def exec(cmd)
|
35
|
+
`cd #{@path} && git #{cmd}`
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/lyp/package.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'fileutils'
|
2
|
-
require 'rugged'
|
3
2
|
require 'open-uri'
|
4
3
|
require 'yaml'
|
5
4
|
|
@@ -7,12 +6,12 @@ module Lyp::Package
|
|
7
6
|
class << self
|
8
7
|
|
9
8
|
def list(pattern = nil)
|
10
|
-
packages = Dir["#{Lyp.packages_dir}
|
11
|
-
File.
|
9
|
+
packages = Dir["#{Lyp.packages_dir}/**/package.ly"].map do |path|
|
10
|
+
File.dirname(path).gsub("#{Lyp.packages_dir}/", '')
|
12
11
|
end
|
13
12
|
|
14
13
|
if pattern
|
15
|
-
if (pattern =~
|
14
|
+
if (pattern =~ /[@\>\<\=\~]/) && (pattern =~ Lyp::PACKAGE_RE)
|
16
15
|
package, version = $1, $2
|
17
16
|
req = Gem::Requirement.new(version) rescue nil
|
18
17
|
packages.select! do |p|
|
@@ -60,6 +59,51 @@ module Lyp::Package
|
|
60
59
|
end
|
61
60
|
package, version = $1, $2
|
62
61
|
|
62
|
+
if version =~ /\:/
|
63
|
+
info = install_from_local_files(package, version, opts)
|
64
|
+
else
|
65
|
+
info = install_from_repository(package, version, opts)
|
66
|
+
end
|
67
|
+
|
68
|
+
install_package_dependencies(info[:path], opts)
|
69
|
+
|
70
|
+
puts "\nInstalled #{package}@#{info[:version]}\n\n" unless opts[:silent]
|
71
|
+
|
72
|
+
# important: return the installed version
|
73
|
+
info[:version]
|
74
|
+
end
|
75
|
+
|
76
|
+
def install_from_local_files(package, version, opts)
|
77
|
+
version =~ /^([^\:]+)\:(.+)$/
|
78
|
+
version, local_path = $1, $2
|
79
|
+
|
80
|
+
entry_point_path = nil
|
81
|
+
if File.directory?(local_path)
|
82
|
+
ly_path = File.join(local_path, "package.ly")
|
83
|
+
if File.file?(ly_path)
|
84
|
+
entry_point_path = ly_path
|
85
|
+
else
|
86
|
+
raise "Could not find #{ly_path}. Please specify a valid lilypond file."
|
87
|
+
end
|
88
|
+
elsif File.file?(local_path)
|
89
|
+
entry_point_path = local_path
|
90
|
+
else
|
91
|
+
raise "Could not find #{local_path}"
|
92
|
+
end
|
93
|
+
|
94
|
+
package_path = "#{Lyp.packages_dir}/#{package}@#{version}"
|
95
|
+
package_ly_path = "#{package_path}/package.ly"
|
96
|
+
|
97
|
+
FileUtils.rm_rf(package_path)
|
98
|
+
FileUtils.mkdir_p(package_path)
|
99
|
+
File.open(package_ly_path, 'w+') do |f|
|
100
|
+
f << "\\include \"#{entry_point_path}\"\n"
|
101
|
+
end
|
102
|
+
|
103
|
+
{version: version, path: package_path}
|
104
|
+
end
|
105
|
+
|
106
|
+
def install_from_repository(package, version, opts)
|
63
107
|
url = package_git_url(package)
|
64
108
|
tmp_path = git_url_to_temp_path(url)
|
65
109
|
|
@@ -75,25 +119,30 @@ module Lyp::Package
|
|
75
119
|
FileUtils.rm_rf(package_path)
|
76
120
|
FileUtils.cp_r(tmp_path, package_path)
|
77
121
|
|
78
|
-
|
79
|
-
|
80
|
-
puts "\nInstalled #{package}@#{version}\n\n" unless opts[:silent]
|
81
|
-
|
82
|
-
# return the installed version
|
83
|
-
version
|
122
|
+
{version: version, path: package_path}
|
84
123
|
end
|
85
124
|
|
86
125
|
def uninstall(package, opts = {})
|
126
|
+
unless package =~ Lyp::PACKAGE_RE
|
127
|
+
raise "Invalid package specifier #{package}"
|
128
|
+
end
|
129
|
+
package, version = $1, $2
|
130
|
+
package_path = git_url_to_package_path(
|
131
|
+
package !~ /\// ? package : package_git_url(package), nil
|
132
|
+
)
|
133
|
+
|
87
134
|
if opts[:all_versions]
|
88
|
-
Dir["#{
|
89
|
-
|
135
|
+
Dir["#{package_path}@*"].each do |path|
|
136
|
+
name = path.gsub("#{Lyp.packages_dir}/", '')
|
137
|
+
puts "Uninstalling #{name}" unless opts[:silent]
|
90
138
|
FileUtils.rm_rf(path)
|
91
139
|
end
|
92
140
|
else
|
93
|
-
|
94
|
-
if File.directory?(
|
95
|
-
|
96
|
-
|
141
|
+
package_path += "@#{version}"
|
142
|
+
if File.directory?(package_path)
|
143
|
+
name = package_path.gsub("#{Lyp.packages_dir}/", '')
|
144
|
+
puts "Uninstalling #{name}" unless opts[:silent]
|
145
|
+
FileUtils.rm_rf(package_path)
|
97
146
|
else
|
98
147
|
raise "Could not find #{package}"
|
99
148
|
end
|
@@ -103,14 +152,21 @@ module Lyp::Package
|
|
103
152
|
def package_repository(url, tmp_path, opts = {})
|
104
153
|
# Create repository
|
105
154
|
if File.directory?(tmp_path)
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
155
|
+
begin
|
156
|
+
repo = Rugged::Repository.new(tmp_path)
|
157
|
+
repo.fetch('origin', [repo.head.name])
|
158
|
+
return repo
|
159
|
+
rescue
|
160
|
+
# ignore and try to clone
|
161
|
+
end
|
112
162
|
end
|
113
|
-
|
163
|
+
|
164
|
+
FileUtils.rm_rf(File.dirname(tmp_path))
|
165
|
+
FileUtils.mkdir_p(File.dirname(tmp_path))
|
166
|
+
puts "Cloning #{url}..." unless opts[:silent]
|
167
|
+
Rugged::Repository.clone_at(url, tmp_path)
|
168
|
+
rescue => e
|
169
|
+
raise "Could not clone repository (please check that the package URL is correct.)"
|
114
170
|
end
|
115
171
|
|
116
172
|
def checkout_package_version(repo, version, opts = {})
|
@@ -155,7 +211,7 @@ module Lyp::Package
|
|
155
211
|
if search_index && (url = search_lyp_index(package))
|
156
212
|
package_git_url(url, false) # make sure url is qualified
|
157
213
|
else
|
158
|
-
raise "
|
214
|
+
raise "Could not find package '#{package}' in lyp-index"
|
159
215
|
end
|
160
216
|
end
|
161
217
|
end
|
@@ -199,22 +255,25 @@ module Lyp::Package
|
|
199
255
|
end
|
200
256
|
|
201
257
|
def git_url_to_package_path(url, version)
|
202
|
-
version = 'head' if version.nil? || (version == '')
|
258
|
+
# version = 'head' if version.nil? || (version == '')
|
203
259
|
|
204
|
-
case url
|
260
|
+
package_path = case url
|
205
261
|
when /^(?:http|https)\:(?:\/\/)?(.+)$/
|
206
262
|
path = $1.gsub(/\.git$/, '')
|
207
|
-
"#{Lyp::packages_dir}/#{path}
|
263
|
+
"#{Lyp::packages_dir}/#{path}"
|
208
264
|
when /^(?:.+@)([^\:]+)\:(?:\/\/)?(.+)$/
|
209
265
|
domain, path = $1, $2.gsub(/\.git$/, '')
|
210
|
-
"#{Lyp::packages_dir}/#{domain}/#{path}
|
266
|
+
"#{Lyp::packages_dir}/#{domain}/#{path}"
|
211
267
|
else
|
212
268
|
if url !~ /\//
|
213
|
-
"#{Lyp::packages_dir}/#{url}
|
269
|
+
"#{Lyp::packages_dir}/#{url}"
|
214
270
|
else
|
215
271
|
raise "Invalid URL #{url}"
|
216
272
|
end
|
217
273
|
end
|
274
|
+
|
275
|
+
package_path += "@#{version}" if version
|
276
|
+
package_path
|
218
277
|
end
|
219
278
|
|
220
279
|
TAG_VERSION_RE = /^v?(\d.*)$/
|
@@ -249,7 +308,7 @@ module Lyp::Package
|
|
249
308
|
repo.tags.each {|t| tags << t}
|
250
309
|
|
251
310
|
tags.sort do |x, y|
|
252
|
-
x_version, y_version = tag_version(x), tag_version(y)
|
311
|
+
x_version, y_version = tag_version(x.name), tag_version(y.name)
|
253
312
|
if x_version && y_version
|
254
313
|
Gem::Version.new(x_version) <=> Gem::Version.new(y_version)
|
255
314
|
else
|
data/lib/lyp/resolver.rb
CHANGED
@@ -385,6 +385,7 @@ class Lyp::Resolver
|
|
385
385
|
|
386
386
|
# Sort permutations by version numbers
|
387
387
|
def sort_permutations(permutations, user_deps)
|
388
|
+
# Cache for versions converted to Gem::Version instances
|
388
389
|
versions = {}
|
389
390
|
|
390
391
|
map = lambda do |m, p|
|
@@ -398,7 +399,8 @@ class Lyp::Resolver
|
|
398
399
|
x_versions = x.inject({}, &map)
|
399
400
|
y_versions = y.inject({}, &map)
|
400
401
|
|
401
|
-
#
|
402
|
+
# If the dependency is direct (not transitive), just compare its versions.
|
403
|
+
# Otherwise, add the result of comparison to score.
|
402
404
|
x_versions.inject(0) do |score, kv|
|
403
405
|
package = kv[0]
|
404
406
|
cmp = kv[1] <=> y_versions[package]
|
data/lib/lyp/system.rb
CHANGED
@@ -4,21 +4,20 @@ module Lyp::System
|
|
4
4
|
class << self
|
5
5
|
INSTALL_MSG = <<EOF
|
6
6
|
|
7
|
-
|
7
|
+
Warning! Lyp is not yet properly installed in your home directory.
|
8
8
|
|
9
9
|
To install lyp run 'lyp install self'. lyp will then:
|
10
10
|
1. Setup ~/.lyp as its base directory.
|
11
|
-
2. Add ~/.lyp/bin
|
11
|
+
2. Add the lyp and lilypond scripts to ~/.lyp/bin.
|
12
|
+
3. Add ~/.lyp/bin to front of $PATH.
|
12
13
|
|
13
14
|
You can uninstall lyp at any time by running 'lyp uninstall self'.
|
14
15
|
|
15
16
|
EOF
|
16
17
|
|
17
18
|
def test_installed_status!
|
18
|
-
return
|
19
19
|
unless installed?
|
20
20
|
puts INSTALL_MSG
|
21
|
-
exit 1
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
data/lib/lyp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lyp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|
@@ -71,65 +71,53 @@ dependencies:
|
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: 0.19.1
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
|
-
name:
|
74
|
+
name: httpclient
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
77
|
- - "~>"
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: '
|
79
|
+
version: '2.7'
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 2.7.1
|
83
83
|
type: :runtime
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '2.7'
|
90
90
|
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
92
|
+
version: 2.7.1
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
94
|
+
name: nokogiri
|
95
95
|
requirement: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: '2.7'
|
100
|
-
- - ">="
|
97
|
+
- - '='
|
101
98
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
99
|
+
version: 1.6.6.2
|
103
100
|
type: :runtime
|
104
101
|
prerelease: false
|
105
102
|
version_requirements: !ruby/object:Gem::Requirement
|
106
103
|
requirements:
|
107
|
-
- -
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '2.7'
|
110
|
-
- - ">="
|
104
|
+
- - '='
|
111
105
|
- !ruby/object:Gem::Version
|
112
|
-
version:
|
106
|
+
version: 1.6.6.2
|
113
107
|
- !ruby/object:Gem::Dependency
|
114
108
|
name: rugged
|
115
109
|
requirement: !ruby/object:Gem::Requirement
|
116
110
|
requirements:
|
117
|
-
- -
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: '0.23'
|
120
|
-
- - ">="
|
111
|
+
- - '='
|
121
112
|
- !ruby/object:Gem::Version
|
122
|
-
version: 0.23.
|
113
|
+
version: 0.23.0
|
123
114
|
type: :runtime
|
124
115
|
prerelease: false
|
125
116
|
version_requirements: !ruby/object:Gem::Requirement
|
126
117
|
requirements:
|
127
|
-
- -
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: '0.23'
|
130
|
-
- - ">="
|
118
|
+
- - '='
|
131
119
|
- !ruby/object:Gem::Version
|
132
|
-
version: 0.23.
|
120
|
+
version: 0.23.0
|
133
121
|
description: Lyp is a tool for managing lilypond versions and lilypond packages
|
134
122
|
email: ciconia@gmail.com
|
135
123
|
executables:
|
@@ -140,11 +128,13 @@ extra_rdoc_files: []
|
|
140
128
|
files:
|
141
129
|
- LICENSE
|
142
130
|
- README.md
|
131
|
+
- bin/get.sh
|
143
132
|
- bin/lilypond
|
144
133
|
- bin/lyp
|
145
134
|
- lib/lyp.rb
|
135
|
+
- lib/lyp/base.rb
|
146
136
|
- lib/lyp/cli.rb
|
147
|
-
- lib/lyp/
|
137
|
+
- lib/lyp/git_based_rugged.rb
|
148
138
|
- lib/lyp/lilypond.rb
|
149
139
|
- lib/lyp/package.rb
|
150
140
|
- lib/lyp/resolver.rb
|