379 lines
16 KiB
Ruby
379 lines
16 KiB
Ruby
require "set"
|
|
|
|
require "os/mac/version"
|
|
|
|
module OS::Mac
|
|
SYSTEM_DIRS = [
|
|
"/",
|
|
"/Applications",
|
|
"/Applications/Utilities",
|
|
"/Incompatible Software",
|
|
"/Library",
|
|
"/Library/Application Support",
|
|
"/Library/Audio",
|
|
"/Library/Caches",
|
|
"/Library/ColorPickers",
|
|
"/Library/ColorSync",
|
|
"/Library/Components",
|
|
"/Library/Compositions",
|
|
"/Library/Contextual Menu Items",
|
|
"/Library/CoreMediaIO",
|
|
"/Library/Desktop Pictures",
|
|
"/Library/Developer",
|
|
"/Library/Dictionaries",
|
|
"/Library/DirectoryServices",
|
|
"/Library/Documentation",
|
|
"/Library/Extensions",
|
|
"/Library/Filesystems",
|
|
"/Library/Fonts",
|
|
"/Library/Frameworks",
|
|
"/Library/Graphics",
|
|
"/Library/Image Capture",
|
|
"/Library/Input Methods",
|
|
"/Library/Internet Plug-Ins",
|
|
"/Library/Java",
|
|
"/Library/Keyboard Layouts",
|
|
"/Library/Keychains",
|
|
"/Library/LaunchAgents",
|
|
"/Library/LaunchDaemons",
|
|
"/Library/Logs",
|
|
"/Library/Messages",
|
|
"/Library/Modem Scripts",
|
|
"/Library/OpenDirectory",
|
|
"/Library/PDF Services",
|
|
"/Library/Perl",
|
|
"/Library/PreferencePanes",
|
|
"/Library/Preferences",
|
|
"/Library/Printers",
|
|
"/Library/PrivilegedHelperTools",
|
|
"/Library/Python",
|
|
"/Library/QuickLook",
|
|
"/Library/QuickTime",
|
|
"/Library/Receipts",
|
|
"/Library/Ruby",
|
|
"/Library/Sandbox",
|
|
"/Library/Screen Savers",
|
|
"/Library/ScriptingAdditions",
|
|
"/Library/Scripts",
|
|
"/Library/Security",
|
|
"/Library/Speech",
|
|
"/Library/Spelling",
|
|
"/Library/Spotlight",
|
|
"/Library/StartupItems",
|
|
"/Library/SystemProfiler",
|
|
"/Library/Updates",
|
|
"/Library/User Pictures",
|
|
"/Library/Video",
|
|
"/Library/WebServer",
|
|
"/Library/Widgets",
|
|
"/Library/iTunes",
|
|
"/Network",
|
|
"/System",
|
|
"/System/Library",
|
|
"/System/Library/Accessibility",
|
|
"/System/Library/Accounts",
|
|
"/System/Library/Address Book Plug-Ins",
|
|
"/System/Library/Assistant",
|
|
"/System/Library/Automator",
|
|
"/System/Library/BridgeSupport",
|
|
"/System/Library/Caches",
|
|
"/System/Library/ColorPickers",
|
|
"/System/Library/ColorSync",
|
|
"/System/Library/Colors",
|
|
"/System/Library/Components",
|
|
"/System/Library/Compositions",
|
|
"/System/Library/CoreServices",
|
|
"/System/Library/DTDs",
|
|
"/System/Library/DirectoryServices",
|
|
"/System/Library/Displays",
|
|
"/System/Library/Extensions",
|
|
"/System/Library/Filesystems",
|
|
"/System/Library/Filters",
|
|
"/System/Library/Fonts",
|
|
"/System/Library/Frameworks",
|
|
"/System/Library/Graphics",
|
|
"/System/Library/IdentityServices",
|
|
"/System/Library/Image Capture",
|
|
"/System/Library/Input Methods",
|
|
"/System/Library/InternetAccounts",
|
|
"/System/Library/Java",
|
|
"/System/Library/KerberosPlugins",
|
|
"/System/Library/Keyboard Layouts",
|
|
"/System/Library/Keychains",
|
|
"/System/Library/LaunchAgents",
|
|
"/System/Library/LaunchDaemons",
|
|
"/System/Library/LinguisticData",
|
|
"/System/Library/LocationBundles",
|
|
"/System/Library/LoginPlugins",
|
|
"/System/Library/Messages",
|
|
"/System/Library/Metadata",
|
|
"/System/Library/MonitorPanels",
|
|
"/System/Library/OpenDirectory",
|
|
"/System/Library/OpenSSL",
|
|
"/System/Library/Password Server Filters",
|
|
"/System/Library/PerformanceMetrics",
|
|
"/System/Library/Perl",
|
|
"/System/Library/PreferencePanes",
|
|
"/System/Library/Printers",
|
|
"/System/Library/PrivateFrameworks",
|
|
"/System/Library/QuickLook",
|
|
"/System/Library/QuickTime",
|
|
"/System/Library/QuickTimeJava",
|
|
"/System/Library/Recents",
|
|
"/System/Library/SDKSettingsPlist",
|
|
"/System/Library/Sandbox",
|
|
"/System/Library/Screen Savers",
|
|
"/System/Library/ScreenReader",
|
|
"/System/Library/ScriptingAdditions",
|
|
"/System/Library/ScriptingDefinitions",
|
|
"/System/Library/Security",
|
|
"/System/Library/Services",
|
|
"/System/Library/Sounds",
|
|
"/System/Library/Speech",
|
|
"/System/Library/Spelling",
|
|
"/System/Library/Spotlight",
|
|
"/System/Library/StartupItems",
|
|
"/System/Library/SyncServices",
|
|
"/System/Library/SystemConfiguration",
|
|
"/System/Library/SystemProfiler",
|
|
"/System/Library/Tcl",
|
|
"/System/Library/TextEncodings",
|
|
"/System/Library/User Template",
|
|
"/System/Library/UserEventPlugins",
|
|
"/System/Library/Video",
|
|
"/System/Library/WidgetResources",
|
|
"/User Information",
|
|
"/Users",
|
|
"/Volumes",
|
|
"/bin",
|
|
"/boot",
|
|
"/cores",
|
|
"/dev",
|
|
"/etc",
|
|
"/etc/X11",
|
|
"/etc/opt",
|
|
"/etc/sgml",
|
|
"/etc/xml",
|
|
"/home",
|
|
"/libexec",
|
|
"/lost+found",
|
|
"/media",
|
|
"/mnt",
|
|
"/net",
|
|
"/opt",
|
|
"/private",
|
|
"/private/etc",
|
|
"/private/tftpboot",
|
|
"/private/tmp",
|
|
"/private/var",
|
|
"/proc",
|
|
"/root",
|
|
"/sbin",
|
|
"/srv",
|
|
"/tmp",
|
|
"/usr",
|
|
"/usr/X11R6",
|
|
"/usr/bin",
|
|
"/usr/etc",
|
|
"/usr/include",
|
|
"/usr/lib",
|
|
"/usr/libexec",
|
|
"/usr/local",
|
|
"/usr/local/Cellar",
|
|
"/usr/local/Frameworks",
|
|
"/usr/local/Library",
|
|
"/usr/local/bin",
|
|
"/usr/local/etc",
|
|
"/usr/local/include",
|
|
"/usr/local/lib",
|
|
"/usr/local/libexec",
|
|
"/usr/local/opt",
|
|
"/usr/local/share",
|
|
"/usr/local/share/man",
|
|
"/usr/local/share/man/man1",
|
|
"/usr/local/share/man/man2",
|
|
"/usr/local/share/man/man3",
|
|
"/usr/local/share/man/man4",
|
|
"/usr/local/share/man/man5",
|
|
"/usr/local/share/man/man6",
|
|
"/usr/local/share/man/man7",
|
|
"/usr/local/share/man/man8",
|
|
"/usr/local/share/man/man9",
|
|
"/usr/local/share/man/mann",
|
|
"/usr/local/var",
|
|
"/usr/local/var/lib",
|
|
"/usr/local/var/lock",
|
|
"/usr/local/var/run",
|
|
"/usr/sbin",
|
|
"/usr/share",
|
|
"/usr/share/man",
|
|
"/usr/share/man/man1",
|
|
"/usr/share/man/man2",
|
|
"/usr/share/man/man3",
|
|
"/usr/share/man/man4",
|
|
"/usr/share/man/man5",
|
|
"/usr/share/man/man6",
|
|
"/usr/share/man/man7",
|
|
"/usr/share/man/man8",
|
|
"/usr/share/man/man9",
|
|
"/usr/share/man/mann",
|
|
"/usr/src",
|
|
"/var",
|
|
"/var/cache",
|
|
"/var/lib",
|
|
"/var/lock",
|
|
"/var/log",
|
|
"/var/mail",
|
|
"/var/run",
|
|
"/var/spool",
|
|
"/var/spool/mail",
|
|
"/var/tmp",
|
|
]
|
|
.map(&method(:Pathname))
|
|
.to_set
|
|
.freeze
|
|
|
|
# TODO: There should be a way to specify a containing
|
|
# directory under which nothing can be deleted.
|
|
UNDELETABLE_DIRS = [
|
|
"~/",
|
|
"~/Applications",
|
|
"~/Desktop",
|
|
"~/Documents",
|
|
"~/Downloads",
|
|
"~/Mail",
|
|
"~/Movies",
|
|
"~/Music",
|
|
"~/Music/iTunes",
|
|
"~/Music/iTunes/iTunes Music",
|
|
"~/Music/iTunes/Album Artwork",
|
|
"~/News",
|
|
"~/Pictures",
|
|
"~/Pictures/Desktops",
|
|
"~/Pictures/Photo Booth",
|
|
"~/Pictures/iChat Icons",
|
|
"~/Pictures/iPhoto Library",
|
|
"~/Public",
|
|
"~/Sites",
|
|
"~/Library",
|
|
"~/Library/.localized",
|
|
"~/Library/Accessibility",
|
|
"~/Library/Accounts",
|
|
"~/Library/Address Book Plug-Ins",
|
|
"~/Library/Application Scripts",
|
|
"~/Library/Application Support",
|
|
"~/Library/Application Support/Apple",
|
|
"~/Library/Application Support/com.apple.AssistiveControl",
|
|
"~/Library/Application Support/com.apple.QuickLook",
|
|
"~/Library/Application Support/com.apple.TCC",
|
|
"~/Library/Assistants",
|
|
"~/Library/Audio",
|
|
"~/Library/Automator",
|
|
"~/Library/Autosave Information",
|
|
"~/Library/Caches",
|
|
"~/Library/Calendars",
|
|
"~/Library/ColorPickers",
|
|
"~/Library/ColorSync",
|
|
"~/Library/Colors",
|
|
"~/Library/Components",
|
|
"~/Library/Compositions",
|
|
"~/Library/Containers",
|
|
"~/Library/Contextual Menu Items",
|
|
"~/Library/Cookies",
|
|
"~/Library/DTDs",
|
|
"~/Library/Desktop Pictures",
|
|
"~/Library/Developer",
|
|
"~/Library/Dictionaries",
|
|
"~/Library/DirectoryServices",
|
|
"~/Library/Displays",
|
|
"~/Library/Documentation",
|
|
"~/Library/Extensions",
|
|
"~/Library/Favorites",
|
|
"~/Library/FileSync",
|
|
"~/Library/Filesystems",
|
|
"~/Library/Filters",
|
|
"~/Library/FontCollections",
|
|
"~/Library/Fonts",
|
|
"~/Library/Frameworks",
|
|
"~/Library/GameKit",
|
|
"~/Library/Graphics",
|
|
"~/Library/Group Containers",
|
|
"~/Library/Icons",
|
|
"~/Library/IdentityServices",
|
|
"~/Library/Image Capture",
|
|
"~/Library/Images",
|
|
"~/Library/Input Methods",
|
|
"~/Library/Internet Plug-Ins",
|
|
"~/Library/InternetAccounts",
|
|
"~/Library/iTunes",
|
|
"~/Library/KeyBindings",
|
|
"~/Library/Keyboard Layouts",
|
|
"~/Library/Keychains",
|
|
"~/Library/LaunchAgents",
|
|
"~/Library/LaunchDaemons",
|
|
"~/Library/LocationBundles",
|
|
"~/Library/LoginPlugins",
|
|
"~/Library/Logs",
|
|
"~/Library/Mail",
|
|
"~/Library/Mail Downloads",
|
|
"~/Library/Messages",
|
|
"~/Library/Metadata",
|
|
"~/Library/Mobile Documents",
|
|
"~/Library/MonitorPanels",
|
|
"~/Library/OpenDirectory",
|
|
"~/Library/PDF Services",
|
|
"~/Library/PhonePlugins",
|
|
"~/Library/Phones",
|
|
"~/Library/PreferencePanes",
|
|
"~/Library/Preferences",
|
|
"~/Library/Printers",
|
|
"~/Library/PrivateFrameworks",
|
|
"~/Library/PubSub",
|
|
"~/Library/QuickLook",
|
|
"~/Library/QuickTime",
|
|
"~/Library/Receipts",
|
|
"~/Library/Recent Servers",
|
|
"~/Library/Recents",
|
|
"~/Library/Safari",
|
|
"~/Library/Saved Application State",
|
|
"~/Library/Screen Savers",
|
|
"~/Library/ScreenReader",
|
|
"~/Library/ScriptingAdditions",
|
|
"~/Library/ScriptingDefinitions",
|
|
"~/Library/Scripts",
|
|
"~/Library/Security",
|
|
"~/Library/Services",
|
|
"~/Library/Sounds",
|
|
"~/Library/Speech",
|
|
"~/Library/Spelling",
|
|
"~/Library/Spotlight",
|
|
"~/Library/StartupItems",
|
|
"~/Library/StickiesDatabase",
|
|
"~/Library/Sync Services",
|
|
"~/Library/SyncServices",
|
|
"~/Library/SyncedPreferences",
|
|
"~/Library/TextEncodings",
|
|
"~/Library/User Pictures",
|
|
"~/Library/Video",
|
|
"~/Library/Voices",
|
|
"~/Library/WebKit",
|
|
"~/Library/WidgetResources",
|
|
"~/Library/Widgets",
|
|
"~/Library/Workflows",
|
|
]
|
|
.map { |x| Pathname(x).expand_path }
|
|
.to_set
|
|
.union(SYSTEM_DIRS)
|
|
.freeze
|
|
|
|
def system_dir?(dir)
|
|
SYSTEM_DIRS.any? { |u| File.identical?(u, dir) }
|
|
end
|
|
|
|
def undeletable?(dir)
|
|
UNDELETABLE_DIRS.any? { |u| File.identical?(u, dir) }
|
|
end
|
|
|
|
alias release version
|
|
end
|