gpt4 book ai didi

C++如何将结构化git日志的输出解析为对象

转载 作者:行者123 更新时间:2023-11-30 03:33:00 24 4
gpt4 key购买 nike

问题:将具有结构化提交消息的 git log 的输出解析为一个对象。

这是这个特定目录的日志:

commit 7df03ac69f27f80887cc588ab7bec7e38a42d3db
Author: John Doe <johndoe@yahoo.com>
Date: Thu Apr 6 19:43:18 2017 +0200

VAL_A "Something"
VAL_B "Goodbye"
OPTIONALVAL_1 "Hello World \n"

commit 9d9c69f2798778yyuyuu6786767tc7e38a42d3db
Author: John Doe <johndoe@yahoo.com>
Date: Thu Apr 6 19:43:18 2017 +0200

VAL_A "Hello World"
VAL_B "Goodbye World"
OPTIONALVAL_2 "Hello again World \n"

commit 666669f2798778yyuyuu6786767tc7e38a42d3db
Author: John Doe <johndoe@yahoo.com>
Date: Thu Apr 6 19:43:18 2017 +0200

VAL_A "Hello World"
VAL_B "Goodbye World"

其中每个提交都将被解析为一个对象,该对象具有成员变量git_commit_hashVAL_AVAL_BOPTIONALVAL_1OPTIONALVAL_2。可选值可以为空,但 VAL_AVAL_B 不能。

我的方法:

  1. 将 git 日志输出转储到一个临时文件中。
  2. 逐行读取文件,如果它以单词“commit”开头,则将空格后的字符保存到新对象的 git_commit_hash 中。
  3. 跳过接下来的三行。
  4. 保存两个必需的 VAL_AVAL_B 值。
  5. 由于值可能溢出到下一行,继续往下看,检查行首是否设置了 OPTIONALVAL_1 和/或 OPTIONALVAL_2,以及如果是,保存它。
  6. 一旦达到“提交”一词,就停止解析当前对象。创建一个新对象,然后重复 1-5。

这是一种蛮力方法,虽然有些效果,但没有灵 active 。我想知道是否有人可以向我指出更优雅的解决方案或 C++ 或 boost 库。谢谢。

最佳答案

你可以使用你自己的 git 日志格式,使用像这样的漂亮格式:

git log --pretty=format:"<your formatting>"

如果您以易于解析的方式放置每个元素(例如,用您需要的数据定义一个 xml,然后使用 boost::property_tree 提取数据),您可以轻松读取文件并无需解析整个日志即可准确知道哪些信息在哪里。

此线程中的更多信息:Git log output to XML, JSON, or YAML?

关于C++如何将结构化git日志的输出解析为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43262614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com