Sisyphus
: 1 2023 | : 18631 | : 37882705
en ru br
ALT
S:3.0-alt1
5.1: 2.0-alt1
4.1: 1.0-alt2.M41.3
4.0: 0.7-alt1
3.0: 0.1.1.2-alt4
www.altlinux.org/Changes

:: //
: alterator-alternatives

                   Gear   Bugs and FR  Repocop 

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<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<title>Help - ALT Linux Console</title>
<meta http-equiv="content-type" value="text/html;charset=utf-8"/>
</head>
<body>
<h2>Подсистема альтернатив</h2>
<p>Система управления пакетами (в данном случае&nbsp;&mdash; RPM) не допускает ситуации,
когда один и тот же файл принадлежит одновременно нескольким пакетам&nbsp;&mdash; такая ситуация
называется <em>файловый конфликт</em>. Тем не менее иногда требуется попеременно обращаться к
нескольким разным файлам, используя один и тот же путь в файловой системе. Например, разные версии
компилятора удобно вызывать как <em>cc</em>, разные реализации
эмуляторов терминала &mdash; как <em>xvt</em>. Для этих целей была создана
подсистема альтернатив. <em>Альтернатива</em>&nbsp;&mdash; это и есть тот самый
разделяемый путь в файловой системе.
</p>
<p>В группе пакетов перечисляются претенденты на путь в файловой
системе&nbsp;&mdash; <em>кандидаты</em>, а также <em>вес</em> кандидата. Подсистема альтернатив
обеспечивает выбор того из возможных кандидатов, вес которого больше
остальных. Возможно перевести управление в ручной режим и явно
указать необходимого кандидата, в этом случае вес не имеет значения.
</p>
<p>Существуют так называемые <em>зависимые</em>
альтернативы. Например, при переключении альтернативы компилятора,
автоматически переключаются альтернативы на все руководства к нему (manual
pages). Однако ничто не препятствует и такие альтернативы переключать
в ручном режиме.
</p>
</body>
</html>
alterator-alternatives-1.0/help/uk_UA/000075500000000000000000000000001114623502200177745ustar00rootroot00000000000000alterator-alternatives-1.0/help/uk_UA/alternatives.html000064400000000000000000000050211114623502200233610ustar00rootroot00000000000000<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<title>Help - ALT Linux Console</title>
<meta http-equiv="content-type" value="text/html;charset=utf-8"/>
</head>
<body>
<h2>Підсистема альтернатив</h2>
<p>Система управління пакетами (в даному випадку&nbsp;&mdash; RPM) не допускає ситуації, коли один і той же файл належить одночасно декільком пакетам&nbsp;&mdash; така ситуація називається <em>файловий конфлікт</em>.
Проте іноді необхідно поперемінно звертатися до декількох різних файлів, використовуючи один і той же шлях у файловій системі. Наприклад, різні версії компілятора зручно викликати як <em>cc</em>, різні реалізації емуляторів терміналів &mdash; як <em>xvt</em>. Для подібних цілей була створена підсистема альтернатив.
<em>Альтернатива</em>&nbsp;&mdash; це і є той самий поділювальний шлях у файловій системі.
</p>
<p>В групі пакетів перераховуються претенденти на шлях у файловій системі&nbsp;&mdash; <em>кандидати</em>, а також <em>вага</em> кандидата. Підсистема альтернатив забезпечує вибір того з можливих кандидатів, вага якого більша ніж інших. Також є можливість перевести управління в ручний режим і явно вказати необхідного кандидата. В цьому випадку вага не має значення.
</p>
<p>Існують, так звані, <em>залежні</em> альтернативи. Наприклад, при перемиканні альтернативи компілятора, автоматично будуть переключені й альтернативи на всі посібники до нього (manual pages). Однак ніщо не перешкоджає також перемикати такі альтернативи в ручному режимі.
</p>
</body>
</html>
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<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<!-- system alternatives module -->
<html wf="card-index">
<head>
<link type="text/css" rel="stylesheet" href="/design/styles/alternatives.css"/>
<script>
effectDisable("current", "manual", false);
</script>
</head>
<body>
<form method="POST" class="selector-chooser" id="ajax-selector">
<span translate="_">Alternatives:</span>
<br/>
<select name="name" class="alternatives-list" size="10"></select>
<br/>
<input type="submit" name="card-index-select" value="Select" class="btn"/>
</form>
<hr/>
<form method="POST" class="selector-data">
<div class="selector-name"/>
<span translate="_" name="current">Candidates:</span>
<br/>
<select class="candidates-list" size="5" name="current" enumref="/alternatives/avail_candidate"/>
<br/>
<input type="checkbox" name="manual"/>
<span translate="_">Choose candidate manually</span>
<br/>
<p>
<small>
<span translate="_">In most cases candidates selection works well automatically using weight written in their config file, but you can choose variant manually</span>
</small>
</p>
<input type="submit" name="card-index-apply" value="Apply" class="btn"/>
<input type="reset" name="card-index-reset" value="Reset" class="btn"/>
</form>
</body>
</html>
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)))
 
: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
: Michael Shigorin