# 特殊声明
tloc系列接口数据来源于离线计算,无法保证与其它接口同等的实时性、可用性,请业务侧使用时提前做好降级适配。
# 项目内代码行统计
如果使用 project_full_path,确保 project_full_path 编码过,例子:/api/v3/projects/tencent/code--> /api/v3/projects/tencent%2Fcode (/ 编码 %2F)
注意:
- 一次 commit 如果含有多种语言的文件,那么这个 commit 就有会多条数据 (一种语言一条)
- 传入参数
commit_limit表示一种语言在一个 commit 内超过 N 行就会过滤,默认是 3000 行 is_merge表示 commit 点的合并状态,有以下几种情况:
- 0: 普通 commit(未识别到合并)
- 1: 忽略 commit
- 2: 页面上 MR 合并生成的 commit
- 3: 页面上 Squash Merge 生成的 commit
- 4: 页面上 Rebase Merge 生成的 commit
- 5: 页面上 Cherry Pick 生成的 commit
- 6: 页面上 Revert 生成的 commit
- 你可以通过传入参数
apply_ignore_rules来表示是否要过滤,默认是 true,合并点都会过滤
返回值说明:
source_add: 源码的新增行数source_mod: 源码的修改行数source_del: 源码的删除行数comment_add: 注释的新增行数comment_mod: 注释的修改行数comment_del: 注释的删除行数blank_add: 空白行的新增行数blank_mod: 空白行的修改行数blank_del: 空白行的删除行数total_add: 总新增行数total_mod: 总修改行数total_del: 总删除行数total_work: 工作量,即总共的新增行数 + 修改行数
# 按天查询提交次数、提交用户数
查询项目的提交次数、提交用户数,默认统计全部分支的统计情况。
参数 timezone 决定了统计的时区,如想要返回结果与你的 Windows 时间一致timezone 的值输入 8
GET /api/v3/projects/:id/tloc/daily/count
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| timezone | integer(可选) | 指定你的当前时区,默认是 0 时区,范围 (-11,11) |
| commit_limit | integer(可选) | 源码单种语言变更 (增/删/改) 限制行数,默认是 3000 行,0 行表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
返回值:
[
{
"day": "2019-03-25",
"commit_user_count": 2,
"commit_count": 5
},
{
"day": "2019-03-26",
"commit_user_count": 1,
"commit_count": 3
}
]
# 按天查询提交代码行增量
查询项目的提交代码行增量情况。
参数 timezone 决定了统计的时区,如想要返回结果与你的 Windows 时间一致timezone 的值输入 8
GET /api/v3/projects/:id/tloc/daily/diff
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| timezone | integer(可选) | 指定你的当前时区,默认是 0 时区,范围 (-11,11) |
| commit_limit | integer(可选) | 源码单种语言变更 (增/删/改) 限制行数,默认是 3000 行,0 行表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
返回值:
[
{
"day": "2019-03-25",
"total_work": 7, //work=add+mod
"total_add": 6,
"total_mod": 1,
"total_del": 1,
"source_add": 6,
"source_mod": 0,
"source_del": 0,
"comment_add": 0,
"comment_mod": 1,
"comment_del": 1,
"blank_add": 0,
"blank_mod": 0,
"blank_del": 0
},
{
"day": "2019-03-26",
"total_work": 13,
"total_add": 12,
"total_mod": 1,
"total_del": 1,
"source_add": 6,
"source_mod": 0,
"source_del": 0,
"comment_add": 0,
"comment_mod": 1,
"comment_del": 1,
"blank_add": 6,
"blank_mod": 0,
"blank_del": 0
}
]
# 查询各用户提交增量
查询各用户提交代码行增量情况。
GET /api/v3/projects/:id/tloc/user/diff
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| commit_limit | integer(可选) | 源码单种语言变更 (增/删/改) 限制行数,默认是 3000 行,0 行表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
返回值:
[
{
"username": "git-user1",
"total_work": 32, //work=add+mod
"total_add": 32,
"total_mod": 0,
"total_del": 0,
"source_add": 20,
"source_mod": 0,
"source_del": 0,
"comment_add": 5,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 7,
"blank_mod": 0,
"blank_del": 0,
"commit_count": 3,
"commit_file_count": 3
},
{
"username": "git-user2",
"total_work": 16,
"total_add": 14,
"total_mod": 2,
"total_del": 0,
"source_add": 11,
"source_mod": 2,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 3,
"blank_mod": 0,
"blank_del": 0,
"commit_count": 2,
"commit_file_count": 2
}
]
# 查询各语言提交增量
查询不同语言提交的增量情况。
GET /api/v3/projects/:id/tloc/lang/diff
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| commit_limit | integer(可选) | 单次 commit 中源码单种语言变更 (增/删/改) 限制行数,默认是 3000 行,0 行表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
返回值:
[
{
"lang": "PHP",
"total_work": 15, //work=add+mod
"total_add": 14,
"total_mod": 1,
"total_del": 0,
"source_add": 12,
"source_mod": 1,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 2,
"blank_mod": 0,
"blank_del": 0,
"commit_file_count": 2
},
{
"lang": "C++",
"total_work": 16,
"total_add": 16,
"total_mod": 0,
"total_del": 0,
"source_add": 9,
"source_mod": 0,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 7,
"blank_mod": 0,
"blank_del": 0,
"commit_file_count": 1
}
]
# 查询指定 Commit 点的提交增量
查询指定 Commit 点下不同语言提交的增量情况。
GET /api/v3/projects/:id/tloc/commit/diff
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| sha | string | commit hash 值,必须是完整的 SHA1,如:b1b9d46f1f6c55e8d157e41538b60bf7482ed436 |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| commit_limit | integer(可选) | 单次 commit 中源码单种语言变更 (增/删/改) 限制行数,默认是 0 行,表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
| with_fork | boolean(可选) | 是否包含 fork 项目的提交点 (默认为 false,不包含) |
返回值:
[
{
"lang": "PHP",
"total_work": 15, //work=add+mod
"total_add": 14,
"total_mod": 1,
"total_del": 0,
"source_add": 12,
"source_mod": 1,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 2,
"blank_mod": 0,
"blank_del": 0,
"commit_file_count": 2
},
{
"lang": "C++",
"total_work": 16,
"total_add": 16,
"total_mod": 0,
"total_del": 0,
"source_add": 9,
"source_mod": 0,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 7,
"blank_mod": 0,
"blank_del": 0,
"commit_file_count": 1
}
]
# 查询文件的提交情况(滚动分页)
根据条件查询某个项目文件的提交情况,使用scroll_object_id参数进行滚动分页,即把返回结果的scroll_object_id作为参数传递到下一次请求中以拿到下一页的内容
注意:每个滚动srcoll_object_id有效值是 1 分钟,如果 1 分钟不使用它,进行下一个分页的查询,即失效,需要再次从头查起
GET /api/v3/projects/:id/tloc/file/diffs
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| sha | string(可选) | commit hash 值,必须是完整的 SHA1,如:b1b9d46f1f6c55e8d157e41538b60bf7482ed436 |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| lang | string(可选) | 指定语言 (默认全部语言) 参数示例:C++、C、Java、PHP、JavaScript、Python、Go、Markdown |
| commit_limit | integer(可选) | 源码单种语言变更 (增/删/改) 限制行数,默认是 1000 行,0 行表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
| author | string(可选) | 指定用户名 (默认全部用户) |
| white_paths | string(可选) | 指定白名单路径 (以英文的逗号隔开,默认全部路径) |
| black_paths | string(可选) | 指定黑名单路径 (以英文的逗号隔开,默认无黑名单路径) |
| scroll_object_id | string(可选) | 滚动分页标识 (默认第一页) |
| per_page | int(可选) | 指定页码大小 (默认 5000) |
返回值:
{
"start": 0, // 起始 index
"pages": 171, // 总页数
"page_size": 100, // 每页大小
"page_num": 1, // 页码
"total": 17023, // 总元素数
// 滚动分页标识,1 分钟内,用于下一次查询参数,可快速获取下一页内容
"scroll_object_id": "DnF1ZXJ5VGhlbkZldGNoCgAAAAA7TjDpFmRZdFltRllVUWdxX3NmeVpQZ3VQN3cAAAAAPDtHkxZaTFBYZmc1bVNCU24zOUJ3b2J0alFBAAAAADtlr1oWRW1GSFBvbXFRY3lQUHBtRTV3TjAwQQAAAAA9QNqVFlRzcFVMdnlYU1V5NFRqQUxGUDMzZkEAAAAAPUDalhZUc3BVTHZ5WFNVeTRUakFMRlAzM2ZBAAAAADztrCMWRGlTT01VOTlRbldSSVhGcnc2QnE1UQAAAAA7PnqUFkVvN0FpZFBtUjhHSHowUXpEQmFpb1EAAAAAPRj8ExZtTVk1Rm01ZFN2S3BGbXdUWFl1R2lnAAAAADt33UoWRTdqVFVCUV9RWnVxTUNlNnBBc1I0ZwAAAAA-terMFnJBMTZ6dEZFUmlPZVlmY2g5Z1ltS0E=",
"data": [
{
"lang": "Java",
"commit": "e98e306e5891af36b23b5075e49918e06024d230",
"time": "1601001396000",
"source_add": 1,
"source_mod": 1,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 0,
"blank_mod": 0,
"blank_del": 2,
"total_add": 1,
"total_mod": 1,
"total_del": 2,
"total_work": 2,
"path": "/scr/main/FileconfigConfig.java",
"username": "lekkoli",
"is_merge": 0
}, {
"lang": "Java",
"commit": "e98e306e5891af36b23b5075e49918e06024d230",
"time": "1601001396000",
"source_add": 1,
"source_mod": 3,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 0,
"blank_mod": 0,
"blank_del": 2,
"total_add": 1,
"total_mod": 3,
"total_del": 2,
"total_work": 4,
"path": "/src/main/ProjectServiceImpl.java",
"username": "lekkoli",
"is_merge": 0
}
]
}
# 查询指定文件名的完整文件路径
查询包含指定文件名的所有完整文件路径。
GET /api/v3/projects/:id/tloc/file/paths
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| file_name | string | 要搜索的文件名 |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| author | string(可选) | 指定用户名 (默认全部用户) |
返回值:
[
{
"commit": "78d070e1a7d6da17c59322b903531e6578487836",
"time": 1608693620000,
"path": "/README.md",
"username": "user1"
},
{
"commit": "a86a44c7a2897ae12d2583211370b4a83cd0cd42",
"time": 1608609762000,
"path": "/fullpathtest1/README.md",
"username": "user2"
}
]
# 查询 Commit 列表
根据条件查询某个项目 Commit 的列表
GET /api/v3/projects/:id/tloc/commit/list
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| author | string(可选) | 指定用户名 (默认全部用户) |
| message | string(可选) | 搜索提交信息 |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| commit_limit | integer(可选) | 单次 commit 中源码单种语言变更 (增/删/改) 限制行数,默认是 1000 行,0 行表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
| page | int(可选) | 指定页码 (默认第一页) |
| per_page | int(可选) | 指定页码大小 (默认 5000,最大值:5000) |
返回值:
[
{
"commit": "477e05b970b7853ddb2bb939a74e01ce1e97958c",
"message": "commit msg",
"username": "lekko",
"time": 1559110293000,
"lang": "Markdown",
"is_merge": 0,
"total_work": 15, //work=add+mod
"total_add": 14,
"total_mod": 1,
"total_del": 0,
"source_add": 12,
"source_mod": 1,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 2,
"blank_mod": 0,
"blank_del": 0,
"commit_file_count": 2,
"refs": [
"refs/heads/tag_1",
"refs/tags/tag_2",
"refs/heads/master",
"refs/heads/dev"
]
},{
"commit": "477e05b970b7853ddb2bb939a74e01ce1e97958c",
"message": "commit msg2",
"username": "lekko",
"time": 1559110293000,
"lang": "C++",
"is_merge": 2,
"total_work": 16,
"total_add": 16,
"total_mod": 0,
"total_del": 0,
"source_add": 9,
"source_mod": 0,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 7,
"blank_mod": 0,
"blank_del": 0,
"commit_file_count": 1,
"refs": []
},
...
]
# 查询 Git 项目提交列表
GET /api/v3/projects/:id/tloc/commits
查询 Git 项目提交列表,支持 commit message 模糊匹配及 commitSha 列表 或 author 列表 或 时间范围精准匹配
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| search | string | 模糊搜索提交 message |
| authors | array of string(可选) | git 提交作者列表 |
| commits | array of string(可选) | git 提交 sha1 列表 |
| branch_name | string(可选) | 指定分支名 (默认全部分支) |
| tag_name | string(可选) | 指定 Tag 名 (branch_name 为空时生效,默认全部 Tag) |
| begin_date | datetime(可选) | 开始时间;格式:yyyy-MM-dd'T'HH:mm:ssZ 例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | datetime(可选) | 结束时间;格式:yyyy-MM-dd'T'HH:mm:ssZ 例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
| page | integer(可选) | 分页(默认值:1) |
| per_page | integer(可选) | 默认页面大小(默认值:20) |
返回值:
[
{
"id": "cdb2e4d925ef7e58a623b36cc383e57380af2a6d",
"short_id": "cdb2e4d9",
"title": "string",
"message": "string",
"author_email": "string",
"author_name": "string",
"authored_date": "2024-07-15T09:33:11.965Z",
}
]
# 查询指定用户代码提交增量
查询指定用户代码提交增量情况。
GET /api/v3/projects/:id/tloc/users/:uid/diff
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| uid | integer | uid = 用户唯一标识 |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| commit_limit | integer(可选) | 单次 commit 中源码单种语言变更 (增/删/改) 限制行数,默认是 3000 行,0 行表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
返回值:
{
"username":"teser",
"total_work": 32, //work=add+mod
"total_add": 32,
"total_mod": 0,
"total_del": 0,
"source_add": 20,
"source_mod": 0,
"source_del": 0,
"comment_add": 5,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 7,
"blank_mod": 0,
"blank_del": 0,
"commit_count": 3,
"commit_file_count": 3
}
# 查询指定用户各语言提交增量
查询指定用户不同语言提交的增量情况。
GET /api/v3/projects/:id/tloc/users/:uid/lang
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| uid | integer | uid = 用户唯一标识 |
| begin_date | yyyy-MM-dd'T'HH:mm:ssZ | 开始时间;例如 2019-03-25T00:10:19+0000 或 2019-03-25T00:10:19+0800,时间参数必须转码,如“2019-03-25T00:10:19%2B0800” |
| end_date | yyyy-MM-dd'T'HH:mm:ssZ | 结束时间:例如 2019-03-26T00:10:19+0000 或 2019-03-26T00:10:19+0800,时间参数必须转码,如“2019-03-26T00:10:19%2B0800” |
| commit_limit | integer(可选) | 单次 commit 中源码单种语言变更 (增/删/改) 限制行数,默认是 3000 行,0 行表示不过滤 |
| apply_ignore_rules | boolean(可选) | 是否使用合并点过滤规则 (默认为 true,将过滤合并点) |
返回值:
[
{
"lang": "PHP",
"total_work": 15, //work=add+mod
"total_add": 14,
"total_mod": 1,
"total_del": 0,
"source_add": 12,
"source_mod": 1,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 2,
"blank_mod": 0,
"blank_del": 0,
"commit_file_count": 2
},
{
"lang": "C++",
"total_work": 16,
"total_add": 16,
"total_mod": 0,
"total_del": 0,
"source_add": 9,
"source_mod": 0,
"source_del": 0,
"comment_add": 0,
"comment_mod": 0,
"comment_del": 0,
"blank_add": 7,
"blank_mod": 0,
"blank_del": 0,
"commit_file_count": 1
}
]