lyp 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: be14f9ec309c846d05866736f78ba82458ba4f5b
4
- data.tar.gz: b5ffae67c9ef47ec416ec61d763913cdc89b9459
3
+ metadata.gz: b8b10bc684d3755cd63fde5175e4769e7ee8d1ae
4
+ data.tar.gz: dc4c7568047ba01915131cba0125e717f6c9f107
5
5
  SHA512:
6
- metadata.gz: d5899a965576c65a6d07bd07ff716889e85042044d2efdbf8d16d47adfe09e57965479b75873a0ef0b5ae1c0b293529268fbe28472e97c7a360695df5b5b3e04
7
- data.tar.gz: a075ab18c0270b3c057db6ae9c3f365f9c8b4c26c7cf1df4c89fd79c6e896f495cfcc5356cf8c301c93aaa8833df16e5a40bf795112899fd88b344ea7b87bf10
6
+ metadata.gz: 1f3845fec6418ec6221659d9f04a8e5d6919fd77fe714ee0d91a02f3664cc66ffc1c3e1189c1d8f903ad96bbeffce7e28e361c7ca098d780e76c2afbb80b80ca
7
+ data.tar.gz: 97ecbadebd13b96c51861c160c62b7e14f2546882d2cad65d9578c9488f2bed997abfb7678b8b43f8c04ee6bf5a4ddbb5f37b03b1c18a07d3947b1c8c8e72e91
@@ -5,6 +5,7 @@ require 'lyp'
5
5
 
6
6
  STDERR.puts "Lyp version #{Lyp::VERSION}"
7
7
 
8
+ Lyp::Lilypond.check_lilypond!
8
9
  lilypond_path = Lyp::Lilypond.current_lilypond
9
10
  unless lilypond_path && File.file?(lilypond_path)
10
11
  STDERR.puts "No version of lilypond found. To install lilypond run 'lyp install lilypond'."
@@ -1,11 +1,182 @@
1
- require 'commander/import'
1
+ require 'thor'
2
2
  require "lyp/version"
3
3
 
4
- program :name, 'lyp'
5
- program :version, Lyp::VERSION
6
- program :description, 'Lyp is a package manager for lilypond.'
7
- program :help_formatter, :compact
4
+ def lilypond_prefix(info)
5
+ if info[:current] && info[:default]
6
+ "=* "
7
+ elsif info[:current]
8
+ "=> "
9
+ elsif info[:default]
10
+ " * "
11
+ else
12
+ " "
13
+ end
14
+ end
8
15
 
9
- require 'lyp/cli/commands'
16
+ def lilypond_postfix(info)
17
+ if info[:system]
18
+ " (system)"
19
+ else
20
+ ""
21
+ end
22
+ end
10
23
 
