ceylon / ceylon-compiler

DEPRECATED
GNU General Public License v2.0
138 stars 36 forks source link

Trying to compile to non-WebDav http server results in ugly errors #1364

Closed quintesse closed 10 years ago

quintesse commented 10 years ago

If you do ceylon compile --out http://localhost:8000 testmodule you get the following error:

An exception has occurred in the compiler (ceylonc 1.0.0 (Buckaroo Banzai)).
com.redhat.ceylon.cmr.api.RepositoryException: com.googlecode.sardine.impl.SardineException: Unexpected response (501 Unsupported method ('PROPFIND'))
    at com.redhat.ceylon.cmr.impl.CachingRepositoryManager.getArtifactResult(CachingRepositoryManager.java:95)
    at com.redhat.ceylon.cmr.api.AbstractRepositoryManager.getArtifact(AbstractRepositoryManager.java:77)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager$ProgressiveJar.setupJarOutput(JarOutputRepositoryManager.java:115)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager$ProgressiveJar.<init>(JarOutputRepositoryManager.java:111)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager.getProgressiveJar(JarOutputRepositoryManager.java:72)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager.getFileObject(JarOutputRepositoryManager.java:65)
    at com.redhat.ceylon.compiler.java.tools.CeyloncFileManager.getFileForOutput(CeyloncFileManager.java:172)
    at com.sun.tools.javac.file.JavacFileManager.getJavaFileForOutput(JavacFileManager.java:745)
    at com.sun.tools.javac.jvm.ClassWriter.writeClass(ClassWriter.java:1503)
    at com.redhat.ceylon.compiler.java.codegen.CeylonClassWriter.writeClass(CeylonClassWriter.java:63)
    at com.redhat.ceylon.compiler.java.tools.LanguageCompiler.genCodeUnlessError(LanguageCompiler.java:572)
    at com.redhat.ceylon.compiler.java.tools.LanguageCompiler.genCode(LanguageCompiler.java:540)
    at com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1449)
    at com.redhat.ceylon.compiler.java.tools.LanguageCompiler.generate(LanguageCompiler.java:630)
    at com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1417)
    at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:870)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:829)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:623)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:540)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:530)
    at com.redhat.ceylon.compiler.CeylonCompileTool.run(CeylonCompileTool.java:373)
    at com.redhat.ceylon.tools.CeylonTool.run(CeylonTool.java:323)
    at com.redhat.ceylon.tools.CeylonTool.execute(CeylonTool.java:271)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:86)
    at com.redhat.ceylon.launcher.Launcher.main(Launcher.java:21)
Caused by: com.googlecode.sardine.impl.SardineException: Unexpected response (501 Unsupported method ('PROPFIND'))
    at com.googlecode.sardine.impl.handler.ValidatingResponseHandler.validateResponse(ValidatingResponseHandler.java:49)
    at com.googlecode.sardine.impl.handler.MultiStatusResponseHandler.handleResponse(MultiStatusResponseHandler.java:40)
    at com.googlecode.sardine.impl.handler.MultiStatusResponseHandler.handleResponse(MultiStatusResponseHandler.java:36)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:945)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:919)
    at com.googlecode.sardine.impl.SardineImpl.execute(SardineImpl.java:691)
    at com.googlecode.sardine.impl.SardineImpl.list(SardineImpl.java:344)
    at com.googlecode.sardine.impl.SardineImpl.list(SardineImpl.java:330)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore$WebDAVContentHandle.getLastModified(WebDAVContentStore.java:266)
    at com.redhat.ceylon.cmr.impl.DefaultNode.getLastModified(DefaultNode.java:210)
    at com.redhat.ceylon.cmr.impl.CachingRepositoryManager.getArtifactResult(CachingRepositoryManager.java:75)
    ... 28 more
ceylon compile: Fatal error: The compiler exited abnormally (4) due to a bug in the compiler.
Please report it:
 https://github.com/ceylon/ceylon-compiler/issues/new
Please include:

* the stacktrace printed below
* a description of what you were trying to compile.

