diff --git a/core/src/main/java/hudson/model/FileParameterValue.java b/core/src/main/java/hudson/model/FileParameterValue.java index 3afc48f3f4..56d37e3812 100644 --- a/core/src/main/java/hudson/model/FileParameterValue.java +++ b/core/src/main/java/hudson/model/FileParameterValue.java @@ -162,7 +162,8 @@ public class FileParameterValue extends ParameterValue { } /** - * In practice this will always be false, since location should be unique. + * Compares file parameters (existing files will be considered as different). + * Function has been modified in order to avoid JENKINS-19017 issue (wrong merge of builds in the queue). */ @Override public boolean equals(Object obj) { @@ -173,12 +174,13 @@ public class FileParameterValue extends ParameterValue { if (getClass() != obj.getClass()) return false; FileParameterValue other = (FileParameterValue) obj; - if (location == null) { - if (other.location != null) - return false; - } else if (!location.equals(other.location)) - return false; - return true; + + if (location == null && other.location == null) + return true; // Consider null parameters as equal + + //TODO: check fingerprints or checksums to improve the behavior + // Return false even if files are equal + return false; } @Override diff --git a/core/src/test/java/hudson/model/FileParameterValueTest.java b/core/src/test/java/hudson/model/FileParameterValueTest.java new file mode 100644 index 0000000000..cd03b68409 --- /dev/null +++ b/core/src/test/java/hudson/model/FileParameterValueTest.java @@ -0,0 +1,64 @@ +/* + * The MIT License + * + * Copyright 2014 Oleg Nenashev . + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package hudson.model; + +import java.io.File; +import org.junit.Assert; +import org.junit.Test; +import org.jvnet.hudson.test.Issue; + +/** + * Test for {@link FileParameterValue}. + * @author Oleg Nenashev + */ +public class FileParameterValueTest { + + @Issue("JENKINS-19017") + @Test public void compareParamsWithSameName() { + final String paramName = "MY_FILE_PARAM"; // Same paramName (location) reproduces the bug + final FileParameterValue param1 = new FileParameterValue(paramName, new File("ws_param1.txt"), "param1.txt"); + final FileParameterValue param2 = new FileParameterValue(paramName, new File("ws_param2.txt"), "param2.txt"); + + Assert.assertNotEquals("Files with same locations shoud be considered as different", param1, param2); + Assert.assertNotEquals("Files with same locations shoud be considered as different", param2, param1); + } + + @Test public void compareNullParams() { + final String paramName = "MY_FILE_PARAM"; + FileParameterValue nonNullParam = new FileParameterValue(paramName, new File("ws_param1.txt"), "param1.txt"); + FileParameterValue nullParam1 = new FileParameterValue(null, new File("null_param1.txt"), "null_param1.txt"); + FileParameterValue nullParam2 = new FileParameterValue(null, new File("null_param2.txt"), "null_param2.txt"); + + // Combine nulls + Assert.assertEquals(nullParam1, nullParam1); + Assert.assertEquals(nullParam1, nullParam2); + Assert.assertEquals(nullParam2, nullParam1); + Assert.assertEquals(nullParam2, nullParam2); + + // Compare with non-null + Assert.assertNotEquals(nullParam1, nonNullParam); + Assert.assertNotEquals(nonNullParam, nullParam1); + } +}