port_upgrade 0.0.5 → 0.1.0

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.
@@ -1,3 +1,21 @@
1
+ == 0.1.0 2009-03-12
2
+ * Removed use of optiflag gem. Using built-in optparse instead. The output flag has changed to -o from -ouput.
3
+ * New script output allowing for individual phases to be run. Default is still to run everything.
4
+ * Added experiment port_purge tool. USE WITH CAUTION. Does port removes directly so must be run as root.
5
+ * New Port class added to better encapsulate functionality specfic to a port. Not used yet by main line of code.
6
+ * More tests, more to come.
7
+ * Bugs
8
+ * Removed post install message which had hard coded path (despite best efforts to make it dynamic)
9
+ * Fixes for sameple config file.
10
+ * Moved class Port into it's own file.
11
+ * Catch errors when reading malformed config files.
12
+ * When prompting about conflicting variants remove dups.
13
+ * Fixes Ruby 1.8.6 compatibility in <=> routine of Version class.
14
+ * port_tree.rb uses PortsDB class instead of the SQLite3 database directly
15
+ * Clear cached to_remove when outdated changes.
16
+ * Better regex for parsing exceptionally weird version strings in Portfiles.
17
+ * Return 0 for version strings that contain TCL code, for now.
18
+
1
19
  == 0.0.5 2009-01-06
2
20
  * Bugs
3
21
  * port install needs -x to actually give useful return codes
@@ -2,8 +2,12 @@ History.txt
2
2
  Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
+ lib/port_purge/cli.rb
5
6
  lib/port_upgrade.rb
6
7
  lib/port_upgrade/cli.rb
8
+ lib/port_upgrade/port.rb
9
+ lib/port_upgrade/port_upgrade_sh.erb
7
10
  lib/port_upgrade/version.rb
8
11
  bin/port_upgrade
12
+ bin/port_purge
9
13
  etc/port_upgrade.conf.sample
data/README.txt CHANGED
@@ -16,7 +16,8 @@ A clean way to keep your MacPorts up to date.
16
16
  Updates your MacPorts while also removing old dependent versions of libraries and applications.
17
17
 
18
18
  == SYNOPSIS:
19
-
19
+ 0) Install a port_upgrade config file into ~/.port_upgrade.conf,
20
+ a sample is included with the gem (optional)
20
21
  1) Update your ports database from macports.org
21
22
  sudo port selfupdate (or sync)
22
23
  2) Run port_upgrade to generate a shell script
@@ -29,7 +30,6 @@ Updates your MacPorts while also removing old dependent versions of libraries an
29
30
 
30
31
  * ruby-sqlite3 gem
31
32
  * bz2 gem
32
- * optiflag gem
33
33
 
34
34
  == INSTALL:
35
35
 
data/Rakefile CHANGED
@@ -7,21 +7,10 @@ $hoe = Hoe.new('port_upgrade',Ports::VERSION) do |p|
7
7
  p.developer('Tony Doan', 'tdoan@tdoan.com')
8
8
  p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
9
9
  p.summary = "Cleanly upgrade your MacPorts."
10
- p.post_install_message = %Q{
11
-
12
- A sample config file can be found in:
13
- #{GEM_DIR}/port_upgrade-#{Ports::VERSION}/etc
14
- To install copy it to ~/.port_upgrade.conf
15
-
16
-
17
- }
18
-
19
10
  p.rubyforge_name = "portupgrade"
20
- p.summary = "Summary"
21
11
  p.extra_deps = [
22
12
  ['sqlite3-ruby','>= 1.2.0'],
23
- ['bz2','>= 0.2'],
24
- ['optiflag','>= 0.6.0'],
13
+ ['bz2','>= 0.2']
25
14
  ]
26
15
  p.extra_dev_deps = [
27
16
  ['newgem', ">= #{::Newgem::VERSION}"]
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created on 2009-2-1.
4
+ # Copyright (c) 2009. All rights reserved.
5
+
6
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/port_upgrade")
7
+
8
+ require "port_purge/cli"
9
+
10
+ PortPurge::CLI.execute(STDOUT, ARGV)
@@ -5,7 +5,11 @@
5
5
  ncursesw:
6
6
  :after_uninstall: rm -rf /opt/local/share/terminfo
7
7
  ImageMagick:
8
- :before_uninstall: gem uninstall rmagick
8
+ :before_uninstall: gem uninstall -I rmagick
9
9
  :after_install: gem install rmagick
10
+ :force_install: true
10
11
  python25:
11
- :after_install: python_select python25
12
+ :final_install: python_select python25
13
+ sqlite3:
14
+ :before_uninstall: gem uninstall -I sqlite3-ruby
15
+ :after_install: gem install sqlite3-ruby
@@ -0,0 +1,73 @@
1
+ require 'optparse'
2
+ require 'ostruct'
3
+ require 'yaml'
4
+
5
+ include Ports
6
+
7
+ module PortPurge
8
+ class CLI
9
+ DOTFILEPATH = File.join(ENV['HOME'],".port_upgrade_ports")
10
+ def self.execute(stdout, arguments=[])
11
+ options = OpenStruct.new
12
+ options.filter = nil
13
+ opts = OptionParser.new do |opts|
14
+ opts.banner = "Usage: port_purge [-f filter]"
15
+ opts.on("-f", "--filter FILTER","FILTER ports to purge") do |filter|
16
+ options.filter = filter
17
+ end
18
+ end
19
+ opts.parse!
20
+
21
+ @to_remove = []
22
+ @keep = []
23
+ begin
24
+ @keep = YAML::load(File.read(DOTFILEPATH)) if File.readable?(DOTFILEPATH)
25
+ rescue ArgumentError
26
+ $stderr.puts("Badly formed .port_upgrade_ports file. Skipping.")
27
+ end
28
+ @pdb = PortsDB.new
29
+ ports = @pdb.db.query('select port from ports').collect{|p| p[0]}
30
+ deps = @pdb.db.query('select dep from deps').collect{|p| p[0]}
31
+ $stderr.puts "Leaves:"
32
+ diff = (ports-deps).sort
33
+ $stderr.puts "Applying filter /#{options.filter}/" unless options.filter.nil?
34
+ diff.each do |leaf|
35
+ next if @keep.include? leaf
36
+ unless options.filter.nil?
37
+ next unless Regexp.compile(options.filter).match(leaf)
38
+ end
39
+
40
+ $stderr.print leaf
41
+ $stderr.print " Remove? (Y/N/S/Q)"
42
+ reply = $stdin.gets
43
+ case reply.strip
44
+ when /^(yes|y)$/i
45
+ @to_remove << leaf
46
+ when /^(quit|q)$/i
47
+ exit -1
48
+ when /^(skip|s)$/i
49
+ break
50
+ $stderr.puts
51
+ else
52
+ @keep << leaf
53
+ end
54
+ end
55
+ File.open(DOTFILEPATH,'w') do |f|
56
+ f.write(@keep.to_yaml)
57
+ end
58
+ exit 0 unless @to_remove.size > 0
59
+ $stderr.print "Really remove #{@to_remove.join(" ")} ? (type yes) "
60
+ reply = $stdin.gets
61
+ if reply =~ /^yes$/i
62
+ @to_remove.each do |leaf|
63
+ s = "port uninstall #{leaf}"
64
+ $stderr.puts s
65
+ system(s)
66
+ end
67
+ else
68
+ $stderr.puts "Exiting"
69
+ exit -1
70
+ end
71
+ end
72
+ end
73
+ end
@@ -11,14 +11,16 @@
11
11
  # newer version instead, at your option.
12
12
  # ====================================================================
13
13
  #
14
-
14
+ require 'rubygems'
15
15
  $:.unshift(File.dirname(__FILE__)) unless
16
16
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
17
-
17
+ require 'port_upgrade/port'
18
+ require 'port_upgrade/version'
18
19
  require 'yaml'
19
20
  require 'bz2'
20
21
  require 'find'
21
22
  require 'sqlite3'
23
+ require 'erb'
22
24
 
23
25
  class String
24
26
  def dot_clean
@@ -27,10 +29,11 @@ class String
27
29
  end
28
30
 
29
31
  module Ports
30
- VERSION = '0.0.5'
32
+ VERSION = '0.1.0'
31
33
  RECEIPT_PATH = '/opt/local/var/macports/receipts'
32
34
  MACPORTS_DB='/opt/local/var/macports/sources/rsync.macports.org/release/ports'
33
35
  CONFIG_FILE = 'port_upgrade.conf'
36
+ SH_ERB_PATH = File.join(File.dirname(__FILE__),"port_upgrade","port_upgrade_sh.erb")
34
37
  Struct.new('Edge',:port,:dep,:level)
35
38
  class Struct::Edge
36
39
  def <=>(other)
@@ -61,9 +64,6 @@ module Ports
61
64
  end
62
65
  end
63
66
 
64
- class Port
65
- end
66
-
67
67
  class PortTree
68
68
  def initialize(pdb,path=nil)
69
69
  @path=path
@@ -121,7 +121,7 @@ module Ports
121
121
  end
122
122
  @pdb.db.execute("insert or ignore into remports values(\"#{a}\",\"\")")
123
123
  end
124
- @pdb.db.execute('delete from remports where port="gimp-app" and dep="gimp"')
124
+ #@pdb.db.execute('delete from remports where port="gimp-app" and dep="gimp"')
125
125
  #File.open("remtree.dot",'w') do |f|
126
126
  # pt = table_to_tree('remports','remports','port','port','dep')
127
127
  # f.write(pt.to_dot)
@@ -208,7 +208,7 @@ module Ports
208
208
  @db = SQLite3::Database.new(':memory:')#('port_tree.db')
209
209
  @pt = PortTree.new(self,path)
210
210
  @installed = @pt.installed
211
- @outdated = outdated
211
+ set_outdated(outdated)
212
212
  @to_remove = nil
213
213
  config_file = locate_config_file
214
214
  unless config_file.nil?
@@ -217,6 +217,9 @@ module Ports
217
217
  @config = {} if @config == false
218
218
  rescue Errno::ENOENT
219
219
  $stderr.puts("No configuration loaded.")
220
+ rescue ArgumentError
221
+ $stderr.puts("Badly formed config file.")
222
+ exit(-1)
220
223
  end
221
224
  else
222
225
  $stderr.puts("No configuration loaded.")
@@ -280,7 +283,14 @@ module Ports
280
283
  end
281
284
 
282
285
  def set_outdated(out)
286
+ begin
287
+ out.each{|o| Port.new(o)} unless out.nil?
288
+ rescue RuntimeError => ex
289
+ $stderr.puts ex
290
+ exit(-1)
291
+ end
283
292
  @outdated = out
293
+ @to_remove = nil
284
294
  end
285
295
 
286
296
  def outdated(reload = false)
@@ -315,8 +325,8 @@ module Ports
315
325
  if File.exist?(portfile_path)
316
326
  curver = Portfile.new(portfile_path).version
317
327
  #puts "%-32s%s < %s" %[port,version.split('+').first,curver] if Ports::Utilities.cmp_vers(version.split('+').first,curver) < 0
318
- $stderr.puts("#{port}: #{version.split('+').first}, #{curver}") if $DEBUG
319
328
  cmp = Ports::Utilities.cmp_vers(version.split('+').first,curver)
329
+ $stderr.puts("#{port}: #{version.split('+').first} <=> #{curver} #{cmp}") if $DEBUG
320
330
  if cmp.nil?
321
331
  $stderr.puts "Unable to compare versions: #{[port]}"
322
332
  else
@@ -334,6 +344,8 @@ module Ports
334
344
 
335
345
  def upgrade(path='port_upgrade.sh')
336
346
  final = []
347
+ uninstall_data = []
348
+ install_data = []
337
349
  @pt.setup_remports(outdated) if @to_remove.nil?
338
350
  remports = []
339
351
  remvariants = Hash.new {|h,k| h[k] = Array.new}
@@ -341,7 +353,6 @@ module Ports
341
353
  dotsh = File.new(path,'w')
342
354
  dotsh.chmod(0700)
343
355
  $stderr.puts "port_upgrade.sh open for write" if $DEBUG
344
- dotsh.puts("#!/bin/sh")
345
356
  while stmt.execute.to_a.first[0].to_i > 0
346
357
  temp = get_leaves
347
358
  break if temp.size == 0
@@ -350,12 +361,12 @@ module Ports
350
361
  installed = rs.to_a
351
362
  installed.each do |port|
352
363
  bu = get_before_uninstall(port[0])
353
- dotsh.puts(bu) unless bu.nil?
354
- dotsh.puts("port uninstall #{port[0]} @#{port[1]}#{port[2]} || exit -1")
364
+ uninstall_data << bu unless bu.nil?
365
+ uninstall_data << "port uninstall #{port[0]} @#{port[1]}#{port[2]} || exit -1"
355
366
  au = get_after_uninstall(port[0])
356
- dotsh.puts(au) unless au.nil?
367
+ uninstall_data << au unless au.nil?
357
368
  remports.push(port[0])
358
- remvariants[port[0]].push(port[2])
369
+ remvariants[port[0]].push(port[2]) if remvariants[port[0]] and remvariants[port[0]].index(port[2]).nil?
359
370
  end
360
371
  end
361
372
  end
@@ -370,15 +381,17 @@ module Ports
370
381
  variantindex = 0
371
382
  end
372
383
  bi = get_before_install(port)
373
- dotsh.puts(bi) unless bi.nil?
374
- dotsh.puts("port #{get_force(port)} -x install #{port} #{remvariants[port][variantindex]} || exit -1")
384
+ uninstall_data << bi unless bi.nil?
385
+ install_data << "port #{get_force(port)} -x install #{port} #{remvariants[port][variantindex]} || exit -1"
375
386
  ai = get_after_install(port)
376
387
  fi = get_final_install(port)
377
388
  final << fi unless fi.nil?
378
- dotsh.puts(ai) unless ai.nil?
389
+ install_data << ai unless ai.nil?
379
390
  end
380
391
  stmt.close
381
- final.each{|l| dotsh.puts(l)}
392
+ final_actions = final
393
+ template = ERB.new(File.read(SH_ERB_PATH))
394
+ dotsh.puts template.result(binding)
382
395
  dotsh.close
383
396
  true
384
397
  end
@@ -418,8 +431,8 @@ module Ports
418
431
  unless @config.nil?
419
432
  if @config.has_key?(:actions)
420
433
  if @config[:actions].has_key?(portname)
421
- if @config[:actions][portname].has_key?(type)
422
- @config[:actions][portname][type]
434
+ if @config[:actions][portname].is_a?(Hash) and @config[:actions][portname].has_key?(type)
435
+ @config[:actions][portname][type].to_s
423
436
  else
424
437
  nil
425
438
  end
@@ -432,7 +445,7 @@ module Ports
432
445
  answer=false
433
446
  while(!answer)
434
447
  $stderr.puts "Please choose from list:"
435
- variants.each_with_index{|v,i| $stderr.puts "#{i}: #{v=="" ? "(none)" : v}"}
448
+ variants.sort.each_with_index{|v,i| $stderr.puts "#{i}: #{v=="" ? "(none)" : v}"}
436
449
  $stderr.print "> "
437
450
  reply = $stdin.gets
438
451
  clean = (reply.strip =~ /-?[0-9]+/)
@@ -449,6 +462,7 @@ module Ports
449
462
 
450
463
  class Portfile
451
464
  def initialize(path)
465
+ raise Errno::ENOENT if (File.file?(path) == false or File.readable?(path) == false)
452
466
  @path = path
453
467
  end
454
468
 
@@ -467,6 +481,8 @@ module Ports
467
481
  when /^set\s+(\S+)\s+(\S+)/
468
482
  vars[$1] = $2
469
483
  #$stderr.puts "Var: #{$1} Val: #{$2}"
484
+ when /^version\s+\[(.*)\]/
485
+ v = nil
470
486
  when /^version\s+([^\s]+)/
471
487
  v = $1
472
488
  while(v =~ /(\$\{([^}]+)\})/) do
@@ -481,7 +497,7 @@ module Ports
481
497
  when /^revision\s+([^\s]+)/
482
498
  rev = $1
483
499
  #$stderr.puts "revision found #{rev}"
484
- when /(\w+\.setup\s+\{[^\}]+\}\s+([^\s]+)|^\w+\.setup\s+[^ ]+ (.*))/
500
+ when /(\w+\.setup\s+\{[^\}]+\}\s+([^\s]+)|^\w+\.setup\s+[^ ]+ (\S+))/
485
501
  v = $2 || $3 if v.nil?
486
502
  break
487
503
  when /(\S+)\s+([^$]+)$/
@@ -489,7 +505,7 @@ module Ports
489
505
  end
490
506
  end
491
507
  rev = "0" if rev.nil?
492
- v = v +"_"+rev
508
+ v = v +"_"+rev unless v.nil?
493
509
  return v
494
510
  end
495
511
  end
@@ -1,40 +1,62 @@
1
- require 'optiflag'
1
+ require 'optparse'
2
+ require 'ostruct'
2
3
 
3
- module PortUpgrade extend OptiFlagSet
4
-
5
- flag "output" do
6
- description "Where to output the shell script that performs the upgrade."
7
- end
8
-
9
- optional_flag "outdated" do
10
- description "Specify the list of outdated ports to upgrade."
11
- end
12
-
13
- optional_flag "receipts" do
14
- end
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
-
27
- and_process!
4
+ module PortUpgrade
28
5
 
