def make_incremental_build(name, basis="live"):
"""
Archive a build, hard-linking unchanged files from the "basis" build (default live)
This can significantly reduce the disk space used by multiple builds.
On mac, requires ``brew install coreutils``
"""
cp_bin = find_executable('gcp')
if find_executable('gcp'):
cp_bin = "gcp"
else:
cp_bin = "cp"
live_name = dealias_build("_live")
stage_name = dealias_build("_stage")
if name in (live_name, stage_name):
abort("Cannot turn the live or stage build into an incremental build")
basis = dealias_build(basis)
stop(name)
with lcd("%s/deploy/builds" % ROOT_DIR):
local("mv %(name)s %(name)s~" % {'name': name})
with settings(hide("stderr"), warn_only=True):
cp_ret = local("%(cp_bin)s -al %(basis)s %(name)s" % {
'basis': basis,
'name': name,
'cp_bin': cp_bin,
})
if not cp_ret.succeeded:
local("mv %(name)s~ %(name)s" % {'name': name})
abort("Local cp bin does not support -l flag (on mac: brew install coreutils)")
local("rsync -acH --delete %(name)s~/ %(name)s" % {'name': name})
local("rm -rf %(name)s~" % {'name': name})
评论列表
文章目录