問題:構造化コミットメッセージを持つgit logの出力をオブジェクトに解析します。C++構造化gitログの出力をオブジェクトに構文解析する方法
これは、ログには、この特定のディレクトリのように見えるものです:各コミット
commit 7df03ac69f27f80887cc588ab7bec7e38a42d3db
Author: John Doe <[email protected]>
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 <[email protected]>
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 <[email protected]>
Date: Thu Apr 6 19:43:18 2017 +0200
VAL_A "Hello World"
VAL_B "Goodbye World"
は、メンバ変数git_commit_hash
、VAL_A
、VAL_B
、OPTIONALVAL_1
、およびOPTIONALVAL_2
を持つオブジェクトに解析することです。オプションの値は空でもかまいませんが、VAL_A
とVAL_B
はできません。
私のアプローチ:
- は一時ファイルにgitのログ出力をダンプします。
- 「コミット」という単語で始まり、空白の後の文字を新しいオブジェクトの
git_commit_hash
に保存すると、行ごとにファイルを読み込みます。 - 次の3行をスキップします。
- 2つの必須の値
VAL_A
とVAL_B
の値を保存します。 - 値が次の行にオーバーフローしている可能性がありますので、そのまま続行してください。行の先頭に
OPTIONALVAL_1
が設定されているか、OPTIONALVAL_2
のいずれかがあるかどうかを確認してください。 - "コミット"という単語に達した時点で、現在のオブジェクトの解析を停止します。新しいオブジェクトを作成し、1-5を繰り返します。
これは多少は機能しますが、柔軟性はありません。誰かが私をより洗練された解決策またはC++またはブーストライブラリに向けることができるかどうか疑問に思っていました。ありがとう。
どのように何の何かを飛ばし、すべての情報を保持していない構造体やクラスの作成について。それから、必要な情報を構造体から取り出すだけで簡単です。 1回のパスでファイルを配列、ベクトル、リストに読み込み、構造体が何であれ、すべてがディスクベースではなくメモリベースです。 – PaulMcKenzie