Add support for apt repository
propozycja
Do istniejących typów zależności dodajmy jeszcze jeden czyli apt repository
Propozycja implementacji
Użyć zewnętrzej zależności apt-repo
→ https://pypi.org/project/apt-repo/
Użycie przykład:
import apt_repo
versions=[p.version for p in apt_repo.APTRepository.from_sources_list_entry('deb https://apt.releases.hashicorp.com focal main').get_packages_by_name('vault')]
>>> versions
['1.10.0', '1.10.1-1', '1.10.2-1', '1.10.3-1', '1.10.4-1', '1.10.5-1', '1.10.6-1', '1.10.7-1', '1.11.0-1', '1.11.1-1', '1.11.2-1', '1.11.3-1', '1.11.4-1', '1.12.0-1', '1.2.7', '1.3.0', '1.3.1', '1.3.10', '1.3.2', '1.3.2-2', '1.3.3', '1.3.4', '1.3.6', '1.3.7', '1.3.8', '1.3.9', '1.4.0', '1.4.1', '1.4.2', '1.4.3', '1.4.4', '1.4.5', '1.4.6', '1.4.7', '1.5.0', '1.5.0-2', '1.5.0-3', '1.5.1', '1.5.2', '1.5.3', '1.5.3-2', '1.5.4', '1.5.5', '1.5.6', '1.5.7', '1.5.8', '1.5.9', '1.6.0', '1.6.1', '1.6.2', '1.6.3', '1.6.4', '1.6.5', '1.6.6', '1.6.7', '1.7.0', '1.7.1', '1.7.10', '1.7.2', '1.7.3', '1.7.4', '1.7.5', '1.7.6', '1.7.7', '1.7.8', '1.7.9', '1.8.0', '1.8.1', '1.8.1-2', '1.8.10-1', '1.8.11-1', '1.8.12-1', '1.8.2', '1.8.3', '1.8.4', '1.8.5', '1.8.6', '1.8.7', '1.8.8', '1.8.9', '1.9.0', '1.9.1', '1.9.10-1', '1.9.2', '1.9.3', '1.9.4', '1.9.5-1', '1.9.6-1', '1.9.7-1', '1.9.8-1', '1.9.9-1']
-
Zalety:
- łatwość użycia
- uzyskujemy wersje bezpośrednio z repozytorium z którego instalujemy, minimalizacja sytuacji że autoupdeter wykrywa wersje której nie ma w repo
- prawie wspiera klasyczny format podawania repozytorium w systemie
-
Wady:
- nie wspiera tego formatu w pełni np. takie coś nie zadziała
deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]https://download.docker.com/linux/ubuntu impish stable
ponieważ w środku drugi element tego wyrażenia jest zakładany być prawidłowym adresem URL (trzeba by to wycinać albo podawać bez tego) - nie można wybrać architektury paczek, domyślna i jedyna możliwa to
amd64
ponieważ paczki definiują jako property ze zdefiniowanym argumentem a w pythonie property nie można "wywoływać" is not callable, więc dziwny pattern → https://github.com/brennerm/python-apt-repo/blob/master/apt_repo/init.py#L447 - paczka nie rozwijana za bardzo, kilku kontrybutorów ostatni tag 2 lata temu ostatni commit do mastera pół roku temu
- jedno repozytorium może zawierać wiele róznych paczek, lusimy filtrować po nazwie paczki więc trzeba ją przekazać
- musisilibyśmy opisac dziwny format naszego source:
- jako string
deb https://apt.releases.hashicorp.com focal main vault
lub bez debhttps://apt.releases.hashicorp.com focal main vault
i do tego nazwa paczki lub wymaganie że nazwa wpisu autupdetera musi być nazwą paczki w repo - może jako słownik, komplikacja kodu
{"url": "https://apt.releases.hashicorp.com", "distribution": "focal", "component": "main", "name": "vault"}
- jako string
- nie wspiera tego formatu w pełni np. takie coś nie zadziała
może wiecie czy da się to zrobic prościej, albo macie jakieś odczucia do rzeczy wypisanych tutaj ??
Edited by Krzysztof Szymański