29
6
  class CLI
30
7
  def self.execute(stdout, arguments=[])
31
- $verbose = true if PortUpgrade.flags.verbose
32
- if PortUpgrade.flags.portoutdated
8
+ options = OpenStruct.new
9
+ options.output = nil
10
+ options.receipts = nil
11
+ options.outdated = nil
12
+ options.portoutdated = false
13
+ options.checkoutdated = false
14
+ options.verbose = false
15
+
16
+ opts = OptionParser.new do |opts|
17
+ opts.banner = "Usage: port_upgrade.rb -oFILENAME [options]"
18
+ opts.on("-o", "--output FILE","FILE to output shell commands") do |output|
19
+ options.output = output
20
+ end
21
+ opts.on("--receipts PATH","PATH to receipts files") do |receipts|
22
+ options.receipts = receipts
23
+ end
24
+ opts.on("--outdated OUTDATED","Space seperated list of ports to mark as outdated") do |outdated|
25
+ options.outdated = outdated.split(" ")
26
+ end
27
+ opts.on("--portoutdated",'Use `port outdated`(slow) instead of internal version checking routine(fast)') do |po|
28
+ options.portoutdated = po
29
+ $stderr.puts "PORTOUTDATED: #{po}"
30
+ end
31
+ opts.on("--checkoutdated",'Check `port outdated` against internal routine for inconsistencies') do |co|
32
+ options.checkoutdated = co
33
+ $stderr.puts "CHECKOUTDATED: #{co}"
34
+ end
35
+ opts.on_tail("-V", "--version","Show version") do
36
+ $stderr.puts "port_upgrade #{Ports::VERSION}"
37
+ exit
38
+ end
39
+ opts.on_tail("-h", "--help", "Show this message") do
40
+ puts opts
41
+ exit
42
+ end
43
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
44
+ $stderr.puts "VERBOSE: #{v}"
45
+ options.verbose = v
46
+ end
47
+ end
48
+ opts.parse!(arguments)
49
+ if !options.output
50
+ puts opts
51
+ exit 1
52
+ end
53
+ $verbose = true# if options.verbose
54
+ if options.portoutdated
33
55
  $stderr.print "Running port outdated..."
