diff --git a/dev-libs/libgit2/Manifest b/dev-libs/libgit2/Manifest index 6205b0d..d95d093 100644 --- a/dev-libs/libgit2/Manifest +++ b/dev-libs/libgit2/Manifest @@ -1,4 +1,5 @@ AUX libgit2-0.24.0_rc1-fix-version.patch 529 SHA256 b1726938ed7ac9dc744bad1c3894816defcf652e080f354f6e90253c1387d754 SHA512 a8db6a63781ce4fdc40f9f9eca193e8b4e8a6cc6a9fb547632f1d53483005cbae06fe35cf96768c0c577a4de1226e06c8a003cee4e1c6e1f3a328dbd7f44798b WHIRLPOOL ce13a604c0a555e05b10269c35b24eba3d0286254fc4c132d244b61479dc1d98f293babe7b3fbf24ee5cc0f6bef33db0ebc238a8e6078bd40e641b2077f8189c DIST libgit2-0.24.0_rc1.tar.gz 4165326 SHA256 e956fb569ddaf2d1d29307b4dc361121160ea7ab052eb3dc1c07b95175cb842d SHA512 c73bee9aaba3a36fca35fa0e3183e5636fa9be2ba98b1b93562f390e5f74b0be817ba73781a13e7ae5f880411465877864ca244ad6ac52ccd89d905d5b103e6c WHIRLPOOL 9d442e2894548462e3bda477bbacf4ac2190e8b9cb8c2b34e443568249b6ab63dd316d267e12fad84acfbfbc0af8aa3674e9c5dd717fa8deac4d07e586f82377 +EBUILD libgit2-0.24.0_rc1-r1.ebuild 1778 SHA256 d0c574e18c51c24df0154cc3ea2e8851cbe1adda95f69ee23aa1270ad2560827 SHA512 8d4b2b502d708e0300be61708dc120f2cff11d2432f89896f2600a26db98b5e22b9c3641663ad770793fcb40192f59587ccea9910ef5ecd5d768dc4e92436f86 WHIRLPOOL 0f4231c38e9ef7c9ccc1ae924cc350b8252c3cc68522ee1332d5b951d72f832976058890846e539130a6254d8e5e20db177fd86c2132ad29a7f44d586c86b2c2 EBUILD libgit2-0.24.0_rc1.ebuild 1814 SHA256 82e78bfa430101fc9bbcd70c1bfe2e25d01c9a76660bfbb99e136ed0429be437 SHA512 be35530b70c13cfc357824c16a5c5d040ab9bfc1ad81dc512eca4fd97dda80c66e252ebc3eb7ff3c97c816901dd79f45b093d1b6a7d8e48dfa9f198433fd2672 WHIRLPOOL b8b75699a970323e18f236fbafaedabd0cac8d6b57ab5c2a722fad65faf3962e53b87dd54921f935cb8c97ec8bb640abeef34f71e5659cb72e5acfff5a0958bc MISC metadata.xml 802 SHA256 446c2a35f3209339e906828d8250d3d784cb3796c4da5740cbd6ebf301d92f4a SHA512 9d2dba83bfd1791e2cf2afd2b939ed66456e4db0723f2789ea3b1227e14b0a7d685d9a7adcaae050b6574e99a9301ff1c484b024dbf8e3dcd44e56a14d84ee99 WHIRLPOOL 268fb7c0d932e4c7b8ce4554c2d04341c77eba94ba25066746b7289111e76446f3c411efc454b3a639aaa98b67c030392c6fab77185f8bc9dac4dce9b4a47e36 diff --git a/dev-libs/libgit2/libgit2-0.24.0_rc1-r1.ebuild b/dev-libs/libgit2/libgit2-0.24.0_rc1-r1.ebuild new file mode 100644 index 0000000..3277bab --- /dev/null +++ b/dev-libs/libgit2/libgit2-0.24.0_rc1-r1.ebuild @@ -0,0 +1,80 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit cmake-utils multilib + +MY_PV=${PV/_/-} + +if [[ ${PV} == "9999" ]] ; then + EGIT_REPO_URI="https://github.com/${PN}/${PN}.git" + inherit git-r3 +else + SRC_URI="https://github.com/${PN}/${PN}/archive/v${MY_PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="~amd64 ~x86" +fi + +DESCRIPTION="A linkable library for Git" +HOMEPAGE="https://libgit2.github.com/" + +LICENSE="GPL-2-with-linking-exception" +SLOT="0/23" +IUSE="examples gssapi libressl ssh test threads trace" + +S="${WORKDIR}/${PN}-${MY_PV}" + +RDEPEND=" + !libressl? ( dev-libs/openssl:0 ) + libressl? ( dev-libs/libressl ) + sys-libs/zlib + net-libs/http-parser:= + gssapi? ( virtual/krb5 ) + ssh? ( net-libs/libssh2 ) +" +DEPEND="${RDEPEND} + virtual/pkgconfig +" + +DOCS=( AUTHORS CONTRIBUTING.md CONVENTIONS.md README.md ) + +src_prepare() { + # skip online tests + sed -i '/libgit2_clar/s/-ionline/-xonline/' CMakeLists.txt || die + + cmake-utils_src_prepare +} + +src_configure() { + local mycmakeargs=( + -DLIB_INSTALL_DIR="${EPREFIX}/usr/$(get_libdir)" + $(cmake-utils_use_build test CLAR) + $(cmake-utils_use_enable trace TRACE) + $(cmake-utils_use_use gssapi GSSAPI) + $(cmake-utils_use_use ssh SSH) + $(cmake-utils_use threads THREADSAFE) + ) + cmake-utils_src_configure +} + +src_test() { + if [[ ${EUID} -eq 0 ]] ; then + # repo::iterator::fs_preserves_error fails if run as root + # since root can still access dirs with 0000 perms + ewarn "Skipping tests: non-root privileges are required for all tests to pass" + else + local TEST_VERBOSE=1 + cmake-utils_src_test + fi +} + +src_install() { + cmake-utils_src_install + + if use examples ; then + egit_clean examples + dodoc -r examples + docompress -x /usr/share/doc/${PF}/examples + fi +} diff --git a/www-apps/gitlab-ce/Manifest b/www-apps/gitlab-ce/Manifest index a2d7573..a480421 100644 --- a/www-apps/gitlab-ce/Manifest +++ b/www-apps/gitlab-ce/Manifest @@ -33,6 +33,7 @@ EBUILD gitlab-ce-8.3.4.ebuild 11156 SHA256 6a9d5dffb4228ef4ad3eda9429d9429ab7cc9 EBUILD gitlab-ce-8.4.0.ebuild 11157 SHA256 d79254791765a17fa4885ab35e0f6f2c0423ecf9227cfa71f9f6c8bf6bd6a8f7 SHA512 63d6bc7a29c0e2fe5714ed69c3966a878e60d348aec42bf0db2032873a295c81f0d27a5b5e73001b1dfc238cd635ee873d6ec6e513ace99c88a4494412337aba WHIRLPOOL 4e916bde073bd223a4c0feec794dd6f717433b4c041ace203f263731bb201b14794529d752669e9b5faca07856d1bf62466956cb0532473bb3ae4d171b8655b6 EBUILD gitlab-ce-8.4.3.ebuild 11158 SHA256 134fedd2c467d11174a22055e58c822b953f9bdb9902aa0bdf0822c66344d364 SHA512 818c37d814074cb063c91adcfde0f1164fa89cba5a855c442470b5f0e47256f2078326f998b5502c996bf4a2c874cdc068685ad037d1dcf962c2c0bbe683e689 WHIRLPOOL a251afe289ab12dbef9114ebfcb00cf84080766e4d0c1737fa1ece1965210d4544a319af27823b4794c0bddc0cfbf6d3cb896bbe48fa02c623e0b4847b6302d2 EBUILD gitlab-ce-8.4.4.ebuild 11158 SHA256 134fedd2c467d11174a22055e58c822b953f9bdb9902aa0bdf0822c66344d364 SHA512 818c37d814074cb063c91adcfde0f1164fa89cba5a855c442470b5f0e47256f2078326f998b5502c996bf4a2c874cdc068685ad037d1dcf962c2c0bbe683e689 WHIRLPOOL a251afe289ab12dbef9114ebfcb00cf84080766e4d0c1737fa1ece1965210d4544a319af27823b4794c0bddc0cfbf6d3cb896bbe48fa02c623e0b4847b6302d2 +EBUILD gitlab-ce-8.5.0-r1.ebuild 11171 SHA256 3269cd681a497ae0c4c88d0cf08ccd8dc44fa11de4f437becd1cc4e83fa56a14 SHA512 a5462ae56612af9733bdc19c5d40672f6bf89c0ff9ac83a8f68b02c1cedef0ea37039de129c0497c8b0f9dd0dde942462757e6dcb13f799e929fe1158107c7ac WHIRLPOOL 080cebf2d04f50292d7260d58d40ad02d27d4bcc03b98f226f6d97a72d7f0de0a207900e78f25f07b4bd5bd04757c31bd57e1d236f952dbfc92a6c789a503645 EBUILD gitlab-ce-8.5.0.ebuild 11149 SHA256 0ce3cb6cc04cc7bb9a84f4d8b97918d85d6a4716cfd2e6c9f08661708a7c7f6f SHA512 c76172167fb452c920a88b0d946b8ccb88f3899c3f578cfff7b1cc920625a9722ad6785274f6407ee7bf23856eff20c73e2de1a1d61d890bc515cfeb0d4dd64b WHIRLPOOL 97e65d983d0d89715fff6366348a46dffc249d775c9b21fe025be0372a2c362e811e401f0f47d5a2eceffdf28e9cdf2739c05cba6465b29a4efa60d2b52e1f65 EBUILD gitlab-ce-9999.ebuild 11174 SHA256 5d4812ff14eef908c89087869e08757f786a96d4a97f2c019b7b6079e13e3ae6 SHA512 296856dcf0b79a37204a42379a344ef62415a3e7867382e5e1e65cdd7aa0befa3ff15a9b5e2663ce1461ec696746b1f8a833e33278c7dbc659778331a4e9963e WHIRLPOOL 2698b9502aa45fcf7a2a0e2b32a088ad39d03af73559b66c143e37afc7f6d5447d5458cdd198ec51596ca1134d0b7334513f19b82407ff336365fe875c10b828 MISC metadata.xml 545 SHA256 1b7fc44d811e1ab7638fe4a40253f49d5f1071872d3020c22c4f67662750cb2f SHA512 86f47d297892bccfefa087d93936296f5647993a9ec8e3f47907a6859cbf385e5bc6f00502d7836c9e8d9efef2b6725bf145b0150924c2082b2bd164469ef6ea WHIRLPOOL 6bfb8a55684d68c8bfa6e025a0be965f7b815394ee0896dd2a13cfb524e3cf3f3149acc9072897e30a1842060389576aac07ea8beb4a8b0bfc3e8eab3723f2a1 diff --git a/www-apps/gitlab-ce/gitlab-ce-8.5.0-r1.ebuild b/www-apps/gitlab-ce/gitlab-ce-8.5.0-r1.ebuild new file mode 100644 index 0000000..0e1435b --- /dev/null +++ b/www-apps/gitlab-ce/gitlab-ce-8.5.0-r1.ebuild @@ -0,0 +1,370 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI="5" + +# Maintainer notes: +# - This ebuild uses Bundler to download and install all gems in deployment mode +# (i.e. into isolated directory inside application). That's not Gentoo way how +# it should be done, but GitLab has too many dependencies that it will be too +# difficult to maintain them via ebuilds. +# + +USE_RUBY="ruby21" + +inherit eutils ruby-ng user systemd + +MY_PKGNAME="gitlabhq" + +DESCRIPTION="GitLab is a free project and repository management application" +HOMEPAGE="https://about.gitlab.com/" +SRC_URI="https://github.com/${MY_PKGNAME}/${MY_PKGNAME}/archive/v${PV}.tar.gz -> ${P}.tar.gz" +RUBY_S="${MY_PKGNAME}-${PV}" + +RESTRICT="mirror" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="kerberos mysql +postgres +unicorn systemd rugged_use_system_libraries" + +## Gems dependencies: +# charlock_holmes dev-libs/icu +# grape, capybara dev-libs/libxml2, dev-libs/libxslt +# rugged dev-util/cmake, virtual/pkgconfig +# json dev-util/ragel +# pygments.rb python 2.7+ +# execjs net-libs/nodejs, or any other JS runtime +# pg dev-db/postgresql +# mysql virtual/mysql +# +GEMS_DEPEND=" + dev-libs/icu + dev-libs/libxml2 + dev-libs/libxslt + dev-util/ragel + net-libs/nodejs + postgres? ( >=dev-db/postgresql-9.1:* ) + mysql? ( virtual/mysql ) + kerberos? ( virtual/krb5 )" +CDEPEND=" + dev-util/cmake + virtual/pkgconfig" +DEPEND="${GEMS_DEPEND} + >=dev-vcs/gitlab-shell-2.6.10 + dev-vcs/git + >=dev-vcs/gitlab-workhorse-0.6.4 + kerberos? ( !app-crypt/heimdal ) + rugged_use_system_libraries? ( net-libs/http-parser >=dev-libs/libgit2-0.2.24_rc1:0/23 )" +RDEPEND="${DEPEND} + >=dev-db/redis-2.8 + virtual/mta + systemd? ( sys-apps/systemd:0= )" +ruby_add_bdepend " + virtual/rubygems + >=dev-ruby/bundler-1.0" + +# +# fix-sendmail-config: +# Fix default settings to work with ssmtp that doesn't know '-t' argument. +# +RUBY_PATCHES=( + "${PN}-fix-sendmail-config.patch" +) + +MY_NAME="gitlab" +MY_USER="git" # should be same as in gitlab-shell + +DEST_DIR="/opt/${MY_NAME}" +CONF_DIR="/etc/${MY_NAME}" +LOGS_DIR="/var/log/${MY_NAME}" +TEMP_DIR="/var/tmp/${MY_NAME}" + +# When updating ebuild to newer version, check list of the queues in +# https://gitlab.com/gitlab-org/gitlab-ce/blob/v${PV}/bin/background_jobs +SIDEKIQ_QUEUES="post_receive,mailers,archive_repo,system_hook,project_web_hook,gitlab_shell,incoming_email,runner,common,default" + +all_ruby_prepare() { + # fix paths + local satellites_path="${TEMP_DIR}/repo_satellites" + local repos_path=/var/lib/git/repositories + local shell_path=/usr/share/gitlab-shell + sed -i -E \ + -e "/satellites:$/,/\w:$/ s|(\s*path:\s).*|\1${satellites_path}/|" \ + -e "/gitlab_shell:$/,/\w:$/ s|(\s*path:\s).*|\1${shell_path}/|" \ + -e "/gitlab_shell:$/,/\w:$/ s|(\s*repos_path:\s).*|\1${repos_path}/|" \ + -e "/gitlab_shell:$/,/\w:$/ s|(\s*hooks_path:\s).*|\1${shell_path}/hooks/|" \ + config/gitlab.yml.example || die "failed to filter gitlab.yml.example" + + local run_path=/run/${MY_NAME} + sed -i -E \ + -e "s|/home/git/gitlab/tmp/(pids\|sockets)|${run_path}|" \ + -e "s|/home/git/gitlab/log|${LOGS_DIR}|" \ + -e "s|/home/git/gitlab|${DEST_DIR}|" \ + config/unicorn.rb.example || die "failed to filter unicorn.rb.example" + + sed -i \ + -e "s|/home/git/gitlab/tmp/sockets|${run_path}|" \ + lib/support/nginx/gitlab || die "failed to filter nginx/gitlab" + + # modify default database settings for PostgreSQL + sed -i -E \ + -e 's|(username:).*|\1 gitlab|' \ + -e 's|(password:).*|\1 gitlab|' \ + -e 's|(socket:).*|\1 /run/postgresql/.s.PGSQL.5432|' \ + config/database.yml.postgresql \ + || die "failed to filter database.yml.postgresql" + + # rename config files + mv config/gitlab.yml.example config/gitlab.yml + mv config/unicorn.rb.example config/unicorn.rb + + local dbconf=config/database.yml + if use postgres && ! use mysql; then + mv ${dbconf}.postgresql ${dbconf} + rm ${dbconf}.mysql + elif use mysql && ! use postgres; then + mv ${dbconf}.mysql ${dbconf} + rm ${dbconf}.postgresql + fi + + # remove useless files + rm -r lib/support/{deploy,init.d} + use unicorn || rm config/unicorn.rb +} + +all_ruby_install() { + local dest=${DEST_DIR} + local conf=${CONF_DIR} + local logs=${LOGS_DIR} + local temp=${TEMP_DIR} + + # prepare directories + diropts -m750 + dodir ${logs} ${temp} + + diropts -m755 + dodir ${conf} ${dest}/public/uploads + + dosym ${temp} ${dest}/tmp + dosym ${logs} ${dest}/log + + # install configs + insinto ${conf} + doins -r config/* + dosym ${conf} ${dest}/config + + echo 'export RAILS_ENV=production' > "${D}/${dest}/.profile" + + # remove needless dirs + rm -Rf config tmp log + + # install the rest files + # using cp 'cause doins is slow + cp -Rl * "${D}/${dest}"/ + + # install logrotate config + dodir /etc/logrotate.d + cat > "${D}/etc/logrotate.d/${MY_NAME}" <<-EOF + ${logs}/*.log { + missingok + delaycompress + compress + copytruncate + } + EOF + + ## Install gems via bundler ## + + cd "${D}/${dest}" + + local without="development test aws" + local flag; for flag in mysql postgres unicorn kerberos; do + without+="$(use $flag || echo ' '$flag)" + done + local bundle_args="--deployment ${without:+--without ${without}}" + + use "rugged_use_system_libraries" && export RUGGED_USE_SYSTEM_LIBRARIES="YES" + + einfo "Running bundle install ${bundle_args} ..." + ${RUBY} /usr/bin/bundle install ${bundle_args} || die "bundler failed" + + # clean gems cache + rm -Rf vendor/bundle/ruby/*/cache + rm -Rf vendor/bundle/ruby/*/bundler/gems/charlock_holmes-dde194609b35/.git + + # fix permissions + fowners -R ${MY_USER}:${MY_USER} ${dest} ${temp} ${logs} + + ## RC script ## + + if use systemd ; then + ewarn "Beware: systemd support has not been tested, use at your own risk!" + systemd_dounit "${FILESDIR}/gitlab-sidekiq.service" + systemd_dounit "${FILESDIR}/gitlab-unicorn.service" + systemd_dounit "${FILESDIR}/gitlab-workhorse.service" + systemd_dounit "${FILESDIR}/gitlab-mailroom.service" + systemd_dotmpfilesd "${FILESDIR}/gitlab.conf" + else + local rcscript=gitlab-sidekiq-8.2.init + use unicorn && rcscript=gitlab-unicorn-8.2.init + + cp "${FILESDIR}/${rcscript}" "${T}" || die + sed -i \ + -e "s|@USER@|${MY_USER}|" \ + -e "s|@GITLAB_BASE@|${dest}|" \ + -e "s|@LOGS_DIR@|${logs}|" \ + -e "s|@QUEUES@|${SIDEKIQ_QUEUES}|" \ + "${T}/${rcscript}" \ + || die "failed to filter ${rcscript}" + + newinitd "${T}/${rcscript}" "${MY_NAME}" + fi +} + +pkg_postinst() { + elog "If this is an update from a previous version, stop your GitLab" + elog "instance and issue the following command to perform all required" + elog "migrations:" + elog " emerge --config \"=${CATEGORY}/${PF}\"" + elog "PLEASE NOTE: It's HIGHLY recommended to backup your database" + elog "before running the config phase!" + elog + elog "If this was a fresh install, follow these steps:" + elog + elog "1. Configure your GitLab's settings in ${CONF_DIR}/gitlab.yml." + elog + elog "2. Configure your database settings in ${CONF_DIR}/database.yml" + elog " for \"production\" environment." + elog + elog "3. Then you should create a database for your GitLab instance, if you" + elog "haven't done so already." + elog + if use postgres; then + elog "If you have local PostgreSQL running, just copy&run:" + elog " su postgres" + elog " psql -c \"CREATE ROLE gitlab PASSWORD 'gitlab' \\" + elog " NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;\"" + elog " createdb -E UTF-8 -O gitlab gitlabhq_production" + elog " Note: You should change your password to something more random..." + elog + fi + elog "4. Finally execute the following command to initlize environment:" + elog " emerge --config \"=${CATEGORY}/${PF}\"" + elog " Note: Do not forget to start Redis server first!" + elog + elog "If you're running GitLab behind an SSL proxy such as nginx or Apache and" + elog "you can't login after the upgrade, be sure to read the section about the" + elog "verification of the CSRF token in GitLab's trouble-shooting guide at" + elog "http://goo.gl/5XGRGv." +} + +pkg_config() { + local shell_conf='/etc/gitlab-shell.yml' + + einfo "Checking configuration files" + + if [ ! -r "${CONF_DIR}/database.yml" ]; then + eerror "Copy ${CONF_DIR}/database.yml.* to" + eerror "${CONF_DIR}/database.yml and edit this file in order to configure your" + eerror "database settings for \"production\" environment."; die + fi + + # check gitlab-shell configuration + if [ -r ${shell_conf} ]; then + local shell_repos_path="$(ryaml ${shell_conf} repos_path)" + local gitlab_repos_path="$(ryaml ${CONF_DIR}/gitlab.yml \ + production gitlab_shell repos_path)" + + if [ ! "${shell_repos_path}" -ef "${gitlab_repos_path}" ]; then + eerror "repos_path in ${CONF_DIR}/gitlab.yml and ${shell_conf}" + eerror "must points to the same location! Fix the repos_path location and" + eerror "run this again."; die + fi + else + ewarn "GitLab Shell checks skipped, could not find config file at" + ewarn "${shell_conf}. Make sure that you have gitlab-shell properly" + ewarn "installed and that repos_path is the same as in GitLab." + fi + + local email_from="$(ryaml ${CONF_DIR}/gitlab.yml production gitlab email_from)" + local git_home="$(egethome ${MY_USER})" + + # configure Git global settings + if [ ! -e "${git_home}/.gitconfig" ]; then + einfo "Setting git user" + su -l ${MY_USER} -c " + git config --global user.email '${email_from}'; + git config --global user.name 'GitLab'" \ + || die "failed to setup git name and email" + fi + + if [ ! -d "${DEST_DIR}/.git" ]; then + # create dummy git repo as workaround for + # https://github.com/bundler/bundler/issues/2039 + einfo "Initializing dummy git repository to avoid false errors from bundler" + su -l ${MY_USER} -c " + cd ${DEST_DIR} + git init + git add README.md + git commit -m 'Dummy repository'" >/dev/null + fi + + ## Initialize app ## + + local RAILS_ENV="production" + local RUBY=${RUBY:-/usr/bin/ruby} + local BUNDLE="${RUBY} /usr/bin/bundle" + + local dbname="$(ryaml ${CONF_DIR}/database.yml production database)" + + if [ -f "${DEST_DIR}/.secret" ]; then + local update=true + + einfo "Migrating database ..." + exec_rake db:migrate + + # https://github.com/gitlabhq/gitlabhq/issues/5311#issuecomment-31656496 + einfo "Migrating iids ..." + exec_rake migrate_iids + + einfo "Cleaning old precompiled assets ..." + exec_rake assets:clean + + einfo "Cleaning cache ..." + exec_rake cache:clear + else + local update=false + + einfo "Initializing database ..." + exec_rake gitlab:setup + fi + + einfo "Precompiling assests ..." + exec_rake assets:precompile + + if [ "${update}" = 'true' ]; then + ewarn + ewarn "This configuration script runs only common migration tasks." + ewarn "Please read guides on" + ewarn " https://github.com/gitlabhq/gitlabhq/blob/master/doc/update/" + ewarn "for any additional migration tasks specific to your previous GitLab" + ewarn "version." + fi +} + +ryaml() { + ruby -ryaml -e 'puts ARGV[1..-1].inject(YAML.load(File.read(ARGV[0]))) {|acc, key| acc[key] }' "$@" +} + +exec_rake() { + local command="${BUNDLE} exec rake $@ RAILS_ENV=${RAILS_ENV}" + + echo " ${command}" + su -l ${MY_USER} -c " + export LANG=en_US.UTF-8; export LC_ALL=en_US.UTF-8 + cd ${DEST_DIR} + ${command}" \ + || die "failed to run rake $@" +}