aboutsummaryrefslogtreecommitdiff
path: root/scripts/utils.sh
blob: 4c652c1fcbd844b89c58e64ff5f6230683aeb3a2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/env sh

set -e -o pipefail

dir_has_file() {
  dir="$1"; shift;
  for arg in ${@}; do
    if [ -e "$dir/$arg" ]; then
      return 0;
    fi
  done
  return 1;
}

find_closest() {
  init_dir="${1:-"$PWD"}"; shift;
  dir="$init_dir";
  while [ "$dir" != "" ] && [ "$dir" != "." ]; do
    if [ "$dir" == "/" ]; then
      dir="$init_dir"
      break;
    fi
    if dir_has_file "$dir" "$@"; then
      break;
    fi
    dir=$(dirname "$dir");
  done
  if [ -f "$dir" ]; then
    dirname "$dir";
  else
    echo "$dir";
  fi
}

cmd="$1"; shift;
case "$cmd" in
  find_closest) find_closest "$@" ;;
esac