gitbase 是一个方便的git sql 查询引擎,sqler 是一个很不错的sql 转rest api工具,以下是一个简单的集成测试

项目使用docker-compose 运行

环境准备

  • docker-compose 文件
version: "3"
services:
sqler:
image: dalongrong/sqler:2.0
volumes:
- "./config/config-example.hcl:/app/config.example.hcl"
environment:
- "DSN=root@tcp(gitbase:3306)/gitbase"
ports:
- "3678:3678"
- "8025:8025"
gitbase:
container_name: gitbase
hostname: gitbase
image: srcd/gitbase:v0.20.0-rc1
volumes:
- "./git-demos:/opt/repos"
ports:
- "3306:3306"
  • sqler hcl 配置

    这个是一个简单的统计git 代码行数的sql

filecounts {
exec = <<SQL
SELECT
LANGUAGE(file_path, blob_content) as lang,
SUM(JSON_EXTRACT(LOC(file_path, blob_content), '$.code')) as code,
SUM(JSON_EXTRACT(LOC(file_path, blob_content), '$.comment')) as comments,
SUM(JSON_EXTRACT(LOC(file_path, blob_content), '$.blank')) as blanks,
COUNT(1) as files
FROM commit_files
NATURAL JOIN refs
NATURAL JOIN blobs
WHERE ref_name='HEAD'
GROUP BY lang;
SQL
}

运行&&测试

  • 准备git 代码
    可以通过clone 方式
  • 运行
docker-compose up -d
  • 访问rest api
curl -i http://localhost:8025/filecounts

效果

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=UTF-8
Vary: Origin
Vary: Accept-Encoding
Date: Sun, 12 May 2019 07:34:39 GMT
Content-Length: 958 {"data":[{"blanks":0,"code":0,"comments":0,"files":7,"lang":"Ignore List"},{"blanks":78,"code":138,"comments":0,"files":5,"lang":"Markdown"},{"blanks":0,"code":0,"comments":0,"files":6,"lang":"Maven POM"},{"blanks":0,"code":0,"comments":0,"files":5,"lang":"Dockerfile"},{"blanks":152,"code":409,"comments":12,"files":20,"lang":"YAML"},{"blanks":4113,"code":15009,"comments":3815,"files":259,"lang":"Java"},{"blanks":0,"code":0,"comments":0,"files":2,"lang":"Shell"},{"blanks":0,"code":26,"comments":0,"files":1,"lang":"JSON"},{"blanks":0,"code":0,"comments":0,"files":1,"lang":"Nginx"},{"blanks":0,"code":0,"comments":0,"files":1,"lang":""},{"blanks":1,"code":91,"comments":1,"files":3,"lang":"XML"},{"blanks":211,"code":2067,"comments":0,"files":31,"lang":"HTML"},{"blanks":0,"code":0,"comments":0,"files":6,"lang":""},{"blanks":0,"code":0,"comments":0,"files":1,"lang":"Text"},{"blanks":53,"code":31,"comments":260,"files":1,"lang":"TOML"}],"success":true}

说明

gitbase + sqler 我们可以方便的git 代码的分析,同时也很灵活,同时gitbase 官方也为我们提供了好多demo,可以方便使用,实际上官方的
web ui 也是一个不错的选择。

参考资料

https://github.com/rongfengliang/sqler-gitbase-docker-compose
https://github.com/alash3al/sqler
https://github.com/rongfengliang/sqler-docker-compose
https://github.com/src-d/gitbase
https://github.com/src-d/gitbase-web
https://docs.sourced.tech/gitbase/

 

gitbase 集成sqler 进行git 代码分析的更多相关文章

  1. cube.js 学习(十一)cube + gitbase 分析git 代码

    这个是一个简单的demo,使用gitbase+cube 分析git 仓库代码 需求 我们平时使用的gitlab,或者gogs 等git 仓库管理工具,有自己的管理强项,但是对于分析上可能就不是那么强大 ...

  2. 集成TFS Build生成与SonarQube获取代码分析结果

    软件项目在开发过程中,往往由于任务重.时间紧等原因忽略软件代码的质量和规范检查,只注重软件功能的开发和交付.等软件交付上线以后,由于代码质量导致的问题会耗费开发和运维人员的大量时间.研发表明,项目上线 ...

  3. src-d engine 强大的git 历史分析工具

    src-d engine 包含了Babelfish ,同时可以看作是Babelfish 的升级版本,我们可以使用sql 进行代码分析 备注: 注意运行的时候需要容器支持 使用 安装docker   参 ...

  4. 探讨 Git 代码托管平台的若干问题

    关于 Git 版本控制软件种类繁多,维基百科收录的最早的版本控制系统是 1972 年贝尔实验室开发的 Source Code Control System.1986 年 Concurrent Vers ...

  5. 探讨 Git 代码托管平台的若干问题 - 2019 版

    关于 Git 版本控制软件种类繁多,维基百科收录的最早的版本控制系统是 1972 年贝尔实验室开发的 Source Code Control System.1986 年 Concurrent Vers ...

  6. Android代码分析工具lint学习

    1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...

  7. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  8. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  9. openwrt u-boot_mod 代码分析

    u-boot_mod 是具有web 浏览器的uboot,也就是传说中的不死uboot,这里的不死指的是不管怎么刷firmware 都可以方便更换firmware,而不是uboot本身就是不死的. 这里 ...

随机推荐

  1. Selenium+Java(八)Selenium下拉框处理

    Selenium定位下拉框中的元素与普通元素定位有所不同,下面介绍三种定位下拉框元素的方法. 下拉款HTML代码如图所示: 一.通过text定位 //获取下拉框对象 Select city = new ...

  2. Drool7s 什么叫KIE和生命周期-系列03课

    KIE是缩写,knowledge is everything.可以理解成一个上层接口,本质是由很多个实现类去实现功能的. 另外关于drool7s的生命周期,请看下图 本文只是让你了解drools7的一 ...

  3. IdentityServer4 实现OAuth2.0四种模式之密码模式

    接上一篇:IdentityServer4 实现OAuth2.0四种模式之客户端模式,这一篇讲IdentityServer4 使用密码模式保护API访问. 一,IdentityServer配置 1,添加 ...

  4. 2019 盛趣游戏java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.盛趣游戏等公司offer,岗位是Java后端开发,因为发展原因最终选择去了盛趣游戏,入职一年时间了,也成为了面 ...

  5. 移动端的touch click事件的理解+点透

    移动端在touch上一共有4个事件 touchstart touchmove touchend touchcancel, touchcancel, 一般来说,它们执行的顺序为 touchstart - ...

  6. JDBC模糊查询的4种方式

    1:%放在占位符中              parameters.add("%"+familyMemberQueryBean.getFullName()+"%" ...

  7. Mysql中类似于oracle中nvl()函数的ifnull()函数

    IFNULL(expr1,expr2)  如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境.  my ...

  8. 工厂交接班易出问题?MES系统实现精准对接

    工厂交接班制度非常的严格和复杂,而MES系统能让繁琐的交接班流程简单快捷无措.MES系统在发生事件时记录传递事件,还可以主动对事件进行分类和报告.人员可以查看和深入到以前或当前班次的个别事件. 随着工 ...

  9. RTP包的结构

    live555中数据的发送最后是要使用RTP协议发送的,下面介绍一下RTP包格式. RTP packet RTP是基于UDP协议的,RTP服务器会通过UDP协议,通常每次会发送一个RTP packet ...

  10. 【python】文件操作

    基本语法 open("文件名","访问方式") # 1. 打开文件 file = open("README.txt") # 2. 读取文件内 ...