11
- default_command(:list)
24
+ def format_lilypond_entry(info)
25
+ "#{lilypond_prefix(info)}#{info[:version]}#{lilypond_postfix(info)}"
26
+ end
27
+
28
+ LILYPOND_PREAMBLE = <<EOF
29
+
30
+ Lilypond versions:
31
+
32
+ EOF
33
+
34
+ LILYPOND_LEGEND = <<EOF
35
+
36
+ # => - current
37
+ # =* - current && default
38
+ # * - default
39
+
40
+ EOF
41
+
42
+ class Lyp::CLI < Thor
43
+ package_name "lyp"
44
+ map "-v" => :version
45
+ check_unknown_options! :except => :compile
46
+
47
+ desc "version", "show Lyp version"
48
+ def version
49
+ require 'lyp/version'
50
+ $stderr.puts "Lyp #{Lyp::VERSION}"
51
+ end
52
+
53
+ desc "search [PATTERN|lilypond]", "List available packages matching PATTERN or versions of lilypond"
54
+ def search(pattern)
55
+ # Lyp::System.test_installed_status!
56
+
57
+ pattern =~ Lyp::PACKAGE_RE
58
+ package, version = $1, $2
59
+
60
+ if package == 'lilypond'
61
+ search_lilypond(version)
62
+ else
63
+ search_package(pattern)
64
+ end
65
+ end
66
+
67
+ no_commands do
68
+ def search_lilypond(version)
69
+ versions = Lyp::Lilypond.search(version)
70
+
71
+ if versions.empty?
72
+ puts "\nNo versions of lilypond are available for download\n\n"
73
+ else
74
+ puts "\nAvailable versions of lilypond:\n\n"
75
+ versions.each do |v|
76
+ prefix = v[:installed] ? " * " : " "
77
+ puts "#{prefix}#{v[:version]}"
78
+ end
79
+ puts "\n * Currently installed\n\n"
80
+ end
81
+ end
82
+
83
+ def search_package(pattern)
84
+ packages = Lyp::Package.list_lyp_index(pattern)
85
+ if packages.empty?
86
+ puts "\nNo matching package found in lyp-index\n\n"
87
+ else
88
+ puts "\nAvailable packages:\n\n"
89
+ packages.each do |p|
90
+ puts " #{p[:name]}"
91
+ end
92
+ puts "\n\n"
93
+ end
94
+ end
95
+ end
96
+
97
+ desc "compile [<option>...] <FILE>", "Invokes lilypond with given file"
98
+ def compile(*args)
99
+ Lyp::System.test_installed_status!
100
+ Lyp::Lilypond.check_lilypond!
101
+
102
+ Lyp::Lilypond.compile(*args)
103
+ end
104
+
105
+ desc "install <PACKAGE|lilypond|self>...", "Install a package or a version of lilypond. When 'install self' is invoked, lyp installs itself in ~/.lyp."
106
+ method_option :default, aliases: '-d', type: :boolean, desc: 'Set default lilypond version'
107
+ def install(*args)
108
+ raise "No package specified" if args.empty?
109
+
110
+ args.each do |package|
111
+ case package
112
+ when 'self'
113
+ Lyp::System.install!
114
+ when /^lilypond(?:@(.+))?$/
115
+ Lyp::System.test_installed_status!
116
+ Lyp::Lilypond.install($1, options)
117
+ else
118
+ Lyp::System.test_installed_status!
119
+ Lyp::Package.install(package)
120
+ end
121
+ end
122
+ end
123
+
124
+ desc "uninstall <PACKAGE|lilypond|self>...", "Uninstall a package or a version of lilypond. When 'uninstall self' is invoked, lyp uninstalls itself from ~/.lyp."
125
+ def uninstall(*args)
126
+ Lyp::System.test_installed_status!
127
+
128
+ raise "No package specified" if args.empty?
129
+ args.each do |package|
130
+ case package
131
+ when 'self'
132
+ Lyp::System.uninstall!
133
+ when /^lilypond(?:@(.+))?$/
134
+ Lyp::System.test_installed_status!
135
+ Lyp::Lilypond.uninstall($1)
136
+ else
137
+ Lyp::System.test_installed_status!
138
+ Lyp::Package.uninstall(package)
139
+ end
140
+ end
141
+ end
142
+
143
+ desc "use [lilypond@]<VERSION>", "Switch version of lilypond"
144
+ method_option :default, aliases: '-d', type: :boolean, desc: 'Set default lilypond version'
145
+ def use(version)
146
+ Lyp::System.test_installed_status!
147
+
148
+ if version =~ /^lilypond@(.+)$/
149
+ version = $1
150
+ end
151
+
152
+ lilypond = Lyp::Lilypond.use(version, options)
153
+ puts "Using version #{lilypond[:version]}"
154
+ end
155
+
156
+ desc "list [PATTERN|lilypond]", "List installed packages matching PATTERN or versions of lilypond"
157
+ def list(pattern = nil)
158
+ Lyp::System.test_installed_status!
159
+
160
+ if pattern == 'lilypond'
161
+ STDOUT.puts LILYPOND_PREAMBLE
162
+ Lyp::Lilypond.list.each {|info| puts format_lilypond_entry(info)}
163
+ STDOUT.puts LILYPOND_LEGEND
164
+ else
165
+ Lyp::Package.list(args.first).each {|p| puts p}
166
+ end
167
+ end
168
+
169
+ desc "which [PATTERN|lilypond]", "List locations of installed packages matching PATTERN or versions of lilypond"
170
+ def which(pattern = nil)
171
+ Lyp::System.test_installed_status!
172
+
173
+ if pattern == 'lilypond'
174
+ puts Lyp::Lilypond.current_lilypond
175
+ else
176
+ Lyp::Package.which(args.first).each {|p| puts p}
177
+ end
178
+ end
179
+
180
+ end
181
+
182
+ Lyp::CLI.start(ARGV)
@@ -1,5 +1,6 @@
1
1
  require 'httpclient'
2
2
  require 'uri'
3
+ require 'open3'
3
4
 
4
5
  module Lyp::Lilypond
5
6
  class << self
@@ -13,7 +14,7 @@ module Lyp::Lilypond
13
14
  def invoke(argv)
14
15
  lilypond = detect_use_version_argument(argv) || current_lilypond
15
16
 
16
- exec("#{lilypond} #{argv.join(' ')}")
17
+ Kernel.exec(lilypond, *argv)
17
18
  end
