lyp 0.3.4 → 0.3.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: 330317c1be8c18c423a9ab6e7efc8819c6f07b8b
4
- data.tar.gz: cf364e9fa0ab5744da270cb696dfdacf25ef67a4
3
+ metadata.gz: e45125d6f5c577945a68e0f18d81d3202495a52c
4
+ data.tar.gz: 24379cc9ee854d468587469286a6c5e306e39f7e
5
5
  SHA512:
6
- metadata.gz: f9d7aa3b3ab28314f151cf845cf1bf8e8a7a94699dbe86b16cc6e1a363900575e666706ecb83cf3d7bea9b3d262a859f33813f3288d7c5a3198707aeea59dadf
7
- data.tar.gz: 8774a353b9fee6b96eb552b4eeaa0680d9097d82be0850bf9b1bb80c4f22358fcd2b0c1773a78b5acc32a6e71adf7fc607d20de3cf4c97106edc069a3dbcd89d
6
+ metadata.gz: 6201fa84a3a6f5458d5caf4f8cc85135def441229c8cebd8f32269496b8f8a49353edd50477961bac05376497710e3b196ae9eb4b47f8f6b97935d555c595f28
7
+ data.tar.gz: 74f2e49025ce8b1049e348c28666fc7d0181fc0a603066fcc994d49b47298b3b357c65576f8c43a8ebea3542d5c1bf34b48a890179451dfbfb44eaab41bda642
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- LYP_VERSION="0.3.4"
3
+ LYP_VERSION="0.3.5"
4
4
  WORKDIR="/tmp/lyp-release-installer"
5
5
  URL_BASE="https://github.com/noteflakes/lyp/releases/download/v$LYP_VERSION"
6
6
 
data/lib/lyp/base.rb CHANGED
@@ -25,12 +25,17 @@ module Lyp
25
25
  FONT_COPY_REQ = Gem::Requirement.new('>=2.18.2')
26
26
  FONT_PATCH_REQ = Gem::Requirement.new('>=2.18.2', '<2.19.12')
27
27
 
28
+ ETC_DIRECTORY = File.join(File.dirname(__FILE__), 'etc')
29
+
28
30
  # Font patch filename (required for 2.18.2 <= lilypond < 2.19.12)
29
- FONT_PATCH_FILENAME = File.expand_path('etc/font.scm', File.dirname(__FILE__))
31
+ FONT_PATCH_FILENAME = File.join(ETC_DIRECTORY, 'font.scm')
32
+
33
+ # File for detecting version and data dir of system-installed lilypond
34
+ DETECT_SYSTEM_LILYPOND_FILENAME = File.join(ETC_DIRECTORY, 'detect_system_lilypond.ly')
30
35
 
31
36
  # etc/lyp.ly contains lyp:* procedure definitions for loading packages and
32
37
  # other support code.
33
- LYP_LY_LIB_PATH = File.expand_path('etc/lyp.ly', File.dirname(__FILE__))
38
+ LYP_LY_LIB_PATH = File.join(ETC_DIRECTORY, 'lyp.ly')
34
39
 
35
40
  LILYPOND_NOT_FOUND_MSG = "No version of lilypond found.\nTo install lilypond run 'lyp install lilypond'"
36
41
 
@@ -57,5 +62,18 @@ module Lyp
57
62
  FileUtils.mkdir_p(dir) unless File.directory?(dir)
58
63
  dir
59
64
  end
65
+
66
+ def self.sudo_cp(src, dest)
67
+ cmd = "sudo cp #{src} #{dest}"
68
+ msg = `#{cmd}`
69
+ raise msg unless $?.success?
70
+ end
71
+
72
+ def self.confirm_action(prompt)
73
+ require 'readline'
74
+
75
+ response = Readline.readline(prompt)
76
+ ["y", "yes"].include?(response)
77
+ end
60
78
  end
61
79
 
data/lib/lyp/cli.rb CHANGED
@@ -219,7 +219,7 @@ class Lyp::CLI < Thor
219
219
  end
220
220
 
221
221
  lilypond = Lyp::Lilypond.use(version, options)
222
- puts "Using version #{lilypond[:version]}"
222
+ puts "Using lilypond version #{lilypond[:version]}"
223
223
  end
