svn: i18n - annotate, branches

GitOrigin-RevId: c5d802921551116c14824b6560ec551948ba64c6
This commit is contained in:
Konstantin Kolosovsky
2020-08-30 20:16:26 +00:00
committed by intellij-monorepo-bot
parent 71b12899d6
commit c9d8376f7c
12 changed files with 114 additions and 72 deletions
@@ -97,6 +97,21 @@ radio.copy.to.branch.or.tag=Branch or Tag
radio.copy.to.any.location=Any Location
label.copy.comment=&Comment
label.copy.select.location.dialog.copy.as=Copy &as:
notification.content.branches.load.error=Branches load error: {0}
progress.title.checking.target.folder=Checking target folder
dialog.message.repository.path.does.not.exist=The repository path ''{0}'' does not exist. Would you like to create it?
dialog.title.select.working.copy.location=Select Working Copy Location
label.select.location.to.copy.from=Select location to copy from:
dialog.message.branch.name.is.empty=Branch name is empty
dialog.message.invalid.branch.name=Invalid branch name
dialog.message.invalid.branch.url=Invalid branch url
dialog.message.no.branch.base.location.selected=No branch base location selected
dialog.message.invalid.revision=Invalid revision
dialog.message.invalid.repository.location=Invalid repository location
checkbox.switch.to.newly.created.branch.or.tag=Switch {0} to the newly created branch or tag
error.can.not.find.url.for.file=Can not find url for file: {0}
error.can.not.find.working.copy.for.file=Can not find working copy for file: {0}
progress.title.svn.branches.preloader=Subversion branches preloader
#Relocate dialog
dialog.title.relocate.working.copy=Relocate Working Copy
@@ -402,7 +417,7 @@ progress.text2.deleting=Deleting ''{0}''
progress.text2.sending=Sending ''{0}''
progress.text2.replacing=Replacing ''{0}''
progress.text2.transmitting.delta=Transmitting delta for ''{0}''
progress.title.copy=Subversion Copy
progress.title.copy=Subversion copy
status.text.comitted.revision=Committed revision {0}.
progress.text.copy.to=Copy to ''{0}''
message.text.no.conflicts.found=No conflicts found
@@ -429,6 +444,13 @@ message.title.error.fetching.affected.paths=Error Fetching Affected Paths
exception.text.cannot.annotate.directory=Annotation operation only makes sence for files
progress.text.computing.annotation=Computing annotation for ''{0}''
action.text.annotate=Annotate
label.revision=Revision
label.merge.source.revision=Merge source revision
tooltip.revision.number.message=Revision {0}: {1}
error.can.not.find.relative.path.for.path.at.revision=Can not find relative path for {0}@{1}
error.can.not.get.current.revision.for.path=Can not get current revision for file {0}
error.can.not.get.last.changed.revision.for.path.please.file.an.issue=Can not get last changed revision for file: {0}\n\
Please run svn info for this file and file an issue.
checkbox.checkin.keep.files.locked=&Keep files locked
checkbox.checkin.auto.update.after.commit=Auto-update after commit
progress.title.commit=Commit
@@ -571,7 +593,7 @@ configure.branches.item=Configure Branches...
refresh.branches.item=Refresh Branches...
copy.column.title=Copy
copy.column.tooltip=Copied from {0}
compare.with.branch.progress.loading.branches=Loading Branches
progress.title.loading.branches=Loading branches
compare.with.branch.progress.loading.content=Loading Content
compare.with.branch.diff.title=Compare with Branch
compare.with.branch.error.title=Compare with Branch
@@ -579,8 +601,6 @@ compare.with.branch.popup.title=Compare with Branch
getting.branch.configuration.error=Error retrieving branch configuration: {0}
compare.with.branch.location.error=Couldn''t find repository location for file ''{0}'' under branch ''{1}''\nPlease check your branch configuration.
compare.with.branch.list.error=Error Loading Branches
create.branch.invalid.revision.error=Invalid revision
create.branch.no.base.location.error=No branch base location selected
action.name.switch=Switch
import.dialog.title=Import into Subversion
import.dialog.button=Import
@@ -655,7 +675,7 @@ action.Subversion.integrate.changes.messages.title=Integrate To branch
dialog.message.integrate.changes.error.no.available.files=No files available for integration
action.Subversion.integrate.changes.warning.failed.list.text=Changelist {0} ({1}) integration faced problems
action.Subversion.integrate.changes.warning.skipped.lists.text=Skipped changelists: {0}
action.Subversion.integrate.changes.select.branch.text=Select branch to integrate to...
popup.title.select.branch.to.integrate.to=Select Branch to Integrate to...
dialog.message.integrate.changes.error.same.source.and.target=Can not start integration: Target and source branches are the same.
dialog.message.integrate.changes.error.target.not.dir=Can not start integration: target directory does not exist or is not a directory.
dialog.message.integrate.changes.error.not.versioned=Can not start integration: target directory is not under Subversion control or does not belong to the selected branch.
@@ -670,7 +690,7 @@ action.Subversion.integrate.changes.message.canceled.text=Integration was cancel
action.Subversion.integrate.changes.progress.integrating.text=Merging changes
action.Subversion.integrate.changes.progress.integrating.details.text=Merging changelist {0}
update.switch.to.branch.text=Use branch:
select.branch.popup.general.title=Select branch
popup.title.select.branch=Select Branch
progress.live.provider.loading.revisions.text=Loading revisions from server
progress.live.provider.loading.revisions.details.text=Loading revisions from server...
dialog.show.svn.map.title=Subversion Working Copies Information
@@ -91,7 +91,7 @@ public abstract class AbstractIntegrateChangesAction<T extends SelectedCommitted
Url selectedBranchUrl = getSelectedBranchUrl(checker);
if (selectedBranchUrl == null) {
SelectBranchPopup.showForBranchRoot(project, checker.getRoot(), changesActionPerformer,
message("action.Subversion.integrate.changes.select.branch.text"));
message("popup.title.select.branch.to.integrate.to"));
} else {
changesActionPerformer.onBranchSelected(selectedBranchUrl, getSelectedBranchLocalPath(checker), getDialogTitle());
}
@@ -7,8 +7,6 @@ import com.intellij.openapi.vcs.VcsKey;
import com.intellij.openapi.vcs.annotate.*;
import com.intellij.openapi.vcs.history.VcsFileRevision;
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
import com.intellij.xml.util.XmlStringUtil;
import git4idea.annotate.AnnotationTooltipBuilder;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
@@ -28,6 +26,9 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static com.intellij.xml.util.XmlStringUtil.escapeString;
import static git4idea.annotate.AnnotationTooltipBuilder.buildSimpleTooltip;
public abstract class BaseSvnFileAnnotation extends FileAnnotation {
private final String myContents;
protected final VcsRevisionNumber myBaseRevision;
@@ -74,9 +75,9 @@ public abstract class BaseSvnFileAnnotation extends FileAnnotation {
if (info == null) return null;
SvnFileRevision revision = myRevisionMap.get(info.getRevisionNumber());
return revision != null
? XmlStringUtil.escapeString("Revision " + info.getRevisionNumber() + ": " + revision.getCommitMessage())
: "";
if (revision == null) return "";
return escapeString(SvnBundle.message("tooltip.revision.number.message", info.getRevisionNumber(), revision.getCommitMessage()));
}
};
@@ -137,18 +138,17 @@ public abstract class BaseSvnFileAnnotation extends FileAnnotation {
return getToolTip(lineNumber, true);
}
@Nullable
private String getToolTip(int lineNumber, boolean asHtml) {
private @NlsContexts.Tooltip @Nullable String getToolTip(int lineNumber, boolean asHtml) {
final CommitInfo info = myInfos.getOrNull(lineNumber);
if (info == null) return null;
SvnFileRevision revision = myRevisionMap.get(info.getRevisionNumber());
if (revision == null) return null;
String prefix = myInfos.getAnnotationSource(lineNumber).showMerged() ? "Merge source revision" : "Revision";
return AnnotationTooltipBuilder.buildSimpleTooltip(getProject(), asHtml, prefix,
String.valueOf(info.getRevisionNumber()),
revision.getCommitMessage());
String prefix = myInfos.getAnnotationSource(lineNumber).showMerged()
? SvnBundle.message("label.merge.source.revision")
: SvnBundle.message("label.revision");
return buildSimpleTooltip(getProject(), asHtml, prefix, String.valueOf(info.getRevisionNumber()), revision.getCommitMessage());
}
@Override
@@ -19,7 +19,6 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.vcsUtil.VcsUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.svn.SvnBundle;
import org.jetbrains.idea.svn.SvnDiffProvider;
import org.jetbrains.idea.svn.SvnRevisionNumber;
import org.jetbrains.idea.svn.SvnVcs;
@@ -44,6 +43,7 @@ import java.util.Map;
import static com.intellij.openapi.fileEditor.impl.LoadTextUtil.getTextByBinaryPresentation;
import static com.intellij.openapi.vfs.VfsUtilCore.virtualToIoFile;
import static org.jetbrains.idea.svn.SvnBundle.message;
import static org.jetbrains.idea.svn.SvnUtil.*;
public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAnnotationProvider {
@@ -61,16 +61,14 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn
SvnRevisionNumber currentRevision = ((SvnRevisionNumber)provider.getCurrentRevision(file));
VcsRevisionDescription lastChangedRevision = provider.getCurrentRevisionDescription(file);
if (lastChangedRevision == null) {
throw new VcsException("Can not get current revision for file " + file.getPath());
throw new VcsException(message("error.can.not.get.current.revision.for.path", file.getPath()));
}
final Revision revision = ((SvnRevisionNumber)lastChangedRevision.getRevisionNumber()).getRevision();
if (!revision.isValid()) {
throw new VcsException(
"Can not get last changed revision for file: " + file.getPath() + "\nPlease run svn info for this file and file an issue.");
throw new VcsException(message("error.can.not.get.last.changed.revision.for.path.please.file.an.issue", file.getPath()));
}
return annotate(file, currentRevision, lastChangedRevision.getRevisionNumber(), () -> {
byte[] data =
getFileContents(myVcs, Target.on(virtualToIoFile(file).getAbsoluteFile()), Revision.BASE, Revision.UNDEFINED);
byte[] data = getFileContents(myVcs, Target.on(virtualToIoFile(file).getAbsoluteFile()), Revision.BASE, Revision.UNDEFINED);
return getTextByBinaryPresentation(data, file, false, false).toString();
});
}
@@ -90,7 +88,7 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn
@NotNull VcsRevisionNumber lastChangedRevision,
@NotNull Throwable2Computable<String, VcsException, IOException> contentLoader) throws VcsException {
if (file.isDirectory()) {
throw new VcsException(SvnBundle.message("exception.text.cannot.annotate.directory"));
throw new VcsException(message("exception.text.cannot.annotate.directory"));
}
final FileAnnotation[] annotation = new FileAnnotation[1];
final VcsException[] exception = new VcsException[1];
@@ -115,7 +113,7 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn
endRevision = info.getRevision();
}
if (progress != null) {
progress.setText(SvnBundle.message("progress.text.computing.annotation", file.getName()));
progress.setText(message("progress.text.computing.annotation", file.getName()));
}
// ignore mime type=true : IDEA-19562
@@ -154,7 +152,7 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn
};
if (ApplicationManager.getApplication().isDispatchThread()) {
ProgressManager.getInstance()
.runProcessWithProgressSynchronously(command, SvnBundle.message("action.text.annotate"), false, myVcs.getProject());
.runProcessWithProgressSynchronously(command, message("action.text.annotate"), false, myVcs.getProject());
}
else {
command.run();
@@ -230,17 +228,20 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn
final File root = getCommonAncestor(wasFile, info.getFile());
if (root == null) {
throw new VcsException("Can not find relative path for " + wasFile.getPath() + "@" + revisionNumber.asString());
throw new VcsException(
message("error.can.not.find.relative.path.for.path.at.revision", wasFile.getPath(), revisionNumber.asString()));
}
final String relativePath = FileUtil.getRelativePath(root.getPath(), wasFile.getPath(), File.separatorChar);
if (relativePath == null) {
throw new VcsException("Can not find relative path for " + wasFile.getPath() + "@" + revisionNumber.asString());
throw new VcsException(
message("error.can.not.find.relative.path.for.path.at.revision", wasFile.getPath(), revisionNumber.asString()));
}
Info wcRootInfo = myVcs.getInfo(root);
if (wcRootInfo == null || wcRootInfo.getUrl() == null) {
throw new VcsException("Can not find relative path for " + wasFile.getPath() + "@" + revisionNumber.asString());
throw new VcsException(
message("error.can.not.find.relative.path.for.path.at.revision", wasFile.getPath(), revisionNumber.asString()));
}
Url wasUrl = wcRootInfo.getUrl();
final String[] strings = relativePath.replace('\\', '/').split("/");
@@ -437,7 +438,7 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn
if (myProgress != null) {
myProgress.checkCanceled();
myProgress.setText2(SvnBundle.message("progress.text2.revision.processed", logEntry.getRevision()));
myProgress.setText2(message("progress.text2.revision.processed", logEntry.getRevision()));
}
myResult.setRevision(logEntry.getRevision(), new SvnFileRevision(myVcs, Revision.UNDEFINED, logEntry, myUrl, ""));
});
@@ -20,6 +20,7 @@ class Url private constructor(innerUri: URI) {
val userInfo: String? = uri.userInfo
val path: String = uri.path.orEmpty().removeSuffix("/")
@get:NlsSafe
val tail: String get() = path.substringAfterLast('/')
fun commonAncestorWith(url: Url): Url? {
@@ -1,10 +1,9 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.idea.svn.branchConfig;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.svn.SvnVcs;
@@ -19,6 +18,9 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import static com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier.showOverChangesView;
import static org.jetbrains.idea.svn.SvnBundle.message;
public class BranchesLoader implements Runnable {
@NotNull private final Project myProject;
@NotNull private final NewRootBunch myBunch;
@@ -68,7 +70,7 @@ public class BranchesLoader implements Runnable {
private void showError(Exception e) {
// already logged inside
if (InfoReliability.setByUser.equals(myInfoReliability)) {
VcsBalloonProblemNotifier.showOverChangesView(myProject, "Branches load error: " + e.getMessage(), MessageType.ERROR);
showOverChangesView(myProject, message("notification.content.branches.load.error", e.getMessage()), MessageType.ERROR);
}
}
@@ -15,7 +15,6 @@ import com.intellij.openapi.wm.StatusBar;
import com.intellij.openapi.wm.WindowManager;
import com.intellij.vcsUtil.VcsUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.svn.SvnBundle;
import org.jetbrains.idea.svn.SvnStatusUtil;
import org.jetbrains.idea.svn.SvnVcs;
import org.jetbrains.idea.svn.actions.BasicAction;
@@ -33,14 +32,17 @@ import java.io.File;
import java.util.Objects;
import static com.intellij.openapi.application.ApplicationManager.getApplication;
import static com.intellij.openapi.ui.Messages.getQuestionIcon;
import static com.intellij.openapi.ui.Messages.showYesNoDialog;
import static com.intellij.openapi.vfs.VfsUtilCore.virtualToIoFile;
import static org.jetbrains.idea.svn.SvnBundle.message;
import static org.jetbrains.idea.svn.SvnUtil.removePathTail;
public class CreateBranchOrTagAction extends BasicAction {
@NotNull
@Override
protected String getActionName() {
return SvnBundle.message("action.Subversion.Copy.text");
return message("action.Subversion.Copy.text");
}
@Override
@@ -60,9 +62,12 @@ public class CreateBranchOrTagAction extends BasicAction {
Url parentUrl = removePathTail(destination);
if (!dirExists(vcs, parentUrl)) {
int rc =
Messages.showYesNoDialog(vcs.getProject(), "The repository path '" + parentUrl + "' does not exist. Would you like to create it?",
"Branch or Tag", Messages.getQuestionIcon());
int rc = showYesNoDialog(
vcs.getProject(),
message("dialog.message.repository.path.does.not.exist", parentUrl),
message("copy.dialog.title"),
getQuestionIcon()
);
if (rc == Messages.NO) {
return;
}
@@ -74,7 +79,7 @@ public class CreateBranchOrTagAction extends BasicAction {
ProgressIndicator progress = ProgressManager.getInstance().getProgressIndicator();
CommitEventHandler handler = null;
if (progress != null) {
progress.setText(SvnBundle.message("progress.text.copy.to", destination.toDecodedString()));
progress.setText(message("progress.text.copy.to", destination.toDecodedString()));
handler = new IdeaCommitHandler(progress);
}
@@ -88,7 +93,7 @@ public class CreateBranchOrTagAction extends BasicAction {
}
};
ProgressManager.getInstance()
.runProcessWithProgressSynchronously(copyCommand, SvnBundle.message("progress.title.copy"), false, vcs.getProject());
.runProcessWithProgressSynchronously(copyCommand, message("progress.title.copy"), false, vcs.getProject());
if (!exception.isNull()) {
throw new VcsException(exception.get());
}
@@ -96,7 +101,7 @@ public class CreateBranchOrTagAction extends BasicAction {
if (dialog.isSwitchOnCreate()) {
SingleRootSwitcher switcher =
new SingleRootSwitcher(vcs.getProject(), VcsUtil.getFilePath(sourceFile, sourceFile.isDirectory()), destination);
AutoSvnUpdater.run(switcher, SvnBundle.message("action.name.switch"));
AutoSvnUpdater.run(switcher, message("action.name.switch"));
}
}
}
@@ -106,7 +111,7 @@ public class CreateBranchOrTagAction extends BasicAction {
StatusBar statusBar = WindowManager.getInstance().getStatusBar(project);
if (statusBar != null) {
statusBar.setInfo(SvnBundle.message("status.text.comitted.revision", revision));
statusBar.setInfo(message("status.text.comitted.revision", revision));
}
}
}
@@ -129,7 +134,12 @@ public class CreateBranchOrTagAction extends BasicAction {
};
if (getApplication().isDispatchThread()) {
ProgressManager.getInstance().runProcessWithProgressSynchronously(taskImpl, "Checking target folder", true, vcs.getProject());
ProgressManager.getInstance().runProcessWithProgressSynchronously(
taskImpl,
message("progress.title.checking.target.folder"),
true,
vcs.getProject()
);
}
else {
taskImpl.run();
@@ -91,12 +91,16 @@ public class CreateBranchOrTagDialog extends DialogWrapper {
Info info = myVcs.getInfo(file);
if (info == null || info.getUrl() == null) {
throw new VcsException("Can not find url for file: " + file.getPath());
throw new VcsException(message("error.can.not.find.url.for.file", file.getPath()));
}
mySrcURL = info.getUrl();
myWorkingCopyField.addBrowseFolderListener("Select Working Copy Location", "Select Location to Copy From:",
myProject, FileChooserDescriptorFactory.createSingleFolderDescriptor());
myWorkingCopyField.addBrowseFolderListener(
message("dialog.title.select.working.copy.location"),
message("label.select.location.to.copy.from"),
myProject,
FileChooserDescriptorFactory.createSingleFolderDescriptor()
);
myWorkingCopyField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() {
@Override
protected void textChanged(@NotNull final DocumentEvent e) {
@@ -133,7 +137,7 @@ public class CreateBranchOrTagDialog extends DialogWrapper {
RootUrlInfo root = myVcs.getSvnFileUrlMapping().getWcRootForFilePath(getFilePath(file));
if (root == null) {
throw new VcsException("Can not find working copy for file: " + file.getPath());
throw new VcsException(message("error.can.not.find.working.copy.for.file", file.getPath()));
}
mySrcVirtualFile = root.getVirtualFile();
myWcRootUrl = root.getUrl();
@@ -203,7 +207,7 @@ public class CreateBranchOrTagDialog extends DialogWrapper {
}
private void updateSwitchOnCreate() {
mySwitchOnCreate.setText("Switch " + getSourceFile() + " to the newly created branch or tag");
mySwitchOnCreate.setText(message("checkbox.switch.to.newly.created.branch.or.tag", getSourceFile()));
}
private void updateControls() {
@@ -296,12 +300,12 @@ public class CreateBranchOrTagDialog extends DialogWrapper {
if (myRepositoryRadioButton.isSelected()) {
Url url = getRepositoryFieldUrl();
if (url == null) {
return new ValidationInfo("Invalid repository location", myRepositoryField.getTextField());
return new ValidationInfo(message("dialog.message.invalid.repository.location"), myRepositoryField.getTextField());
}
Revision revision = getRevision();
if (!revision.isValid() || revision.isLocal()) {
return new ValidationInfo(message("create.branch.invalid.revision.error"), myRevisionPanel.getRevisionTextField());
return new ValidationInfo(message("dialog.message.invalid.revision"), myRevisionPanel.getRevisionTextField());
}
mySource = Target.on(url, revision);
@@ -318,18 +322,18 @@ public class CreateBranchOrTagDialog extends DialogWrapper {
if (myBranchOrTagRadioButton.isSelected()) {
Url branchLocation = myBranchTagBaseModel.getSelected();
if (branchLocation == null) {
return new ValidationInfo(message("create.branch.no.base.location.error"), myBranchTagBaseComboBox.getComboBox());
return new ValidationInfo(message("dialog.message.no.branch.base.location.selected"), myBranchTagBaseComboBox.getComboBox());
}
if (isEmptyOrSpaces(myBranchTextField.getText())) {
return new ValidationInfo("Branch name is empty", myBranchTextField);
return new ValidationInfo(message("dialog.message.branch.name.is.empty"), myBranchTextField);
}
try {
myDestination = branchLocation.appendPath(myBranchTextField.getText(), false);
}
catch (SvnBindException e) {
return new ValidationInfo("Invalid branch name", myBranchTextField);
return new ValidationInfo(message("dialog.message.invalid.branch.name"), myBranchTextField);
}
}
else {
@@ -337,7 +341,7 @@ public class CreateBranchOrTagDialog extends DialogWrapper {
myDestination = createUrl(myToURLText.getText(), false);
}
catch (SvnBindException e) {
return new ValidationInfo("Invalid branch url", myToURLText.getTextField());
return new ValidationInfo(message("dialog.message.invalid.branch.url"), myToURLText.getTextField());
}
}
@@ -9,6 +9,8 @@ import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListSeparator;
import com.intellij.openapi.ui.popup.PopupStep;
import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
import com.intellij.openapi.util.NlsContexts.PopupTitle;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.text.DateFormatUtil;
import com.intellij.util.ui.JBUI;
@@ -30,6 +32,8 @@ import static com.intellij.openapi.vfs.VfsUtilCore.virtualToIoFile;
import static com.intellij.util.containers.ContainerUtil.addIfNotNull;
public final class SelectBranchPopup {
private static final @NlsSafe @NotNull String TRUNK_NAME = "trunk";
private SelectBranchPopup() {
}
@@ -40,14 +44,14 @@ public final class SelectBranchPopup {
public static void show(@NotNull Project project,
@NotNull VirtualFile file,
@NotNull BranchSelectedCallback callback,
@Nullable String title) {
@PopupTitle @Nullable String title) {
show(project, file, callback, title, null);
}
public static void show(@NotNull Project project,
@NotNull VirtualFile file,
@NotNull BranchSelectedCallback callback,
@Nullable String title,
@PopupTitle @Nullable String title,
@Nullable Component component) {
SvnFileUrlMapping urlMapping = SvnVcs.getInstance(project).getSvnFileUrlMapping();
Url svnurl = urlMapping.getUrlForFile(virtualToIoFile(file));
@@ -65,14 +69,14 @@ public final class SelectBranchPopup {
public static void showForBranchRoot(@NotNull Project project,
@NotNull VirtualFile vcsRoot,
@NotNull BranchSelectedCallback callback,
@Nullable String title) {
@PopupTitle @Nullable String title) {
showForBranchRoot(project, vcsRoot, callback, title, null);
}
public static void showForBranchRoot(@NotNull Project project,
@NotNull VirtualFile vcsRoot,
@NotNull BranchSelectedCallback callback,
@Nullable String title,
@PopupTitle @Nullable String title,
@Nullable Component component) {
SvnBranchConfigurationNew configuration = SvnBranchConfigurationManager.getInstance(project).get(vcsRoot);
List<Object> items = new ArrayList<>();
@@ -85,8 +89,7 @@ public final class SelectBranchPopup {
step.showPopupAt(JBPopupFactory.getInstance().createListPopup(step));
}
@NotNull
private static String getBranchName(@NotNull SvnBranchItem branch) {
private static @NlsSafe @NotNull String getBranchName(@NotNull SvnBranchItem branch) {
return branch.getUrl().getTail();
}
@@ -98,12 +101,12 @@ public final class SelectBranchPopup {
@Nullable private final Component myComponent;
BranchBasesPopupStep(@NotNull Project project,
@NotNull VirtualFile vcsRoot,
@NotNull SvnBranchConfigurationNew configuration,
@NotNull BranchSelectedCallback callback,
@NotNull List<Object> items,
@Nullable String title,
@Nullable Component component) {
@NotNull VirtualFile vcsRoot,
@NotNull SvnBranchConfigurationNew configuration,
@NotNull BranchSelectedCallback callback,
@NotNull List<Object> items,
@PopupTitle @Nullable String title,
@Nullable Component component) {
myProject = project;
myVcsRoot = vcsRoot;
myConfiguration = configuration;
@@ -122,7 +125,7 @@ public final class SelectBranchPopup {
public String getTextFor(@NotNull Object value) {
if (value instanceof Url) {
Url url = (Url)value;
String suffix = url.equals(myConfiguration.getTrunk()) ? " (trunk)" : "...";
String suffix = url.equals(myConfiguration.getTrunk()) ? " (" + TRUNK_NAME + ")" : "...";
return url.getTail() + suffix;
}
@@ -145,7 +148,7 @@ public final class SelectBranchPopup {
}
private void loadBranches(@NotNull Url branchLocation, @NotNull Runnable runnable) {
new Task.Backgroundable(myProject, SvnBundle.message("compare.with.branch.progress.loading.branches"), true) {
new Task.Backgroundable(myProject, SvnBundle.message("progress.title.loading.branches"), true) {
@Override
public void onFinished() {
runnable.run();
@@ -16,6 +16,7 @@ import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtilCore.virtualToIoFile
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.vcs.ProgressManagerQueue
import org.jetbrains.idea.svn.SvnBundle.message
import org.jetbrains.idea.svn.SvnUtil.createUrl
import org.jetbrains.idea.svn.SvnVcs
import org.jetbrains.idea.svn.api.Url
@@ -26,7 +27,7 @@ private val LOG = logger<SvnBranchConfigurationManager>()
@State(name = "SvnBranchConfigurationManager")
internal class SvnBranchConfigurationManager(private val project: Project) : PersistentStateComponent<SvnBranchConfigurationManager.ConfigurationBean> {
private val branchesLoader = ProgressManagerQueue(project, "Subversion Branches Preloader")
private val branchesLoader = ProgressManagerQueue(project, message("progress.title.svn.branches.preloader"))
val svnBranchConfigManager: NewRootBunch = NewRootBunch(project, branchesLoader)
private var isInitialized = false
@@ -87,7 +87,7 @@ public class SvnMergeInfoRootPanelManual {
refreshSelectedBranch(new WCInfoWithBranches.Branch(url));
calculateBranchPathByBranch(mySelectedBranch.getUrl(), null);
myListener.run();
}, message("select.branch.popup.general.title"));
}, message("popup.title.select.branch"));
}
});
@@ -142,7 +142,7 @@ public class SvnUpdateRootOptionsPanel implements SvnPanel{
}
myBranchField.setText(url.getTail());
}
}, message("select.branch.popup.general.title"), myPanel);
}, message("popup.title.select.branch"), myPanel);
}
private void chooseUrl() {