update_pyscopedb.sh (2088B)
1 #!/bin/sh 2 3 set -e 4 5 PROG_NAME=$0 6 PYCSCOPE_EXE=pycscope 7 PYCSCOPE_ARGS= 8 DB_FILE=pycscope.out 9 # Note that we keep the same name 10 PROJECT_ROOT= 11 FILE_LIST_CMD= 12 13 ShowUsage() { 14 echo "Usage:" 15 echo " $PROG_NAME <options>" 16 echo "" 17 echo " -e [exe=pycscope]: The pycscope executable to run" 18 echo " -f [file=pycscope.out]: The path to the ctags file to update" 19 echo " -p [dir=]: The path to the project root" 20 echo " -L [cmd=]: The file list command to run" 21 echo "" 22 } 23 24 25 while getopts "h?e:f:p:L:" opt; do 26 case $opt in 27 h|\?) 28 ShowUsage 29 exit 0 30 ;; 31 e) 32 PYCSCOPE_EXE=$OPTARG 33 ;; 34 f) 35 DB_FILE=$OPTARG 36 ;; 37 p) 38 PROJECT_ROOT=$OPTARG 39 ;; 40 L) 41 FILE_LIST_CMD=$OPTARG 42 ;; 43 esac 44 done 45 46 shift $((OPTIND - 1)) 47 48 if [ "$1" != "" ]; then 49 echo "Invalid Argument: $1" 50 exit 1 51 fi 52 53 echo "Locking pycscope DB file..." 54 echo $$ > "$DB_FILE.lock" 55 56 # Remove lock and temp file if script is stopped unexpectedly. 57 trap 'rm -f "$DB_FILE.lock" "$DB_FILE.files" "$DB_FILE.temp"' INT QUIT TERM EXIT 58 59 PREVIOUS_DIR=$(pwd) 60 if [ -d "$PROJECT_ROOT" ]; then 61 cd "$PROJECT_ROOT" 62 fi 63 64 if [ -n "${FILE_LIST_CMD}" ]; then 65 if [ "${PROJECT_ROOT}" = "." ]; then 66 eval "$FILE_LIST_CMD" > "${DB_FILE}.files" 67 else 68 # If using a tags cache directory, use absolute paths 69 eval "$FILE_LIST_CMD" | while read -r l; do 70 echo "${PROJECT_ROOT%/}/${l}" 71 done > "${DB_FILE}.files" 72 fi 73 else 74 find . -type f > "${DB_FILE}.files" 75 fi 76 PYCSCOPE_ARGS="${PYCSCOPE_ARGS} -i ${DB_FILE}.files" 77 78 echo "Running pycscope" 79 echo "$PYCSCOPE_EXE -f \"$DB_FILE.temp\" "$PYCSCOPE_ARGS 80 "$PYCSCOPE_EXE" -f "$DB_FILE.temp" $PYCSCOPE_ARGS 81 82 if [ -d "$PROJECT_ROOT" ]; then 83 cd "$PREVIOUS_DIR" 84 fi 85 86 echo "Replacing pycscope DB file" 87 echo "mv -f \"$DB_FILE.temp\" \"$DB_FILE\"" 88 mv -f "$DB_FILE.temp" "$DB_FILE" 89 90 echo "Unlocking pycscope DB file..." 91 rm -f "$DB_FILE.lock" 92 93 echo "Done."