#graph #codebase #commit #view #explore #author #issue

bin+lib cupido

使用图形视图探索您的代码库

8 个版本

0.3.4 2024年4月12日
0.3.3 2024年3月21日
0.3.0 2024年2月28日
0.2.2 2024年2月9日
0.1.0 2024年1月21日

#340可视化

每月下载 28 次
用于 gossiphs

Apache-2.0 协议

59KB
1K SLoC

Rust 880 SLoC // 0.0% comments TypeScript 124 SLoC // 0.1% comments JavaScript 4 SLoC

cupido

Crates.io Version

使用图形视图探索您的代码库。

目标和动机

它能够高效地分析存储库的整个提交历史,结合文件、问题引用、作者等信息,几秒钟内即可生成整个存储库的图形。

所有分析都可以在图形上灵活快速地进行。

graph TD
;
    File1("src/main.rs") === Commit1("abcd1234");
    File2("src/utils.rs") === Commit1;
    Commit1 === Issue1("#123");
    Issue1 === File1;
    Dir("src/") --- File1;
    Dir --- File2;
    Author1("Williamfzc") --- Commit1;
    File3("src/config.rs") === Commit2("efgh5678");
    File4("README.md") === Commit2;
    Commit2 === Issue2("#456");
    Issue2 === File4;
    Dir --- File3;
    Author2("JaneDoe") --- Commit2;

概念

graph TD
;
    File === Commit;
    Commit === Issue;
    Issue === File;
    Dir --- File;
    Author --- Commit;

从概念上讲,整个图由三种核心节点类型组成

  • 文件节点:逻辑单元。
  • 提交节点:开发者单元。
  • 问题节点:故事单元。

这些节点相互连接,并支持双向快速搜索。

除此之外,还有一些额外的节点来支持更广泛的数据检索和分析

  • 作者节点
  • 目录节点
  • ...

使用方法

我们主要提供三种使用模式

  • Rust 库
  • 本地服务器模式(类似于 LSP)
  • 命令行界面

Rust 库

请参阅 examples/mini.rs

use cupido::collector::config::{get_collector, Collect, Config};

fn main() {
    let collector = get_collector();
    let mut conf = Config::default();
    conf.repo_path = String::from(".");
    let graph = collector.walk(Config::default());

    // 1. search from files to issues
    let file_name = String::from("src/server/app.rs");
    let issues = graph.file_related_issues(&file_name).unwrap();

    // src/server/app.rs related to ["#1"]
    println!("1. {} related to {:?}", file_name, issues);

    // 2. search from issues to commits
    let issue_label = issues.get(0).unwrap();
    let commits = graph.issue_related_commits(issue_label).unwrap();

    // #1 related to ["b7574411fbf685a777d1929bff26b3ad4ebd84f2"]
    println!("2. {} related to {:?}", issue_label, commits);

    // 3. search from commits to files
    let commit = commits.get(0).unwrap();
    let files = graph.commit_related_files(commit).unwrap();

    // b7574411fbf685a777d1929bff26b3ad4ebd84f2 related to ["src/server/mod.rs", "src/server/handler.rs", "src/server/config.rs", "src/server/app.rs", "src/server.rs", "src/main.rs"]
    println!("3. {} related to {:?}", commit, files);

    // Also, you can do it vice versa.
}

本地服务器模式

您可以在发布页面上找到您系统的对应二进制文件

https://github.com/williamfzc/cupido/releases/

您可以使用以下命令启动服务

./cupido up --repo-path ~/workspace/github/axios

启动成功后,您应该看到以下类似的日志

2024-02-08T13:46:02.932406Z  INFO cupido: relation creating ...
2024-02-08T13:46:02.932754Z  INFO cupido: config: UpCommand { issue_regex: None, repo_path: Some("/Users/bytedance/workspace/github/axios"), path_specs: None, multi_parents: None }
2024-02-08T13:46:03.177632Z  INFO cupido: relation ready in 244.838094ms: GraphSize { file_size: 321, commit_size: 1136, issue_size: 753 }
2024-02-08T13:46:03.178575Z  INFO cupido: server up: http://127.0.0.1:9410

服务在端口 9410 上公开,您可以通过它访问 HTTP API。您可以使用我们的客户端或其他 HTTP 工具与之交互。

 curl http://127.0.0.1:9410/size
{"file_size":10486,"commit_size":6983,"issue_size":1403}

您可以在以下位置找到我们的客户端和 API 文档:node 客户端

命令行界面

请参阅 cupido --help

性能

cupido 还可以与裸仓库一起使用。大多数时候,分析应该会在几秒钟内完成。

仓库 耗时 文件大小 提交大小 问题大小
https://github.com/microsoft/pyright 8.046621521秒 10486 6983 1403
https://github.com/axios/axios 244.838094毫秒 321 1136 753

贡献

问题和 PR 总是受欢迎的。 :)

目前,我们正在开发 API v1。

许可证

Apache 2.0

依赖项

~21–33MB
~563K SLoC