diff options
author | Robin Stocker | 2012-12-22 14:33:44 +0000 |
---|---|---|
committer | Matthias Sohn | 2013-02-06 21:49:03 +0000 |
commit | 14f5bb3efff1e985f14ee8b30c86467f27a31c21 (patch) | |
tree | 42d670b4a161ec2181d2890afc59e01bbdfd5d0d | |
parent | c904af7dc1a7f3b683049f1da7eb0cf03e4c40d2 (diff) | |
download | egit-14f5bb3efff1e985f14ee8b30c86467f27a31c21.tar.gz egit-14f5bb3efff1e985f14ee8b30c86467f27a31c21.tar.xz egit-14f5bb3efff1e985f14ee8b30c86467f27a31c21.zip |
Prevent IO_FAILURE by checking for conflicts in ref name validation
E.g. "a/1" is a conflict if "a" already exists, "b" is a conflict if
"b/1" already exists.
With the JGit change that this depends on, we can even show the user
which existing refs cause the conflict.
Bug: 393914
JGit-Dependency: I11e0ba2f300adb8b3612943c304ba68bbe73db8a
Change-Id: Ibea9984121ae88c488858b8a8e73b593195b15e0
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
3 files changed, 20 insertions, 1 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java index 800cb018fc..7e48a5fc42 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java @@ -4315,6 +4315,9 @@ public class UIText extends NLS { public static String ValidationUtils_RefAlreadyExistsMessage; /** */ + public static String ValidationUtils_RefNameConflictsWithExistingMessage; + + /** */ public static String ValidationUtils_PleaseEnterNameMessage; /** */ diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ValidationUtils.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ValidationUtils.java index 2cc2ffe13e..f1b298608b 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ValidationUtils.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ValidationUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2010, 2012 Dariusz Luksza <dariusz@luksza.org> and others. + * Copyright (C) 2010, 2013 Dariusz Luksza <dariusz@luksza.org> and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -10,11 +10,16 @@ package org.eclipse.egit.ui.internal; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import org.eclipse.egit.ui.Activator; import org.eclipse.egit.ui.UIText; import org.eclipse.jface.dialogs.IInputValidator; +import org.eclipse.jgit.lib.RefDatabase; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.util.StringUtils; import org.eclipse.osgi.util.NLS; /** @@ -50,6 +55,16 @@ public class ValidationUtils { return NLS.bind( UIText.ValidationUtils_RefAlreadyExistsMessage, testFor); + RefDatabase refDatabase = repo.getRefDatabase(); + Collection<String> conflictingNames = refDatabase.getConflictingNames(testFor); + if (!conflictingNames.isEmpty()) { + ArrayList<String> names = new ArrayList<String>(conflictingNames); + Collections.sort(names); + String joined = StringUtils.join(names, ", "); //$NON-NLS-1$ + return NLS.bind( + UIText.ValidationUtils_RefNameConflictsWithExistingMessage, + joined); + } } catch (IOException e1) { Activator.logError(NLS.bind( UIText.ValidationUtils_CanNotResolveRefMessage, diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties index 9057973121..88e88ea704 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties @@ -1505,6 +1505,7 @@ SkipRebaseCommand_JobName=Skipping Rebase ValidationUtils_CanNotResolveRefMessage=Can not resolve {0} ValidationUtils_InvalidRefNameMessage={0} is not a valid name for a ref ValidationUtils_RefAlreadyExistsMessage=Ref {0} already exists +ValidationUtils_RefNameConflictsWithExistingMessage=Name conflicts with existing refs: {0} ValidationUtils_PleaseEnterNameMessage=Please enter a name GitMergeEditorInput_CalculatingDiffTaskName=Calculating Differences |