Как изменить PKGBUILD, который использует источники мерзавца для получения по запросу только мелкого клона?

Если Вы обращаетесь к параметрам командной строки (например, -d -f2, и в Вашем первом примере 'some.text'), они все переходят к связанной программе.

Параметры командной строки могут также содержать информацию, которая указывает, куда произведенный переходит в, или вход прибывает из. Например, в первом примере присутствие имени файла указывает, что данные прибывают из файла, в то время как во втором примере отсутствие имени файла подразумевает вход от stdin. В обоих случаях вывод переходит в stdout.

18
14.09.2014, 11:45
5 ответов

Часто apt-get предпочтет удалить десятки пакетов вместо того, чтобы просто обновить пару других пакетов.

Обычно я запускаю aptitude в интерактивном режиме, выбираю пакет, который я хочу установить с помощью +, и затем проверяю, какие другие пакеты могут быть разбиты этим действием (переход к следующему «разбитому» пакету с помощью клавиши 'b'. Часто просто обновление этих (снова с +) разрешит проблему с небольшими хлопотами. Когда все разрешится, бей «г» за «иди и делай это.» Он покажет сводку того, что будет происходить (страница через полный список, это цветной код, чтобы помочь), а затем нажмите 'g' снова, когда удовлетворены.

-121--175571-

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

См. также обсуждение , где предлагается обходной путь через xdotool . Если вы решили пойти по той дороге, вы, вероятно, хотите сохранить положение мыши и восстановить его после всего сделано.

-121--108722-

Это можно сделать с помощью пользовательского агента . Я не очень понимаю Arch упаковки или как dlagents работают, поэтому у меня есть только ответ на взлом, но это получает работу.

Идея состоит в том, чтобы изменить PKGBUILD для использования пользовательского агента загрузки. Я изменил источник

"${pkgname%-git}::git+http://github.com/Itseez/opencv.git"

на

"${pkgname%-git}::mygit://opencv.git"

, а затем определил новый агент, называемый mygit , который выполняет клон неглубокого размера. Я сделал это, добавив в массив DLAGENTS в /etc/makepkg.conf следующий dlagent:

'mygit::/usr/bin/git clone --depth 1 http://github.com/Itseez/opencv.git'

Я думаю, что вы могли бы определить этот агент загрузки где-то еще, но я не знаю, как. Также обратите внимание, что клонируемый репозиторий жестко кодируется в команде. Опять же, этого, вероятно, можно избежать. Наконец, расположение загрузки не то, что ожидает PKGBUILD. Чтобы обойти это, я просто перемещаю репозиторий после его загрузки. Я делаю это, добавляя

mv "${srcdir}/../mygit:/opencv.git" "${srcdir}/../${pkgname%-git}"

в начале функции pkgver .

Я думаю, что более чистым решением было бы выяснить, что git + http dlagent делает и уточнить это временно. Это должно избежать всех аспектов взлома решения.

13
27.01.2020, 19:45

Согласно https://bugs.archlinux.org/task/23065 (предоставлено jasonwryan), добавление функции поверхностного клонирования в AUR PKGBUILD было элементом списка желаний, который был закрыто в субботу, 5 марта 2011 года, с комментарием:

Причина закрытия: Не будет реализовано

Это говорит о том, что этого не произойдет, если кто-то не отправит патч.

Как я предположил в комментариях автора, то, что он пытается сделать, почти наверняка можно выполнить, разбив процесс на два этапа:

  1. Клонировать репозиторий git с помощью мелкого клона.
  2. Запустить рецепт PKGBUILD но укажите на локальный клон. я не пользователь Arch, поэтому не знаю, так ли это, но я бы очень удивлен системой сборки пакетов, которая заставляла пользователей клонировать репозитории с удаленного компьютера для сборки пакетов.
6
27.01.2020, 19:45

Лично я модифицировал скрипт makepkg и он работает как шарм:

# vim `which makepkg` +/clone
...
541         msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
542         if ! git clone --mirror "$url" "$dir"; then
543             error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
...

Добавление "-зеркала -одиночка -глубина 1" к команде "git-клон":

541         msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
542         if ! git clone --mirror --single-branch --depth 1 "$url" "$dir"; then
543             error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"

Вот другой вид:

--- makepkg ...
+++ makepkg-patched ...
@@ -539,7 +539,7 @@

    if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
        msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
-       if ! git clone --mirror "$url" "$dir"; then
+       if ! git clone --mirror --single-branch --depth 1 "$url" "$dir"; then
            error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
            plain "$(gettext "Aborting...")"
            exit 1
11
27.01.2020, 19:45

Если вы не хотите изменять сценарии makepkg.

как описано здесь , укажите DEVELSRCDIRв файле /etc/yaourtrcили ~/.yaourtrcна какую-либо постоянную папку. Тогда все проверки репозитория (git/svn/... )будут происходить в этой папке. После клонирования репозитория каждый раз вместо полного клонирования будет выполняться только быстрая выборка с новейшими версиями.

1
27.01.2020, 19:45

Извините, что отвечаю на вопрос, но мне не хватает ума, чтобы добавить комментарий.

Вдохновленный @StrongBad, я добавил новый протокол для makepkg, и он выглядит некрасиво, но работает:

'sgit::/usr/bin/emacs --batch --eval (shell-command\ (concat\ \"git\ clone\ --depth=1\ \"\ (replace-regexp-in-string\ \"#\"\ \"\ --\"\ (substring\ \"%u\ \"\ 1))\ \"%o\"))'

Помимо Emacs, здесь можно использовать любой другой интерпретатор. Затем необходимо экранировать пустые места, чтобы их можно было рассматривать как один аргумент, и это то, что Bash не может архивировать.

0
04.04.2020, 08:09

Теги

Похожие вопросы