18
19
 
19
20
  def detect_use_version_argument(argv)
@@ -47,6 +48,25 @@ module Lyp::Lilypond
47
48
  set_session_settings(settings)
48
49
  end
49
50
 
51
+ def check_lilypond!
52
+ # check default
53
+ select_default_lilypond! unless valid_lilypond?(default_lilypond)
54
+
55
+ set_current_lilypond(default_lilypond) unless valid_lilypond?(current_lilypond)
56
+ end
57
+
58
+ def valid_lilypond?(path)
59
+ File.file?(path) && (`#{path} -v` =~ /^GNU LilyPond/)
60
+ end
61
+
62
+ def select_default_lilypond!
63
+ latest = system_lilyponds.sort(&CMP_VERSION).last || lyp_lilyponds.sort(&CMP_VERSION).last
64
+ if latest
65
+ default = latest[:path]
66
+ set_default_lilypond(default)
67
+ end
68
+ end
69
+
50
70
  def get_session_settings
51
71
  YAML.load(IO.read(session_settings_filename)) rescue {}
52
72
  end
@@ -406,8 +426,10 @@ module Lyp::Lilypond
406
426
  def exec(cmd)
407
427
  Open3.popen3(cmd) do |_in, _out, _err, wait_thr|
408
428
  exit_value = wait_thr.value
429
+ $_out = _out.read
430
+ $_err = _err.read
409
431
  if exit_value != 0
410
- raise "Error executing cmd #{cmd}: #{_err.read}"
432
+ raise "Error executing cmd #{cmd}: #{$_err.read}"
411
433
  end
412
434
  end
413
435
 
@@ -12,7 +12,27 @@ module Lyp::Package
12
12
  end
13
13
 
14
14
  if pattern
15
- packages.select! {|p| p =~ /#{pattern}/}
15
+ if (pattern =~ /@/) && (pattern =~ Lyp::PACKAGE_RE)
16
+ package, version = $1, $2
17
+ req = Gem::Requirement.new(version) rescue nil
18
+ packages.select! do |p|
19
+ p =~ Lyp::PACKAGE_RE
20
+ p_pack, p_ver = $1, $2
21
+
22
+ next false unless p_pack == package
23
+
24
+ if req && (p_gemver = Gem::Version.new(p_ver) rescue nil)
25
+ req =~ p_gemver
26
+ else
27
+ p_ver == version
28
+ end
29
+ end
30
+ else
31
+ packages.select! do |p|
32
+ p =~ Lyp::PACKAGE_RE
33
+ $1 =~ /#{pattern}/
34
+ end
35
+ end
16
36
  end
17
37
 
18
38
  packages.sort do |x, y|
@@ -30,6 +50,10 @@ module Lyp::Package
30
50
  end
31
51
  end
32
52
 
53
+ def which(pattern = nil)
54
+ list(pattern).map {|p| "#{Lyp.packages_dir}/#{p}" }
55
+ end
56
+
33
57
  def install(package_specifier, opts = {})
34
58
  unless package_specifier =~ Lyp::PACKAGE_RE
35
59
  raise "Invalid package specifier #{package_specifier}"
@@ -59,6 +83,23 @@ module Lyp::Package
59
83
  version
60
84
  end
61
85
 
86
+ def uninstall(package, opts = {})
87
+ if opts[:all_versions]
88
+ Dir["#{Lyp.packages_dir}/#{package}@*"].each do |path|
89
+ puts "Uninstalling #{File.basename(path)}" unless opts[:silent]
90
+ FileUtils.rm_rf(path)
91
+ end
92
+ else
93
+ path = "#{Lyp.packages_dir}/#{package}"
94
+ if File.directory?(path)
95
+ puts "Uninstalling #{package}" unless opts[:silent]
96
+ FileUtils.rm_rf(path)
97
+ else
98
+ raise "Could not find #{package}"
99
+ end
100
+ end
101
+ end
102
+
62
103
  def package_repository(url, tmp_path, opts = {})
63
104
  # Create repository
64
105
  if File.directory?(tmp_path)
@@ -74,20 +115,18 @@ module Lyp::Package
74
115
 
75
116
  def checkout_package_version(repo, version, opts = {})
76
117
  # Select commit to checkout
77
- if version.nil? || (version == '')
78
- puts "Checkout master branch..." unless opts[:silent]
79
- repo.checkout('master', strategy: :force)
80
- version = 'head'
81
- else
82
- tag = select_git_tag(repo, version)
83
- unless tag
84
- raise "Could not find tag matching #{version_specifier}"
85
- end
86
- puts "Checkout #{tag.name} tag" unless opts[:silent]
87
- repo.checkout(tag.name, strategy: :force)
88
- version = tag_version(tag)
118
+ checkout_ref = select_checkout_ref(repo, version)
119
+ unless checkout_ref
120
+ raise "Could not find tag matching #{version}"
89
121
  end
90
- version
122
+
123
+ begin
124
+ repo.checkout(checkout_ref, strategy: :force)
125
+ rescue
126
+ raise "Invalid version specified (#{version})"
127
+ end
128
+
129
+ tag_version(checkout_ref) || version
91
130
  end
92
131
 
93
132
  def install_package_dependencies(package_path, opts = {})
@@ -180,20 +219,30 @@ module Lyp::Package
180
219
 
181
220
  TAG_VERSION_RE = /^v?(\d.*)$/
182
221
 
183
- def select_git_tag(repo, version_specifier)
184
- return if version_specifier.nil? || (version_specifier == '')
185
-
186
- req = Gem::Requirement.new(version_specifier) rescue nil
187
-
188
- repo_tags(repo).reverse.find do |t|
189
- if req && (v = tag_version(t))
190
- req =~ Gem::Version.new(v)
222
+ def select_checkout_ref(repo, version_specifier)
223
+ case version_specifier
224
+ when nil, '', 'latest'
225
+ highest_versioned_tag(repo) || 'master'
226
+ when /^(\>=|~\>|\d)/
227
+ req = Gem::Requirement.new(version_specifier)
228
+ tag = repo_tags(repo).reverse.find do |t|
229
+ (v = tag_version(t.name)) && (req =~ Gem::Version.new(v))
230
+ end
231
+ unless tag
232
+ raise "Could not find a version matching #{version_specifier}"
191
233
  else
192
- t.name == version_specifier
234
+ tag.name
193
235
  end
236
+ else
237
+ version_specifier
194
238
  end
195
239
  end
196
240
 
241
+ def highest_versioned_tag(repo)
242
+ tag = repo_tags(repo).select {|t| Gem::Version.new(tag_version(t.name)) rescue nil}.last
243
+ tag && tag.name
244
+ end
245
+
197
246
  # Returns a list of tags sorted by version
198
247
  def repo_tags(repo)
199
248
  tags = []
@@ -210,7 +259,7 @@ module Lyp::Package
210
259
  end
211
260
 
212
261
  def tag_version(tag)
213
- (tag.name =~ TAG_VERSION_RE) ? $1 : nil
262
+ (tag =~ TAG_VERSION_RE) ? $1 : nil
214
263
  end
215
264
  end
216
265
  end
@@ -15,6 +15,7 @@ You can uninstall lyp at any time by running 'lyp uninstall self'.
15
15
  EOF
16
16
 
17
17
  def test_installed_status!
18
+ return
18
19
  unless installed?
19
20
  puts INSTALL_MSG
20
21
  exit 1
@@ -1,3 +1,3 @@
1
1
  module Lyp
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
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.0.4
4
+ version: 0.0.5
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-10 00:00:00.000000000 Z
11
+ date: 2016-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -51,25 +51,25 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: 1.7.5
53
53
  - !ruby/object:Gem::Dependency
54
- name: commander
54
+ name: thor
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '4.3'
59
+ version: '0.19'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 4.3.5
62
+ version: 0.19.1
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '4.3'
69
+ version: '0.19'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 4.3.5
72
+ version: 0.19.1
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: nokogiri
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -144,7 +144,6 @@ files:
144
144
  - bin/lyp
145
145
  - lib/lyp.rb
146
146
  - lib/lyp/cli.rb
147
- - lib/lyp/cli/commands.rb
148
147
  - lib/lyp/directories.rb
149
148
  - lib/lyp/lilypond.rb
150
149
  - lib/lyp/package.rb
@@ -1,178 +0,0 @@
1
- # package commands
2
-
3
- def lilypond_prefix(info)
4
- if info[:current] && info[:default]
5
- "=* "
6
- elsif info[:current]
7
- "=> "
8
- elsif info[:default]
9
- " * "
10
- else
11
- " "
12
- end
13
- end
14
-
15
- def lilypond_postfix(info)
16
- if info[:system]
17
- " (system)"
18
- else
19
- ""
20
- end
21
- end
22
-
23
- def format_lilypond_entry(info)
24
- "#{lilypond_prefix(info)}#{info[:version]}#{lilypond_postfix(info)}"
25
- end
26
-
27
- LILYPOND_PREAMBLE = <<EOF
28
-
29
- Lilypond versions:
30
-
31
- EOF
32
-
33
- LILYPOND_LEGEND = <<EOF
34
-
35
- # => - current
36
- # =* - current && default
37
- # * - default
38
-
39
- EOF
40
-
41
- command :list do |c|
42
- c.syntax = "list [PATTERN]"
43
- c.description = "Lists installed versions of packages whose name matches PATTERN"
44
- c.action do |args, opts|
45
- Lyp::System.test_installed_status!
46
-
47
- pattern = args.first
48
- if pattern == 'lilypond'
49
- STDOUT.puts LILYPOND_PREAMBLE
50
- Lyp::Lilypond.list.each {|info| puts format_lilypond_entry(info)}
51
- STDOUT.puts LILYPOND_LEGEND
52
- else
53
- Lyp::Package.list(args.first).each {|p| puts p}
54
- end
55
- end
56
- end
57
-
58
- command :compile do |c|
59
- c.syntax = "compile <FILE>"
60
- c.description = "Resolves package dependencies and invokes lilypond"
61
- c.action do |args, opts|
62
- Lyp::System.test_installed_status!
63
-
64
- begin
65
- raise "File not specified" if args.empty?
66
- Lyp::Lilypond.compile(ARGV[1..-1])
67
- end
68
- end
69
- end
70
-
71
- command :search do |c|
72
- c.syntax = "search <PATTERN>"
73
- c.description = "Search for a package or a version of lilypond"
74
- c.action do |args, opts|
75
- Lyp::System.test_installed_status!
76
-
77
- pattern = args.first
78
- pattern =~ Lyp::PACKAGE_RE
79
- package, version = $1, $2
80
- req = (version && Gem::Requirement.new(version)) rescue nil
81
-
82
- if package == 'lilypond'
83
- begin
84
- versions = Lyp::Lilypond.search(version)
85
-
86
- if versions.empty?
87
- puts "\nNo versions of lilypond are available for download\n\n"
88
- else
89
- puts "\nAvailable versions of lilypond:\n\n"
90
- versions.each do |v|
91
- prefix = v[:installed] ? " * " : " "
92
- puts "#{prefix}#{v[:version]}"
93
- end
94
- puts "\n * Currently installed\n\n"
95
- end
96
- end
97
- else
98
- packages = Lyp::Package.list_lyp_index(pattern)
99
- if packages.empty?
100
- puts "\nNo matching package found in lyp-index\n\n"
101
- else
102
- puts "\nAvailable packages:\n\n"
103
- packages.each do |p|
104
- puts " #{p[:name]}"
105
- end
106
- puts "\n\n"
107
- end
108
- end
109
- end
110
- end
111
-
112
- command :install do |c|
113
- c.syntax = "install <PACKAGE...>"
114
- c.description = "Install a package or a version of lilypond"
115
- c.option "-d", "--default", "Set default version"
116
- c.action do |args, opts|
117
-
118
- begin
119
- raise "No package specified" if args.empty?
120
-
121
- args.each do |package|
122
- case package
123
- when 'self'
124
- Lyp::System.install!
125
- when /^lilypond(?:@(.+))?$/
126
- Lyp::System.test_installed_status!
127
- Lyp::Lilypond.install($1, opts.__hash__)
128
- else
129
- Lyp::System.test_installed_status!
130
- Lyp::Package.install(package)
131
- end
132
- end
133
- end
134
- end
135
- end
136
-
137
- command :use do |c|
138
- c.syntax = "use [lilypond@]<VERSION>"
139
- c.description = "Switch version of lilypond"
140
- c.option "-d", "--default", "Set default version"
141
-
142
- c.action do |args, opts|
143
- Lyp::System.test_installed_status!
144
-
145
- begin
146
- version = args.first
147
- if version =~ /^lilypond@(.+)$/
148
- version = $1
149
- end
150
-
151
- lilypond = Lyp::Lilypond.use(version, opts.__hash__)
152
- puts "Using version #{lilypond[:version]}"
153
- end
154
- end
155
- end
156
-
157
- command :uninstall do |c|
158
- c.syntax = "uninstall <PACKAGE>"
159
- c.description = "Uninstall a package or version of lilypond"
160
-
161
- c.action do |args, opts|
162
- Lyp::System.test_installed_status!
163
-
164
- begin
165
- raise "No package specified" if args.empty?
166
-
167
- args.each do |package|
168
- case package
169
- when 'self'
170
- Lyp::System.uninstall!
171
- when /^lilypond(?:@(.+))?$/
172
- Lyp::System.test_installed_status!
173
- Lyp::Lilypond.uninstall($1)
174
- end
175
- end
176
- end
177
- end
178
- end