.h文件宏定义修改、三段式版本处理、svn changelog提取(总结)

news/2025/3/21 2:09:33/
dd----.h文件宏定义修改、三段式版本处理、changelog提取(总结):
版本一:
处理思路总结:
  1. 对输入的4个版本值进行格式化修改:
  • sw (sw:00:00),分割成8个字符,存进map中;key对应.h文件8的宏定义名,value为分割后的8个字符。
  • mcu (000000),格式化字符串,取第1、2、3、4位组成新字符串,并在格式化后的新字符串前添加0x拼接为新字符串。
  • switch (00000),取第2、1、4、5位组成新字符串并在新字符串添加0x拼接为新字符串。
  • mpu (0000),在该值前添加0x格式化为新字符串。
  1. 获取.h文件宏定义和其值存进map:

获取特定路径的产品团队的.h文件并进行解析,用正则表达式匹配待修改的11个宏定义所在的行;
如果发现这个11个宏定义的行,使用正则表达式匹配该行的空格 分别将含有这11个宏定义的行进行分割,分割为3部分取宏定义名和宏定义值这两部分存进数组;
(将分别将这11个数组内的的宏定义名和宏定义值分别作为key和value存进macros map)。

  1. 更新宏定义的值,并将key和更新后的value存进map:

分别进行判断,如果macro map存储了11个宏定义的key,则分别对比.h文件内的11个宏定义key的value和前边格式化后的版本值是否相等,
若不相等,则将.h文件内宏定义的值改为格式化后的新值并将key和新value存进macro map。

  1. 将更新后的宏定义的值写进.h宏定义中:

使用正则表达式匹配.h文件中含有要修改的11个宏定义的行,若匹配到该宏定义,则将修改后的宏定义的新值写到.文件中。

版本二:

修改MCU版本号处理,实现3段式版本:

处理思路:
  1. 从产品代码的"DD_VDP_Version_Changelog.txt"文件中获取当前发布的两段式版本号:
    从产品团队的Changelog.txt中读取最后一个以&开头的行,使用正则表达式匹配该行的version并进行格式转化(例如8.1->0801,8.2->0802)

  2. 构建系统新增文件存储全局唯一的3段式版本号:

在文件最上方填入初始化为000000的3段式版本

  1. 构建脚本比较两个版本号生成3段式的第3段版本号:
  • 与定义的ncu_version.txt中的数值(例如: 000000)的前四位进行对比,若格式化后的产品团队的4位版本号与自定义的三段式版本的前4位相同,则将三段式版本的后2位自增1并拼接上yyyy-MM-dd HH:mm:ss格式的当前系统时间写到文件中,每次构建后将产生的新版本号和时间戳追加到文件的最上方。

  • 与定义的ncu_version.txt中的数值(例如: 000000)的前四位进行对比,若格式化后的产品团队的4位版本号与自定义的三段式版本的前4位不同,则将自定义的三段式版本的前四位替换为产品的4位版本号,并将后2位重置为00,将替换后的前四位和重置后的后两位拼接成一个新的三段式版本,并拼接上yyyy-MM-dd HH:mm:ss格式的当前系统时间写到文件中,每次构建后将产生的新版本号和时间戳追加到文件的最上方。

版本三:

只获取自定义文件第一行的6位版本号,对版本号进行分割,前4位加0x存到map中,后2位前加0x存到map,修改.h中关于mcu的两个宏定义值。(原先的.h文件的宏定义多增加一个关于mcu版本的宏定义)

版本四:

提取svn changelog,以及两个功能的联合使用:

根据上边自定义版本中每次侯建产生的时间戳范围提取svn分支的changelog写到文件内(每次构建后写入文件的时间戳作为提取svn log的终止版本,上次构建及文件第二行的时间戳作为提取svn log的起始版本),每次构建后在文件最上方追加写入方式。

  • 每次写入changelog文件的内容分为三部分 :
  1. 第一部分:本次构建时产生的mcu版本和该次构建的时间戳
  2. 第二部分:经过格式化对齐后的log信息表头(Revision、Author、Date、Message)和-----分割符
  3. 第三部分:每次传入提取log的起始时间和终止时间后生成的log信息(经过格式化对齐)
  4. 要注意当commit Message是多行的情况,该版本的message除了第一行需要对齐,其余的message行也要处理成格式对齐。
  • 考虑到第一次构建时自定义版本中只有一个时间,而写log时需要两个时间作为范围,需要进行以下判断:
    如果自定义版本中第一行有日期但第二行没有日期时,则无法传入起始日期获取log,终止执行后续方法。

http://www.ppmy.cn/news/421651.html

相关文章

怎么入手性能测试,重点以及各项流程

之前在性能测试学习路线里,提到过《软件性能测试、分析与调优实践之路》这本书。 昨天看到之前自己记的读书笔记,整理一下发出来,希望对读者有所帮助。 网上关于性能测试的文章大多数时间比较久远,或者知识点比较散,…

PMP课堂模拟题目及解析(第18期)

171. 一个项目已经结束,然而,项目经理和项目团队成员仍然被要求解决技术问题,进行一些变更,并评估新的需求。若要保证项目开发的产品或服务现在具有运营支持,项目经理应该执行下列哪些工作? (选…

AI实战营第二期 第十节 《MMagic 代码课》——笔记11

AI实战营第二期 第十节 《MMagic 代码课》 MMagic (Multimodal Advanced, Generative, and Intelligent Creation) 是一个供专业人工智能研究人员和机器学习工程师去处理、编辑和生成图像与视频的开源 AIGC 工具箱。 MMagic 允许研究人员和工程师使用最先进的预训练模型&…

2023亚马逊科技中国峰会之Amazon DeepRacer赛车比赛

目录 一、前言 二、什么是 Amazon DeepRacer 三、如何构建自己的第一个强化学习模型 1、创建 Amazon DeepRacer 资源 2、自定义你的赛道 3、开始你的模型 4、关于优化模型 5、在仿真器中测试 6、在真实赛道上测试你的模型 四、中国峰会总决赛 五、自动驾驶赛车名校邀…

【Golang系列】Golang环境配置和第一个Go程序

⭐️前面的话⭐️ 本篇文章将介绍Golang语言的环境配置,以及如何在VS code中运行第一个golang程序。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由未…

抖音分身

切割的方法 # -*- encodingutf8 -*- import os aa[] with open(r"C:\Users\admin、\Desktop\fenshen.txt","r",encoding "utf-8",) as fp:afp.readlines()print(a)for i in range(0,len(a)):#print(a[i])#print(len(a))sa[i].split(":&quo…

前端新宠 Svelte 带来哪些新思想?赶紧学起来!

theme: smartblue 本文介绍 点赞 关注 收藏 学会了 Svelte 是我用过最爽的框架,就算 Vue 和 React 再强大,生态再好,我还是更喜欢 Svelte,因为它开发起来真的很爽。 其实在很久之前我就注意到 Svelte ,但一直没把这…

【Front Plant Sci】LvMYB5 和 LvMYB1转录因子调控百合花青素合成

文章信息 题目:Regulation of MYB Transcription Factors of Anthocyanin Synthesis in Lily Flowers 刊名:Frontiers in Plant Science 作者:Xiaojuan Yin, Yulong Feng et al. 单位:Shenyang Agricultural University 日期…