Skip to content

Commit b0cba9e

Browse files
committed
Return early if target attribute already exists
1 parent 725807f commit b0cba9e

1 file changed

Lines changed: 74 additions & 55 deletions

File tree

plugins/content/bower/index.js

Lines changed: 74 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -803,93 +803,112 @@ function addPackage (plugin, packageInfo, options, cb) {
803803
return addCb(err);
804804
}
805805

806-
// don't duplicate component.name, component.version
807-
db.retrieve(plugin.type, { name: package.name, version: package.version }, function (err, results) {
806+
const targetAttribute = pkgMeta.targetAttribute;
807+
808+
async.some([ 'componenttype', 'extensiontype', 'menutype', 'themetype' ], (type, asyncCallback) => {
809+
if (!targetAttribute) return asyncCallback();
810+
811+
db.retrieve(type, { targetAttribute: targetAttribute }, (err, results) => {
812+
asyncCallback(err, results && results.length);
813+
});
814+
}, (err, targetAttributeExists) => {
808815
if (err) {
809816
logger.log('error', err);
810817
return addCb(err);
811818
}
812819

813-
if (results && 0 !== results.length) {
814-
// don't add duplicate
815-
if (options.strict) {
816-
return addCb(new PluginPackageError("Can't add plugin: plugin already exists!"));
817-
}
818-
return addCb(null);
820+
if (targetAttributeExists) {
821+
return addCb(new PluginPackageError(`Can't add plugin: targetAttribute already exists!`));
819822
}
820823

821-
db.create(plugin.type, package, function (err, newPlugin) {
824+
// don't duplicate component.name, component.version
825+
db.retrieve(plugin.type, { name: package.name, version: package.version }, function (err, results) {
822826
if (err) {
827+
logger.log('error', err);
828+
return addCb(err);
829+
}
830+
831+
if (results && 0 !== results.length) {
832+
// don't add duplicate
823833
if (options.strict) {
824-
return addCb(err);
834+
return addCb(new PluginPackageError("Can't add plugin: plugin already exists!"));
825835
}
826-
827-
logger.log('error', 'Failed to add package: ' + package.name, err);
828836
return addCb(null);
829837
}
830838

831-
logger.log('info', 'Added package: ' + package.name);
832-
833-
// #509 update content targeted by previous versions of this package
834-
logger.log('info', 'searching old package types ... ');
835-
db.retrieve(plugin.type, { name: package.name, version: { $ne: newPlugin.version } }, function (err, results) {
836-
839+
db.create(plugin.type, package, function (err, newPlugin) {
837840
if (err) {
838-
// strictness doesn't matter at this point
839-
logger.log('error', 'Failed to retrieve previous packages: ' + err.message, err);
841+
if (options.strict) {
842+
return addCb(err);
843+
}
844+
845+
logger.log('error', 'Failed to add package: ' + package.name, err);
846+
return addCb(null);
840847
}
841848

842-
if (results && results.length) {
843-
// found previous versions to update
844-
// only update content using the id of the most recent version
845-
var oldPlugin = false;
846-
results.forEach(function (item) {
847-
if (!oldPlugin) {
848-
oldPlugin = item;
849-
} else if (semver.gt(item.version, oldPlugin.version)) {
850-
oldPlugin = item;
851-
}
852-
});
849+
logger.log('info', 'Added package: ' + package.name);
853850

854-
// Persist the _isAvailableInEditor flag.
855-
db.update(plugin.type, {_id: newPlugin._id}, {_isAvailableInEditor: oldPlugin._isAvailableInEditor}, function(err, results) {
856-
if (err) {
857-
logger.log('error', err);
858-
return addCb(err);
859-
}
851+
// #509 update content targeted by previous versions of this package
852+
logger.log('info', 'searching old package types ... ');
853+
db.retrieve(plugin.type, { name: package.name, version: { $ne: newPlugin.version } }, function (err, results) {
854+
855+
if (err) {
856+
// strictness doesn't matter at this point
857+
logger.log('error', 'Failed to retrieve previous packages: ' + err.message, err);
858+
}
859+
860+
if (results && results.length) {
861+
// found previous versions to update
862+
// only update content using the id of the most recent version
863+
var oldPlugin = false;
864+
results.forEach(function (item) {
865+
if (!oldPlugin) {
866+
oldPlugin = item;
867+
} else if (semver.gt(item.version, oldPlugin.version)) {
868+
oldPlugin = item;
869+
}
870+
});
860871

861-
plugin.updateLegacyContent(newPlugin, oldPlugin, function (err) {
872+
// Persist the _isAvailableInEditor flag.
873+
db.update(plugin.type, {_id: newPlugin._id}, {_isAvailableInEditor: oldPlugin._isAvailableInEditor}, function(err, results) {
862874
if (err) {
863875
logger.log('error', err);
864876
return addCb(err);
865877
}
866878

867-
// Remove older versions of this plugin
868-
db.destroy(plugin.type, { name: package.name, version: { $ne: newPlugin.version } }, function (err) {
879+
plugin.updateLegacyContent(newPlugin, oldPlugin, function (err) {
869880
if (err) {
870881
logger.log('error', err);
871882
return addCb(err);
872883
}
873884

874-
logger.log('info', 'Successfully removed versions of ' + package.name + '(' + plugin.type + ') older than ' + newPlugin.version);
875-
return addCb(null, newPlugin);
885+
// Remove older versions of this plugin
886+
db.destroy(plugin.type, { name: package.name, version: { $ne: newPlugin.version } }, function (err) {
887+
if (err) {
888+
logger.log('error', err);
889+
return addCb(err);
890+
}
891+
892+
logger.log('info', 'Successfully removed versions of ' + package.name + '(' + plugin.type + ') older than ' + newPlugin.version);
893+
return addCb(null, newPlugin);
894+
});
876895
});
877896
});
878-
});
879-
} else {
880-
// nothing to do!
881-
// Remove older versions of this plugin
882-
db.destroy(plugin.type, { name: package.name, version: { $ne: newPlugin.version } }, function (err) {
883-
if (err) {
884-
logger.log('error', err);
885-
return addCb(err);
886-
}
897+
} else {
898+
// nothing to do!
899+
// Remove older versions of this plugin
900+
db.destroy(plugin.type, { name: package.name, version: { $ne: newPlugin.version } }, function (err) {
901+
if (err) {
902+
logger.log('error', err);
903+
return addCb(err);
904+
}
887905

888-
logger.log('info', 'Successfully removed versions of ' + package.name + '(' + plugin.type + ') older than ' + newPlugin.version);
906+
logger.log('info', 'Successfully removed versions of ' + package.name + '(' + plugin.type + ') older than ' + newPlugin.version);
889907

890-
return addCb(null, newPlugin);
891-
});
892-
}
908+
return addCb(null, newPlugin);
909+
});
910+
}
911+
});
893912
});
894913
});
895914
});

0 commit comments

Comments
 (0)