From c2a32e497baf3441aef0059f81c456076e71ac6d Mon Sep 17 00:00:00 2001 From: rayduan <719328408@qq.com> Date: Tue, 9 Mar 2021 17:31:17 +0800 Subject: [PATCH 1/9] Update MethodParserUtils.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 参数分隔符改为& --- .../main/java/com/dr/code/diff/util/MethodParserUtils.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/com/dr/code/diff/util/MethodParserUtils.java b/application/src/main/java/com/dr/code/diff/util/MethodParserUtils.java index 0382def5..67a69a69 100644 --- a/application/src/main/java/com/dr/code/diff/util/MethodParserUtils.java +++ b/application/src/main/java/com/dr/code/diff/util/MethodParserUtils.java @@ -70,9 +70,10 @@ public class MethodParserUtils { NodeList parameters = n.getParameters(); if(!CollectionUtils.isEmpty(parameters)){ for (int i = 0; i < parameters.size(); i++) { - params.append(parameters.get(i).getType()); + String param = parameters.get(i).getType().toString(); + params.append(param.replaceAll(" ", "")); if(i != parameters.size() -1){ - params.append(","); + params.append("&"); } } } -- Gitee From 4455de22b073855014d0deb92f565666cb360ff3 Mon Sep 17 00:00:00 2001 From: rayduan <719328408@qq.com> Date: Tue, 9 Mar 2021 17:31:26 +0800 Subject: [PATCH 2/9] Create MethodParserUtils.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 参数分隔符改为& -- Gitee From f093b10b6be142dbfefa5e582d87385dddec4473 Mon Sep 17 00:00:00 2001 From: rayduan <719328408@qq.com> Date: Sun, 28 Mar 2021 15:41:22 +0800 Subject: [PATCH 3/9] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d4f85d29..b3b81ef3 100644 --- a/README.md +++ b/README.md @@ -63,3 +63,5 @@ ], "uniqueData": "[{\"classFile\":\"com/dr/code/diff/config/GitConfig\",\"methodInfos\":[{\"methodName\":\"cloneRepository\",\"parameters\":\"String gitUrl,String codePath,String commitId\"},{\"methodName\":\"diffMethods\",\"parameters\":\"DiffMethodParams diffMethodParams\"},{\"methodName\":\"getClassMethods\",\"parameters\":\"String oldClassFile,String mewClassFile,DiffEntry diffEntry\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/code/diff/controller/CodeDiffController\",\"methodInfos\":[{\"methodName\":\"getList\",\"parameters\":\"@ApiParam(required = true, name = \\\"gitUrl\\\", value = \\\"git远程仓库地址\\\") @RequestParam(value = \\\"gitUrl\\\") String gitUrl,@ApiParam(required = true, name = \\\"baseVersion\\\", value = \\\"git原始分支或tag\\\") @RequestParam(value = \\\"baseVersion\\\") String baseVersion,@ApiParam(required = true, name = \\\"nowVersion\\\", value = \\\"git现分支或tag\\\") @RequestParam(value = \\\"nowVersion\\\") String nowVersion\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/code/diff/service/impl/CodeDiffServiceImpl\",\"methodInfos\":[{\"methodName\":\"getDiffCode\",\"parameters\":\"DiffMethodParams diffMethodParams\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/common/utils/string/ScmStringUtil\",\"methodInfos\":[],\"type\":\"ADD\"}]" } + +#近期github不稳定,请访问https://gitee.com/Dray/code-diff.git -- Gitee From 4c2b52dc2ba9dc51c161a2a5fa71f4b9cff1c165 Mon Sep 17 00:00:00 2001 From: rayduan <719328408@qq.com> Date: Mon, 29 Mar 2021 16:43:57 +0800 Subject: [PATCH 4/9] Update README.md --- README.md | 324 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 275 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index c7908456..15e8ca3f 100644 --- a/README.md +++ b/README.md @@ -14,55 +14,281 @@ #### 2、运行项目,访问http://127.0.0.1:8085/doc.html 2.1 输入git地址,填写差异分支的旧版本,新版本,执行,就可以获取差异信息 2.2 { - "code": 10000, - "msg": "业务处理成功", - "data": [ - { - "classFile": "com/dr/code/diff/config/GitConfig", - "methodInfos": [ - { - "methodName": "cloneRepository", - "parameters": "String gitUrl,String codePath,String commitId" - }, - { - "methodName": "diffMethods", - "parameters": "DiffMethodParams diffMethodParams" - }, - { - "methodName": "getClassMethods", - "parameters": "String oldClassFile,String mewClassFile,DiffEntry diffEntry" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/code/diff/controller/CodeDiffController", - "methodInfos": [ - { - "methodName": "getList", - "parameters": "@ApiParam(required = true, name = \"gitUrl\", value = \"git远程仓库地址\") @RequestParam(value = \"gitUrl\") String gitUrl,@ApiParam(required = true, name = \"baseVersion\", value = \"git原始分支或tag\") @RequestParam(value = \"baseVersion\") String baseVersion,@ApiParam(required = true, name = \"nowVersion\", value = \"git现分支或tag\") @RequestParam(value = \"nowVersion\") String nowVersion" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/code/diff/service/impl/CodeDiffServiceImpl", - "methodInfos": [ - { - "methodName": "getDiffCode", - "parameters": "DiffMethodParams diffMethodParams" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/common/utils/string/ScmStringUtil", - "methodInfos": [], - "type": "ADD" - } - ], - "uniqueData": "[{\"classFile\":\"com/dr/code/diff/config/GitConfig\",\"methodInfos\":[{\"methodName\":\"cloneRepository\",\"parameters\":\"String gitUrl,String codePath,String commitId\"},{\"methodName\":\"diffMethods\",\"parameters\":\"DiffMethodParams diffMethodParams\"},{\"methodName\":\"getClassMethods\",\"parameters\":\"String oldClassFile,String mewClassFile,DiffEntry diffEntry\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/code/diff/controller/CodeDiffController\",\"methodInfos\":[{\"methodName\":\"getList\",\"parameters\":\"@ApiParam(required = true, name = \\\"gitUrl\\\", value = \\\"git远程仓库地址\\\") @RequestParam(value = \\\"gitUrl\\\") String gitUrl,@ApiParam(required = true, name = \\\"baseVersion\\\", value = \\\"git原始分支或tag\\\") @RequestParam(value = \\\"baseVersion\\\") String baseVersion,@ApiParam(required = true, name = \\\"nowVersion\\\", value = \\\"git现分支或tag\\\") @RequestParam(value = \\\"nowVersion\\\") String nowVersion\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/code/diff/service/impl/CodeDiffServiceImpl\",\"methodInfos\":[{\"methodName\":\"getDiffCode\",\"parameters\":\"DiffMethodParams diffMethodParams\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/common/utils/string/ScmStringUtil\",\"methodInfos\":[],\"type\":\"ADD\"}]" - } + "code": 10000, + "msg": "业务处理成功", + "data": [ + { + "classFile": "com/dr/application/InstallCert", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/controller/Calculable", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/controller/JenkinsPluginController", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/controller/LoginController", + "methodInfos": [ + { + "methodName": "captcha", + "parameters": "HttpServletRequest&HttpServletResponse" + }, + { + "methodName": "login", + "parameters": "LoginUserParam&HttpServletRequest" + }, + { + "methodName": "testInt", + "parameters": "int&char" + }, + { + "methodName": "testInt", + "parameters": "String&int" + }, + { + "methodName": "testInt", + "parameters": "short&int" + }, + { + "methodName": "testInt", + "parameters": "int[]" + }, + { + "methodName": "testInt", + "parameters": "T[]" + }, + { + "methodName": "testInt", + "parameters": "Calculable&int&int" + }, + { + "methodName": "testInt", + "parameters": "Map&List&Set" + }, + { + "methodName": "display", + "parameters": "" + }, + { + "methodName": "a", + "parameters": "InnerClass" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/application/app/controller/RoleController", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/controller/TestController", + "methodInfos": [ + { + "methodName": "test", + "parameters": "" + }, + { + "methodName": "getPom", + "parameters": "HttpServletResponse" + }, + { + "methodName": "getDeList", + "parameters": "" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/application/app/controller/view/RoleViewController", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/param/AddRoleParam", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/vo/DependencyVO", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/vo/JenkinsPluginsVO", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/vo/RoleVO", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/config/ExceptionAdvice", + "methodInfos": [ + { + "methodName": "handleException", + "parameters": "Exception" + }, + { + "methodName": "handleMissingServletRequestParameterException", + "parameters": "MissingServletRequestParameterException" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/application/config/GitConfig", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/config/JenkinsConfig", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/ddd/StaticTest", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/ddd/Test", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/util/GitAdapter", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/common/errorcode/BizCode", + "methodInfos": [ + { + "methodName": "getCode", + "parameters": "" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/common/response/ApiResponse", + "methodInfos": [ + { + "methodName": "success", + "parameters": "" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/jenkins/JenkinsApplication", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/config/JenkinsConfigure", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/controller/JenkinsController", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/controller/TestApi", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/dto/JobAddDto", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/service/JenkinsService", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/service/impl/JenkinsServiceImpl", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/util/GenerateUniqueIdUtil", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/vo/DeviceVo", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/vo/GoodsVO", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/vo/JobAddVo", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/repository/user/dto/query/RoleQueryDto", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/repository/user/dto/result/RoleResultDto", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/user/service/impl/PermissionServiceImpl", + "methodInfos": [ + { + "methodName": "getPermissionByRoles", + "parameters": "List" + }, + { + "methodName": "buildMenuTree", + "parameters": "List" + }, + { + "methodName": "getSubMenus", + "parameters": "Long&Map>" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/user/service/impl/RoleServiceImpl", + "methodInfos": [ + { + "methodName": "getByUserId", + "parameters": "Long" + }, + { + "methodName": "getListByPage", + "parameters": "RoleQueryDto" + } + ], + "type": "MODIFY" + } + ], + "uniqueData": "[{\"classFile\":\"com/dr/application/InstallCert\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/Calculable\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/JenkinsPluginController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/LoginController\",\"methodInfos\":[{\"methodName\":\"captcha\",\"parameters\":\"HttpServletRequest&HttpServletResponse\"},{\"methodName\":\"login\",\"parameters\":\"LoginUserParam&HttpServletRequest\"},{\"methodName\":\"testInt\",\"parameters\":\"int&char\"},{\"methodName\":\"testInt\",\"parameters\":\"String&int\"},{\"methodName\":\"testInt\",\"parameters\":\"short&int\"},{\"methodName\":\"testInt\",\"parameters\":\"int[]\"},{\"methodName\":\"testInt\",\"parameters\":\"T[]\"},{\"methodName\":\"testInt\",\"parameters\":\"Calculable&int&int\"},{\"methodName\":\"testInt\",\"parameters\":\"Map&List&Set\"},{\"methodName\":\"display\",\"parameters\":\"\"},{\"methodName\":\"a\",\"parameters\":\"InnerClass\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/app/controller/RoleController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/TestController\",\"methodInfos\":[{\"methodName\":\"test\",\"parameters\":\"\"},{\"methodName\":\"getPom\",\"parameters\":\"HttpServletResponse\"},{\"methodName\":\"getDeList\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/app/controller/view/RoleViewController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/param/AddRoleParam\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/DependencyVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/JenkinsPluginsVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/RoleVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/config/ExceptionAdvice\",\"methodInfos\":[{\"methodName\":\"handleException\",\"parameters\":\"Exception\"},{\"methodName\":\"handleMissingServletRequestParameterException\",\"parameters\":\"MissingServletRequestParameterException\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/config/GitConfig\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/config/JenkinsConfig\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/ddd/StaticTest\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/ddd/Test\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/util/GitAdapter\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/common/errorcode/BizCode\",\"methodInfos\":[{\"methodName\":\"getCode\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/common/response/ApiResponse\",\"methodInfos\":[{\"methodName\":\"success\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/jenkins/JenkinsApplication\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/config/JenkinsConfigure\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/controller/JenkinsController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/controller/TestApi\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/dto/JobAddDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/service/JenkinsService\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/service/impl/JenkinsServiceImpl\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/util/GenerateUniqueIdUtil\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/DeviceVo\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/GoodsVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/JobAddVo\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/repository/user/dto/query/RoleQueryDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/repository/user/dto/result/RoleResultDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/user/service/impl/PermissionServiceImpl\",\"methodInfos\":[{\"methodName\":\"getPermissionByRoles\",\"parameters\":\"List\"},{\"methodName\":\"buildMenuTree\",\"parameters\":\"List\"},{\"methodName\":\"getSubMenus\",\"parameters\":\"Long&Map>\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/user/service/impl/RoleServiceImpl\",\"methodInfos\":[{\"methodName\":\"getByUserId\",\"parameters\":\"Long\"},{\"methodName\":\"getListByPage\",\"parameters\":\"RoleQueryDto\"}],\"type\":\"MODIFY\"}]" +} 在linux系统部署时请注意修改代码的基础路径和日志路径,如: -- Gitee From 8b88b2f9cef1c71199cc40ce022a66ed32718b09 Mon Sep 17 00:00:00 2001 From: rayduan <719328408@qq.com> Date: Mon, 29 Mar 2021 16:44:46 +0800 Subject: [PATCH 5/9] Update README.md --- README.md | 550 +++++++++++++++++++++++++++--------------------------- 1 file changed, 275 insertions(+), 275 deletions(-) diff --git a/README.md b/README.md index 15e8ca3f..990a5838 100644 --- a/README.md +++ b/README.md @@ -14,281 +14,281 @@ #### 2、运行项目,访问http://127.0.0.1:8085/doc.html 2.1 输入git地址,填写差异分支的旧版本,新版本,执行,就可以获取差异信息 2.2 { - "code": 10000, - "msg": "业务处理成功", - "data": [ - { - "classFile": "com/dr/application/InstallCert", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/app/controller/Calculable", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/app/controller/JenkinsPluginController", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/app/controller/LoginController", - "methodInfos": [ - { - "methodName": "captcha", - "parameters": "HttpServletRequest&HttpServletResponse" - }, - { - "methodName": "login", - "parameters": "LoginUserParam&HttpServletRequest" - }, - { - "methodName": "testInt", - "parameters": "int&char" - }, - { - "methodName": "testInt", - "parameters": "String&int" - }, - { - "methodName": "testInt", - "parameters": "short&int" - }, - { - "methodName": "testInt", - "parameters": "int[]" - }, - { - "methodName": "testInt", - "parameters": "T[]" - }, - { - "methodName": "testInt", - "parameters": "Calculable&int&int" - }, - { - "methodName": "testInt", - "parameters": "Map&List&Set" - }, - { - "methodName": "display", - "parameters": "" - }, - { - "methodName": "a", - "parameters": "InnerClass" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/application/app/controller/RoleController", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/app/controller/TestController", - "methodInfos": [ - { - "methodName": "test", - "parameters": "" - }, - { - "methodName": "getPom", - "parameters": "HttpServletResponse" - }, - { - "methodName": "getDeList", - "parameters": "" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/application/app/controller/view/RoleViewController", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/app/param/AddRoleParam", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/app/vo/DependencyVO", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/app/vo/JenkinsPluginsVO", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/app/vo/RoleVO", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/config/ExceptionAdvice", - "methodInfos": [ - { - "methodName": "handleException", - "parameters": "Exception" - }, - { - "methodName": "handleMissingServletRequestParameterException", - "parameters": "MissingServletRequestParameterException" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/application/config/GitConfig", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/config/JenkinsConfig", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/ddd/StaticTest", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/ddd/Test", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/application/util/GitAdapter", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/common/errorcode/BizCode", - "methodInfos": [ - { - "methodName": "getCode", - "parameters": "" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/common/response/ApiResponse", - "methodInfos": [ - { - "methodName": "success", - "parameters": "" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/jenkins/JenkinsApplication", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/config/JenkinsConfigure", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/controller/JenkinsController", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/controller/TestApi", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/dto/JobAddDto", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/service/JenkinsService", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/service/impl/JenkinsServiceImpl", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/util/GenerateUniqueIdUtil", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/vo/DeviceVo", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/vo/GoodsVO", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/jenkins/vo/JobAddVo", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/repository/user/dto/query/RoleQueryDto", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/repository/user/dto/result/RoleResultDto", - "methodInfos": null, - "type": "ADD" - }, - { - "classFile": "com/dr/user/service/impl/PermissionServiceImpl", - "methodInfos": [ - { - "methodName": "getPermissionByRoles", - "parameters": "List" - }, - { - "methodName": "buildMenuTree", - "parameters": "List" - }, - { - "methodName": "getSubMenus", - "parameters": "Long&Map>" - } - ], - "type": "MODIFY" - }, - { - "classFile": "com/dr/user/service/impl/RoleServiceImpl", - "methodInfos": [ - { - "methodName": "getByUserId", - "parameters": "Long" - }, - { - "methodName": "getListByPage", - "parameters": "RoleQueryDto" - } - ], - "type": "MODIFY" - } - ], - "uniqueData": "[{\"classFile\":\"com/dr/application/InstallCert\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/Calculable\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/JenkinsPluginController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/LoginController\",\"methodInfos\":[{\"methodName\":\"captcha\",\"parameters\":\"HttpServletRequest&HttpServletResponse\"},{\"methodName\":\"login\",\"parameters\":\"LoginUserParam&HttpServletRequest\"},{\"methodName\":\"testInt\",\"parameters\":\"int&char\"},{\"methodName\":\"testInt\",\"parameters\":\"String&int\"},{\"methodName\":\"testInt\",\"parameters\":\"short&int\"},{\"methodName\":\"testInt\",\"parameters\":\"int[]\"},{\"methodName\":\"testInt\",\"parameters\":\"T[]\"},{\"methodName\":\"testInt\",\"parameters\":\"Calculable&int&int\"},{\"methodName\":\"testInt\",\"parameters\":\"Map&List&Set\"},{\"methodName\":\"display\",\"parameters\":\"\"},{\"methodName\":\"a\",\"parameters\":\"InnerClass\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/app/controller/RoleController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/TestController\",\"methodInfos\":[{\"methodName\":\"test\",\"parameters\":\"\"},{\"methodName\":\"getPom\",\"parameters\":\"HttpServletResponse\"},{\"methodName\":\"getDeList\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/app/controller/view/RoleViewController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/param/AddRoleParam\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/DependencyVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/JenkinsPluginsVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/RoleVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/config/ExceptionAdvice\",\"methodInfos\":[{\"methodName\":\"handleException\",\"parameters\":\"Exception\"},{\"methodName\":\"handleMissingServletRequestParameterException\",\"parameters\":\"MissingServletRequestParameterException\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/config/GitConfig\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/config/JenkinsConfig\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/ddd/StaticTest\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/ddd/Test\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/util/GitAdapter\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/common/errorcode/BizCode\",\"methodInfos\":[{\"methodName\":\"getCode\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/common/response/ApiResponse\",\"methodInfos\":[{\"methodName\":\"success\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/jenkins/JenkinsApplication\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/config/JenkinsConfigure\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/controller/JenkinsController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/controller/TestApi\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/dto/JobAddDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/service/JenkinsService\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/service/impl/JenkinsServiceImpl\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/util/GenerateUniqueIdUtil\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/DeviceVo\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/GoodsVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/JobAddVo\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/repository/user/dto/query/RoleQueryDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/repository/user/dto/result/RoleResultDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/user/service/impl/PermissionServiceImpl\",\"methodInfos\":[{\"methodName\":\"getPermissionByRoles\",\"parameters\":\"List\"},{\"methodName\":\"buildMenuTree\",\"parameters\":\"List\"},{\"methodName\":\"getSubMenus\",\"parameters\":\"Long&Map>\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/user/service/impl/RoleServiceImpl\",\"methodInfos\":[{\"methodName\":\"getByUserId\",\"parameters\":\"Long\"},{\"methodName\":\"getListByPage\",\"parameters\":\"RoleQueryDto\"}],\"type\":\"MODIFY\"}]" -} + "code": 10000, + "msg": "业务处理成功", + "data": [ + { + "classFile": "com/dr/application/InstallCert", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/controller/Calculable", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/controller/JenkinsPluginController", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/controller/LoginController", + "methodInfos": [ + { + "methodName": "captcha", + "parameters": "HttpServletRequest&HttpServletResponse" + }, + { + "methodName": "login", + "parameters": "LoginUserParam&HttpServletRequest" + }, + { + "methodName": "testInt", + "parameters": "int&char" + }, + { + "methodName": "testInt", + "parameters": "String&int" + }, + { + "methodName": "testInt", + "parameters": "short&int" + }, + { + "methodName": "testInt", + "parameters": "int[]" + }, + { + "methodName": "testInt", + "parameters": "T[]" + }, + { + "methodName": "testInt", + "parameters": "Calculable&int&int" + }, + { + "methodName": "testInt", + "parameters": "Map&List&Set" + }, + { + "methodName": "display", + "parameters": "" + }, + { + "methodName": "a", + "parameters": "InnerClass" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/application/app/controller/RoleController", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/controller/TestController", + "methodInfos": [ + { + "methodName": "test", + "parameters": "" + }, + { + "methodName": "getPom", + "parameters": "HttpServletResponse" + }, + { + "methodName": "getDeList", + "parameters": "" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/application/app/controller/view/RoleViewController", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/param/AddRoleParam", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/vo/DependencyVO", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/vo/JenkinsPluginsVO", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/app/vo/RoleVO", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/config/ExceptionAdvice", + "methodInfos": [ + { + "methodName": "handleException", + "parameters": "Exception" + }, + { + "methodName": "handleMissingServletRequestParameterException", + "parameters": "MissingServletRequestParameterException" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/application/config/GitConfig", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/config/JenkinsConfig", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/ddd/StaticTest", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/ddd/Test", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/application/util/GitAdapter", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/common/errorcode/BizCode", + "methodInfos": [ + { + "methodName": "getCode", + "parameters": "" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/common/response/ApiResponse", + "methodInfos": [ + { + "methodName": "success", + "parameters": "" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/jenkins/JenkinsApplication", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/config/JenkinsConfigure", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/controller/JenkinsController", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/controller/TestApi", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/dto/JobAddDto", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/service/JenkinsService", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/service/impl/JenkinsServiceImpl", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/util/GenerateUniqueIdUtil", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/vo/DeviceVo", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/vo/GoodsVO", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/jenkins/vo/JobAddVo", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/repository/user/dto/query/RoleQueryDto", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/repository/user/dto/result/RoleResultDto", + "methodInfos": null, + "type": "ADD" + }, + { + "classFile": "com/dr/user/service/impl/PermissionServiceImpl", + "methodInfos": [ + { + "methodName": "getPermissionByRoles", + "parameters": "List" + }, + { + "methodName": "buildMenuTree", + "parameters": "List" + }, + { + "methodName": "getSubMenus", + "parameters": "Long&Map>" + } + ], + "type": "MODIFY" + }, + { + "classFile": "com/dr/user/service/impl/RoleServiceImpl", + "methodInfos": [ + { + "methodName": "getByUserId", + "parameters": "Long" + }, + { + "methodName": "getListByPage", + "parameters": "RoleQueryDto" + } + ], + "type": "MODIFY" + } + ], + "uniqueData": "[{\"classFile\":\"com/dr/application/InstallCert\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/Calculable\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/JenkinsPluginController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/LoginController\",\"methodInfos\":[{\"methodName\":\"captcha\",\"parameters\":\"HttpServletRequest&HttpServletResponse\"},{\"methodName\":\"login\",\"parameters\":\"LoginUserParam&HttpServletRequest\"},{\"methodName\":\"testInt\",\"parameters\":\"int&char\"},{\"methodName\":\"testInt\",\"parameters\":\"String&int\"},{\"methodName\":\"testInt\",\"parameters\":\"short&int\"},{\"methodName\":\"testInt\",\"parameters\":\"int[]\"},{\"methodName\":\"testInt\",\"parameters\":\"T[]\"},{\"methodName\":\"testInt\",\"parameters\":\"Calculable&int&int\"},{\"methodName\":\"testInt\",\"parameters\":\"Map&List&Set\"},{\"methodName\":\"display\",\"parameters\":\"\"},{\"methodName\":\"a\",\"parameters\":\"InnerClass\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/app/controller/RoleController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/controller/TestController\",\"methodInfos\":[{\"methodName\":\"test\",\"parameters\":\"\"},{\"methodName\":\"getPom\",\"parameters\":\"HttpServletResponse\"},{\"methodName\":\"getDeList\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/app/controller/view/RoleViewController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/param/AddRoleParam\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/DependencyVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/JenkinsPluginsVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/app/vo/RoleVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/config/ExceptionAdvice\",\"methodInfos\":[{\"methodName\":\"handleException\",\"parameters\":\"Exception\"},{\"methodName\":\"handleMissingServletRequestParameterException\",\"parameters\":\"MissingServletRequestParameterException\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/application/config/GitConfig\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/config/JenkinsConfig\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/ddd/StaticTest\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/ddd/Test\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/application/util/GitAdapter\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/common/errorcode/BizCode\",\"methodInfos\":[{\"methodName\":\"getCode\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/common/response/ApiResponse\",\"methodInfos\":[{\"methodName\":\"success\",\"parameters\":\"\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/jenkins/JenkinsApplication\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/config/JenkinsConfigure\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/controller/JenkinsController\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/controller/TestApi\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/dto/JobAddDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/service/JenkinsService\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/service/impl/JenkinsServiceImpl\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/util/GenerateUniqueIdUtil\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/DeviceVo\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/GoodsVO\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/jenkins/vo/JobAddVo\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/repository/user/dto/query/RoleQueryDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/repository/user/dto/result/RoleResultDto\",\"methodInfos\":[],\"type\":\"ADD\"},{\"classFile\":\"com/dr/user/service/impl/PermissionServiceImpl\",\"methodInfos\":[{\"methodName\":\"getPermissionByRoles\",\"parameters\":\"List\"},{\"methodName\":\"buildMenuTree\",\"parameters\":\"List\"},{\"methodName\":\"getSubMenus\",\"parameters\":\"Long&Map>\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/user/service/impl/RoleServiceImpl\",\"methodInfos\":[{\"methodName\":\"getByUserId\",\"parameters\":\"Long\"},{\"methodName\":\"getListByPage\",\"parameters\":\"RoleQueryDto\"}],\"type\":\"MODIFY\"}]" + } 在linux系统部署时请注意修改代码的基础路径和日志路径,如: -- Gitee From bae67f2f6fe0f57a11e1541972560bd802e10324 Mon Sep 17 00:00:00 2001 From: rayduan <719328408@qq.com> Date: Mon, 5 Apr 2021 12:42:25 +0800 Subject: [PATCH 6/9] =?UTF-8?q?[modify]=E5=A2=9E=E5=8A=A0svn=E5=B7=AE?= =?UTF-8?q?=E5=BC=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dr/code/diff/config/CustomizeConfig.java | 56 ++++++ .../com/dr/code/diff/config/GitConfig.java | 4 +- .../dr/code/diff/dto/VersionControlDto.java | 44 +++++ .../com/dr/code/diff/util/GitRepoUtil.java | 168 ++++++++++++++++++ .../com/dr/code/diff/util/SvnRepoUtil.java | 49 +++++ .../diff/vercontrol/GitVersionControl.java | 68 +++++++ .../diff/vercontrol/SvnVersionControl.java | 23 +++ .../code/diff/vercontrol/VersionControl.java | 48 +++++ .../src/main/resources/application.yml | 10 +- 9 files changed, 465 insertions(+), 5 deletions(-) create mode 100644 application/src/main/java/com/dr/code/diff/config/CustomizeConfig.java create mode 100644 application/src/main/java/com/dr/code/diff/dto/VersionControlDto.java create mode 100644 application/src/main/java/com/dr/code/diff/util/GitRepoUtil.java create mode 100644 application/src/main/java/com/dr/code/diff/util/SvnRepoUtil.java create mode 100644 application/src/main/java/com/dr/code/diff/vercontrol/GitVersionControl.java create mode 100644 application/src/main/java/com/dr/code/diff/vercontrol/SvnVersionControl.java create mode 100644 application/src/main/java/com/dr/code/diff/vercontrol/VersionControl.java diff --git a/application/src/main/java/com/dr/code/diff/config/CustomizeConfig.java b/application/src/main/java/com/dr/code/diff/config/CustomizeConfig.java new file mode 100644 index 00000000..9c9cf7c9 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/config/CustomizeConfig.java @@ -0,0 +1,56 @@ +package com.dr.code.diff.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +/** + * @ProjectName: cmdb + * @Package: com.dr.cmdb.application.config + * @Description: 自定义参数 + * @Author: duanrui + * @CreateDate: 2021/3/18 9:49 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +@Data +@Configuration +public class CustomizeConfig { + + + /** + * git账号 + */ + @Value(value = "${git.userName}") + private String gitUserName; + /** + * git密码 + */ + @Value(value = "${git.password}") + private String gitPassWord; + + /** + * git下载代码到本地的根目录 + */ + @Value(value = "${git.local.base.dir}") + private String gitLocalBaseRepoDir; + + + /** + * git账号 + */ + @Value(value = "${svn.userName}") + private String svnUserName; + /** + * git密码 + */ + @Value(value = "${svn.password}") + private String svnPassWord; + + /** + * git下载代码到本地的根目录 + */ + @Value(value = "${svn.local.base.dir}") + private String svnLocalBaseRepoDir; +} diff --git a/application/src/main/java/com/dr/code/diff/config/GitConfig.java b/application/src/main/java/com/dr/code/diff/config/GitConfig.java index 8ea05621..2ea7e6d0 100644 --- a/application/src/main/java/com/dr/code/diff/config/GitConfig.java +++ b/application/src/main/java/com/dr/code/diff/config/GitConfig.java @@ -87,7 +87,7 @@ public class GitConfig { .setURI(gitUrl) .setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitUserName, gitPassWord)) .setDirectory(new File(codePath)) - .setBranch(commitId) +// .setBranch(commitId) .call(); // 下载指定commitId/branch git.checkout().setName(commitId).call(); @@ -281,8 +281,6 @@ public class GitConfig { localDir.append("/"); localDir.append(version); return localDir.toString(); - - } } diff --git a/application/src/main/java/com/dr/code/diff/dto/VersionControlDto.java b/application/src/main/java/com/dr/code/diff/dto/VersionControlDto.java new file mode 100644 index 00000000..b0e5095b --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/dto/VersionControlDto.java @@ -0,0 +1,44 @@ +package com.dr.code.diff.dto; + +import lombok.Builder; +import lombok.Data; +import org.apache.poi.ss.formula.functions.T; + +import java.util.List; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.dto + * @Description: java类作用描述 + * @Author: duanrui + * @CreateDate: 2021/4/5 10:10 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +@Data +@Builder +public class VersionControlDto { + + /** + * 远程仓库地址 + */ + private String repoUrl; + + /** + * git原始分支或tag/svn 版本 + */ + private String baseVersion; + + /** + * git现分支或tag、svn 版本 + */ + private String nowVersion; + + + private Object baseRepo; + + private Object nowRepo; + + private List diffClasses; +} diff --git a/application/src/main/java/com/dr/code/diff/util/GitRepoUtil.java b/application/src/main/java/com/dr/code/diff/util/GitRepoUtil.java new file mode 100644 index 00000000..74e8e2a6 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/util/GitRepoUtil.java @@ -0,0 +1,168 @@ +package com.dr.code.diff.util; + +import com.dr.common.errorcode.BizCode; +import com.dr.common.exception.BizException; +import com.dr.common.log.LoggerUtil; +import com.dr.common.utils.file.FileUtil; +import com.google.common.base.Splitter; +import com.google.common.base.Strings; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.ObjectReader; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.revwalk.RevTree; +import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; +import org.eclipse.jgit.treewalk.AbstractTreeIterator; +import org.eclipse.jgit.treewalk.CanonicalTreeParser; + +import java.io.File; +import java.io.IOException; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.util + * @Description: java类作用描述 + * @Author: duanrui + * @CreateDate: 2021/4/5 11:16 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +@Slf4j +public class GitRepoUtil { + + + /** + * 克隆代码到本地 + * + * @param gitUrl + * @param codePath + * @param commitId + * @return + * @throws GitAPIException + * @throws IOException + */ + public static Git cloneRepository(String gitUrl, String codePath, String commitId,String gitUserName,String gitPassWord) { + Git git = null; + try { + if (!checkGitWorkSpace(gitUrl, codePath)) { + LoggerUtil.info(log, "本地代码不存在,clone", gitUrl, codePath); + git = Git.cloneRepository() + .setURI(gitUrl) + .setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitUserName, gitPassWord)) + .setDirectory(new File(codePath)) +// .setBranch(commitId) + .call(); + // 下载指定commitId/branch + git.checkout().setName(commitId).call(); + } else { + LoggerUtil.info(log, "本地代码存在,直接使用", gitUrl, codePath); + git = Git.open(new File(codePath)); + git.getRepository().getFullBranch(); + //判断是分支还是commitId,分支做更新,commitId无法改变用原有的 + if (git.getRepository().exactRef(Constants.HEAD).isSymbolic()) { + //更新代码 + git.pull().setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitUserName, gitPassWord)).call(); + } + } + } catch (IOException | GitAPIException e) { + e.printStackTrace(); + throw new BizException(BizCode.GIT_OPERATED_FAIlED); + } + return git; + } + + + /** + * 将代码转成树状 + * + * @param repository + * @param branchName + * @return + */ + public static AbstractTreeIterator prepareTreeParser(Repository repository, String branchName) { + try { + RevWalk walk = new RevWalk(repository); + RevTree tree; + tree = walk.parseTree(repository.resolve(branchName)); + CanonicalTreeParser TreeParser = new CanonicalTreeParser(); + try (ObjectReader reader = repository.newObjectReader()) { + TreeParser.reset(reader, tree.getId()); + } + walk.dispose(); + return TreeParser; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 取远程代码本地存储路径 + * + * @param gitUrl + * @param localBaseRepoDir + * @param version + * @return + */ + public static String getLocalDir(String gitUrl, String localBaseRepoDir, String version) { + StringBuilder localDir = new StringBuilder(localBaseRepoDir); + if (Strings.isNullOrEmpty(gitUrl)) { + return ""; + } + String repoName = Splitter.on("/") + .splitToStream(gitUrl).reduce((first, second) -> second) + .map(e -> Splitter.on(".").splitToStream(e).findFirst().get()).get(); + localDir.append(repoName); + localDir.append("/"); + localDir.append(version); + return localDir.toString(); + } + + + + /** + * 判断工作目录是否存在,本来可以每次拉去代码时删除再拉取,但是这样代码多的化IO比较大,所以就代码可以复用 + * + * @param codePath + * @return + */ + public static Boolean checkGitWorkSpace(String gitUrl, String codePath) throws IOException { + Boolean isExist = Boolean.FALSE; + File RepoGitDir = new File(codePath + "/.git"); + if (!RepoGitDir.exists()) { + return false; + } + Git git = Git.open(new File(codePath)); + if (null == git) { + return isExist; + } + Repository repository = git.getRepository(); + //解析本地代码,获取远程uri,是否是我们需要的git远程仓库 + String repoUrl = repository.getConfig().getString("remote", "origin", "url"); + if (gitUrl.equals(repoUrl)) { + isExist = Boolean.TRUE; + } else { + LoggerUtil.info(log, "本地存在其他仓的代码,先删除"); + FileUtil.removeDir(new File(codePath)); + } + return isExist; + } + + /** + * 获取class文件的地址 + * + * @param git + * @param classPackage + * @return + */ + public String getClassFile(Git git, String classPackage) { + StringBuilder builder = new StringBuilder(git.getRepository().getDirectory().getParent()); + return builder.append("/") + .append(classPackage).toString(); + } + +} diff --git a/application/src/main/java/com/dr/code/diff/util/SvnRepoUtil.java b/application/src/main/java/com/dr/code/diff/util/SvnRepoUtil.java new file mode 100644 index 00000000..419d5cf3 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/util/SvnRepoUtil.java @@ -0,0 +1,49 @@ +package com.dr.code.diff.util; + +import com.dr.common.errorcode.BizCode; +import com.dr.common.exception.BizException; +import com.dr.common.log.LoggerUtil; +import com.google.common.base.Splitter; +import com.google.common.base.Strings; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; +import org.tmatesoft.svn.core.SVNException; +import org.tmatesoft.svn.core.SVNURL; +import org.tmatesoft.svn.core.io.SVNRepository; +import org.tmatesoft.svn.core.io.SVNRepositoryFactory; +import org.tmatesoft.svn.core.wc.SVNWCUtil; + +import java.io.File; +import java.io.IOException; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.util + * @Description: java类作用描述 + * @Author: duanrui + * @CreateDate: 2021/4/5 11:16 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +public class SvnRepoUtil { + + /** + * @date:2021/4/5 + * @className:SvnRepoUtil + * @author:Administrator + * @description: 获取svn代码仓 + * + */ + public static SVNRepository cloneRepository(String repoUrl, String codePath, String userName, String password) throws SVNException { + SVNWCUtil.createDefaultAuthenticationManager(new File(codePath), userName, password.toCharArray()); + SVNWCUtil.createDefaultOptions(true); + return SVNRepositoryFactory.create(SVNURL.parseURIEncoded(repoUrl)); + } + + + + +} diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/GitVersionControl.java b/application/src/main/java/com/dr/code/diff/vercontrol/GitVersionControl.java new file mode 100644 index 00000000..c2caa6cd --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/vercontrol/GitVersionControl.java @@ -0,0 +1,68 @@ +package com.dr.code.diff.vercontrol; + +import com.dr.code.diff.config.CustomizeConfig; +import com.dr.code.diff.dto.VersionControlDto; +import com.dr.code.diff.util.GitRepoUtil; +import com.google.common.collect.Lists; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.diff.DiffEntry; +import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; +import org.eclipse.jgit.treewalk.AbstractTreeIterator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.io.File; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.vercontrol + * @Description: 代码差异获取流程类定义 + * @Author: duanrui + * @CreateDate: 2021/4/5 9:56 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +@Component +public class GitVersionControl extends VersionControl { + + @Autowired + private CustomizeConfig customizeConfig; + + + @Override + public void getDiffCodeClasses() { + try { + String localBaseRepoDir = GitRepoUtil.getLocalDir(super.versionControlDto.getRepoUrl(), customizeConfig.getGitLocalBaseRepoDir(), super.versionControlDto.getBaseVersion()); + String localNowRepoDir = GitRepoUtil.getLocalDir(super.versionControlDto.getRepoUrl(), customizeConfig.getGitLocalBaseRepoDir(), super.versionControlDto.getNowVersion()); + //原有代码git对象 + Git baseGit = GitRepoUtil.cloneRepository(super.versionControlDto.getRepoUrl(), localBaseRepoDir, super.versionControlDto.getBaseVersion(), customizeConfig.getGitUserName(), customizeConfig.getGitPassWord()); + //现有代码git对象 + Git nowGit = GitRepoUtil.cloneRepository(super.versionControlDto.getRepoUrl(), localNowRepoDir, super.versionControlDto.getNowVersion(), customizeConfig.getGitUserName(), customizeConfig.getGitPassWord()); + AbstractTreeIterator baseTree = GitRepoUtil.prepareTreeParser(baseGit.getRepository(), super.versionControlDto.getBaseVersion()); + AbstractTreeIterator nowTree = GitRepoUtil.prepareTreeParser(nowGit.getRepository(), super.versionControlDto.getNowVersion()); + //获取两个版本之间的差异代码 + List diff = null; + diff = nowGit.diff().setOldTree(baseTree).setNewTree(nowTree).setShowNameAndStatusOnly(true).call(); + //过滤出有效的差异代码 + Collection validDiffList = diff.stream() + //只计算java文件 + .filter(e -> e.getNewPath().endsWith(".java")) + //排除测试文件 + .filter(e -> e.getNewPath().contains("src/main/java")) + //只计算新增和变更文件 + .filter(e -> DiffEntry.ChangeType.ADD.equals(e.getChangeType()) || DiffEntry.ChangeType.MODIFY.equals(e.getChangeType())) + .collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(validDiffList)) { + super.versionControlDto.setDiffClasses(Lists.newArrayList(validDiffList)); + } + } catch (GitAPIException e) { + e.printStackTrace(); + } + } +} diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/SvnVersionControl.java b/application/src/main/java/com/dr/code/diff/vercontrol/SvnVersionControl.java new file mode 100644 index 00000000..f4af7aa6 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/vercontrol/SvnVersionControl.java @@ -0,0 +1,23 @@ +package com.dr.code.diff.vercontrol; + +import com.dr.code.diff.dto.VersionControlDto; +import lombok.AllArgsConstructor; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.vercontrol + * @Description: 代码差异获取流程类定义 + * @Author: duanrui + * @CreateDate: 2021/4/5 9:56 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ + +public class SvnVersionControl extends VersionControl{ + + @Override + public void getDiffCodeClasses() { + + } +} diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/VersionControl.java b/application/src/main/java/com/dr/code/diff/vercontrol/VersionControl.java new file mode 100644 index 00000000..2a0e96c4 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/vercontrol/VersionControl.java @@ -0,0 +1,48 @@ +package com.dr.code.diff.vercontrol; + +import com.dr.code.diff.dto.VersionControlDto; +import lombok.Data; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.vercontrol + * @Description: 代码差异获取流程类定义 + * @Author: duanrui + * @CreateDate: 2021/4/5 9:56 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +@Data +public abstract class VersionControl { + + protected VersionControlDto versionControlDto; + + + public void handler(){ + getDiffCodeClasses(); + getDiffCodeMethods(); + } + + /** + * @date:2021/4/5 + * @className:VersionControl + * @author:Administrator + * @description: 获取差异类 + * + */ + public abstract void getDiffCodeClasses(); + + /** + * @date:2021/4/5 + * @className:VersionControl + * @author:Administrator + * @description: + * + */ + public void getDiffCodeMethods(){ + + } + + +} diff --git a/application/src/main/resources/application.yml b/application/src/main/resources/application.yml index 035a745c..568e5ce2 100644 --- a/application/src/main/resources/application.yml +++ b/application/src/main/resources/application.yml @@ -27,10 +27,16 @@ swagger: # sessionIdUrlRewritingEnabled: false git: userName: rayduan - password: FDsfret334 + password: duanrui1991 local: base: - dir: D:\git-test\ + dir: D:\git-test\git +svn: + userName: rayduan + password: duanrui1991 + local: + base: + dir: D:\git-test\svn server: port: 8085 servlet: -- Gitee From 1c15d4b634e2767ee97927c70d84994962dfe076 Mon Sep 17 00:00:00 2001 From: rayduan <719328408@qq.com> Date: Mon, 5 Apr 2021 21:18:14 +0800 Subject: [PATCH 7/9] =?UTF-8?q?[modify]=E5=A2=9E=E5=8A=A0svn=E5=B7=AE?= =?UTF-8?q?=E5=BC=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dr/code/diff/config/GitConfig.java | 287 ------------------ .../diff/controller/CodeDiffController.java | 31 +- .../com/dr/code/diff/dto/DiffEntryDto.java | 29 ++ .../dr/code/diff/dto/DiffMethodParams.java | 9 +- .../dr/code/diff/dto/VersionControlDto.java | 13 +- .../code/diff/enums/CodeManageTypeEnum.java | 54 ++++ .../dr/code/diff/service/CodeDiffService.java | 1 + .../service/impl/CodeDiffServiceImpl.java | 19 +- .../com/dr/code/diff/util/GitRepoUtil.java | 3 +- .../com/dr/code/diff/util/SvnRepoUtil.java | 50 ++- .../diff/vercontrol/SvnVersionControl.java | 23 -- .../code/diff/vercontrol/VersionControl.java | 114 ++++++- .../VersionControlHandlerFactory.java | 65 ++++ .../{ => git}/GitVersionControl.java | 26 +- .../svn/MySVNDiffStatusHandler.java | 51 ++++ .../code/diff/vercontrol/svn/MySVNEditor.java | 111 +++++++ .../vercontrol/svn/SvnVersionControl.java | 61 ++++ .../code/diff/vo/param/CodeDiffParamVO.java | 8 +- .../src/main/resources/application.yml | 8 +- .../dr/code/diff/config/GitConfigTest.java | 42 +-- .../vercontrol/SvnVersionControlTest.java | 34 +++ 21 files changed, 657 insertions(+), 382 deletions(-) delete mode 100644 application/src/main/java/com/dr/code/diff/config/GitConfig.java create mode 100644 application/src/main/java/com/dr/code/diff/dto/DiffEntryDto.java create mode 100644 application/src/main/java/com/dr/code/diff/enums/CodeManageTypeEnum.java delete mode 100644 application/src/main/java/com/dr/code/diff/vercontrol/SvnVersionControl.java create mode 100644 application/src/main/java/com/dr/code/diff/vercontrol/VersionControlHandlerFactory.java rename application/src/main/java/com/dr/code/diff/vercontrol/{ => git}/GitVersionControl.java (80%) create mode 100644 application/src/main/java/com/dr/code/diff/vercontrol/svn/MySVNDiffStatusHandler.java create mode 100644 application/src/main/java/com/dr/code/diff/vercontrol/svn/MySVNEditor.java create mode 100644 application/src/main/java/com/dr/code/diff/vercontrol/svn/SvnVersionControl.java create mode 100644 application/src/test/java/com/dr/code/diff/vercontrol/SvnVersionControlTest.java diff --git a/application/src/main/java/com/dr/code/diff/config/GitConfig.java b/application/src/main/java/com/dr/code/diff/config/GitConfig.java deleted file mode 100644 index 2ea7e6d0..00000000 --- a/application/src/main/java/com/dr/code/diff/config/GitConfig.java +++ /dev/null @@ -1,287 +0,0 @@ -package com.dr.code.diff.config; - -import com.dr.code.diff.dto.ClassInfoResult; -import com.dr.code.diff.dto.DiffMethodParams; -import com.dr.code.diff.dto.MethodInfoResult; -import com.dr.code.diff.util.MethodParserUtils; -import com.dr.common.errorcode.BizCode; -import com.dr.common.exception.BizException; -import com.dr.common.log.LoggerUtil; -import com.dr.common.utils.file.FileUtil; -import com.google.common.base.Splitter; -import com.google.common.base.Strings; -import lombok.extern.slf4j.Slf4j; -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.diff.DiffEntry; -import org.eclipse.jgit.lib.Constants; -import org.eclipse.jgit.lib.ObjectReader; -import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.revwalk.RevTree; -import org.eclipse.jgit.revwalk.RevWalk; -import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; -import org.eclipse.jgit.treewalk.AbstractTreeIterator; -import org.eclipse.jgit.treewalk.CanonicalTreeParser; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; -import org.springframework.util.CollectionUtils; - -import javax.annotation.Resource; -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; -import java.util.stream.Collectors; - -/** - * @author rui.duan - * @version 1.0 - * @className GitConfig - * @description git配置类 - * @date 2021/01/11 2:30 下午 - */ -@Configuration -@Slf4j -public class GitConfig { - - /** - * git账号 - */ - @Value(value = "${git.userName}") - private String gitUserName; - /** - * git密码 - */ - @Value(value = "${git.password}") - private String gitPassWord; - - /** - * git下载代码到本地的根目录 - */ - @Value(value = "${git.local.base.dir}") - private String localBaseRepoDir; - - - @Resource(name = "asyncExecutor") - private Executor executor; - - /** - * 克隆代码到本地 - * - * @param gitUrl - * @param codePath - * @param commitId - * @return - * @throws GitAPIException - * @throws IOException - */ - public Git cloneRepository(String gitUrl, String codePath, String commitId) { - Git git = null; - try { - if (!checkGitWorkSpace(gitUrl, codePath)) { - LoggerUtil.info(log, "本地代码不存在,clone", gitUrl, codePath); - git = Git.cloneRepository() - .setURI(gitUrl) - .setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitUserName, gitPassWord)) - .setDirectory(new File(codePath)) -// .setBranch(commitId) - .call(); - // 下载指定commitId/branch - git.checkout().setName(commitId).call(); - } else { - LoggerUtil.info(log, "本地代码存在,直接使用", gitUrl, codePath); - git = Git.open(new File(codePath)); - git.getRepository().getFullBranch(); - //判断是分支还是commitId,分支做更新,commitId无法改变用原有的 - if (git.getRepository().exactRef(Constants.HEAD).isSymbolic()) { - //更新代码 - git.pull().setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitUserName, gitPassWord)).call(); - } - } - } catch (IOException | GitAPIException e) { - e.printStackTrace(); - throw new BizException(BizCode.GIT_OPERATED_FAIlED); - } - return git; - } - - /** - * 判断工作目录是否存在,本来可以每次拉去代码时删除再拉取,但是这样代码多的化IO比较大,所以就代码可以复用 - * - * @param codePath - * @return - */ - public Boolean checkGitWorkSpace(String gitUrl, String codePath) throws IOException { - Boolean isExist = Boolean.FALSE; - File RepoGitDir = new File(codePath + "/.git"); - if (!RepoGitDir.exists()) { - return false; - } - Git git = Git.open(new File(codePath)); - if (null == git) { - return isExist; - } - Repository repository = git.getRepository(); - //解析本地代码,获取远程uri,是否是我们需要的git远程仓库 - String repoUrl = repository.getConfig().getString("remote", "origin", "url"); - if (gitUrl.equals(repoUrl)) { - isExist = Boolean.TRUE; - } else { - LoggerUtil.info(log, "本地存在其他仓的代码,先删除"); - FileUtil.removeDir(new File(codePath)); - } - return isExist; - } - - /** - * 获取差异方法 - * - * @param diffMethodParams - * @return - */ - public List diffMethods(DiffMethodParams diffMethodParams) { - try { - //原有代码git对象 - Git baseGit = cloneRepository(diffMethodParams.getGitUrl(), getLocalDir(diffMethodParams.getGitUrl(), localBaseRepoDir, diffMethodParams.getBaseVersion()), diffMethodParams.getBaseVersion()); - //现有代码git对象 - Git nowGit = cloneRepository(diffMethodParams.getGitUrl(), getLocalDir(diffMethodParams.getGitUrl(), localBaseRepoDir, diffMethodParams.getNowVersion()), diffMethodParams.getNowVersion()); - AbstractTreeIterator baseTree = prepareTreeParser(baseGit.getRepository(), diffMethodParams.getBaseVersion()); - AbstractTreeIterator nowTree = prepareTreeParser(nowGit.getRepository(), diffMethodParams.getNowVersion()); - //获取两个版本之间的差异代码 - List diff = nowGit.diff().setOldTree(baseTree).setNewTree(nowTree).setShowNameAndStatusOnly(true).call(); - //过滤出有效的差异代码 - Collection validDiffList = diff.stream() - //只计算java文件 - .filter(e -> e.getNewPath().endsWith(".java")) - //排除测试文件 - .filter(e -> e.getNewPath().contains("src/main/java")) - //只计算新增和变更文件 - .filter(e -> DiffEntry.ChangeType.ADD.equals(e.getChangeType()) || DiffEntry.ChangeType.MODIFY.equals(e.getChangeType())) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(validDiffList)) { - return null; - } - /** - * 多线程获取旧代码和新代码的差异类及差异方法 - */ - List> priceFuture = validDiffList.stream().map(item -> getClassMethods(getClassFile(baseGit, item.getNewPath()), getClassFile(nowGit, item.getNewPath()), item)).collect(Collectors.toList()); - return priceFuture.stream().map(CompletableFuture::join).filter(Objects::nonNull).collect(Collectors.toList()); - } catch (GitAPIException e) { - e.printStackTrace(); - } - return null; - } - - /** - * 获取class文件的地址 - * - * @param git - * @param classPackage - * @return - */ - private String getClassFile(Git git, String classPackage) { - StringBuilder builder = new StringBuilder(git.getRepository().getDirectory().getParent()); - return builder.append("/") - .append(classPackage).toString(); - } - - /** - * 获取类的增量方法 - * - * @param oldClassFile 旧类的本地地址 - * @param mewClassFile 新类的本地地址 - * @param diffEntry 差异类 - * @return - */ - private CompletableFuture getClassMethods(String oldClassFile, String mewClassFile, DiffEntry diffEntry) { - //多线程获取差异方法,此处只要考虑增量代码太多的情况下,每个类都需要遍历所有方法,采用多线程方式加快速度 - return CompletableFuture.supplyAsync(() -> { - String className = diffEntry.getNewPath().split("\\.")[0].split("src/main/java/")[1]; - //新增类直接标记,不用计算方法 - if (DiffEntry.ChangeType.ADD.equals(diffEntry.getChangeType())) { - return ClassInfoResult.builder() - .classFile(className) - .type(DiffEntry.ChangeType.ADD.name()) - .build(); - } - List diffMethods; - //获取新类的所有方法 - List newMethodInfoResults = MethodParserUtils.parseMethods(mewClassFile); - //如果新类为空,没必要比较 - if (CollectionUtils.isEmpty(newMethodInfoResults)) { - return null; - } - //获取旧类的所有方法 - List oldMethodInfoResults = MethodParserUtils.parseMethods(oldClassFile); - //如果旧类为空,新类的方法所有为增量 - if (CollectionUtils.isEmpty(oldMethodInfoResults)) { - diffMethods = newMethodInfoResults; - } else { //否则,计算增量方法 - List md5s = oldMethodInfoResults.stream().map(MethodInfoResult::getMd5).collect(Collectors.toList()); - diffMethods = newMethodInfoResults.stream().filter(m -> !md5s.contains(m.getMd5())).collect(Collectors.toList()); - } - //没有增量方法,过滤掉 - if (CollectionUtils.isEmpty(diffMethods)) { - return null; - } - ClassInfoResult result = ClassInfoResult.builder() - .classFile(className) - .methodInfos(diffMethods) - .type(DiffEntry.ChangeType.MODIFY.name()) - .build(); - return result; - }, executor); - } - - - /** - * 将代码转成树状 - * - * @param repository - * @param branchName - * @return - */ - public static AbstractTreeIterator prepareTreeParser(Repository repository, String branchName) { - try { - RevWalk walk = new RevWalk(repository); - RevTree tree; - tree = walk.parseTree(repository.resolve(branchName)); - CanonicalTreeParser TreeParser = new CanonicalTreeParser(); - try (ObjectReader reader = repository.newObjectReader()) { - TreeParser.reset(reader, tree.getId()); - } - walk.dispose(); - return TreeParser; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - /** - * 取远程代码本地存储路径 - * - * @param gitUrl - * @param localBaseRepoDir - * @param version - * @return - */ - public static String getLocalDir(String gitUrl, String localBaseRepoDir, String version) { - StringBuilder localDir = new StringBuilder(localBaseRepoDir); - if (Strings.isNullOrEmpty(gitUrl)) { - return ""; - } - String repoName = Splitter.on("/") - .splitToStream(gitUrl).reduce((first, second) -> second) - .map(e -> Splitter.on(".").splitToStream(e).findFirst().get()).get(); - localDir.append(repoName); - localDir.append("/"); - localDir.append(version); - return localDir.toString(); - } -} - - diff --git a/application/src/main/java/com/dr/code/diff/controller/CodeDiffController.java b/application/src/main/java/com/dr/code/diff/controller/CodeDiffController.java index 83294ab2..7f4a3bc1 100644 --- a/application/src/main/java/com/dr/code/diff/controller/CodeDiffController.java +++ b/application/src/main/java/com/dr/code/diff/controller/CodeDiffController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.dr.code.diff.dto.ClassInfoResult; import com.dr.code.diff.dto.DiffMethodParams; +import com.dr.code.diff.enums.CodeManageTypeEnum; import com.dr.code.diff.service.CodeDiffService; import com.dr.code.diff.vo.result.CodeDiffResultVO; import com.dr.common.response.UniqueApoResponse; @@ -35,9 +36,9 @@ public class CodeDiffController { @Autowired private CodeDiffService codeDiffService; - @ApiOperation("获取差异代码") - @RequestMapping(value = "/list", method = RequestMethod.GET) - public UniqueApoResponse> getList( + @ApiOperation("git获取差异代码") + @RequestMapping(value = "git/list", method = RequestMethod.GET) + public UniqueApoResponse> getGitList( @ApiParam(required = true, name = "gitUrl", value = "git远程仓库地址") @RequestParam(value = "gitUrl") String gitUrl, @ApiParam(required = true, name = "baseVersion", value = "git原始分支或tag") @@ -45,9 +46,31 @@ public class CodeDiffController { @ApiParam(required = true, name = "nowVersion", value = "git现分支或tag") @RequestParam(value = "nowVersion") String nowVersion) { DiffMethodParams diffMethodParams = DiffMethodParams.builder() - .gitUrl(gitUrl) + .repoUrl(gitUrl) .baseVersion(baseVersion) .nowVersion(nowVersion) + .codeManageTypeEnum(CodeManageTypeEnum.GIT) + .build(); + List diffCodeList = codeDiffService.getDiffCode(diffMethodParams); + List codeDiffResultVOS = OrikaMapperUtils.mapList(diffCodeList, ClassInfoResult.class, CodeDiffResultVO.class); + return new UniqueApoResponse>().success(codeDiffResultVOS, JSON.toJSONString(codeDiffResultVOS,SerializerFeature.WriteNullListAsEmpty)); + } + + + @ApiOperation("svn获取差异代码") + @RequestMapping(value = "svn/list", method = RequestMethod.GET) + public UniqueApoResponse> getSvnList( + @ApiParam(required = true, name = "svnUrl", value = "svn远程仓库地址") + @RequestParam(value = "svnUrl") String svnUrl, + @ApiParam(required = true, name = "baseVersion", value = "svn原始分支或tag") + @RequestParam(value = "baseVersion") String baseVersion, + @ApiParam(required = true, name = "nowVersion", value = "svn现分支或tag") + @RequestParam(value = "nowVersion") String nowVersion) { + DiffMethodParams diffMethodParams = DiffMethodParams.builder() + .repoUrl(svnUrl) + .baseVersion(baseVersion) + .nowVersion(nowVersion) + .codeManageTypeEnum(CodeManageTypeEnum.SVN) .build(); List diffCodeList = codeDiffService.getDiffCode(diffMethodParams); List codeDiffResultVOS = OrikaMapperUtils.mapList(diffCodeList, ClassInfoResult.class, CodeDiffResultVO.class); diff --git a/application/src/main/java/com/dr/code/diff/dto/DiffEntryDto.java b/application/src/main/java/com/dr/code/diff/dto/DiffEntryDto.java new file mode 100644 index 00000000..b1116632 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/dto/DiffEntryDto.java @@ -0,0 +1,29 @@ +package com.dr.code.diff.dto; + +import lombok.Data; +import org.eclipse.jgit.diff.DiffEntry; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.dto + * @Description: java类作用描述 + * @Author: duanrui + * @CreateDate: 2021/4/5 18:34 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +@Data +public class DiffEntryDto { + + + /** + * 文件包名 + */ + protected String newPath; + + /** + * 文件变更类型 + */ + private DiffEntry.ChangeType changeType; +} diff --git a/application/src/main/java/com/dr/code/diff/dto/DiffMethodParams.java b/application/src/main/java/com/dr/code/diff/dto/DiffMethodParams.java index 591dc3bc..9efe09af 100644 --- a/application/src/main/java/com/dr/code/diff/dto/DiffMethodParams.java +++ b/application/src/main/java/com/dr/code/diff/dto/DiffMethodParams.java @@ -1,5 +1,6 @@ package com.dr.code.diff.dto; +import com.dr.code.diff.enums.CodeManageTypeEnum; import lombok.Builder; import lombok.Data; @@ -21,7 +22,7 @@ public class DiffMethodParams { /** * git 远程仓库地址 */ - private String gitUrl; + private String repoUrl; /** * git原始分支或tag @@ -34,4 +35,10 @@ public class DiffMethodParams { private String nowVersion; + /** + * 版本控制类型 + */ + private CodeManageTypeEnum codeManageTypeEnum; + + } diff --git a/application/src/main/java/com/dr/code/diff/dto/VersionControlDto.java b/application/src/main/java/com/dr/code/diff/dto/VersionControlDto.java index b0e5095b..c3069dc7 100644 --- a/application/src/main/java/com/dr/code/diff/dto/VersionControlDto.java +++ b/application/src/main/java/com/dr/code/diff/dto/VersionControlDto.java @@ -1,8 +1,9 @@ package com.dr.code.diff.dto; +import com.dr.code.diff.enums.CodeManageTypeEnum; import lombok.Builder; import lombok.Data; -import org.apache.poi.ss.formula.functions.T; +import org.eclipse.jgit.diff.DiffEntry; import java.util.List; @@ -17,7 +18,6 @@ import java.util.List; * Copyright: Copyright (c) 2021 */ @Data -@Builder public class VersionControlDto { /** @@ -36,9 +36,12 @@ public class VersionControlDto { private String nowVersion; - private Object baseRepo; + /** + * 版本控制类型 + */ + private CodeManageTypeEnum codeManageTypeEnum; + - private Object nowRepo; - private List diffClasses; + private List diffClasses; } diff --git a/application/src/main/java/com/dr/code/diff/enums/CodeManageTypeEnum.java b/application/src/main/java/com/dr/code/diff/enums/CodeManageTypeEnum.java new file mode 100644 index 00000000..cbe1dfd3 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/enums/CodeManageTypeEnum.java @@ -0,0 +1,54 @@ +package com.dr.code.diff.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author rui.duan + * @version 1.0 + * @className WarehousingReceiptStatusEnum + * @description 代码管理工具枚举 + * @date 2019-06-10 11:39 + */ +@Getter +@AllArgsConstructor +public enum CodeManageTypeEnum { + //待通知 + GIT(0,"git"), + + SVN(1,"svn"),; + + private Integer code; + private String value; + + + /** + * 根据code获取值 + * @param code + * @return + */ + public static String getValueByCode(Integer code) { + CodeManageTypeEnum[] values = CodeManageTypeEnum.values(); + for (CodeManageTypeEnum type : values) { + if (type.code.equals(code)) { + return type.value; + } + } + return null; + } + + /** + * 根据value获取code + * @param value + * @return + */ + public static Integer getCodeByValue(String value) { + CodeManageTypeEnum[] values = CodeManageTypeEnum.values(); + for (CodeManageTypeEnum type : values) { + if (type.value.equalsIgnoreCase(value)) { + return type.code; + } + } + return null; + } +} diff --git a/application/src/main/java/com/dr/code/diff/service/CodeDiffService.java b/application/src/main/java/com/dr/code/diff/service/CodeDiffService.java index 7d2a4d08..14578b4e 100644 --- a/application/src/main/java/com/dr/code/diff/service/CodeDiffService.java +++ b/application/src/main/java/com/dr/code/diff/service/CodeDiffService.java @@ -26,4 +26,5 @@ public interface CodeDiffService { */ List getDiffCode(DiffMethodParams diffMethodParams); + } diff --git a/application/src/main/java/com/dr/code/diff/service/impl/CodeDiffServiceImpl.java b/application/src/main/java/com/dr/code/diff/service/impl/CodeDiffServiceImpl.java index a49ad11a..e4e0b7d5 100644 --- a/application/src/main/java/com/dr/code/diff/service/impl/CodeDiffServiceImpl.java +++ b/application/src/main/java/com/dr/code/diff/service/impl/CodeDiffServiceImpl.java @@ -1,9 +1,13 @@ package com.dr.code.diff.service.impl; -import com.dr.code.diff.config.GitConfig; import com.dr.code.diff.dto.ClassInfoResult; import com.dr.code.diff.dto.DiffMethodParams; +import com.dr.code.diff.dto.VersionControlDto; import com.dr.code.diff.service.CodeDiffService; +import com.dr.code.diff.vercontrol.VersionControlHandlerFactory; +import com.dr.code.diff.vercontrol.git.GitVersionControl; +import com.dr.code.diff.vercontrol.svn.SvnVersionControl; +import com.dr.common.utils.mapper.OrikaMapperUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -24,11 +28,16 @@ import java.util.List; @Slf4j public class CodeDiffServiceImpl implements CodeDiffService { - @Autowired - private GitConfig gitConfig; - + /** + * @param diffMethodParams + * @date:2021/1/9 + * @className:CodeDiffService + * @author:Administrator + * @description: 获取差异代码 + */ @Override public List getDiffCode(DiffMethodParams diffMethodParams) { - return gitConfig.diffMethods(diffMethodParams); + VersionControlDto dto = OrikaMapperUtils.map(diffMethodParams, VersionControlDto.class); + return VersionControlHandlerFactory.processHandler(dto); } } diff --git a/application/src/main/java/com/dr/code/diff/util/GitRepoUtil.java b/application/src/main/java/com/dr/code/diff/util/GitRepoUtil.java index 74e8e2a6..3a97b036 100644 --- a/application/src/main/java/com/dr/code/diff/util/GitRepoUtil.java +++ b/application/src/main/java/com/dr/code/diff/util/GitRepoUtil.java @@ -54,7 +54,7 @@ public class GitRepoUtil { .setURI(gitUrl) .setCredentialsProvider(new UsernamePasswordCredentialsProvider(gitUserName, gitPassWord)) .setDirectory(new File(codePath)) -// .setBranch(commitId) + .setBranch(commitId) .call(); // 下载指定commitId/branch git.checkout().setName(commitId).call(); @@ -113,6 +113,7 @@ public class GitRepoUtil { if (Strings.isNullOrEmpty(gitUrl)) { return ""; } + localDir.append("/"); String repoName = Splitter.on("/") .splitToStream(gitUrl).reduce((first, second) -> second) .map(e -> Splitter.on(".").splitToStream(e).findFirst().get()).get(); diff --git a/application/src/main/java/com/dr/code/diff/util/SvnRepoUtil.java b/application/src/main/java/com/dr/code/diff/util/SvnRepoUtil.java index 419d5cf3..7fa81f63 100644 --- a/application/src/main/java/com/dr/code/diff/util/SvnRepoUtil.java +++ b/application/src/main/java/com/dr/code/diff/util/SvnRepoUtil.java @@ -1,5 +1,6 @@ package com.dr.code.diff.util; +import com.dr.code.diff.vercontrol.svn.MySVNEditor; import com.dr.common.errorcode.BizCode; import com.dr.common.exception.BizException; import com.dr.common.log.LoggerUtil; @@ -9,11 +10,15 @@ import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; +import org.tmatesoft.svn.core.SVNDepth; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; +import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; +import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions; +import org.tmatesoft.svn.core.io.ISVNEditor; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.io.SVNRepositoryFactory; -import org.tmatesoft.svn.core.wc.SVNWCUtil; +import org.tmatesoft.svn.core.wc.*; import java.io.File; import java.io.IOException; @@ -31,19 +36,42 @@ import java.io.IOException; public class SvnRepoUtil { /** - * @date:2021/4/5 - * @className:SvnRepoUtil - * @author:Administrator - * @description: 获取svn代码仓 - * - */ - public static SVNRepository cloneRepository(String repoUrl, String codePath, String userName, String password) throws SVNException { - SVNWCUtil.createDefaultAuthenticationManager(new File(codePath), userName, password.toCharArray()); - SVNWCUtil.createDefaultOptions(true); - return SVNRepositoryFactory.create(SVNURL.parseURIEncoded(repoUrl)); + * @date:2021/4/5 + * @className:SvnRepoUtil + * @author:Administrator + * @description: 获取svn代码仓 + */ + public static void cloneRepository(String repoUrl, String codePath, String commitId, String userName, String password) { + try { + ISVNOptions options = SVNWCUtil.createDefaultOptions(true); + SVNUpdateClient updateClient = SVNClientManager.newInstance((DefaultSVNOptions) options, userName, password).getUpdateClient(); + updateClient.doCheckout(SVNURL.parseURIEncoded(repoUrl), new File(codePath), SVNRevision.create(Long.parseLong(commitId)), SVNRevision.create(Long.parseLong(commitId)), SVNDepth.INFINITY, false); + } catch (SVNException e) { + e.printStackTrace(); + } } + public static SVNDiffClient getSVNDiffClient(String userName, String password) { + ISVNOptions options = SVNWCUtil.createDefaultOptions(true); + //实例化客户端管理类 + return SVNClientManager.newInstance((DefaultSVNOptions) options, userName, password).getDiffClient(); + } + + + public static String getLocalDir(String gitUrl, String localBaseRepoDir, String version) { + StringBuilder localDir = new StringBuilder(localBaseRepoDir); + if (Strings.isNullOrEmpty(gitUrl)) { + return ""; + } + String repoName = Splitter.on("/") + .splitToStream(gitUrl).reduce((first, second) -> second).get(); + localDir.append("/"); + localDir.append(repoName); + localDir.append("/"); + localDir.append(version); + return localDir.toString(); + } } diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/SvnVersionControl.java b/application/src/main/java/com/dr/code/diff/vercontrol/SvnVersionControl.java deleted file mode 100644 index f4af7aa6..00000000 --- a/application/src/main/java/com/dr/code/diff/vercontrol/SvnVersionControl.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.dr.code.diff.vercontrol; - -import com.dr.code.diff.dto.VersionControlDto; -import lombok.AllArgsConstructor; - -/** - * @ProjectName: code-diff-parent - * @Package: com.dr.code.diff.vercontrol - * @Description: 代码差异获取流程类定义 - * @Author: duanrui - * @CreateDate: 2021/4/5 9:56 - * @Version: 1.0 - *