34
56
  outdated = `port outdated`.find_all{|l| (l =~ /(The following|No installed ports are outdated)/).nil? }.collect{|l| l.split[0]}
35
57
  $stderr.puts "done"
36
- if PortUpgrade.flags.checkoutdated
37
- mypdb = Ports::PortsDB.new(PortUpgrade.flags.receipts)
58
+ if options.checkoutdated
59
+ mypdb = Ports::PortsDB.new(options.receipts)
38
60
  myoutdated = mypdb.outdated
39
61
  diff = outdated-myoutdated
40
62
  if diff.size > 0
@@ -43,15 +65,15 @@ module PortUpgrade extend OptiFlagSet
43
65
  $stderr.puts "No Difference"
44
66
  end
45
67
  end
46
- pdb = Ports::PortsDB.new(PortUpgrade.flags.receipts,outdated)
68
+ pdb = Ports::PortsDB.new(options.receipts,outdated)
47
69
  else
48
- pdb = Ports::PortsDB.new(PortUpgrade.flags.receipts)
49
- pdb.set_outdated(PortUpgrade.flags.outdated.split(" ")) if PortUpgrade.flags.outdated
70
+ pdb = Ports::PortsDB.new(options.receipts)
71
+ pdb.set_outdated(options.outdated) if options.outdated
50
72
  end
