mini_portile2 2.5.3 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b4913fc9a77207eb01b12c960a04125fd6517d57d727423af306689b5d5fc833
4
- data.tar.gz: bc4a0a28a469ce473217fd176094b4e7238064a4f38040f39d7f514544a34842
3
+ metadata.gz: cead22320fb80bbc4e46f568f422211dd8a6af92006edc220e1320019cc52676
4
+ data.tar.gz: d4b5deaa502e5ae66526eb2b23978a4ef52996a100a64f224664927dca0658b2
5
5
  SHA512:
6
- metadata.gz: 19b7cff7f935399f4b1162240bf0999e4db1a9af53edd0b462174dfcec32a38813afcca1901e95d7a539d4773dc1618e99349075b55181f300f43a1126936802
7
- data.tar.gz: d872cbd565306b31f8a612fa03fcf1d7fbe2c35307806c8ae7c1099679aac729452567b5970bf7e121bcba05c504b235367acf159b950bebf08a0bd942063b07
6
+ metadata.gz: 7dbd446271e3b0c26cf39504b6b1af53faee8a212ba7451af76f17e1f8858b3f329c5e281f753d1731fe27a3d9121c9f7328188ead52aaf63c1d4728c44fcd99
7
+ data.tar.gz: a6b17cd4c01588c86d70a4e18c713cc5c13c16922ac64cc38e7c77fac416b1a9e1fa4eeee502dd23f13ece5a16d8b364033169de0e8e4612012544599a692c03
data/CHANGELOG.md CHANGED
@@ -1,8 +1,12 @@
1
1
  ## mini_portile changelog
2
2
 
3
- ### 2.5.3 / 2021-05-31
3
+ ### 2.6.0 / 2021-05-31
4
4
 
5
- Make `net-ftp` an optional dependency, since requiring it as a hard dependency in v2.5.2 caused warnings to be emitted by Ruby 2.7 and earlier. A warning message is emitted if FTP functionality is called and `net-ftp` isn't available; this should only happen in Ruby 3.1 and later.
5
+ ### Added
6
+
7
+ Recipes may build against a local directory by specifying `source_directory` instead of `files`. In
8
+ particular, this may be useful for debugging problems with the upstream dependency (e.g., use `git
9
+ bisect` in a local clone) or for continuous integration with upstream HEAD.
6
10
 
7
11
 
8
12
  ### 2.5.2 / 2021-05-28
data/Gemfile CHANGED
@@ -1,6 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem "net-ftp" if Gem::Requirement.new("> 3.1.0.dev").satisfied_by?(Gem::Version.new(RUBY_VERSION))
4
-
5
3
  # Specify your gem's dependencies in mini_portile2.gemspec
6
4
  gemspec
data/README.md CHANGED
@@ -89,6 +89,18 @@ system-wide installation.
89
89
  Same as above, but instead of `MiniPortile.new`, call `MiniPortileCMake.new`.
90
90
 
91
91
 
92
+ ### Local source directories
93
+
94
+ Instead of downloading a remote file, you can also point mini_portile2 at a local source
95
+ directory. In particular, this may be useful for testing or debugging:
96
+
97
+ ``` ruby
98
+ gem "mini_portile2", "~> 2.0.0" # NECESSARY if used in extconf.rb. see below.
99
+ require "mini_portile2"
100
+ recipe = MiniPortile.new("libiconv", "1.13.1")
101
+ recipe.source_directory = "/path/to/local/source/for/library-1.2.3"
102
+ ```
103
+
92
104
  ### Directory Structure Conventions
93
105
 
94
106
  `mini_portile2` follows the principle of **convention over configuration** and
@@ -1,6 +1,7 @@
1
1
  require 'rbconfig'
2
2
  require 'net/http'
3
3
  require 'net/https'
4
+ require 'net/ftp'
4
5
  require 'fileutils'
5
6
  require 'tempfile'
6
7
  require 'digest'
@@ -30,7 +31,7 @@ end
30
31
  class MiniPortile
31
32
  attr_reader :name, :version, :original_host
32
33
  attr_writer :configure_options
33
- attr_accessor :host, :files, :patch_files, :target, :logger
34
+ attr_accessor :host, :files, :patch_files, :target, :logger, :source_directory
34
35
 
35
36
  def self.windows?
36
37
  RbConfig::CONFIG['target_os'] =~ /mswin|mingw/
@@ -54,10 +55,22 @@ class MiniPortile
54
55
  @patch_files = []
55
56
  @log_files = {}
56
57
  @logger = STDOUT
58
+ @source_directory = nil
57
59
 
58
60
  @original_host = @host = detect_host
59
61
  end
60
62
 
63
+ def source_directory=(path)
64
+ @source_directory = File.expand_path(path)
65
+ end
66
+
67
+ def prepare_build_directory
68
+ raise "source_directory is not set" if source_directory.nil?
69
+ output "Building #{@name} #{@version} from source at '#{source_directory}'"
70
+ FileUtils.mkdir_p(File.join(tmp_path, [name, version].join("-")))
71
+ FileUtils.rm_rf(port_path) # make sure we always re-install
72
+ end
73
+
61
74
  def download
62
75
  files_hashs.each do |file|
63
76
  download_file(file[:url], file[:local_path])
@@ -109,15 +122,16 @@ class MiniPortile
109
122
  def configure
110
123
  return if configured?
111
124
 
125
+ FileUtils.mkdir_p(tmp_path)
112
126
  cache_file = File.join(tmp_path, 'configure.options_cache')
113
127
  File.open(cache_file, "w") { |f| f.write computed_options.to_s }
114
128
 
129
+ command = Array(File.join((source_directory || "."), "configure"))
115
130
  if RUBY_PLATFORM=~/mingw|mswin/
116
131
  # Windows doesn't recognize the shebang.
117
- execute('configure', %w(sh ./configure) + computed_options)
118
- else
119
- execute('configure', %w(./configure) + computed_options)
132
+ command.unshift("sh")
120
133
  end
134
+ execute('configure', command + computed_options)
121
135
  end
122
136
 
123
137
  def compile
@@ -138,7 +152,7 @@ class MiniPortile
138
152
  end
139
153
 
140
154
  def configured?
141
- configure = File.join(work_path, 'configure')
155
+ configure = File.join((source_directory || work_path), 'configure')
142
156
  makefile = File.join(work_path, 'Makefile')
143
157
  cache_file = File.join(tmp_path, 'configure.options_cache')
144
158
 
@@ -156,9 +170,13 @@ class MiniPortile
156
170
  end
157
171
 
158
172
  def cook
159
- download unless downloaded?
160
- extract
161
- patch
173
+ if source_directory
174
+ prepare_build_directory
175
+ else
176
+ download unless downloaded?
177
+ extract
178
+ patch
179
+ end
162
180
  configure unless configured?
163
181
  compile
164
182
  install unless installed?
@@ -472,6 +490,7 @@ private
472
490
  def download_file_http(url, full_path, count = 3)
473
491
  filename = File.basename(full_path)
474
492
  with_tempfile(filename, full_path) do |temp_file|
493
+ progress = 0
475
494
  total = 0
476
495
  params = {
477
496
  "Accept-Encoding" => 'identity',
@@ -480,6 +499,7 @@ private
480
499
  if total
481
500
  new_progress = (bytes * 100) / total
482
501
  message "\rDownloading %s (%3d%%) " % [filename, new_progress]
502
+ progress = new_progress
483
503
  else
484
504
  # Content-Length is unavailable because Transfer-Encoding is chunked
485
505
  message "\rDownloading %s " % [filename]
@@ -527,15 +547,16 @@ private
527
547
  end
528
548
 
529
549
  def download_file_ftp(uri, full_path)
530
- require "net/ftp"
531
550
  filename = File.basename(uri.path)
532
551
  with_tempfile(filename, full_path) do |temp_file|
552
+ progress = 0
533
553
  total = 0
534
554
  params = {
535
555
  :content_length_proc => lambda{|length| total = length },
536
556
  :progress_proc => lambda{|bytes|
537
557
  new_progress = (bytes * 100) / total
538
558
  message "\rDownloading %s (%3d%%) " % [filename, new_progress]
559
+ progress = new_progress
539
560
  }
540
561
  }
541
562
  if ENV["ftp_proxy"]
@@ -551,8 +572,6 @@ private
551
572
  end
552
573
  output
553
574
  end
554
- rescue LoadError
555
- raise LoadError, "Ruby #{RUBY_VERSION} does not provide the net-ftp gem, please add it as a dependency if you need to use FTP"
556
575
  rescue Net::FTPError
557
576
  return false
558
577
  end
@@ -1,3 +1,3 @@
1
1
  class MiniPortile
2
- VERSION = "2.5.3"
2
+ VERSION = "2.6.0"
3
3
  end
@@ -33,6 +33,8 @@ Gem::Specification.new do |spec|
33
33
 
34
34
  spec.required_ruby_version = ">= 2.3.0"
35
35
 
36
+ spec.add_dependency "net-ftp", "~> 0.1"
37
+
36
38
  spec.add_development_dependency "bundler", "~> 2.1"
37
39
  spec.add_development_dependency "minitar", "~> 0.7"
38
40
  spec.add_development_dependency "minitest", "~> 5.11"
data/test/test_cook.rb CHANGED
@@ -113,3 +113,32 @@ class TestCookWithBrokenGitDir < TestCase
113
113
  end
114
114
  end
115
115
  end
116
+
117
+ class TestCookAgainstSourceDirectory < TestCase
118
+ attr_accessor :recipe
119
+
120
+ def setup
121
+ super
122
+
123
+ @recipe ||= MiniPortile.new("test mini portile", "1.0.0").tap do |recipe|
124
+ recipe.source_directory = File.expand_path("../assets/test mini portile-1.0.0", __FILE__)
125
+ end
126
+ end
127
+
128
+ def test_source_directory
129
+ recipe.cook
130
+
131
+ path = File.join(work_dir, "configure.txt")
132
+ assert(File.exist?(path))
133
+ assert_equal((recipe.configure_options + ["--prefix=#{recipe.path}"]).inspect,
134
+ File.read(path).chomp);
135
+
136
+ path = File.join(work_dir, "compile.txt")
137
+ assert(File.exist?(path))
138
+ assert_equal("[\"all\"]", File.read(path).chomp);
139
+
140
+ path = File.join(work_dir, "install.txt")
141
+ assert(File.exist?(path))
142
+ assert_equal("[\"install\"]", File.read(path).chomp);
143
+ end
144
+ end
@@ -18,12 +18,10 @@ describe "recipe download" do
18
18
  end
19
19
  end
20
20
 
21
- begin
22
- block.call
23
- ensure
24
- thread.kill
25
- server.close
26
- end
21
+ block.call
22
+
23
+ thread.kill
24
+ server.close
27
25
 
28
26
  request_count.must_be :>, 0
29
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_portile2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.3
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luis Lavena
@@ -12,6 +12,20 @@ bindir: bin
12
12
  cert_chain: []
13
13
  date: 2021-05-31 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: net-ftp
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '0.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '0.1'
15
29
  - !ruby/object:Gem::Dependency
16
30
  name: bundler
17
31
  requirement: !ruby/object:Gem::Requirement