private static TemplateVariables CreateTemplateVariables(PackageTemplateOptions options) { var version = InternalEditorUtility.GetUnityVersion(); return(new Dictionary <string, string> { { "NAME", options.name }, { "DISPLAYNAME", options.displayName }, { "ROOTNAMESPACE", options.rootNamespace }, { "UNITYVERSION", $"{version.Major}.{version.Minor}" }, { "CURRENTDATE", DateTime.Now.ToString("yyyy-MM-dd") }, }); }
private static void ValidateOptions(PackageTemplateOptions options) { var errors = new List <string>(); var requiredErrorMessage = L10n.Tr("{0} is required"); options.name = options.name?.Trim(); if (string.IsNullOrEmpty(options.name)) { errors.Add(string.Format(requiredErrorMessage, nameof(options.name))); } else if (!Validation.ValidateName(options.name)) { errors.Add(string.Format(L10n.Tr("Package name [{0}] is invalid"), options.name)); } else if (GetAllPackagesInfo().Any(p => p.name == options.name)) { errors.Add(string.Format(L10n.Tr("The project already contains a package with the name [{0}]."), options.name)); } options.displayName = options.displayName?.Trim(); if (string.IsNullOrEmpty(options.displayName)) { errors.Add(string.Format(requiredErrorMessage, nameof(options.displayName))); } options.rootNamespace = options.rootNamespace?.Trim(); if (!string.IsNullOrEmpty(options.rootNamespace) && !ValidateRootNamespace(options.rootNamespace)) { errors.Add(string.Format(L10n.Tr("[{0}] is not a valid namespace"), options.rootNamespace)); } options.templateFolder = options.templateFolder?.Trim(); if (string.IsNullOrEmpty(options.templateFolder)) { errors.Add(string.Format(requiredErrorMessage, nameof(options.templateFolder))); } else if (!Directory.Exists(options.templateFolder)) { errors.Add(string.Format(L10n.Tr("The template folder [{0}] does not exist"), options.templateFolder)); } if (errors.Count > 0) { var invalidParamMsg = string.Format(L10n.Tr("{0} parameter is invalid"), nameof(options)); var errorMsg = string.Join(Environment.NewLine, errors.ToArray()); throw new ArgumentException($"{invalidParamMsg}:{Environment.NewLine}{errorMsg}"); } }
public static string CreatePackage(PackageTemplateOptions options) { ValidateOptions(options); var targetFolder = $"Packages/{options.name}"; if (Directory.Exists(targetFolder)) { throw new InvalidOperationException(string.Format(L10n.Tr("The target folder [{0}] for this new package already exists."), targetFolder)); } var variables = CreateTemplateVariables(options); var templateFolder = options.templateFolder; var tempFolder = FileUtil.GetUniqueTempPathInProject(); try { FileUtil.CopyFileOrDirectory(templateFolder, tempFolder); foreach (var file in GetPackageTemplateFiles(tempFolder)) { File.SetAttributes(file, File.GetAttributes(file) & ~FileAttributes.ReadOnly); ReplaceVariablesInFile(variables, file); RenameFileWithVariables(variables, file); } Directory.Move(tempFolder, targetFolder); } finally { if (Directory.Exists(tempFolder)) { Directory.Delete(tempFolder, true); } } return(targetFolder); }