BaseSuperprojectWriter: report invalid paths as manifest errors
An invalid path in the manifest (e.g. '.') is reported by DirCache in a runtime exception. In server context this becomes a 500 instead of a user error. Wrap the runtime invalid path exception into a checked ManifestErrorException that caller can handle. Change-Id: I61a2104922765506ae232334891057bb06141d97
This commit is contained in:
parent
25aceffdc5
commit
ca166a0c62
|
@ -13,6 +13,7 @@
|
|||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
import static org.junit.Assume.assumeTrue;
|
||||
|
@ -32,6 +33,7 @@
|
|||
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||
import org.eclipse.jgit.api.errors.InvalidRefNameException;
|
||||
import org.eclipse.jgit.api.errors.InvalidRemoteException;
|
||||
import org.eclipse.jgit.gitrepo.RepoCommand.ManifestErrorException;
|
||||
import org.eclipse.jgit.gitrepo.RepoCommand.RemoteFile;
|
||||
import org.eclipse.jgit.internal.JGitText;
|
||||
import org.eclipse.jgit.junit.JGitTestUtil;
|
||||
|
@ -1337,6 +1339,28 @@ public void testTwoPathUseTheSameName() throws Exception {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidPath() throws Exception {
|
||||
Repository remoteDb = createBareRepository();
|
||||
Repository tempDb = createWorkRepository();
|
||||
|
||||
StringBuilder xmlContent = new StringBuilder();
|
||||
xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
|
||||
.append("<manifest>")
|
||||
.append("<remote name=\"remote1\" fetch=\".\" />")
|
||||
.append("<default revision=\"master\" remote=\"remote1\" />")
|
||||
.append("<project path=\".\" ").append("name=\"")
|
||||
.append(defaultUri).append("\" />").append("</manifest>");
|
||||
JGitTestUtil.writeTrashFile(tempDb, "manifest.xml",
|
||||
xmlContent.toString());
|
||||
|
||||
RepoCommand command = new RepoCommand(remoteDb);
|
||||
command.setPath(
|
||||
tempDb.getWorkTree().getAbsolutePath() + "/manifest.xml")
|
||||
.setURI(rootUri).setRecommendShallow(true);
|
||||
assertThrows(ManifestErrorException.class, () -> command.call());
|
||||
}
|
||||
|
||||
private void resolveRelativeUris() {
|
||||
// Find the longest common prefix ends with "/" as rootUri.
|
||||
defaultUri = defaultDb.getDirectory().toURI().toString();
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
import org.eclipse.jgit.dircache.DirCache;
|
||||
import org.eclipse.jgit.dircache.DirCacheBuilder;
|
||||
import org.eclipse.jgit.dircache.DirCacheEntry;
|
||||
import org.eclipse.jgit.dircache.InvalidPathException;
|
||||
import org.eclipse.jgit.gitrepo.RepoCommand.ManifestErrorException;
|
||||
import org.eclipse.jgit.gitrepo.RepoCommand.RemoteFile;
|
||||
import org.eclipse.jgit.gitrepo.RepoCommand.RemoteReader;
|
||||
|
@ -138,7 +139,7 @@ RevCommit write(List<RepoProject> repoProjects)
|
|||
}
|
||||
// In the last try, just propagate the exceptions
|
||||
return commitTreeOnCurrentTip(inserter, rw, treeId);
|
||||
} catch (IOException | InterruptedException e) {
|
||||
} catch (IOException | InterruptedException | InvalidPathException e) {
|
||||
throw new ManifestErrorException(e);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue