lyp-win 0.3.8 → 0.3.9

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: d825136da4c3e2bd0a2210a15d72ef1fe52550fe
4
- data.tar.gz: 76479742a263932ee35c1189a9322c1eba6228fe
3
+ metadata.gz: c46b9613b42c79a59f83c26808a0027d7e384503
4
+ data.tar.gz: 4e47b76bf8c56b7493b19f26e1ccad8d0ffce5ac
5
5
  SHA512:
6
- metadata.gz: 18f12a5af72114378c619b5b52fe323c3b698751421bc857887b0fe40d1d1b0f98317f1beee3eb7b91e869ff9a99df8342504e55d109809002ad8a8e66e98d95
7
- data.tar.gz: 867f9110f70f15b6d0417344401425a8f4f6b018224649de4b1f39aa2c5ef1d49022456b174c46c451183fc9790b39edd514b20002fad62b7a82662c194dfda5
6
+ metadata.gz: caab1ccb0de4c9c399ddc856df9b70c661b567f610f81278245750c27854a0878d98726b3bde0f83b5a391ef406efe074484d0038fde5168e0ae3e3dbfcd728a
7
+ data.tar.gz: d74d7f3e4a9d15a11ed6abc21872c2f2b598fe3e271738023d818b01607f2033dec19aeb284738e5a9cf3150ada00a6f0bdca34c7cad8558d4979d59132eb01d
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- LYP_VERSION="0.3.7"
3
+ LYP_VERSION="0.3.9"
4
4
  WORKDIR="/tmp/lyp-release-installer"
5
5
  URL_BASE="https://github.com/noteflakes/lyp/releases/download/v$LYP_VERSION"
6
6
 
@@ -20,7 +20,7 @@ download() {
20
20
  fail "Could not find curl or wget"
21
21
  fi
22
22
  }
23
-
23
+
24
24
  PLATFORM=`uname -sp`
25
25
  case $PLATFORM in
26
26
  "Linux x86_64")
