From 3f25e0370f0d1da4a9153a4fadc1d73fd619084b Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 3 Oct 2017 19:20:44 +0300 Subject: [PATCH] vcs: fix diff in log not working for non-merge commits follow-up: 7aae50e44d3861b926b1c6089891bce8cee0b0a3 --- .../log/ui/frame/VcsLogChangesBrowser.java | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogChangesBrowser.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogChangesBrowser.java index 853ef7bee22a..cfad3271e460 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogChangesBrowser.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogChangesBrowser.java @@ -68,6 +68,7 @@ class VcsLogChangesBrowser extends ChangesBrowserBase implements Disposable { @NotNull private final VcsLogUiProperties.PropertiesChangeListener myListener; + @Nullable private VcsFullCommitDetails myDetail; @Nullable private VirtualFile myRoot; @NotNull private final List myChanges = ContainerUtil.newArrayList(); @NotNull private final Map> myChangesToParents = ContainerUtil.newHashMap(); @@ -114,6 +115,7 @@ class VcsLogChangesBrowser extends ChangesBrowserBase implements Disposable { } public void resetSelectedDetails() { + myDetail = null; myRoot = null; myChanges.clear(); myChangesToParents.clear(); @@ -122,6 +124,7 @@ class VcsLogChangesBrowser extends ChangesBrowserBase implements Disposable { } public void setSelectedDetails(@NotNull List detailsList) { + myDetail = null; myRoot = null; myChanges.clear(); myChangesToParents.clear(); @@ -130,18 +133,18 @@ class VcsLogChangesBrowser extends ChangesBrowserBase implements Disposable { myViewer.setEmptyText("No commits selected"); } else if (detailsList.size() == 1) { - VcsFullCommitDetails details = notNull(getFirstItem(detailsList)); - myRoot = details.getRoot(); - myChanges.addAll(details.getChanges()); + myDetail = notNull(getFirstItem(detailsList)); + myRoot = myDetail.getRoot(); + myChanges.addAll(myDetail.getChanges()); - if (details.getParents().size() > 1) { - for (int i = 0; i < details.getParents().size(); i++) { - THashSet changesSet = ContainerUtil.newIdentityTroveSet(details.getChanges(i)); - myChangesToParents.put(details.getParents().get(i), changesSet); + if (myDetail.getParents().size() > 1) { + for (int i = 0; i < myDetail.getParents().size(); i++) { + THashSet changesSet = ContainerUtil.newIdentityTroveSet(myDetail.getChanges(i)); + myChangesToParents.put(myDetail.getParents().get(i), changesSet); } } - if (myChanges.isEmpty() && details.getParents().size() > 1) { + if (myChanges.isEmpty() && myDetail.getParents().size() > 1) { myViewer.getEmptyText().setText("No merged conflicts."). appendSecondaryText("Show changes to parents", getLinkAttributes(), e -> myUiProperties.set(SHOW_CHANGES_FROM_PARENTS, true)); @@ -231,18 +234,23 @@ class VcsLogChangesBrowser extends ChangesBrowserBase implements Disposable { if (userObject instanceof Change) { Change change = (Change)userObject; - Hash parentHash = null; - for (Hash hash : myChangesToParents.keySet()) { - if (myChangesToParents.get(hash).contains(change)) { - parentHash = hash; - break; + if (myDetail != null && myDetail.getParents().size() > 1) { + Hash parentHash = null; + for (Hash hash : myChangesToParents.keySet()) { + if (myChangesToParents.get(hash).contains(change)) { + parentHash = hash; + break; + } + } + + if (parentHash != null && myRoot != null) { + RootTag tag = new RootTag(parentHash, getText(parentHash, myRoot)); + Map context = Collections.singletonMap(ChangeDiffRequestProducer.TAG_KEY, tag); + return ChangeDiffRequestProducer.create(myProject, change, context); } } - - if (parentHash != null && myRoot != null) { - RootTag tag = new RootTag(parentHash, getText(parentHash, myRoot)); - Map context = Collections.singletonMap(ChangeDiffRequestProducer.TAG_KEY, tag); - return ChangeDiffRequestProducer.create(myProject, change, context); + else { + return ChangeDiffRequestProducer.create(myProject, change); } } return null;