Skip to content

feat(lastore-upgrade-query): Add package download URI information#285

Merged
electricface merged 1 commit into
linuxdeepin:masterfrom
electricface:swt/dev-upgrade-query
Jan 13, 2026
Merged

feat(lastore-upgrade-query): Add package download URI information#285
electricface merged 1 commit into
linuxdeepin:masterfrom
electricface:swt/dev-upgrade-query

Conversation

@electricface
Copy link
Copy Markdown
Member

  • The UpgradePackage::Valid() function does not validate the
    Site field.

@electricface electricface force-pushed the swt/dev-upgrade-query branch from 639dd8b to d6b4e11 Compare January 13, 2026 13:04
@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

这份代码 diff 主要是为 UpgradePackage 类添加了 Uri 字段,并实现了通过 APT 库获取该 URI 的逻辑。以下是对语法逻辑、代码质量、代码性能和代码安全方面的审查意见:

1. 语法逻辑

  • 通过 pkgSourceList 获取 URI 的逻辑是正确的
    • 代码中引入了 srcListpkgSourceList),并使用 FindIndex 方法查找对应的 pkgIndexFile
    • 随后调用 index->ArchiveURI(parser.FileName()) 来构建完整的下载地址。这是 APT 库获取软件包完整 URL 的标准方式。
  • 空指针检查
    • upgrade_query.ccGetUpgradePackage 函数中,代码对 srcList 进行了检查(if (srcList)),这是很好的做法,防止了潜在的空指针解引用。
    • 在调用 srcList->FindIndex 后,代码也检查了返回的 index 指针,逻辑严密。

2. 代码质量

  • 代码格式与风格
    • 代码对齐和缩进进行了微调(例如 Valid() 函数内的条件判断),看起来更整洁。
    • GetUpgradePackages 函数的参数列表跨行排版符合现代 C++ 风格,提高了可读性。
  • 字段初始化
    • UpgradePackage 类中新增了 std::string Uri;。由于 std::string 默认初始化为空字符串,这是安全的。但为了保持一致性(与其他 uint64_t 字段显式初始化为 0 对比),显式初始化为 std::string Uri = ""; 会更清晰,虽然不是必须的。
  • Valid() 函数的变更
    • Valid() 函数移除了对 Site 的非空检查。这可能是合理的,因为现在有了更具体的 Uri 字段。然而,建议:如果 Uri 是一个关键字段(例如用于下载),应该在 Valid() 函数中添加对 Uri 的非空检查,以确保数据的完整性。

3. 代码性能

  • 性能影响极小
    • pkgSourceList *srcList = Cache.GetSourceList(); 这一行获取指针的开销很小。
    • 在循环内部调用 srcList->FindIndexindex->ArchiveURI 涉及字符串操作,但这是获取必要信息所必需的。由于升级包的数量通常有限,这部分性能开销可以忽略不计。
  • 内存分配
    • result.Uri 的赋值会涉及字符串的内存分配。这是预期的行为,没有明显的性能隐患。

4. 代码安全

  • 潜在的空指针风险
    • GetUpgradePackages 中,pkgSourceList *srcList = Cache.GetSourceList(); 获取了指针。虽然 pkgCacheFile 通常管理着 SourceList 的生命周期,但理论上 GetSourceList() 有可能返回 nullptr(取决于 APT 库的具体实现和配置状态)。
    • 改进建议:建议在 GetUpgradePackages 中获取 srcList 后,增加一个非空检查:
      pkgSourceList *srcList = Cache.GetSourceList();
      if (!srcList) {
          std::cerr << "Error: Failed to get SourceList" << std::endl;
          return result; // 返回空结果或处理错误
      }
  • 依赖库头文件
    • 新增了 #include <apt-pkg/indexfile.h>,这是使用 pkgIndexFile 所必需的,包含正确。

总结与改进建议

总体来说,这段代码修改逻辑清晰,正确使用了 APT 库接口来获取软件包的 URI。

主要改进建议如下:

  1. 完善 Valid() 检查
    upgrade_query.ccValid() 方法中,建议增加对 Uri 的检查,因为既然添加了这个字段,通常意味着它是业务逻辑中需要依赖的关键数据。

    bool UpgradePackage::Valid() const
    {
        if (Name.empty() || CandidateVersion.empty() || Architecture.empty() || Codename.empty()
            || Filename.empty() || Hash.empty() || Uri.empty()) { // 添加 Uri.empty() 检查
            return false;
        }
        // ... 其余代码
    }
  2. 增加 GetSourceList 的健壮性检查
    upgrade_query.ccGetUpgradePackages 函数中,建议对 srcList 进行非空判断,防止后续循环中出现意外。

    pkgSourceList *srcList = Cache.GetSourceList();
    if (!srcList) {
        // 记录错误日志
        return result;
    }
  3. 显式初始化(可选)
    upgrade_query.h 中,建议显式初始化 Uri,以符合类的编码风格。

    std::string Uri = "";

- The UpgradePackage::Valid() function does not validate the
Site field.
- Add .clang-format
@electricface electricface force-pushed the swt/dev-upgrade-query branch from d6b4e11 to 799d925 Compare January 13, 2026 13:10
@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: electricface, qiuzhiqian

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@electricface electricface merged commit 0668764 into linuxdeepin:master Jan 13, 2026
12 of 13 checks passed
@electricface electricface deleted the swt/dev-upgrade-query branch January 13, 2026 13:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants