summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AnyLongObjectId.java4
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java3
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java4
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java4
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/References.java67
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java3
6 files changed, 80 insertions, 5 deletions
diff --git a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AnyLongObjectId.java b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AnyLongObjectId.java
index e6fe7408a8..0a509acb79 100644
--- a/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AnyLongObjectId.java
+++ b/org.eclipse.jgit.lfs/src/org/eclipse/jgit/lfs/lib/AnyLongObjectId.java
@@ -50,6 +50,7 @@ import java.nio.ByteBuffer;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.util.NB;
+import org.eclipse.jgit.util.References;
/**
* A (possibly mutable) SHA-256 abstraction.
@@ -76,8 +77,9 @@ public abstract class AnyLongObjectId implements Comparable<AnyLongObjectId> {
*/
public static boolean equals(final AnyLongObjectId firstObjectId,
final AnyLongObjectId secondObjectId) {
- if (firstObjectId == secondObjectId)
+ if (References.isSameObject(firstObjectId, secondObjectId)) {
return true;
+ }
// We test word 2 first as odds are someone already used our
// word 1 as a hash code, and applying that came up with these
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java
index 4252e41384..4f90e69008 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/AnyObjectId.java
@@ -49,6 +49,7 @@ import java.io.Writer;
import java.nio.ByteBuffer;
import org.eclipse.jgit.util.NB;
+import org.eclipse.jgit.util.References;
/**
* A (possibly mutable) SHA-1 abstraction.
@@ -88,7 +89,7 @@ public abstract class AnyObjectId implements Comparable<AnyObjectId> {
*/
public static boolean isEqual(final AnyObjectId firstObjectId,
final AnyObjectId secondObjectId) {
- if (firstObjectId == secondObjectId) {
+ if (References.isSameObject(firstObjectId, secondObjectId)) {
return true;
}
// We test word 3 first since the git file-based ODB
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java
index afd3adaacc..16c6faf277 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/RefSpec.java
@@ -49,6 +49,7 @@ import java.text.MessageFormat;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.util.References;
/**
* Describes how refs in one repository copy into another repository.
@@ -585,8 +586,9 @@ public class RefSpec implements Serializable {
}
private static boolean eq(String a, String b) {
- if (a == b)
+ if (References.isSameObject(a, b)) {
return true;
+ }
if (a == null || b == null)
return false;
return a.equals(b);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java
index 34730d395c..7ca9cc134c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/URIish.java
@@ -62,6 +62,7 @@ import java.util.regex.Pattern;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.util.RawParseUtils;
+import org.eclipse.jgit.util.References;
import org.eclipse.jgit.util.StringUtils;
/**
@@ -624,8 +625,9 @@ public class URIish implements Serializable {
}
private static boolean eq(String a, String b) {
- if (a == b)
+ if (References.isSameObject(a, b)) {
return true;
+ }
if (StringUtils.isEmptyOrNull(a) && StringUtils.isEmptyOrNull(b))
return true;
if (a == null || b == null)
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/References.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/References.java
new file mode 100644
index 0000000000..341fbfa943
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/References.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2019, Matthias Sohn <matthias.sohn@sap.com>
+ * and other copyright owners as documented in the project's IP log.
+ *
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Distribution License v1.0 which
+ * accompanies this distribution, is reproduced below, and is
+ * available at http://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * - Neither the name of the Eclipse Foundation, Inc. nor the
+ * names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.eclipse.jgit.util;
+
+/**
+ * Utility methods for object references
+ *
+ * @since 5.4
+ */
+public interface References {
+
+ /**
+ * Compare two references
+ *
+ * @param <T>
+ * type of the references
+ * @param ref1
+ * first reference
+ * @param ref2
+ * second reference
+ * @return {@code true} if both references refer to the same object
+ */
+ @SuppressWarnings("ReferenceEquality")
+ public static <T> boolean isSameObject(T ref1, T ref2) {
+ return ref1 == ref2;
+ }
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
index 3868e56f50..f4b6f9d0df 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
@@ -139,8 +139,9 @@ public final class StringUtils {
* @return true if a equals b
*/
public static boolean equalsIgnoreCase(String a, String b) {
- if (a == b)
+ if (References.isSameObject(a, b)) {
return true;
+ }
if (a.length() != b.length())
return false;
for (int i = 0; i < a.length(); i++) {