吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 330|回复: 9
收起左侧

[资源求助] 求可以计算SVN代码行数的方法

[复制链接]
Paddler 发表于 2024-7-31 20:01
120吾爱币
需要精确计算出SVN中代码版本间代码量
statsvn已使用过,效果不是很显著

最佳答案

查看完整内容

有 @echo off setlocal enabledelayedexpansion :: 设置SVN版本库的URL和两个版本号 set REPO_URL=your_svn_repository_url set REV1=100 set REV2=200 :: 创建临时文件用于存储变更的文件列表 set SUMMARIZE_FILE=svn_summarize.txt :: 使用svn diff命令的--summarize选项来获取变更的文件列表 svn diff -r %REV1%:%REV2% --summarize %REPO_URL% > %SUMMARIZE_FILE% :: 初始化行数计数器 set ADD_LINES=0 ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lvshu 发表于 2024-7-31 20:01


@echo off
setlocal enabledelayedexpansion

:: 设置SVN版本库的URL和两个版本号
set REPO_URL=your_svn_repository_url
set REV1=100
set REV2=200

:: 创建临时文件用于存储变更的文件列表
set SUMMARIZE_FILE=svn_summarize.txt

:: 使用svn diff命令的--summarize选项来获取变更的文件列表
svn diff -r %REV1%:%REV2% --summarize %REPO_URL% > %SUMMARIZE_FILE%

:: 初始化行数计数器
set ADD_LINES=0
set DEL_LINES=0

:: 读取变更文件列表并计算每个文件的变化
for /f "tokens=*" %%i in (%SUMMARIZE_FILE%) do (
    set FILE=%%i
    if not "!FILE:~0,1!" equ "D" (
        set FILE_PATH=!FILE:~5!
        if "!FILE_PATH!" neq "" (
            :: 获取旧版本的文件内容并计算行数
            svn cat -r %REV1% %REPO_URL%/%FILE_PATH% | find /v /c "" > old_lines.txt
            :: 获取新版本的文件内容并计算行数
            svn cat -r %REV2% %REPO_URL%/%FILE_PATH% | find /v /c "" > new_lines.txt
            for /f %%l in (old_lines.txt) do set OLD_LINES=%%l
            for /f %%l in (new_lines.txt) do set NEW_LINES=%%l
            set /a ADD_LINES+=NEW_LINES-OLD_LINES
            del old_lines.txt
            del new_lines.txt
        )
    )
)

:: 输出统计结果
echo Added lines: %ADD_LINES%
echo Deleted lines: %DEL_LINES%
echo Net change: %ADD_LINES% - %DEL_LINES%

:: 删除临时文件
del %SUMMARIZE_FILE%

endlocal
 楼主| Paddler 发表于 2024-7-31 20:55
lvshu 发表于 2024-7-31 22:22
lvshu 发表于 2024-7-31 22:23
用脚本
示例:
import subprocess
import re

def get_svn_diff_line_counts(revision_from, revision_to):
    # 使用svn diff命令获取两个版本之间的差异
    result = subprocess.run(['svn', 'diff', '-r', f'{revision_from}:{revision_to}', '--summarize'],
                            stdout=subprocess.PIPE, text=True)
   
    # 解析输出结果
    added = 0
    deleted = 0
    for line in result.stdout.splitlines():
        match = re.match(r'^\S+\s+\S+\s+(\d+)\s+(\S+)$', line)
        if match:
            lines_changed = int(match.group(1))
            change_type = match.group(2)
            if change_type == 'A':
                added += lines_changed
            elif change_type == 'D':
                deleted += lines_changed
   
    return added, deleted

# 比较版本1和版本100之间的差异
added, deleted = get_svn_diff_line_counts(1, 100)
print(f'Added lines: {added}')
print(f'Deleted lines: {deleted}')
lvshu 发表于 2024-7-31 22:38
SLOCCount,CLOC,Notify,Stat,TortoiseSVN,AnkhSVN,还有一个叫做pysvn的Python模块,这些都是主流比较常用的 ,全部都是开源免费的
 楼主| Paddler 发表于 2024-8-1 08:55
lvshu 发表于 2024-7-31 22:23
用脚本
示例:
import subprocess

有bat脚本么
 楼主| Paddler 发表于 2024-8-1 08:56
lvshu 发表于 2024-7-31 22:38
SLOCCount,CLOC,Notify,Stat,TortoiseSVN,AnkhSVN,还有一个叫做pysvn的Python模块,这些都是主流比较 ...

好的,我一个一个试试
 楼主| Paddler 发表于 2024-8-1 10:12
lvshu 发表于 2024-7-31 22:38
SLOCCount,CLOC,Notify,Stat,TortoiseSVN,AnkhSVN,还有一个叫做pysvn的Python模块,这些都是主流比较 ...

我用的是TorroiseSVN,但是我想要的是统计版本到版本之间代码修改的行数,但是我使用stat得到的结果并不是很准确
 楼主| Paddler 发表于 2024-8-5 14:15
lvshu 发表于 2024-8-3 21:22

@echo off
setlocal enabledelayedexpansion

好,谢谢,能给我一个示例么
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-14 19:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表