unmac 0.8 → 0.9

Sign up to get free protection for your applications and to get access to all the features.
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