p4ruby 1.0.11 → 2012.1Beta

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.
Files changed (3) hide show
  1. data/install.rb +66 -35
  2. data/p4ruby.gemspec +3 -2
  3. metadata +53 -49
data/install.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  #
2
2
  # Author: James M. Lawrence <quixoticsycophant@gmail.com>.
3
3
  #
4
+ #Updated by Brett Bates and Jennifer Bottom.
4
5
 
5
6
  require 'net/ftp'
6
7
  require 'rbconfig'
@@ -8,6 +9,7 @@ require 'ostruct'
8
9
  require 'fileutils'
9
10
  require 'optparse'
10
11
  require 'pathname'
12
+ require 'rubygems'
11
13
 
12
14
  class Installer
13
15
  include FileUtils
@@ -112,6 +114,11 @@ class Installer
112
114
  raise "error: ruby must be configured with --enable-shared"
113
115
  end
114
116
 
117
+ @s.ftp = Net::FTP.new(SERVER).tap { |t|
118
+ t.passive = true
119
+ t.login
120
+ }
121
+
115
122
  @s.p4api = LazyStruct.new.tap { |t|
116
123
  t.basename = P4API_REMOTE_BASENAME
117
124
  }
@@ -122,46 +129,36 @@ class Installer
122
129
 
123
130
  @s.specs = [ @s.p4ruby, @s.p4api ]
124
131
  @s.specs.each { |spec|
125
- spec.attribute(:local) {
126
- DISTFILES_DIR + spec.basename
127
- }
132
+ spec.local = DISTFILES_DIR + spec.basename
128
133
  }
129
134
 
130
- unless @s.platform
131
- @s.attribute(:platform) {
132
- guess_platform
133
- }
135
+ unless @s.version
136
+ @s.version = latest_version
134
137
  end
135
138
 
136
- unless @s.version
137
- @s.attribute(:version) {
138
- latest_version
139
- }
139
+ @s.version_dir = SERVER_TOP_DIR + "r#{@s.version}"
140
+
141
+ unless @s.platform
142
+ @s.platform = guess_platform
140
143
  end
141
144
 
142
- @s.attribute(:version_dir) {
143
- SERVER_TOP_DIR + "r#{@s.version}"
144
- }
145
+ if @s.platform =~ /nt/
146
+ @s.p4api.remote = @s.version_dir + "bin.#{@s.platform}"
147
+ else
148
+ @s.p4api.remote = @s.version_dir + "bin.#{@s.platform}" + @s.p4api.basename
149
+ @s.p4ruby.remote = @s.version_dir + "bin.tools" + @s.p4ruby.basename
150
+ end
145
151
 
146
- @s.p4api.attribute(:remote) {
147
- @s.version_dir + "bin.#{@s.platform}" + @s.p4api.basename
148
- }
149
- @s.p4ruby.attribute(:remote) {
150
- @s.version_dir + "bin.tools" + @s.p4ruby.basename
151
- }
152
152
 
153
- @s.attribute(:ftp) {
154
- Net::FTP.new(SERVER).tap { |t|
155
- t.passive = true
156
- t.login
157
- }
158
- }
159
153
  end
160
154
 
161
155
  def guess_cpu
162
156
  if CONFIG["target_os"] =~ %r!darwin!
163
- # specific binaries were removed in p4api-09.1
164
- "u"
157
+ if CONFIG["build"] =~ /i686|x86_64/
158
+ "x86_64"
159
+ else
160
+ "x86"
161
+ end
165
162
  else
166
163
  case CONFIG["target_cpu"]
167
164
  when %r!ia!i
@@ -183,11 +180,17 @@ class Installer
183
180
  version = match.captures.join
184
181
  cpu = guess_cpu
185
182
  platforms = self.platforms
186
- (0..version.to_i).map { |n|
183
+ built_platforms = (0..version.to_i).map { |n|
187
184
  [os, n.to_s, cpu].join
188
185
  }.select { |platform|
189
186
  platforms.include? platform
190
- }.last
187
+ }
188
+ if os =~ /darwin/
189
+ built_platforms.pop
190
+ built_platforms.last
191
+ else
192
+ built_platforms.last
193
+ end
191
194
  else
192
195
  nil
193
196
  end
@@ -299,7 +302,15 @@ class Installer
299
302
  end
300
303
 
301
304
  def latest_version
302
- versions.last
305
+ versions.reverse_each{ |v|
306
+ begin
307
+ remote_files_matching("#{SERVER_TOP_DIR}/r#{v}/bin.tools",/p4ruby/) do
308
+ return v
309
+ end
310
+ rescue
311
+ next
312
+ end
313
+ }
303
314
  end
304
315
 
305
316
  def make(*args)
@@ -372,6 +383,21 @@ class Installer
372
383
  end
373
384
  end
374
385
 
386
+ def find_ruby_version(spec)
387
+ remote_files_matching(spec.remote, /p4ruby\d\d.exe/) {|r_ver|
388
+
389
+ #Find the latest version of p4ruby for this version of ruby
390
+ v_max = CONFIG["MAJOR"]
391
+ v_min = CONFIG["MINOR"]
392
+ version = [v_max, v_min].join
393
+ if r_ver.to_s =~ /p4ruby#{version}.exe/
394
+ return "p4ruby#{version}.exe"
395
+ end
396
+
397
+ }
398
+ nil
399
+ end
400
+
375
401
  def windows_install
