port_upgrade 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,6 +8,7 @@ lib/port_upgrade/cli.rb
8
8
  lib/port_upgrade/port.rb
9
9
  lib/port_upgrade/port_upgrade_sh.erb
10
10
  lib/port_upgrade/version.rb
11
+ lib/port_upgrade/port_upgrade_config.rb
11
12
  bin/port_upgrade
12
13
  bin/port_purge
13
14
  etc/port_upgrade.conf.sample
@@ -1,11 +1,12 @@
1
1
  port_upgrade
2
2
  2008-07-14
3
3
 
4
- Copyright (C) 2008 Tony Doan (tdoan@tdoan.com)
4
+ Copyright (C) 2009 Tony Doan (tdoan@tdoan.com)
5
5
 
6
6
  = port_upgrade
7
7
 
8
- * http://portupgrade.rubyforge.org/
8
+ * {RubyForge homepage}[http://portupgrade.rubyforge.org]
9
+ * FAQ[http://wiki.github.com/tdoan/port_upgrade/faq]
9
10
 
10
11
  == DESCRIPTION:
11
12
 
@@ -21,7 +22,7 @@ Updates your MacPorts while also removing old dependent versions of libraries an
21
22
  * Update your ports database from macports.org
22
23
  * sudo port selfupdate (or sync)
23
24
  * Run port_upgrade to generate a shell script
24
- * port_upgrade -output upgrade.sh
25
+ * port_upgrade -o upgrade.sh
25
26
  * Run the shell script to update your ports tree
26
27
  * sudo ./upgrade.sh
27
28
  * There is no step 4
@@ -35,6 +36,20 @@ Updates your MacPorts while also removing old dependent versions of libraries an
35
36
 
36
37
  * sudo gem install port_upgrade
37
38
 
39
+ == Additional Usage Scenerios
40
+
41
+ 1) Uninstall a port on which other ports depend. Example with libiconv
42
+
43
+ <tt>port_upgrade --outdated=libiconv -o iconv_uninstall.sh</tt>
44
+
45
+ <tt>./iconv_uninstall.sh uninstall</tt>
46
+
47
+ 2)
48
+
49
+ == Known Bugs
50
+
51
+ * Does not check epoch dates in Portfiles
52
+
38
53
  == LICENSE:
39
54
 
40
55
  Copyright (c) 2008 Tony Doan <tdoan@tdoan.com>
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ require 'hoe'
1
2
  %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
2
3
  require File.dirname(__FILE__) + '/lib/port_upgrade.rb'
3
4
  GEM_HOME = File.join(RbConfig::CONFIG["libdir"],RbConfig::CONFIG["RUBY_INSTALL_NAME"],"gems")
@@ -8,5 +8,6 @@ require File.expand_path(File.dirname(__FILE__) + "/../lib/port_upgrade")
8
8
 
9
9
  require "port_upgrade/cli"
10
10
  require "port_upgrade/version"
11
+ require "port_upgrade/port_upgrade_config"
11
12
 
12
13
  PortUpgrade::CLI.execute(STDOUT, ARGV)
@@ -42,10 +42,9 @@ module PortPurge
42
42
  when /^(yes|y)$/i
43
43
  @to_remove << leaf
44
44
  when /^(quit|q)$/i
45
- exit -1
45
+ exit(-1)
46
46
  when /^(skip|s)$/i
47
47
  break
48
- $stderr.puts
49
48
  else
50
49
  @keep << leaf
51
50
  end
@@ -64,7 +63,7 @@ module PortPurge
64
63
  end
65
64
  else
66
65
  $stderr.puts "Exiting"
67
- exit -1
66
+ exit(-1)
68
67
  end
69
68
  end
70
69
  end
@@ -16,6 +16,7 @@ $:.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
18
  require 'port_upgrade/version'
19
+ require 'port_upgrade/port_upgrade_config'
19
20
  require 'yaml'
20
21
  require 'bz2'
21
22
  require 'find'
@@ -29,10 +30,9 @@ class String
29
30
  end
30
31
 
31
32
  module Ports
32
- VERSION = '0.1.1'
33
+ VERSION = '0.1.2'
33
34
  RECEIPT_PATH = '/opt/local/var/macports/receipts'
34
35
  MACPORTS_DB='/opt/local/var/macports/sources/rsync.macports.org/release/ports'
35
- CONFIG_FILE = 'port_upgrade.conf'
36
36
  SH_ERB_PATH = File.join(File.dirname(__FILE__),"port_upgrade","port_upgrade_sh.erb")
37
37
  Struct.new('Edge',:port,:dep,:level)
38
38
  class Struct::Edge
@@ -205,40 +205,20 @@ module Ports
205
205
 
206
206
  class PortsDB
207
207
  def initialize(path=nil,outdated=nil)
208
+ mp_version_path = "/opt/local/var/macports/sources/rsync.macports.org/release/base//config/mp_version"
209
+ @mp_version = File.read("/opt/local/var/macports/sources/rsync.macports.org/release/base//config/mp_version").to_f
210
+ @needs_dash_x = @mp_version < 1.8
211
+ @dash_x = @needs_dash_x ? "-x" : ""
208
212
  @path=path
209
213
  @db = SQLite3::Database.new(':memory:')#('port_tree.db')
210
214
  @pt = PortTree.new(self,path)
211
215
  @installed = @pt.installed
212
216
  set_outdated(outdated)
213
217
  @to_remove = nil
214
- config_file = locate_config_file
215
- unless config_file.nil?
216
- begin
217
- @config = YAML::load(File.open(config_file))
218
- @config = {} if @config == false
219
- rescue Errno::ENOENT
220
- $stderr.puts("No configuration loaded.")
221
- rescue ArgumentError
222
- $stderr.puts("Badly formed config file.")
223
- exit(-1)
224
- end
225
- else
226
- $stderr.puts("No configuration loaded.")
227
- end
218
+ @config = PortUpgradeConfig.instance.config
219
+
228
220
  end
229
221
 
230
- def locate_config_file
231
- to_search = []
232
- local_dir = File.dirname($0).sub(/bin$/,"")
233
- local_dir = local_dir == "" ? "." : local_dir
234
- to_search << File.join(local_dir,"etc",Ports::CONFIG_FILE)
235
- to_search << File.join(ENV['HOME'],"."+Ports::CONFIG_FILE)
236
- to_search.each do |path|
237
- return path if File.readable?(path)
238
- end
239
- return nil
240
- end
241
-
242
222
  def installed
243
223
  @installed
244
224
  end
@@ -310,16 +290,16 @@ module Ports
310
290
  cats << (md[2].nil? ? md[1] : md[2].split.first)
311
291
  end
312
292
  end
313
- portfile_path = File.join(MACPORTS_DB,cats.flatten,port,'Portfile')
293
+ portfile_path = File.join(get_macports_db_path,cats.flatten,port,'Portfile')
314
294
  unless File.exist?(portfile_path)
315
295
  $stderr.puts "Searching for #{port}'s Portfile"
316
- Dir.entries(MACPORTS_DB).each do |d|
317
- if File.directory?(File.join(MACPORTS_DB,d)) && d != '.' && d != '..'
318
- testpath = File.join(MACPORTS_DB,d,port,'Portfile')
296
+ Dir.entries(get_macports_db_path).each do |d|
297
+ if File.directory?(File.join(get_macports_db_path,d)) && d != '.' && d != '..'
298
+ testpath = File.join(get_macports_db_path,d,port,'Portfile')
319
299
  if File.exist?(testpath)
320
- portfile_path = testpath
321
- break
322
- end
300
+ portfile_path = testpath
301
+ break
302
+ end
323
303
  end
324
304
  end
325
305
  end
@@ -331,10 +311,10 @@ module Ports
331
311
  if cmp.nil?
332
312
  $stderr.puts "Unable to compare versions: #{[port]}"
333
313
  else
334
- if cmp < 0
335
- @outdated << port
336
- end
337
- end
314
+ if cmp < 0
315
+ @outdated << port
316
+ end
317
+ end
338
318
  else
339
319
  $stderr.puts "Unable to process Portfile (File Not Found) for #{port}"
340
320
  end
@@ -383,7 +363,7 @@ module Ports
383
363
  end
384
364
  bi = get_before_install(port)
385
365
  uninstall_data << bi unless bi.nil?
386
- install_data << "port #{get_force(port)} -x install #{port} #{remvariants[port][variantindex]} || exit -1"
366
+ install_data << "port #{get_force(port)} #{@dash_x} install #{port} #{remvariants[port][variantindex]} || exit -1"
387
367
  ai = get_after_install(port)
388
368
  fi = get_final_install(port)
389
369
  final << fi unless fi.nil?
@@ -426,6 +406,10 @@ module Ports
426
406
  get_port_action(portname,:final_install)
427
407
  end
428
408
 
409
+ def get_macports_db_path
410
+ PortUpgradeConfig.instance.get_macports_db_path
411
+ end
412
+
429
413
  def [](portname)
430
414
  Port.new(portname,@path)
431
415
  end
@@ -32,6 +32,9 @@ module PortUpgrade
32
32
  options.checkoutdated = co
33
33
  $stderr.puts "CHECKOUTDATED: #{co}"
34
34
  end
35
+ opts.on("-p",'Add pid to the end of the outputfile') do
36
+ options.pid = "." + Process.pid.to_s
37
+ end
35
38
  opts.on_tail("-V", "--version","Show version") do
