package hudson.scm;
import hudson.model.Action;
/**
* Immutable object that represents revisions of the files in the repository,
* used to represent the result of
* {@linkplain SCM#poll(hudson.model.AbstractProject, hudson.Launcher, hudson.FilePath, hudson.model.TaskListener, SCMRevisionState) a SCM polling}.
*
* <p>
* This object is used so that the successive polling can compare the tip of the repository now vs
* what it was when it was last polled. (Before 1.345, Hudson was only able to compare the tip
* of the repository vs the state of the workspace, which resulted in a problem like HUDSON-2180.
*
* <p>
* {@link SCMRevisionState} is persisted as an action to {@link hudson.model.AbstractBuild}.
*
* @author Kohsuke Kawaguchi
* @since 1.345
*/
public abstract class SCMRevisionState implements Action {
public String getIconFileName() {
return null;
}
public String getDisplayName() {
return null;
}
public String getUrlName() {
return null;
}
/*
I can't really make this comparable because comparing two revision states often requires
non-trivial computation and conversations with the repository (mainly to figure out
which changes are insignificant and which are not.)
So instead, here we opt to a design where we tell SCM upfront about what we are comparing
against (baseline), and have it give us the new state and degree of change in PollingResult.
*/
public static SCMRevisionState NONE = new None();
private static final class None extends SCMRevisionState {}
}