PageRenderTime 65ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/Models/NugetPackage.cs

#
C# | 276 lines | 185 code | 30 blank | 61 comment | 33 complexity | 2878bc13ab4258c27dba3a3a81e0ebde MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Globalization;
  5. using System.Drawing;
  6. using System.IO;
  7. using System.ComponentModel.DataAnnotations;
  8. using System.Xml;
  9. using System.Windows.Forms;
  10. namespace NugetPublishWizard.Models
  11. {
  12. [Serializable]
  13. public class NugetPackage
  14. {
  15. private NugetPackageMetaData _metaData = new NugetPackageMetaData();
  16. public NugetPackageMetaData MetaData { get { return _metaData; } set { this._metaData = value; } }
  17. public List<NugetPackageFile> Lib { get; set; }
  18. public List<NugetPackageFile> Content { get; set; }
  19. public string ProjectFileName { get; set; }
  20. public string ActiveConfigurationName { get; set; }
  21. public List<string> OutputDirectories { get; set; }
  22. public bool PushPackage { get; set; }
  23. public bool PublishPackage { get; set; }
  24. public NugetPackage()
  25. {
  26. this.MetaData.Id = string.Empty;
  27. this._metaData.Language = CultureInfo.GetCultureInfo("en-US");
  28. this._metaData.Version = new Version(1,0,0,0).ToString();
  29. this._metaData.Authors = new List<string>();
  30. this._metaData.Owners = new List<string>();
  31. this._metaData.Tags = new List<string>();
  32. this._metaData.Dependencies = new List<NugetDependencie>();
  33. this.Content = new List<NugetPackageFile>();
  34. this.Lib = new List<NugetPackageFile>();
  35. this.OutputDirectories = new List<string>();
  36. }
  37. public bool Build(ref string output, ref string filePath)
  38. {
  39. // get temp directory
  40. string path = Path.GetTempPath();
  41. Guid tempId = Guid.NewGuid();
  42. path += string.Format(@"{0}\", tempId.ToString());
  43. Directory.CreateDirectory(path);
  44. // create nuspec file
  45. FileInfo nugetSpecFile = new FileInfo(string.Format(@"{0}\Package.nuspec", path));
  46. CreateNugetspecFile(nugetSpecFile);
  47. // copy files
  48. foreach (NugetPackageFile f in this.Content)
  49. {
  50. FileInfo file = new FileInfo(string.Format(@"{0}\{1}", path, f.PackageFile));
  51. if (!file.Directory.Exists)
  52. file.Directory.Create();
  53. f.LocalFile.CopyTo(file.FullName,true);
  54. }
  55. foreach (NugetPackageFile f in this.Lib)
  56. {
  57. FileInfo file = new FileInfo(string.Format(@"{0}\{1}", path, f.PackageFile));
  58. if (!file.Directory.Exists)
  59. file.Directory.Create();
  60. f.LocalFile.CopyTo(file.FullName, true);
  61. }
  62. // call nuget.exe
  63. NugetRemote remote = new NugetRemote();
  64. bool result = remote.Pack(nugetSpecFile.FullName);
  65. filePath = string.Format(@"{0}\{1}.{2}.nupkg", Environment.CurrentDirectory, this.MetaData.Id, this.MetaData.Version);
  66. // remove temp directory
  67. Directory.Delete(path, true);
  68. if (File.Exists(filePath) && result)
  69. {
  70. output = "Package successfuly created";
  71. return true;
  72. }
  73. else
  74. {
  75. output = remote.Output[remote.Output.Count - 1];
  76. return false;
  77. }
  78. }
  79. public static bool Push(string packagePath, string source, string apiKey, ref string output)
  80. {
  81. NugetRemote remote = new NugetRemote();
  82. return remote.Push(packagePath, source, apiKey, ref output);
  83. }
  84. public static bool Publish(string id, string version, string source, string apiKey, ref string output)
  85. {
  86. NugetRemote remote = new NugetRemote();
  87. return remote.Publish(id, version, source, apiKey, ref output);
  88. }
  89. public static bool Remove(string id, string version, string source, string apiKey, ref string output)
  90. {
  91. NugetRemote remote = new NugetRemote();
  92. return remote.Remove(id, version, source, apiKey, ref output);
  93. }
  94. private void CreateNugetspecFile(FileInfo filePath)
  95. {
  96. XmlTextWriter writer = new XmlTextWriter(filePath.FullName, Encoding.UTF8);
  97. writer.Formatting = Formatting.Indented;
  98. writer.WriteStartDocument();
  99. writer.WriteStartElement("package");
  100. writer.WriteStartElement("metadata");
  101. writer.WriteElementString("id", this.MetaData.Id);
  102. writer.WriteElementString("version", this.MetaData.Version.ToString());
  103. if (!string.IsNullOrEmpty(this.MetaData.Title))
  104. writer.WriteElementString("title", this.MetaData.Title);
  105. if (!string.IsNullOrEmpty(this.MetaData.Description))
  106. writer.WriteElementString("description", this.MetaData.Description.Replace("\r\n",""));
  107. if (this.MetaData.Summary != null)
  108. writer.WriteElementString("summary", this.MetaData.Summary.Replace("\r\n", ""));
  109. if (this.MetaData.Language != null)
  110. writer.WriteElementString("language", this.MetaData.Language.ToString());
  111. if (!string.IsNullOrEmpty(this.MetaData.ProjectUrl))
  112. writer.WriteElementString("projectUrl", this.MetaData.ProjectUrl.ToString());
  113. if (!string.IsNullOrEmpty(this.MetaData.IconUrl))
  114. writer.WriteElementString("iconUrl", this.MetaData.IconUrl.ToString());
  115. if (!string.IsNullOrEmpty(this.MetaData.LicenseUrl))
  116. {
  117. writer.WriteElementString("licenseUrl", this.MetaData.LicenseUrl.ToString());
  118. writer.WriteElementString("requireLicenseAcceptance", this.MetaData.RequireLicenseAcceptance.ToString().ToLower());
  119. }
  120. if (this.MetaData.Authors != null && this.MetaData.Authors.Count != 0)
  121. {
  122. writer.WriteElementString("authors", Helper.ListToString(this.MetaData.Authors, ','));
  123. }
  124. if (this.MetaData.Owners != null && this.MetaData.Owners.Count != 0)
  125. {
  126. writer.WriteElementString("owners", Helper.ListToString(this.MetaData.Owners, ','));
  127. }
  128. if (this.MetaData.Tags != null && this.MetaData.Tags.Count != 0)
  129. {
  130. writer.WriteElementString("tags", Helper.ListToString(this.MetaData.Tags, ' '));
  131. }
  132. if (this.MetaData.Dependencies.Count != 0)
  133. {
  134. writer.WriteStartElement("dependencies");
  135. foreach (NugetDependencie de in this.MetaData.Dependencies)
  136. {
  137. writer.WriteStartElement("dependency");
  138. writer.WriteAttributeString("id", de.Id);
  139. if (de.Version != "newest")
  140. writer.WriteAttributeString("version", de.Version);
  141. writer.WriteEndElement();
  142. }
  143. writer.WriteEndElement();
  144. }
  145. writer.WriteEndElement();
  146. writer.WriteEndElement();
  147. writer.WriteEndDocument();
  148. writer.Close();
  149. }
  150. //private void SaveTemplate(FileInfo filePath)
  151. //{
  152. // XmlTextWriter writer = new XmlTextWriter(filePath.FullName, Encoding.UTF8);
  153. // writer.Formatting = Formatting.Indented;
  154. // writer.WriteStartDocument();
  155. // writer.WriteStartElement("package");
  156. // writer.WriteStartElement("metadata");
  157. // writer.WriteElementString("id", this.MetaData.Id);
  158. // writer.WriteElementString("version", this.MetaData.Version.ToString());
  159. // if (!string.IsNullOrEmpty(this.MetaData.Title))
  160. // writer.WriteElementString("title", this.MetaData.Title);
  161. // if (!string.IsNullOrEmpty(this.MetaData.Description))
  162. // writer.WriteElementString("description", this.MetaData.Description.Replace("\r\n", ""));
  163. // if (this.MetaData.Summary != null)
  164. // writer.WriteElementString("summary", this.MetaData.Summary.Replace("\r\n", ""));
  165. // if (this.MetaData.Language != null)
  166. // writer.WriteElementString("language", this.MetaData.Language.ToString());
  167. // if (!string.IsNullOrEmpty(this.MetaData.ProjectUrl))
  168. // writer.WriteElementString("projectUrl", this.MetaData.ProjectUrl.ToString());
  169. // if (!string.IsNullOrEmpty(this.MetaData.IconUrl))
  170. // writer.WriteElementString("iconUrl", this.MetaData.IconUrl.ToString());
  171. // if (!string.IsNullOrEmpty(this.MetaData.LicenseUrl))
  172. // {
  173. // writer.WriteElementString("licenseUrl", this.MetaData.LicenseUrl.ToString());
  174. // writer.WriteElementString("requireLicenseAcceptance", this.MetaData.RequireLicenseAcceptance.ToString().ToLower());
  175. // }
  176. // if (this.MetaData.Authors != null && this.MetaData.Authors.Count != 0)
  177. // {
  178. // writer.WriteElementString("authors", Helper.ListToString(this.MetaData.Authors, ','));
  179. // }
  180. // if (this.MetaData.Owners != null && this.MetaData.Owners.Count != 0)
  181. // {
  182. // writer.WriteElementString("owners", Helper.ListToString(this.MetaData.Owners, ','));
  183. // }
  184. // if (this.MetaData.Tags != null && this.MetaData.Tags.Count != 0)
  185. // {
  186. // writer.WriteElementString("tags", Helper.ListToString(this.MetaData.Tags, ' '));
  187. // }
  188. // if (this.MetaData.Dependencies.Count != 0)
  189. // {
  190. // writer.WriteStartElement("dependencies");
  191. // foreach (NugetDependencie de in this.MetaData.Dependencies)
  192. // {
  193. // writer.WriteStartElement("dependency");
  194. // writer.WriteAttributeString("id", de.Id);
  195. // if (de.Version != "newest")
  196. // writer.WriteAttributeString("version", de.Version);
  197. // writer.WriteEndElement();
  198. // }
  199. // writer.WriteEndElement();
  200. // }
  201. // writer.WriteEndElement();
  202. // writer.WriteEndElement();
  203. // writer.WriteEndDocument();
  204. // writer.Close();
  205. //}
  206. public override string ToString()
  207. {
  208. return string.Format("{0} ({1})", this.MetaData.Id, this.MetaData.Version.ToString());
  209. }
  210. public string GetBuildSummary()
  211. {
  212. StringBuilder result = new StringBuilder(this.MetaData.GetBuildSummary());
  213. if (this.Content.Count != 0)
  214. {
  215. result.AppendLine();
  216. result.AppendLine("Content");
  217. result.AppendLine("--------------------------------------------------------------------");
  218. foreach (NugetPackageFile file in this.Content)
  219. {
  220. result.AppendLine(file.PackageFile);
  221. }
  222. result.AppendLine("--------------------------------------------------------------------");
  223. }
  224. if (this.Lib.Count != 0)
  225. {
  226. result.AppendLine();
  227. result.AppendLine("Lib");
  228. result.AppendLine("--------------------------------------------------------------------");
  229. foreach (NugetPackageFile file in this.Lib)
  230. {
  231. result.AppendLine(file.PackageFile);
  232. }
  233. result.AppendLine("--------------------------------------------------------------------");
  234. }
  235. result.AppendLine();
  236. result.AppendLine("Output");
  237. result.AppendLine("--------------------------------------------------------------------");
  238. foreach (string dir in this.OutputDirectories)
  239. {
  240. result.AppendLine(dir);
  241. }
  242. result.AppendLine("--------------------------------------------------------------------");
  243. return result.ToString();
  244. }
  245. }
  246. }