From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 12 Feb 2020 23:10:44 +0300 (MSK) From: Ivan Zakharyaschev To: ALT Linux Team development discussions In-Reply-To: <27fd57c8-2ba7-b540-fae0-d99f2d482f97@rosalinux.ru> Message-ID: References: <2a6a209c-013f-b3fe-f334-78e7ca297c78@etersoft.ru> <5cfa5377-1351-8101-6013-0426815610b4@basealt.ru> <20200129180524.GA8326@imap.altlinux.org> <2392356.7VnD3MWqvX@zerg.malta.altlinux.ru> <8cfc4992-7307-7225-e2c0-1f56429fdb57@basealt.ru> <8f80d30b-762b-53ce-1e73-67466da4718a@rosalinux.ru> <8f8c7f68-6412-6f55-cc12-400e48a562a4@rosalinux.ru> <5902ba1f-3397-2df6-4ffb-4b9e24fa997c@rosalinux.ru> <27fd57c8-2ba7-b540-fae0-d99f2d482f97@rosalinux.ru> User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="1807885841-1848181654-1581538244=:6363" Subject: Re: [devel] =?koi8-r?b?88LP0svBIM7P18/KINfF0tPJySDQz9PMxSDJ09DPzNja?= =?koi8-r?b?z9fBzsnRIGVwb2No?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Feb 2020 20:10:44 -0000 Archived-At: List-Archive: List-Post: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1807885841-1848181654-1581538244=:6363 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8BIT On Wed, 12 Feb 2020, Mikhail Novosyolov wrote: > 12.02.2020 22:05, Mikhail Novosyolov пишет: > > 12.02.2020 13:58, Ivan Zakharyaschev пишет: > >>> Спасибо за пояснение. Это бы еще где-то документировать... > >> Предлагайте изменения, вносите изменения, если есть желание. > > Даже если бы было большое желание таким заняться, чтобы это описать, > > пришлось бы изучить код альтовского форка rpm и apt. При чем очень > > тщательно. А это почти невозможно, нюансы пропустятся. > > > > То есть я бы не стал ждать, что сообщество напишет подобную документацию. > > > Впрочем, Вы уже сами в предыдущих письмах документировали это поведение, > но большинство людей не попадут на эти тексты, поскольку, чтобы туда > попасть, потребуется весьма специфических поисковый запрос. Предлагайте место, куда скопировать (где бы Вы нашли с большой вероятностью), или сами скопируйте, если есть желание. Ещё это было описано в changelog (то, что касается отношения обновляемости между пакетами): * Вт июн 11 2019 Ivan Zakharyaschev 4.13.0.1-alt9 - lib: introduced rpmEVRDTCompare() (useful for APT). - Changes in what is considered "newer" by rpm -U pertaining to disttag comparison. (On the whole, to determine which package is "newer", first, the EVRs are compared, then the branch prefixes of the disttags if the disttags are present, and then the buildtimes.) The comparison of the disttags: + Before the comparison of disttags, an optional initial padding (which is terminated by :) is skipped. (This will be useful for generating >,<-deps compatible with disttag-unaware rpm & apt.) + If a disttag contains no + separator (old format), the branch prefix is assumed to be empty (and hence "older" than any other branch prefix). + If the branch prefix of a disttag is equal to %_priority_distbranch (and it is not empty), then it is "newer" than any other ones. + The branch prefixes of disttags are ordered by rpmvercmp() rather than lexicographically. (For example, the numeric parts of "p8" or "p10" are compared as numbers. However, the first letter in "p7" or "c8.1" is more significant.) - Give a default value to %_priority_distbranch based on the disttag when this package is built (the prefix before +), i.e., the current repo branch by default. (Useful for getting the rpm tool with good behavior in branches (like p9) forked off Sisyphus after disttags were introduced.) Также исходный код этой функции довольно понятен и даёт точное описание алгоритма обновляемости, которое я описывал словами вчера: http://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=lib/rpmvercmp.c;h=93bb4ff644e92460b331d57bd06d5a368d9b1eb6;hb=31123348f4c6b33563ffc986d0ba4db57c7477f5#l203 /* Decide which package is "newer" (for upgrade). */ int rpmEVRDTCompare(const struct rpmEVRDT * const fst, const struct rpmEVRDT * const snd) { int rc = 0; /* same "new" (an upgrade in neither direction is possible) */ rc = rpm_cmp_uint(fst->has_epoch ? fst->epoch : 0, snd->has_epoch ? snd->epoch : 0); if (rc) return rc; if (!fst->version && snd->version) rc = -1; if (fst->version && !snd->version) rc = 1; if (fst->version && snd->version) rc = rpmvercmp(fst->version, snd->version); if (rc) return rc; if (!fst->release && snd->release) rc = -1; if (fst->release && !snd->release) rc = 1; if (fst->release && snd->release) rc = rpmvercmp(fst->release, snd->release); if (rc) return rc; /* NB: if one of disttags is absent, we don't decide based on the disttags; rather we fallback to the decision based on the buildtimes. */ if (fst->disttag && snd->disttag) rc = rpm_cmp_disttag(fst->disttag, snd->disttag); if (rc) return rc; if (upgrade_honor_buildtime()) { /* Currently an absent buildtime is treated as the least one. Another possibility could be to skip buildtime comparison then. However, the current treatment is good for the work of hsh --with-stuff in case when buildtime is absent in the non-local repo indexes. */ if (!fst->has_buildtime && snd->has_buildtime) rc = -1; if (fst->has_buildtime && !snd->has_buildtime) rc = 1; if (fst->has_buildtime && snd->has_buildtime) rc = rpm_cmp_uint(fst->buildtime, snd->buildtime); } return rc; } -- Best regards, Ivan --1807885841-1848181654-1581538244=:6363--