unmac 0.8 → 0.9

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.
data/Rakefile CHANGED
@@ -1,9 +1,10 @@
1
- task :default => [:test]
1
+ require 'rake/testtask'
2
2
 
3
- task :test do
4
- Dir['test/test_*.rb'].each do |test|
5
- ruby "-Ilib #{test}"
6
- end
3
+ task :default => :test
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.test_files = Dir.glob('test/test_*.rb')
7
+ t.verbose = true
7
8
  end
8
9
 
9
10
  task :home do
data/bin/unmac CHANGED
@@ -18,6 +18,8 @@ Options:
18
18
  -s, --keep-spotlight Do not delete Spotlight data
19
19
  -f, --keep-fsevents Do not delete Time Machine stuff
20
20
  -t, --keep-trashes Do not delete volume trashes
21
+ -c, --keep-document-revisions Do not delete document revisions
22
+ -b, --keep-mobile-backups Do not delete mobile backups
21
23
  -m, --keep-macosx Do not delete "__MACOSX" directories
22
24
  -r, --keep-dsstore Do not delete ".DS_Store" files
23
25
  -d, --keep-apple-double Do not delete "._*" ghost files
@@ -49,6 +51,10 @@ What's deleted:
49
51
  * A folder called "#{Unmacer::TRASHES}" in the root directory of volumes stores their
50
52
  trashes. Those ones are taken into account by the Trash in the Dock.
51
53
 
54
+ * Document revisions are stored in the /.DocumentRevisions-V100 folder. (New in Lion.)
55
+
56
+ * Mobile backups are stored in the /.MobileBackups folder. (New in Lion.)
57
+
52
58
  * Some archivers create auxiliary directories called "#{Unmacer::MACOSX}".
53
59
 
54
60
  * Finder and Spotlight data related to each folder gets stored in an
