ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: devel@lists.altlinux.org
Subject: Re: [devel] .gear/rules tar:, diff: и .gitattributes export-ignore
Date: Fri, 14 Jan 2011 19:09:28 +0300
Message-ID: <20110114160928.GD6580@newmaster.mivlgu.local> (raw)
In-Reply-To: <20110114144951.GA5645@altlinux.org>

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

On Fri, Jan 14, 2011 at 05:49:51PM +0300, Dmitry V. Levin wrote:
> On Fri, Jan 14, 2011 at 05:03:58PM +0300, Sergey Vlasov wrote:
> > On Fri, Jan 14, 2011 at 03:26:45PM +0200, Sergey Shilov wrote:
> > > Начиная с версии R13B03 апстрим переехал на https://github.com/erlang/otp.git 
> > > :-)
> > 
> > Ага, и там есть файл .gitattributes:
> > 
> > .gitattributes export-ignore
> > .gitignore export-ignore
> > 
> > Вот как раз из-за этого файла (а не .gitignore) git archive и выбрасывает
> > из создаваемого архива файлы, для которых указан атрибут export-ignore.
> > 
> > Явной опции для отключения этой функции у git archive нет, но можно перед
> > его вызовом вписать в .git/info/attributes строку:
> 
> Но, поскольку локальные изменения в .git/info/ не передаются при git push
> и git fetch, это не очень удобно использовать при распределенной
> разработке с использованием gear.

Я имел в виду, что это можно делать в gear (правда, сейчас там создаются
только временные GIT_OBJECT_DIRECTORY и GIT_INDEX_FILE, но в принципе
отсюда уже недалеко и до создания полноценного временного репозитория со
своим .git/info/attributes).  Это, кроме всего прочего, устранит возникшую
сейчас зависимость поведения gear от содержимого .git/info/attributes в
локальном репозитории.

Хотя вообще это не очень красивый объезд.  Ну и export-ignore - это не
единственный атрибут, обрабатываемый git archive; есть ещё export-subst,
приводящий к изменению содержимого файлов при экспорте, что точно так же
может приводить к генерации в дальнейшем патчей, не накладывающихся на
результат git archive.

Вообще эту проблему можно решать несколькими способами:

 1) Создавать в gear временный репозиторий с .git/info/attributes, в
    котором принудительно сбрасывать атрибуты export-ignore и
    export-subst.  Плюсы: можно реализовать уже сейчас, изменяя только
    gear (не требуется патчить сам git).  Минусы: если апстрим при выпуске
    релизов использует git archive, генерируемый gear архив перестанет
    совпадать с апстримным (в случае использования export-ignore будет
    содержать лишние файлы, для export-subst - нераскрытые шаблоны); при
    появлении в новой версии git нового атрибута, обрабатываемого git
    archive, придётся вновь исправлять gear.

 2) Добавить в git archive опцию --ignore-attributes, полностью
    отключающую обработку атрибутов.  Этот вариант отличается от 1) только
    большей устойчивостью к возможным будущим изменениям в git archive;
    однако появляется требование использования вместе с gear и новой
    версии git.  Правда, можно добавить в gear ещё и определение наличия в
    используемой версии git archive нужной опции, и работу по варианту 1)
    в случае её отсутствия.

 3) Можно пойти другим путём - решить, что не только команда tar в
    .gear/rules должна обрабатывать .gitattributes, но и команды diff
    должны давать результат, соотвествующий команде tar.  Например, можно
    при формировании diff использовать не git diff-tree, а извлечь через
    git archive оба дерева и применить к ним обычный diff.  В этом случае
    получаемый diff не будет содержать файлов, исключённых через
    export-ignore (если они исключены в обеих версиях), а также будет
    содержать раскрытые шаблоны для export-subst.  Существенные недостатки
    такого варианта тоже очевидны - в первую очередь это скорость работы
    (распаковка архивов с последующим сравнением всех файлов может занять
    значительное время), также пропадает возможность получения diff в
    формате git для последующего применения через git apply (например, при
    модификации бинарных файлов или символических ссылок).  Можно,
    конечно, ввести в набор команд .gear/rules в дополнение к обычному
    diff отдельную команду, работающую через git archive, для применения
    только в случаях, когда используется .gitattributes.

 4) Для ускорения работы варианта 3) можно попытаться добавить в git
    diff-tree код для обработки .gitattributes способом, аналогичным git
    archive, но это будет существенно сложнее, чем отрывать обработку
    атрибутов от git archive.

 5) Ничего не делать, предложить мантейнерам пакетов, столкнувшимся с
    проблемой, паковать tar: @name@-@version@-@release@ без выделения
    патчей в src.rpm.

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

  reply	other threads:[~2011-01-14 16:09 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-01-14  7:20 [devel] .gear/rules diff: и .gitignore Sergey Shilov
2011-01-14  8:05 ` REAL
2011-01-14  8:38 ` Ivan A. Melnikov
2011-01-14  9:03   ` REAL
2011-01-14  9:08     ` Ildar Mulyukov
2011-01-14 10:00       ` REAL
2011-01-14 10:29 ` Sergey Vlasov
2011-01-14 13:26   ` Sergey Shilov
2011-01-14 14:03     ` Sergey Vlasov
2011-01-14 14:49       ` Dmitry V. Levin
2011-01-14 16:09         ` Sergey Vlasov [this message]
2011-01-14 15:53       ` Sergey Shilov

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=20110114160928.GD6580@newmaster.mivlgu.local \
    --to=vsu@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