PkgTemplates.jl/src/template.jl
2017-08-14 13:12:37 -05:00

65 lines
2.7 KiB
Julia

"""
Template(; kwargs...) -> Template
Records common information used to generate a package.
# Keyword Arguments
* `remote_prefix::AbstractString`: The base url for the remote repository. e.g.
"https://github.com/username/". This will be used with the package name to set the url
for the remote repository, as well as to determine the account's username. Failing to
specify this will cause an error. This is case-sensitive for some plugins, so take care
to enter it correctly.
* `license::Union{AbstractString, Void}=nothing`: Name of the package licsense. If
no license is specified, no license is created. `show_license` can be used to list all
available licenses, or to print out a particular license's text.
* `authors::Union{AbstractString, Array}=LibGit2.getconfig("user.name", "")`: Names that
appear on the license. Supply a string for one author, and an array for multiple.
* `years::Union{AbstractString, Array}=string(Dates.year(Dates.today()))`: Copyright years
on the license. Can be supplied by an Int, or a string such as "2016 - 2017".
* `julia_version::VersionNumber=VERSION`: Minimum allowed Julia version.
* `git_config::Dict{String, String}=Dict{String, String}()`: Git configuration options.
* `plugins::Vector{Plugin}`: A list of `Plugin`s that the package will include.
"""
@auto_hash_equals struct Template
remote_prefix::AbstractString
license::Union{AbstractString, Void}
authors::Union{AbstractString, Array}
years::AbstractString
path::AbstractString
julia_version::VersionNumber
git_config::Dict{String, String}
plugins::Dict{DataType, Plugin}
function Template{P <: Plugin}(;
remote_prefix::AbstractString="",
license::Union{AbstractString, Void}=nothing,
authors::Union{AbstractString, Array}=LibGit2.getconfig("user.name", ""),
years::Union{Int, AbstractString}=string(Dates.year(Dates.today())),
julia_version::VersionNumber=VERSION,
git_config::Dict{String, String}=Dict{String, String}(),
plugins::Vector{P}=Vector{Plugin}(),
)
if isempty(remote_prefix)
throw(ArgumentError("Must specify remote_prefix::AbstractString"))
end
path = Pkg.dir()
years = string(years)
if isa(authors, Array)
authors = join(authors, ", ")
end
if !endswith(remote_prefix, "/")
remote_prefix *= "/"
end
if license != nothing && !isfile(joinpath(LICENSE_DIR, license))
throw(ArgumentError("License '$license' is not available"))
end
plugins = Dict{DataType, Plugin}(typeof(p) => p for p in plugins)
new(
remote_prefix, license, authors, years,
path, julia_version, git_config, plugins,
)
end
end