Leonid
Leonid

Reputation: 15

Creating Git post-receive hook to post Tag name

I have a question about ad-hoc Git configuration.

I need to pass tag name on tag post or any commit to e.g.

#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    curl -X POST "https://en4c6i2k7daz5.x.pipedream.net/" \
        -H 'Content-Type: application/json' \
        -d '{"version": "$refname"}'            
done

In the result I'm getting (see https://requestbin.com/r/en4c6i2k7daz5/1cxY1mJeMlejAnF0OJ8B8iCd6sl)

{"version": "$refname"}

So for some reason it is not sending tag name (value of the $refname) - what is wrong in the script?

Upvotes: 0

Views: 154

Answers (1)

jthill
jthill

Reputation: 60255

You're single-quoting your data, single-quotes exist to shut off the shell's string-construction syntax, expansions and wordsplitting and the rest. Since refnames can't have white space or glob syntax in them I think you can get by without quoting their expansionss, but for safety I usually do, to control the expansions I'll usually switch from single quotes to double quotes as needed to get that:

-d '{"version": "'"$refname"'"}'

or you could just do it all double-quotes and escape json's redundant ones to shoehorn them in that way:

-d "{\"version\": \"$refname\"}"

edit: hmmm, from git help check-ref-format I'm getting

These rules make it easy for shell script based tools to parse reference names, pathname expansion by the shell when a reference name is used unquoted (by mistake), and also avoid ambiguities in certain reference name expressions (see gitrevisions(7)):

i.e. you' guaranteed to not have to quote refname expansions at all.

Upvotes: 1

Related Questions