65 lines
2.7 KiB
Julia
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
|