#!/bin/sh epoch="$(date +%s)" [ -f $1 ] && echo "Please provide a name for the migration" && exit 1 migration_name=$1 migration=${epoch}_${migration_name} $(cat < db/migrations/$migration.h #pragma once namespace db { namespace migrations { namespace db_builder = db::migrations::builder; class m$migration : public Migration { public: m$migration() : Migration() { db_builder::Table $migration_name = db_builder::Table:: m_statement = $migration_name.str(); } }; } } EOF ) include="#include \\\"migrations/$migration.h\\\"" map_entry=" migrations.emplace($epoch, new db::migrations::m$migration());" gawk -i inplace "FNR==NR{ if (/migrations.emplace/) p=NR; next} 1; FNR==p{ print \"$map_entry\" }" db/Schema.cpp db/Schema.cpp gawk -i inplace "FNR==NR{ if (/#include \"migrations/) p=NR; next} 1; FNR==p{ print \"$include\" }" db/Schema.cpp db/Schema.cpp