Newer
Older
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Extensions d'une distribution SPIP
## Arborescence
### SPIP4.4
```txt
.
├── composer.json
├── composer.lock
├── plugins-dist
│ ├── aide
│ ├── ...
│ └── urls_etendues
└── plugins-dist.json
```
### SPIP5
```txt
.
├── composer.json
├── composer.lock
├── plugins-dist
└── spip
├── aide
├── ...
└── urls
```
## Historique
Le fichier `./plugins-dist.json` est construit comme ci-dessous :
```json
{
"prefix": {
"path": "plugins-dist/prefix",
"source": "https://git.spip.net/spip/prefix.git",
"branch": "x.y",
"tag": "vx.y.z",
},
"..." : {
"path": "...",
"source": "...",
"...": "..."
}
}
```
`path` et `source` sont obligatoires. `branch` et `tag` sont facultatifs.
Chaque entrée de ce fichier peut être normalisé dans une instance de
[la classe Specification](../src/Extensions/Specification.php).
L'ensemble des plugins-dist est normalisé dans une instance de
[la classe Collection](../src/Extensions/Collection.php),
capable de se construire à partir d'un fichier valide ou de générer un fichier valide.
## Composerisation
`composer.json` du projet (racine):
```json
{
"require": {
"spip/prefix": "...",
"...": "..."
},
"extra": {
"spip": {
"extensions": [
"spip/prefix",
"..."
]
}
}
}
```
`composer.json` d'un plugin-dist spip:
```json
{
"name": "spip/prefix",
"type": "spip-plugin",
"...": "..."
}
```
## Bascule
### Forward 4.4->5
#### Analyse forward
- pour tout prefix présent dans plugins-dist.json:
- si existence plugins-dist/prefix, marquer le dossier plugins-dist/prefix pour suppression
- marquer vendor/prefix dans extra.spip.extensions pour ajout si absent
- marquer vendor/prefix:constraint dans require pour ajout si absent
- marquer prefix dans plugins-dist.json pour suppression
#### Switch forward
- mettre à jour require et extensions avec les vendor/prefix:constraint marqués
- supprimer les dossiers plugins-dist/prefix marqués
- supprimer les prefix marqués dans plugins-dist.json
- si plugins-dist.json vide, le supprimer
- composer update
### Back 5->4.4
#### Analyse back
- pour tout prefix présent dans extra.spip.extensions:
- si installé, convertir en spécification 4.4 et marquer prefix/path/source/branch/tag pour ajout à plugins-dist.json
- marquer vendor/prefix dans extra.spip.extensions pour suppression
- marquer vendor/prefix:constraint dans require si présent pour suppression
- marquer le dossier plugins-dist/vendor pour suppression
#### Switch back
- pour tout plugins-dist/vendor marqués, supprimer si vide
- générer plugins-dist.json
- composer update
Reprendre l'usage des outils historiques