Bug 43477

Summary: Некорректный ответ package/build_dependency_set на пакет, не имеющий сборочных зависимостей
Product: Infrastructure Reporter: Stanislav Levin <slev>
Component: rdb.altlinux.orgAssignee: Danil Shein <dshein>
Status: CLOSED NOTABUG QA Contact: Andrey Cherepanov <cas>
Severity: normal    
Priority: P5 CC: ancieg
Version: unspecified   
Hardware: x86_64   
OS: Linux   

Description Stanislav Levin 2022-08-09 11:45:53 MSK
Согласно документации ответ-SUCCESS на запрос package/build_dependency_set должен содержать следующие поля:

{
  "request_args": {},
  "length": 0,
  "packages": [
    {
      "package": "string",
      "length": 0,
      "depends": [
        {
          "name": "string",
          "version": "string",
          "release": "string",
          "epoch": 0,
          "archs": [
            "string"
          ]
        }
      ]
    }
  ]
}

где верхний length - это number of packages found.

Но если в запросе указан пакет, не имеющий сборочных зависимостей, то фактический ответ:
{
  "request_args": {
    "branch": "sisyphus",
    "packages": [
      "foo"
    ],
    "archs": [
      "x86_64",
      "noarch"
    ]
  },
  "length": 0,
  "packages": []
}

то есть как будто его и нет.
В итоге приходится делать дополнительную проверку - есть ли мой пакет в списке или нет. То же самое происходит, если запрашивать список пакетов.

Корректный (на мой взгляд) вариант будет в этом случае:

{                                                                               
  "request_args": {xxx},                                                           
  "length": 1,                                                                  
  "packages": [                                                                 
    {                                                                           
      "package": "foo",                                                         
      "length": 0,                                                              
      "depends": []                                                             
    }                                                                           
  ]                                                                             
}

Пример запроса:
https://rdb.altlinux.org/api/package/build_dependency_set?branch=sisyphus&packages=liblmdb
Comment 1 Anton Zhukharev 2023-03-29 12:39:43 MSK
(Ответ для Stanislav Levin на комментарий #0)
> Но если в запросе указан пакет, не имеющий сборочных зависимостей, то
> фактический ответ:
> {
>   "request_args": {
>     "branch": "sisyphus",
>     "packages": [
>       "foo"
>     ],
>     "archs": [
>       "x86_64",
>       "noarch"
>     ]
>   },
>   "length": 0,
>   "packages": []
> }
> 
> то есть как будто его и нет.
По-моему, если зависимых пакетов нет, то и возвращать в списке зависимых пакетов ничего не нужно.

(Ответ для Stanislav Levin на комментарий #0)
> Корректный (на мой взгляд) вариант будет в этом случае:
> 
> {                                                                           
>   "request_args": {xxx},
>   "length": 1,
>   "packages": [                                                             
>     {                                                                       
>       "package": "foo",                                                     
>       "length": 0,                                                          
>       "depends": []                                                         
>     }                                                                       
>   ]                                                                         
> }
На мой взгляд это выглядит как-то неправильно: зависимых пакетов нет, но в списке указан пакет "foo". К тому же, если зависимых пакетов нет, то и length должна быть равна 0.
Comment 2 Danil Shein 2023-03-29 13:50:58 MSK
Если никаких зависимостей не найдено, то и содержимое ответа соответствующее: длина: 0, пакетов: нет.

Входные данные (имена пакетов, архитектуры) возвращаются в теле запроса - можно просто сравнить результат с входными данными.