/ scripts / fossil.sh
fossil.sh
  1  #!/usr/bin/env bash
  2  
  3  current_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  4  source $current_dir/utils.sh
  5  
  6  IFS=' ' read -r -a hide_status <<< $(get_tmux_option "@dracula-fossil-disable-status" "false")
  7  IFS=' ' read -r -a current_symbol <<< $(get_tmux_option "@dracula-fossil-show-current-symbol" "✓")
  8  IFS=' ' read -r -a diff_symbol <<< $(get_tmux_option "@dracula-fossil-show-diff-symbol" "!")
  9  IFS=' ' read -r -a no_repo_message <<< $(get_tmux_option "@dracula-fossil-no-repo-message" "")
 10  IFS=' ' read -r -a no_untracked_files <<< $(get_tmux_option "@dracula-fossil-no-untracked-files" "false")
 11  IFS=' ' read -r -a show_remote_status <<< $(get_tmux_option "@dracula-fossil-show-remote-status" "false")
 12  
 13  # Get added, modified, updated and deleted files from git status
 14  getChanges()
 15  {
 16     declare -i added=0;
 17     declare -i modified=0;
 18     declare -i updated=0;
 19     declare -i deleted=0;
 20  
 21  for i in $(cd $path; fossil changes --differ|cut -f1 -d' ')
 22  
 23      do
 24        case $i in 
 25        'EXTRA')
 26          added+=1 
 27        ;;
 28        'EDITED')
 29          modified+=1
 30        ;;
 31        'U')
 32          updated+=1 
 33        ;;
 34        'DELETED')
 35         deleted+=1
 36        ;;
 37  
 38        esac
 39      done
 40  
 41      output=""
 42      [ $added -gt 0 ] && output+="${added}A"
 43      [ $modified -gt 0 ] && output+=" ${modified}M"
 44      [ $updated -gt 0 ] && output+=" ${updated}U"
 45      [ $deleted -gt 0 ] && output+=" ${deleted}D"
 46    
 47      echo $output    
 48  }
 49  
 50  
 51  # getting the #{pane_current_path} from dracula.sh is no longer possible
 52  getPaneDir()
 53  {
 54   nextone="false"
 55   for i in $(tmux list-panes -F "#{pane_active} #{pane_current_path}");
 56   do
 57      if [ "$nextone" == "true" ]; then
 58         echo $i
 59         return
 60      fi 
 61      if [ "$i" == "1" ]; then
 62          nextone="true"
 63      fi
 64    done
 65  }
 66  
 67  
 68  # check if the current or diff symbol is empty to remove ugly padding
 69  checkEmptySymbol()
 70  {
 71      symbol=$1    
 72      if [ "$symbol" == "" ]; then
 73          echo "true"
 74      else
 75          echo "false"
 76      fi
 77  }
 78  
 79  # check to see if the current repo is not up to date with HEAD
 80  checkForChanges()
 81  {
 82      if [ "$(checkForFossilDir)" == "true" ]; then
 83          if [ "$(cd $path; fossil changes --differ)" != "" ]; then
 84              echo "true"
 85          else
 86              echo "false"
 87          fi
 88      else
 89          echo "false"
 90      fi
 91  }     
 92  
 93  # check if a git repo exists in the directory
 94  checkForFossilDir()
 95  {
 96      if [ -f ${path}/.fslckout ]; then
 97          echo "true"
 98      else
 99          echo "false"
100      fi
101  }
102  
103  # return branch name if there is one
104  getBranch()
105  {   
106      if [ $(checkForFossilDir) == "true" ]; then
107          echo $(cd $path; fossil branch current)
108      else
109          echo $no_repo_message
110      fi
111  }
112  
113  getRemoteInfo()
114  {
115      base=$(cd $path; fossil branch current)
116      remote=$(echo "$base" | cut -d" " -f1)
117      out=""
118  
119      if [ -n "$remote" ]; then
120          out="...$remote"
121          ahead=$(echo "$base" | grep -E -o 'ahead[ [:digit:]]+' | cut -d" " -f2)
122          behind=$(echo "$base" | grep -E -o 'behind[ [:digit:]]+' | cut -d" " -f2)
123  
124          [ -n "$ahead" ] && out+=" +$ahead"
125          [ -n "$behind" ] && out+=" -$behind"
126      fi
127  
128      echo "$out"
129  }
130  
131  # return the final message for the status bar
132  getMessage()
133  {
134      if [ $(checkForFossilDir) == "true" ]; then
135          branch="$(getBranch)"
136          output=""
137  
138          if [ $(checkForChanges) == "true" ]; then 
139              
140              changes="$(getChanges)" 
141              
142              if [ "${hide_status}" == "false" ]; then
143                  if [ $(checkEmptySymbol $diff_symbol) == "true" ]; then
144  		     output=$(echo "${changes} $branch")
145                  else
146  		     output=$(echo "$diff_symbol ${changes} $branch")
147                  fi
148              else
149                  if [ $(checkEmptySymbol $diff_symbol) == "true" ]; then
150  		     output=$(echo "$branch")
151                  else
152  		     output=$(echo "$diff_symbol $branch")
153                  fi
154              fi
155  
156          else
157              if [ $(checkEmptySymbol $current_symbol) == "true" ]; then
158  	         output=$(echo "$branch")
159              else
160  		 output=$(echo "$current_symbol $branch")
161              fi
162          fi
163  
164          [ "$show_remote_status" == "true" ] && output+=$(getRemoteInfo)
165          echo "$output"
166      else
167          echo $no_repo_message
168      fi
169  }
170  
171  main()
172  {  
173      path=$(getPaneDir)
174      getMessage
175  }
176  
177  #run main driver program
178  main