Thank you!
com.redhat.ceylon.compiler.CompilerBugException: Bug
    at com.redhat.ceylon.compiler.CeylonCompileTool.handleExitCode(CeylonCompileTool.java:392)
    at com.redhat.ceylon.compiler.CeylonCompileTool.run(CeylonCompileTool.java:374)
    at com.redhat.ceylon.tools.CeylonTool.run(CeylonTool.java:323)
    at com.redhat.ceylon.tools.CeylonTool.execute(CeylonTool.java:271)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:86)
    at com.redhat.ceylon.launcher.Launcher.main(Launcher.java:21)
Caused by: com.redhat.ceylon.cmr.api.RepositoryException: com.googlecode.sardine.impl.SardineException: Unexpected response (501 Unsupported method ('PROPFIND'))
    at com.redhat.ceylon.cmr.impl.CachingRepositoryManager.getArtifactResult(CachingRepositoryManager.java:95)
    at com.redhat.ceylon.cmr.api.AbstractRepositoryManager.getArtifact(AbstractRepositoryManager.java:77)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager$ProgressiveJar.setupJarOutput(JarOutputRepositoryManager.java:115)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager$ProgressiveJar.<init>(JarOutputRepositoryManager.java:111)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager.getProgressiveJar(JarOutputRepositoryManager.java:72)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager.getFileObject(JarOutputRepositoryManager.java:65)
    at com.redhat.ceylon.compiler.java.tools.CeyloncFileManager.getFileForOutput(CeyloncFileManager.java:172)
    at com.sun.tools.javac.file.JavacFileManager.getJavaFileForOutput(JavacFileManager.java:745)
    at com.sun.tools.javac.jvm.ClassWriter.writeClass(ClassWriter.java:1503)
    at com.redhat.ceylon.compiler.java.codegen.CeylonClassWriter.writeClass(CeylonClassWriter.java:63)
    at com.redhat.ceylon.compiler.java.tools.LanguageCompiler.genCodeUnlessError(LanguageCompiler.java:572)
    at com.redhat.ceylon.compiler.java.tools.LanguageCompiler.genCode(LanguageCompiler.java:540)
    at com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1449)
    at com.redhat.ceylon.compiler.java.tools.LanguageCompiler.generate(LanguageCompiler.java:630)
    at com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1417)
    at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:870)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:829)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:623)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:540)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:530)
    at com.redhat.ceylon.compiler.CeylonCompileTool.run(CeylonCompileTool.java:373)
    ... 8 more
Caused by: com.googlecode.sardine.impl.SardineException: Unexpected response (501 Unsupported method ('PROPFIND'))
    at com.googlecode.sardine.impl.handler.ValidatingResponseHandler.validateResponse(ValidatingResponseHandler.java:49)
    at com.googlecode.sardine.impl.handler.MultiStatusResponseHandler.handleResponse(MultiStatusResponseHandler.java:40)
    at com.googlecode.sardine.impl.handler.MultiStatusResponseHandler.handleResponse(MultiStatusResponseHandler.java:36)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:945)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:919)
    at com.googlecode.sardine.impl.SardineImpl.execute(SardineImpl.java:691)
    at com.googlecode.sardine.impl.SardineImpl.list(SardineImpl.java:344)
    at com.googlecode.sardine.impl.SardineImpl.list(SardineImpl.java:330)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore$WebDAVContentHandle.getLastModified(WebDAVContentStore.java:266)
    at com.redhat.ceylon.cmr.impl.DefaultNode.getLastModified(DefaultNode.java:210)
    at com.redhat.ceylon.cmr.impl.CachingRepositoryManager.getArtifactResult(CachingRepositoryManager.java:75)
    ... 28 more
quintesse commented 10 years ago

PS: the http server I used for this example was just something simple I was running from a module repository:

python -m SimpleHTTPServer

On a Linux system this should probably work out of the box.

FroMage commented 10 years ago

With a default read-only Apache server I get:

../ceylon-dist/dist/bin/ceylon compile --out http://localhost --src test/src test/src/com/redhat/ceylon/compiler/java/test/issues/bug13xx/Bug1364.ceylon 
error: Failed to write module to repository: com.redhat.ceylon.cmr.impl.CMRException: Unexpected response: Method Not Allowed 405
ceylon compile: There was 1 error

Which looks acceptable, if a bit unfriendly.

FroMage commented 10 years ago

If I try with the python server, it crashes the python server by making it hang and unresponsive even to Ctrl-c after it prints:

127.0.0.1 - - [21/Oct/2013 12:00:04] code 404, message File not found
127.0.0.1 - - [21/Oct/2013 12:00:04] "HEAD /com/redhat/ceylon/compiler/java/test/issues/1/com.redhat.ceylon.compiler.java.test.issues-1.car HTTP/1.1" 404 -
127.0.0.1 - - [21/Oct/2013 12:00:04] code 404, message File not found
127.0.0.1 - - [21/Oct/2013 12:00:04] "HEAD /com/redhat/ceylon/compiler/java/test/issues/1/com.redhat.ceylon.compiler.java.test.issues-1.jar HTTP/1.1" 404 -
127.0.0.1 - - [21/Oct/2013 12:00:05] code 404, message File not found
127.0.0.1 - - [21/Oct/2013 12:00:05] "HEAD /com/redhat/ceylon/compiler/java/test/issues/1/com.redhat.ceylon.compiler.java.test.issues-1.src HTTP/1.1" 404 -
127.0.0.1 - - [21/Oct/2013 12:00:05] code 501, message Unsupported method ('OPTIONS')
127.0.0.1 - - [21/Oct/2013 12:00:05] "OPTIONS ?version=2 HTTP/1.1" 501 -

It seems to also hang the compiler which is probably waiting for an answer, and waits for a timeout.

FroMage commented 10 years ago

There's no timeout, which is an issue in itself.

FroMage commented 10 years ago

We're stuck at:

    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
    at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264)
    at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
    at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
    at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:633)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:454)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:941)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:919)
    at com.googlecode.sardine.impl.SardineImpl.execute(SardineImpl.java:691)
    at com.googlecode.sardine.impl.SardineImpl.exists(SardineImpl.java:672)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:167)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:164)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:164)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:164)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:164)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:164)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:164)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:164)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.mkdirs(WebDAVContentStore.java:164)
    at com.redhat.ceylon.cmr.webdav.WebDAVContentStore.putContent(WebDAVContentStore.java:126)
    at com.redhat.ceylon.cmr.impl.DefaultNode.addNode(DefaultNode.java:127)
    at com.redhat.ceylon.cmr.impl.DefaultNode.addContent(DefaultNode.java:105)
    at com.redhat.ceylon.cmr.impl.AbstractNodeRepositoryManager.putArtifact(AbstractNodeRepositoryManager.java:131)
    at com.redhat.ceylon.cmr.impl.CachingRepositoryManager.putArtifact(CachingRepositoryManager.java:104)
    at com.redhat.ceylon.cmr.api.AbstractRepositoryManager.putArtifact(AbstractRepositoryManager.java:109)
    at com.redhat.ceylon.cmr.util.JarUtils.finishUpdatingJar(JarUtils.java:58)
    at com.redhat.ceylon.cmr.impl.SourceArchiveCreatorImpl.copySourceFiles(SourceArchiveCreatorImpl.java:69)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager$ProgressiveJar.close(JarOutputRepositoryManager.java:145)
    at com.redhat.ceylon.compiler.java.tools.JarOutputRepositoryManager.flush(JarOutputRepositoryManager.java:81)
    at com.redhat.ceylon.compiler.java.tools.CeyloncFileManager.flush(CeyloncFileManager.java:220)
    at com.sun.tools.javac.main.JavaCompiler.close(JavaCompiler.java:1577)
    at com.sun.tools.javac.main.JavaCompiler.close(JavaCompiler.java:1551)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:830)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:623)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:540)
    at com.redhat.ceylon.compiler.java.launcher.Main.compile(Main.java:530)
    at com.redhat.ceylon.compiler.CeylonCompileTool.run(CeylonCompileTool.java:373)
    at com.redhat.ceylon.tools.CeylonTool.run(CeylonTool.java:323)
    at com.redhat.ceylon.tools.CeylonTool.execute(CeylonTool.java:271)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:86)
    at com.redhat.ceylon.launcher.Launcher.main(Launcher.java:21)

Forever. We need to add a timeout, but this is a CMR issue.

FroMage commented 10 years ago

Logged in ceylon/ceylon-module-resolver#80

FroMage commented 10 years ago

So why do you get an exception and not me then?

quintesse commented 10 years ago

Right now I can't reproduce it anymore either. Don't like that much, but hey it's one less issue.