36
39
  $stderr.puts "port_upgrade #{Ports::VERSION}"
37
40
  exit
@@ -42,6 +45,7 @@ module PortUpgrade
42
45
  end
43
46
  opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
44
47
  $stderr.puts "VERBOSE: #{v}"
48
+ $stderr.puts Ports::PortUpgradeConfig.instance.get_macports_db_path
45
49
  options.verbose = v
46
50
  end
47
51
  end
@@ -50,7 +54,8 @@ module PortUpgrade
50
54
  puts opts
51
55
  exit 1
52
56
  end
53
- $verbose = true# if options.verbose
57
+ $verbose = true if options.verbose
58
+ options.output += options.pid if options.pid
54
59
  if options.portoutdated
55
60
  $stderr.print "Running port outdated..."
56
61
  outdated = `port outdated`.find_all{|l| (l =~ /(The following|No installed ports are outdated)/).nil? }.collect{|l| l.split[0]}
@@ -1,12 +1,15 @@
1
+ require 'port_upgrade/port_upgrade_config'
1
2
  module Ports
2
3
  class Port
3
4
  attr_reader :name,:versions,:portfile_path
4
-
5
+ @config = PortUpgradeConfig.instance.config
6
+
5
7
  def initialize(portname,receipt_path=nil)
6
8
  receipt_path ||= RECEIPT_PATH
7
9
  tmpp = File.join(receipt_path,portname)
8
10
  @name = portname
9
11
  @versions = []
12
+ @portfile_path = nil
10
13
  if File.exist?(tmpp) and File.readable?(tmpp)
11
14
  @rp = tmpp
12
15
  Find.find(@rp) do |d|
@@ -18,9 +21,9 @@ module Ports
18
21
  end
19
22
  end
20
23
 
21
- Dir.entries(MACPORTS_DB).each do |d|
22
- if File.directory?(File.join(MACPORTS_DB,d)) && d != '.' && d != '..'
23
- testpath = File.join(MACPORTS_DB,d,@name,'Portfile')
24
+ Dir.entries(get_macports_db_path).each do |d|
25
+ if File.directory?(File.join(get_macports_db_path,d)) && d != '.' && d != '..'
26
+ testpath = File.join(get_macports_db_path,d,@name,'Portfile')
24
27
  if File.exist?(testpath)
25
28
  @portfile_path = testpath
26
29
  break
@@ -61,5 +64,10 @@ module Ports
61
64
  end
62
65
  result
63
66
  end
67
+
68
+ def get_macports_db_path
69
+ PortUpgradeConfig.instance.get_macports_db_path
70
+ end
71
+
64
72
  end
65
73
  end
@@ -0,0 +1,51 @@
1
+ require 'singleton'
2
+ require 'yaml'
3
+
4
+ module Ports
5
+ CONFIG_FILE = 'port_upgrade.conf'
6
+ class PortUpgradeConfig
7
+ include Singleton
8
+ @@config=nil
9
+ def locate_config_file
10
+ to_search = []
11
+ local_dir = File.dirname($0).sub(/bin$/,"")
12
+ local_dir = local_dir == "" ? "." : local_dir
13
+ to_search << File.join(local_dir,"etc",Ports::CONFIG_FILE)
14
+ to_search << File.join(ENV['HOME'],"."+Ports::CONFIG_FILE)
15
+ to_search.each do |path|
16
+ return path if File.readable?(path)
17
+ end
18
+ return nil
19
+ end
20
+
21
+ def get_macports_db_path
22
+ unless config.nil?
23
+ if config.has_key?(:macports_db_path)
24
+ config[:macports_db_path]
25
+ else
26
+ MACPORTS_DB
27
+ end
28
+ end
29
+ end
30
+
31
+ def config
32
+ return @@config unless @@config.nil?
33
+
34
+ config_file = locate_config_file
35
+ unless config_file.nil?
36
+ begin
37
+ @@config = YAML::load(File.open(config_file))
38
+ @@config = {} if @@config == false
39
+ return @@config
40
+ rescue Errno::ENOENT
41
+ throw "No configuration loaded."
42
+ rescue ArgumentError
43
+ throw "Badly formed config file."
44
+ end
45
+ else
46
+ #throw "No configuration loaded."
47
+ return nil
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,3 +1,3 @@
1
1
  require 'test/unit'
2
2
  require 'rubygems'
3
- require 'mocha'
3
+ #require 'mocha'
@@ -20,6 +20,7 @@ class TestPort < Test::Unit::TestCase
20
20
 
21
21
  context "A NoSuchPort instance" do
22
22
  setup do
23
+ @port = nil
23
24
  end
24
25
 
