ResultCode publish() { transactionID = beginTransaction(); foreach file f in /development/ready that is not in /server/live { error = move f from /development/ready to /server/live; if (error) { rollbackTransaction(transactionID); return ROLLED_BACK; } } foreach file f in /server/live that is not in /development/ready { error = delete f; if (error) { rollbackTransaction(transactionID); return ROLLED_BACK; } } foreach file f in /development/ready that differs from /server/live { error = move f from /development/ready to /server/live; if (error) { rollbackTransaction(transactionID); return ROLLED_BACK; } } commitTransaction(transactionID); return COMMITTED; }