Можно ли добавить SHA моего текущего коммита в шаблон файла ядра? - PullRequest
0 голосов
/ 26 августа 2018

Я хочу добавить git sha в шаблон файла ядра, чтобы точно знать, какой коммит был использован для создания файла ядра.Есть ли способ сделать это?

1 Ответ

0 голосов
/ 26 августа 2018

Мне не понятно, что вы подразумеваете под "шаблоном файла ядра".(В частности, когда происходит сбой процесса и ядро ​​Linux генерирует дамп ядра, он использует kernel.core_pattern. Этот параметр является общесистемным, а не отдельным процессом. Существует способ запустить вспомогательную программу - см. Какизменить шаблон ядра только для конкретного приложения? - но это только уводит вас; вам все еще нужно написать эту программу. См. также https://wiki.ubuntu.com/Apport.) Но здесь есть общая проблема, которая имеет некоторый хакерский характер.решения, все из которых являются вариантами довольно очевидного метода, который все еще немного умен.

Общая проблема

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

Короче говоря, невозможно зафиксировать хеш коммита коммита внутри коммита.

Хакерское решение

Общая идея - записать неотслеживаемый файлкоторый вы используете в процессе сборки, так что двоичный файл содержит хеш коммита где-то легко найти.Для проектов, созданных с помощью Make, см. , как включить git commit-number в исполняемый файл c ++? для некоторых методов.

Такой же подход можно использовать при сборке тарболлов.Git имеет возможность встраивать хеш-идентификатор файла (объект blob) в файл рабочего дерева, используя фильтр идент , но это идентификатор файл , который обычно бесполезен.Таким образом, вместо этого, если вы используете git archive для создания файлов tar или zip, вы можете использовать export-subst, как описано в документации по gitattributes и упоминается в документации git archive .Обратите внимание, что в архиве tar или zip также содержится непосредственно идентификатор хеша коммита.

Наконец, вы можете написать свой собственный настраиваемый фильтр, который внедряет хеш коммит в файл рабочего дерева.Это может быть полезно в языках, где нет эквивалента внешнего процесса make , запускаемого для создания двоичного файла.Проблема здесь в том, что, когда грязный фильтр читает HEAD, ему присваивается значение до , когда git checkout заканчивается, а не значение после , когда он заканчивается.Это делает слишком сложным извлечение правильного хеш-идентификатора коммита (если есть даже правильный - обратите внимание, что git describe добавит -dirty, если указано, чтобы указать, что рабочее дерево не соответствует коммиту HEADпри необходимости).

...