- * Copyright: Copyright (c) 2021 - */ - -public class SvnVersionControl extends VersionControl{ - - @Override - public void getDiffCodeClasses() { - - } -} diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/VersionControl.java b/application/src/main/java/com/dr/code/diff/vercontrol/VersionControl.java index 2a0e96c4..b3c5f7e6 100644 --- a/application/src/main/java/com/dr/code/diff/vercontrol/VersionControl.java +++ b/application/src/main/java/com/dr/code/diff/vercontrol/VersionControl.java @@ -1,7 +1,21 @@ package com.dr.code.diff.vercontrol; +import com.dr.code.diff.dto.ClassInfoResult; +import com.dr.code.diff.dto.DiffEntryDto; +import com.dr.code.diff.dto.MethodInfoResult; import com.dr.code.diff.dto.VersionControlDto; +import com.dr.code.diff.enums.CodeManageTypeEnum; +import com.dr.code.diff.util.MethodParserUtils; import lombok.Data; +import org.eclipse.jgit.diff.DiffEntry; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.stream.Collectors; /** * @ProjectName: code-diff-parent @@ -19,29 +33,109 @@ public abstract class VersionControl { protected VersionControlDto versionControlDto; - public void handler(){ + @Resource(name = "asyncExecutor") + private Executor executor; + + + /** + * 执行handler + * @return + */ + public List handler(VersionControlDto versionControlDto) { + this.versionControlDto = versionControlDto; getDiffCodeClasses(); - getDiffCodeMethods(); + return getDiffCodeMethods(); } + public abstract String getBaseDir(); + /** - * @date:2021/4/5 - * @className:VersionControl - * @author:Administrator - * @description: 获取差异类 - * - */ + * @date:2021/4/5 + * @className:VersionControl + * @author:Administrator + * @description: 获取差异类 + */ public abstract void getDiffCodeClasses(); + /** + * 获取操作类型 + */ + public abstract CodeManageTypeEnum getType(); + + /** + * @date:2021/4/5 + * @className:VersionControl + * @author:Administrator + * @description: 获取差异方法 + */ + public List getDiffCodeMethods() { + List> priceFuture = versionControlDto.getDiffClasses().stream() + .map(item -> getClassMethods(getClassFilePath(getBaseDir(), versionControlDto.getBaseVersion(), item.getNewPath()), getClassFilePath(getBaseDir(), versionControlDto.getNowVersion(), item.getNewPath()), item)) + .collect(Collectors.toList()); + return priceFuture.stream().map(CompletableFuture::join).filter(Objects::nonNull).collect(Collectors.toList()); + } + /** * @date:2021/4/5 * @className:VersionControl * @author:Administrator - * @description: + * @description: 获取类本地地址 * */ - public void getDiffCodeMethods(){ + private String getClassFilePath(String baseDir, String version, String classPath) { + StringBuilder builder = new StringBuilder(baseDir); + builder.append(version); + builder.append("/"); + builder.append(classPath); + return builder.toString(); + + } + /** + * 获取类的增量方法 + * + * @param oldClassFile 旧类的本地地址 + * @param mewClassFile 新类的本地地址 + * @param diffEntry 差异类 + * @return + */ + private CompletableFuture getClassMethods(String oldClassFile, String mewClassFile, DiffEntryDto diffEntry) { + //多线程获取差异方法,此处只要考虑增量代码太多的情况下,每个类都需要遍历所有方法,采用多线程方式加快速度 + return CompletableFuture.supplyAsync(() -> { + String className = diffEntry.getNewPath().split("\\.")[0].split("src/main/java/")[1]; + //新增类直接标记,不用计算方法 + if (DiffEntry.ChangeType.ADD.equals(diffEntry.getChangeType())) { + return ClassInfoResult.builder() + .classFile(className) + .type(DiffEntry.ChangeType.ADD.name()) + .build(); + } + List diffMethods; + //获取新类的所有方法 + List newMethodInfoResults = MethodParserUtils.parseMethods(mewClassFile); + //如果新类为空,没必要比较 + if (CollectionUtils.isEmpty(newMethodInfoResults)) { + return null; + } + //获取旧类的所有方法 + List oldMethodInfoResults = MethodParserUtils.parseMethods(oldClassFile); + //如果旧类为空,新类的方法所有为增量 + if (CollectionUtils.isEmpty(oldMethodInfoResults)) { + diffMethods = newMethodInfoResults; + } else { //否则,计算增量方法 + List md5s = oldMethodInfoResults.stream().map(MethodInfoResult::getMd5).collect(Collectors.toList()); + diffMethods = newMethodInfoResults.stream().filter(m -> !md5s.contains(m.getMd5())).collect(Collectors.toList()); + } + //没有增量方法,过滤掉 + if (CollectionUtils.isEmpty(diffMethods)) { + return null; + } + return ClassInfoResult.builder() + .classFile(className) + .methodInfos(diffMethods) + .type(DiffEntry.ChangeType.MODIFY.name()) + .build(); + }, executor); } diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/VersionControlHandlerFactory.java b/application/src/main/java/com/dr/code/diff/vercontrol/VersionControlHandlerFactory.java new file mode 100644 index 00000000..0f55264a --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/vercontrol/VersionControlHandlerFactory.java @@ -0,0 +1,65 @@ +package com.dr.code.diff.vercontrol; + +import com.dr.code.diff.dto.ClassInfoResult; +import com.dr.code.diff.dto.VersionControlDto; +import com.dr.code.diff.enums.CodeManageTypeEnum; +import com.google.common.collect.Lists; +import org.springframework.beans.BeansException; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; + +/** + * @ProjectName: cmdb + * @Package: com.dr.cmdb.application.filedcheck + * @Description: java类作用描述 + * @Author: duanrui + * @CreateDate: 2021/3/30 10:10 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +@Component +public class VersionControlHandlerFactory implements CommandLineRunner, ApplicationContextAware { + private volatile ApplicationContext applicationContext; + + + private static List handlers; + + + /** + * 拼接变种责任链 + * @param args + */ + @Override + public void run(String... args) { + Collection checkHandlers = this.applicationContext.getBeansOfType(VersionControl.class).values(); + handlers = Lists.newArrayList(checkHandlers); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + /** + * 执行方法校验 + * @param versionControlDto + */ + public static List processHandler(VersionControlDto versionControlDto) { + List result = null; + for (int i = 0; i < handlers.size(); i++) { + if(versionControlDto.getCodeManageTypeEnum().equals(handlers.get(i).getType())){ + result = handlers.get(i).handler(versionControlDto); + } + } + return result; + + } + + +} diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/GitVersionControl.java b/application/src/main/java/com/dr/code/diff/vercontrol/git/GitVersionControl.java similarity index 80% rename from application/src/main/java/com/dr/code/diff/vercontrol/GitVersionControl.java rename to application/src/main/java/com/dr/code/diff/vercontrol/git/GitVersionControl.java index c2caa6cd..8a7fb535 100644 --- a/application/src/main/java/com/dr/code/diff/vercontrol/GitVersionControl.java +++ b/application/src/main/java/com/dr/code/diff/vercontrol/git/GitVersionControl.java @@ -1,19 +1,19 @@ -package com.dr.code.diff.vercontrol; +package com.dr.code.diff.vercontrol.git; import com.dr.code.diff.config.CustomizeConfig; -import com.dr.code.diff.dto.VersionControlDto; +import com.dr.code.diff.dto.DiffEntryDto; +import com.dr.code.diff.enums.CodeManageTypeEnum; import com.dr.code.diff.util.GitRepoUtil; -import com.google.common.collect.Lists; +import com.dr.code.diff.vercontrol.VersionControl; +import com.dr.common.utils.mapper.OrikaMapperUtils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.diff.DiffEntry; -import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import org.eclipse.jgit.treewalk.AbstractTreeIterator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; -import java.io.File; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -35,6 +35,14 @@ public class GitVersionControl extends VersionControl { private CustomizeConfig customizeConfig; + /** + * 获取操作类型 + */ + @Override + public CodeManageTypeEnum getType() { + return CodeManageTypeEnum.GIT; + } + @Override public void getDiffCodeClasses() { try { @@ -59,10 +67,16 @@ public class GitVersionControl extends VersionControl { .filter(e -> DiffEntry.ChangeType.ADD.equals(e.getChangeType()) || DiffEntry.ChangeType.MODIFY.equals(e.getChangeType())) .collect(Collectors.toList()); if (!CollectionUtils.isEmpty(validDiffList)) { - super.versionControlDto.setDiffClasses(Lists.newArrayList(validDiffList)); + List diffEntrys = OrikaMapperUtils.mapList(validDiffList, DiffEntry.class, DiffEntryDto.class); + super.versionControlDto.setDiffClasses(diffEntrys); } } catch (GitAPIException e) { e.printStackTrace(); } } + + @Override + public String getBaseDir() { + return GitRepoUtil.getLocalDir(super.versionControlDto.getRepoUrl(), customizeConfig.getGitLocalBaseRepoDir(),""); + } } diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/svn/MySVNDiffStatusHandler.java b/application/src/main/java/com/dr/code/diff/vercontrol/svn/MySVNDiffStatusHandler.java new file mode 100644 index 00000000..4a4e3270 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/vercontrol/svn/MySVNDiffStatusHandler.java @@ -0,0 +1,51 @@ +package com.dr.code.diff.vercontrol.svn; + +import com.dr.code.diff.dto.DiffEntryDto; +import org.eclipse.jgit.diff.DiffEntry; +import org.tmatesoft.svn.core.SVNException; +import org.tmatesoft.svn.core.wc.ISVNDiffStatusHandler; +import org.tmatesoft.svn.core.wc.SVNDiffStatus; +import org.tmatesoft.svn.core.wc.SVNStatusType; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.vercontrol + * @Description: java类作用描述 + * @Author: duanrui + * @CreateDate: 2021/4/5 18:06 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +public class MySVNDiffStatusHandler implements ISVNDiffStatusHandler { + + public final static List list = Collections.synchronizedList(new ArrayList());; + + + @Override + public void handleDiffStatus(SVNDiffStatus svnDiffStatus) throws SVNException { + //首先过滤java文件 + if(!svnDiffStatus.getPath().endsWith(".java")){ + return; + } + //过滤测试文件 + if(!svnDiffStatus.getPath().contains("src/main/java")){ + return; + } + DiffEntryDto entry = new DiffEntryDto(); + //只计算变更和新增文件 + if(SVNStatusType.STATUS_MODIFIED.equals(svnDiffStatus.getModificationType())){ + entry.setChangeType(DiffEntry.ChangeType.MODIFY); + }else if(SVNStatusType.STATUS_ADDED.equals(svnDiffStatus.getModificationType())){ + entry.setChangeType(DiffEntry.ChangeType.ADD); + }else{ + return; + } + entry.setNewPath(svnDiffStatus.getPath()); + list.add(entry); + } +} diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/svn/MySVNEditor.java b/application/src/main/java/com/dr/code/diff/vercontrol/svn/MySVNEditor.java new file mode 100644 index 00000000..42678a9d --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/vercontrol/svn/MySVNEditor.java @@ -0,0 +1,111 @@ +package com.dr.code.diff.vercontrol.svn; + +import org.tmatesoft.svn.core.SVNCommitInfo; +import org.tmatesoft.svn.core.SVNException; +import org.tmatesoft.svn.core.SVNPropertyValue; +import org.tmatesoft.svn.core.io.ISVNEditor; +import org.tmatesoft.svn.core.io.diff.SVNDiffWindow; + +import java.io.OutputStream; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.vercontrol.svn + * @Description: java类作用描述 + * @Author: duanrui + * @CreateDate: 2021/4/5 19:06 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +public class MySVNEditor implements ISVNEditor { + @Override + public void targetRevision(long l) throws SVNException { + + } + + @Override + public void openRoot(long l) throws SVNException { + + } + + @Override + public void deleteEntry(String s, long l) throws SVNException { + + } + + @Override + public void absentDir(String s) throws SVNException { + + } + + @Override + public void absentFile(String s) throws SVNException { + + } + + @Override + public void addDir(String s, String s1, long l) throws SVNException { + + } + + @Override + public void openDir(String s, long l) throws SVNException { + + } + + @Override + public void changeDirProperty(String s, SVNPropertyValue svnPropertyValue) throws SVNException { + + } + + @Override + public void closeDir() throws SVNException { + + } + + @Override + public void addFile(String s, String s1, long l) throws SVNException { + + } + + @Override + public void openFile(String s, long l) throws SVNException { + + } + + @Override + public void changeFileProperty(String s, String s1, SVNPropertyValue svnPropertyValue) throws SVNException { + + } + + @Override + public void closeFile(String s, String s1) throws SVNException { + + } + + @Override + public SVNCommitInfo closeEdit() throws SVNException { + return null; + } + + @Override + public void abortEdit() throws SVNException { + + } + + @Override + public void applyTextDelta(String s, String s1) throws SVNException { + + } + + @Override + public OutputStream textDeltaChunk(String s, SVNDiffWindow svnDiffWindow) throws SVNException { + return null; + } + + @Override + public void textDeltaEnd(String s) throws SVNException { + + } +} diff --git a/application/src/main/java/com/dr/code/diff/vercontrol/svn/SvnVersionControl.java b/application/src/main/java/com/dr/code/diff/vercontrol/svn/SvnVersionControl.java new file mode 100644 index 00000000..e7f5a2b3 --- /dev/null +++ b/application/src/main/java/com/dr/code/diff/vercontrol/svn/SvnVersionControl.java @@ -0,0 +1,61 @@ +package com.dr.code.diff.vercontrol.svn; + +import com.dr.code.diff.config.CustomizeConfig; +import com.dr.code.diff.enums.CodeManageTypeEnum; +import com.dr.code.diff.util.SvnRepoUtil; +import com.dr.code.diff.vercontrol.VersionControl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.tmatesoft.svn.core.SVNDepth; +import org.tmatesoft.svn.core.SVNException; +import org.tmatesoft.svn.core.SVNURL; +import org.tmatesoft.svn.core.wc.SVNDiffClient; +import org.tmatesoft.svn.core.wc.SVNRevision; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.vercontrol + * @Description: svn差异代码获取 + * @Author: duanrui + * @CreateDate: 2021/4/5 9:56 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +@Component +public class SvnVersionControl extends VersionControl { + + @Autowired + private CustomizeConfig customizeConfig; + + + /** + * 获取操作类型 + */ + @Override + public CodeManageTypeEnum getType() { + return CodeManageTypeEnum.SVN; + } + + @Override + public void getDiffCodeClasses() { + try { + MySVNDiffStatusHandler.list.clear(); + String localBaseRepoDir = SvnRepoUtil.getLocalDir(super.versionControlDto.getRepoUrl(), customizeConfig.getSvnLocalBaseRepoDir(), super.versionControlDto.getBaseVersion()); + String localNowRepoDir = SvnRepoUtil.getLocalDir(super.versionControlDto.getRepoUrl(), customizeConfig.getSvnLocalBaseRepoDir(), super.versionControlDto.getNowVersion()); + SvnRepoUtil.cloneRepository(super.versionControlDto.getRepoUrl(), localBaseRepoDir, super.versionControlDto.getBaseVersion(), customizeConfig.getSvnUserName(), customizeConfig.getSvnPassWord()); + SvnRepoUtil.cloneRepository(super.versionControlDto.getRepoUrl(), localNowRepoDir, super.versionControlDto.getNowVersion(), customizeConfig.getSvnUserName(), customizeConfig.getSvnPassWord()); + SVNDiffClient svnDiffClient = SvnRepoUtil.getSVNDiffClient(customizeConfig.getSvnUserName(), customizeConfig.getSvnPassWord()); + svnDiffClient.doDiffStatus(SVNURL.parseURIEncoded(super.versionControlDto.getRepoUrl()), SVNRevision.create(Long.parseLong(super.versionControlDto.getBaseVersion())), SVNURL.parseURIEncoded(super.versionControlDto.getRepoUrl()), SVNRevision.create(Long.parseLong(super.versionControlDto.getNowVersion())), SVNDepth.INFINITY, true, new MySVNDiffStatusHandler()); + //将差异代码设置进集合 + super.versionControlDto.setDiffClasses(MySVNDiffStatusHandler.list); + } catch (SVNException e) { + e.printStackTrace(); + } + } + + @Override + public String getBaseDir() { + return SvnRepoUtil.getLocalDir(super.versionControlDto.getRepoUrl(), customizeConfig.getSvnLocalBaseRepoDir(),""); + } +} diff --git a/application/src/main/java/com/dr/code/diff/vo/param/CodeDiffParamVO.java b/application/src/main/java/com/dr/code/diff/vo/param/CodeDiffParamVO.java index 8cba2311..54e18cda 100644 --- a/application/src/main/java/com/dr/code/diff/vo/param/CodeDiffParamVO.java +++ b/application/src/main/java/com/dr/code/diff/vo/param/CodeDiffParamVO.java @@ -17,19 +17,19 @@ public class CodeDiffParamVO { /** * git 远程仓库地址 */ - @ApiModelProperty(name = "name", value = "git远程仓库地址", dataType = "String", example = "https://github.com/rayduan/code-diff.git") - private String gitUrl; + @ApiModelProperty(name = "name", value = "远程仓库地址", dataType = "String", example = "https://github.com/rayduan/code-diff.git") + private String repoUrl; /** * git原始分支或tag */ - @ApiModelProperty(name = "name", value = " git原始分支或tag", dataType = "String", example = "master") + @ApiModelProperty(name = "name", value = "原始分支或tag", dataType = "String", example = "master") private String baseVersion; /** * git现分支或tag */ - @ApiModelProperty(name = "name", value = " git现分支或tag", dataType = "String", example = "develop") + @ApiModelProperty(name = "name", value = "现分支或tag", dataType = "String", example = "develop") private String nowVersion; diff --git a/application/src/main/resources/application.yml b/application/src/main/resources/application.yml index 568e5ce2..5c43037e 100644 --- a/application/src/main/resources/application.yml +++ b/application/src/main/resources/application.yml @@ -30,13 +30,13 @@ git: password: duanrui1991 local: base: - dir: D:\git-test\git + dir: D:\git-test svn: - userName: rayduan - password: duanrui1991 + userName: admin + password: 123456 local: base: - dir: D:\git-test\svn + dir: D:\svn-test server: port: 8085 servlet: diff --git a/application/src/test/java/com/dr/code/diff/config/GitConfigTest.java b/application/src/test/java/com/dr/code/diff/config/GitConfigTest.java index 56eeeb17..a9d8f1b2 100644 --- a/application/src/test/java/com/dr/code/diff/config/GitConfigTest.java +++ b/application/src/test/java/com/dr/code/diff/config/GitConfigTest.java @@ -17,28 +17,28 @@ import org.springframework.beans.factory.annotation.Autowired; */ class GitConfigTest extends CodeDiffApplicationTest { - @Autowired - private GitConfig gitConfig; +// @Autowired +// private GitConfig gitConfig; - @Test - void cloneRepository() { - String localRepo = "D:\\git-test\\base-service"; - String gitUrl = "http://192.168.75.128/rayduan/base-service.git"; - gitConfig.cloneRepository(gitUrl, localRepo, "2ea401406d775005245faa0a57d6e08db348433f"); - } - - @Test - void diffMethods() { +// @Test +// void cloneRepository() { +// String localRepo = "D:\\git-test\\base-service"; +// String gitUrl = "http://192.168.75.128/rayduan/base-service.git"; +// gitConfig.cloneRepository(gitUrl, localRepo, "2ea401406d775005245faa0a57d6e08db348433f"); +// } +// +// @Test +// void diffMethods() { +//// DiffMethodParams diff = DiffMethodParams.builder() +//// .baseVersion("dac68b2f3976509b4204a66df8f5e71dffe023b7") +//// .nowVersion("74c026849763f1f9f0dfc967949d0b581959c2ea") +//// .gitUrl("https://github.com/rayduan/devops-data.git") +//// .build(); // DiffMethodParams diff = DiffMethodParams.builder() -// .baseVersion("dac68b2f3976509b4204a66df8f5e71dffe023b7") -// .nowVersion("74c026849763f1f9f0dfc967949d0b581959c2ea") -// .gitUrl("https://github.com/rayduan/devops-data.git") +// .baseVersion("db84201eea9be107073fa07c24e30262ac91d384") +// .nowVersion("dca3a374ba9100c64b970081fad5db7335e99ff6") +// .gitUrl("https://github.com/rayduan/base-service.git") // .build(); - DiffMethodParams diff = DiffMethodParams.builder() - .baseVersion("db84201eea9be107073fa07c24e30262ac91d384") - .nowVersion("dca3a374ba9100c64b970081fad5db7335e99ff6") - .gitUrl("https://github.com/rayduan/base-service.git") - .build(); - gitConfig.diffMethods(diff); - } +// gitConfig.diffMethods(diff); +// } } \ No newline at end of file diff --git a/application/src/test/java/com/dr/code/diff/vercontrol/SvnVersionControlTest.java b/application/src/test/java/com/dr/code/diff/vercontrol/SvnVersionControlTest.java new file mode 100644 index 00000000..fac10b22 --- /dev/null +++ b/application/src/test/java/com/dr/code/diff/vercontrol/SvnVersionControlTest.java @@ -0,0 +1,34 @@ +package com.dr.code.diff.vercontrol; + +import com.dr.code.diff.CodeDiffApplicationTest; +import com.dr.code.diff.dto.VersionControlDto; +import com.dr.code.diff.vercontrol.svn.SvnVersionControl; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @ProjectName: code-diff-parent + * @Package: com.dr.code.diff.vercontrol + * @Description: java类作用描述 + * @Author: duanrui + * @CreateDate: 2021/4/5 14:03 + * @Version: 1.0 + *

+ * Copyright: Copyright (c) 2021 + */ +class SvnVersionControlTest extends CodeDiffApplicationTest { + + @Autowired + private SvnVersionControl svnVersionControl; + + @Test + void getDiffCodeClasses() { +// VersionControlDto build = VersionControlDto.builder() +// .repoUrl("svn://192.168.75.130/svn/code/code-diif") +// .baseVersion("3") +// .nowVersion("5") +// .build(); +// svnVersionControl.setVersionControlDto(build); +// svnVersionControl.getDiffCodeClasses(); + } +} \ No newline at end of file -- Gitee From 6ea90b091940cc5d2b1240dbd4a7f12fa1581da6 Mon Sep 17 00:00:00 2001 From: rayduan <719328408@qq.com> Date: Mon, 5 Apr 2021 21:26:50 +0800 Subject: [PATCH 8/9] [modify] --- application/src/main/resources/application.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/resources/application.yml b/application/src/main/resources/application.yml index 5c43037e..bf700659 100644 --- a/application/src/main/resources/application.yml +++ b/application/src/main/resources/application.yml @@ -27,7 +27,7 @@ swagger: # sessionIdUrlRewritingEnabled: false git: userName: rayduan - password: duanrui1991 + password: 123456 local: base: dir: D:\git-test -- Gitee From 38aa34bef076213d5bc802e0517be68b507789f1 Mon Sep 17 00:00:00 2001 From: rayduan Date: Tue, 6 Apr 2021 15:04:12 +0800 Subject: [PATCH 9/9] =?UTF-8?q?[modify]=E5=A2=9E=E5=8A=A0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dr/code/diff/controller/CodeDiffController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/src/main/java/com/dr/code/diff/controller/CodeDiffController.java b/application/src/main/java/com/dr/code/diff/controller/CodeDiffController.java index 7f4a3bc1..799c74f6 100644 --- a/application/src/main/java/com/dr/code/diff/controller/CodeDiffController.java +++ b/application/src/main/java/com/dr/code/diff/controller/CodeDiffController.java @@ -60,11 +60,11 @@ public class CodeDiffController { @ApiOperation("svn获取差异代码") @RequestMapping(value = "svn/list", method = RequestMethod.GET) public UniqueApoResponse> getSvnList( - @ApiParam(required = true, name = "svnUrl", value = "svn远程仓库地址") + @ApiParam(required = true, name = "svnUrl", value = "svn远程仓库地址,如svn:192.168.0.1:3690/svn") @RequestParam(value = "svnUrl") String svnUrl, - @ApiParam(required = true, name = "baseVersion", value = "svn原始分支或tag") + @ApiParam(required = true, name = "baseVersion", value = "svn原始分支,如:1") @RequestParam(value = "baseVersion") String baseVersion, - @ApiParam(required = true, name = "nowVersion", value = "svn现分支或tag") + @ApiParam(required = true, name = "nowVersion", value = "svn现分支,如:2") @RequestParam(value = "nowVersion") String nowVersion) { DiffMethodParams diffMethodParams = DiffMethodParams.builder() .repoUrl(svnUrl) -- Gitee