A version sort szerintem nem igazán jó.
Nézzük az alábbi file-t:
cat sortbug.txt
NetworkManager-1.0.0-3.fc22
NetworkManager-0.9.10.0-11.git20140704.fc22
NetworkManager-1.0.2-1.fc22
NetworkManager-1.0.4-0.1.git20150618.8cffaf3bf5.fc22
NetworkManager-0.9.10.0-13.git20140704.fc22
NetworkManager-0.9.10.0-10.git20140704.fc22
NetworkManager-1.0.0-7.fc22
NetworkManager-1.0.4-0.1.git20160624.f245b49a.fc22
NetworkManager-1.0.0-1.fc22
NetworkManager-0.9.10.0-8.git20140704.fc22
NetworkManager-0.9.10.0-6.git20140704.fc22
NetworkManager-0.9.10.0-14.git20140704.fc22
NetworkManager-1.0.0-9.fc22
NetworkManager-1.0.0-4.fc22
NetworkManager-1.0.0-8.fc22
NetworkManager-1.0.0-6.fc22
NetworkManager-1.0.0-5.fc22
NetworkManager-0.9.10.0-12.git20140704.fc22
Rendezzük sorba:
sort -rV sortbug.txt
NetworkManager-1.0.4-0.1.git20150618.8cffaf3bf5.fc22
NetworkManager-1.0.4-0.1.git20160624.f245b49a.fc22
NetworkManager-1.0.2-1.fc22
NetworkManager-1.0.0-9.fc22
NetworkManager-1.0.0-8.fc22
NetworkManager-1.0.0-7.fc22
NetworkManager-1.0.0-6.fc22
NetworkManager-1.0.0-5.fc22
NetworkManager-1.0.0-4.fc22
NetworkManager-1.0.0-3.fc22
NetworkManager-1.0.0-1.fc22
NetworkManager-0.9.10.0-14.git20140704.fc22
NetworkManager-0.9.10.0-13.git20140704.fc22
NetworkManager-0.9.10.0-12.git20140704.fc22
NetworkManager-0.9.10.0-11.git20140704.fc22
NetworkManager-0.9.10.0-10.git20140704.fc22
NetworkManager-0.9.10.0-8.git20140704.fc22
NetworkManager-0.9.10.0-6.git20140704.fc22
Most azt tegyük félre, hogy a Fedora csomagkészítői megoldották az időutazást, de ettől különösképpen fel kellene cserélődnie az első két sornak szerintem. Ugyan nem tudom, a version sort hogyan működik, de a kötőjel, a pont, stb. egyfajta helyiérték kijelölő kellene legyen. Ha az első két sort nézem, a második bizony újabb, mint az első. A többit jól csinálja. Jut eszembe, coreutils verzió:
rpm -qf `which sort`
coreutils-8.23-10.fc22.x86_64
Ugye, érdemes bugreportot küldeni? (Már megtettem.)
Hozzászólások
is ezt produkálja?
Igen, de azt ebben az esetben ignorálja.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
Nem, mert nem hiba. man sort ;)
PREFIX es VERSION-re tud illeszteni, a tobbi pedig a SUFFIX reszbe esik, ami alapjan nem rendez.
Nem állítom, hogy világos. Mi a PREFIX, VERSION és SUFFIX definíciója itt? Mert mintha csak a SUFFIX-re adna egy regexp-et, de épp arra nem rendez. Szóval mi is a prefix, és a version most? Továbbá mi az értelme, ha ezen a konkrét példán elbukik? Valós scriptem kergült meg miatta, elkezdtem debugolni, aztán kiderült, hülyeséget ad vissza a sort. Volt újabb NetworkManager csomag a Koji build szerveren, mint a gépemen lévő változat, az erre tenyésztett scriptem pedig kiröhögött, és azt mondta, nincs újabb. Aztán kiderült, hazudik a sort.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
Amit sortolgatsz, az nem felel meg a verziószámnak.
https://www.gnu.org/software/coreutils/manual/html_node/Details-about-v…
PREFIX = NetworkManager-
VERSION = 1
SUFFIX = .0.4
Ezt nem rendezi: -0.1.git20160624.f245b49a.fc22 - Ez nem csak az első két sorból derül ki.
Szerintem a VERSION az 1.0.4, amit te írtál az a major verzió. A suffix a kötőjel utáni rész lesz.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
Amit itt leirtal, az amugy se egyezik meg nagyjabol senkinek a definiciojaval a verziot illetoen, legfeljebbb a CentOS/Fedora community definialja igy a verzioszamot. A verzioszam ugyanis egy egeszen konkret valami, ami a vilag ertelmesebbik felen igy nez ki: 1.0.4. Major, minor, build. That's all, nothing more.
--
Blog | @hron84
Üzemeltető macik
Azt értem, hogy így csinálja, de szerintem értelmesebb lenne úgy, hogy amennyiben a PREFIX és a VERSION egyezik, akkor nem random hagyja a fenébe a sorrendet, hanem SUFFIX alapján rendezzen.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
PREFIX VERSION SUFFIX
Példa:
NetworkManager- 1.0.0-3 .fc22
Így módosítva a txt-ben a sorokat szépen rendezi.
Különben az jutott még eszembe, hogy ha a SUFFIX szerint is rendezne, az kompatibilis lenne a jelenlegi változattal, hiszen elsősorban PREFIX, másodsorban VERSION, harmadsorban SUFFIX szerint rendezne. Most csak az első kettő szerint. Na jó, picit lassabb lenne, de legalább jó.
Ezt úgy értem, hogy azonos prefixen belül verzió szerint, azonos prefix és verzió esetén suffix szerint volna jó.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
Többen kifejtették már, hogy a version az elég kötött formát igényel.
Azonban neked a "-h --human-numeric-sort" várhatóan megfelel.
Legalábbis az jól rendezi ezt a halamzt ;)
--
zrubi.hu