mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-81922 Subversion: Compare with latest: confusing inverted diff for Local and HEAD
This commit is contained in:
@@ -87,6 +87,7 @@ message.text.binary.versions.are.identical=Binary versions are identical
|
||||
message.title.diff=Diff
|
||||
message.text.binary.versions.are.different=Binary versions are different
|
||||
diff.title.local=Local
|
||||
diff.title.local.with.number=Local ({0})
|
||||
message.title.annotate=Annotate
|
||||
action.name.checkin.directory={0} Directory
|
||||
action.name.checkin.file={0} File
|
||||
|
||||
@@ -26,10 +26,7 @@ import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.vcs.AbstractVcsHelper;
|
||||
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
|
||||
import com.intellij.openapi.vcs.VcsBundle;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.*;
|
||||
import com.intellij.openapi.vcs.changes.BackgroundFromStartOption;
|
||||
import com.intellij.openapi.vcs.changes.BinaryContentRevision;
|
||||
import com.intellij.openapi.vcs.changes.ContentRevision;
|
||||
@@ -118,13 +115,20 @@ public abstract class DiffActionExecutor {
|
||||
if (document == null) return;
|
||||
final DocumentContent content2 = new DocumentContent(myProject, document);
|
||||
|
||||
final VcsRevisionNumber currentRevision = myDiffProvider.getCurrentRevision(mySelectedFile);
|
||||
final FileStatus status = FileStatusManager.getInstance(myProject).getStatus(mySelectedFile);
|
||||
if (status == null || FileStatus.NOT_CHANGED.equals(status) || FileStatus.UNKNOWN.equals(status) ||
|
||||
FileStatus.IGNORED.equals(status)) {
|
||||
|
||||
if (revisionNumber.compareTo(currentRevision) > 0) {
|
||||
request.setContents(content2, remote);
|
||||
request.setContentTitles(VcsBundle.message("diff.title.local"), revisionNumber.asString());
|
||||
}
|
||||
else {
|
||||
final VcsRevisionNumber currentRevision = myDiffProvider.getCurrentRevision(mySelectedFile);
|
||||
if (revisionNumber.compareTo(currentRevision) > 0) {
|
||||
request.setContents(content2, remote);
|
||||
request.setContentTitles(VcsBundle.message("diff.title.local.with.number", currentRevision.asString()), revisionNumber.asString());
|
||||
}
|
||||
else {
|
||||
request.setContents(remote, content2);
|
||||
request.setContentTitles(revisionNumber.asString(), VcsBundle.message("diff.title.local.with.number", currentRevision.asString()));
|
||||
}
|
||||
} else {
|
||||
request.setContents(remote, content2);
|
||||
request.setContentTitles(revisionNumber.asString(), VcsBundle.message("diff.title.local"));
|
||||
}
|
||||
|
||||
@@ -160,11 +160,15 @@ public class SvnDiffProvider implements DiffProvider, DiffMixin {
|
||||
private ItemLatestState getLastRevision(final File file) {
|
||||
final SVNStatusClient client = myVcs.createStatusClient();
|
||||
try {
|
||||
final SVNStatus svnStatus = client.doStatus(file, true, false);
|
||||
final SVNStatus svnStatus = client.doStatus(file, true);
|
||||
if (svnStatus == null) {
|
||||
// IDEADEV-21785 (no idea why this can happen)
|
||||
LOG.info("No SVN status returned for " + file.getPath());
|
||||
return defaultResult();
|
||||
final SVNInfo info = myVcs.createWCClient().doInfo(file, SVNRevision.HEAD);
|
||||
if (info == null || info.getURL() == null) {
|
||||
LOG.info("No SVN status returned for " + file.getPath());
|
||||
return defaultResult();
|
||||
}
|
||||
return createResult(info.getRevision(), true, false);
|
||||
}
|
||||
final boolean exists = ! SVNStatusType.STATUS_DELETED.equals(svnStatus.getRemoteContentsStatus()) &&
|
||||
! SVNStatusType.STATUS_DELETED.equals(svnStatus.getRemoteNodeStatus());
|
||||
|
||||
Reference in New Issue
Block a user