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 CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.4.0 2009-01-02
2
+ * Add flag to call port outdated instead of using internal routine
3
+ * Complete rewrite of version comparison routine
4
+ * Bugs
5
+ * Fix computing depth of receipts when using a custom path
1
6
  == 0.0.3 2008-12-23
2
7
 
3
8
  * Bug Fix Release:
data/Manifest.txt CHANGED
@@ -4,5 +4,6 @@ README.txt
4
4
  Rakefile
5
5
  lib/port_upgrade.rb
6
6
  lib/port_upgrade/cli.rb
7
+ lib/port_upgrade/version.rb
7
8
  bin/port_upgrade
8
9
  etc/port_upgrade.conf.sample
data/bin/port_upgrade CHANGED
@@ -6,5 +6,6 @@
6
6
  require File.expand_path(File.dirname(__FILE__) + "/../lib/port_upgrade")
7
7
 
8
8
  require "port_upgrade/cli"
9
+ require "port_upgrade/version"
9
10
 
10
11
  PortUpgrade::CLI.execute(STDOUT, ARGV)
@@ -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
- pdb = Ports::PortsDB.new(PortUpgrade.flags.receipts)
21
- pdb.set_outdated(PortUpgrade.flags.outdated.split(" ")) if PortUpgrade.flags.outdated
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.3'
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
- sa = versa.tr("._-","")
58
- sb = versb.tr("._-","")
59
- a=sa.to_i
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 == 9
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
- @outdated << port if Ports::Utilities.cmp_vers(version.split('+').first,curver) < 0
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 /\w+\.setup\s+(\S+)? ([\S]+)/
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.3
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: 2008-12-31 00:00:00 -08:00
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.3/etc
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/test_port_upgrade_cli.rb
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