#!/bin/bash readonly caskroom_online='https://github.com/caskroom' readonly caskroom_repos_dir="$(mktemp -d)" readonly main_repo_dir="$(mktemp -d)" # From where files will be copied readonly caskroom_repos=(homebrew-versions homebrew-fonts homebrew-eid homebrew-drivers) # homebrew-cask is absent since it's the repo all the others are compared against function message { echo "${1}" } function get_main_repo { curl --silent --location "${caskroom_online}/homebrew-cask/archive/master.zip" | ditto -xk - "${main_repo_dir}" mv "${main_repo_dir}/homebrew-cask-master/"{,.[^.]}* "${main_repo_dir}" rmdir "${main_repo_dir}/homebrew-cask-master" } function get_repo { local repo_name repo_dir repo_name="${1}" repo_dir="${caskroom_repos_dir}/${repo_name}" cd "${caskroom_repos_dir}" || exit 1 message "Cloning ${repo_name}…" git clone "${caskroom_online}/${repo_name}.git" --quiet cd "${repo_dir}" || exit 1 } function copy_templates_and_ci { local repo_name repo_name="${1}" rsync --archive --delete "${main_repo_dir}"/{.editorconfig,.gitattributes,.github,.gitignore,.travis.yml,ci,CODE_OF_CONDUCT.md} '.' /usr/bin/sed -i '' -E "s:homebrew-cask/(pulls|issues):${repo_name}/\1:" '.github/PULL_REQUEST_TEMPLATE.md' # PULL_REQUEST_TEMPLATE has repo-specific links # increase script.sh install cap for fonts repo if [[ "${repo_name}" == 'homebrew-fonts' ]]; then /usr/bin/sed -i '' -e 's:-le 3:-le 15:' -e 's:than 3 Casks:than 15 Casks:' 'ci/travis/script.sh' fi } function push_changes { local is_repo_changed is_repo_changed="$(git status --porcelain --ignore-submodules=dirty 2> /dev/null)" if [[ -n "${is_repo_changed}" ]]; then git add --all # Stage everything so 'git diff' does not miss aything (like new paths) for modified_path in $(git diff --name-only --staged); do echo -n "Detected changes to ${modified_path}. " git commit "${modified_path}" --message "$(basename "${modified_path}"): update to match main repo" --quiet done echo 'Updating…' git push origin master --quiet fi } get_main_repo for repo in "${caskroom_repos[@]}"; do get_repo "${repo}" copy_templates_and_ci "${repo}" push_changes done