51
73
  $stderr.puts("Outdated(#{pdb.outdated.size}): #{pdb.outdated.join(' ')}")
52
74
  to_remove = pdb.to_remove
53
75
  $stderr.puts "#{to_remove.size} ports to remove: #{to_remove.join(',')}"
54
- pdb.upgrade(PortUpgrade.flags.output)
76
+ pdb.upgrade(options.output)
55
77
  pdb.close
56
78
  end
57
79
  end
@@ -0,0 +1,64 @@
1
+ module Ports
2
+ class Port
3
+ attr_reader :name,:versions,:portfile_path
4
+
5
+ def initialize(portname)
6
+ tmpp = File.join(RECEIPT_PATH,portname)
7
+ @name = portname
8
+ @versions = []
9
+ if File.exist?(tmpp) and File.readable?(tmpp)
10
+ @rp = tmpp
11
+ Find.find(@rp) do |d|
12
+ next unless File.directory?(d)
13
+ next if d == @rp
14
+ b = File.basename(d)
15
+ md = /([^+]+)((\+\w+)*)/.match(b)
16
+ @versions << md[1] unless md.nil?
17
+ end
18
+ end
19
+
20
+ Dir.entries(MACPORTS_DB).each do |d|
21
+ if File.directory?(File.join(MACPORTS_DB,d)) && d != '.' && d != '..'
22
+ testpath = File.join(MACPORTS_DB,d,@name,'Portfile')
23
+ if File.exist?(testpath)
24
+ @portfile_path = testpath
25
+ break
26
+ end
27
+ end
28
+ end
29
+ raise "NoSuchPort: #{@name}" if @portfile_path.nil?
30
+ end
31
+
32
+ def installed?
33
+ @rp.nil? ? false : true
34
+ end
35
+
36
+ def receipt_path=(path)
37
+ @rp = path
38
+ end
39
+
40
+ def receipt_path
41
+ @rp
42
+ end
43
+
44
+ def portfile
45
+ return nil if @portfile_path.nil?
46
+ @portfile ||= Ports::Portfile.new(@portfile_path)
47
+ end
48
+
49
+ def name=(n)
50
+ @name = n
51
+ end
52
+
53
+ def outdated?
54
+ result = false
55
+ @versions.each do |v|
56
+ if Ports::Utilities.cmp_vers(v,portfile.version) < 0
57
+ result = true
58
+ break
59
+ end
60
+ end
61
+ result
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,52 @@
1
+ #!/bin/sh
2
+
3
+ <%if uninstall_data.size == 0 and install_data.size == 0 and final_actions.size == 0 %>
4
+ echo "Nothing to upgrade"
5
+ <% else %>
6
+
7
+ uninstall_ports() {
8
+ <%= uninstall_data.join("\n") %>
9
+ }
10
+
11
+ install_ports() {
12
+ <%= install_data.join("\n") %>
13
+ }
14
+
15
+ <% if final_actions.size > 0 %>
16
+ final_actions()
17
+ {
18
+ <%= final_actions.join("\n") %>
19
+ }
20
+ <% end %>
21
+
22
+ case $1 in
23
+ uninstall)
24
+ echo "uninstall"
25
+ uninstall_ports
26
+ ;;
27
+ install)
28
+ echo "install"
29
+ install_ports
30
+ ;;
31
+ final)
32
+ <%if final_actions.size > 0 %>
33
+ echo "final actions"
34
+ final_actions
35
+ <% else %>
36
+ echo "No final actions"
37
+ <% end %>
38
+ ;;
39
+ '')
40
+ echo "full run"
41
+ uninstall_ports
42
+ install_ports
43
+ <%if final_actions.size > 0 %>
44
+ final_actions
45
+ <% end %>
46
+ ;;
47
+ *)
48
+ echo $1: unknown option >&2
49
+ exit 1
50
+ ;;
51
+ esac
52
+ <% end %>
@@ -7,6 +7,7 @@ module Ports
7
7
  end
8
8
 
9
9
  def <=>(other)
10
+ return 0 if @parts.nil? or other.parts.nil?
10
11
  $stderr.puts("self: #{@parts.inspect}") if $DEBUG
11
12
  $stderr.puts("other: #{other.parts.inspect}") if $DEBUG
12
13
  cmp = 0
@@ -52,7 +53,7 @@ module Ports
52
53
  #puts "State: #{state}"
53
54
  parts = []
54
55
  part = ""
55
- s.each_char do |c|
56
+ s.each_byte do |c|
56
57
  newstate = get_state(c)
57
58
  case newstate
58
59
  when state
@@ -69,6 +70,7 @@ module Ports
69
70
  end
70
71
 
71
72
  def breakup_version(v)
73
+ return nil if v.nil?
72
74
  raise "Bad input to version; not String" unless v.is_a?(String)
73
75
  if v =~ /\[[^\]]+\]/
74
76
  $stderr.puts "code version: #{v}"
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'mocha'
@@ -0,0 +1,33 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require File.join(File.dirname(__FILE__), '..', 'lib','port_upgrade')
3
+ require 'shoulda'
4
+ include Ports
5
+
6
+ class TestPort < Test::Unit::TestCase
7
+ context "A Port instance" do
8
+ setup do
9
+ @port = Port.new('wget')
10
+ end
11
+
12
+ should "return not nil" do
13
+ assert_not_nil @port
14
+ end
15
+
16
+ should "be installed" do
17
+ assert(@port.installed?)
18
+ end
19
+ end
20
+
21
+ context "A NoSuchPort instance" do
22
+ setup do
23
+ end
24
+
25
+ should "raise NoSuchPort" do
26
+ assert_raise RuntimeError do
27
+ @port = Port.new('NOTwget')
28
+ end
29
+ assert_nil(@port)
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,16 @@
1
+ #require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require 'test/unit'
3
+ require 'stringio'
4
+ require 'port_purge/cli'
5
+
6
+ class TestPortPurgeCli < Test::Unit::TestCase
7
+ #def setup
8
+ # PortPurge::CLI.execute(@stdout_io = StringIO.new, [])
9
+ # @stdout_io.rewind
10
+ # @stdout = @stdout_io.read
11
+ #end
12
+
13
+ def test_not_print_default_output
14
+ assert_no_match(/To update this executable/, @stdout)
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require 'test/unit'
3
+ require 'port_upgrade/cli'
4
+ require 'stringio'
5
+ require 'optparse'
6
+
7
+ class TestPortUpgradeCli < Test::Unit::TestCase
8
+ def setup
9
+ #PortUpgrade::CLI.execute(@stdout_io = StringIO.new, [])
10
+ #@stdout_io.rewind
11
+ #@stdout = @stdout_io.read
12
+ end
13
+
14
+ def test_not_print_default_output
15
+ #assert_no_match(/To update this executable/, @stdout)
16
+ end
17
+
18
+ def test_output_flag_requires_argument
19
+ assert_raise OptionParser::MissingArgument do
20
+ PortUpgrade::CLI.execute(stdout_io = StringIO.new, ["-o"])
21
+ stdout_io.rewind
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require File.join(File.dirname(__FILE__), '..', 'lib','port_upgrade') #,'version')
3
+
4
+ include Ports
5
+
6
+ class TestPortfile < Test::Unit::TestCase
7
+ def test_portfile_bad_path
8
+ assert_raise Errno::ENOENT do
9
+ pf = Ports::Portfile.new('/tmp/not_a_path')
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,4 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
1
2
  require File.join(File.dirname(__FILE__), '..', 'lib','port_upgrade','version')
