Graal leverages on the Git backend of Perceval and enhances it to set up ad-hoc source code analysis. Thus, it fetches the commits from a Git repository and provides a mechanism to plug third party tools/libraries focused on source code analysis.
Graal 就是使用了之前提到的 perceval 组件的 git backend。拉取 repo 的 commits 并且提供一种方法使用第三方工具用于源码分析。
# How it works
就是拉取一个 git repo 镜像以及 commits 的 meta data。通过创建工作树来执行 checkout 操作。Graal 获取 json 后,分为三步:
- Filter。通过 json 文档,选择或者丢弃 commit。然后在工作树上用 commit hash 来执行 checkout 操作。
- Analyze。就是引入分析工具。
- Post-process。最后一步处理 json 文档,比如删除或者重命名。
# 安装教程
https://github.com/chaoss/grimoirelab-graal
# 常见后端
CoCom: 代码复杂度分析。
CoDep:解析 python 模块的依赖并且转换为 json 格式,而且还可以使用 graph 可视化。
CoQua:检查代码的质量。
CoVuln:检查代码的安全性比如将在的 sql 注入、shell 注入。
CoLic :扫描代码并且提取 licens 和版权信息。
CoLang :获得 git repo 的代码语言分布洞察。
# 用法
和 perceval
相类似:
$ graal cocom https://github.com/chaoss/grimoirelab-perceval --git-path /tmp/graal-cocom > /graal-cocom.test
Starting the quest for the Graal.
Git worktree /tmp/... created!
Fetching commits: ...
Git worktree /tmp/... deleted!
Fetch process completed: .. commits inspected
Quest completed.
# python 中:
#! /usr/bin/env python3 | |
from graal.backends.core.cocom import CoCom | |
# URL for the git repo to analyze | |
repo_uri = ’http://github.com/chaoss/grimoirelab-perceval’ | |
# directory where to mirror the repo | |
repo_dir = ’/tmp/graal-cocom’ | |
# Cocom object initialization | |
cc = CoCom(uri=repo_uri, git_path=repo_dir) | |
# fetch all commits | |
commits = [commit for commit in cc.fetch()] |