aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core/Compile/CompilerPayload.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Core/Compile/CompilerPayload.cs')
-rw-r--r--src/WixToolset.Core/Compile/CompilerPayload.cs93
1 files changed, 68 insertions, 25 deletions
diff --git a/src/WixToolset.Core/Compile/CompilerPayload.cs b/src/WixToolset.Core/Compile/CompilerPayload.cs
index 4eda56f8..7a5fd1b2 100644
--- a/src/WixToolset.Core/Compile/CompilerPayload.cs
+++ b/src/WixToolset.Core/Compile/CompilerPayload.cs
@@ -23,6 +23,8 @@ namespace WixToolset.Core
23 23
24 public Identifier Id { get; set; } 24 public Identifier Id { get; set; }
25 25
26 public bool IsRemoteAllowed { get; set; }
27
26 public bool IsRequired { get; set; } = true; 28 public bool IsRequired { get; set; } = true;
27 29
28 public string Name { get; set; } 30 public string Name { get; set; }
@@ -48,26 +50,17 @@ namespace WixToolset.Core
48 50
49 private SourceLineNumber SourceLineNumbers { get; } 51 private SourceLineNumber SourceLineNumbers { get; }
50 52
51 private void CalculateAndVerifyFields(CompilerPayload remotePayload = null) 53 private void CalculateAndVerifyFields()
52 { 54 {
55 var isRemote = this.IsRemoteAllowed && !String.IsNullOrEmpty(this.Hash);
56
53 if (String.IsNullOrEmpty(this.SourceFile)) 57 if (String.IsNullOrEmpty(this.SourceFile))
54 { 58 {
55 if (String.IsNullOrEmpty(this.Name)) 59 if (!String.IsNullOrEmpty(this.Name) && !isRemote)
56 {
57 if (this.IsRequired)
58 {
59 this.Core.Write(ErrorMessages.ExpectedAttributesWithOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Name", "SourceFile"));
60 }
61 }
62 else if (remotePayload == null)
63 { 60 {
64 this.SourceFile = Path.Combine("SourceDir", this.Name); 61 this.SourceFile = Path.Combine("SourceDir", this.Name);
65 } 62 }
66 } 63 }
67 else if (remotePayload != null)
68 {
69 this.Core.Write(ErrorMessages.UnexpectedElementWithAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "RemotePayload", "SourceFile"));
70 }
71 else if (this.SourceFile.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) 64 else if (this.SourceFile.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
72 { 65 {
73 if (String.IsNullOrEmpty(this.Name)) 66 if (String.IsNullOrEmpty(this.Name))
@@ -80,24 +73,67 @@ namespace WixToolset.Core
80 } 73 }
81 } 74 }
82 75
83 if (remotePayload != null) 76 if (String.IsNullOrEmpty(this.SourceFile) && !isRemote)
84 { 77 {
85 if (this.DownloadUrl == null) 78 if (this.IsRequired)
86 { 79 {
87 this.Core.Write(ErrorMessages.ExpectedAttributeWithElement(this.SourceLineNumbers, this.Element.Name.LocalName, "DownloadUrl", "RemotePayload")); 80 if (!this.IsRemoteAllowed)
81 {
82 this.Core.Write(ErrorMessages.ExpectedAttributes(this.SourceLineNumbers, this.Element.Name.LocalName, "Name", "SourceFile"));
83 }
84 else
85 {
86 this.Core.Write(ErrorMessages.ExpectedAttributes(this.SourceLineNumbers, this.Element.Name.LocalName, "SourceFile", "Hash"));
87 }
88 } 88 }
89 }
90 else if (this.IsRemoteAllowed)
91 {
92 var isLocal = !String.IsNullOrEmpty(this.SourceFile);
89 93
90 if (YesNoDefaultType.No != this.Compressed) 94 if (isLocal)
95 {
96 if (isRemote)
97 {
98 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Hash", "SourceFile"));
99 }
100 }
101 else
91 { 102 {
103 if (String.IsNullOrEmpty(this.DownloadUrl))
104 {
105 this.Core.Write(ErrorMessages.ExpectedAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "DownloadUrl", "Hash"));
106 }
107
108 if (String.IsNullOrEmpty(this.Name))
109 {
110 this.Core.Write(ErrorMessages.ExpectedAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, "Name", "Hash"));
111 }
112
113 if (YesNoDefaultType.Yes == this.Compressed)
114 {
115 this.Core.Write(WarningMessages.RemotePayloadsMustNotAlsoBeCompressed(this.SourceLineNumbers, this.Element.Name.LocalName));
116 }
117
92 this.Compressed = YesNoDefaultType.No; 118 this.Compressed = YesNoDefaultType.No;
93 this.Core.Write(WarningMessages.RemotePayloadsMustNotAlsoBeCompressed(this.SourceLineNumbers, this.Element.Name.LocalName));
94 } 119 }
95 120
96 this.Description = remotePayload.Description; 121 VerifyValidValue("Description", !String.IsNullOrEmpty(this.Description));
97 this.DisplayName = remotePayload.DisplayName; 122 VerifyValidValue("ProductName", !String.IsNullOrEmpty(this.ProductName));
98 this.Hash = remotePayload.Hash; 123 VerifyValidValue("Size", this.Size.HasValue);
99 this.Size = remotePayload.Size; 124 VerifyValidValue("Version", !String.IsNullOrEmpty(this.Version));
100 this.Version = remotePayload.Version; 125
126 void VerifyValidValue(string attributeName, bool isSpecified)
127 {
128 if (isLocal && isSpecified)
129 {
130 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, attributeName, "SourceFile"));
131 }
132 else if (!isLocal && !isSpecified)
133 {
134 this.Core.Write(ErrorMessages.ExpectedAttribute(this.SourceLineNumbers, this.Element.Name.LocalName, attributeName, "Hash"));
135 }
136 }
101 } 137 }
102 } 138 }
103 139
@@ -143,9 +179,9 @@ namespace WixToolset.Core
143 return symbol; 179 return symbol;
144 } 180 }
145 181
146 public void FinishCompilingPackage(CompilerPayload remotePayload) 182 public void FinishCompilingPackage()
147 { 183 {
148 this.CalculateAndVerifyFields(remotePayload); 184 this.CalculateAndVerifyFields();
149 this.GenerateIdFromFilename(); 185 this.GenerateIdFromFilename();
150 186
151 if (this.Id == null) 187 if (this.Id == null)
@@ -155,6 +191,13 @@ namespace WixToolset.Core
155 } 191 }
156 } 192 }
157 193
194 public void FinishCompilingPackagePayload()
195 {
196 this.CalculateAndVerifyFields();
197 this.GenerateIdFromFilename();
198 this.GenerateIdFromPrefix("ppy");
199 }
200
158 public void FinishCompilingPayload() 201 public void FinishCompilingPayload()
159 { 202 {
160 this.CalculateAndVerifyFields(); 203 this.CalculateAndVerifyFields();