alterator-alternatives-1.0/000075500000000000000000000000001114623502200160405ustar00rootroot00000000000000alterator-alternatives-1.0/Makefile000064400000000000000000000002601114623502200174760ustar00rootroot00000000000000NAME=alternatives INSTALL=/usr/bin/install TEST_REQUIRES=alternatives all: clean: install: install-module check: check-module include /usr/share/alterator/build/module.mak alterator-alternatives-1.0/applications/000075500000000000000000000000001114623502200205265ustar00rootroot00000000000000alterator-alternatives-1.0/applications/alternatives.desktop000064400000000000000000000003351114623502200246230ustar00rootroot00000000000000[Desktop Entry] Encoding=UTF-8 Type=Application Categories=X-Alterator-System Icon=alternatives Terminal=false Name=Alternatives subsystem X-Alterator-URI=/alternatives X-Alterator-Weight=10 X-Alterator-Help=alternatives alterator-alternatives-1.0/backend3/000075500000000000000000000000001114623502200175125ustar00rootroot00000000000000alterator-alternatives-1.0/backend3/alternatives000075500000000000000000000022411114623502200221400ustar00rootroot00000000000000#!/bin/sh alterator_api_version=1 . alterator-sh-functions . /usr/share/alternatives/functions alternatives_list() { alternatives-list| sed -ne 's,^\(.*\) points to.*,\1,p'| sort } on_message() { case "$in_action" in list) case "$in__objects" in /) alternatives_list|write_enum ;; avail_candidate) [ -n "$in_name" ] || in_name="$(alternatives_list|head -n1)" [ -n "$in_name" ] || return grep -h "^$in_name[[:space:]]" "$auto_dir"/* | sed 's,[[:space:]]\+,\t,g' | cut -f2| write_enum ;; esac ;; read) [ -n "$in_name" ] || in_name="$(alternatives_list|head -n1)" [ -n "$in_name" ] || return write_string_param name "$in_name" local alternative="/$in__objects" ! grep -qs "^$in_name[[:space:]].*manual$" "$manual_file" write_bool_param manual "$?" write_string_param current "$(alternatives-list "$in_name" | sed -ne 's,^.* points to \(.*\)$,\1,p')" ;; write) if test_bool "$in_manual"; then alternatives-manual "$in_name" "$in_current" else alternatives-auto "$in_name" fi >/dev/null 2>/dev/null alternatives-update ;; esac } message_loop alterator-alternatives-1.0/design/000075500000000000000000000000001114623502200173115ustar00rootroot00000000000000alterator-alternatives-1.0/design/styles/000075500000000000000000000000001114623502200206345ustar00rootroot00000000000000alterator-alternatives-1.0/design/styles/alternatives.css000064400000000000000000000002141114623502200240440ustar00rootroot00000000000000.selector-chooser { width: 100%; } .selector-data { width: 100%; } .alternatives-list { width:50%; } .candidates-list { width:50%; } alterator-alternatives-1.0/help/000075500000000000000000000000001114623502200167705ustar00rootroot00000000000000alterator-alternatives-1.0/help/ru_RU/000075500000000000000000000000001114623502200200245ustar00rootroot00000000000000alterator-alternatives-1.0/help/ru_RU/alternatives.html000064400000000000000000000051411114623502200234140ustar00rootroot00000000000000 Help - ALT Linux Console

Подсистема альтернатив

Система управления пакетами (в данном случае — RPM) не допускает ситуации, когда один и тот же файл принадлежит одновременно нескольким пакетам — такая ситуация называется файловый конфликт. Тем не менее иногда требуется попеременно обращаться к нескольким разным файлам, используя один и тот же путь в файловой системе. Например, разные версии компилятора удобно вызывать как cc, разные реализации эмуляторов терминала — как xvt. Для этих целей была создана подсистема альтернатив. Альтернатива — это и есть тот самый разделяемый путь в файловой системе.

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

Существуют так называемые зависимые альтернативы. Например, при переключении альтернативы компилятора, автоматически переключаются альтернативы на все руководства к нему (manual pages). Однако ничто не препятствует и такие альтернативы переключать в ручном режиме.

alterator-alternatives-1.0/help/uk_UA/000075500000000000000000000000001114623502200177745ustar00rootroot00000000000000alterator-alternatives-1.0/help/uk_UA/alternatives.html000064400000000000000000000050211114623502200233610ustar00rootroot00000000000000 Help - ALT Linux Console

Підсистема альтернатив

Система управління пакетами (в даному випадку — RPM) не допускає ситуації, коли один і той же файл належить одночасно декільком пакетам — така ситуація називається файловий конфлікт. Проте іноді необхідно поперемінно звертатися до декількох різних файлів, використовуючи один і той же шлях у файловій системі. Наприклад, різні версії компілятора зручно викликати як cc, різні реалізації емуляторів терміналів — як xvt. Для подібних цілей була створена підсистема альтернатив. Альтернатива — це і є той самий поділювальний шлях у файловій системі.

В групі пакетів перераховуються претенденти на шлях у файловій системі — кандидати, а також вага кандидата. Підсистема альтернатив забезпечує вибір того з можливих кандидатів, вага якого більша ніж інших. Також є можливість перевести управління в ручний режим і явно вказати необхідного кандидата. В цьому випадку вага не має значення.

Існують, так звані, залежні альтернативи. Наприклад, при перемиканні альтернативи компілятора, автоматично будуть переключені й альтернативи на всі посібники до нього (manual pages). Однак ніщо не перешкоджає також перемикати такі альтернативи в ручному режимі.