25
26
  should "raise NoSuchPort" do
@@ -3,14 +3,14 @@ require 'test/unit'
3
3
  require 'stringio'
4
4
  require 'port_purge/cli'
5
5
 
6
- class TestPortPurgeCli < Test::Unit::TestCase
6
+ #class TestPortPurgeCli < Test::Unit::TestCase
7
7
  #def setup
8
8
  # PortPurge::CLI.execute(@stdout_io = StringIO.new, [])
9
9
  # @stdout_io.rewind
10
10
  # @stdout = @stdout_io.read
11
11
  #end
12
12
 
13
- def test_not_print_default_output
14
- assert_no_match(/To update this executable/, @stdout)
15
- end
16
- end
13
+ #def test_not_print_default_output
14
+ # assert_no_match(/To update this executable/, @stdout)
15
+ #end
16
+ #end
@@ -34,7 +34,7 @@ class TestVersion < Test::Unit::TestCase
34
34
  xorg-util-macros 1.2.0_0 < 1.2.1_0
35
35
  xrender 0.9.4_1 < 0.9.4_4
36
36
  }
37
- @tests = raw_tests.collect{|l| parts = l.split(" "); [parts[1],parts[3]] }
37
+ @tests = raw_tests.split("\n").collect{|l| parts = l.split(" "); [parts[1],parts[3]] }
38
38
  end
39
39
 
40
40
  def test_1
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: port_upgrade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 2
9
+ version: 0.1.2
5
10
  platform: ruby
6
11
  authors:
7
12
  - Tony Doan
@@ -9,50 +14,65 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-04-28 00:00:00 -07:00
17
+ date: 2010-04-18 00:00:00 -07:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: sqlite3-ruby
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 0
23
31
  version: 1.2.0
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: bz2
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 2
33
44
  version: "0.2"
34
- version:
45
+ type: :runtime
46
+ version_requirements: *id002
35
47
  - !ruby/object:Gem::Dependency
36
48
  name: newgem
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
40
51
  requirements:
41
52
  - - ">="
42
53
  - !ruby/object:Gem::Version
43
- version: 1.3.0
44
- version:
54
+ segments:
55
+ - 1
56
+ - 5
57
+ - 3
58
+ version: 1.5.3
59
+ type: :development
60
+ version_requirements: *id003
45
61
  - !ruby/object:Gem::Dependency
46
62
  name: hoe
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
50
65
  requirements:
51
66
  - - ">="
52
67
  - !ruby/object:Gem::Version
53
- version: 1.8.0
54
- version:
55
- description: A clean way to keep your MacPorts up to date.
68
+ segments:
69
+ - 2
70
+ - 6
71
+ - 0
72
+ version: 2.6.0
73
+ type: :development
74
+ version_requirements: *id004
75
+ description: ""
56
76
  email:
57
77
  - tdoan@tdoan.com
58
78
  executables:
@@ -63,7 +83,6 @@ extensions: []
63
83
  extra_rdoc_files:
64
84
  - History.txt
65
85
  - Manifest.txt
66
- - README.rdoc
67
86
  files:
68
87
  - History.txt
69
88
  - Manifest.txt
@@ -75,35 +94,38 @@ files:
75
94
  - lib/port_upgrade/port.rb
76
95
  - lib/port_upgrade/port_upgrade_sh.erb
77
96
  - lib/port_upgrade/version.rb
97
+ - lib/port_upgrade/port_upgrade_config.rb
78
98
  - bin/port_upgrade
79
99
  - bin/port_purge
80
100
  - etc/port_upgrade.conf.sample
81
101
  has_rdoc: true
82
- homepage: http://portupgrade.rubyforge.org/
102
+ homepage:
83
103
  licenses: []
84
104
 
85
105
  post_install_message:
86
106
  rdoc_options:
87
107
  - --main
88
- - README.rdoc
108
+ - README.txt
89
109
  require_paths:
90
110
  - lib
91
111
  required_ruby_version: !ruby/object:Gem::Requirement
92
112
  requirements:
93
113
  - - ">="
94
114
  - !ruby/object:Gem::Version
115
+ segments:
116
+ - 0
95
117
  version: "0"
96
- version:
97
118
  required_rubygems_version: !ruby/object:Gem::Requirement
98
119
  requirements:
99
120
  - - ">="
100
121
  - !ruby/object:Gem::Version
122
+ segments:
123
+ - 0
101
124
  version: "0"
102
- version:
103
125
  requirements: []
104
126
 
105
127
  rubyforge_project: portupgrade
106
- rubygems_version: 1.3.2
128
+ rubygems_version: 1.3.6
107
129
  signing_key:
108
130
  specification_version: 3
109
131
  summary: Cleanly upgrade your MacPorts.