Utils::Cp: Move macOS-specific code to extend/os/mac

This commit is contained in:
Daiki Mizukami 2024-06-07 18:16:15 +09:00
parent 58852106c1
commit 7cfcc596b9
No known key found for this signature in database
GPG Key ID: 10478E598B944AA2
3 changed files with 36 additions and 11 deletions

View File

@ -0,0 +1,4 @@
# typed: strict
# frozen_string_literal: true
require "extend/os/mac/utils/cp" if OS.mac?

View File

@ -0,0 +1,30 @@
# typed: true
# frozen_string_literal: true
module Utils
module Cp
class << self
module MacOSOverride
private
# Use the lightweight `clonefile(2)` syscall if applicable.
SONOMA_FLAGS = ["-c"].freeze
sig { returns(T::Array[String]) }
def extra_flags
# The `cp` command on older macOS versions also had the `-c` option, but before Sonoma,
# the command would fail if the `clonefile` syscall isn't applicable (the underlying
# filesystem doesn't support the feature or the source and the target are on different
# filesystems).
if MacOS.version >= :sonoma
SONOMA_FLAGS
else
super
end
end
end
prepend MacOSOverride
end
end
end

View File

@ -1,6 +1,7 @@
# typed: true
# frozen_string_literal: true
require "extend/os/cp"
require "system_command"
module Utils
@ -39,20 +40,10 @@ module Utils
private
# Use the lightweight `clonefile(2)` syscall if applicable.
MACOS_FLAGS = ["-c"].freeze
GENERIC_FLAGS = [].freeze
sig { returns(T::Array[String]) }
def extra_flags
# The `cp` command on older macOS versions also had the `-c` option, but before Sonoma, the
# command would fail if the `clonefile` syscall isn't applicable (the underlying filesystem
# doesn't support the feature or the source and the target are on different filesystems).
if OS.mac? && MacOS.version >= :sonoma
MACOS_FLAGS
else
GENERIC_FLAGS
end
GENERIC_FLAGS
end
end
end