LINUX.ORG.RU

technology stack for a task

 


1

3

Да, я понимаю, что я школота, хоть и старый пердун и что мне такое не под силу. Но почему-то до меня никто не сделал git branches/commits viewer’a, глядя на который было бы что-то понятно о проекте.

Я хочу чтобы по умолчанию ось времени была по горизонтали. А бранчи и коммиты отображались в стиле https://www.nobledesktop.com/image/gitresources/git-branches-merge.png. При этом расстояние между коммитами было определено временем между ними (чтобы ось времени была действительно осью времени). Тогда гже гуще - сразу видно - велась работа.

Я хочу, чтобы этот граф можно было приближать/удалять и крутить как угодно (например, сделать ось времени вертикальной, как обычно).

Ну и я хочу плюшки в виде поля ввода простого DSL языка, чтобы, например, показать только бранчи от Коли Иванова. Или только коммиты от даты такой-то по такую-ту.

Ну и, конечно, возможность узреть разницу между двумя любыми «нодами» как meld показывает dir-diff. Ну и конечно diff’ы между файлами.

Также пользователь должен иметь возможность задать фильтр, а следом переключиться в обычный, не завязанный на время список коммитов (как в большинстве git viewer’ов).

Можно еще плюшки в виде репортов, но у меня шальная идея сделать систему плагинов и пусть каждый кому надо знать кто больше накодил в мартобре - пишет плагин.

При этом приближение/удаление/поворачивание графа должно быть быстрым. Тулза должна, например, не упасть (а в идеале корректно работать) с сырцами да хоть бы Линукса.

Я вообще не представляю с чего начать. Курить SDL? Граф явно придется самому рисовать, во-первых graphviz рисует уродство, а во вторых мне же надо будет соmmit messages рисовать если, например, удаление позволяет. И они должны быть всегда горизонтальными независимо от ротации.

Вообще что взять за UI framework? QT? И там внутри какой-то 2d-canvas? Напоминаю, что это должно быть быстрым (ну конечно при условии, что я не нагорожу алгоритмического огорода).

Посоветуйте, что курить.

Вообще что взять за UI framework? QT?

Да.

И там внутри какой-то 2d-canvas?

Да.

X512 ★★★★★
()
Ответ на: комментарий от anonymous

