lyp-win 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|