lyp-win 0.2.2
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 +7 -0
- data/LICENSE +22 -0
- data/README.md +508 -0
- data/bin/install_release.sh +51 -0
- data/bin/lilypond +88 -0
- data/bin/lyp +5 -0
- data/bin/release_wrapper_lilypond.sh +13 -0
- data/bin/release_wrapper_lyp.sh +13 -0
- data/lib/lyp.rb +42 -0
- data/lib/lyp/base.rb +51 -0
- data/lib/lyp/cli.rb +314 -0
- data/lib/lyp/etc/font.scm +296 -0
- data/lib/lyp/etc/lyp.ly +103 -0
- data/lib/lyp/git_based_rugged.rb +44 -0
- data/lib/lyp/lilypond.rb +570 -0
- data/lib/lyp/package.rb +457 -0
- data/lib/lyp/resolver.rb +481 -0
- data/lib/lyp/settings.rb +37 -0
- data/lib/lyp/system.rb +135 -0
- data/lib/lyp/template.rb +59 -0
- data/lib/lyp/templates/deps_wrapper.rb +59 -0
- data/lib/lyp/version.rb +3 -0
- data/lib/lyp/windows.rb +110 -0
- data/lib/lyp/wrapper.rb +22 -0
- metadata +128 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
shopt -s extglob
|
4
|
+
set -o errtrace
|
5
|
+
set -o errexit
|
6
|
+
|
7
|
+
fail() { log "\nERROR: $*\n" ; exit 1 }
|
8
|
+
has() { type "$1" > /dev/null 2>&1 }
|
9
|
+
|
10
|
+
download() {
|
11
|
+
if has "curl"; then
|
12
|
+
curl -L -o $*
|
13
|
+
elif has "wget"; then
|
14
|
+
wget -O $*
|
15
|
+
else
|
16
|
+
fail "Could not find curl or wget"
|
17
|
+
fi
|
18
|
+
}
|
19
|
+
|
20
|
+
WORKDIR="/tmp/lyp-release-installer"
|
21
|
+
LYP_VERSION="0.2.2"
|
22
|
+
URL_BASE="https://github.com/noteflakes/lyp/releases/download/v$LYP_VERSION"
|
23
|
+
|
24
|
+
PLATFORM=`uname -sp`
|
25
|
+
case $PLATFORM in
|
26
|
+
"Linux x86_64")
|
27
|
+
RELEASE_FILE="lyp-$LYP_VERSION-linux-x86_64"
|
28
|
+
;;
|
29
|
+
"Linux x86")
|
30
|
+
RELEASE_FILE="lyp-$LYP_VERSION-linux-x86"
|
31
|
+
;;
|
32
|
+
"Darwin i386")
|
33
|
+
RELEASE_FILE="lyp-$LYP_VERSION-osx"
|
34
|
+
;;
|
35
|
+
*)
|
36
|
+
fail "Unspported platform $PLATFORM"
|
37
|
+
esac
|
38
|
+
|
39
|
+
RELEASE_URL="$URL_BASE/$RELEASE_FILE.tar.gz"
|
40
|
+
RELEASE_PATH="$WORKDIR/$RELEASE_FILE"
|
41
|
+
|
42
|
+
rm -rf $WORKDIR
|
43
|
+
mkdir $WORKDIR
|
44
|
+
echo "Downloading $RELEASE_URL"
|
45
|
+
download "$WORKDIR/release.tar.gz" $RELEASE_URL
|
46
|
+
echo "Extracting $WORKDIR/release.tar.gz"
|
47
|
+
tar -xzf "$WORKDIR/release.tar.gz" -C $WORKDIR
|
48
|
+
|
49
|
+
$RELEASE_PATH/bin/lyp install self
|
50
|
+
|
51
|
+
rm -rf $WORKDIR
|
data/bin/lilypond
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'lyp/version'
|
4
|
+
require 'lyp'
|
5
|
+
|
6
|
+
def process_argv
|
7
|
+
options = {}
|
8
|
+
argv = ARGV.dup # copy for iterating
|
9
|
+
argv_clean = []
|
10
|
+
while arg = argv.shift
|
11
|
+
case arg
|
12
|
+
when '-r', '--raw'
|
13
|
+
options[:raw] = true
|
14
|
+
when '-E', '--env'
|
15
|
+
unless ENV['LILYPOND_VERSION']
|
16
|
+
STDERR.puts "$LILYPOND_VERSION not set"
|
17
|
+
exit 1
|
18
|
+
end
|
19
|
+
options[:use_version] = ENV['LILYPOND_VERSION']
|
20
|
+
when '-u', '--use'
|
21
|
+
options[:use_version] = argv.shift
|
22
|
+
when /^(?:\-u|\-\-use\=)"?([^\s]+)"?/
|
23
|
+
options[:use_version] = $1
|
24
|
+
when '-n', '--install'
|
25
|
+
options[:install] = true
|
26
|
+
else
|
27
|
+
argv_clean << arg
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
[options, argv_clean]
|
32
|
+
end
|
33
|
+
$options, $argv = process_argv
|
34
|
+
|
35
|
+
def get_lilypond_path
|
36
|
+
if $options[:use_version]
|
37
|
+
if $options[:install]
|
38
|
+
Lyp::Lilypond.install_if_missing($options[:use_version])
|
39
|
+
end
|
40
|
+
Lyp::Lilypond.force_version!($options[:use_version])
|
41
|
+
end
|
42
|
+
Lyp::Lilypond.check_lilypond!
|
43
|
+
Lyp::Lilypond.current_lilypond.tap do |path|
|
44
|
+
unless path && File.file?(path)
|
45
|
+
STDERR.puts "No version of lilypond found. To install lilypond run 'lyp install lilypond'."
|
46
|
+
exit 1
|
47
|
+
end
|
48
|
+
end
|
49
|
+
rescue => e
|
50
|
+
STDERR.puts e.message
|
51
|
+
exit 1
|
52
|
+
end
|
53
|
+
$lilypond_path = get_lilypond_path
|
54
|
+
|
55
|
+
if $options[:raw]
|
56
|
+
exec("#{$lilypond_path} #{$argv[1..-1].join(' ')}")
|
57
|
+
end
|
58
|
+
|
59
|
+
OVERRIDING_LILYPOND_SWITCHES = %w{
|
60
|
+
-w --warranty
|
61
|
+
-v --version
|
62
|
+
scheme-sandbox
|
63
|
+
}
|
64
|
+
LILYPOND_HELP_SWITCHES = %w{
|
65
|
+
-h --help
|
66
|
+
}
|
67
|
+
LYP_LY_HELP = <<EOF
|
68
|
+
Lyp-provided options:
|
69
|
+
-r, --raw run raw lilypond (no pre-processing)
|
70
|
+
-E, --env use version specified in $LILYPOND_VERSION
|
71
|
+
-u, --use=VERSION use the given version of lilypond
|
72
|
+
-n, --install install the given version if not found
|
73
|
+
EOF
|
74
|
+
|
75
|
+
case $argv.first
|
76
|
+
when nil, *OVERRIDING_LILYPOND_SWITCHES
|
77
|
+
STDERR.puts "Lyp version #{Lyp::VERSION}"
|
78
|
+
exec("#{$lilypond_path} #{$argv.join(' ')}")
|
79
|
+
|
80
|
+
when *LILYPOND_HELP_SWITCHES
|
81
|
+
STDERR.puts "Lyp version #{Lyp::VERSION}"
|
82
|
+
puts `#{$lilypond_path} #{$argv.join(' ')}`
|
83
|
+
puts LYP_LY_HELP
|
84
|
+
else
|
85
|
+
begin
|
86
|
+
Lyp::Lilypond.compile($argv, $options)
|
87
|
+
end
|
88
|
+
end
|
data/bin/lyp
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
set -e
|
3
|
+
|
4
|
+
# Figure out where this script is located.
|
5
|
+
SELFDIR="`dirname \"$0\"`"
|
6
|
+
ROOTDIR="`cd \"$SELFDIR/..\" && pwd`"
|
7
|
+
|
8
|
+
# Tell Bundler where the Gemfile and gems are.
|
9
|
+
export BUNDLE_GEMFILE="$ROOTDIR/lib/vendor/Gemfile"
|
10
|
+
unset BUNDLE_IGNORE_CONFIG
|
11
|
+
|
12
|
+
# Run the actual app using the bundled Ruby interpreter, with Bundler activated.
|
13
|
+
exec "$ROOTDIR/lib/ruby/bin/ruby" -rbundler/setup -rreadline -I$ROOTDIR/lib/app/lib "$ROOTDIR/lib/app/bin/lilypond" "$@"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
set -e
|
3
|
+
|
4
|
+
# Figure out where this script is located.
|
5
|
+
SELFDIR="`dirname \"$0\"`"
|
6
|
+
ROOTDIR="`cd \"$SELFDIR/..\" && pwd`"
|
7
|
+
|
8
|
+
# Tell Bundler where the Gemfile and gems are.
|
9
|
+
export BUNDLE_GEMFILE="$ROOTDIR/lib/vendor/Gemfile"
|
10
|
+
unset BUNDLE_IGNORE_CONFIG
|
11
|
+
|
12
|
+
# Run the actual app using the bundled Ruby interpreter, with Bundler activated.
|
13
|
+
exec "$ROOTDIR/lib/ruby/bin/ruby" -rbundler/setup -rreadline -I$ROOTDIR/lib/app/lib "$ROOTDIR/lib/app/bin/lyp" "$@"
|
data/lib/lyp.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
$WINDOWS = Gem.win_platform?
|
2
|
+
|
3
|
+
# test for existence of
|
4
|
+
$rugged_available = begin
|
5
|
+
gem 'rugged', '>=0.23.0'
|
6
|
+
require 'rugged'
|
7
|
+
rescue Exception
|
8
|
+
nil
|
9
|
+
end
|
10
|
+
|
11
|
+
$git_available = `git --version` rescue nil
|
12
|
+
|
13
|
+
unless $rugged_available || $git_available
|
14
|
+
raise "Lyp needs git in order to be able to install packages. Please install git and then try again."
|
15
|
+
end
|
16
|
+
|
17
|
+
unless $rugged_available
|
18
|
+
require 'lyp/git_based_rugged'
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'tmpdir'
|
22
|
+
require 'fileutils'
|
23
|
+
$TMP_DIR = $WINDOWS ? "#{Dir.home}/AppData/Local/Temp" : "/tmp"
|
24
|
+
$TMP_ROOT = "#{$TMP_DIR}/lyp"
|
25
|
+
FileUtils.mkdir_p($TMP_ROOT)
|
26
|
+
|
27
|
+
%w{
|
28
|
+
base
|
29
|
+
system
|
30
|
+
settings
|
31
|
+
|
32
|
+
template
|
33
|
+
resolver
|
34
|
+
wrapper
|
35
|
+
|
36
|
+
package
|
37
|
+
lilypond
|
38
|
+
}.each do |f|
|
39
|
+
require File.expand_path("lyp/#{f}", File.dirname(__FILE__))
|
40
|
+
end
|
41
|
+
|
42
|
+
require File.expand_path("lyp/windows", File.dirname(__FILE__)) if $WINDOWS
|
data/lib/lyp/base.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Lyp
|
4
|
+
# A package specifier is of the form <package>@<version specifier>, where
|
5
|
+
# the version specifier can be simply a version number, or include an operator
|
6
|
+
# before the version number.
|
7
|
+
#
|
8
|
+
# Accepted operators: >=, ~>
|
9
|
+
PACKAGE_RE = /^([^@\>~]+)(?:@)?((?:\>=|~\>)?.+)?/
|
10
|
+
LILYPOND_RE = /^lilypond(?:@?((?:\>=|~\>)?.+))?/
|
11
|
+
|
12
|
+
LYP_DIRECTORY = File.expand_path('~/.lyp')
|
13
|
+
LYP_BIN_DIRECTORY = File.join(LYP_DIRECTORY, 'bin')
|
14
|
+
LYP_LIB_DIRECTORY = File.join(LYP_DIRECTORY, 'lib')
|
15
|
+
DEFAULT_PACKAGE_DIRECTORY = File.join(LYP_DIRECTORY, 'packages')
|
16
|
+
DEFAULT_LILYPONDS_DIRECTORY = File.join(LYP_DIRECTORY, 'lilyponds')
|
17
|
+
|
18
|
+
# Fonts are installed on lilypond >= 2.18.2
|
19
|
+
FONT_COPY_REQ = Gem::Requirement.new('>=2.18.2')
|
20
|
+
FONT_PATCH_REQ = Gem::Requirement.new('>=2.18.2', '<2.19.12')
|
21
|
+
|
22
|
+
# Font patch filename (required for 2.18.2 <= lilypond < 2.19.12)
|
23
|
+
FONT_PATCH_FILENAME = File.expand_path('etc/font.scm', File.dirname(__FILE__))
|
24
|
+
|
25
|
+
# etc/lyp.ly contains lyp:* procedure definitions for loading packages and
|
26
|
+
# other support code.
|
27
|
+
LYP_LY_LIB_PATH = File.expand_path('etc/lyp.ly', File.dirname(__FILE__))
|
28
|
+
|
29
|
+
LILYPOND_NOT_FOUND_MSG = "No version of lilypond found.\nTo install lilypond run 'lyp install lilypond'"
|
30
|
+
|
31
|
+
SETTINGS_FILENAME = 'settings.yml'
|
32
|
+
|
33
|
+
def self.packages_dir
|
34
|
+
ensure_dir(DEFAULT_PACKAGE_DIRECTORY)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.lilyponds_dir
|
38
|
+
ensure_dir(DEFAULT_LILYPONDS_DIRECTORY)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.settings_file
|
42
|
+
ensure_dir(LYP_DIRECTORY)
|
43
|
+
File.join(LYP_DIRECTORY, SETTINGS_FILENAME)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.ensure_dir(dir)
|
47
|
+
FileUtils.mkdir_p(dir) unless File.directory?(dir)
|
48
|
+
dir
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
data/lib/lyp/cli.rb
ADDED
@@ -0,0 +1,314 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'lyp/version'
|
3
|
+
|
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
|
15
|
+
|
16
|
+
def lilypond_postfix(info)
|
17
|
+
if info[:system]
|
18
|
+
" (system)"
|
19
|
+
else
|
20
|
+
""
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
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
|
+
$cmd_options = {}
|
43
|
+
|
44
|
+
class Lyp::CLI < Thor
|
45
|
+
package_name "lyp"
|
46
|
+
map "-v" => :version
|
47
|
+
check_unknown_options! :except => :compile
|
48
|
+
class_option :verbose, aliases: '-V', :type => :boolean
|
49
|
+
|
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
|
+
no_commands do
|
70
|
+
def search_lilypond(version)
|
71
|
+
versions = Lyp::Lilypond.search(version)
|
72
|
+
|
73
|
+
if versions.empty?
|
74
|
+
puts "\nNo available versions of lilypond@#{version} found\n\n"
|
75
|
+
else
|
76
|
+
puts "\nAvailable versions of lilypond@#{version}:\n\n"
|
77
|
+
versions.each do |v|
|
78
|
+
prefix = v[:installed] ? " * " : " "
|
79
|
+
puts "#{prefix}#{v[:version]}"
|
80
|
+
end
|
81
|
+
puts "\n * Currently installed\n\n"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def search_package(pattern)
|
86
|
+
packages = Lyp::Package.list_lyp_index(pattern)
|
87
|
+
if packages.empty?
|
88
|
+
puts "\nNo matching package found in lyp-index\n\n"
|
89
|
+
else
|
90
|
+
puts "\nAvailable packages on lyp-index:\n\n"
|
91
|
+
packages.each do |p|
|
92
|
+
puts " #{p[:name]}"
|
93
|
+
end
|
94
|
+
puts "\n\n"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
desc "compile [<option>...] <FILE>", "Invokes lilypond with given file"
|
100
|
+
method_option :install, aliases: '-n', type: :boolean, desc: 'Install the requested version of lilypond if not present'
|
101
|
+
method_option :env, aliases: '-E', type: :boolean, desc: 'Use version set by LILYPOND_VERSION environment variable'
|
102
|
+
method_option :use, aliases: '-u', type: :string, desc: 'Use specified version'
|
103
|
+
def compile(*args)
|
104
|
+
$cmd_options = options
|
105
|
+
|
106
|
+
if options[:env]
|
107
|
+
unless ENV['LILYPOND_VERSION']
|
108
|
+
STDERR.puts "$LILYPOND_VERSION not set"
|
109
|
+
exit 1
|
110
|
+
end
|
111
|
+
options[:use] = ENV['LILYPOND_VERSION']
|
112
|
+
end
|
113
|
+
|
114
|
+
if options[:use]
|
115
|
+
if options[:install]
|
116
|
+
Lyp::Lilypond.install_if_missing(options[:use], no_version_test: true)
|
117
|
+
end
|
118
|
+
Lyp::Lilypond.force_version!(options[:use])
|
119
|
+
end
|
120
|
+
|
121
|
+
# check lilypond default / current settings
|
122
|
+
Lyp::Lilypond.check_lilypond!
|
123
|
+
|
124
|
+
$stderr.puts "Lyp #{Lyp::VERSION}"
|
125
|
+
Lyp::System.test_installed_status!
|
126
|
+
Lyp::Lilypond.compile(args)
|
127
|
+
end
|
128
|
+
|
129
|
+
desc "test [<option>...] [.|PATTERN]", "Runs package tests on installed packages or local directory"
|
130
|
+
method_option :install, aliases: '-n', type: :boolean, desc: 'Install the requested version of lilypond if not present'
|
131
|
+
method_option :env, aliases: '-E', type: :boolean, desc: 'Use version set by LILYPOND_VERSION environment variable'
|
132
|
+
method_option :use, aliases: '-u', type: :string, desc: 'Use specified version'
|
133
|
+
def test(*args)
|
134
|
+
$cmd_options = options
|
135
|
+
|
136
|
+
if options[:env]
|
137
|
+
unless ENV['LILYPOND_VERSION']
|
138
|
+
STDERR.puts "$LILYPOND_VERSION not set"
|
139
|
+
exit 1
|
140
|
+
end
|
141
|
+
options[:use] = ENV['LILYPOND_VERSION']
|
142
|
+
end
|
143
|
+
|
144
|
+
if options[:use]
|
145
|
+
if options[:install]
|
146
|
+
Lyp::Lilypond.install_if_missing(options[:use], no_version_test: true)
|
147
|
+
end
|
148
|
+
Lyp::Lilypond.force_version!(options[:use])
|
149
|
+
end
|
150
|
+
|
151
|
+
# check lilypond default / current settings
|
152
|
+
Lyp::Lilypond.check_lilypond!
|
153
|
+
|
154
|
+
$stderr.puts "Lyp #{Lyp::VERSION}"
|
155
|
+
case args
|
156
|
+
when ['.']
|
157
|
+
Lyp::Package.run_local_tests('.')
|
158
|
+
else
|
159
|
+
Lyp::Package.run_package_tests(args)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
desc "install <PACKAGE|lilypond|self>...", "Install a package or a version of lilypond. When 'install self' is invoked, lyp installs itself in ~/.lyp."
|
164
|
+
method_option :default, aliases: '-d', type: :boolean, desc: 'Set default lilypond version'
|
165
|
+
method_option :test, aliases: '-t', type: :boolean, desc: 'Run package tests after installation'
|
166
|
+
def install(*args)
|
167
|
+
$cmd_options = options
|
168
|
+
|
169
|
+
raise "No package specified" if args.empty?
|
170
|
+
|
171
|
+
args.each do |package|
|
172
|
+
case package
|
173
|
+
when 'self'
|
174
|
+
Lyp::System.install!
|
175
|
+
when Lyp::LILYPOND_RE
|
176
|
+
Lyp::System.test_installed_status!
|
177
|
+
Lyp::Lilypond.install($1, options)
|
178
|
+
else
|
179
|
+
Lyp::System.test_installed_status!
|
180
|
+
Lyp::Package.install(package, options)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
desc "uninstall <PACKAGE|lilypond|self>...", "Uninstall a package or a version of lilypond. When 'uninstall self' is invoked, lyp uninstalls itself from ~/.lyp."
|
186
|
+
method_option :all, aliases: '-a', type: :boolean, desc: 'Uninstall all versions'
|
187
|
+
def uninstall(*args)
|
188
|
+
$cmd_options = options
|
189
|
+
|
190
|
+
Lyp::System.test_installed_status!
|
191
|
+
|
192
|
+
raise "No package specified" if args.empty?
|
193
|
+
args.each do |package|
|
194
|
+
case package
|
195
|
+
when 'self'
|
196
|
+
Lyp::System.uninstall!
|
197
|
+
when Lyp::LILYPOND_RE
|
198
|
+
Lyp::System.test_installed_status!
|
199
|
+
Lyp::Lilypond.uninstall($1, options)
|
200
|
+
else
|
201
|
+
Lyp::System.test_installed_status!
|
202
|
+
Lyp::Package.uninstall(package, options)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
desc "use [lilypond@]<VERSION>", "Switch version of lilypond"
|
208
|
+
method_option :default, aliases: '-d', type: :boolean, desc: 'Set default lilypond version'
|
209
|
+
def use(version)
|
210
|
+
$cmd_options = options
|
211
|
+
|
212
|
+
Lyp::System.test_installed_status!
|
213
|
+
|
214
|
+
if version =~ Lyp::LILYPOND_RE
|
215
|
+
version = $1
|
216
|
+
end
|
217
|
+
|
218
|
+
lilypond = Lyp::Lilypond.use(version, options)
|
219
|
+
puts "Using version #{lilypond[:version]}"
|
220
|
+
end
|
221
|
+
|
222
|
+
desc "list [PATTERN|lilypond]", "List installed packages matching PATTERN or versions of lilypond"
|
223
|
+
def list(pattern = nil)
|
224
|
+
$cmd_options = options
|
225
|
+
|
226
|
+
Lyp::System.test_installed_status!
|
227
|
+
|
228
|
+
if pattern == 'lilypond'
|
229
|
+
list = Lyp::Lilypond.list
|
230
|
+
if list.empty?
|
231
|
+
puts Lyp::LILYPOND_NOT_FOUND_MSG
|
232
|
+
else
|
233
|
+
puts LILYPOND_PREAMBLE
|
234
|
+
list.each {|info| puts format_lilypond_entry(info)}
|
235
|
+
puts LILYPOND_LEGEND
|
236
|
+
end
|
237
|
+
else
|
238
|
+
list = Lyp::Package.list(args.first)
|
239
|
+
if list.empty?
|
240
|
+
if args.first
|
241
|
+
return puts "\nNo installed packages found matching '#{args.first}'\n\n"
|
242
|
+
else
|
243
|
+
return puts "\nNo packages are currently installed\n\n"
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
by_package = list.inject({}) do |m, p|
|
248
|
+
p =~ Lyp::PACKAGE_RE; (m[$1] ||= []) << $2; m
|
249
|
+
end
|
250
|
+
|
251
|
+
puts "\nInstalled packages:\n\n"
|
252
|
+
by_package.keys.sort.each do |p|
|
253
|
+
puts " #{p} => (#{by_package[p].sort.join(', ')})"
|
254
|
+
end
|
255
|
+
puts "\n\n"
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
desc "which [PATTERN|lilypond]", "List locations of installed packages matching PATTERN or versions of lilypond"
|
260
|
+
def which(pattern = nil)
|
261
|
+
$cmd_options = options
|
262
|
+
|
263
|
+
Lyp::System.test_installed_status!
|
264
|
+
|
265
|
+
if pattern == 'lilypond'
|
266
|
+
current = Lyp::Lilypond.current_lilypond
|
267
|
+
if current
|
268
|
+
puts Lyp::Lilypond.current_lilypond
|
269
|
+
else
|
270
|
+
puts Lyp::LILYPOND_NOT_FOUND_MSG
|
271
|
+
end
|
272
|
+
else
|
273
|
+
Lyp::Package.which(args.first).each {|p| puts p}
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
desc "deps FILE", "Lists dependencies found in user's files"
|
278
|
+
def deps(fn)
|
279
|
+
$cmd_options = options
|
280
|
+
|
281
|
+
resolver = Lyp::Resolver.new(fn)
|
282
|
+
tree = resolver.get_dependency_tree(ignore_missing: true)
|
283
|
+
tree[:dependencies].each do |package, leaf|
|
284
|
+
versions = leaf[:versions].keys.map {|k| k =~ Lyp::PACKAGE_RE; $2 }.sort
|
285
|
+
if versions.empty?
|
286
|
+
puts " #{leaf[:clause]} => (no local version found)"
|
287
|
+
else
|
288
|
+
puts " #{leaf[:clause]} => #{versions.join(', ')}"
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
desc "resolve FILE", "Resolves and installs missing dependencies found in user's files"
|
294
|
+
method_option :all, aliases: '-a', type: :boolean, desc: 'Install all found dependencies'
|
295
|
+
def resolve(fn)
|
296
|
+
$cmd_options = options
|
297
|
+
|
298
|
+
resolver = Lyp::Resolver.new(fn)
|
299
|
+
tree = resolver.get_dependency_tree(ignore_missing: true)
|
300
|
+
tree[:dependencies].each do |package, leaf|
|
301
|
+
if options[:all] || leaf[:versions].empty?
|
302
|
+
Lyp::Package.install(leaf[:clause])
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
begin
|
309
|
+
Lyp::CLI.start(ARGV)
|
310
|
+
rescue => e
|
311
|
+
puts e.message
|
312
|
+
puts e.backtrace.join("\n") if $cmd_options[:verbose]
|
313
|
+
exit(1)
|
314
|
+
end
|