lyp 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +195 -5
- data/bin/install_release.sh +10 -1
- data/lib/lyp.rb +16 -15
- data/lib/lyp/cli.rb +214 -148
- data/lib/lyp/lilypond.rb +6 -0
- data/lib/lyp/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdcd618c84a8c0ec5925b02d2e05fb62ee438f63
|
4
|
+
data.tar.gz: dda515b6fb0fc79f7ee868100323ff19a40d9742
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52a2954b3b7456fcda5e1d4e729e235c6c7aca2505b3f82d55e3ff467332b3a2094792db66783fd0d7fb4cefe28f02c21848c45ce2466d22dba057bc1e42232f
|
7
|
+
data.tar.gz: c9c533504e0a696bf0b7dfc6bbf5cbb2eabe9345a35ece672385340b9c0dea2c9840e15c3259a9370f84cfc371689c4f2e620aaffb312c1428f3cd30223979b2
|
data/README.md
CHANGED
@@ -38,27 +38,46 @@ __No hassle Lilypond installation__: With lyp you can also install any version o
|
|
38
38
|
- [Testing packages](#testing-packages)
|
39
39
|
- [Publishing packages](#publishing-packages)
|
40
40
|
- [Installing and Using Lilypond](#installing-and-using-lilypond)
|
41
|
-
- [Installing/uninstalling a version of Lilypond](#
|
41
|
+
- [Installing/uninstalling a version of Lilypond](#installinguninstalling-a-version-of-lilypond)
|
42
42
|
- [Showing the list of installed Lilypond versions](#showing-the-list-of-installed-lilypond-versions)
|
43
43
|
- [Showing available Lilypond versions](#Showing-available-lilypond-versions)
|
44
44
|
- [Switching between Lilypond versions](#switching-between-lilypond-versions)
|
45
45
|
- [Running Lilypond](#running-lilypond)
|
46
|
+
- [Command Reference](#command-reference)
|
47
|
+
- [lyp accelerate](#lyp-accelerate) - rewrite gem binaries for faster execution
|
48
|
+
- [lyp benchmark](#lyp-benchmark) - benchmark installed versions of Lilypnd
|
49
|
+
- [lyp cleanup](#lyp-cleanup) - cleanup temporary files
|
50
|
+
- [lyp compile](#lyp-compile) - compile Lilypond source files
|
51
|
+
- [lyp deps](#lyp-deps) - show dependencies for a given source file
|
52
|
+
- [lyp exec](#lyp-exec) - execute a Lilypond script
|
53
|
+
- [lyp flatten](#lyp-flatten) - flatten a Lilypond project by inlining includes
|
54
|
+
- [lyp install](#lyp-install) - install package or Lilypond
|
55
|
+
- [lyp list](#lyp-list) - list installed packages or Lilyponds
|
56
|
+
- [lyp resolve](#lyp-resolve) - resolve and install dependencies for a given source file
|
57
|
+
- [lyp search](#lyp-search) - search for packages or Lilyponds
|
58
|
+
- [lyp test](#lyp-test) - run Lilypond test files
|
59
|
+
- [lyp uninstall](#lyp-uninstall) - uninstall packages or Lilyponds
|
60
|
+
- [lyp update](#lyp-update) - update packages
|
61
|
+
- [lyp use](#lyp-use) - switch between installed Lilyponds
|
62
|
+
- [lyp version](#lyp-version) - show lyp version
|
63
|
+
- [lyp watch](#lyp-watch) - watch files and directories and recompile on change
|
64
|
+
- [lyp which](#lyp-which) - show location of packages or Lilyponds
|
46
65
|
- [Contributing](#contributing)
|
47
66
|
|
48
67
|
## Installation
|
49
68
|
|
50
69
|
### System requirements
|
51
70
|
|
52
|
-
Lyp is tested to work on Linux,
|
71
|
+
Lyp is tested to work on Linux, macOS and Windows 7+.
|
53
72
|
|
54
73
|
### Installing lyp as a Ruby gem
|
55
74
|
|
56
|
-
_Note_: A recent version of Ruby (2.0.0 or later) is included in
|
75
|
+
_Note_: A recent version of Ruby (2.0.0 or later) is included in macOS 10.9.0 or later.
|
57
76
|
|
58
77
|
If you have a recent (>=1.9.3) version of Ruby on your machine, you can install lyp as a gem.
|
59
78
|
|
60
79
|
```bash
|
61
|
-
# Linux/
|
80
|
+
# Linux/macOS:
|
62
81
|
$ gem install lyp
|
63
82
|
|
64
83
|
# Windows:
|
@@ -88,7 +107,7 @@ Windows users can simply download the latest Windows [release](https://github.co
|
|
88
107
|
|
89
108
|
### Manually installing releases
|
90
109
|
|
91
|
-
(This section is for Linux /
|
110
|
+
(This section is for Linux / macOS users.)
|
92
111
|
|
93
112
|
If you feel uneasy about piping curl output to bash, you can install lyp yourself by downloading a [release](https://github.com/noteflakes/lyp/releases), untarring it, and running `lyp install self`:
|
94
113
|
|
@@ -575,6 +594,177 @@ Once one or more versions of Lilypond are installed, the Lilypond command may be
|
|
575
594
|
$ lilypond --ulatest myfile.ly
|
576
595
|
```
|
577
596
|
|
597
|
+
## Command Reference
|
598
|
+
|
599
|
+
### lyp accelerate
|
600
|
+
|
601
|
+
Synopsis: `lyp accelerate`
|
602
|
+
|
603
|
+
__Power users__: rewrite gem binaries for faster execution. When lyp is installed as a gem, the Rubygems system creates wrapper script files for `lyp` and `lilypond` which incur a performance penalty that adds up to 200msecs per invocation. Use this command to rewrite the gem binaries so as to improve their running time.
|
604
|
+
|
605
|
+
### lyp benchmark
|
606
|
+
|
607
|
+
Synopsis: `lyp benchmark FILE`
|
608
|
+
|
609
|
+
__Power users__: benchmark the running time of all installed versions of Lilypond using the given source file. This command accepts all Lilypond command line switches.
|
610
|
+
|
611
|
+
### lyp cleanup
|
612
|
+
|
613
|
+
Synopsis: `lyp cleanup`
|
614
|
+
|
615
|
+
Cleanup temporary files. lyp keeps a bunch of temporary directories and files under the system temporary directory, usually at `/tmp/lyp`. These include wrapper files, git repositories for installed packages, Lilypond archive files etc. These will normally be cleaned up by the OS after a period of time, but you can use this command to delete the entire content of this directory if you need the disk space.
|
616
|
+
|
617
|
+
### lyp compile
|
618
|
+
|
619
|
+
Synopsis: `lyp compile ... FILE`
|
620
|
+
|
621
|
+
Shorthand: `lyp c`
|
622
|
+
|
623
|
+
Compiles Lilypond source files. This command is synonymous to running `lilypond`. You can pass along any switches accepted by Lilypond. In addition, lyp adds a few options to provide additional functionality:
|
624
|
+
|
625
|
+
- `--auto-install-deps`/`-a`: install any missing dependencies
|
626
|
+
- `--cropped`/`-c`: crop output (requires setting 0 margins)
|
627
|
+
- `--env`/`-E`: use the Lilypond version specified in the `LILYPOND_VERSION` environment variable:
|
628
|
+
|
629
|
+
```bash
|
630
|
+
$ LILYPOND_VERSION=2.19.50 lyp c mysuperscore.ly
|
631
|
+
```
|
632
|
+
|
633
|
+
- `--force-version`/`-F`: use Lilypond version specified in user file
|
634
|
+
- `--install`/`-n`: install version of Lilypond if not found (if the required version was overriden using any of `--env`, `--force-version` or `--use`)
|
635
|
+
- `--open`/`-O`: open output file after compilation
|
636
|
+
- `--raw`/`-R`: run Lilypond "raw" (no pre-processing of dependencies)
|
637
|
+
- `--require=PACKAGE`/`-rPACKAGE`: preload the specified package
|
638
|
+
|
639
|
+
```bash
|
640
|
+
$ lyp -rassert mytests.ly
|
641
|
+
```
|
642
|
+
|
643
|
+
- `--snippet`/`-S`: produce png cropped images at 600dpi (equivalent to `--cropped --png -dresolution=600`)
|
644
|
+
- `--use=VERSION`/`-uVERSION`: use the given version of Lilypond:
|
645
|
+
|
646
|
+
```bash
|
647
|
+
$ lyp c -u2.19.53 myfile.ly
|
648
|
+
# automatically install given version of Lilypond
|
649
|
+
$ lyp c -nu2.19.53 myfile.ly
|
650
|
+
```
|
651
|
+
|
652
|
+
### lyp deps
|
653
|
+
|
654
|
+
Synopsis: `lyp deps FILE`
|
655
|
+
|
656
|
+
Shows dependencies for a given source file.
|
657
|
+
|
658
|
+
### lyp exec
|
659
|
+
|
660
|
+
Synopsis: `lyp exec SCRIPT ...`
|
661
|
+
|
662
|
+
Shorthand: `lyp x`
|
663
|
+
|
664
|
+
Runs a Lilypond script (using the currently selected version of Lilypond).
|
665
|
+
|
666
|
+
### lyp flatten
|
667
|
+
|
668
|
+
Synopsis: `lyp flatten FILE`
|
669
|
+
|
670
|
+
Flattens a source file and all included files into a single file.
|
671
|
+
|
672
|
+
### lyp install
|
673
|
+
|
674
|
+
Synopsis: `lyp install PACKAGE|lilypond@VERSION`
|
675
|
+
|
676
|
+
Shorthand: `lyp i`
|
677
|
+
|
678
|
+
Installs a package or a Lilypond. See [installing packages](#installing-packages) and [installing versions of Lilypond](#installing-and-using-lilypond) above.
|
679
|
+
|
680
|
+
### lyp list
|
681
|
+
|
682
|
+
Synopsis: `lyp list [PACKAGE|lilypond]`
|
683
|
+
|
684
|
+
Shorthand: `lyp l`
|
685
|
+
|
686
|
+
Lists installed packages or Lilyponds.
|
687
|
+
|
688
|
+
### lyp resolve
|
689
|
+
|
690
|
+
Synopsis: `lyp resolve FILE``
|
691
|
+
|
692
|
+
Resolves and optionally installs all dependencies for a given source file. To install required dependencies use the `--all`/`-a` switch:
|
693
|
+
|
694
|
+
```bash
|
695
|
+
$ lyp resolve -a myfile.ly
|
696
|
+
```
|
697
|
+
|
698
|
+
### lyp search
|
699
|
+
|
700
|
+
Synopsis: `lyp search PACKAGE|lilypond``
|
701
|
+
|
702
|
+
Shorthand: `lyp s`
|
703
|
+
|
704
|
+
Searches for packages or versions of Lilypond.
|
705
|
+
|
706
|
+
### lyp test
|
707
|
+
|
708
|
+
Synopsis: `lyp test DIRECTORY`
|
709
|
+
|
710
|
+
Shorthand: `lyp t`
|
711
|
+
|
712
|
+
Runs Lilypond tests by compiling all files in the given directory matching the pattern `*-test.ly`.
|
713
|
+
|
714
|
+
### lyp uninstall
|
715
|
+
|
716
|
+
Synopsis: `lyp uninstall PACKAGE|lilypond@VERSION`
|
717
|
+
|
718
|
+
Shorthand: `lyp u`
|
719
|
+
|
720
|
+
Uninstalls a package or a Lilypond.
|
721
|
+
|
722
|
+
### lyp update
|
723
|
+
|
724
|
+
Synopsis: `lyp update PACKAGE`
|
725
|
+
|
726
|
+
Updates an installed package to its latest available version.
|
727
|
+
|
728
|
+
### lyp use
|
729
|
+
|
730
|
+
Synopsis: `lyp use VERSION``
|
731
|
+
|
732
|
+
Shorthand: `lyp U`
|
733
|
+
|
734
|
+
Switches to a different version of Lilypond. To set the default version, use the `--default` switch:
|
735
|
+
|
736
|
+
```bash
|
737
|
+
$ lyp use --default 2.19.52
|
738
|
+
```
|
739
|
+
|
740
|
+
### lyp version
|
741
|
+
|
742
|
+
Synopsis: `lyp version``
|
743
|
+
|
744
|
+
Shorthand: `lyp -v``
|
745
|
+
|
746
|
+
Displays the version of lyp.
|
747
|
+
|
748
|
+
### lyp watch
|
749
|
+
|
750
|
+
Synopsis: `lyp watch DIRECTORY|FILE...``
|
751
|
+
|
752
|
+
Shorthand: `lyp w`
|
753
|
+
|
754
|
+
Watches one or more directories or files and recompiles any files that have been modified. To watch a directory of include files and always recompile the same project file, use the `--target`/`-t` switch:
|
755
|
+
|
756
|
+
```bash
|
757
|
+
$ lyp watch bwv35 --target bwv35/score.ly
|
758
|
+
```
|
759
|
+
|
760
|
+
This command accepts all Lilypond command line switches.
|
761
|
+
|
762
|
+
### lyp which
|
763
|
+
|
764
|
+
Synopsis: `lyp which PACKAGE|lilypond`
|
765
|
+
|
766
|
+
Shows the location of the given package or the currently selected Lilypond.
|
767
|
+
|
578
768
|
## Contributing
|
579
769
|
|
580
770
|
Lyp is written in Ruby, and its code is [available on github](https://github.com/noteflakes/lyp). To hack on it, simply clone the repository. To run the specs:
|
data/bin/install_release.sh
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
#!/usr/bin/env bash
|
2
2
|
|
3
|
-
|
3
|
+
echo "Detecting latest lyp version..."
|
4
|
+
LATEST_RELEASE=`curl -s https://github.com/noteflakes/lyp/releases/latest`
|
5
|
+
VERSION_REGEX="tag/v([0-9\.]+)"
|
6
|
+
if [[ $LATEST_RELEASE =~ $VERSION_REGEX ]]
|
7
|
+
then
|
8
|
+
LYP_VERSION="${BASH_REMATCH[1]}"
|
9
|
+
else
|
10
|
+
echo "Could not get latest version from GitHub."
|
11
|
+
fi
|
12
|
+
|
4
13
|
WORKDIR="/tmp/lyp-release-installer"
|
5
14
|
URL_BASE="https://github.com/noteflakes/lyp/releases/download/v$LYP_VERSION"
|
6
15
|
|
data/lib/lyp.rb
CHANGED
@@ -1,23 +1,24 @@
|
|
1
|
-
def req_int(f)
|
2
|
-
require File.expand_path("lyp/#{f}", File.dirname(__FILE__))
|
3
|
-
end
|
4
|
-
|
5
1
|
module Kernel
|
6
2
|
@@ext_requires = {}
|
7
3
|
def req_ext(l)
|
8
4
|
@@ext_requires[l] ||= require(l)
|
9
5
|
end
|
10
|
-
end
|
11
6
|
|
12
|
-
|
13
|
-
req_int
|
14
|
-
|
7
|
+
LYP_RB_DIR = File.expand_path("lyp", File.dirname(__FILE__))
|
8
|
+
def req_int(f)
|
9
|
+
require File.join(LYP_RB_DIR, f)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Kernel.req_int 'base'
|
14
|
+
Kernel.req_int 'system'
|
15
|
+
Kernel.req_int 'settings'
|
15
16
|
|
16
|
-
req_int 'template'
|
17
|
-
req_int 'resolver'
|
18
|
-
req_int 'wrapper'
|
19
|
-
req_int 'package'
|
20
|
-
req_int 'lilypond'
|
21
|
-
req_int 'transform'
|
17
|
+
Kernel.req_int 'template'
|
18
|
+
Kernel.req_int 'resolver'
|
19
|
+
Kernel.req_int 'wrapper'
|
20
|
+
Kernel.req_int 'package'
|
21
|
+
Kernel.req_int 'lilypond'
|
22
|
+
Kernel.req_int 'transform'
|
22
23
|
|
23
|
-
req_int 'windows' if Lyp::WINDOWS
|
24
|
+
Kernel.req_int 'windows' if Lyp::WINDOWS
|
data/lib/lyp/cli.rb
CHANGED
@@ -43,29 +43,20 @@ $cmd_options = {}
|
|
43
43
|
|
44
44
|
class Lyp::CLI < Thor
|
45
45
|
package_name "lyp"
|
46
|
-
map "-v" => :version
|
47
|
-
|
46
|
+
map "-v" => :version,
|
47
|
+
"c" => :compile,
|
48
|
+
"i" => :install,
|
49
|
+
"l" => :list,
|
50
|
+
"s" => :search,
|
51
|
+
"t" => :test,
|
52
|
+
"u" => :uninstall,
|
53
|
+
"U" => :use,
|
54
|
+
"w" => :watch,
|
55
|
+
"x" => :exec
|
56
|
+
|
57
|
+
check_unknown_options! :except => [:compile, :watch, :benchmark]
|
48
58
|
class_option :verbose, aliases: '-V', :type => :boolean, desc: 'show verbose output'
|
49
59
|
|
50
|
-
desc "version", "show Lyp version"
|
51
|
-
def version
|
52
|
-
$stderr.puts "Lyp #{Lyp::VERSION}"
|
53
|
-
end
|
54
|
-
|
55
|
-
desc "search [PATTERN|lilypond]", "List available packages matching PATTERN or versions of lilypond"
|
56
|
-
def search(pattern = '')
|
57
|
-
$cmd_options = options
|
58
|
-
|
59
|
-
pattern =~ Lyp::PACKAGE_RE
|
60
|
-
package, version = $1, $2
|
61
|
-
|
62
|
-
if package == 'lilypond'
|
63
|
-
search_lilypond(version)
|
64
|
-
else
|
65
|
-
search_package(pattern)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
60
|
no_commands do
|
70
61
|
def search_lilypond(version)
|
71
62
|
versions = Lyp::Lilypond.search(version)
|
@@ -99,17 +90,68 @@ class Lyp::CLI < Thor
|
|
99
90
|
end
|
100
91
|
end
|
101
92
|
|
102
|
-
desc "
|
93
|
+
desc "accelerate", "Rewrite gem binaries to make lyp faster"
|
94
|
+
def accelerate
|
95
|
+
unless Lyp::System.is_gem?
|
96
|
+
puts "Lyp is not installed as a gem."
|
97
|
+
exit 1
|
98
|
+
end
|
99
|
+
|
100
|
+
Lyp::System.rewrite_gem_scripts
|
101
|
+
end
|
102
|
+
|
103
|
+
desc "benchmark FILE", "Benchmark all installed versions of Lilypond"
|
104
|
+
def benchmark(*argv)
|
105
|
+
list = Lyp::Lilypond.list
|
106
|
+
if list.empty?
|
107
|
+
puts Lyp::LILYPOND_NOT_FOUND_MSG
|
108
|
+
else
|
109
|
+
list.each do |info|
|
110
|
+
Lyp::Lilypond.force_version!(info[:version])
|
111
|
+
t1 = Time.now
|
112
|
+
compile("--invoke-quiet", *argv)
|
113
|
+
t2 = Time.now
|
114
|
+
puts "%-7s: %.3gs" % [info[:version], t2-t1]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
desc "cleanup", "Cleanup temporary files"
|
120
|
+
def cleanup
|
121
|
+
$stderr.puts "Lyp #{Lyp::VERSION}"
|
122
|
+
Dir["#{Lyp::TMP_ROOT}/*"].each do |fn|
|
123
|
+
puts "Cleaning up #{fn}"
|
124
|
+
FileUtils.rm_rf(fn)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
desc "compile [<option>...] <FILE>", "compile given file Lilypond source file"
|
103
129
|
def compile(*argv)
|
104
130
|
opts, argv = Lyp::Lilypond.preprocess_argv(argv)
|
105
131
|
|
106
132
|
lilypond_path = Lyp::Lilypond.select_lilypond_version(opts, argv.last)
|
107
133
|
|
108
|
-
$stderr.puts "Lyp #{Lyp::VERSION}"
|
134
|
+
$stderr.puts "Lyp #{Lyp::VERSION}" unless opts[:mode] == :quiet
|
109
135
|
Lyp::System.test_installed_status!
|
110
136
|
Lyp::Lilypond.compile(argv, opts)
|
111
137
|
end
|
112
138
|
|
139
|
+
desc "deps FILE", "List dependencies found in user's files"
|
140
|
+
def deps(fn)
|
141
|
+
$cmd_options = options
|
142
|
+
|
143
|
+
resolver = Lyp::DependencyResolver.new(fn)
|
144
|
+
tree = resolver.compile_dependency_tree(ignore_missing: true)
|
145
|
+
tree.dependencies.each do |package, spec|
|
146
|
+
versions = spec.versions.keys.map {|k| k =~ Lyp::PACKAGE_RE; $2 }.sort
|
147
|
+
if versions.empty?
|
148
|
+
puts " #{spec.clause} => (no local version found)"
|
149
|
+
else
|
150
|
+
puts " #{spec.clause} => #{versions.join(', ')}"
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
113
155
|
desc "exec <CMD> [<options>...]", "Execute a lilypond script"
|
114
156
|
def exec(*argv)
|
115
157
|
$stderr.puts "Lyp #{Lyp::VERSION}"
|
@@ -117,38 +159,15 @@ class Lyp::CLI < Thor
|
|
117
159
|
Lyp::Lilypond.invoke_script(argv, {})
|
118
160
|
end
|
119
161
|
|
120
|
-
desc "
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
if test_opts[:env]
|
129
|
-
unless ENV['LILYPOND_VERSION']
|
130
|
-
STDERR.puts "$LILYPOND_VERSION not set"
|
131
|
-
exit 1
|
132
|
-
end
|
133
|
-
test_opts[:use] = ENV['LILYPOND_VERSION']
|
134
|
-
end
|
135
|
-
|
136
|
-
if test_opts[:use]
|
137
|
-
if test_opts[:install]
|
138
|
-
Lyp::Lilypond.install_if_missing(test_opts[:use], no_version_test: true)
|
139
|
-
end
|
140
|
-
Lyp::Lilypond.force_version!(test_opts[:use])
|
141
|
-
end
|
142
|
-
|
143
|
-
# check lilypond default / current settings
|
144
|
-
Lyp::Lilypond.check_lilypond!
|
145
|
-
|
146
|
-
$stderr.puts "Lyp #{Lyp::VERSION}"
|
147
|
-
case args
|
148
|
-
when ['.']
|
149
|
-
Lyp::Package.run_local_tests('.')
|
162
|
+
desc "flatten FILE", "Flatten a file and included files into a single output file"
|
163
|
+
def flatten(input_path, output_path = nil)
|
164
|
+
input_path = File.expand_path(input_path)
|
165
|
+
output_path = File.expand_path(output_path) if output_path
|
166
|
+
flat = Lyp::Transform.flatten(input_path)
|
167
|
+
if output_path
|
168
|
+
File.open(output_path, 'w+') {|f| f << flat}
|
150
169
|
else
|
151
|
-
|
170
|
+
puts flat
|
152
171
|
end
|
153
172
|
end
|
154
173
|
|
@@ -184,50 +203,6 @@ class Lyp::CLI < Thor
|
|
184
203
|
end
|
185
204
|
end
|
186
205
|
|
187
|
-
desc "update <PACKAGE>...", "Install a package after removing all previous versions"
|
188
|
-
method_option :default, aliases: '-d', type: :boolean, desc: 'Set default Lilypond version'
|
189
|
-
method_option :test, aliases: '-t', type: :boolean, desc: 'Run package tests after installation'
|
190
|
-
def update(*args)
|
191
|
-
invoke 'install', args, options.merge(update: true)
|
192
|
-
end
|
193
|
-
|
194
|
-
desc "uninstall <PACKAGE|lilypond|self>...", "Uninstall a package or a version of Lilypond. When 'uninstall self' is invoked, lyp uninstalls itself from ~/.lyp."
|
195
|
-
method_option :all, aliases: '-a', type: :boolean, desc: 'Uninstall all versions'
|
196
|
-
def uninstall(*args)
|
197
|
-
$cmd_options = options
|
198
|
-
|
199
|
-
Lyp::System.test_installed_status!
|
200
|
-
|
201
|
-
raise "No package specified" if args.empty?
|
202
|
-
args.each do |package|
|
203
|
-
case package
|
204
|
-
when 'self'
|
205
|
-
Lyp::System.uninstall!
|
206
|
-
when Lyp::LILYPOND_RE
|
207
|
-
Lyp::System.test_installed_status!
|
208
|
-
Lyp::Lilypond.uninstall($1, options)
|
209
|
-
else
|
210
|
-
Lyp::System.test_installed_status!
|
211
|
-
Lyp::Package.uninstall(package, options)
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
desc "use [lilypond@]<VERSION>", "Switch version of Lilypond"
|
217
|
-
method_option :default, aliases: '-d', type: :boolean, desc: 'Set default Lilypond version'
|
218
|
-
def use(version)
|
219
|
-
$cmd_options = options
|
220
|
-
|
221
|
-
Lyp::System.test_installed_status!
|
222
|
-
|
223
|
-
if version =~ Lyp::LILYPOND_RE
|
224
|
-
version = $1
|
225
|
-
end
|
226
|
-
|
227
|
-
lilypond = Lyp::Lilypond.use(version, options)
|
228
|
-
puts "Using Lilypond version #{lilypond[:version]}"
|
229
|
-
end
|
230
|
-
|
231
206
|
desc "list [PATTERN|lilypond]", "List installed packages matching PATTERN or versions of Lilypond"
|
232
207
|
def list(pattern = nil)
|
233
208
|
$cmd_options = options
|
@@ -265,83 +240,174 @@ class Lyp::CLI < Thor
|
|
265
240
|
end
|
266
241
|
end
|
267
242
|
|
268
|
-
desc "
|
269
|
-
|
243
|
+
desc "resolve FILE", "Resolve and install missing dependencies found in user's files"
|
244
|
+
method_option :all, aliases: '-a', type: :boolean, desc: 'Install all found dependencies'
|
245
|
+
def resolve(fn)
|
270
246
|
$cmd_options = options
|
271
247
|
|
272
|
-
Lyp::
|
248
|
+
resolver = Lyp::DependencyResolver.new(fn)
|
249
|
+
tree = resolver.compile_dependency_tree(ignore_missing: true)
|
250
|
+
tree.dependencies.each do |package, spec|
|
251
|
+
if options[:all] || spec.versions.empty?
|
252
|
+
Lyp::Package.install(spec.clause)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
273
256
|
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
257
|
+
desc "search [PATTERN|lilypond]", "List available packages matching PATTERN or versions of lilypond"
|
258
|
+
def search(pattern = '')
|
259
|
+
$cmd_options = options
|
260
|
+
|
261
|
+
pattern =~ Lyp::PACKAGE_RE
|
262
|
+
package, version = $1, $2
|
263
|
+
|
264
|
+
if package == 'lilypond'
|
265
|
+
search_lilypond(version)
|
266
|
+
else
|
267
|
+
search_package(pattern)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
desc "test [<option>...] [.|PATTERN]", "Run package tests on installed packages or local directory"
|
272
|
+
method_option :install, aliases: '-n', type: :boolean, desc: 'Install the requested version of Lilypond if not present'
|
273
|
+
method_option :env, aliases: '-E', type: :boolean, desc: 'Use version set by LILYPOND_VERSION environment variable'
|
274
|
+
method_option :use, aliases: '-u', type: :string, desc: 'Use specified version'
|
275
|
+
def test(*args)
|
276
|
+
$cmd_options = options
|
277
|
+
test_opts = options.dup
|
278
|
+
|
279
|
+
if test_opts[:env]
|
280
|
+
unless ENV['LILYPOND_VERSION']
|
281
|
+
STDERR.puts "$LILYPOND_VERSION not set"
|
282
|
+
exit 1
|
280
283
|
end
|
284
|
+
test_opts[:use] = ENV['LILYPOND_VERSION']
|
285
|
+
end
|
286
|
+
|
287
|
+
if test_opts[:use]
|
288
|
+
if test_opts[:install]
|
289
|
+
Lyp::Lilypond.install_if_missing(test_opts[:use], no_version_test: true)
|
290
|
+
end
|
291
|
+
Lyp::Lilypond.force_version!(test_opts[:use])
|
292
|
+
end
|
293
|
+
|
294
|
+
# check lilypond default / current settings
|
295
|
+
Lyp::Lilypond.check_lilypond!
|
296
|
+
|
297
|
+
$stderr.puts "Lyp #{Lyp::VERSION}"
|
298
|
+
case args
|
299
|
+
when ['.']
|
300
|
+
Lyp::Package.run_local_tests('.')
|
281
301
|
else
|
282
|
-
Lyp::Package.
|
302
|
+
Lyp::Package.run_package_tests(args)
|
283
303
|
end
|
284
304
|
end
|
285
305
|
|
286
|
-
desc "
|
287
|
-
|
306
|
+
desc "uninstall <PACKAGE|lilypond|self>...", "Uninstall a package or a version of Lilypond. When 'uninstall self' is invoked, lyp uninstalls itself from ~/.lyp."
|
307
|
+
method_option :all, aliases: '-a', type: :boolean, desc: 'Uninstall all versions'
|
308
|
+
def uninstall(*args)
|
288
309
|
$cmd_options = options
|
289
310
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
311
|
+
Lyp::System.test_installed_status!
|
312
|
+
|
313
|
+
raise "No package specified" if args.empty?
|
314
|
+
args.each do |package|
|
315
|
+
case package
|
316
|
+
when 'self'
|
317
|
+
Lyp::System.uninstall!
|
318
|
+
when Lyp::LILYPOND_RE
|
319
|
+
Lyp::System.test_installed_status!
|
320
|
+
Lyp::Lilypond.uninstall($1, options)
|
296
321
|
else
|
297
|
-
|
322
|
+
Lyp::System.test_installed_status!
|
323
|
+
Lyp::Package.uninstall(package, options)
|
298
324
|
end
|
299
325
|
end
|
300
326
|
end
|
301
327
|
|
302
|
-
desc "
|
303
|
-
method_option :
|
304
|
-
|
328
|
+
desc "update <PACKAGE>...", "Install a package after removing all previous versions"
|
329
|
+
method_option :default, aliases: '-d', type: :boolean, desc: 'Set default Lilypond version'
|
330
|
+
method_option :test, aliases: '-t', type: :boolean, desc: 'Run package tests after installation'
|
331
|
+
def update(*args)
|
332
|
+
invoke 'install', args, options.merge(update: true)
|
333
|
+
end
|
334
|
+
|
335
|
+
desc "use [lilypond@]<VERSION>", "Switch version of Lilypond"
|
336
|
+
method_option :default, aliases: '-d', type: :boolean, desc: 'Set default Lilypond version'
|
337
|
+
def use(version)
|
305
338
|
$cmd_options = options
|
306
339
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
Lyp::Package.install(spec.clause)
|
312
|
-
end
|
340
|
+
Lyp::System.test_installed_status!
|
341
|
+
|
342
|
+
if version =~ Lyp::LILYPOND_RE
|
343
|
+
version = $1
|
313
344
|
end
|
345
|
+
|
346
|
+
lilypond = Lyp::Lilypond.use(version, options)
|
347
|
+
puts "Using Lilypond version #{lilypond[:version]}"
|
314
348
|
end
|
315
349
|
|
316
|
-
desc "
|
317
|
-
def
|
350
|
+
desc "version", "show Lyp version"
|
351
|
+
def version
|
318
352
|
$stderr.puts "Lyp #{Lyp::VERSION}"
|
319
|
-
Dir["#{Lyp::TMP_ROOT}/*"].each do |fn|
|
320
|
-
puts "Cleaning up #{fn}"
|
321
|
-
FileUtils.rm_rf(fn)
|
322
|
-
end
|
323
353
|
end
|
324
354
|
|
325
|
-
desc "
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
puts
|
355
|
+
desc "watch PATH...", "Watch files and directories and recompile when a file changes"
|
356
|
+
method_option :target, aliases: '-t', type: :string, desc: 'Set compile target'
|
357
|
+
def watch(*paths)
|
358
|
+
req_ext "directory_watcher"
|
359
|
+
|
360
|
+
recompile_proc = lambda do |path|
|
361
|
+
puts "#{path} changed"
|
362
|
+
path = options[:target] || path
|
363
|
+
puts "recompile #{path}"
|
364
|
+
if path =~ /\.(i?)ly$/
|
365
|
+
compile("--invoke-system", path)
|
366
|
+
end
|
334
367
|
end
|
335
|
-
end
|
336
368
|
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
369
|
+
target = options[:target]
|
370
|
+
|
371
|
+
watchers = paths.map do |path|
|
372
|
+
if File.directory?(path)
|
373
|
+
glob = ["**/*.ly", "**/*.ily", "**/*.scm"]
|
374
|
+
else
|
375
|
+
glob = [File.basename(path)]
|
376
|
+
path = File.dirname(path)
|
377
|
+
end
|
378
|
+
|
379
|
+
puts "Watching #{path}"
|
380
|
+
puts "glob: #{glob.inspect}"
|
381
|
+
w = DirectoryWatcher.new(path, glob: glob, pre_load: true).tap do |w|
|
382
|
+
w.interval = 0.1
|
383
|
+
w.add_observer do |*events|
|
384
|
+
events.each {|e| recompile_proc[e.path] if e.type == :modified}
|
385
|
+
end
|
386
|
+
w.start
|
387
|
+
end
|
342
388
|
end
|
343
389
|
|
344
|
-
|
390
|
+
trap("INT") {watchers.each {|w| w.stop}; puts; exit}
|
391
|
+
puts "Press ^C to exit"
|
392
|
+
loop {sleep 1}
|
393
|
+
end
|
394
|
+
|
395
|
+
desc "which [PATTERN|lilypond]", "List locations of installed packages matching PATTERN or versions of Lilypond"
|
396
|
+
def which(pattern = nil)
|
397
|
+
$cmd_options = options
|
398
|
+
|
399
|
+
Lyp::System.test_installed_status!
|
400
|
+
|
401
|
+
if pattern == 'lilypond'
|
402
|
+
current = Lyp::Lilypond.current_lilypond
|
403
|
+
if current
|
404
|
+
puts Lyp::Lilypond.current_lilypond
|
405
|
+
else
|
406
|
+
puts Lyp::LILYPOND_NOT_FOUND_MSG
|
407
|
+
end
|
408
|
+
else
|
409
|
+
Lyp::Package.which(args.first).each {|p| puts p}
|
410
|
+
end
|
345
411
|
end
|
346
412
|
|
347
413
|
def self.run
|
data/lib/lyp/lilypond.rb
CHANGED
@@ -52,6 +52,10 @@ module Lyp::Lilypond
|
|
52
52
|
options[:use_version] = argv.shift
|
53
53
|
when /^(?:\-u|\-\-use\=)"?([^\s]+)"?/
|
54
54
|
options[:use_version] = $1
|
55
|
+
when '--invoke-system'
|
56
|
+
options[:mode] = :system
|
57
|
+
when '--invoke-quiet'
|
58
|
+
options[:mode] = :quiet
|
55
59
|
else
|
56
60
|
argv_clean << arg
|
57
61
|
end
|
@@ -108,6 +112,8 @@ module Lyp::Lilypond
|
|
108
112
|
case opts[:mode]
|
109
113
|
when :system
|
110
114
|
system("#{lilypond} #{argv.join(" ")}")
|
115
|
+
when :quiet
|
116
|
+
`#{lilypond} #{argv.join(" ")} > /dev/null 2>&1`
|
111
117
|
when :spawn
|
112
118
|
pid = spawn(lilypond, *argv, opts[:spawn_opts] || {})
|
113
119
|
Process.detach(pid)
|
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: 1.
|
4
|
+
version: 1.3.0
|
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-12-
|
11
|
+
date: 2016-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|
@@ -84,6 +84,20 @@ dependencies:
|
|
84
84
|
- - '='
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: 0.23.0
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: directory_watcher
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - '='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.5.1
|
94
|
+
type: :runtime
|
95
|
+
prerelease: false
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - '='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 1.5.1
|
87
101
|
description: Lyp is a tool for managing lilypond versions and lilypond packages
|
88
102
|
email: ciconia@gmail.com
|
89
103
|
executables:
|