224
224
 
225
225
  desc "list [PATTERN|lilypond]", "List installed packages matching PATTERN or versions of lilypond"
@@ -0,0 +1,14 @@
1
+ % original code:
2
+ % https://github.com/openlilylib/oll-core/blob/master/internal/predicates.scm
3
+
4
+ #(begin
5
+ (define (lilypond-version-string)
6
+ (string-join
7
+ (map (lambda (elt) (if (integer? elt) (number->string elt) elt))
8
+ (ly:version))
9
+ "."))
10
+
11
+ (display (format "~a\n~a\n" (lilypond-version-string) (ly:get-option 'datadir)))
12
+ )
13
+
14
+
data/lib/lyp/lilypond.rb CHANGED
@@ -184,10 +184,10 @@ module Lyp::Lilypond
184
184
 
185
185
  list.inject([]) do |m, path|
186
186
  begin
187
- resp = `#{path} -v`
188
- if resp.lines.first =~ /LilyPond ([0-9\.]+)/i
189
- data_path = `#{path} -e"(display (ly:get-option 'datadir))" /dev/null 2>/dev/null`
190
-
187
+ resp = `#{path} #{Lyp::DETECT_SYSTEM_LILYPOND_FILENAME} 2>/dev/null`
188
+
189
+ if resp =~ /(.+)\n(.+)/
190
+ version, data_path = $1, $2
191
191
  m << {
192
192
  root_path: File.expand_path(File.join(File.dirname(path), '..')),
193
193
  data_path: data_path,
@@ -197,7 +197,7 @@ module Lyp::Lilypond
197
197
  }
198
198
  end
199
199
  rescue
200
- # ignore error
200
+ # ignore error, don't include this version in the list of lilyponds
201
201
  end
202
202
  m
203
203
  end
@@ -475,15 +475,38 @@ module Lyp::Lilypond
475
475
  target_fn = File.join(lyp_lilypond_share_dir(version), 'lilypond/current/scm/font.scm')
476
476
  FileUtils.cp(Lyp::FONT_PATCH_FILENAME, target_fn)
477
477
  end
478
+
479
+ SYSTEM_LILYPOND_PATCH_WARNING = <<-EOF.gsub(/^\s{6}/, '').chomp
480
+ The system-installed lilypond version %s needs to be patched in
481
+ order to support custom music fonts. This operation will replace the file
482
+
483
+ %s
484
+
485
+ Would you like to overwrite this file? (y/n):
486
+ EOF
478
487
 
479
- def patch_system_lilypond_font_scm(lilypond)
480
- return unless Lyp::FONT_PATCH_REQ =~ Gem::Version.new(lilypond[:version])
488
+ def patch_system_lilypond_font_scm(lilypond, opts)
489
+ return false unless Lyp::FONT_PATCH_REQ =~ Gem::Version.new(lilypond[:version])
481
490
 
482
491
  target_fn = File.join(lilypond[:data_path], '/scm/font.scm')
483
- puts "patch #{target_fn}"
484
- FileUtils.cp(Lyp::FONT_PATCH_FILENAME, target_fn)
485
- end
492
+ # do nothing if alredy patched
493
+ if IO.read(target_fn) == IO.read(Lyp::FONT_PATCH_FILENAME)
494
+ return true
495
+ end
486
496
 
497
+ prompt = SYSTEM_LILYPOND_PATCH_WARNING % [lilypond[:version], target_fn]
498
+ return unless Lyp.confirm_action(prompt)
499
+
500
+ puts "Patching #{target_fn}:" unless opts[:silent]
501
+ if File.writeable?(target_fn)
502
+ FileUtils.cp(target_fn, "#{target_fn}.old")
503
+ FileUtils.cp(Lyp::FONT_PATCH_FILENAME, target_fn)
504
+ else
505
+ Lyp.sudo_cp(target_fn, "#{target_fn}.old")
506
+ Lyp.sudo_cp(Lyp::FONT_PATCH_FILENAME, target_fn)
507
+ end
508
+ end
509
+
487
510
  def copy_fonts_from_all_packages(version, opts)
488
511
  return unless Lyp::FONT_COPY_REQ =~ Gem::Version.new(version)
489
512
 
data/lib/lyp/package.rb CHANGED
@@ -68,7 +68,6 @@ module Lyp::Package
68
68
  install_package_dependencies(info[:path], opts)
69
69
 
70
70
  if File.directory?(File.join(info[:path], 'fonts'))
71
- puts "Installing package fonts..." unless opts[:silent]
72
71
  install_package_fonts(info[:path], opts)
73
72
  end
74
73
 
@@ -269,35 +268,56 @@ module Lyp::Package
269
268
  end
270
269
  sub_deps.each {|d| install(d, opts)}
271
270
  end
271
+
272
+ SYSTEM_LILYPOND_PROMPT = <<-EOF.gsub(/^\s{6}/, '').chomp
273
+ Do you wish to install the package fonts on the system-installed lilypond
274
+ version %s (this might require sudo password)? (y/n):
275
+ EOF
272
276
 
273
277
  def install_package_fonts(package_path, opts = {})
278
+ puts "Installing package fonts..." unless opts[:silent]
279
+ available_on_versions = []
280
+
274
281
  req = Lyp::FONT_COPY_REQ
275
282
 
276
283
  Lyp::Lilypond.list.each do |lilypond|
277
284
  next unless req =~ Gem::Version.new(lilypond[:version])
278
-
285
+
286
+ if lilypond[:system]
287
+ next unless Lyp.confirm_action(SYSTEM_LILYPOND_PROMPT % lilypond[:version])
288
+ end
289
+
279
290
  ly_fonts_dir = File.join(lilypond[:data_path], 'fonts')
280
291
  package_fonts_dir = File.join(package_path, 'fonts')
281
292
 
282
293
  if lilypond[:system]
283
- Lyp::Lilypond.patch_system_lilypond_font_scm(lilypond)
284
- end
285
-
286
- Dir["#{package_fonts_dir}/*.otf"].each do |fn|
287
- target_fn = File.join(ly_fonts_dir, 'otf', File.basename(fn))
288
- FileUtils.cp(fn, target_fn)
289
- end
290
-
291
- Dir["#{package_fonts_dir}/*.svg"].each do |fn|
292
- target_fn = File.join(ly_fonts_dir, 'svg', File.basename(fn))
293
- FileUtils.cp(fn, target_fn)
294
+ if Lyp::Lilypond.patch_system_lilypond_font_scm(lilypond, opts)
295
+ available_on_versions << lilypond[:version]
296
+ end
297
+ else
298
+ available_on_versions << lilypond[:version]
294
299
  end
295
300
 
296
- Dir["#{package_fonts_dir}/*.woff"].each do |fn|
297
- target_fn = File.join(ly_fonts_dir, 'svg', File.basename(fn))
298
- FileUtils.cp(fn, target_fn)
301
+ Dir["#{package_fonts_dir}/*"].each do |fn|
302
+ target_fn = case File.extname(fn)
303
+ when '.otf'
304
+ File.join(ly_fonts_dir, 'otf', File.basename(fn))
305
+ when '.svg', '.woff'
306
+ File.join(ly_fonts_dir, 'svg', File.basename(fn))
307
+ end
308
+
309
+ if File.writable?(File.dirname(target_fn))
310
+ FileUtils.cp(fn, target_fn)
311
+ else
312
+ Lyp.sudo_cp(fn, target_fn)
313
+ end
299
314
  end
300
315
  end
316
+
317
+ unless opts[:silent]
318
+ puts "\nFonts available on lilypond #{available_on_versions.join(', ')}"
319
+ end
320
+
301
321
  end
302
322
 
303
323
  def package_git_url(package, search_index = true)
data/lib/lyp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lyp
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.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.3.4
4
+ version: 0.3.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-02-29 00:00:00.000000000 Z
11
+ date: 2016-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -100,6 +100,7 @@ files:
100
100
  - lib/lyp.rb
101
101
  - lib/lyp/base.rb
102
102
  - lib/lyp/cli.rb
103
+ - lib/lyp/etc/detect_system_lilypond.ly
103
104
  - lib/lyp/etc/font.scm
104
105
  - lib/lyp/etc/lyp.ly
105
106
  - lib/lyp/git_based_rugged.rb