blob: 8d36f80ceae15a4522e6d269ef3160c93331c6a5 [file] [log] [blame]
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.googlesource.gerrit.plugins.github.git;
import org.eclipse.jgit.api.errors.JGitInternalException;
public class GitCloneFailedException extends GitException {
public GitCloneFailedException(String remoteUrl, Throwable e) {
super("Failed to clone from repository " + remoteUrl, e);
}
private static final long serialVersionUID = 1619949108894445899L;
@Override
public String getErrorDescription() {
return "Clone failed" + getCauseDescription(getCause());
}
private String getCauseDescription(Throwable cause) {
if (cause == null) {
return "";
} else if (JGitInternalException.class.isAssignableFrom(cause.getClass())) {
Throwable innerCause = cause.getCause();
return innerCause != null ? getCauseDescription(cause.getCause()) : "JGit internal error";
} else {
return getDecamelisedName(cause);
}
}
private String getDecamelisedName(Throwable cause) {
StringBuilder name = new StringBuilder();
String causeName = cause.getClass().getName();
causeName = causeName.substring(causeName.lastIndexOf('.') + 1);
for (char causeChar : causeName.toCharArray()) {
if (Character.isUpperCase(causeChar)) {
name.append(" ");
name.append(Character.toLowerCase(causeChar));
} else {
name.append(causeChar);
}
}
return name.toString();
}
}