Да. Это почти то, что я хочу. Но я хочу еще и видеть граф коммитов - там где гуще - там значит чаще работали (должна быть честная ось времени). И DSL а-ля как в wireshark для фильтрации. И удобный dir-view (ничего лучше dir-view в meld, пока его не испортили гном-зомби, я не видел - так вот такой) между любыми коммитами (нодами в такого типа графе https://www.nobledesktop.com/image/gitresources/git-branches-merge.png). Граф должер быть можно приближать/удалять/поворачивать или превратить определенный, например, бранч просто в плоский список коммитов (как почти во всех git gui).

Ага и еще. Тулза должна делать что-то одно хорошо. Например, при взгляде на то. что она рисует должно сразу стать понятно, что проект сдох в мартобре прошлого года, а больше всего активности (feature bracnches, commits) было летом 2007.

Тулза НЕ должна уметь мержить, коммитить, ребэйзить, бисектить и т.д. Чисто viewer/

Тулза может генерировать репорты, мол, Вася Пупкин в мартобре был наиболее активным, но я хочу вынести это в плагины с примерами.

PS Ага, ну и бранчи с мержами должны быть, конечно, на канвасе видны. Вместе с нодами (коммитами). Тоже честно расположенными согласно горизонтальной оси времени (если пользоваьтель не ворочал граф). DSL же должен позволить удалить с канваса все бранчи, которые никогда никуда не вмержились (например).

В-общем этакая тулза для PMа. Сразу видно, кто х.. пинает. Но мотивация, конечно, шире.

Я хочу довести тулзу до состояния, когда мне будет нравиться пользоваться ею самой. И тогда отдать общественности.

Просто IMHO - это позор. Git юзают все, в git history viewer’а, которые бы не вызывал рвотные рефлексы нет. Даже GitKraken - который за деньги - г.

И еще сделаю признание - до сих пор не понял, что означаюти эти загадочные вертикальные линии слева от списка коммитов большинстве git history viewer’ах. Ну т.е. я догадываюсь, что они визуализируют историю «бранчевания», но чтобы постичь это «очень сильное колдунство» нужно очень большое воображение.

dissident ★★
() автор топика
Последнее исправление: dissident (всего исправлений: 6)
Ответ на: комментарий от Princesska

А я хочу, чтобы не только для PMов. Поэтому репорты плагинами.

PS Я не видел ни одного git gui где то, что делалось с бранчами было понятно. Я не видел ни одного git gui, где коммиты были бы отдалены друг от друга по времени. Я не видел ни одного git gui, где был бы advanced filtering DSL.

Ага, вот еще одна идея. Коммит, которые меняет больше отображается «более толстым кружком».

Ну блин, это же удобно. Я бы сам этим пользовался. Хотя бы для себя и попробую сделать.

PPS Пока вынес из трэда, что QT и QPainter class. Может быть еще какие советы? Например, как грамотно реализовать систему плагинов?

dissident ★★
() автор топика
Последнее исправление: dissident (всего исправлений: 3)
Ответ на: комментарий от X512

Trunk based development и никакие ветки и визуализаторы графов не нужны.

Тулза должна быть удобна и для «плоских» реп. Я вот из всех git gui пользуюсь:

  • tig
  • sublime merge (очень редко)

Это же грустно. Это как документация к гиту, которая не документация, а издевательство над пользователем, написанное не отъ…сь (не удивлюсь, если Самим, его стиль, в смысле на отй…сь: «вы все тупые, а я вам еще документацию писать буду? лень возякатся» (с) https://youtu.be/fzOc7ttjb_c?t=290): https://git-man-page-generator.lokaltog.net/

dissident ★★
() автор топика
Последнее исправление: dissident (всего исправлений: 3)
Ответ на: комментарий от Princesska

Я постараюсь морально созреть за пару недель до этого откровенного прыганья выше ж..ы. Ну хоть что QT и что QPainter понятно.

dissident ★★
() автор топика

Для совсем начала подумай какие ситуации возможны и какие данные тебе будут нужны в них.
Потом для начала возьми какого-нибудь питона и сделай подготовку данных в формате функции.
Потом сделай макет интерфейса на чём умеешь (хоть даже текстовый).
И когда у тебя уже будет отлажена вся эта ядерная часть — тогда и будешь начинать думать о UI.

В идеале, конечно, никаких зависимостей от иксов и прочих рисователей картинок быть не должно, ибо там, где работает гит, может и монитора не быть.

Goury ★★★★★
()
Последнее исправление: Goury (всего исправлений: 1)
Ответ на: комментарий от Goury

А git юзать через pipe или его либу? Я rде-то читал что tuj либа - издевательство. За совет спасибо, кто-то может захотеть опцию "рисовать граф в ASCII.

А как наиболее кошерно реализовать плагины (в крестах, раз уж QT)? Может есть грамотная статья, раскладывающая все по полкам?

dissident ★★
() автор топика
Ответ на: комментарий от dissident

Я не специалист разработки гита, я юзер.
Лучше конечно через библиотеку гит использовать, но в библиотеках его я не шарю.

Про Qt @XMs наверняка чего-нибудь расскажет.
Я бы для начала в какой-нибудь XML, JSON или хотя бы CSV вывод наладил бы.

Goury ★★★★★
()
Ответ на: комментарий от dissident

Как тебе будет удобно — так и юзай. К сожалению, у меня руки до libgit2 так и не дошли, поэтому оценить, насколько он будет удобен, не могу, хотя чисто идеологически я бы оставил tui для скриптов, а в компилируемых программах использовал бы либу.

Касательно вывода — лично я, конечно же, всеми лапками за Qt, но, как уже было правильно замечено, тебе стоит сосредоточиться на ядре. UI, к слову, можешь рисовать параллельно, будешь лучше понимать, что тебе понадобится.

А плагины, если уж ты берёшь Qt, реализуются через QPluginLoader

XMs ★★★★★
()

Я хочу чтобы по умолчанию ось времени была по горизонтали

Не поверишь, полез недавно за каким-то хером подглянуть в книжку Pro Git (там тоже деревья коммитов в горизонтальном виде показаны) и понял, что сам о таком мечтаю. Тоже подумывал в свободное время запилить хотя бы просмотрщик веток с горизонтальным отображением.

nvevg
()
Ответ на: комментарий от dissident

Так я так и не понял мне брать libgit2 или парсить вывод git ocommnd? Просто я через пару дней начну это писать. Тестировать на сорцах Линукса сразу с визуалицией, чтобы видеть справляется ли или виснет. Никакого говнопитона. Вывод XML как советует @Goury мне не вперся. Мне что его с чаем есть? Проверять так проверять, а именно:

  • Реально ли у libgit запрашивать частями?
  • Не упадет ли он в задумчивость если юзер так отдалит визуализацию, что надо будет показать все? Показывать только бранчи тогда?

@Goury ситуации выйдут в стирке. На кой мне твой говнопитон и го вноxml? Будет C++ wrapper над libgit либо утилитой git с парсингом выхлопа (QT-agmostic) и пойстейштий рисовалбьтщик графов в QR и Linux sources как test data. А с говноxml’а, что я пойму?

Вопрос technology stack решен: QT, QPainterView, QPluginLoader/ Остался вопрос libgit2 или парсинг вывода команд?

dissident ★★
() автор топика
Последнее исправление: dissident (всего исправлений: 1)

При этом расстояние между коммитами было определено временем между ними

Не хочешь

t184256 ★★★★★
()
Ответ на: комментарий от t184256

При этом расстояние между коммитами было определено временем между ними

Не хочешьм

Почему? Можно ведь сделать «птичку» насчет этого «сеттинга».

dissident ★★
() автор топика
Ответ на: комментарий от t184256

Кроме того, как я писал выше, каждый бранч, например, или нечто, что родилось путем применения фильтров, можно будет превратить в обычный плоский список коммитов.

Я вот только не решил закладками это реализовать или «подокном» в этаком tiling layout’е или вообще floating окном как в гимпе. При закладках тыкать мышью надо. А так, фильтры обновил и список обновился и видно на одном экране. Без обид, но ты мой первый пост по диагонали явно читал. Я над тулзой думал с полгода и сейчас, скоро вот уже, воды отойдут.

dissident ★★
() автор топика
Ответ на: комментарий от dissident

Нарисуй для небольшого репозитория без merge-коммитов, хоть gnuplot’ом да paint’ом поверх, да посмотри. Ни одна из многочисленных дат у коммита тебя не устроит. Коммиты будут неприлично сильно группироваться в одной точке, визуально будут доминировать длинные нафиг неинтересные горизонтальные куски.

Если бы это можно было бы полезно нарисовать без слез и читов, оно было бы в каждом гитлабе.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

Мне интересно было бы увидеть, что 3 месяца в проекте ничегошеньки не делалось. А gnplot рисует кашу всегда так что не аргумент.

dissident ★★
() автор топика
Последнее исправление: dissident (всего исправлений: 1)

Перед выбором ui надо сначало выяснить, решается ли данная задача для git в общем случае. Hint: git не хранит в коммите информацию о ветке.

amm ★★
()

Да, это было бы удобно. Тоже теперь такое хочу.

Zhbert ★★★★★
()

почему-то до меня никто не сделал

Наверное потому, что для работы это ненужно. Хотя сама по себе идея норм, как тулза для анализа существующих проектов «со стороны». Но всё таки хотелось бы чтобы ты формализовал какие-то use-cases. Какую конкретно проблему всё это должно решать?

no-such-file ★★★★★
()
Ответ на: комментарий от amm

Перед выбором ui надо сначало выяснить, решается ли данная задача для git в общем случае. Hint: git не хранит в коммите информацию о ветке.

Если будет fast-forward, то, конечно, ничего не будет видно, если будет merge коммит, то информация будет в commit message.

dissident ★★
() автор топика
Ответ на: комментарий от no-such-file

Узнать, как развивается/развивался проект. Ну и как альтернатива мертворожденному gitk и всем его убогим клонам. Код будет в общет доступе, кто захочет сделать из него GitKraken2 - welcome.

dissident ★★
() автор топика
Ответ на: комментарий от dissident

А реальная каша эта эта ХУЕ..НЬ. Сейчас поробую скрин найти: https://i.stack.imgur.com/Q6oU3.png. Кто-нибудь понимает ХУЕ..НЬ (или ПО..ЕНЬ, если вам это ближе) справа сверху? Там такие палки еще с кружками, похожие на анальные секс-игрушки (не спрашивайте, откуда я знаю, что похожи, просто поверьте, они действительно похожи.

Эти дилды никто никогда не смотрит. Кстати, из-за дилд и идея родилась, когда я на работе просил объяснить сотрудников «WTF am I reading?!» и никто внятно объяснить не смог.

А в моей идее все ясно. Хотя да, чекбокс «virtualize time axis» или типо того (никогда не умел называть вещи), ну т.е., чтобы ось времени не была осью времени, а просто ХУ..ТЕНЬЮ. Но бранчи будут понятны. И будет DSL фильтры и плоский список коммитов, иеняющийся on-the-fly.

Что еще господину не нравится? В сад! (с)

PS Да я понимаю, конечно, что https://lurkmore.so/images/9/9d/Dobeisa.jpeg, но все же с чего-то начинать надо. Лезть помогать в проекты других вьюверов глупо - у них у всех по три х..я, крылья, две матки, они несут яйца и не факт, что выживет хоть один кроме tig.

dissident ★★
() автор топика
Последнее исправление: dissident (всего исправлений: 2)
Ответ на: комментарий от t184256

Если бы это можно было бы полезно нарисовать без слез и читов, оно было бы в каждом гитлабе.

Так или иначе, спасибо тебе за мнение, если бы оно мне было побоку - я бы сюда не писал.

Возможно ты прав, и функционал придется сильно упростить. Но все равно это IMHO будет удобнее чем tig (мне). А раз мне, то может и кому-то еще.

dissident ★★
() автор топика
Ответ на: комментарий от t184256

Кашу кстати при zoom out можно как кашу и рисовать - утолстить линию. При zoom in начинать показывать индивидуальные бранчи, а при еще большем zoom im - коммиты. Не вижу пока тут нерешаемых проблем. Наверняка, потому что еще не начал делать.

PS Gitlab, кстати, редкостная дрянь. BitBucket в 10 раз лучше.

dissident ★★
() автор топика

Ты макеты нарисуй, для нескольких состояний, ручками по линейке. Проработай свою идею, на реальном репозитории. Можешь даже не показвать тут. Все хотят какие-то абстрактные хотелки, ч сам хочу, для управления и индикации гита. А по факту, ничего лучше существующего не запилили, как видим. Графы не так просто визуализировать, как кажется, да и еще что бы и толк был

zendrz ★★
()
Ответ на: комментарий от zendrz

Ну горизонтально же рисуют они хрень какую-то, правда, из которой ничего не понятно. А за совет спасибо.

dissident ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.