Browse Source

add plugin: git-auto-fetch (#5477)

Marc Cornellà 5 years ago
parent
commit
6bd95ddbdc
2 changed files with 56 additions and 0 deletions
  1. 29 0
      plugins/git-auto-fetch/README.md
  2. 27 0
      plugins/git-auto-fetch/git-auto-fetch.plugin.zsh

+ 29 - 0
plugins/git-auto-fetch/README.md

@@ -0,0 +1,29 @@
+# Git auto fetch
+
+Automatically fetches all changes from all remotes while you are working in git-initialized directory.
+
+####Usage
+Add ```git-auto-fetch``` to the plugins array in your zshrc file:
+```shell
+plugins=(... git-auto-fetch)
+```
+
+Every time you launch a command in your shell all remotes will be fetched in background.
+By default autofetch will be triggered only if last fetch was done at least 60 seconds ago.
+You can change fetch interval in your .zshrc:
+```
+GIT_AUTO_FETCH_INTERVAL=1200 #in seconds
+```
+Log of ```git fetch --all``` will be saved into .git/FETCH_LOG
+
+
+####Toggle auto fetch per folder
+If you are using mobile connection or for any other reason you can disable git-auto-fetch for any folder:
+
+```shell
+$ cd to/your/project
+$ git-auto-fetch
+disabled
+$ git-auto-fetch
+enabled
+```

+ 27 - 0
plugins/git-auto-fetch/git-auto-fetch.plugin.zsh

@@ -0,0 +1,27 @@
+GIT_AUTO_FETCH_INTERVAL=${GIT_AUTO_FETCH_INTERVAL:=60}
+
+function git-fetch-all {
+  (`git rev-parse --is-inside-work-tree 2>/dev/null` &&
+  dir=`git rev-parse --git-dir` &&
+  [[ ! -f $dir/NO_AUTO_FETCH ]] &&
+  (( `date +%s` - `date -r $dir/FETCH_LOG +%s 2>/dev/null || echo 0` > $GIT_AUTO_FETCH_INTERVAL )) &&
+  git fetch --all &>! $dir/FETCH_LOG &)
+}
+
+function git-auto-fetch {
+  `git rev-parse --is-inside-work-tree 2>/dev/null` || return
+  guard="`git rev-parse --git-dir`/NO_AUTO_FETCH"
+
+  (rm $guard 2>/dev/null &&
+    echo "${fg_bold[green]}enabled${reset_color}") ||
+  (touch $guard &&
+    echo "${fg_bold[red]}disabled${reset_color}")
+}
+
+eval "override-git-auto-fetch-$(declare -f zle-line-init)"
+
+function zle-line-init () {
+  git-fetch-all
+  override-git-auto-fetch-zle-line-init
+}
+zle -N zle-line-init