From c0ccbaf11673aaa19766a479321cf125dfbd009b Mon Sep 17 00:00:00 2001 From: Kevin Squire <kevin.squire@gmail.com> Date: Sun, 15 Sep 2013 21:17:52 -0700 Subject: [PATCH] Create and use versioned package dir by default. * On linux, link to common cache dir --- base/pkg/cache.jl | 29 +++++++++++++++++++++++++++-- base/pkg/dir.jl | 10 ++++++---- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/base/pkg/cache.jl b/base/pkg/cache.jl index 12cb1c2072c54..537cfb76f67e7 100644 --- a/base/pkg/cache.jl +++ b/base/pkg/cache.jl @@ -3,10 +3,35 @@ module Cache import ..Git using ..Types -path(pkg::String) = abspath(".cache", pkg) +import ..Dir: pkgroot, path + +function mkcachedir() + cache = realpath(abspath(".cache")) + if isdir(cache) + return + end + + @windows_only mkdir(cache) + @unix_only begin + rootcache = realpath(joinpath(pkgroot(), ".cache")) + if rootcache == cache + mkdir(cache) + elseif isdir(rootcache) + try + ln(rootcache, cache) + catch + mkdir(cache) + end + else + mkdir(rootcache) + mkcachedir() + end + end +end + function prefetch{S<:String}(pkg::String, url::String, sha1s::Vector{S}) - isdir(".cache") || mkdir(".cache") + isdir(".cache") || mkcachedir() cache = path(pkg) if !isdir(cache) info("Cloning cache of $pkg from $url") diff --git a/base/pkg/dir.jl b/base/pkg/dir.jl index 362874e2606a1..adfb28748dc4d 100644 --- a/base/pkg/dir.jl +++ b/base/pkg/dir.jl @@ -5,13 +5,15 @@ import ..Git const DIR_NAME = ".julia" +pkgroot() = abspath(get(ENV,"JULIA_PKGDIR",joinpath(homedir(),DIR_NAME))) + function path() - b = abspath(get(ENV,"JULIA_PKGDIR",joinpath(homedir(),DIR_NAME))) + b = pkgroot() x, y = VERSION.major, VERSION.minor d = joinpath(b,"v$x.$y") - isdir(d) && return d - d = joinpath(b,"v$x") - isdir(d) && return d + if isdir(d) || !isdir(b) || !isdir(joinpath(b, "METADATA")) + return d + end return b end path(pkg::String...) = normpath(path(),pkg...)