aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Despres2012-01-21 00:51:20 +0100
committerJack Nagel2012-02-01 22:52:14 -0600
commit9610ff2e9e06931693f49d4377ee26c0e664c547 (patch)
treecc790cecb027850c7170e03f03f4907fd6445578
parentb5633b56df21493e90dc184b07a9bead417e6c32 (diff)
downloadhomebrew-9610ff2e9e06931693f49d4377ee26c0e664c547.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 #9700. Signed-off-by: Jack Nagel <jacknagel@gmail.com>
-rw-r--r--Library/Contributions/manpages/brew.1.md5
-rw-r--r--Library/Homebrew/cleaner.rb9
-rw-r--r--Library/Homebrew/extend/pathname.rb22
-rw-r--r--Library/Homebrew/keg.rb6
-rw-r--r--share/man/man1/brew.17
5 files changed, 45 insertions, 4 deletions
diff --git a/Library/Contributions/manpages/brew.1.md b/Library/Contributions/manpages/brew.1.md
index 66fb3eb41..617088415 100644
--- a/Library/Contributions/manpages/brew.1.md
+++ b/Library/Contributions/manpages/brew.1.md
@@ -366,7 +366,10 @@ creating your own can be found on the wiki:
* HOMEBREW\_KEEP\_INFO:
If set, Homebrew will not remove files from `share/info`, allowing them
- to be linked from the Cellar.
+ to be linked from the Cellar. To access these info files, prepend
+ `share/info` to your `INFOPATH` environment variable.
+
+ *Example:* `export INFOPATH='/usr/local/share/info:/usr/share/info'`
* HOMEBREW\_MAKE\_JOBS:
If set, instructs Homebrew to use the value of `HOMEBREW_MAKE_JOBS` as
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?
diff --git a/share/man/man1/brew.1 b/share/man/man1/brew.1
index c2774aced..07495c736 100644
--- a/share/man/man1/brew.1
+++ b/share/man/man1/brew.1
@@ -1,7 +1,7 @@
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
-.TH "BREW" "1" "January 2012" "Homebrew" "brew"
+.TH "BREW" "1" "February 2012" "Homebrew" "brew"
.
.SH "NAME"
\fBbrew\fR \- The missing package manager for OS X
@@ -403,7 +403,10 @@ If set, Homebrew will use this editor when editing a single formula, or several
.
.TP
HOMEBREW_KEEP_INFO
-If set, Homebrew will not remove files from \fBshare/info\fR, allowing them to be linked from the Cellar\.
+If set, Homebrew will not remove files from \fBshare/info\fR, allowing them to be linked from the Cellar\. To access these info files, prepend \fBshare/info\fR to your \fBINFOPATH\fR environment variable\.
+.
+.IP
+\fIExample:\fR \fBexport INFOPATH=\'/usr/local/share/info:/usr/share/info\'\fR
.
.TP
HOMEBREW_MAKE_JOBS