112 Commits

Author SHA1 Message Date
Jack Nagel
6b5e92ac47 Raise AlreadyLinkedError when a keg is already linked 2014-04-21 12:43:06 -05:00
Jack Nagel
b2e8c4e79a Only unlink after a LinkError 2014-04-21 12:43:06 -05:00
Jack Nagel
727f204760 Raise useful errors from make_relative_symlink 2014-04-21 12:43:06 -05:00
Jack Nagel
d3ab439b7c Rework make_relative_symlink error handling and move it into keg 2014-04-21 12:43:06 -05:00
Jack Nagel
90574a6a4b Drop conditional that is always false 2014-04-06 14:01:06 -05:00
Jack Nagel
8c88d48af7 More correct "symlink already exists" check 2014-04-05 12:17:19 -05:00
Jack Nagel
ce1f598e98 Avoid realpath where it is not necessary
Symlinks in opt and LinkedKegs point directly at a keg in the cellar, so
only resolving one symlink should suffice, and make it clear what path
we are actually interested in.
2014-04-05 12:17:19 -05:00
Jack Nagel
d88c79f3cf Use resolved_path instead of dirname and readlink directly 2014-03-31 22:39:41 -05:00
Jack Nagel
b29be4c9a5 Remove default value from Keg#link_dir mode parameter
Now that this is always called with an explicit mode argument, let's
make sure it stays that way.
2014-03-31 21:33:37 -05:00
Jack Nagel
75af625c17 Pass the link mode to resolve_any_conflicts 2014-03-31 21:33:37 -05:00
Jack Nagel
e21a1fab51 Move initializer after constants and class methods 2014-03-27 22:35:08 -05:00
Jack Nagel
685bf070d1 Fix class definition so we can require files first 2014-03-27 22:34:22 -05:00
Jack Nagel
02a1d71871 Don't mix boolean operator types 2014-03-27 17:37:38 -05:00
Jack Nagel
7c5e0eb507 Put constant strings in a constant 2014-03-27 17:14:55 -05:00
Jack Nagel
cb9ee747e0 Fix Keg#find so we don't have to deal with it everywhere
lol inheritance
2014-03-27 17:06:05 -05:00
Mike McQuaid
916e751596 keg: add delete_pyc_files! method. 2014-03-13 10:05:20 +00:00
Jack Nagel
9030c19418 Don't chdir just to do a glob 2014-03-11 18:45:55 -05:00
Jack Nagel
6008187d5f Encode formula revision in installation prefix
In order to allow kegs built with the same version but differing formula
revisions to coexist, we must encode the revision as part of the keg's
name. This is necessary to actually perform an upgrade, as we cannot
upgrade a keg in-place, and temporarily moving it pending the result of
the upgrade is error-prone and potentially slow.

To accomplish this, we introduce a new Formula#pkg_version method that
concatenates the active_spec version with the formula revision. An
exception is made for a formula that has no revision: the tag is
omitted. This preserves compatibility with existing installations.
2014-03-05 20:12:51 -06:00
Adam Vandenberg
bb5a2b587e Always keep info files
Closes Homebrew/homebrew#26659.
2014-02-23 08:30:50 -08:00
Mike McQuaid
d8d76da55f keg: add function to detect if .app(s) installed. 2014-01-19 14:19:07 -08:00
Mike McQuaid
744a8944b0 caveats: show python caveats if modules installed. 2014-01-04 13:19:20 +00:00
Jack Nagel
935091cd8e Pathname#extname returns a string 2013-12-14 09:35:57 -06:00
Adam Vandenberg
040d655d8d add lib/dtrace to non-owned directories 2013-11-17 10:34:19 -08:00
Mike McQuaid
a6e2245732 git_etc: update based on bottle etc/var changes. 2013-10-10 16:46:47 +01:00
Mike McQuaid
ab20ed0bc2 Optionally use git to keep brew etc versioned.
Still in alpha state.
Handles defaults and merging changes with new versions.
Enable by setting the HOMEBREW_GIT_ETC environment variable.

Closes Homebrew/homebrew#15751.
Closes Homebrew/homebrew#17713.
2013-09-07 13:39:43 +01:00
Samuel John
ad80b10de4 Keg should link symlinks directly.
If the `src` in the Cellar of a formula is a symlink to another dir
in the same Cellar (for example `Frameworks/QtGui.framework` is a
symlink to `lib/QtGui.framework`), then we should make a symlink
directly instead of possibly creating an empty dir.

This is needed because Ruby's `find` does not follow symlinks (newer
versions can, but we have to support 10.8 for a long time).

Currently this probably only occurs for Qt, where we put symlinks
into the Cellar/Frameworks and the frameworks linking code is a bit
special to create a directory to "merge" together different versions
of the same framework from different formulae. See `python` and
`python3`; both install `Python.framework` and only one can be the
`Current` but the other should still be put into
`Python.framework/Versions`. Therefore `Python.framework` has to
be a dir and no symlink.
2013-08-14 21:46:42 +02:00
Jack Nagel
966e82663f Make usage of ObserverPathnameExtension more obvious
Remove use of globals.

