Add error handling for invalid package directories

This commit is contained in:
Chris de Graaf 2017-08-24 23:50:44 -05:00
parent 67eb1393a2
commit 8d9ce7a02b
4 changed files with 21 additions and 5 deletions

View File

@ -89,7 +89,15 @@ function generate(
info("Committed files generated by PkgTemplates")
multiple_branches = length(collect(LibGit2.GitBranchIter(repo))) > 1
info("Moving temporary package directory into $(t.dir)/")
mv(temp_pkg_dir, pkg_dir; remove_destination=force)
try
mkpath(dirname(pkg_dir))
mv(temp_pkg_dir, pkg_dir; remove_destination=force)
catch # Likely cause is that t.path can't be created (is a file, etc.).
# We need another temporary directory because temp_pkg_dir is about to be removed.
temp_dir = mktempdir()
mv(temp_pkg_dir, joinpath(temp_dir, pkg_name))
warn("$pkg_name couldn't be moved into $pkg_dir, left package in $temp_dir")
end
info("Finished")
if multiple_branches

View File

@ -24,7 +24,8 @@ create a template, you can use [`interactive_template`](@ref) instead.
git config's value, if it is left unset.
* `years::Union{Integer, AbstractString}=Dates.year(Dates.today())`: Copyright years on the
license. Can be supplied by a number, or a string such as "2016 - 2017".
* `dir::AbstractString=Pkg.dir()`: Directory in which the package will go.
* `dir::AbstractString=Pkg.dir()`: Directory in which the package will go. Relative paths
are converted to absolute ones at template creation time.
* `julia_version::VersionNumber=VERSION`: Minimum allowed Julia version.
* `requirements::Vector{String}=String[]`: Package requirements. If there are duplicate
requirements with different versions, i.e. ["PkgTemplates", "PkgTemplates 0.1"],
@ -100,7 +101,7 @@ create a template, you can use [`interactive_template`](@ref) instead.
end
new(
user, host, license, authors, years, dir, julia_version,
user, host, license, authors, years, abspath(dir), julia_version,
requirements_dedup, gitconfig, plugin_dict,
)
end

View File

@ -29,7 +29,7 @@
@test !isempty(t.license)
@test t.authors == me
@test t.years == "2016"
@test t.dir == test_file
@test t.dir == abspath(test_file)
@test t.julia_version == v"0.5.0"
@test Set(t.requirements) == Set(["X", "Y"])
@test t.gitconfig == Dict("A" => "B")

View File

@ -60,7 +60,7 @@ write(test_file, template_text)
@test t.authors == "Guy, Gal"
t = Template(; user=me, dir=test_file)
@test t.dir == test_file
@test t.dir == abspath(test_file)
t = Template(; user=me, julia_version=v"0.1.2")
@test t.julia_version == v"0.1.2"
@ -377,6 +377,13 @@ end
@test isfile(Pkg.dir(test_pkg, "README.md"))
rm(Pkg.dir(test_pkg); recursive=true)
# Note: These tests will leave temporary directories on disk.
temp_file = mktemp()[1]
t = Template(; user=me, dir=temp_file, gitconfig=gitconfig)
@test_warn r".+" generate(test_pkg, t)
t = Template(; user=me, dir=joinpath(temp_file, temp_file), gitconfig=gitconfig)
@test_warn r".+" generate(test_pkg, t)
t = Template(; user=me, gitconfig=gitconfig, plugins=[GitHubPages()])
generate(test_pkg, t)
readme = readstring(Pkg.dir(test_pkg, "README.md"))