Git.alt/FAQ: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 29 промежуточных версий 7 участников)
Строка 1: Строка 1:
__NOTOC__
{{DISPLAYTITLE:git.alt/FAQ}}
[[Категория:Sisyphus]]
[[Категория:FAQ]]
[[Категория:Devel]]
== Q1 ==


Q: Как удалить ветку из репозитория [[git.alt]]?
== Q: Как удалить ветку из репозитория [[git.alt]]? ==


A: [[Git#Удаление удалённных веток|Как обычно в git]].
A: [[Git#Удаление удалённных веток в git|Как обычно в git]].
 
== Q: Почему не получается собрать переделанный тег? ==
 
A: Потому что теги фиксируются при добавлении задания на сборку.  Лучше не мухлевать, см. тж. [https://www.kernel.org/pub/software/scm/git/docs/git-tag.html git-tag(1)] насчёт "re-tag".
 
== Q: Можно ли оперативно получить собранный пакет? ==
 
A: [http://lists.altlinux.org/pipermail/devel/2009-February/166004.html да:]
# успешно собранные из gear-репозиториев пакеты сразу публикуются на [http://git.altlinux.org/gears/ /gears] (он же git.altlinux.org::gears)
# успешно собранные из srpm-файлов пакеты сразу публикуются на [http://git.altlinux.org/srpms/ /srpms] (он же git.altlinux.org::srpms)
 
Обратите внимание:
* обновления gear-пакетов НЕ публикуются на git.altlinux.org::srpms, а
* обновления srpm-пакетов НЕ публикуются на git.altlinux.org::gears.
 
Пакет, будучи однажды собранным из gear-репозитория, более не обновляется
на git.altlinux.org::srpms.
 
== Q: Почему не находится апстримный тег версии при постановке задания на сборку? ==
 
A:
* либо не был добавлен в {{path|.gear/tags/}} (при помощи {{cmd|gear-store-tags}}, ранее {{cmd|gear-update-tags}}),
* либо добавлен после тега, отправленного на сборку -- в таком случае можно получить подобное:
 
generating pkg.tar for collectd.git tag "4.10.3-alt1"... \
gear: .gear/rules line 1: Name "collectd-4.10.3" not found in tag list
gear: .gear/rules line 1: Failed to make archive
girar-task add: failed to create pkg.tar for collectd.git tag "4.10.3-alt1"
 
Рекомендуемый порядок команд для репозиториев, где апстримная ветка мержится в ту, на которой создаётся тег для сборки (например, <tt>sisyphus</tt>):
 
gear-store-tags -acv
gear-hsh
gear-create-tag
 
Во избежание забывания [http://lists.altlinux.org/pipermail/devel/2011-March/189512.html рекомендуется] добавить проверку перед коммитом (стоя в корневом каталоге gear-репозитория):
ln -snf /usr/share/git-core/templates/hooks/pre-commit.sample .git/hooks/pre-commit
 
== Q: Как просто скопировать неудавшееся чужое задание? ==
Вот какую команду я сочинил, чтобы скопировать (воссоздать) задание:
 
ssh girar task show 183273 | ./girar-build-args-from-girar-task-show | xargs ssh girar build
 
Если какие-то атрибуты не обрабатываются моим фильтром, то строчки останутся в неизменном виде (с двоеточием или <code>id=</code> -- это я обнаруживаю с помощью {{cmd|grep}} в примере использования ниже).
 
{{path|./girar-build-args-from-girar-task-show}} [http://git.altlinux.org/people/imz/public/girar-build-args-from-girar-task-show.git]:
 
#!/bin/sed -rf
1{ /test_only=yes/i --test-only
}
1h
1s!^((id|locked|shared|test_only)=[^ ]* ?)*repo=([^ ]+) ?((owner|state|try|iter)=[^ ]+ ?)*((depends=[^ ]+ ?)*)$!-b \3 \6!
1s!depends=!--deps !g
###############
# The actions #
###############
# srpm is not handled.
# rebuild is not an action shown by "task show" (rather, it's handled by "build").
s!^ [0-9]+:delete$!del!
# Only the default (sisyphus) is possible when using the build command:
s!^ [0-9]+:copy_repo=sisyphus$!copy!
# Simple way (commented out): fetch from the same original location
# (but unsafe: the tag may have changed):
#s!^ [0-9]+:dir=!!
# More reliable way: fetch from the old task:
/^ [0-9]+:dir=.*$/{
  s!^ ([0-9]+):dir=.*$!/tasks/@/gears/\1/git!
  G
  s!^(.*)@(.*)\n.*id=([^ ]+) .*$!\1\3\2!m
}
# The obligatory arguments:
s!^ [0-9]+:(tag_name|package)=!!
# Unneeded attributes; ignored:
s!^ [0-9]+:(userid|pkgname|tag_(id|author))=.*$!!
# Attributes we can't reuse; if you want to ignore them, uncomment:
#s!^ [0-9]+:relax_git_inheritance_check_for_commit=.*$!!
#s!^ [0-9]+:approved_by=.*$!!
# Usage example:
#
# for t in $(ssh girar task ls --all --brief | sed -re 's!^#([0-9]+) .*!\1!'); do \
#  ssh girar task show "$t" | ./girar-build-args-from-girar-task-show \
#  | if ! egrep -qs '(:|id=)'; then \
#      ssh girar build $(ssh girar task show "$t" | ./girar-build-args-from-girar-task-show) \
#      && ssh girar task rm "$t"; \
#    else echo "# Unhandled attrs in task $t!"; \
#    fi; \
# done
 
Это работает, если в исходном задании были только сборки из gear-repo (и прочее), но не из srpm. (Если реализуете для srpm, пожалуйста, поделитесь результатом!)
 
Массовый "перезапуск" заданий (только тех, которые полностью переработаны фильтром) делался мной примерно так:
 
for t in $(ssh girar task ls --all --brief | fgrep imz | sed -re 's!^#([0-9]+) .*!\1!'); do \
  if (( t / 1024 >= 179 )); then continue; fi; \
  ssh girar task show "$t" | ./girar-build-args-from-girar-task-show \
  | if ! egrep -qs '(:|id=)'; then \
      ssh girar build $(ssh girar task show "$t" | ./girar-build-args-from-girar-task-show) \
      && ssh girar task rm "$t"; \
    else echo "# Unhandled attrs in task $t!"; \
    fi; \
done
 
;Замечания:
Копировать ''удавшееся'' задание просто так, наверное, не имеет
большого смысла (потому что его результаты уже попали в репозиторий).
(Проигрывание ещё раз удавшегося задания -- другая задача. Это
происходит при регулярной тестовой пересборке Sisyphus.)
 
Проиграть ''своё'' задание в виде нового, наверное, не такая сложная
задача, потому что можно просто повторить свои shell-команды.
 
;Объяснение: делаем список чередующихся путей к gear-repo и тегов фильтрацией вывода {{cmd|task show}}:
 
$ ssh girar task show 153515
id=153515 locked=no shared=no test_only=yes repo=sisyphus owner=cas state=FAILED try=26 iter=1
  40:dir=/people/cas/packages/libwbxml.git
  40:tag_name=0.11.4-alt1
  40:tag_id=d8143b4e577da0cd3ec5510406e5544600318fca
  40:tag_author=cas <cas@altlinux.org>
  40:userid=cas
  40:pkgname=libwbxml
  100:userid=cas
  200:userid=cas
  300:userid=cas
  400:userid=cas
  440:dir=/people/cas/packages/lasso.git
  440:tag_name=2.5.0-alt1
  440:tag_id=e276eb2af0c557b67a4b44cc92343c3671f52e72
  440:tag_author=cas <cas@altlinux.org>
  440:userid=cas
  440:pkgname=lasso
...
 
См. также:
 
;[[girar/task-rerunner & recycler]]: копирует таск из одной сборочницы в другую; и отслеживает последний собранный таск.
;[[check-unmets]]: это пакет программ, призванных облегчить массовое обновление репозитория, содержащегося на базе girar. Такое массовое обновление может возникнуть, например, при портировании репозитория на другую аппаратную архитектуру. Пакет включает в себя средства для автоматического выявления проблем, информировании о выявленных проблемах через web-интерфейс и решения выявленных проблем в автоматическом и полуавтоматическом режимах. В настоящее время пакет check-unmets используется в проекте [[Ports/arm]].
 
== Q: Какие лимиты на сборочнице? ==
 
См. [[Hasher/Справочник#Лимиты на сборку у инкамингера]].
 
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=FAQ|category=FAQ|sortkey={{SUBPAGENAME}}}}

Текущая версия от 12:04, 26 декабря 2018


Q: Как удалить ветку из репозитория git.alt?

A: Как обычно в git.

Q: Почему не получается собрать переделанный тег?

A: Потому что теги фиксируются при добавлении задания на сборку. Лучше не мухлевать, см. тж. git-tag(1) насчёт "re-tag".

Q: Можно ли оперативно получить собранный пакет?

A: да:

  1. успешно собранные из gear-репозиториев пакеты сразу публикуются на /gears (он же git.altlinux.org::gears)
  2. успешно собранные из srpm-файлов пакеты сразу публикуются на /srpms (он же git.altlinux.org::srpms)

Обратите внимание:

  • обновления gear-пакетов НЕ публикуются на git.altlinux.org::srpms, а
  • обновления srpm-пакетов НЕ публикуются на git.altlinux.org::gears.

Пакет, будучи однажды собранным из gear-репозитория, более не обновляется на git.altlinux.org::srpms.

Q: Почему не находится апстримный тег версии при постановке задания на сборку?

A:

  • либо не был добавлен в .gear/tags/ (при помощи gear-store-tags, ранее gear-update-tags),
  • либо добавлен после тега, отправленного на сборку -- в таком случае можно получить подобное:
generating pkg.tar for collectd.git tag "4.10.3-alt1"... \
gear: .gear/rules line 1: Name "collectd-4.10.3" not found in tag list
gear: .gear/rules line 1: Failed to make archive
girar-task add: failed to create pkg.tar for collectd.git tag "4.10.3-alt1"

Рекомендуемый порядок команд для репозиториев, где апстримная ветка мержится в ту, на которой создаётся тег для сборки (например, sisyphus):

gear-store-tags -acv
gear-hsh
gear-create-tag

Во избежание забывания рекомендуется добавить проверку перед коммитом (стоя в корневом каталоге gear-репозитория):

ln -snf /usr/share/git-core/templates/hooks/pre-commit.sample .git/hooks/pre-commit

Q: Как просто скопировать неудавшееся чужое задание?

Вот какую команду я сочинил, чтобы скопировать (воссоздать) задание:

ssh girar task show 183273 | ./girar-build-args-from-girar-task-show | xargs ssh girar build

Если какие-то атрибуты не обрабатываются моим фильтром, то строчки останутся в неизменном виде (с двоеточием или id= -- это я обнаруживаю с помощью grep в примере использования ниже).

./girar-build-args-from-girar-task-show [1]:

#!/bin/sed -rf

1{ /test_only=yes/i --test-only
}

1h

1s!^((id|locked|shared|test_only)=[^ ]* ?)*repo=([^ ]+) ?((owner|state|try|iter)=[^ ]+ ?)*((depends=[^ ]+ ?)*)$!-b \3 \6!

1s!depends=!--deps !g

###############
# The actions #
###############

# srpm is not handled.
# rebuild is not an action shown by "task show" (rather, it's handled by "build").

s!^ [0-9]+:delete$!del!

# Only the default (sisyphus) is possible when using the build command:
s!^ [0-9]+:copy_repo=sisyphus$!copy!

# Simple way (commented out): fetch from the same original location
# (but unsafe: the tag may have changed):
#s!^ [0-9]+:dir=!!

# More reliable way: fetch from the old task:
/^ [0-9]+:dir=.*$/{
 s!^ ([0-9]+):dir=.*$!/tasks/@/gears/\1/git!
 G
 s!^(.*)@(.*)\n.*id=([^ ]+) .*$!\1\3\2!m
}

# The obligatory arguments:
s!^ [0-9]+:(tag_name|package)=!!

# Unneeded attributes; ignored:
s!^ [0-9]+:(userid|pkgname|tag_(id|author))=.*$!!

# Attributes we can't reuse; if you want to ignore them, uncomment:
#s!^ [0-9]+:relax_git_inheritance_check_for_commit=.*$!!
#s!^ [0-9]+:approved_by=.*$!!

# Usage example:
#
# for t in $(ssh girar task ls --all --brief | sed -re 's!^#([0-9]+) .*!\1!'); do \
#   ssh girar task show "$t" | ./girar-build-args-from-girar-task-show \
#   | if ! egrep -qs '(:|id=)'; then \
#       ssh girar build $(ssh girar task show "$t" | ./girar-build-args-from-girar-task-show) \
#       && ssh girar task rm "$t"; \
#     else echo "# Unhandled attrs in task $t!"; \
#     fi; \
# done

Это работает, если в исходном задании были только сборки из gear-repo (и прочее), но не из srpm. (Если реализуете для srpm, пожалуйста, поделитесь результатом!)

Массовый "перезапуск" заданий (только тех, которые полностью переработаны фильтром) делался мной примерно так:

for t in $(ssh girar task ls --all --brief | fgrep imz | sed -re 's!^#([0-9]+) .*!\1!'); do \
  if (( t / 1024 >= 179 )); then continue; fi; \
  ssh girar task show "$t" | ./girar-build-args-from-girar-task-show \
  | if ! egrep -qs '(:|id=)'; then \
      ssh girar build $(ssh girar task show "$t" | ./girar-build-args-from-girar-task-show) \
      && ssh girar task rm "$t"; \
    else echo "# Unhandled attrs in task $t!"; \
    fi; \
done
Замечания

Копировать удавшееся задание просто так, наверное, не имеет большого смысла (потому что его результаты уже попали в репозиторий). (Проигрывание ещё раз удавшегося задания -- другая задача. Это происходит при регулярной тестовой пересборке Sisyphus.)

Проиграть своё задание в виде нового, наверное, не такая сложная задача, потому что можно просто повторить свои shell-команды.

Объяснение
делаем список чередующихся путей к gear-repo и тегов фильтрацией вывода task show:
$ ssh girar task show 153515
id=153515 locked=no shared=no test_only=yes repo=sisyphus owner=cas state=FAILED try=26 iter=1
 40:dir=/people/cas/packages/libwbxml.git
 40:tag_name=0.11.4-alt1
 40:tag_id=d8143b4e577da0cd3ec5510406e5544600318fca
 40:tag_author=cas <cas@altlinux.org>
 40:userid=cas
 40:pkgname=libwbxml
 100:userid=cas
 200:userid=cas
 300:userid=cas
 400:userid=cas
 440:dir=/people/cas/packages/lasso.git
 440:tag_name=2.5.0-alt1
 440:tag_id=e276eb2af0c557b67a4b44cc92343c3671f52e72
 440:tag_author=cas <cas@altlinux.org>
 440:userid=cas
 440:pkgname=lasso
...

См. также:

girar/task-rerunner & recycler
копирует таск из одной сборочницы в другую; и отслеживает последний собранный таск.
check-unmets
это пакет программ, призванных облегчить массовое обновление репозитория, содержащегося на базе girar. Такое массовое обновление может возникнуть, например, при портировании репозитория на другую аппаратную архитектуру. Пакет включает в себя средства для автоматического выявления проблем, информировании о выявленных проблемах через web-интерфейс и решения выявленных проблем в автоматическом и полуавтоматическом режимах. В настоящее время пакет check-unmets используется в проекте Ports/arm.

Q: Какие лимиты на сборочнице?

См. Hasher/Справочник#Лимиты на сборку у инкамингера.