Closes Homebrew/homebrew#21795.
2013-08-10 19:02:00 -05:00
Jack Nagel
d5325eb4e4 Always prune empty toplevel directories when unlinking
Closes Homebrew/homebrew#21750.
2013-08-09 20:55:54 -05:00
Jack Nagel
e4b951520a Keep track of pruned parent directories 2013-08-09 20:50:43 -05:00
Jack Nagel
36f5452ae3 Handle mkpath of node_modules directory in keg 2013-07-31 13:51:05 -05:00
Adam Vandenberg
7964aa6648 keg: more gnome folders 2013-07-13 10:15:54 -07:00
Adam Vandenberg
e805b8636c Show symlink target if linking fails
Closes Homebrew/homebrew#21060.
2013-07-10 08:54:18 -07:00
Adam Vandenberg
6a83404fd5 add mime-info to Gnome folders 2013-07-08 09:59:45 -07:00
Adam Vandenberg
9fdfdc5680 Better handling of Gnome desktop files
Gnome desktop support has a lot of folders in share that should be created
directly in share, rather than shared.

Add these folders to keg, and don't link any icon cache files into share.

Closes Homebrew/homebrew#20340.
2013-07-02 08:59:33 -07:00
Samuel John
fbaf8a5968 Linking Frameworks correctly if multiple.
For example python and python3 both provide a
`Python.framework` and OS X Frameworks are made to
deal with this by putting them into `Versions` and
linking the default one as `Current`. However, brew
did not respect this and cleaned out stuff making
neither of the two versions work because `Current`
is replaced by an empty directory.

This commit fixes that. However, still one of the
two `Python.frameworks` has to remove it's
`Current` and `Headers` links, because brew cannot
decide alone which one is the "default" and allowed
to set the `Current` link.

A similar situation might apply to Qt 4 vs. 5..
2013-06-18 20:49:13 +02:00
Samuel John
20ac914112 keg.rb: minor comment fix 2013-06-07 17:58:55 +02:00
Samuel John
c524895666 Python 2.x and 3.x support
New `depends_on :python` Dependency.
New `depends_on :python3` Dependency.

To avoid having multiple formulae with endings -py2 and -py3,
we will handle support for different pythons (2.x vs. 3.x)
in the same formula.
Further brewed vs. external python will be transparently supported.

The formula also gets a new object `python`, which is false if
no Python is available or the user has disabled it. Otherwise
it is defined and provides several support methods:

python.site_packages # the site-packages in the formula's Cellar
python.global_site_packages
python.binary # the full path to the python binary
python.prefix
python.version
python.version.major
python.version.minor
python.xy # => e.g. "python2.7"
python.incdir # includes of python
python.libdir # the python dylib library
python.pkg_config_path # used internally by brew
python.from_osx?
python.framework?
python.universal?
python.pypy?
python.standard_caveats # Text to set PYTHONPATH for python.from_osx?
python.if3then3 # => "" for 2.x and to "3" for 3.x.

Further, to avoid code duplication, `python` takes an optional
block that is run twice if the formula defines depends_on
:python AND :python3.

python do
  system python, 'setup.py', "--prefix=#{prefix}"
end

Read more in the Homebrew wiki.
2013-06-03 17:29:43 +02:00
Desmond Brand
ba93e6d363 Overwrite broken symlinks with --overwrite
Closes Homebrew/homebrew#19480.

Signed-off-by: Misty De Meo <mistydemeo@gmail.com>
2013-05-09 09:21:34 -05:00
Jack Nagel
2e58fbf260 Keg requires OpenStruct 2013-04-14 15:38:14 -05:00
Jack Nagel
9db0e68eb6 Unify indentation of access modifiers
These are class method calls, not some special keyword, and should be
indented as such (also all standard Ruby indenters do this).
2013-04-07 20:59:49 -05:00
Jack Nagel
f037be5148 Don't shadow outer local variables 2013-02-18 12:13:36 -06:00
Jack Nagel
97d3ae1775 Extract formula locks into a class 2013-02-09 18:19:50 -06:00
Jack Nagel
61f01632c6 Keg#lock: guard against nil in ensure
Fixes Homebrew/homebrew#17403.
2013-01-29 10:26:00 -06:00
Jack Nagel
9a179d8b06 locks: ensure lock directory exists
Fixes Homebrew/homebrew#17326.
2013-01-26 13:18:45 -06:00
Jack Nagel
37a56fa513 FormulaInstaller: implement installation locks
FormulaInstaller now attempts to take a lock on a "foo.brewing" file for
the formula and all of its dependencies before attempting installation.

The lock is an advisory lock implemented using flock(), and as such it
only locks out other processes that attempt to take the lock. It also
means that it is never necessary to manually remove the lock file,
because the lock is not enforced by I/O.

The uninstall, link, and unlink commands all learn to respect this lock
as well, so that the installation cannot be corrupted by a concurrent
Homebrew process, and keg operations cannot occur simultaneously.
2013-01-26 12:14:45 -06:00
Jack Nagel
e3068f631a Prune LinkedKegs relative to correct path
Fixes Homebrew/homebrew#16948.
2013-01-08 11:03:13 -06:00
Mike McQuaid
faf51f254d Make generic caveats for launchd plist files. 2012-11-25 23:05:52 +00:00
Jack Nagel
7f9c03c1ff Link Frameworks into top-level Frameworks directory 2012-11-06 12:32:09 -06:00
Jack Nagel
2f542f657e Combine duplicated postfix conditionals 2012-11-06 12:32:09 -06:00
Jack Nagel
f8183d9510 Hoist top-level directory list into a constant 2012-11-06 12:32:09 -06:00