ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: ALT Devel discussion list <devel@lists.altlinux.org>
Subject: Re: [devel] zsh and git
Date: Fri, 6 Jul 2007 12:55:32 +0400
Message-ID: <20070706085532.GA29250@solemn.turbinal> (raw)
In-Reply-To: <20070706071502.GG16393@basalt.office.altlinux.org>

[-- Attachment #1: Type: text/plain, Size: 4816 bytes --]

On Fri, Jul 06, 2007 at 11:15:02AM +0400, Dmitry V. Levin wrote:
> Это зависит.  Если у пакета upstream в git'е, и бранч, из которого ведётся
> сборка пакета, основан не на релизах а на upstream'ном git'е, то я вижу
> больше смысла пакетовать в srpm этот самый %name-%version-%release.tar,
> нежели %name-%version.tar (который имеет все шансы отличаться от
> релизного по составу файлов) с кумулятивным патчем.

Простой патч "не держит" как следует переименование файлов.
У меня есть пакет напр. perl-DBI, в котором я переименовал
Changes -> lib/DBI/Changes.pod.  Патч будет большим и ценность
такого патча будет низкой.

> Не вижу в этом проблемы.  У меня есть такой забавный пакетик faketime.
> В нём кода на несколько килобайт, но он использует gnulib на несколько
> мегабайт.  Я поместил gnulib на другой бранч (у gnulib'а upstream'ный
> исходный код в git'е), поставил тэг, который время от времени передвигаю.

И что, ты делаешь фиктивный merge бранча gnulib, который не добавляет
файлов в основное дерево, только для того, чтобы получить общего предка,
чтобы создавался тарболл gnulib в .gear-rules?  "Это какой-то позор." :)

> > В общем, кумулятивный патч из gear-tags более-менее подходит только
> > тогда, когда сборки строго отсчитываются от официальных релизов.
> 
> У меня другое мнение.  Если сборки отсчитываются от upstream'а в
> каком-нибудь виде, в т.ч. снапшотов, то можно сделать кумулятивный патч.
> Можно даже сделать 2 кумулятивных патча: от последнего релиза до
> последнего снапшота, и от последнего снапшота HEAD.

В случае с перлом очень большой апстримный патч будет от последнего
релиза.

$ git-describe 5.8
5.8.8-702-gb49e4f0
$ git-diff 5.8.8..5.8 |wc -c
12912147
$

Такой патч ничего никому не даст, отключить его (и откатиться на 5.8.8)
всё равно нельзя.

> > Кроме того, кумулятивный патч не слишком-то решает проблемы.  Во-первых,
> > он всё же не слишком хорошо удовлетворяет GPL 2a.
> Почему?

Строго говоря, GPL 2a требует вносить изменения в сами файлы при каждом
измнении кода (т.е. указывать автора+дату+краткое описание).  Т.е. типа
cvs $Log$.  Это никогда не делалось, но хотя бы по названию отдельного
патча обычно можно было установить откуда он взялся и, соответственно,
кто его написал.  Если в кумулятивном патче содержатся изменения разных
авторов, то уже нельзя непосредственно установить какой кусок кем был
написан (не говоря уж о дате).

В GPLv3 это требование по форме несколько ослаблено, так что не знаю,
стоит ли считать его принципиальным.

> > Я подумал и пришел к выводу, что git не очень-то хорошо подходит для
> > поддержки нескольких "логически нарезанных" патчей.  Хранить патчи
> > отдельно в таком случае выходит проще, чем думать, как орагинзовать
> > бранчи и как их потом вливать друг в друга.
> > 
> > Проблема с git'ом вот какая.  Мы сделали измнение относительно версии1.
> > Потом мы делаем pull версии2.  merge не проходит из-за конфликта с
> > изменением.  Мы вручную правим конфликт.  Теперь информаци о том, что
> > представляет из себя изменение относительно версии2, частично потерялась
> > (оно похоронено в ручном разруливании конфликта).  То есть уже нельзя
> > логически однозначно восстановить патч для версии2.
> 
> Можно сделать rebase, заново разрулить конфликты и получить патчи,
> сделанные для новой версии, но.  Это другая модель разработки, обычно
> не очень удобная, поскольку утрачивается история.

Можно делать вот как: не допускать конфликтных мержев (если они
задеваются локальными изменениями в коде).  Если мерж оказывается
конфликтным, то нужно сначала откатить (revert) те изменения, из-за
которых получается конфликт.  Потом сделать бесконфликтный мерж.
А потом заново эти патчи накатить, уже разруливая конфликт.

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

В общем, git довольно дубовая система, она не решает тонких проблем,
а просто не обращает на эти проблемы внимания.  Впрочем, всё равно никто
не знает, как надо "по-хорошему" решать эти "тонкие проблемы".  Вроде в
darcs какие-то идеи на этот счет были.

> > В идеале нужна такая система, которая позволяет "логически
> > восстанавливать" патч для каждой версии, а не хоронить конфликты
> > под мёржами.
> > 
> > ПОСЛЕ КОНФЛИКТНОГО МЁРЖА ПАТЧ УЖЕ НЕЛЬЗЯ ОТКАТИТЬ РЕВЁРТОМ,
> > правильно я понимаю?
> 
> Можно, при этом, скорее всего, придётся разрулить новый конфликт.

Ну вот получается, что в ряде случаев патчи в src.rpm пакете отключать
проще, чем откатывать "старые" локальные изменения в git'е.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2007-07-06  8:55 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-04 19:44 Michael Shigorin
2007-07-05  5:52 ` Aleksey Avdeev
2007-07-05  7:12 ` Michael Shigorin
2007-07-05  7:46   ` [devel] [JT] " Alexey I. Froloff
2007-07-05  7:56     ` Michael Shigorin
2007-07-06  7:15 ` [devel] " Dmitry V. Levin
2007-07-06  8:55   ` Alexey Tourbin [this message]
2007-07-06  9:08     ` Dmitry V. Levin
2007-07-21 19:46       ` Alexey Tourbin
2007-07-22  8:37         ` Dmitry V. Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070706085532.GA29250@solemn.turbinal \
    --to=at@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git