nuget-server/src/jetbrains/buildServer/nuget/server/trigger/NamedPackagesUpdateChecker.java (58 lines of code) (raw):

package jetbrains.buildServer.nuget.server.trigger; import com.intellij.openapi.diagnostic.Logger; import jetbrains.buildServer.buildTriggers.BuildTriggerException; import jetbrains.buildServer.buildTriggers.PolledTriggerContext; import jetbrains.buildServer.nuget.server.trigger.impl.CheckResult; import jetbrains.buildServer.nuget.server.trigger.impl.PackageCheckRequest; import jetbrains.buildServer.serverSide.CustomDataStorage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Created by Eugene Petrenko (eugene.petrenko@gmail.com) * Date: 14.07.11 15:41 */ public class NamedPackagesUpdateChecker implements TriggerUpdateChecker { private static final Logger LOG = Logger.getInstance(NamedPackagesUpdateChecker.class.getName()); public static final String KEY = "hash"; private final PackageChangesManager myPackageChangesManager; private final TriggerRequestFactory myRequestFactory; private final PackagesHashCalculator myCalculator; public NamedPackagesUpdateChecker(@NotNull final PackageChangesManager packageChangesManager, @NotNull final TriggerRequestFactory requestFactory, @NotNull final PackagesHashCalculator calculator) { myPackageChangesManager = packageChangesManager; myRequestFactory = requestFactory; myCalculator = calculator; } @Nullable public BuildStartReason checkChanges(@NotNull PolledTriggerContext context) throws BuildTriggerException { final PackageCheckRequest checkRequest = myRequestFactory.createRequest(context); CheckResult result; try { result = myPackageChangesManager.checkPackage(checkRequest); //no change available } catch (Throwable t) { LOG.warnAndDebugDetails("Failed to ckeck changes for package: " + checkRequest.getPackage().getPackageId() + ". " + t.getMessage(), t); result = CheckResult.failed(t.getMessage()); } if (result == null) return null; final String error = result.getError(); if (error != null) { throw new BuildTriggerException("Failed to check for package versions. " + error); } final CustomDataStorage storage = context.getCustomDataStorage(); @NotNull final String newHash = myCalculator.serializeHashcode(result.getInfos()); @Nullable final String oldHash = storage.getValue(KEY); if (LOG.isDebugEnabled()) { LOG.debug("Package: " + checkRequest.getPackage().toString()); LOG.debug("Recieved packages hash: " + newHash); LOG.debug(" old hash was: " + oldHash); } if (oldHash == null || (!newHash.equals(oldHash) && !newHash.equals("v2"))) { storage.putValue(KEY, newHash); storage.flush(); } //empty feed is error, not a trigger event, //still, we update trigger state for that if (result.getInfos().isEmpty()) { throw new BuildTriggerException("Failed to check for package versions. Package " + checkRequest.getPackage().getPackageId() + " was not found in the feed"); } if (myCalculator.isUpgradeRequired(oldHash, newHash)) { return new BuildStartReason("NuGet Package " + checkRequest.getPackage().getPackageId() + " updated"); } return null; } }