скрипт для рекурсивной проверки и выбора зависимостей - PullRequest
0 голосов
/ 10 февраля 2011

Я написал скрипт, который делает это, но это один из моих первых скриптов, поэтому я уверен, что есть лучший способ:)

Дайте мне знать, как бы вы поступили так.
Я ищу простой, но эффективный способ сделать это.

Вот важная справочная информация:
(Это может немного смущать, но, надеюсь, к концу это будет иметь смысл.)

1) Показывает структуру / расположение соответствующих папок и файлов.

 main dir
 +-- config
   +-- default
     +-- config
       +-- config.file
       +-- package.file
 +-- package
   +-- $b
     +-- $a
       +-- $a.cache file
 +-- scripts
   +-- 40+ scripts

2) Package.file, расположенный по адресу ./config/default/config/packages, представляет собой файл с разделителями-пробелами.
field5 - это «имя пакета», которое я буду называть $a для объяснения.
field4 - это имя каталога, содержащего $a .dir, который я назову $b
field1 показывает, выбран пакет или нет,
«X» (заглавная x) для выбранного и «O» (заглавная o, как в оранжевом) для не выбранного.

Вот пример того, что может содержать package.file:

...  
X ---3------ 104.800 database gdbm 1.8.3 / base/library CROSS 0  
O -1---5---- 105.000 base libiconv 1.13.1 / base/tool CROSS 0  
X 01---5---- 105.000 base pkgconfig 0.25 / base/tool CROSS 0  
X -1-3------ 105.000 base texinfo 4.13a / base/tool CROSS DIETLIBC 0  
O -----5---- 105.000 develop duma 2_5_15 / base/development CROSS NOPARALLEL 0  
O -----5---- 105.000 develop electricfence 2_4_13 / base/development CROSS 0  
O -----5---- 105.000 develop gnupth 2.0.7 / extra/development CROSS NOPARALLEL FPIC-QUIRK 0   
...

3) Почти для каждого пакета, указанного в "packages.file", есть соответствующий ".cache file"
Файл .cache для пакета $ a будет расположен по адресу ./package/$b/$a/$a.cache
Файлы .cache содержат список зависимостей для этого конкретного пакета.

Вот пример того, как один из файлов .cache может выглядеть следующим образом.
Обратите внимание, что зависимости - это field2 строк, содержащих «[DEP]»
Эти зависимости являются именами пакетов в "package.file"

[TIMESTAMP] 1134178701 Sat Dec 10 02:38:21 2005
[BUILDTIME] 295 (9)
[SIZE] 11.64 MB, 191 files

[DEP] 00-dirtree
[DEP] bash
[DEP] binutils
[DEP] bzip2
[DEP] cf
[DEP] coreutils
... 

Итак, учитывая все это ... Я ищу сценарий оболочки, который:

Изнутри «главного каталога»
Смотрит на ./config/default/config/packages файл
и находит "выбранные" пакеты
и читает соответствующий .cache
Затем составляется список зависимостей, исключающий уже выбранные пакеты
Затем выбирает зависимости (изменяя field1 на X) в файле ./config/default/config/packages
и повторяется, пока все зависимости не будут выполнены

Примечание. Сценарий в конечном итоге окажется в «каталоге сценариев» и будет вызываться из «главного каталога».

Если это не ясно, дайте мне знать, что нужно уточнить.

Для тех, кому интересно, я играю с T2 SDE .
Если вы хотите поиграть с Linux, возможно, стоит взглянуть.
Если вы собираетесь опубликовать сценарий для меня, пожалуйста, убедитесь, что он хорошо прокомментирован, чтобы помочь мне учиться.

1 Ответ

1 голос
/ 10 февраля 2011

tl'dr :) Но около недели назад мне понадобился легкий портативный решатель зависимостей.Я посмотрел на portage - это слишком офидиан, так сказать.Затем я посмотрел на opkg.Opkg почти сработало, но потом я прочитал о некоторых необычных способах использования make, и, наконец, я был доволен make.Он переносим, ​​делает все, что мне нужно (с надлежащим Makefile), и обладает врожденной способностью обрабатывать зависимости.

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

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