summaryrefslogtreecommitdiff
path: root/Master/tlpkg/doc/multi-support.txt
blob: d261fb19b779c08807f379674623685497ed3f72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77

Multi source support in TeX Live
--------------------------------
(Work in progress)

(completely independent from generalized revisions)

1) extension of the location part in 00texlive-installation.config
------------------------------------------------------------------

Every line can contain an aditional tag ([a-z0-9,]+) after the actual location,
examples:
	depend location:http://mirror.ctan.org/systems/texlive/tlnet/2008 ctan
	depend location:http://server.local.uni/texlive/packages department

done

2) invocation of tlmgr/installation
-----------------------------------

Normally tlmgr will install the candidate with the highest revision number.
That will be achieved by
	tlmgr install package

If you want to install a package from a specific mirror you can do
	tlmgr install package/TAG
	(tlmgr install package/SOURCE)
where TAG is the tag given above, and SOURCE is the full source address.
So continuing the above example we could call
	tlmgr install package/department
or
	tlmgr install package/http://server.local.uni/texlive/packages
(maybe we don't allow the later form ...?)

done

3) pinning
----------

tlmgr will evaluate an additional config file
	ROOT/tlpkg/pinning
or the one given via cmdline
	tlmgr -pins /path/to/pinning/file

That file contains lines
	package:tag:pin
where package is a package name or * (or regexp? or glob context* eg?)
and tag is [a-z0-9,]+ as for tags above, or *,
and pin is an integer between 0 and 1000.

Now the evaluation *which* package will be installed will be done as follows:

1) create the list of candidates, i.e., all tlpobj from different sources
   where the name matches the one to be installed

2) compute the pins of all the candidates

3) if there are different pins cancel those candidates with a non-maximal pin
   (i.e., let pin_max = max { pin(candidate) : candidate in candidates },
    and new candidates are those with pin(candidate) = pin_max)

4) within all the remaining candidates choose the one with the highest
   revision number


========================================

Consequences of the above:
- no source: part necessary in the revisions
- packages can be pinned to a specific source, and will not be updated
  even if another source ships a higher version number
- no changes to the general server infrastructure are needed
- default installations continue as before
- normal installations with multiple sources but without pinning will
  simply *do*the*right*thing*, namely install the highest revision number.