| Summary: | сравнение версий работает не всегда правильно | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Vladimir Lettiev <crux> |
| Component: | perl-upstreamwatch | Assignee: | viy <viy> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P3 | CC: | at, cas, crux, ender, force, ldv, mike, misha, mithraen, pma, shaba, viy |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
liks@ съел IBM, помнится. 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) Спасибо!
Это остался незамеченным старый кусок кода,
я его заменил на sub versort (@) из rpm-uscan.
(в alt2)
> Неплохо бы покрыть тестами код
еще не понятно, какое api будет в итоге.
Пока оно совместимо со старым upstreamwatch от liks,
и работает с его вариантом /usr/bin/uscan.
но я бы хотел в перспективе написать утилиту /usr/bin/uscan-query
с более богатым интерфейсом, а также переехать на библиотеку в rpm-uscan.
|
Сравнение версий в 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; } Неплохо бы покрыть тестами код