company_banner

JetBrains Upsource EAP: продукт для просмотра репозиториев и code review, с которым теперь можно поиграться

    Хабр, привет!
    image
    Меньше года назад мы рассказывали о разработке нашей новой веб-платформы для просмотра исходного кода.

    За прошедшее время Upsource претерпел массу мелких и крупных изменений и стал, в частности, инструментом для code review. На днях же мы открыли программу EAP (Early Access Program), и предрелизные билды Upsource теперь доступны для всех желающих. На момент написания статьи число желающих стремительно приближается к тысяче, и не исключено, что вам тоже будет интересно лично познакомиться с нашим новым продуктом.

    Коротко, JetBrains Upsource — это продукт, который устанавливается на внутреннем сервере компании (on-premises) и предоставляет навигацию по репозиториям с исходным кодом, анализ кода, позволяет обсуждать код и производить code review.

    Поскольку продукт молод, но возможности его — как нынешние, так и потенциальные — очень обширны, мы кратко обозначим, что Upsource сейчас умеет, а чего не умеет.

    Итак, вот что сейчас позволяет делать Upsource:

    • Следить за изменениями в имеющихся репозиториях на базе Git, Mercurial, Subversion и/или Perforce, в том числе видеть все текущие и существовавшие ранее ветки, историю их ответвления и вливания в мастер. К Upsource можно подключать как репозитории на внутренних серверах компании, так и размещенные на хостингах (например, GitHub).
    • Проводить поиск по истории изменений в репозитории. С помощью запросов (синтаксис похож на запросы в YouTrack) можно делать выборки истории проекта, например показывать изменения только в определенной ветке, сделанные конкретным разработчиком, появившиеся в заданном временном диапазоне, или имеющие в коммит-сообщении те или иные слова.
    • Подробно изучать изменения в новых ревизиях. Можно просматривать изменения как выжимкой (в режиме inline), так и сравнивая две смежные ревизии (side-by-side).
    • Читать содержание репозитория в любой ревизии, файл за файлом. Upsource позволяет просматривать структуру любой ревизии, открывать из дерева или искать любые файлы в ревизии, изучать историю их изменений, выяснять, кто и когда последний раз правил ту или иную строчку кода, и инициировать обсуждения прямо на листингах файлов.
    • Пользоваться статическим анализом кода в Java-проектах, то есть видеть в браузере все те сотни Java-инспекций, которые есть в IntelliJ IDEA. Инспекции видны как во время просмотра листингов Java-файлов, так или при изучении любого коммита в случае перехода в режим side-by-side diff. Также для Java доступны дополнительные возможности навигации: Go to Symbol, Go to Declaration, Find Usages, Type Hierarchy — все то, что традиционно существует только в IDE.
    • Обсуждать код и его изменения, или проводить code review. Здесь полная свобода действий: можно обсуждать специфические проблемы в коде и призывать авторов к ответу в неофициальном порядке, а можно заводить code review на новых коммитах, чтобы одни коллеги просто были в курсе изменений, а другие могли отрецензировать ваш труд. И отдельно стоящие дискуссии, и code review в Upsource хороши тем, что время их жизни не ограничено. Если вы, когда-то изучая старую ревизию файла, заметили недостаточную обработку исключений и сообщили об этом автору, создав дискуссию, а автор ваше замечание гордо проигнорировал, то когда этот файл будет в следующий раз подан на code review, дискуссия окажется видна коллегам, выступающим в роли рецензентов.

    Теперь коротко о том, чего Upsource сейчас не позволяет:

    • Создавать репозитории, открывать и закрывать ветки. Полноценному менеджменту репозиториев Upsource пока что не обучен, но мы понимаем, что двигаться в этом направлении очень логично.
    • Жить в облаке. Сейчас и в обозримом будущем Upsource — это инструмент, предназначенный для установки на внутренних серверах компаний.
    • Проводить code review в IDE или по крайней мере поменьше из неё вылезать. Впрочем, мы работаем над плагином к IntelliJ IDEA для code review, и к релизу Upsource 1.0 он должен быть готов.
    • Проводить code review на изменениях, которые еще не попали в репозиторий. Из двух разновидностей code review — pre-commit review и post-commit review — Upsource поддерживает только последнюю. Возможно, когда-нибудь мы поддержим и pre-commit review, но это пока не решено.
    • Настраивать правила (workflow) для code review. Если у вас принято, что изменения в модуле A должны быть отрецензированы двумя senior-разработчиками, а еще полкоманды должны на них взглянуть, автоматизировать это и подобные правила пока не получится. Над поддержкой правил мы будем работать, но уже после релиза Upsource 1.0.
    • Выполнять статический анализ кода на других языках. Более того — даже Java-проекты поддерживаются не все (например, Maven поддержан, а Gradle пока нет). Про поддержку других языков (C#, Scala, Python, Ruby) у нас спрашивают и мы думаем, а что-то даже делаем, но показывать на публику пока нечего.


    Для того чтобы лучше понять, что представляет собой Upsource, предлагаем посмотреть 10-минутное видео от нашего технического евангелиста Hadi Hariri:



    Что можно сделать, если вас заинтересовал Upsource?

    • Скачать предрелизный билд Upsource, присоединившись к программе раннего доступа (EAP). Если у вас есть время и желание поставить билд, посмотреть, как выглядят в нем ваши проекты, и составить некоторое впечатление о продукте, этот вариант для вас.
    • Подписаться на новости продукта, чтобы быть в курсе предстоящих бета-релизов и финального релиза. Мы понимаем, что возможность играться с предрелизными версиями серверных продуктов воодушевляет далеко не всех, поэтому если вам лишь хочется знать, когда Upsource пойдет в релиз, подписывайтесь.
    • Просто узнать об Upsource подробнее. На официальном сайте есть более представительный обзор возможностей Upsource как инструмента для просмотра репозиториев и code review — разумеется, по-английски.

    Upsource, как и многие другие инструменты JetBrains, был опробован на наших внутренних задачах. На данный момент наша инсталляция Upsource обрабатывает 56 репозиториев исходного кода, в том числе один из самых больших публичных GitHub-репозиториев — IntelliJ IDEA Community Edition.

    Мы надеемся, что предрелизная фаза продлится несколько месяцев и уже до конца текущего года Upsource 1.0 будет выпущен.

    Команда JetBrains
    JetBrains
    Делаем эффективные инструменты для разработчиков

    Комментарии 51

      +1
      >доступны дополнительные возможности навигации: Go to Symbol, Go to Declaration, Find Usages, Type Hierarchy

      Это конечно же происходит в пределах той ревизии откуда вызвано?
      Можно ли сравнивать «результаты» навигации для двух ревизий?
        0
        Да, в пределах ревизии.

        Результаты навигации сравнивать нельзя. Встречный вопрос: зачем вам это может быть нужно?
          0
          Ну во-первых «because i can» :-)

          А вообще когда большая связанность кода и где-то что-то отвалилось, но непонятно когда, смотреть дифы Find Usages и Call Hierarchy может иногда оказаться удобным способом локализации проблемы.
            0
            О планах делать diff между Find Usages на разных ревизиях в каком-то специальном представлении мне неизвестно, но при необходимости это, конечно, можно сделать вручную, открыв разные ревизии в соседних окнах браузера.
              0
              Был такой план. Но на самом деле это совершенно непонятная с точки зрения продукта и пользы задача. Нужно было просветление, пока его, как я понимаю, не наступило, но ты поспрашивай.
                0
                Я поспрашивал. Наступил студенческий проект на эту тему )
        +1
        Класс!
        Я правильно понимаю, что это скорее как gitweb или Fisheye и Crucible, чем gerrit?
        То есть сам Upsource не администрует репозитории, просто удобно позволяет их смотреть?
        Прекрасно!
          0
          Правильно понимаете.
          Администрировать репозитории Upsource, вероятно, научится, но не прямо сейчас.
            0
            это и не нужно. интеграция с jira и rest api планируются?
              +1
              Очень даже нужно! Мне сперва показалось, что Upsource собирается стать аналогом Rhodecode, но оказалось что это пока просто обёртка для просмотра существующих репозиториев…
              Мы бы с удовольствием перешли с Rhodecode на решение от JetBrains. Уже пользуемся R#, TC и YT, Upsource бы логично завершил набор :)
                0
                Следите за обновлениями в таком случае, управление репозиториями рано или поздно появится.
                  +1
                  Кстати, за появление менеджмента репозиториев можно проголосовать
                  0
                  Интеграция с JIRA в смысле ссылок на трекер из commit message-й и прочего текста в Upsource уже есть. Собственно, такого рода интеграция возможна с произвольными трекерами, надо только настроить шаблон issue URL.

                  Более глубокая интеграция (например, определение ревизии, к которой относится стектрейс в issue, и навигация в соответствующую ревизию в Upsource), вероятно, будет только с YouTrack.

                  Про любого рода public API мы будем думать уже после первого релиза. Вы REST API хотели бы для чего именно?
              0
              А какое-либо управление правами доступа планируется? В roadmap-e не нашел…
                +1
                Уже есть. Вместе с Upsource поставляется такая штука, как Hub. Эта штука содержит в себе всю функциональность управления пользователями и их правами через роли и группы — пока что в пределах одной инсталляции. Через некоторое время Hub возьмет на себя эти функции, изъяв их из всех командных инструментов JetBrains (TeamCity, YouTrack, Upsource) и став центром управления правами во всех продуктах JB и во всех инсталляциях этих продуктов (в больших командах множество инсталляций TeamCity — не редкость) в компании.
                  +1
                  JetBrains HUB как замена Atlassian Crowd, я правильно понимаю?
                    0
                    Да, аналогия уместна
                0
                Хорошая вещь. Только не совсем понимаю, основной смысл это ревью? Или это будет развиваться во что-то еще?
                  0
                  На данный момент основные смыслы — это ревью без четких правил и с сохранением исторической информации (плюс к которому джавистам достается бонус в виде статического анализа Java-кода и IDE-подобной навигации) + неплохой единообразный UI к разнородным репозиториям. Поддержка Git, Mercurial, Subversion и Perforce для нас самих, например, актуальна во всем объеме: у нас имеются репозитории всех этих видов, и мы знаем, что не одиноки в подобной разношерстности.

                  У тех команд, которые держат код сугубо в гите, пишут не на Java, имеют дело с короткими проектами и активным бранчингом, пока вряд ли есть повод думать о переходе, но следить за развитием будет небезынтересно.
                  +2
                  а как насчет TFS & Visual Studio?
                    0
                    Насчет TFS пока никак и планов нет, но мы будем оценивать спрос.

                    Про Visual Studio что именно имеется в виду?
                      0
                      Возможно имелся в виду VSS, но не представляю, кто может его сегодня использовать. Либо автор имел в виду облако VS Online, но там TFS, емнип.
                    +4
                    Если вы сделаете большинство вещей из списка, что он сейчас не позволяет, то продукты Atlassian будут просто курить в сторонке по функционалу.
                      0
                      Мы будем стараться. Чуваки из Atlassian тем временем тоже будут стараться.
                        +2
                        Как бы они не старались, они все равно не смогут реализовать аналоги ваших инспекций с разумными трудозатратами.
                      0
                      Я немного не понял если я должен разворачивать сервер у себя будет ли у меня возможность натравить на мои гитхаб и битбаскет репозитории?
                        0
                        Да, у вас будет такая возможность. Сделать это просто (по крайней мере с GitHub, с Bitbucket не общался), и мы во многих случаях так и делаем.
                        0
                        Развернул у себя на сервере…
                        Прокинул nginx proxy…
                        Вылетает ошибка

                        unauthorized_client: Unregistered Redirect URI. Client service 'Upsource' requests authorization entity for the URI which is not registered in HUB: xxxxxxx.ru/. If you have HUB administrator permissions and the suspicious URI does belong to 'Upsource', please add this URI to the list of 'Redirect URIs' in the service settings in HUB

                        Очень хочется пощупать, если понравится, поставлю на сервер в компанию. Нам как раз такого инструмента не хватает
                          0
                          А стартануть получилось нормально? У меня он валится минуты через две после запуска. Может мощности не хватает, не знаю. На до на пяти баксовом стартануть пытался.

                          П.С. Я не админ и в компании таковых нет. Инструкция по установке для меня показалась очень скупой.
                            0
                            Нет не валится, я выделил 4 ядра и 8 гб
                            Просто не пускает после авторизации по admin/admin
                              0
                              ну, у меня немного не дотягивает до ваших мощностей) 512MB / 1 CPU 20GB SSD DISK

                              Но вообще странно, валится и остается висеть при этом, не давая ни остановить не запустить.
                                0
                                У меня отъедает ~2.7 Гб
                                Вот ошибка собственно…

                                monosnap.zanozahost.ru/20140812_013208-dtovd.jpg
                                  0
                                  Вот нужно 8 ГБ, как написано здесь. Если не получится с 8 ГБ, пишите, будем разбираться.
                                    0
                                    Извините, мой косяк. Просмотрел этот пункт. Прожорливый он у вас получается однако…
                                0
                                Чего именно не хватило в инструкции?
                                0
                                Возможно, вы забыли настроить base-url?
                                  0
                                  Да нет, делал все как по инструкции. Уже написал на upsource-support@

                                  ./bin/upsource.sh configure --listen-port 1111 --base-url upsource.xxxxxxxx.ru

                                  server {
                                  listen 80;
                                  server_name upsource.xxxxxxxxxx.ru;

                                  location / {
                                  proxy_set_header X-Forwarded-Host $host;
                                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                  proxy_set_header X-Forwarded-Proto $scheme;
                                  proxy_http_version 1.1;
                                  # to proxy WebSockets in nginx
                                  proxy_set_header Upgrade $http_upgrade;
                                  proxy_set_header Connection «upgrade»;
                                  proxy_pass 127.0.0.1:1111/;
                                  }
                                  }
                                    0
                                    Ясно, тогда в upsource-support вам лучше помогут, там разработчики собственными персонами.
                                0
                                * Создавать репозитории, открывать и закрывать ветки
                                * Проводить code review на изменениях, которые еще не попали в репозиторий

                                Очень хочется эти две фичи, особенно менеджмент репозиториев. В нашем проекте мы пробовали GitHub Enterprise, GitLab, Stash. Пока остановились на последнем, но он не поддерживает Mercurial и Atlassian уже 2 года забивает на мольбы пользователей о его поддержке.
                                  0
                                  Возможно, теперь перестанет забивать )

                                  А если серьезно, да, мы со всей серьезностью думаем об этом. Голосуйте, пожалуйста.
                                    0
                                    А почему вам важно пользоваться именно Mercurial? Текущая статистика показывает в целом небольшой интерес к нему.
                                      0
                                      Mercurial мне нравится из-за «настоящих» веток, в git вместо них просто тэги (в mercurial они тоже есть, но это другая сущность, отличная от веток). Поэтому, ИМХО, в Mercurial лучше читается история, особенно при обильных мерджах. У меня около 2х лет опыта с hg и столько же с git, наша команда устала от последнего, переезжаем на hg.
                                        0
                                        Если не секрет, как вы собирали статистику? Надеюсь не сравнивали количество репозиториев в Bitbucket и Github или вроде того:)
                                          0
                                          Нет, конечно. Мы проводили опросы, плюс у нас есть статистика по использованию наших продуктов.
                                        0
                                        А для меня менеджмент репозиториев внутри такой тулы будет убийственен, потому что в них не будет репликации репозиториев, а для меня это критично.
                                        Так что если будут делать — хорошо бы, чтобы это был плагин какой-нибудь, а не обязательная функциональность.
                                          0
                                          Не понял, что значит «не будет репликации репозиториев»?
                                            0
                                            Ну мирроринга. У меня 4 сервера в США, Азии, России и на Ближнем Востоке. Мне нужно их зеркалировать. До тех пор, пока я сам админю репозитории — я могу это делать так, как мне удобно. Если админить репозитории будет upsource, то моё решение работать не будет, скорее всего, а встроенного не дождешься, потому что редкий случай.
                                              0
                                              Да, верно, делать встроенный мирроринг мы в первых версиях точно не будем. Но если мы сделаем hosting, то он не будет обязательным, можно будет продолжать подключать внешние репозитории, просто некоторых вкусных плюшек (той же проверки прав на push и другого) не будет.
                                        0
                                        А вы с таким не сталкивались? Вываливается на странице Administration под строками Last VCS check для нашего GIT-репозитория с использованием SSH private key.
                                        12:08:30: Input/output problem: Failed to fetch new commits from the version control for ProjectId{JET}. jetbrains.vcs.server.api.VcsServiceException: Failed to construct commits graph for JET{mappings: 1, mounts: 0}. Failed to construct graph for JET:JET. Failed to collect commits graph for JET:JET. List remote refs failed: com.jcraft.jsch.JSchException: Auth cancel. Analyzer will restart the project, git@git:JET.git: Auth cancel
                                        При создании проекта тест подключения прошел успешно.

                                        Аналогичный SVN-репозиторий заработал, все очень нравится!
                                          0
                                          Да, увы, уже сталкивались. Попробуйте последить за этим реквестом: либо зафиксят, либо предложат workaround.
                                            0
                                            Аналогично
                                            Git, Private Key

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое