git logをcurlコマンドにパイプする方法

git logをcurlコマンドにパイプする方法

curl私の目標は、コマンドの出力をペイロードとして使用してcurl実行することです。 2つは別々に機能しますが、2つを1つにマージすることはできません。

これは、以前のバージョン以降のGITリポジトリの変更を印刷する最初のコマンドです。

git log --pretty=oneline HEAD...$(git tag -l | tail -n2 | head -n1)

さて、今何とかこの出力をこのカール文に導入したいと思います。

curl -vX POST --data-urlencode 'payload={"text": "< GIT LOG OUTPUT >"}' https://example.com

これら2つのコマンドを1行で送信する方法はありますか?

答え1

次のように試すことができます。

curl -vX POST --data-urlencode \
    "payload={\"text\":\"`git log --pretty=oneline HEAD...$(git tag -l | tail -n2 | head -n1) | tr '\n' ',' | sed 's|,$||'`\"}" \
    https://<your-remote>

答え2

jo正しくエンコードされた JSON を生成するには:

curl -vX POST --data-urlencode \
  payload="$(
    jo text="$(
      git log --pretty=oneline HEAD...$(git tag -l | tail -n2 | head -n1)
    )"
  )"

ここで最も重要なのはコマンドです。

jo text="$( git log ... )"

これにより、キーを含むJSON文書が出力されますtext。このキーの値は出力データになり、git log改行文字は置き換え\nられ、他の文字は正しいJSONエンコーディングの対応する文字に置き換えられます。

joほとんどのUnicesでは、パッケージマネージャを介して簡単に使用できます。

関連情報