Bug 26651 - сравнение версий работает не всегда правильно
Summary: сравнение версий работает не всегда правильно
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: perl-upstreamwatch (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: viy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-11-29 09:27 MSK by Vladimir Lettiev
Modified: 2011-11-29 15:19 MSK (History)
12 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vladimir Lettiev 2011-11-29 09:27:13 MSK
Сравнение версий в upstreamwatch.pm производится через утилиту rpmvercmp, но некорректно обрабатывается возвращаемый этой утилитой результат, т.к. воспринимаются только значения -1,0,1, для других значений возвращается false (пустая строка)

Примеры версий, когда это приводит к ошибке:

$ rpmvercmp 3 1
2

$ rpmvercmp 2 9
-7

Предлагаю такое исправление:

--- a/upstreamwatch.pm
+++ b/upstreamwatch.pm
@@ -1145,9 +1145,7 @@ sub _vercmp {
     my $returncode = `rpmvercmp $v1 $v2`;
     chomp($returncode);
 #    print "ver1=$v1 ver2=$v2 return=$returncode !!!\n";
-    return 0 if($returncode eq "0");
-    return 1 if($returncode eq "1");
-    return -1 if($returncode eq "-1");
+    return $returncode <=> -$returncode;
 #    return `rpmvercmp $v1 $v2`;
 #    return 1;
 }

Неплохо бы покрыть тестами код
Comment 1 Michael Shigorin 2011-11-29 10:22:59 MSK
liks@ съел IBM, помнится.
Comment 2 Repository Robot 2011-11-29 15:12:15 MSK
perl-upstreamwatch-0.6.2.11.1-alt2 -> sisyphus:

* Tue Nov 29 2011 Igor Vlasenko <viy@altlinux> 0.6.2.11.1-alt2
- synced versort with rpm-uscan 0.6.2.11.1 - (closes: 26651)
Comment 3 viy 2011-11-29 15:19:03 MSK
Спасибо!
Это остался незамеченным старый кусок кода,
я его заменил на sub versort (@) из rpm-uscan.
(в alt2)

> Неплохо бы покрыть тестами код
еще не понятно, какое api будет в итоге.
Пока оно совместимо со старым upstreamwatch от liks,
и работает с его вариантом /usr/bin/uscan.
но я бы хотел в перспективе написать утилиту /usr/bin/uscan-query
с более богатым интерфейсом, а также переехать на библиотеку в rpm-uscan.