use of aQute.bnd.service.diff.Diff.Ignore in project bnd by bndtools.
the class Baseline method baseline.
public Set<Info> baseline(Tree n, Parameters nExports, Tree o, Parameters oExports, Instructions packageFilters) throws Exception {
diff = n.diff(o);
Diff apiDiff = diff.get("<api>");
infos = Create.set();
bsn = getBsn(n);
newerVersion = getVersion(n);
olderVersion = getVersion(o);
boolean firstRelease = false;
if (o.get("<manifest>") == null) {
firstRelease = true;
if (newerVersion.equals(Version.emptyVersion)) {
newerVersion = Version.ONE;
}
}
Delta highestDelta = Delta.UNCHANGED;
for (Diff pdiff : apiDiff.getChildren()) {
if (// Just packages
pdiff.getType() != Type.PACKAGE)
continue;
if (pdiff.getName().startsWith("java."))
continue;
if (!packageFilters.matches(pdiff.getName()))
continue;
final Info info = new Info();
infos.add(info);
info.reason = getRootCauses(pdiff);
info.packageDiff = pdiff;
info.packageName = pdiff.getName();
info.attributes = nExports.get(info.packageName);
logger.debug("attrs for {} {}", info.packageName, info.attributes);
info.newerVersion = getVersion(info.attributes);
info.olderVersion = getVersion(oExports.get(info.packageName));
if (pdiff.getDelta() == Delta.UNCHANGED) {
info.suggestedVersion = info.olderVersion;
// Fix previously released package containing version qualifier
if (info.olderVersion.getQualifier() != null) {
info.suggestedVersion = bump(Delta.MICRO, info.olderVersion, 1, 0);
info.warning += "Found package version with qualifier. Bumping micro version";
} else if (!info.newerVersion.equals(info.olderVersion)) {
info.warning += "No difference but versions are not equal";
}
} else if (pdiff.getDelta() == Delta.REMOVED) {
info.suggestedVersion = null;
} else if (pdiff.getDelta() == Delta.ADDED) {
info.suggestedVersion = info.newerVersion;
} else {
// We have an API change
info.suggestedVersion = bump(pdiff.getDelta(), info.olderVersion, 1, 0);
if (info.newerVersion.compareTo(info.suggestedVersion) < 0) {
// our suggested version is smaller
info.mismatch = true;
// that an interface is a provider interface
if (pdiff.getDelta() == Delta.MAJOR) {
info.providers = Create.set();
if (info.attributes != null)
info.providers.addAll(Processor.split(info.attributes.get(Constants.PROVIDER_TYPE_DIRECTIVE)));
// Calculate the new delta assuming we fix all the major
// interfaces
// by making them providers
Delta tryDelta = pdiff.getDelta(new Ignore() {
public boolean contains(Diff diff) {
if (diff.getType() == Type.INTERFACE && diff.getDelta() == Delta.MAJOR) {
info.providers.add(Descriptors.getShortName(diff.getName()));
return true;
}
return false;
}
});
if (tryDelta != Delta.MAJOR) {
info.suggestedIfProviders = bump(tryDelta, info.olderVersion, 1, 0);
}
}
}
}
Delta content;
switch(pdiff.getDelta()) {
case IGNORED:
case UNCHANGED:
content = Delta.UNCHANGED;
break;
case ADDED:
content = Delta.MINOR;
break;
case // cannot happen
CHANGED:
content = Delta.MICRO;
break;
case MICRO:
content = pdiff.getDelta();
break;
case MINOR:
content = pdiff.getDelta();
break;
case MAJOR:
content = pdiff.getDelta();
break;
case REMOVED:
default:
content = Delta.MAJOR;
break;
}
if (content.compareTo(highestDelta) > 0) {
highestDelta = content;
}
}
// biggest semantic change
if (firstRelease || !bsn.equals(getBsn(o))) {
suggestedVersion = newerVersion;
} else {
suggestedVersion = bumpBundle(highestDelta, olderVersion, 1, 0);
if (suggestedVersion.compareTo(newerVersion) < 0)
suggestedVersion = newerVersion;
}
binfo.bsn = bsn;
binfo.suggestedVersion = suggestedVersion;
binfo.version = binfo.olderVersion = olderVersion;
binfo.newerVersion = newerVersion;
if (newerVersion.getWithoutQualifier().equals(olderVersion.getWithoutQualifier())) {
if (getDiff().getDelta() == Delta.UNCHANGED)
return infos;
}
// Ok, now our bundle version must be >= the suggestedVersion
if (newerVersion.getWithoutQualifier().compareTo(getSuggestedVersion()) < 0) {
binfo.mismatch = true;
binfo.reason = getRootCauses(apiDiff);
}
return infos;
}