Gitblit: Неверный запрос при переходе к папке второго уровня


Я пытаюсь Gitblit, который кажется довольно хорошим веб-интерфейсом для Git. Установка через файл war довольно проста и работает "из коробки". Однако я сталкиваюсь со странной проблемой.
Я делюсь проектом Maven, который имеет стандартную структуру папок

project
   pom.xml
   src
   src/test-file.txt (I added this file to verify the issue)
   src/java
   src/java/main
   src/java/main/package
   src/java/main/package/File.java

Пока я пытаюсь перейти на первый уровень (так, pom.xml а также src) все хорошо, могу правильно открыть и прочитать файл. Тем не менее, когда я пытаюсь открыть папку java под srcссылка отображается как localhost:8080/gitblit/tree/project/commit-id/src%2Fjava и мне представили белую страницу. Запрос не пересылается на сервер (Tomcat 7.0.32, если это может помочь), и Firebug просто говорит мне Error 400: Bad Request,
Тот %2F выглядит странно, поэтому я вручную попытался исправить ссылку в localhost:8080/gitblit/tree/project/commit-id/src/java, но затем генерируется внутренняя ошибка сервера. Глядя на логи, читаю

INFO  Found more URL path parts then expected, these will be ignored. Url: 'http://localhost:8080/gitblit/tree/project/commit-id/src/java', mountpath: 'blob', urlPath: 'project/commit-id/src/java', expected 3 parameters was 4

Затем я добавил, что test-file.txt, Если я перейду к src и попробуйте открыть test-file.txtво-первых, ссылка пытается открыть localhost:8080/gitblit/blob/project/commit-id/src%2Ftest-file.txt, представив HTML-страницу о том, что файл не найден. Если я попробую тот же трюк, что и раньше (%2F в /), тогда я получаю это исключение:

INFO  Found more URL path parts then expected, these will be ignored. Url: 'http://localhost:8080/gitblit/blob/project/commit-id/src/test-file.txt', mountpath: 'blob', urlPath: 'project/commit-id/src/test-file.txt', expected 3 parameters was 4
ERROR /path/to/project/.git cant find {1} in tree {2}
org.eclipse.jgit.errors.IncorrectObjectTypeException: Object commit-id is not a blob.
    at org.eclipse.jgit.storage.file.WindowCursor.open(WindowCursor.java:130)
    at org.eclipse.jgit.lib.ObjectDatabase.open(ObjectDatabase.java:176)
    at org.eclipse.jgit.lib.Repository.open(Repository.java:278)
    at com.gitblit.utils.JGitUtils.getByteContent(JGitUtils.java:563)
    at com.gitblit.utils.JGitUtils.getStringContent(JGitUtils.java:596)
    at com.gitblit.wicket.pages.BlobPage.<init>(BlobPage.java:133)
    at sun.reflect.GeneratedConstructorAccessor22.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:188)
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:89)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:305)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
    at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
    at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1279)
    at org.apache.wicket.RequestCycle.step(RequestCycle.java:1358)
    at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1465)
    at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
    at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
ERROR Can't instantiate page using constructor public com.gitblit.wicket.pages.BlobPage(org.apache.wicket.PageParameters) and argument r = "project" h = "commit-id" f = "src"
org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor public com.gitblit.wicket.pages.BlobPage(org.apache.wicket.PageParameters) and argument r = "project" h = "commit-id" f = "src"
    at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:212)
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:89)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:305)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
    at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
    at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1279)
    at org.apache.wicket.RequestCycle.step(RequestCycle.java:1358)
    at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1465)
    at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
    at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedConstructorAccessor22.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:188)
    ... 27 more
Caused by: java.lang.NullPointerException
    at com.gitblit.wicket.pages.BlobPage.generateSourceView(BlobPage.java:142)
    at com.gitblit.wicket.pages.BlobPage.<init>(BlobPage.java:134)
    ... 31 more

Я в принципе не настраивал сам gitblit (без изменений gitblit.properties), так что моя проблема может быть в пропущенной конфигурации, но я мог выяснить, где. Любой намек?

2 ответа

Решение

без изменений в gitblit.properties

Это предложение было причиной проблемы. И решение было действительно хорошо задокументировано на Gitblit.com FAQ.

Запуск Gitblit на Tomcat
Tomcat по умолчанию принимает дополнительные меры предосторожности, запрещая встроенные слэши. Это нарушает Gitblit URL. У вас есть несколько вариантов того, как справиться с этим сценарием:
1. Tweak Tomcat Добавьте -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true в CATALINA_OPTS или в параметры запуска JVM.
2. Измените gitblit.properties, используя одно из:
- web.mountParameters = false и использовать не красивые, параметризованные URL
- web.forwardSlashCharacter =! который говорит Gitblit использовать! вместо /

я использовал web.forwardSlashCharacter = !, перезагрузите gitblit webapp из менеджера, и теперь все работает нормально. По моей вине я не читал часто задаваемые вопросы, пока James Moger предложил мне лекцию.

Простой способ решить эту глупую проблему - отключить URL-адрес для монтирования в /var/lib/tomcat7/gitblit.properties:

Следуйте этим простым шагам:

  1. nano /var/lib/tomcat7/webapps/gitblit/WEB-INF/data/gitblit.properties
  2. найти web.mountParameters = true и изменить на false
  3. перезапуск tomcat /etc/init.d/tomcat7 перезапуск
  4. это все!

Cya!

Другие вопросы по тегам