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.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertThrows;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import static org.junit.Assume.assumeTrue;
|
import static org.junit.Assume.assumeTrue;
|
||||||
|
@ -32,6 +33,7 @@
|
||||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||||
import org.eclipse.jgit.api.errors.InvalidRefNameException;
|
import org.eclipse.jgit.api.errors.InvalidRefNameException;
|
||||||
import org.eclipse.jgit.api.errors.InvalidRemoteException;
|
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.gitrepo.RepoCommand.RemoteFile;
|
||||||
import org.eclipse.jgit.internal.JGitText;
|
import org.eclipse.jgit.internal.JGitText;
|
||||||
import org.eclipse.jgit.junit.JGitTestUtil;
|
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() {
|
private void resolveRelativeUris() {
|
||||||
// Find the longest common prefix ends with "/" as rootUri.
|
// Find the longest common prefix ends with "/" as rootUri.
|
||||||
defaultUri = defaultDb.getDirectory().toURI().toString();
|
defaultUri = defaultDb.getDirectory().toURI().toString();
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
import org.eclipse.jgit.dircache.DirCache;
|
import org.eclipse.jgit.dircache.DirCache;
|
||||||
import org.eclipse.jgit.dircache.DirCacheBuilder;
|
import org.eclipse.jgit.dircache.DirCacheBuilder;
|
||||||
import org.eclipse.jgit.dircache.DirCacheEntry;
|
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.ManifestErrorException;
|
||||||
import org.eclipse.jgit.gitrepo.RepoCommand.RemoteFile;
|
import org.eclipse.jgit.gitrepo.RepoCommand.RemoteFile;
|
||||||
import org.eclipse.jgit.gitrepo.RepoCommand.RemoteReader;
|
import org.eclipse.jgit.gitrepo.RepoCommand.RemoteReader;
|
||||||
|
@ -138,7 +139,7 @@ RevCommit write(List<RepoProject> repoProjects)
|
||||||
}
|
}
|
||||||
// In the last try, just propagate the exceptions
|
// In the last try, just propagate the exceptions
|
||||||
return commitTreeOnCurrentTip(inserter, rw, treeId);
|
return commitTreeOnCurrentTip(inserter, rw, treeId);
|
||||||
} catch (IOException | InterruptedException e) {
|
} catch (IOException | InterruptedException | InvalidPathException e) {
|
||||||
throw new ManifestErrorException(e);
|
throw new ManifestErrorException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue