Skip to content

Commit 28dfb8b

Browse files
author
Tommy Petty
authored
Merge pull request #354 from microsoft/users/jtpetty/bug-1769158
Fixed issue where additional package paths would add duplicate files
2 parents ba377af + 404398f commit 28dfb8b

File tree

4 files changed

+231
-207
lines changed

4 files changed

+231
-207
lines changed

app/exec/extension/_lib/vsix-manifest-builder.ts

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -794,22 +794,31 @@ export class VsixManifestBuilder extends ManifestBuilder {
794794
});
795795
}
796796
return contentTypePromise.then(() => {
797+
let seenPartNames = new Set();
797798
Object.keys(this.files).forEach(filePath => {
798799
if (this.files[filePath].contentType) {
799-
contentTypes.Types.Override.push({
800-
$: {
801-
ContentType: this.files[filePath].contentType,
802-
PartName: "/" + toZipItemName(this.files[filePath].partName),
803-
},
804-
});
800+
let partName = "/" + toZipItemName(this.files[filePath].partName);
801+
if (!seenPartNames.has(partName)) {
802+
contentTypes.Types.Override.push({
803+
$: {
804+
ContentType: this.files[filePath].contentType,
805+
PartName: partName,
806+
},
807+
});
808+
seenPartNames.add(partName);
809+
}
805810
if ((this.files[filePath] as any)._additionalPackagePaths) {
806-
for (const additionalPath of (this.files[filePath] as any)._additionalPackagePaths) {
807-
contentTypes.Types.Override.push({
808-
$: {
809-
ContentType: this.files[filePath].contentType,
810-
PartName: "/" + toZipItemName(additionalPath),
811-
},
812-
});
811+
for (const additionalPath of (this.files[filePath] as any)._additionalPackagePaths) {
812+
let additionalPartName = "/" + toZipItemName(additionalPath);
813+
if (!seenPartNames.has(additionalPartName)) {
814+
contentTypes.Types.Override.push({
815+
$: {
816+
ContentType: this.files[filePath].contentType,
817+
PartName: additionalPartName,
818+
},
819+
});
820+
seenPartNames.add(additionalPartName);
821+
}
813822
}
814823
}
815824
}

app/exec/extension/_lib/vsix-writer.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ export class VsixWriter {
150150
let vsix = new zip();
151151

152152
let builderPromises: Promise<void>[] = [];
153+
let seenPartNames = new Set();
153154
this.manifestBuilders.forEach(builder => {
154155
// Avoid the error EMFILE: too many open files
155156
const addPackageFilesBatch = (
@@ -183,19 +184,33 @@ export class VsixWriter {
183184
if (itemName.indexOf(" "))
184185
if (!builder.files[path].content) {
185186
let readFilePromise = promisify(readFile)(path).then(result => {
186-
vsix.file(itemName, result);
187+
if (!seenPartNames.has(itemName)) {
188+
vsix.file(itemName, result);
189+
seenPartNames.add(itemName);
190+
}
187191
if ((builder.files[path] as any)._additionalPackagePaths) {
188192
for (const p of (builder.files[path] as any)._additionalPackagePaths) {
189-
vsix.file(p, result);
193+
let additionalItemName = toZipItemName(p);
194+
if (!seenPartNames.has(additionalItemName)) {
195+
vsix.file(additionalItemName, result);
196+
seenPartNames.add(additionalItemName);
197+
}
190198
}
191199
}
192200
});
193201
readFilePromises.push(readFilePromise);
194202
} else {
195-
vsix.file(itemName, builder.files[path].content);
203+
if (!seenPartNames.has(itemName)) {
204+
vsix.file(itemName, builder.files[path].content);
205+
seenPartNames.add(itemName);
206+
}
196207
if ((builder.files[path] as any)._additionalPackagePaths) {
197208
for (const p of (builder.files[path] as any)._additionalPackagePaths) {
198-
vsix.file(p, builder.files[path].content);
209+
let additionalItemName = toZipItemName(p);
210+
if (!seenPartNames.has(additionalItemName)) {
211+
vsix.file(additionalItemName, builder.files[path].content);
212+
seenPartNames.add(additionalItemName);
213+
}
199214
}
200215
}
201216
readFilePromises.push(Promise.resolve<void>(null));

0 commit comments

Comments
 (0)