alterator-alternatives-1.0/runtests000075500000000000000000000005551114623502200176620ustar00rootroot00000000000000#!/bin/sh -u . shell-unittest . alterator-unittest-functions datadir=test-data unitdir=test ### initialize special testing facility install -Dpm644 $datadir/qa /etc/alternatives/packages.d/qa alternatives-install qa for i in qa1-1 qa1-2 qa2-1 qa2-2; do touch /usr/bin/$i chmod +x /usr/bin/$i done ### runtests for i in "$unitdir"/*; do . $i;done runUnitTests alterator-alternatives-1.0/templates/000075500000000000000000000000001114623502200200365ustar00rootroot00000000000000alterator-alternatives-1.0/templates/alternatives/000075500000000000000000000000001114623502200225375ustar00rootroot00000000000000alterator-alternatives-1.0/templates/alternatives/index.html000064400000000000000000000026561114623502200245450ustar00rootroot00000000000000
Alternatives:


Candidates:
Choose candidate manually

In most cases candidates selection works well automatically using weight written in their config file, but you can choose variant manually

alterator-alternatives-1.0/test-data/000075500000000000000000000000001114623502200177265ustar00rootroot00000000000000alterator-alternatives-1.0/test-data/qa000064400000000000000000000001701114623502200202500ustar00rootroot00000000000000/usr/bin/qa1 /usr/bin/qa1-1 1 /usr/bin/qa1 /usr/bin/qa1-2 2 /usr/bin/qa2 /usr/bin/qa2-1 1 /usr/bin/qa2 /usr/bin/qa2-2 2 alterator-alternatives-1.0/test/000075500000000000000000000000001114623502200170175ustar00rootroot00000000000000alterator-alternatives-1.0/test/alternatives000064400000000000000000000034121114623502200214430ustar00rootroot00000000000000#!/bin/sh appendTests \ test_alternatives_read \ test_alternatives_write \ test_alternatives_list test_alternatives_read() { alternatives-manual /usr/bin/qa1 /usr/bin/qa1-1 >/dev/null 2>/dev/null assertRead "manual state" current /usr/bin/qa1-1 /alternatives name /usr/bin/qa1 assertRead "manual mode" manual '#t' /alternatives name /usr/bin/qa1 alternatives-auto /usr/bin/qa1 >/dev/null 2>/dev/null assertRead "default state" current /usr/bin/qa1-2 /alternatives name /usr/bin/qa1 assertRead "default mode" manual '#f' /alternatives name /usr/bin/qa1 } test_alternatives_write() { local rc= alterator-cmdline -l /alternatives action write name /usr/bin/qa2 manual '#t' current /usr/bin/qa2-1 grep -qs '^/usr/bin/qa2[[:space:]].*manual$' /etc/alternatives/manual && rc=0 || rc=1 assertEquals "turn on manual mode" "$rc" "0" alterator-cmdline -l /alternatives action write name /usr/bin/qa2 manual '#f' grep -qs '^/usr/bin/qa2[[:space:]].*manual$' /etc/alternatives/manual && rc=0 || rc=1 assertEquals "turn off manual mode" "$rc" "1" } alternatives_list() { alterator-cmdline -l "$@" action list -k name| LANG=C sort } test_alternatives_list() { local backend_list= expected_list= backend_list="$(alternatives_list /alternatives | grep /usr/bin/qa)" expected_list='/usr/bin/qa1 /usr/bin/qa2' assertEquals 'alternatives list' "$backend_list" "$expected_list" backend_list="$(alternatives_list /alternatives/avail_candidate name /usr/bin/qa1)" expected_list='/usr/bin/qa1-1 /usr/bin/qa1-2' assertEquals 'candidates list' "$backend_list" "$expected_list" assertEnumref "avail alternatives" /alternatives assertEnumref "avail candidates" /alternatives/avail_candidate name /usr/bin/qa1 } alterator-alternatives-1.0/ui/000075500000000000000000000000001114623502200164555ustar00rootroot00000000000000alterator-alternatives-1.0/ui/alternatives/000075500000000000000000000000001114623502200211565ustar00rootroot00000000000000alterator-alternatives-1.0/ui/alternatives/index.scm000064400000000000000000000035631114623502200230000ustar00rootroot00000000000000(document:surround "/std/frame") ;;; Functions (define (init-alternatives) (woo-catch/message (lambda() (alternativeslist enumref "/alternatives") (and (positive? (alternativeslist count)) (alternativeslist current 0))))) (define (read-alternatives name) (woo-catch/message (lambda() (let ((data (woo-read-first "/alternatives" 'name name))) (candidateslist enumref (list "/alternatives/avail_candidate/" 'name name) value (woo-get-option data 'current)) (manual value (woo-get-option data 'manual)))))) (define (write-alternatives) (woo-catch/message (lambda() (woo-write "/alternatives/" 'name (alternativeslist value) 'current (candidateslist value) 'manual (manual value))))) ;;; UI (gridbox columns "10;80;10" ;; (spacer) (label text (_ "Alternatives:")) (spacer) ;; (spacer) (document:id alternativeslist (listbox (when selected (read-alternatives (alternativeslist value)) (update-effect)))) (spacer) ;; (label colspan 3) ;; (spacer) (separator) (spacer) ;; (spacer) (label text (_ "Candidates:") name "current") (spacer) (spacer) (document:id candidateslist (listbox name "current")) (spacer) ;; (spacer) (document:id manual (checkbox text (_ "Choose candidate manually") name "manual")) (spacer) (spacer) ;; (label text (small (_ "In most cases candidates selection works well automatically using weight written in their config file, but you can choose variant manually")) text-wrap #t) (spacer) ;; (label colspan 3) ;; (spacer) (document:id apply-button (button text (_ "Apply") align "left" (when clicked (write-alternatives)))) (spacer)) ;;; Logic (effect-disable "current" "manual" #f) (document:root (when loaded (init-alternatives) (read-alternatives "") (init-effect)))