@@ -24,12 +24,15 @@ LILYPOND_HELP_SWITCHES = %w{
24
24
 
25
25
  LYP_LY_HELP = <<EOF
26
26
  Lyp-provided options:
27
+ -A, --auto-install-deps install any missing dependencies
27
28
  -c, --cropped crop output (requires setting 0 margins)
28
29
  -E, --env use version specified in $LILYPOND_VERSION
29
30
  -n, --install install the specified version if not found
30
31
  -O, --open open the target file after compilation
31
32
  -R, --raw run raw lilypond (no pre-processing)
32
33
  -r, --require=PACKAGE preload the specified package
34
+ -S, --snippet produce png cropped images at 600dpi
35
+ (--cropped --png -dresolution=600)
33
36
  -u, --use=VERSION use the given version of lilypond
34
37
  EOF
35
38
 
@@ -43,7 +46,19 @@ when *LILYPOND_HELP_SWITCHES
43
46
  puts `#{$lilypond_path} #{$argv.join(' ')}`
44
47
  puts LYP_LY_HELP unless $argv.first == '-dhelp'
45
48
  else
49
+ Lyp::Lilypond.check_update
46
50
  begin
51
+ if $options[:resolve] && $argv.last != '-'
52
+ resolver = Lyp::DependencyResolver.new($argv.last)
53
+ tree = resolver.compile_dependency_tree(ignore_missing: true)
54
+ tree.dependencies.each do |package, spec|
55
+ Lyp::Package.install(spec.clause) if spec.versions.empty?
56
+ end
57
+ end
58
+
47
59
  Lyp::Lilypond.compile($argv, $options)
60
+ rescue => e
61
+ puts e.message
62
+ puts e.backtrace.join("\n")
48
63
  end
49
64
  end
@@ -147,9 +147,18 @@ class Lyp::CLI < Thor
147
147
  desc "install <PACKAGE|lilypond|self>...", "Install a package or a version of lilypond. When 'install self' is invoked, lyp installs itself in ~/.lyp."
148
148
  method_option :default, aliases: '-d', type: :boolean, desc: 'Set default lilypond version'
149
149
  method_option :test, aliases: '-t', type: :boolean, desc: 'Run package tests after installation'
150
+ method_option :dev, type: :boolean, desc: 'Install local development package'
150
151
  def install(*args)
151
152
  $cmd_options = options
152
153
 
154
+ if options[:dev]
155
+ if args.empty?
156
+ args = ["#{File.basename(FileUtils.pwd)}@dev:."]
157
+ else
158
+ args = args.map {|a| "#{File.basename(File.expand_path(a))}@dev:#{a}"}
159
+ end
160
+ end
161
+
153
162
  raise "No package specified" if args.empty?
154
163
 
155
164
  args.each do |package|
@@ -34,6 +34,10 @@ module Lyp::Lilypond
34
34
  options[:open] = true
35
35
  when '-c', '--cropped'
36
36
  argv_clean += ['-dbackend=eps', '-daux-files=#f']
37
+ when '-S', '--snippet'
38
+ argv_clean += ['-dbackend=eps', '-daux-files=#f', '--png', '-dresolution=600']
39
+ when '-A', '--auto-install-deps'
40
+ options[:resolve] = true
37
41
  else
38
42
  argv_clean << arg
39
43
  end
@@ -316,6 +320,11 @@ module Lyp::Lilypond
316
320
  search.reverse.find {|l| Gem::Version.new(l[:version]).segments[1].odd?}[:version]
317
321
  end
318
322
 
323
+ def latest_installed_unstable_version
324
+ latest = list.reverse.find {|l| Gem::Version.new(l[:version]).segments[1].odd?}
325
+ latest ? latest[:version] : nil
326
+ end
327
+
319
328
  def latest_version
320
329
  search.last[:version]
321
330
  end
@@ -570,19 +579,17 @@ module Lyp::Lilypond
570
579
  ly_fonts_dir = File.join(lyp_lilypond_share_dir(version), 'lilypond/current/fonts')
571
580
 
572
581
  Dir["#{Lyp.packages_dir}/**/fonts"].each do |package_fonts_dir|
582
+ Dir["#{package_fonts_dir}/**/*"].each do |fn|
583
+ next unless File.file?(fn)
584
+ target_fn = case File.extname(fn)
585
+ when '.otf'
586
+ File.join(ly_fonts_dir, 'otf', File.basename(fn))
587
+ when '.svg', '.woff'
588
+ File.join(ly_fonts_dir, 'svg', File.basename(fn))
589
+ else
590
+ next
591
+ end
573
592
 
574
- Dir["#{package_fonts_dir}/*.otf"].each do |fn|
575
- target_fn = File.join(ly_fonts_dir, 'otf', File.basename(fn))
576
- FileUtils.cp(fn, target_fn)
577
- end
578
-
579
- Dir["#{package_fonts_dir}/*.svg"].each do |fn|
580
- target_fn = File.join(ly_fonts_dir, 'svg', File.basename(fn))
581
- FileUtils.cp(fn, target_fn)
582
- end
583
-
584
- Dir["#{package_fonts_dir}/*.woff"].each do |fn|
585
- target_fn = File.join(ly_fonts_dir, 'svg', File.basename(fn))
586
593
  FileUtils.cp(fn, target_fn)
587
594
  end
588
595
  end
@@ -675,5 +682,35 @@ module Lyp::Lilypond
675
682
  def parse_error_msg(msg)
676
683
  (msg =~ /[^\n]+: error.+failed files: ".+"/m) ? $& : msg
677
684
  end
685
+
686
+ CHECK_UPDATE_INTERVAL = 7 * 86400
687
+ CHECK_UPDATE_STAMP_KEY = 'lilypond/last_update_stamp'
688
+
689
+ UNSTABLE_UPDATE_MESSAGE = <<EOF
690
+ Lilypond version %s is now available. Install it by typing:
691
+
692
+ lyp install lilypond@unstable
693
+
694
+ EOF
695
+
696
+ def check_update
697
+ last_check = Lyp::Settings.get_value(
698
+ CHECK_UPDATE_STAMP_KEY, Time.now - CHECK_UPDATE_INTERVAL)
699
+
700
+ return unless last_check < Time.now - CHECK_UPDATE_INTERVAL
701
+
702
+ Lyp::Settings.set_value(CHECK_UPDATE_STAMP_KEY, Time.now)
703
+
704
+ # check unstable
705
+ installed = latest_installed_unstable_version
706
+ return unless installed
707
+
708
+ available = {version: latest_unstable_version}
709
+ installed = {version: installed}
710
+
711
+ if CMP_VERSION[available, installed] > 0
712
+ puts UNSTABLE_UPDATE_MESSAGE % available[:version]
713
+ end
714
+ end
678
715
  end
679
716
  end
@@ -298,7 +298,7 @@ module Lyp::Package
298
298
  available_on_versions << lilypond[:version]
299
299
  end
300
300
 
301
- Dir["#{package_fonts_dir}/*/**"].each do |fn|
301
+ Dir["#{package_fonts_dir}/**/*"].each do |fn|
302
302
  next unless File.file?(fn)
303
303
  target_fn = case File.extname(fn)
304
304
  when '.otf'
@@ -1,10 +1,11 @@
1
1
  module Lyp
2
2
  class DependencySpec
3
- attr_reader :clause, :versions
3
+ attr_reader :clause, :versions, :location
4
4
 
5
- def initialize(clause, versions = {})
5
+ def initialize(clause, versions, location = nil)
6
6
  @clause = clause
7
7
  @versions = versions.inject({}) {|m, kv| m[kv[0].to_s] = kv[1]; m}
8
+ @location = location
8
9
  end
9
10
 
10
11
  def add_version(version, leaf)
@@ -16,7 +17,7 @@ module Lyp
16
17
  end
17
18
 
18
19
  def hash
19
- {clase: clause, versions: versions}.hash
20
+ {clause: clause, versions: versions}.hash
20
21
  end
21
22
  end
22
23
 
@@ -28,6 +29,9 @@ module Lyp
28
29
  end
29
30
 
30
31
  def add_dependency(name, spec)
32
+ if @dependencies[name.to_s] && !spec.eql?(@dependencies[name.to_s])
33
+ DependencyResolver.error("Clause mismatch found in %s", spec.location)
34
+ end
31
35
  @dependencies[name.to_s] = spec
32
36
  end
33
37
 
@@ -110,7 +114,7 @@ module Lyp
110
114
  result = select_highest_versioned_permutation(permutations, user_deps).flatten
111
115
 
112
116
  if result.empty? && !tree.dependencies.empty?
113
- raise "Failed to satisfy dependency requirements"
117
+ error("Failed to satisfy dependency requirements")
114
118
  else
115
119
  result
116
120
  end
@@ -174,29 +178,33 @@ module Lyp
174
178
  dir = File.dirname(path)
175
179
 
176
180
  # Parse lilypond file for \include and \require
177
- ly_content.scan(DEP_RE) do |type, ref|
178
- case type
179
- when INCLUDE, PINCLUDE, PINCLUDE_ONCE
180
- process_include_command(ref, dir, leaf, opts)
181
- when REQUIRE
182
- process_require_command(ref, dir, leaf, opts)
181
+ location = {path: path, line: 0}
182
+ ly_content.each_line do |line|
183
+ location[:line] += 1
184
+ line.scan(DEP_RE) do |type, ref|
185
+ case type
186
+ when INCLUDE, PINCLUDE, PINCLUDE_ONCE
187
+ process_include_command(ref, dir, leaf, opts, location)
188
+ when REQUIRE
189
+ process_require_command(ref, dir, leaf, opts, location)
190
+ end
183
191
  end
184
192
  end
185
193
 
186
194
  # process any external requires (supplied using the -r command line option)
187
195
  if @ext_require
188
196
  @ext_require.each do |p|
189
- process_require_command(p, dir, leaf, opts)
197
+ process_require_command(p, dir, leaf, opts, {ext_require: true})
190
198
  end
191
199
  @ext_require = nil
192
200
  end
193
201
 
194
202
  @processed_files[path] = true
195
203
  rescue Errno::ENOENT
196
- raise "Cannot find file #{path}"
204
+ error("Could not find file #{path}")
197
205
  end
198
206
 
199
- def process_include_command(ref, dir, leaf, opts)
207
+ def process_include_command(ref, dir, leaf, opts, location)
200
208
  # a package would normally use a plain \pinclude or \pincludeOnce
201
209
  # command to include package files, e.g. \pinclude "inc/init.ly".
202
210
  #
@@ -209,10 +217,15 @@ module Lyp
209
217
  ref = $2
210
218
  end
211
219
  qualified_path = File.expand_path(ref, dir)
220
+
221
+ unless File.file?(qualified_path)
222
+ error("Invalid include file specified in %s", location)
223
+ end
224
+
212
225
  queue_file_for_processing(qualified_path, leaf)
213
226
  end
214
227
 
215
- def process_require_command(ref, dir, leaf, opts)
228
+ def process_require_command(ref, dir, leaf, opts, location)
216
229
  forced_path = nil
217
230
  if ref =~ /^([^\:]+)\:(.+)$/
218
231
  ref = $1
@@ -228,7 +241,7 @@ module Lyp
228
241
  set_forced_package_path(package, forced_path)
229
242
  end
230
243
 
231
- find_package_versions(ref, leaf)
244
+ find_package_versions(ref, leaf, location)
232
245
  end
233
246
 
234
247
  def queue_file_for_processing(path, leaf)
@@ -430,7 +443,7 @@ module Lyp
430
443
 
431
444
  # Find available packaging matching the package specifier, and queue them for
432
445
  # processing any include files or transitive dependencies.
433
- def find_package_versions(ref, leaf)
446
+ def find_package_versions(ref, leaf, location)
434
447
  return {} unless ref =~ Lyp::PACKAGE_RE
435
448
  ref_package = $1
436
449
  version_clause = $2
@@ -439,7 +452,8 @@ module Lyp
439
452
 
440
453
  # Raise if no match found and we're at top of the tree
441
454
  if matches.empty? && (leaf == tree) && !opts[:ignore_missing]
442
- raise "No package found for requirement #{ref}"
455
+ msg = "Missing package dependency #{ref} in %sYou can install any missing packages by running:\n\n lyp resolve #{@user_file}"
456
+ error(msg, location)
443
457
  end
444
458
 
445
459
  matches.each do |p, package_leaf|
@@ -449,7 +463,7 @@ module Lyp
449
463
  end
450
464
 
451
465
  # Setup up dependency leaf
452
- leaf.add_dependency(ref_package, DependencySpec.new(ref, matches))
466
+ leaf.add_dependency(ref_package, DependencySpec.new(ref, matches, location))
453
467
  end
454
468
 
455
469
  # Remove redundant older versions of dependencies by collating package
@@ -525,7 +539,7 @@ module Lyp
525
539
  end
526
540
  end
527
541
  if dependency.versions.empty? && raise_on_missing
528
- raise "No valid version found for package #{package}"
542
+ error("No valid version found for package #{package}")
529
543
  end
530
544
  end
531
545
  end
@@ -537,5 +551,30 @@ module Lyp
537
551
  available_packages["#{package}@forced"] = DependencyPackage.new(
538
552
  File.join(path, MAIN_PACKAGE_FILE))
539
553
  end
554
+
555
+ def error(msg, location = nil)
556
+ DependencyResolver.error(msg, location)
557
+ end
558
+
559
+ def self.error(msg, location = nil)
560
+ location = location ? format_location(location) : nil
561
+ raise ResolveError, msg % location
562
+ end
563
+
564
+ def self.format_location(location)
565
+ return "" unless location
566
+ return "require flag" if location[:ext_require]
567
+ source_line = get_source_line(location[:path], location[:line])
568
+ "#{location[:path]}:#{location[:line]}: \n\n #{source_line}\n"
569
+ end
570
+
571
+ def self.get_source_line(path, line)
572
+ IO.read(path).lines[line - 1]
573
+ rescue => e
574
+ "???"
575
+ end
540
576
  end
541
577
  end
578
+
579
+ class ResolveError < RuntimeError
580
+ end
@@ -2,36 +2,43 @@ require 'yaml'
2
2
 
3
3
  module Lyp::Settings
4
4
  class << self
5
- def get
6
- YAML.load(IO.read(Lyp.settings_file)) rescue {}
5
+ def load
6
+ @settings = YAML.load(IO.read(Lyp.settings_file)) rescue {}
7
7
  end
8
-
9
- def set(o)
10
- File.open(Lyp.settings_file, 'w+') {|f| f << YAML.dump(o)}
8
+
9
+ def save
10
+ File.open(Lyp.settings_file, 'w+') {|f| f << YAML.dump(@settings)}
11
11
  end
12
-
12
+
13
13
  def [](path)
14
- h = get
14
+ h = load
15
15
  while path =~ /^([^\/]+)\/(.+)$/
16
16
  h = h[$1.to_sym] ||= {}
17
17
  path = $2
18
18
  end
19
-
19
+
20
20
  h[path.to_sym]
21
21
  end
22
-
22
+
23
23
  def []=(path, value)
24
- h = settings = get
24
+ h = load
25
25
  while path =~ /^([^\/]+)\/(.+)$/
26
26
  h = h[$1.to_sym] ||= {}
27
27
  path = $2
28
28
  end
29
-
29
+
30
30
  h[path.to_sym] = value
31
-
32
- set(settings)
33
-
31
+ save
34
32
  value
35
33
  end
34
+
35
+ def get_value(path, default = nil)
36
+ v = self[path]
37
+ v ? YAML.load(v) : default
38
+ end
39
+
40
+ def set_value(path, value)
41
+ self[path] = YAML.dump(value)
42
+ end
36
43
  end
37
- end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module Lyp
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lyp-win
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.3.9
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-06-14 00:00:00.000000000 Z
11
+ date: 2016-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient