]> source.dussan.org Git - jgit.git/commitdiff
Blame: Suppress ReferenceEquality warning for RevCommit instances 85/143785/4
authorDavid Pursehouse <david.pursehouse@gmail.com>
Wed, 12 Jun 2019 04:02:07 +0000 (13:02 +0900)
committerDavid Pursehouse <david.pursehouse@gmail.com>
Sun, 16 Jun 2019 23:18:12 +0000 (08:18 +0900)
Reference comparison of the RevCommit objects is OK; BlameGenerator uses
a single RevWalk which caches the RevCommits, so if a given commit is
cached the RevWalk will always return the same instance.

Factor the comparison out to a method, and suppress the warning with an
explanatory comment.

Change-Id: I5a148001dba7749ac15119aed388adb12b6f51ad
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java

index 8794ca6cbe44f259bd53a0cdb6d8285b238f6337..e38cb468d942c3f74ab8121eda642f09b38479a3 100644 (file)
@@ -218,7 +218,8 @@ class Blame extends TextBuiltin {
                                        dateWidth = Math.max(dateWidth, date(line).length());
                                        pathWidth = Math.max(pathWidth, path(line).length());
                                }
-                               while (line + 1 < end && blame.getSourceCommit(line + 1) == c) {
+                               while (line + 1 < end
+                                               && sameCommit(blame.getSourceCommit(line + 1), c)) {
                                        line++;
                                }
                                maxSourceLine = Math.max(maxSourceLine, blame.getSourceLine(line));
@@ -257,13 +258,22 @@ class Blame extends TextBuiltin {
                                        blame.getResultContents().writeLine(outs, line);
                                        outs.flush();
                                        outw.print('\n');
-                               } while (++line < end && blame.getSourceCommit(line) == c);
+                               } while (++line < end
+                                               && sameCommit(blame.getSourceCommit(line), c));
                        }
                } catch (NoWorkTreeException | IOException e) {
                        throw die(e.getMessage(), e);
                }
        }
 
+       @SuppressWarnings("ReferenceEquality")
+       private static boolean sameCommit(RevCommit a, RevCommit b) {
+               // Reference comparison is intentional; BlameGenerator uses a single
+               // RevWalk which caches the RevCommit objects, and if a given commit
+               // is cached the RevWalk returns the same instance.
+               return a == b;
+       }
+
        private int uniqueAbbrevLen(ObjectReader reader, RevCommit commit)
                        throws IOException {
                return reader.abbreviate(commit, abbrev).length();