Pitfalls in auto-fast-forwarding heads that are not checked out?
- From
Martin Langhoff <martin.langhoff@gmail.com>
- Date
- May 3, 2013, 22:46 UTC
- Message-ID
- <CACPiFCLnjCeCpt8wR71bFweFyA3rFCsnbEiR1yRD1n=X5K84Mw@mail.gmail.com>
I am building a small git wrapper around puppet, and one of the actions it performs is auto-fastforwarding of branches without checking them out.
In simplified code... we ensure that we are on a head called master, and in some cases "ppg commit", will commit to master and...
## early on
# sanity-check we are on master
headname=$(git rev-parse --symbolic-full-name --revs-only HEAD)
if [ "$headname" -ne "refs/heads/headname" ]; then
echo >&2 "ERROR: can only issue --immediate commit from the
master branch!"
exit 1
fi## then git commit -bla blarg baz
## and then...
# ensure we can ff
head_sha1=$(git rev-parse --revs-only master)
mb=$(git merge-base $production_sha1 refs/heads/master)
if [[ "$mb" -ne "$production_sha1" ]]; then
echo >&2 "ERROR: cannot fast-forward master to production"
exit 1
fi
$GIT_EXEC_PATH/git-update-ref -m "ppg immediate commit"
refs/heads/production $head_sha1 $production_sha1 || exit 1Are there major pitfalls in this approach? I cannot think of any, but git has stayed away from updating my local tracking branches; so maybe there's a reason for that...
cheers,
m -- martin.langhoff@gmail.com - ask interesting questions - don't get distracted with shiny stuff - working code first ~ http://docs.moodle.org/en/User:Martin_Langhoff