123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #!/usr/bin/env bash
- original_ruby_strings=$rvm_ruby_strings
- original_ruby_string=$rvm_ruby_string
- source "$rvm_scripts_path/base"
- rvm_monitor_sleep="${rvm_monitor_sleep:-2}"
- array_length()
- {
- eval "echo \${#$1[*]}"
- }
- array_push()
- {
- array=$1
- shift
- eval "$array+=( \"\$@\" )"
- }
- timestamp()
- {
- __rvm_statf "%Y" "%m" $1
- }
- push_if_timestamp_changed()
- {
- \typeset file file_timestamp time
- file=$1
- file_timestamp=$(timestamp "$file")
- eval "time=\$${framework}_timestamp"
- if [[ "$file_timestamp" -gt $time ]]
- then
- array_push "changed_${framework}_files" $file
- fi
- }
- update_timestamp()
- {
- if [[ -d "${1}/" ]]
- then
- \command \touch "$rvm_path/${$}_${1}_timestamp"
- eval "${1}_timestamp=\$(timestamp \"$rvm_path/${$}_${1}_timestamp\")"
- fi
- }
- rvm_warn "rvm monitor is deprecated, take a look on autotest, guard, watchr or ruby-inotify"
- update_timestamp "test"
- update_timestamp "spec"
- while : ; do
- changed_test_files=() ; changed_spec_files=() ; changed_code_files=()
- for file in lib/**/*.rb lib/*.rb app/**/*.rb app/*.rb ; do
- if [[ -f "$file" ]] ; then push_if_timestamp_changed $file "code" ; fi
- done
- for framework in test spec ; do
- if [[ -d "$framework/" ]] ; then
- for file in ${framework}/**/*_${framework}.rb ${framework}/*_${framework}.rb ; do
- if [[ -f "$file" ]] ; then
- push_if_timestamp_changed $file $framework
- fi
- done
- if [[ "$(array_length "changed_${framework}_files")" -gt 0 ]] ; then
- rvm_ruby_strings=$original_ruby_strings
- rvm_ruby_string=$original_ruby_string
- if [[ "spec" == "$framework" ]] ; then
- rvm_action="spec"
- rvm_ruby_args="spec/spec_helper.rb ${changed_spec_files[*]}"
- "$rvm_scripts_path/set" $rvm_action $rvm_ruby_args
- elif [[ "test" == "$framework" ]] ; then
- rvm_action="ruby"
- rvm_ruby_args=" -r$(echo "${changed_test_files[*]}" | __rvm_sed 's/ / -r/g') test/test_helper.rb"
- "$rvm_scripts_path/set" $rvm_action $rvm_ruby_args
- fi
- update=1
- fi
- if [[ "$(array_length "changed_code_files")" -gt 0 ]] ; then
- rvm_ruby_strings=$original_ruby_strings
- rvm_ruby_string=$original_ruby_string
- if [[ "spec" == "$framework" ]] ; then
- rvm_action="spec"
- rvm_ruby_args="spec/"
- "$rvm_scripts_path/set" $rvm_action $rvm_ruby_args
- elif [[ "test" == "$framework" ]] ; then
- rvm_action="rake"
- rvm_ruby_args="test"
- "$rvm_scripts_path/set" "$rvm_action" $rvm_ruby_args
- fi
- update=1
- fi
- fi
- if [[ "$update" -eq 1 ]] ; then
- update_timestamp $framework
- fi
- done
- unset update changed_test_files changed_spec_files
- sleep $rvm_monitor_sleep
- done
|