diff --git a/Library/Homebrew/extend/os/cp.rb b/Library/Homebrew/extend/os/cp.rb new file mode 100644 index 0000000000..e35d5b123a --- /dev/null +++ b/Library/Homebrew/extend/os/cp.rb @@ -0,0 +1,4 @@ +# typed: strict +# frozen_string_literal: true + +require "extend/os/mac/utils/cp" if OS.mac? diff --git a/Library/Homebrew/extend/os/mac/utils/cp.rb b/Library/Homebrew/extend/os/mac/utils/cp.rb new file mode 100644 index 0000000000..ca82d67e68 --- /dev/null +++ b/Library/Homebrew/extend/os/mac/utils/cp.rb @@ -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 diff --git a/Library/Homebrew/utils/cp.rb b/Library/Homebrew/utils/cp.rb index f49036c002..a08aadcc13 100644 --- a/Library/Homebrew/utils/cp.rb +++ b/Library/Homebrew/utils/cp.rb @@ -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