2
3
  require 'test/unit'
3
4
  include Ports
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.5
4
+ version: 0.1.0
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: 2009-01-07 00:00:00 -08:00
12
+ date: 2009-03-12 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,16 +32,6 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: "0.2"
34
34
  version:
35
- - !ruby/object:Gem::Dependency
36
- name: optiflag
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: 0.6.0
44
- version:
45
35
  - !ruby/object:Gem::Dependency
46
36
  name: newgem
47
37
  type: :development
@@ -67,6 +57,7 @@ email:
67
57
  - tdoan@tdoan.com
68
58
  executables:
69
59
  - port_upgrade
60
+ - port_purge
70
61
  extensions: []
71
62
 
72
63
  extra_rdoc_files:
@@ -78,21 +69,18 @@ files:
78
69
  - Manifest.txt
79
70
  - README.txt
80
71
  - Rakefile
72
+ - lib/port_purge/cli.rb
81
73
  - lib/port_upgrade.rb
82
74
  - lib/port_upgrade/cli.rb
75
+ - lib/port_upgrade/port.rb
76
+ - lib/port_upgrade/port_upgrade_sh.erb
83
77
  - lib/port_upgrade/version.rb
84
78
  - bin/port_upgrade
79
+ - bin/port_purge
85
80
  - etc/port_upgrade.conf.sample
86
81
  has_rdoc: true
87
82
  homepage: http://portupgrade.rubyforge.org/
88
- post_install_message: |+
89
-
90
-
91
- A sample config file can be found in:
92
- /opt/local/lib/ruby/gems/1.8/gems/port_upgrade-0.0.5/etc
93
- To install copy it to ~/.port_upgrade.conf
94
-
95
-
83
+ post_install_message:
96
84
  rdoc_options:
97
85
  - --main
98
86
  - README.txt
@@ -116,6 +104,11 @@ rubyforge_project: portupgrade
116
104
  rubygems_version: 1.3.1
117
105
  signing_key:
118
106
  specification_version: 2
119
- summary: Summary
107
+ summary: Cleanly upgrade your MacPorts.
120
108
  test_files:
109
+ - test/test_helper.rb
110
+ - test/test_port.rb
111
+ - test/test_port_purge_cli.rb
112
+ - test/test_port_upgrade_cli.rb
113
+ - test/test_portfile.rb
121
114
  - test/test_version.rb