port_upgrade 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/Manifest.txt +1 -0
- data/bin/port_upgrade +1 -0
- data/lib/port_upgrade/cli.rb +31 -2
- data/lib/port_upgrade/version.rb +72 -0
- data/lib/port_upgrade.rb +27 -22
- data/test/test_version.rb +69 -0
- metadata +5 -4
- data/test/test_port_upgrade_cli.rb +0 -15
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/bin/port_upgrade
CHANGED
data/lib/port_upgrade/cli.rb
CHANGED
@@ -13,12 +13,41 @@ module PortUpgrade extend OptiFlagSet
|
|
13
13
|
optional_flag "receipts" do
|
14
14
|
end
|
15
15
|
|
16
|
+
optional_switch_flag "portoutdated" do
|
17
|
+
description "Call \"port outdated\" instead of using internal routine for determining out of date ports. Overides outdated flag."
|
18
|
+
end
|
19
|
+
|
20
|
+
optional_switch_flag "checkoutdated" do
|
21
|
+
description "Compare internal outdated routing with \"port outdated \""
|
22
|
+
end
|
23
|
+
|
24
|
+
optional_switch_flag "verbose" do
|
25
|
+
end
|
26
|
+
|
16
27
|
and_process!
|
17
28
|
|
18
29
|
class CLI
|
19
30
|
def self.execute(stdout, arguments=[])
|
20
|
-
|
21
|
-
|
31
|
+
$verbose = true if PortUpgrade.flags.verbose
|
32
|
+
if PortUpgrade.flags.portoutdated
|
33
|
+
$stderr.print "Running port outdated..."
|
34
|
+
outdated = `port outdated`.find_all{|l| (l =~ /(The following|No installed ports are outdated)/).nil? }.collect{|l| l.split[0]}
|
35
|
+
$stderr.puts "done"
|
36
|
+
if PortUpgrade.flags.checkoutdated
|
37
|
+
mypdb = Ports::PortsDB.new(PortUpgrade.flags.receipts)
|
38
|
+
myoutdated = mypdb.outdated
|
39
|
+
diff = outdated-myoutdated
|
40
|
+
if diff.size > 0
|
41
|
+
$stderr.puts "Difference with internal: #{(outdated-myoutdated).join(",")}\n\n"
|
42
|
+
else
|
43
|
+
$stderr.puts "No Difference"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
pdb = Ports::PortsDB.new(PortUpgrade.flags.receipts,outdated)
|
47
|
+
else
|
48
|
+
pdb = Ports::PortsDB.new(PortUpgrade.flags.receipts)
|
49
|
+
pdb.set_outdated(PortUpgrade.flags.outdated.split(" ")) if PortUpgrade.flags.outdated
|
50
|
+
end
|
22
51
|
$stderr.puts("Outdated(#{pdb.outdated.size}): #{pdb.outdated.join(' ')}")
|
23
52
|
to_remove = pdb.to_remove
|
24
53
|
$stderr.puts "#{to_remove.size} ports to remove: #{to_remove.join(',')}"
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Ports
|
2
|
+
class Version
|
3
|
+
include Comparable
|
4
|
+
attr_reader :parts
|
5
|
+
def initialize(s)
|
6
|
+
@parts = breakup_version(s)
|
7
|
+
end
|
8
|
+
|
9
|
+
def <=>(other)
|
10
|
+
cmp = 0
|
11
|
+
@parts.each_with_index do |p,i|
|
12
|
+
#$stderr.puts "Sizes: #{p.size} #{other.parts[i].size}"
|
13
|
+
p.each_with_index do |q,j|
|
14
|
+
a = q
|
15
|
+
b = other.parts[i][j]
|
16
|
+
a = a.to_i if a =~ /^[0-9]+$/
|
17
|
+
b = b.to_i if b =~ /^[0-9]+$/
|
18
|
+
#$stderr.puts "#{a} <=> #{b}"
|
19
|
+
cmp = a <=> b
|
20
|
+
break if cmp != 0
|
21
|
+
end
|
22
|
+
break if cmp != 0
|
23
|
+
end
|
24
|
+
cmp
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def get_state(c)
|
29
|
+
case c
|
30
|
+
when /[0-9]/
|
31
|
+
state = 'd'
|
32
|
+
else
|
33
|
+
state = 'o'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def subparts(s)
|
38
|
+
state = get_state(s[0,1])
|
39
|
+
#puts "State: #{state}"
|
40
|
+
parts = []
|
41
|
+
part = ""
|
42
|
+
s.each_char do |c|
|
43
|
+
newstate = get_state(c)
|
44
|
+
case newstate
|
45
|
+
when state
|
46
|
+
part << c
|
47
|
+
else
|
48
|
+
parts << part #[part,state]
|
49
|
+
part = ""
|
50
|
+
part << c
|
51
|
+
state = newstate
|
52
|
+
end
|
53
|
+
end
|
54
|
+
parts << part #[part,state]
|
55
|
+
parts
|
56
|
+
end
|
57
|
+
|
58
|
+
def breakup_version(v)
|
59
|
+
raise "Bad input to version; not String" unless v.is_a?(String)
|
60
|
+
if v =~ /\[[^\]]+\]/
|
61
|
+
$stderr.puts "code version: #{v}"
|
62
|
+
result = ["0"]
|
63
|
+
else
|
64
|
+
result = []
|
65
|
+
v.split(/[-_.]/).each do |part|
|
66
|
+
result << subparts(part)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
result
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/port_upgrade.rb
CHANGED
@@ -26,7 +26,7 @@ class String
|
|
26
26
|
end
|
27
27
|
|
28
28
|
module Ports
|
29
|
-
VERSION = '0.0.
|
29
|
+
VERSION = '0.0.4'
|
30
30
|
RECEIPT_PATH = '/opt/local/var/macports/receipts'
|
31
31
|
MACPORTS_DB='/opt/local/var/macports/sources/rsync.macports.org/release/ports'
|
32
32
|
CONFIG_FILE = 'port_upgrade.conf'
|
@@ -54,21 +54,9 @@ module Ports
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def self.cmp_vers(versa,versb)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
b=sb.to_i
|
61
|
-
#a==0 ? asize=0 : asize = Math.log10(a).to_i
|
62
|
-
asize=sa.length
|
63
|
-
#b==0 ? bsize=0 : bsize = Math.log10(b).to_i
|
64
|
-
bsize=sb.length
|
65
|
-
diff = asize-bsize
|
66
|
-
if diff < 0
|
67
|
-
a = a * (10 ** diff.abs)
|
68
|
-
elsif diff > 0
|
69
|
-
b = b * (10 ** diff.abs)
|
70
|
-
end
|
71
|
-
a <=> b
|
57
|
+
va = Version.new(versa)
|
58
|
+
vb = Version.new(versb)
|
59
|
+
return va <=> vb
|
72
60
|
end
|
73
61
|
end
|
74
62
|
|
@@ -149,12 +137,12 @@ module Ports
|
|
149
137
|
@pdb.db.execute("create table ports(port text,version text, variant text)")
|
150
138
|
@pdb.db.execute("create table deps(port text, dep text)")
|
151
139
|
@pdb.db.execute("create unique index uniqdep on deps(port,dep)")
|
152
|
-
|
140
|
+
receipt_size = receipt_path.split("/").size
|
153
141
|
Find.find(receipt_path) do |filename|
|
154
142
|
next unless filename =~ /.bz2$/
|
155
143
|
next unless File.stat(filename).file?
|
156
144
|
pieces = filename.split("/")
|
157
|
-
next unless pieces.size ==
|
145
|
+
next unless (pieces.size - receipt_size) == 3
|
158
146
|
original_portname = pieces[-3]
|
159
147
|
md = /([^+]+)((\+\w+)*)/.match(pieces[-2]) #seperate version from variants
|
160
148
|
version = md[1]
|
@@ -326,7 +314,15 @@ module Ports
|
|
326
314
|
if File.exist?(portfile_path)
|
327
315
|
curver = Portfile.new(portfile_path).version
|
328
316
|
#puts "%-32s%s < %s" %[port,version.split('+').first,curver] if Ports::Utilities.cmp_vers(version.split('+').first,curver) < 0
|
329
|
-
|
317
|
+
$stderr.puts("#{port}: #{version.split('+').first}, #{curver}") if $verbose
|
318
|
+
cmp = Ports::Utilities.cmp_vers(version.split('+').first,curver)
|
319
|
+
if cmp.nil?
|
320
|
+
$stderr.puts "Unable to compare versions: #{[port]}"
|
321
|
+
else
|
322
|
+
if cmp < 0
|
323
|
+
@outdated << port
|
324
|
+
end
|
325
|
+
end
|
330
326
|
else
|
331
327
|
$stderr.puts "Unable to process Portfile (File Not Found) for #{port}"
|
332
328
|
end
|
@@ -373,7 +369,7 @@ module Ports
|
|
373
369
|
end
|
374
370
|
bi = get_before_install(port)
|
375
371
|
dotsh.puts(bi) unless bi.nil?
|
376
|
-
dotsh.puts("port install #{port} #{remvariants[port][variantindex]} || exit -1")
|
372
|
+
dotsh.puts("port #{get_force(port)} install #{port} #{remvariants[port][variantindex]} || exit -1")
|
377
373
|
ai = get_after_install(port)
|
378
374
|
dotsh.puts(ai) unless ai.nil?
|
379
375
|
end
|
@@ -381,6 +377,15 @@ module Ports
|
|
381
377
|
true
|
382
378
|
end
|
383
379
|
|
380
|
+
def get_force(portname)
|
381
|
+
force = get_port_action(portname,:force_install)
|
382
|
+
if force
|
383
|
+
return "-f"
|
384
|
+
else
|
385
|
+
return ""
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
384
389
|
def get_before_uninstall(portname)
|
385
390
|
get_port_action(portname,:before_uninstall)
|
386
391
|
end
|
@@ -466,8 +471,8 @@ module Ports
|
|
466
471
|
when /^revision\s+([^\s]+)/
|
467
472
|
rev = $1
|
468
473
|
#$stderr.puts "revision found #{rev}"
|
469
|
-
when
|
470
|
-
v = $2 if v.nil?
|
474
|
+
when /(\w+\.setup\s+\{[^\}]+\}\s+([^\s]+)|^\w+\.setup\s+[^ ]+ (.*))/
|
475
|
+
v = $2 || $3 if v.nil?
|
471
476
|
break
|
472
477
|
when /(\S+)\s+([^$]+)$/
|
473
478
|
vars[$1] = $2
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib','port_upgrade','version')
|
2
|
+
require 'test/unit'
|
3
|
+
include Ports
|
4
|
+
|
5
|
+
class TestVersion < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
raw_tests = %q{ImageMagick 6.4.6-7_0 < 6.4.8-1_0
|
8
|
+
binutils 2.17_0 < 2.19_0
|
9
|
+
boost 1.35.0_2 < 1.37.0_0
|
10
|
+
cairo 1.8.4_0 < 1.8.6_1
|
11
|
+
dbus 1.2.4_2 < 1.2.10_0
|
12
|
+
dbus-glib 0.76_1 < 0.78_0
|
13
|
+
fftw-3 3.2_0 < 3.2_1
|
14
|
+
fontconfig 2.6.0_0 < 2.6.0_1
|
15
|
+
git-core 1.6.0.4_0 < 1.6.1_0
|
16
|
+
gtk2 2.14.4_1 < 2.14.5_0
|
17
|
+
iso-codes 3.2_0 < 3.5_0
|
18
|
+
libgpg-error 1.6_0 < 1.7_0
|
19
|
+
libidl 0.8.11_0 < 0.8.12_0
|
20
|
+
libpng 1.2.33_0 < 1.2.34_0
|
21
|
+
libtool 1.5.26_0 < 2.2.6a_0
|
22
|
+
mhash 0.9.9_0 < 0.9.9.9_0
|
23
|
+
pango 1.22.3_0 < 1.22.4_0
|
24
|
+
proj 4.6.0_0 < 4.6.1_0
|
25
|
+
py25-hashlib 2.5.2_0 < 2.5.4_0
|
26
|
+
py25-sqlite3 2.5.2_0 < 2.5.4_0
|
27
|
+
py25-zlib 2.5.2_0 < 2.5.4_0
|
28
|
+
python25 2.5.2_7 < 2.5.4_0
|
29
|
+
subversion 1.5.4_0 < 1.5.5_0
|
30
|
+
subversion-perlbindings 1.5.4_0 < 1.5.5_0
|
31
|
+
wireshark 1.0.4_0 < 1.0.5_0
|
32
|
+
xorg-util-macros 1.2.0_0 < 1.2.1_0
|
33
|
+
xrender 0.9.4_1 < 0.9.4_4
|
34
|
+
}
|
35
|
+
@tests = raw_tests.collect{|l| parts = l.split(" "); [parts[1],parts[3]] }
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_1
|
39
|
+
v1 = Version.new("1.2.6_0")
|
40
|
+
v2 = Version.new("1.2.10_0")
|
41
|
+
assert_equal(v1 <=> v2, -1)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_2
|
45
|
+
v1 = Version.new("1.5.26_0")
|
46
|
+
v2 = Version.new("2.2.6a_0")
|
47
|
+
assert_equal(v1 <=> v2, -1)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_3
|
51
|
+
v1 = Version.new("2.2.6b_0")
|
52
|
+
v2 = Version.new("2.2.6a_0")
|
53
|
+
assert_equal(v1 <=> v2, 1)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_current
|
57
|
+
@tests.each do |test|
|
58
|
+
v1 = Version.new(test[0])
|
59
|
+
v2 = Version.new(test[1])
|
60
|
+
assert_equal(v1 <=> v2, -1)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_other_class
|
65
|
+
assert_raise RuntimeError do
|
66
|
+
v = Version.new(["2"])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: port_upgrade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Doan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-02 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- Rakefile
|
81
81
|
- lib/port_upgrade.rb
|
82
82
|
- lib/port_upgrade/cli.rb
|
83
|
+
- lib/port_upgrade/version.rb
|
83
84
|
- bin/port_upgrade
|
84
85
|
- etc/port_upgrade.conf.sample
|
85
86
|
has_rdoc: true
|
@@ -88,7 +89,7 @@ post_install_message: |+
|
|
88
89
|
|
89
90
|
|
90
91
|
A sample config file can be found in:
|
91
|
-
/opt/local/lib/ruby/gems/1.8/gems/port_upgrade-0.0.
|
92
|
+
/opt/local/lib/ruby/gems/1.8/gems/port_upgrade-0.0.4/etc
|
92
93
|
To install copy it to ~/.port_upgrade.conf
|
93
94
|
|
94
95
|
|
@@ -117,4 +118,4 @@ signing_key:
|
|
117
118
|
specification_version: 2
|
118
119
|
summary: Summary
|
119
120
|
test_files:
|
120
|
-
- test/
|
121
|
+
- test/test_version.rb
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "test_helper.rb")
|
2
|
-
require 'port_upgrade/cli'
|
3
|
-
|
4
|
-
class TestPortUpgradeCli < Test::Unit::TestCase
|
5
|
-
def setup
|
6
|
-
@stdout_io = StringIO.new
|
7
|
-
PortUpgrade::CLI.execute(@stdout_io, [])
|
8
|
-
@stdout_io.rewind
|
9
|
-
@stdout = @stdout_io.read
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_not_print_default_output
|
13
|
-
assert_no_match(/To update this executable/, @stdout)
|
14
|
-
end
|
15
|
-
end
|