首页 > 其他分享 >代码量统计

代码量统计

时间:2023-09-04 23:55:50浏览次数:45  
标签:node git int 代码 code commit message 统计

首先通过sudo yum install libgit2-devel 安装库文件

#define COMMIT_OLD_ID "9bcc1bd3b27a514118ee7452edc0ddd18730df78"
#define COMMIT_NEW_ID "1b885aba4c27661dd3e5270fe1d7e562b4224153"

#include <iostream>
#include <git2.h>

typedef struct _code_node
{
    int add;
    int delte;
}code_node, *pcode_node;

code_node code_num = {0};

int get_node_num(git_repository* repo, std::string  commitIdA, std::string  commitIdB)
{
        // 获取两个提交的 OID(哈希)
    git_oid oldCommitId, newCommitId;
    int error =

    git_oid_fromstr(&oldCommitId, commitIdA.c_str());
    git_oid_fromstr(&newCommitId, commitIdB.c_str());

    // 检查提交是否存在
    git_commit* oldCommit = nullptr;
    git_commit* newCommit = nullptr;
    error = git_commit_lookup(&oldCommit, repo, &oldCommitId);
    if (error != 0) {
        std::cerr << "Failed to lookup old commit: " << giterr_last()->message << std::endl;
        return 1;
    }

    error = git_commit_lookup(&newCommit, repo, &newCommitId);
    if (error != 0) {
        std::cerr << "Failed to lookup new commit: " << giterr_last()->message << std::endl;
        git_commit_free(oldCommit);
        return 1;
    }

    // 获取两个提交的树
    git_tree* oldTree;
    git_tree* newTree;

    error = git_commit_tree(&oldTree, oldCommit);
    if (error != 0) {
        std::cerr << "Failed to get old tree: " << giterr_last()->message << std::endl;
        git_commit_free(oldCommit);
        git_commit_free(newCommit);
        return 1;
    }

    error = git_commit_tree(&newTree, newCommit);
    if (error != 0) {
        std::cerr << "Failed to get new tree: " << giterr_last()->message << std::endl;
        git_commit_free(oldCommit);
        git_commit_free(newCommit);
        return 1;
    }

    // 初始化差异选项
    git_diff_options diffOpts = GIT_DIFF_OPTIONS_INIT;
    git_diff* diff = nullptr;
    error = git_diff_tree_to_tree(&diff, repo, oldTree, newTree, &diffOpts);
    if (error != 0) {
        std::cerr << "Failed to calculate diff: " << giterr_last()->message << std::endl;
        git_commit_free(oldCommit);
        git_commit_free(newCommit);
        return 1;
    }

    // 获取差异的统计信息
    git_diff_stats* stats = nullptr;
    error = git_diff_get_stats(&stats, diff);
    if (error != 0) {
        std::cerr << "Failed to get diff stats: " << giterr_last()->message << std::endl;
    } else {
        code_num.add += git_diff_stats_insertions(stats);
        code_num.delte += git_diff_stats_deletions(stats);
        // 释放统计信息
        git_diff_stats_free(stats);
    }

    // 释放资源
    git_diff_free(diff);
    git_commit_free(oldCommit);
    git_commit_free(newCommit);
    return 0;
}
int main() {
    git_libgit2_init();

    // 打开或初始化 Git 存储库
    git_repository* repo = nullptr;
    int error = git_repository_open(&repo, "/home/CodeHub/NetAnalysis");
    if (error != 0) {
        std::cerr << "Failed to open repository: " << giterr_last()->message << std::endl;
        git_libgit2_shutdown();
        return 1;
    }

    get_node_num(repo, COMMIT_OLD_ID, COMMIT_NEW_ID);
    std::cout << "Total additions: " << code_num.add << std::endl;
    std::cout << "Total deletions: " << code_num.delte << std::endl;
    git_repository_free(repo);
    git_libgit2_shutdown();

    return 0;
}

 

 

标签:node,git,int,代码,code,commit,message,统计
From: https://www.cnblogs.com/dandan520/p/17678434.html

相关文章

  • R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性|
    原文链接:http://tecdat.cn/?p=24334最近我们被客户要求撰写关于贝叶斯线性回归的研究报告,包括一些图形和统计输出。像任何统计建模一样,贝叶斯建模可能需要为你的研究问题设计合适的模型,然后开发该模型,使其符合你的数据假设并运行1.了解 Stan统计模型可以在R或其他统计语言的......
  • Go语言实现Kafka消费者的示例代码
    Kafka是一种分布式流处理平台,由Facebook于2011年推出,现在已经成为Apache项目的一部分。Kafka提供了高可用性、可扩展性和低延迟的消息传递服务,适用于处理实时和离线数据。Kafka的主要功能包括生产者-消费者通信、批处理和实时数据流处理。Kafka基于发布/订阅模型,允许消息发布者将数......
  • 代码(待加解释) hdu2196
    #include<bits/stdc++.h>usingnamespacestd;constintmaxn=3e4+10;#definelllonglonginthead[maxn],ver[maxn],nxt[maxn],edge[maxn];inttot;llf[maxn][3];intrx[maxn];voiddfs1(intx,intfa){  for(inti=head[x];i;i=nxt[i])  {   ......
  • Git代码管理规范
    Git代码管理规范分支命名master分支master为主分支,也是用于部署生产环境的分支,需要确保master分支稳定性。master分支一般由release以及hotfix分支合并,任何时间都不能直接修改代码。develop分支develop为开发环境分支,始终保持最新完成以及bug修复后的代码,用于前......
  • 动手实践-XA模式代码
             ......
  • csgo如何显示帧数(含代码示例)
    CSGO可以通过控制台命令来显示帧数,代码如下:打开CSGO游戏,按下“~”键打开控制台;CSGO可以通过控制台命令来显示帧数,代码如下:1.打开CSGO游戏,按下“~”键打开控制台;2.在控制台输入“cl_showfps1”,即可开启帧数显示;3.若要关闭帧数显示,只需在控制台输入“cl_showfps0”即可。......
  • 解决MASM32代码汇编出错: error A2181: initializer must be a string or single item
    最近用MASM32编程更新SysInfo,增加对IPv6连接信息的收集,使用到了typedefstruct_MIB_TCP6ROW_OWNER_MODULE{UCHARucLocalAddr[16];DWORDdwLocalScopeId;DWORDdwLocalPort;UCHARucRemoteAddr[16];DWORDdwRemoteScopeI......
  • 如何利用好 IntelliJ IDEA 的调试功能辅助代码调试
    文章目录调试的重要性配置断点启动调试利用IntelliJIDEA的调试功能观察变量和表达式单步执行和逐级跳转查看调用栈条件断点监视变量远程调试使用断点条件和日志调试最佳实践总结......
  • 如何利用FuncGPT告别繁琐的开源代码调试
    作为一名开发人员,您是否曾经在浩如烟海的开源社区中搜索代码,然后花费大量时间测试、调试,最后才发现这些代码并不符合您的需求?专注Java生成AI函数的FuncGPT(慧函数)就像您的私人编程助手,只需输入你的需求,就能提供符合要求的函数,让你告别繁琐的搜索、测试和调试,迈向高效的开发之旅。一......
  • 一个可读性高的代码对程序员有多重要
    人们都以为编写任何程序员都能够阅读和理解的代码是软件开发人员的固有技能。事实上只有20%的程序员具备这种能力。你所写的代码不仅要被机器理解,而且还要被人类理解。在软件开发中,代码质量应该是每个开发人员的重中之重。因此,在整个开发过程中,交付高质量的工作代码应该是每个开......