unmac 0.8 → 0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +6 -5
- data/bin/unmac +8 -0
- data/lib/unmacer.rb +23 -0
- data/test/test_unmac.rb +49 -6
- data/test/test_unmacer.rb +17 -7
- data/unmac.gemspec +1 -1
- metadata +8 -7
data/Rakefile
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
require 'rake/testtask'
|
2
2
|
|
3
|
-
task :test
|
4
|
-
|
5
|
-
|
6
|
-
|
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],
|
data/lib/unmacer.rb
CHANGED
@@ -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
|
#
|
data/test/test_unmac.rb
CHANGED
@@ -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
|
8
|
-
UNMAC_SRC
|
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
|
238
|
-
assert_match
|
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
|
data/test/test_unmacer.rb
CHANGED
@@ -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
|
68
|
-
assert_match
|
69
|
-
assert_match
|
70
|
-
assert_match
|
71
|
-
assert_match
|
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)
|
data/unmac.gemspec
CHANGED
metadata
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unmac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
version: "0.
|
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-
|
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.
|
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
|