Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Stocker2012-12-22 14:33:44 +0000
committerMatthias Sohn2013-02-06 21:49:03 +0000
commit14f5bb3efff1e985f14ee8b30c86467f27a31c21 (patch)
tree42d670b4a161ec2181d2890afc59e01bbdfd5d0d
parentc904af7dc1a7f3b683049f1da7eb0cf03e4c40d2 (diff)
downloadegit-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>
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java3
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ValidationUtils.java17
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties1
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

Back to the top