| #!/usr/bin/env bash | |
| usage='usage: push.bash [<options>] [--] <dest> | |
| Options: | |
| --dir <dir> Specify subdirectory under destination. | |
| Defaults to "v<version>". | |
| --version <ver> CMake <major>.<minor> version number to push. | |
| Defaults to version of source tree. | |
| ' | |
| die() { | |
| echo "$@" 1>&2; exit 1 | |
| } | |
| cmake_source_dir="${BASH_SOURCE%/*}/../.." | |
| cmake_version_component() | |
| { | |
| sed -n " | |
| /^set(CMake_VERSION_${1}/ {s/set(CMake_VERSION_${1} *\([0-9]*\))/\1/;p;} | |
| " "${cmake_source_dir}/Source/CMakeVersion.cmake" | |
| } | |
| version='' | |
| dir='' | |
| while test "$#" != 0; do | |
| case "$1" in | |
| --dir) shift; dir="$1" ;; | |
| --version) shift; version="$1" ;; | |
| --) shift ; break ;; | |
| -*) die "$usage" ;; | |
| *) break ;; | |
| esac | |
| shift | |
| done | |
| test "$#" = 1 || die "$usage" | |
| readonly dest="$1" | |
| if test -z "$version"; then | |
| cmake_version_major="$(cmake_version_component MAJOR)" | |
| cmake_version_minor="$(cmake_version_component MINOR)" | |
| version="${cmake_version_major}.${cmake_version_minor}" | |
| fi | |
| readonly version | |
| if test -z "$dir"; then | |
| dir="v${version}" | |
| fi | |
| readonly dir | |
| if ! test -d "${dest}/${dir}"; then | |
| mkdir "${dest}/${dir}" | |
| fi | |
| for f in cmake-${version}*; do | |
| if ! test -f "${f}"; then | |
| continue | |
| fi | |
| echo "pushing '${f}'" | |
| # Make a copy with a new timestamp and atomically rename into place. | |
| tf="${dest}/${dir}/.tmp.${f}" | |
| df="${dest}/${dir}/${f}" | |
| cp "${f}" "${tf}" | |
| mv "${tf}" "${df}" | |
| # Pause to give each file a distinct time stamp even with 1s resolution | |
| # so that sorting by time also sorts alphabetically. | |
| sleep 1.1 | |
| done |