@@ -72,6 +78,8 @@ opts = GetoptLong.new(
72
78
  ['--keep-spotlight', '-s', GetoptLong::NO_ARGUMENT],
73
79
  ['--keep-fsevents', '-f', GetoptLong::NO_ARGUMENT],
74
80
  ['--keep-trashes', '-t', GetoptLong::NO_ARGUMENT],
81
+ ['--keep-document-revisions', '-c', GetoptLong::NO_ARGUMENT],
82
+ ['--keep-mobile-backups', '-b', GetoptLong::NO_ARGUMENT],
75
83
  ['--keep-macosx', '-m', GetoptLong::NO_ARGUMENT],
76
84
  ['--keep-dsstore', '-r', GetoptLong::NO_ARGUMENT],
77
85
  ['--keep-apple-double', '-d', GetoptLong::NO_ARGUMENT],
@@ -7,6 +7,8 @@ class Unmacer
7
7
  :keep_spotlight,
8
8
  :keep_fsevents,
9
9
  :keep_trashes,
10
+ :keep_document_revisions,
11
+ :keep_mobile_backups,
10
12
  :keep_macosx,
11
13
  :keep_dsstore,
12
14
  :keep_apple_double,
@@ -16,6 +18,8 @@ class Unmacer
16
18
  SPOTLIGHT = '.Spotlight-V100'
17
19
  FSEVENTS = '.fseventsd'
18
20
  TRASHES = '.Trashes'
21
+ REVISIONS = '.DocumentRevisions-V100'
22
+ MBACKUPS = '.MobileBackups'
19
23
  MACOSX = '__MACOSX'
20
24
  DSSTORE = '.DS_Store'
21
25
  ICON = "Icon\cM"
@@ -26,6 +30,8 @@ class Unmacer
26
30
  self.keep_spotlight = false
27
31
  self.keep_fsevents = false
28
32
  self.keep_trashes = false
33
+ self.keep_document_revisions = false
34
+ self.keep_mobile_backups = false
29
35
  self.keep_macosx = false
30
36
  self.keep_dsstore = false
31
37
  self.keep_apple_double = false
@@ -62,6 +68,8 @@ private
62
68
  delete_spotlight(dirname) unless keep_spotlight
63
69
  delete_fsevents(dirname) unless keep_fsevents
64
70
  delete_trashes(dirname) unless keep_trashes
71
+ delete_document_revisions(dirname) unless keep_document_revisions
72
+ delete_mobile_backups(dirname) unless keep_mobile_backups
65
73
  end
66
74
 
67
75
  def unmac_folder(dirname)
@@ -112,6 +120,21 @@ private
112
120
  delete(dirname, TRASHES)
113
121
  end
114
122
 
123
+ # Document revisions are stored in the /.DocumentRevisions-V100 folder, within
124
+ # SQLite databases. (New in Lion.)
125
+ #
126
+ # See http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars/14#versioning-internals.
127
+ def delete_document_revisions(dirname)
128
+ delete(dirname, REVISIONS)
129
+ end
130
+
131
+ # Mobile backups are stored in the /.MobileBackups folder. (New in Lion.)
132
+ #
133
+ # See http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars/18#mobile-time-machine.
134
+ def delete_mobile_backups(dirname)
135
+ delete(dirname, MBACKUPS)
136
+ end
137
+
115
138
  # Apple's builtin Zip archiver stores some metadata in a directory called
116
139
  # "__MACOSX".
117
140
  #
@@ -1,11 +1,9 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
-
3
1
  require 'stringio'
4
2
  require 'unmacer'
5
3
  require 'test/unit'
6
4
 
7
- UNMAC_RB = File.join(File.dirname(__FILE__), '..', 'bin', 'unmac')
8
- UNMAC_SRC = File.open(UNMAC_RB) { |f| f.read }
5
+ UNMAC_RB = File.join(File.dirname(__FILE__), '..', 'bin', 'unmac')
6
+ UNMAC_SRC = File.open(UNMAC_RB) { |f| f.read }
9
7
 
10
8
  class TestUnmac < Test::Unit::TestCase
11
9
  def call_unmac(*args)
@@ -21,6 +19,8 @@ class TestUnmac < Test::Unit::TestCase
21
19
  assert !unmacer.keep_spotlight
22
20
  assert !unmacer.keep_fsevents
23
21
  assert !unmacer.keep_trashes
22
+ assert !unmacer.keep_document_revisions
23
+ assert !unmacer.keep_mobile_backups
24
24
  assert !unmacer.keep_macosx
25
25
  assert !unmacer.keep_dsstore
26
26
  assert !unmacer.keep_apple_double
@@ -37,6 +37,8 @@ class TestUnmac < Test::Unit::TestCase
37
37
  assert !unmacer.keep_spotlight
38
38
  assert !unmacer.keep_fsevents
39
39
  assert !unmacer.keep_trashes
40
+ assert !unmacer.keep_document_revisions
41
+ assert !unmacer.keep_mobile_backups
40
42
  assert !unmacer.keep_macosx
41
43
  assert !unmacer.keep_dsstore
42
44
  assert !unmacer.keep_apple_double
@@ -54,6 +56,8 @@ class TestUnmac < Test::Unit::TestCase
54
56
  assert !unmacer.keep_spotlight
55
57
  assert !unmacer.keep_fsevents
56
58
  assert !unmacer.keep_trashes
59
+ assert !unmacer.keep_document_revisions
60
+ assert !unmacer.keep_mobile_backups
57
61
  assert !unmacer.keep_macosx
58
62
  assert !unmacer.keep_dsstore
59
63
  assert !unmacer.keep_apple_double
@@ -71,6 +75,8 @@ class TestUnmac < Test::Unit::TestCase
71
75
  assert unmacer.keep_spotlight
72
76
  assert !unmacer.keep_fsevents
73
77
  assert !unmacer.keep_trashes
78
+ assert !unmacer.keep_document_revisions
79
+ assert !unmacer.keep_mobile_backups
74
80
  assert !unmacer.keep_macosx
75
81
  assert !unmacer.keep_dsstore
76
82
  assert !unmacer.keep_apple_double
@@ -88,6 +94,8 @@ class TestUnmac < Test::Unit::TestCase
88
94
  assert !unmacer.keep_spotlight
89
95
  assert unmacer.keep_fsevents
90
96
  assert !unmacer.keep_trashes
97
+ assert !unmacer.keep_document_revisions
98
+ assert !unmacer.keep_mobile_backups
91
99
  assert !unmacer.keep_macosx
92
100
  assert !unmacer.keep_dsstore
93
101
  assert !unmacer.keep_apple_double
@@ -105,6 +113,27 @@ class TestUnmac < Test::Unit::TestCase
105
113
  assert !unmacer.keep_spotlight
106
114
  assert !unmacer.keep_fsevents
107
115
  assert unmacer.keep_trashes
116
+ assert !unmacer.keep_document_revisions
117
+ assert !unmacer.keep_mobile_backups
118
+ assert !unmacer.keep_macosx
119
+ assert !unmacer.keep_dsstore
120
+ assert !unmacer.keep_apple_double
121
+ assert !unmacer.keep_apple_double_orphans
122
+ assert !unmacer.keep_custom_folder_icons
123
+ assert_equal %w(dummy), ARGV
124
+ end
125
+ end
126
+
127
+ def test_document_revisions
128
+ for opt in ['--keep-document-revisions', '-c']
129
+ unmacer = call_unmac(opt, 'dummy')
130
+ assert !unmacer.verbose
131
+ assert !unmacer.pretend
132
+ assert !unmacer.keep_spotlight
133
+ assert !unmacer.keep_fsevents
134
+ assert !unmacer.keep_trashes
135
+ assert unmacer.keep_document_revisions
136
+ assert !unmacer.keep_mobile_backups
108
137
  assert !unmacer.keep_macosx
109
138
  assert !unmacer.keep_dsstore
110
139
  assert !unmacer.keep_apple_double
@@ -122,6 +151,8 @@ class TestUnmac < Test::Unit::TestCase
122
151
  assert !unmacer.keep_spotlight
123
152
  assert !unmacer.keep_fsevents
124
153
  assert !unmacer.keep_trashes
154
+ assert !unmacer.keep_document_revisions
155
+ assert !unmacer.keep_mobile_backups
125
156
  assert unmacer.keep_macosx
126
157
  assert !unmacer.keep_dsstore
127
158
  assert !unmacer.keep_apple_double
@@ -139,6 +170,8 @@ class TestUnmac < Test::Unit::TestCase
139
170
  assert !unmacer.keep_spotlight
140
171
  assert !unmacer.keep_fsevents
141
172
  assert !unmacer.keep_trashes
173
+ assert !unmacer.keep_document_revisions
174
+ assert !unmacer.keep_mobile_backups
142
175
  assert !unmacer.keep_macosx
143
176
  assert unmacer.keep_dsstore
144
177
  assert !unmacer.keep_apple_double
@@ -156,6 +189,8 @@ class TestUnmac < Test::Unit::TestCase
156
189
  assert !unmacer.keep_spotlight
157
190
  assert !unmacer.keep_fsevents
158
191
  assert !unmacer.keep_trashes
192
+ assert !unmacer.keep_document_revisions
193
+ assert !unmacer.keep_mobile_backups
159
194
  assert !unmacer.keep_macosx
160
195
  assert !unmacer.keep_dsstore
161
196
  assert unmacer.keep_apple_double
@@ -173,6 +208,8 @@ class TestUnmac < Test::Unit::TestCase
173
208
  assert !unmacer.keep_spotlight
174
209
  assert !unmacer.keep_fsevents
175
210
  assert !unmacer.keep_trashes
211
+ assert !unmacer.keep_document_revisions
212
+ assert !unmacer.keep_mobile_backups
176
213
  assert !unmacer.keep_macosx
177
214
  assert !unmacer.keep_dsstore
178
215
  assert !unmacer.keep_apple_double
@@ -190,6 +227,8 @@ class TestUnmac < Test::Unit::TestCase
190
227
  assert !unmacer.keep_spotlight
191
228
  assert !unmacer.keep_fsevents
192
229
  assert !unmacer.keep_trashes
230
+ assert !unmacer.keep_document_revisions
231
+ assert !unmacer.keep_mobile_backups
193
232
  assert !unmacer.keep_macosx
194
233
  assert !unmacer.keep_dsstore
195
234
  assert !unmacer.keep_apple_double
@@ -206,6 +245,8 @@ class TestUnmac < Test::Unit::TestCase
206
245
  assert !unmacer.keep_spotlight
207
246
  assert unmacer.keep_fsevents
208
247
  assert !unmacer.keep_trashes
248
+ assert !unmacer.keep_document_revisions
249
+ assert !unmacer.keep_mobile_backups
209
250
  assert unmacer.keep_macosx
210
251
  assert !unmacer.keep_dsstore
211
252
  assert unmacer.keep_apple_double
@@ -221,6 +262,8 @@ class TestUnmac < Test::Unit::TestCase
221
262
  assert unmacer.keep_spotlight
222
263
  assert !unmacer.keep_fsevents
223
264
  assert unmacer.keep_trashes
265
+ assert !unmacer.keep_document_revisions
266
+ assert !unmacer.keep_mobile_backups
224
267
  assert !unmacer.keep_macosx
225
268
  assert unmacer.keep_dsstore
226
269
  assert !unmacer.keep_apple_double
@@ -234,8 +277,8 @@ class TestUnmac < Test::Unit::TestCase
234
277
  $> = StringIO.open(buf, 'w')
235
278
  call_unmac('-h')
236
279
  $> = $stdout
237
- assert_match /^unmac\b/, buf
238
- assert_match /^Usage\b/, buf
280
+ assert_match %r{^unmac\b}, buf
281
+ assert_match %r{^Usage\b}, buf
239
282
  assert ARGV.empty?
240
283
  end
241
284
  end
@@ -1,5 +1,3 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
-
3
1
  require 'stringio'
4
2
  require 'fileutils'
5
3
  require 'set'
@@ -64,11 +62,11 @@ class TestUnmacer < Test::Unit::TestCase
64
62
  unmac!
65
63
  $> = $stdout
66
64
  assert_equal Set.new(dirs + ['._dummy']), Set.new(read_struct)
67
- assert_match /^would delete.*\.Spotlight/, buf
68
- assert_match /^would delete.*\.fsevents/, buf
69
- assert_match /^would delete.*\.Trashes/, buf
70
- assert_match /^would delete.*__MACOSX/, buf
71
- assert_match /^would delete.*\._dummy/, buf
65
+ assert_match %r{^would delete.*\.Spotlight}, buf
66
+ assert_match %r{^would delete.*\.fsevents}, buf
67
+ assert_match %r{^would delete.*\.Trashes}, buf
68
+ assert_match %r{^would delete.*__MACOSX}, buf
69
+ assert_match %r{^would delete.*\._dummy}, buf
72
70
  end
73
71
 
74
72
  def test_spotlight
@@ -117,6 +115,18 @@ class TestUnmacer < Test::Unit::TestCase
117
115
  assert read_struct.empty?
118
116
  end
119
117
 
118
+ def test_document_revisions
119
+ create_struct(Unmacer::REVISIONS)
120
+ unmac!
121
+ assert read_struct.empty?
122
+ end
123
+
124
+ def test_mobile_backups
125
+ create_struct(Unmacer::MBACKUPS)
126
+ unmac!
127
+ assert read_struct.empty?
128
+ end
129
+
120
130
  def test_trashes_ignored_if_not_in_root
121
131
  fake = File.join('dummy', Unmacer::TRASHES)
122
132
  create_struct(fake)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'unmac'
3
- spec.version = '0.8'
3
+ spec.version = '0.9'
4
4
  spec.summary = 'Delete spurious Mac files under a directory or volume'
5
5
  spec.homepage = 'http://github.com/fxn/unmac/tree/master'
6
6
  spec.executables = %w(unmac)
metadata CHANGED
@@ -1,11 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unmac
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 25
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
- - 8
8
- version: "0.8"
8
+ - 9
9
+ version: "0.9"
9
10
  platform: ruby
10
11
  authors:
11
12
  - Xavier Noria
@@ -13,8 +14,7 @@ autorequire:
13
14
  bindir: bin
14
15
  cert_chain: []
15
16
 
16
- date: 2011-04-28 00:00:00 +02:00
17
- default_executable:
17
+ date: 2011-08-11 00:00:00 Z
18
18
  dependencies: []
19
19
 
20
20
  description:
@@ -34,7 +34,6 @@ files:
34
34
  - lib/unmacer.rb
35
35
  - test/test_unmacer.rb
36
36
  - test/test_unmac.rb
37
- has_rdoc: true
38
37
  homepage: http://github.com/fxn/unmac/tree/master
39
38
  licenses: []
40
39
 
@@ -48,6 +47,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
48
47
  requirements:
49
48
  - - ">="
50
49
  - !ruby/object:Gem::Version
50
+ hash: 3
51
51
  segments:
52
52
  - 0
53
53
  version: "0"
@@ -56,13 +56,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
+ hash: 3
59
60
  segments:
60
61
  - 0
61
62
  version: "0"
62
63
  requirements: []
63
64
 
64
65
  rubyforge_project: unmac
65
- rubygems_version: 1.3.7
66
+ rubygems_version: 1.8.7
66
67
  signing_key:
67
68
  specification_version: 3
68
69
  summary: Delete spurious Mac files under a directory or volume