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 +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
|