git和svn接口调用小试

gitlab

import requests
import pandas as pd# GitLab API设置
GITLAB_API_URL = "https://gitlab.com/api/v4"
PROJECT_ID = "your_project_id" 
ACCESS_TOKEN = "your_access_token"def get_gitlab_commits(project_id, token, per_page=100):"""获取 GitLab 仓库的所有提交记录"""commits = []page = 1while True:# 构造 API 请求 URLurl = f"{GITLAB_API_URL}/projects/{project_id}/repository/commits"params = {"per_page": per_page,"page": page,"private_token": token}# 发送请求获取提交记录response = requests.get(url, params=params)if response.status_code != 200:raise Exception(f"Failed to fetch commits: {response.text}")data = response.json()if not data:break  # 如果没有更多数据则退出commits.extend(data)page += 1return commitsdef get_changed_files_in_commit(project_id, token, commit_sha):"""获取指定提交的所有变更文件"""url = f"{GITLAB_API_URL}/projects/{project_id}/repository/commits/{commit_sha}/diff"params = {"private_token": token}response = requests.get(url, params=params)if response.status_code != 200:raise Exception(f"Failed to fetch commit diff: {response.text}")data = response.json()changed_files = [file['new_path'] for file in data iffile['new_path'].endswith('.c') or file['new_path'].endswith('.h')]return changed_filesdef count_file_changes(project_id, token):"""统计 .c 和 .h 文件的历史变更次数"""commits = get_gitlab_commits(project_id, token)file_changes = {}# 遍历每个提交记录,获取变更的文件for commit in commits:commit_sha = commit['id']changed_files = get_changed_files_in_commit(project_id, token, commit_sha)for file_path in changed_files:if file_path not in file_changes:file_changes[file_path] = 0file_changes[file_path] += 1  # 每次出现,变更次数加1# 对于没有变更的文件,记录为 0all_files = set(file_changes.keys())return file_changesdef save_to_excel(file_changes, output_file='file_changes.xlsx'):"""将文件变更次数保存到 Excel 文件"""# 将文件变更次数转换为 DataFramedf = pd.DataFrame(list(file_changes.items()), columns=['File', 'Change Count'])# 保存为 Excel 文件df.to_excel(output_file, index=False, engine='openpyxl')print(f"File changes have been saved to {output_file}")def main():# 获取文件变更统计file_changes = count_file_changes(PROJECT_ID, ACCESS_TOKEN)# 将结果保存为 Excel 文件save_to_excel(file_changes)if __name__ == '__main__':main()

svn

import subprocess
import xml.etree.ElementTree as ET
import pandas as pddef run_svn_command(cmd, repo_url=None, working_copy=None):"""运行 SVN 命令并返回输出"""if working_copy:cmd.insert(0, working_copy)  elif repo_url:cmd.insert(0, repo_url) result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)if result.returncode != 0:raise Exception(f"SVN command failed: {result.stderr}")return result.stdoutdef get_svn_log(repo_url, start_rev=0, limit=100):"""获取 SVN 仓库的提交日志(分页)"""cmd = ['svn', 'log', '--xml', '--verbose', '--start', str(start_rev), '--limit', str(limit)]log_output = run_svn_command(cmd, repo_url=repo_url)return log_outputdef get_changed_files_in_commit(log_xml):"""从 SVN 日志 XML 输出中提取每个提交的变化文件"""changed_files = []root = ET.fromstring(log_xml)for logentry in root.findall('logentry'):revision = logentry.get('revision')for path in logentry.findall('paths/path'):file_path = path.textif file_path.endswith('.c') or file_path.endswith('.h'):changed_files.append((revision, file_path))return changed_filesdef get_all_commits(repo_url):"""获取 SVN 仓库所有提交的 .c 和 .h 文件的变更历史"""start_rev = 0limit = 100  # 每次请求获取 100 条日志all_changed_files = []while True:log_xml = get_svn_log(repo_url, start_rev, limit)changed_files = get_changed_files_in_commit(log_xml)if not changed_files:break  # 没有更多提交记录,停止循环all_changed_files.extend(changed_files)# 获取下一次请求的起始版本号root = ET.fromstring(log_xml)last_revision = root.find('logentry').get('revision')start_rev = int(last_revision) + 1return all_changed_filesdef count_file_changes(repo_url):"""统计 SVN 仓库中每个 .c 和 .h 文件的变更次数"""all_changed_files = get_all_commits(repo_url)file_changes = {}for revision, file_path in all_changed_files:if file_path not in file_changes:file_changes[file_path] = 0file_changes[file_path] += 1  # 每次出现,变更次数加1return file_changesdef save_to_excel(file_changes, output_file='file_changes.xlsx'):"""将文件变更次数保存到 Excel 文件"""# 将文件变更次数转换为 DataFramedf = pd.DataFrame(list(file_changes.items()), columns=['File', 'Change Count'])# 保存为 Excel 文件df.to_excel(output_file, index=False, engine='openpyxl')print(f"File changes have been saved to {output_file}")def main():# 远程 SVN 仓库的 URLrepo_url = 'https://your-svn-repository-url/path/to/repository'# 获取文件变更统计file_changes = count_file_changes(repo_url)# 将结果保存为 Excel 文件save_to_excel(file_changes)if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497977.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP自然语言处理——使用飞桨实现基于LSTM的情感分析

任务说明: 通过对电影评论历史数据分析,构建深度学习分类模型,最终完成对新的数据样本的识别分类。 任务要求: 运用神经网络算法,创建、训练、评估模型,完成对电影评论的情感分类任务。 数据集说明&#xf…

百度热力图数据处理流程Arcgis PRO篇,Arcgis,QGIS见链接其他文章

目录 0、Arcgis,Arcgis Pro,QGis软件选择1、Arcgis,QGIS软件数据处理教程(最近太忙后续更新)1.1、Arcgis篇操作1.2、QGIS篇操作 2、Arcgis PRO 百度热力图数据处理流程!!!&#xff0…

从底层源码剖析AQS的来龙去脉!

文章目录 一、AQS概述二、AQS底层结构2.1 AQS底层基本变量2.2 Node节点结构2.3 FIFO队列 三、源码分析3.1 lock3.1.1 lock3.1.2 acquire3.1.2.1 tryAcquire3.1.2.2 addWaiter3.1.2.3 acquireQueued3.1.2.4 selfInterrupt 3.2 unlock 四、写在最后 一、AQS概述 谈到并发&#x…

运动健康小程序SpringBoot+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专…

【Linux网络编程】第十七弹---深入理解以太网与ARP协议:从帧格式到数据报解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、认识以太网 1.1、以太网帧格式 1.2、认识 MAC 地址 1.3、对比理解 MAC 地址和 IP 地址 1.4、认识 MT…

Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成logback 及 原理分析

文章目录 Pre官网集成步骤POM依赖使用第一步:编写 Logback 的配置文件第二步:在代码中使用 SLF4J 原理分析1. 获取对应的 ILoggerFactory2. 根据 ILoggerFactory 获取 Logger 实例3. 日志记录过程 小结 Pre Java - 日志体系_Apache Commons Logging&…

引发C++程序内存泄漏的原因分析与排查方法总结

目录 1、概述 2、内存泄漏与程序的位数 3、调用哪些接口去动态申请内存? 4、引发内存泄漏的常见原因总结 4.1、通过malloc/new等动态申请的内存,在使用完后,没有调用free/delete去释放(也可能是调用了上面讲到的HeapAlloc或V…

仓颉编程语言:编程世界的 “文化瑰宝”

我的个人主页 在当今编程领域百花齐放的时代,各种编程语言争奇斗艳,服务于不同的应用场景和开发者群体。然而,有这样一种编程语言,它承载着独特的文化内涵,宛如编程世界里一颗熠熠生辉的“文化瑰宝”,那就…

【Java】Spring Bean生命周期讲解

Spring bean生命周期的重要性 了解bean生命周期有助于更好掌握Spring框架,理解其对bean实例的管理和创建方式。有助于解决bean相关问题,如循环依赖问题,利于编写健壮、灵活、易维护的应用程序。 bean definition概念 spring容器实例化时&…

物联网工厂可视化监控平台:为智能制造打造的可视化大屏

01行业背景 随着技术的不断进步,物联网(IoT)已经成为推动数字化转型的核心力量。物联网通过连接各种设备和传感器,实现数据的实时收集、传输和分析,为各行各业带来了革命性的变化。随着5G、云计算、大数据等技术的成熟…

跟着问题学18——大模型基础transformer模型详解(4)解码器

3 Decoder层 图中可以看到,解码器Decoder其实和编码器Encoder大同小异,核心区别是在最下面额外多了一个掩码多头注意力层masked mutil-head attetion。在解码器中,自注意力层仅被允许“注意”输出序列中前面的单词信息。这是通过在自注意力计…

day-102 二叉树中的链表

思路 DFS,先将链表转换为字符串s在进行匹配 解题过程 对二叉树进行遍历,每到一个新节点判断当前的字符串t长度是否大于等于的长度,如果满足,再将t从末尾截取s.length()长度的子串与s进行匹配,若匹配成功,结果为true&a…

RACI矩阵在项目管理中的应用:优化任务管理

在团队合作中,最怕的就是责任不清、任务分工混乱。谁该做什么,谁对结果负责,谁需要提供帮助,谁需要被通知?如果这些问题没有理清楚,就很容易出现任务没完成、团队内耗或者“甩锅”的情况。RACI责任矩阵正是…

uniapp - 小程序实现摄像头拍照 + 水印绘制 + 反转摄像头 + 拍之前显示时间+地点 + 图片上传到阿里云服务器

前言 uniapp,碰到新需求,反转摄像头,需要在打卡的时候对上传图片加上水印,拍照前就显示当前时间日期地点,拍摄后在呈现刚才拍摄的图加上水印,最好还需要将图片上传到阿里云。 声明 水印部分代码是借鉴的…

Fetch处理大模型流式数据请求与解析

为什么有的大模型可以一次返回多个 data? Server-Sent Events (SSE):允许服务器连续发送多个 data: 行,每个代表一个独立的数据块。 流式响应:大模型服务通常以流式响应方式返回数据,提高响应速度。 批量处理&#x…

怎么在电脑桌面上设置备忘录,桌面工作提醒小工具哪个好?

在现代的工作和生活中,我们经常需要记录重要的事项和提醒。而在电脑上设置备忘录,无疑是最方便和有效的方法之一。那么,怎么在电脑桌面上设置备忘录?又有哪个工作提醒小工具值得推荐呢? 以Windows系统为例&#xff0c…

EasyExcel简介和读写操作

EasyExcel简介 官网地址:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网 EasyExcel 的主要特点如下: 1、高性能:EasyExcel 采用了异步导入导出的方式,并且底层使用 NIO 技术实现,使得其在导入导出大…

【网络协议】路由信息协议 (RIP)

未经许可,不得转载。 路由信息协议(Routing Information Protocol,简称 RIP)是一种使用跳数(hop count)作为路由度量标准的路由协议,用于确定源网络和目标网络之间的最佳路径。 文章目录 什么是…

MySQL5.7.26-Linux-安装(2024.12)

文章目录 1.下载压缩包1.访问MySQL版本归档2.找到5.7.26并下载3.百度网盘 2.Linux安装1.卸载原来的MySQL8.0.26(如果没有则无需在意)1.查看所有mysql的包2.批量卸载3.删除残留文件**配置文件**(默认路径): 4.**验证卸载…

《云原生安全攻防》-- K8s安全配置:CIS安全基准与kube-bench工具

在本节课程中,我们来了解一下K8s集群的安全配置,通过对CIS安全基准和kube-bench工具的介绍,可以快速发现K8s集群中不符合最佳实践的配置项,及时进行修复,从而来提高集群的安全性。 在这个课程中,我们将学习…