376
402
  #
377
403
  # For Windows, p4ruby is located in the p4api directory on the
@@ -379,8 +405,12 @@ class Installer
379
405
  #
380
406
  spec = @s.p4api
381
407
 
382
- version = [CONFIG["MAJOR"], CONFIG["MINOR"]].join
383
- spec.basename = "p4ruby#{version}.exe"
408
+ p4ruby_exe = find_ruby_version(spec)
409
+ if p4ruby_exe && !(spec.remote.to_s =~ /p4ruby/)
410
+ spec.remote += p4ruby_exe.to_s
411
+ else
412
+ abort("Failed to find a suitable p4ruby executable for ruby #{CONFIG["MAJOR"]}.#{CONFIG["MINOR"]}")
413
+ end
384
414
  fetch_spec(spec)
385
415
 
386
416
  error = lambda {
@@ -390,12 +420,13 @@ class Installer
390
420
  }
391
421
 
392
422
  puts "running Perforce P4Ruby Windows installer..."
393
- if system(spec.local, "/S", "/v/qn")
423
+ if system(spec.local.to_s, "/S", "/v", "/qn")
394
424
  if @s.gem_config
395
425
  sleep(1)
396
426
  raw_install_to_gem_install
397
427
  sleep(1)
398
- unless system(spec.local, "/V", "/x", "/S", "/v/qn")
428
+ #Without the -x flag a permissions error raised on Windows.
429
+ unless system(spec.local, "/V", "/S", "/x", "/v/qn")
399
430
  # We don't much care if this fails; just write to the log
400
431
  puts "Note: the Perforce P4Ruby Windows uninstaller failed."
401
432
  end
data/p4ruby.gemspec CHANGED
@@ -1,15 +1,16 @@
1
1
 
2
2
  Gem::Specification.new { |t|
3
3
  t.name = "p4ruby"
4
- t.version = "1.0.11"
4
+ t.version = "2012.1Beta"
5
5
  t.summary = "Ruby interface to the Perforce API"
6
6
  t.description = t.summary + "."
7
7
  t.author = "Perforce Software (ruby gem by James M. Lawrence)"
8
- t.email = "quixoticsycophant@gmail.com"
8
+ t.email = "p4ruby@perforce.com"
9
9
  t.homepage = "http://p4ruby.rubyforge.org"
10
10
  t.rubyforge_project = "p4ruby"
11
11
  t.extensions << "Rakefile"
12
12
  t.add_dependency "rake"
13
+ t.add_dependency "rdoc"
13
14
  t.require_paths << "ext"
14
15
 
15
16
  t.files = %w[
metadata CHANGED
@@ -1,57 +1,67 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: p4ruby
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 0
8
- - 11
9
- version: 1.0.11
3
+ version: !ruby/object:Gem::Version
4
+ version: 2012.1Beta
5
+ prerelease: 6
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Perforce Software (ruby gem by James M. Lawrence)
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-08-02 00:00:00 -04:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-05-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
22
23
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
24
25
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rdoc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
31
38
  type: :runtime
32
- version_requirements: *id001
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
33
46
  description: Ruby interface to the Perforce API.
34
- email: quixoticsycophant@gmail.com
47
+ email: p4ruby@perforce.com
35
48
  executables: []
36
-
37
- extensions:
49
+ extensions:
38
50
  - Rakefile
39
- extra_rdoc_files:
51
+ extra_rdoc_files:
40
52
  - README
41
- files:
53
+ files:
42
54
  - README
43
55
  - CHANGES
44
56
  - Rakefile
45
57
  - install.rb
46
58
  - p4ruby.gemspec
47
- has_rdoc: true
48
59
  homepage: http://p4ruby.rubyforge.org
49
60
  licenses: []
50
-
51
61
  post_install_message:
52
- rdoc_options:
62
+ rdoc_options:
53
63
  - --title
54
- - "P4Ruby: Ruby interface to the Perforce API"
64
+ - ! 'P4Ruby: Ruby interface to the Perforce API'
55
65
  - --main
56
66
  - README
57
67
  - --exclude
@@ -62,31 +72,25 @@ rdoc_options:
62
72
  - install.rb
63
73
  - --exclude
64
74
  - p4ruby.gemspec
65
- require_paths:
75
+ require_paths:
66
76
  - lib
67
77
  - ext
68
- required_ruby_version: !ruby/object:Gem::Requirement
78
+ required_ruby_version: !ruby/object:Gem::Requirement
69
79
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 0
75
- version: "0"
76
- required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
85
  none: false
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- segments:
82
- - 0
83
- version: "0"
86
+ requirements:
87
+ - - ! '>'
88
+ - !ruby/object:Gem::Version
89
+ version: 1.3.1
84
90
  requirements: []
85
-
86
91
  rubyforge_project: p4ruby
87
- rubygems_version: 1.3.7
92
+ rubygems_version: 1.8.25
88
93
  signing_key:
89
94
  specification_version: 3
90
95
  summary: Ruby interface to the Perforce API
91
96
  test_files: []
92
-