obsidian/笔记文件/白日梦游戏/白日梦游戏_2022年8月4日/整合python和svn、git合并相关.md
2025-03-26 00:02:56 +08:00

5.7 KiB
Raw Blame History

!Pasted image 20220804163833.png

对应的脚本文件 ↑

!Pasted image 20220804141327.png

新建飞书群,再添加机器人之后:

!Pasted image 20220804141525.png

复制一下webhook地址

其中运行的python环境需要用到介个库urllib3

安装方式,参考:

!关于ModuleNotFoundError No module named 'urllib3'解决

!Pasted image 20220804141743.png

其他需要用到的库;

!Pasted image 20220804142307.png

获得当前脚本,所在的绝对路径,是一个字符数组;

!Pasted image 20220804142349.png

!Pasted image 20220805113610.png

这是跳转的接口获取字符数组的第0个数据即可

!Pasted image 20220804142503.png

这是前面复制的webhook链接

通知说明使用json的结构填充即可

!Pasted image 20220804142600.png

!Pasted image 20220804142615.png

这就是发送的代码了把前面的json文本结构发送到对应的飞书机器人所在群聊

补充说明在json结构里这是@对应的用户id

!Pasted image 20220804142827.png

具体获取用户id的方法参考这个即可

!获取飞书的user_id

!Pasted image 20220804142958.png

这是发送后的结果;

!Pasted image 20220804143048.png

当然,也是可以有传参的;

!Pasted image 20220804145021.png

其中sys.argv是通过指令运行python脚本的传参也是从0开始的不过第0个一般是脚本名称本身

!Pasted image 20220804145429.png

这是对应的传参当然这个只是Jenkins的写法

!Pasted image 20220804145720.png

在cmd或者命令行的写法这样即可

!Pasted image 20220804145752.png

然后就是对应的svn相关命令行了其中这里的 > 指的是,生成到某个位置的文件,然后 . 就是当前位置这里的语法就是把其中的一些svn指令执行之后的日志打印保存到对应的文本

!Pasted image 20220804150731.png

为了不产生多余的文件后面筛选完问题之后会把对应的txt文件删除

!Pasted image 20220804151014.png

这里有设置一个字符字典,匹配对应的方法体;

!Pasted image 20220804151143.png

!Pasted image 20220804151219.png

!Pasted image 20220804151449.png

!Pasted image 20220804151711.png

这是调用字符字典函数的方法;

!Pasted image 20220804152030.png

现在暂时不用其他两个,注释就好;

!Pasted image 20220804152246.png

目前暂时只用到双向发送其中的步骤svn还原→svn更新→git拉取

!Pasted image 20220804153811.png

然后是把当前svn的状态也保存到对应的文件夹

!Pasted image 20220804153658.png

保存之后readLines() 接口,读取配置文件,每一行文本; 这里的strip()接口,是去掉多余的头尾空格等符号; 这里的逻辑是记录svn删除的文件把它合并到一个字符串里

!origin_img_v2_16859c5e-6c30-4417-a9d3-b5ebea27031g.jpg

strip()的相关说明 ↑

!Pasted image 20220804154402.png

然后再创建一个队列在遍历log的时候把名字放到队列里面 这个队列,是用来处理特殊情况的;

svn重命名一个文件逻辑上属于是删除一个文件然后再新增一个文件

!Pasted image 20220804160334.png

是专门写了一个ReName()的方法,来处理这种情况的; 其中是有一个传参这里如果是文本类的传参要加一个f的前缀

!Pasted image 20220804160851.png

如果在文本行里,找到"rename"字段,逻辑就进来,然后再判断一下; 这里需要注意的是是需要添加strip()去掉首尾空格相关的;

!Pasted image 20220804162557.png

如果条件满足对应的布尔就会设置为true也会调用一下Rename()方法,通知会发给对应的飞书机器人;

!Pasted image 20220804162708.png

后面的逻辑如果isRename为True就直接return不走下去了也就不会跑到提交的逻辑

!Pasted image 20220804163554.png

这里的逻辑是判断的是如果git拉取已经是最新版本也是直接break就好

!Pasted image 20220804164337.png

!Pasted image 20220804165414.png

需要注意的是这里有定义一个布尔是用来判断是否为正常状态的如果非正常状态后面会直接return不跑下去

!Pasted image 20220804165604.png

前面gitNormal如果为false就会调用这个方法是用来发送通知修改相同文件的

!Pasted image 20220804165923.png

然后就是打开svn状态的文件了也是读取每一行了

!Pasted image 20220805112745.png

这是配合白名单列表进行处理,如果文件名是属于后面生成的配置文件,是不进行版本管理操作的;

!Pasted image 20220805113003.png

如果是在git里删除的这时在svn的版本管理的表现会是!前缀通过svn相关指令将这个文件添加到svn删除的版本管理即可

!Pasted image 20220805113116.png

如果是在git新增也就是svn是没有加入到版本管理的也是调用相关的svn指令完成新增即可不过这里有一个判断

!Pasted image 20220805113224.png

其中调用的函数指的是这个文件在svn已经删除的了但是在git有修改这时也会是对于svn而言是无版本控制的

!Pasted image 20220805113439.png

一旦出现这个情况也是直接return就好

!Pasted image 20220805113501.png

!Pasted image 20220805113507.png

删除多余的配置文件;

!Pasted image 20220805113521.png

然后提交svn和git即可