Fix hard link dissociation bug
strip unlinks the file first, breaking hard links, so we detect instances where we are about to strip a file with many linkages and prevent it. This fixes the libexec non executable bug in the git package. Took me a long time to figure out what was wrong! :P
This commit is contained in:
parent
7bd9f08558
commit
32281b7a7f
@ -239,6 +239,7 @@ public
|
|||||||
end
|
end
|
||||||
|
|
||||||
def clean
|
def clean
|
||||||
|
#TODO strip libexec too
|
||||||
[bin,lib].each {|path| path.find do |path|
|
[bin,lib].each {|path| path.find do |path|
|
||||||
if not path.file?
|
if not path.file?
|
||||||
next
|
next
|
||||||
@ -248,21 +249,30 @@ public
|
|||||||
else
|
else
|
||||||
fo=`file -h #{path}`
|
fo=`file -h #{path}`
|
||||||
args=nil
|
args=nil
|
||||||
chmod=0444
|
perms=0444
|
||||||
if fo =~ /Mach-O dynamically linked shared library/
|
if fo =~ /Mach-O dynamically linked shared library/
|
||||||
args='-SxX'
|
args='-SxX'
|
||||||
elsif fo =~ /Mach-O executable/ # defaults strip everything
|
elsif fo =~ /Mach-O executable/ # defaults strip everything
|
||||||
args='' # still do the strip
|
args='' # still do the strip
|
||||||
chmod=0544
|
perms=0544
|
||||||
elsif fo =~ /script text executable/
|
elsif fo =~ /script text executable/
|
||||||
chmod=0544
|
perms=0544
|
||||||
end
|
end
|
||||||
if args
|
if args
|
||||||
puts "Stripping: #{path}" if ARGV.include? '--verbose'
|
puts "Stripping: #{path}" if ARGV.include? '--verbose'
|
||||||
path.chmod 0644 # so we can strip
|
path.chmod 0644 # so we can strip
|
||||||
|
unless path.stat.nlink > 1
|
||||||
`strip #{args} #{path}`
|
`strip #{args} #{path}`
|
||||||
|
else
|
||||||
|
# strip unlinks the file and recreates it, thus breaking hard links!
|
||||||
|
# is this expected behaviour? patch does it too… still,mktm this fixes it
|
||||||
|
tmp=`mktemp -t #{path.basename}`.strip
|
||||||
|
`strip -o #{tmp} #{path}`
|
||||||
|
`cat #{tmp} > #{path}`
|
||||||
|
File.unlink tmp
|
||||||
end
|
end
|
||||||
path.chmod chmod
|
end
|
||||||
|
path.chmod perms
|
||||||
end
|
end
|
||||||
end}
|
end}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user