aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorNicolas Despres2012-01-21 00:51:20 +0100
committerJack Nagel2012-02-01 22:52:14 -0600
commitd0be4d692b557056220514b743841b55ef180b80 (patch)
tree0027ecd8154b2f86ae45d0e4f25a1f210ffc9f7b /Library/Homebrew
parent212927ee54cfcee0384ae3cac91e97516a5a02f8 (diff)
downloadbrew-d0be4d692b557056220514b743841b55ef180b80.tar.bz2
keg: handle the info directory file properly
If HOMEBREW_KEEP_INFO environment variable is set: - Do not symlink the info directory file (aka 'share/info/dir') otherwise it gets overwritten by next installed brew. - Install an entry in the directory for each linked info file when the brew is linked. - Uninstall the entry when the brew is unlinked. Closes Homebrew/homebrew#9700. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/cleaner.rb9
-rw-r--r--Library/Homebrew/extend/pathname.rb22
-rw-r--r--Library/Homebrew/keg.rb6
3 files changed, 36 insertions, 1 deletions
diff --git a/Library/Homebrew/cleaner.rb b/Library/Homebrew/cleaner.rb
index 426fbec6a..14a69c3ae 100644
--- a/Library/Homebrew/cleaner.rb
+++ b/Library/Homebrew/cleaner.rb
@@ -3,7 +3,14 @@ class Cleaner
@f = Formula.factory f
[f.bin, f.sbin, f.lib].select{ |d| d.exist? }.each{ |d| clean_dir d }
- unless ENV['HOMEBREW_KEEP_INFO']
+ if ENV['HOMEBREW_KEEP_INFO']
+ # Get rid of the directory file, so it no longer bother us at link stage.
+ info_dir_file = f.info + 'dir'
+ if info_dir_file.file? and not f.skip_clean? info_dir_file
+ puts "rm #{info_dir_file}" if ARGV.verbose?
+ info_dir_file.unlink
+ end
+ else
f.info.rmtree if f.info.directory? and not f.skip_clean? f.info
end
diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb
index 4ab94a502..1562bfbcd 100644
--- a/Library/Homebrew/extend/pathname.rb
+++ b/Library/Homebrew/extend/pathname.rb
@@ -262,6 +262,20 @@ class Pathname
ensure
chmod saved_perms if saved_perms
end
+
+ def install_info
+ unless self.symlink?
+ raise "Cannot install info entry for unbrewed info file '#{self}'"
+ end
+ system '/usr/bin/install-info', self.to_s, (self.dirname+'dir').to_s
+ end
+
+ def uninstall_info
+ unless self.symlink?
+ raise "Cannot uninstall info entry for unbrewed info file '#{self}'"
+ end
+ system '/usr/bin/install-info', '--delete', '--quiet', self.to_s, (self.dirname+'dir').to_s
+ end
end
# sets $n and $d so you can observe creation of stuff
@@ -286,6 +300,14 @@ module ObserverPathnameExtension
puts "ln #{to_s}" if ARGV.verbose?
$n+=1
end
+ def install_info
+ super
+ puts "info #{to_s}" if ARGV.verbose?
+ end
+ def uninstall_info
+ super
+ puts "uninfo #{to_s}" if ARGV.verbose?
+ end
end
$n=0
diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb
index 8a98c1656..e6ef3e6a8 100644
--- a/Library/Homebrew/keg.rb
+++ b/Library/Homebrew/keg.rb
@@ -7,6 +7,8 @@ class Keg < Pathname
raise "#{to_s} is not a directory" unless directory?
end
+ INFOFILE_RX = %r[/share/info/[^.].*?\.info$]
+
# if path is a file in a keg then this will return the containing Keg object
def self.for path
path = path.realpath
@@ -29,6 +31,7 @@ class Keg < Pathname
next if src == self
dst=HOMEBREW_PREFIX+src.relative_path_from(self)
next unless dst.symlink?
+ dst.uninstall_info if dst.to_s =~ INFOFILE_RX and ENV['HOMEBREW_KEEP_INFO']
dst.unlink
n+=1
Find.prune if src.directory?
@@ -127,7 +130,10 @@ protected
dst.extend ObserverPathnameExtension
if src.file?
+ # Do the symlink.
dst.make_relative_symlink src unless File.basename(src) == '.DS_Store'
+ # Install info file entries in the info directory file
+ dst.install_info if dst.to_s =~ INFOFILE_RX and ENV['HOMEBREW_KEEP_INFO']
elsif src.directory?
# if the dst dir already exists, then great! walk the rest of the tree tho
next if dst.directory? and not dst.symlink?