Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
I
inary
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
SulinOS
inary
Commits
5a79c31d
Kaydet (Commit)
5a79c31d
authored
Tem 21, 2005
tarafından
Eray Özkural
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
* conditional deps, conflicts & comar dependencies
* begin remove and upgrade operations
üst
0e762dbd
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
1 deletion
+49
-1
dependency.pdf
doc/dependency.pdf
+0
-0
dependency.tex
doc/dependency.tex
+49
-1
No files found.
doc/dependency.pdf
Dosyayı görüntüle @
5a79c31d
No preview for this file type
doc/dependency.tex
Dosyayı görüntüle @
5a79c31d
...
...
@@ -173,6 +173,29 @@ installing packages in the reverse order of a topological sort
guarantees that no package is installed before all of its dependencies
are installed. Thus, this yields a consistency-preserving plan.
\subsection
{
Conditional dependencies
}
In the PISI specification, we allow a dependency to specify a local
condition, for instance a program may require a dependency on
\texttt
{
libx
}
with pardus source release
$
3
$
or greater. Another
program may require a dependency on a particular source release. These
conditions are local because they can be computed over the elements of
system state
$
S
_
i
$
, e.g. package (name, version) pairs. Let us denote this
condition by a predicate
$
P
(
b
)
$
such that
$
aDb iff P
(
b
)
$
. The
predicate
$
P
$
for the dependency
$
aDb
$
can be stored as edge data for
$
(
u,v
)
$
on the graph.
% thus when we say $P(u,v)$, this means the predicate stored on
%$(u,v)$ edge for vertex $v$.
In this case, the vertices of the package dependency graph
$
G
$
and the
planning graph
$
G
_
A
$
retain the version information along with the
package name. The dependency relation thus holds between two pairs
$
(
p
_
1
,v
_
1
)
$
and
$
(
p
_
2
,v
_
2
)
$
, satisfying a given predicate
$
P
(
p
_
2
,v
_
2
)
$
. When constructing the graph, we therefore take this
predicate into account and admit a new edge
$
(
u,v
)
$
, and thus a new
vertex
$
v
$
into
$
G
_
A
$
if and only if the target vertex satisfies
$
P
(
v
)
$
.
\subsection
{
Conflicts and COMAR dependencies
}
The tags
\texttt
{
Conflicts
}
and
\texttt
{
Provides
}
are inherited from
...
...
@@ -196,7 +219,32 @@ the number of alternatives for comar OM $A$; the problem is that there
seems to be no simple solution to solve satisfiability with arbitrary
disjunctions in package dependency, short of a
$
SAT
$
solver).
The resolution of conflicts
The resolution of conflicts to maintain system consistency condition
$
2
$
is easier to achieve. This can be always satisfied by disallowing
installation of a package that would violate the condition. In the
install operation, after constructing the partial dependency graph
$
G
_
A
$
, we merely have to check whether any conflict appears within the
vertices of
$
G
_
A
$
. If so, then the operation is untenable, since
$
G
_
A
$
shows the future state of the installed system. Since a conflict is
symmetric, it is represented as a bidirectional edge
$
a
\leftrightarrow
b
$
. To
distinguish dependencies from conflicts, the edges would have to be
labelled in this case, for instance with 'd' and 'c'.
\section
{
Remove and upgrade operations
}
Dependency resolution for remove operation is similar to install. The
only difference is that we follow the topological sort order, instead
of its reverse when processing packages.
The upgrade operation is more complicated. First of all, the system
has to distinguish between the current relation graph
(e.g. dependencies and conflicts), and the future relation graph which
may be different in rather important aspects. In theory, we allow any
dependency and conflict to change.
Therefore, we have a
$
G
_
0
$
which represents the current relations
(among installed packages) in the system, and a
$
G
_
f
$
which is
probably taken from a remote package repository.
\section
{
Examples
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment