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
59KB
1K SLoC
cupido
使用图形视图探索您的代码库。
目标和动机
它能够高效地分析存储库的整个提交历史,结合文件、问题引用、作者等信息,几秒钟内即可生成整个存储库的图形。
所有分析都可以在图形上灵活快速地进行。
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。
许可证
依赖项
~21–33MB
~563K SLoC