beldmit: (Программизм)
[personal profile] beldmit
Сгребу-ка я сюда все свои не очень оформленные мысли, а заодно и ссылки.

Вводная. У меня есть два основных пакета, с которыми я на работе ковыряюсь, OpenSSH и OpenSSL. И там и там 60+ патчей, которые при каждом ребейзе приносят адскую боль. OpenSSL я знаю хорошо и поэтому с этой болью я почти смирился, OpenSSH я знаю средне.

Случаи, когда код переписан содержательно, всегда требуют индивидуального подхода и деваться от этого некуда. Но хочется минимизировать технические вещи.

Очевидно, что чисто по времени при ребейзе дофига жрут сцепленные патчи. Мы поправили строку из контекста, и теперь у нас конфликт. Мы решили конфликт, нарушив тем самым контекст следующего патча. Возможно, эти два патча стоит склеить в один (или нет, если они решают разные проблемы). Но для этого их надо идентифицировать как "сцепленные".

Ещё очевидно, что патчи к одной подсистеме лучше прикладывать подряд, потому что контекст (в голове). И опять же склеить там, где возможно.

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

Номера затронутых строк и строк контекста так просто из patch/diff не получить. Во всяком случае, я не нашёл. Ну теоретически эту часть я могу хоть на Perl написать, не rocket science. Найти сцепленные патчи так можно, и дальше уже решать, что с этим делать.

Следующий интересный вопрос - а что ещё с этим можно сделать, чтобы улучшить поддерживаемость набора патчей in the long run.

На уровне разработки я нашёл совершенно чудный инструмент git absorb, который разбирает свежие изменения на fixup-ы и новые содержательные. Не знаю, как он потянет 60+ коммитов, конечно.

Вот тут пишут про замену diff для GitHub, но в основном для web-интерфейса.

Difftastic - продвинутый diff, не по строкам, а по логическим блокам

Mergiraf - продвинутый merge.

В дискуссию приглашается, например, [personal profile] spamsink

Date: 2024-12-25 04:35 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

На тему git absorb ещё есть git autofixup. Кажется, с немного другим принципом действия, но той же решаемой задачей.

Date: 2024-12-25 05:05 pm (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner

Ну как не получить номера строк?

Берем типичный патч, context unified diff. И ччто мы там видим?

--- a/tests/playTests.sh
+++ b/tests/playTests.sh
@@ -1857,8 +1857,13 @@

Вот то что после @@ это номер первой строки блока и через запятую количество затрнутых строк.

Date: 2024-12-25 05:15 pm (UTC)
dimas: (Default)
From: [personal profile] dimas
А с какой стороны у тебя больше патчей - твои локальные или что приходит из мейнстрима? Может надо просто в другую сторону мержить?

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

dft и mf я себе в конфигурацию прикрутил, но пока особо не использовал.

Date: 2024-12-25 06:41 pm (UTC)

Date: 2024-12-25 09:37 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Да я вообще пока что не вижу такой науки, которая бы решала эту задачу.

Date: 2024-12-26 10:29 am (UTC)
livelight: (Default)
From: [personal profile] livelight
Но зачем ребейз?!

Profile

beldmit: (Default)
Dmitry Belyavskiy

May 2025

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 14th, 2025 09:21 am
Powered by Dreamwidth Studios