summaryrefslogtreecommitdiff
path: root/plugins/git-auto-fetch
diff options
context:
space:
mode:
authorMarc Cornellà <marc.cornella@live.com>2018-09-26 23:56:58 +0200
committerGitHub <noreply@github.com>2018-09-26 23:56:58 +0200
commit6bd95ddbdcb0ee51ec41e28bc07c6d64e96670ba (patch)
tree1f247fe6fa0c9d225a12568dcf4e9aa59134d1bf /plugins/git-auto-fetch
parente107b85e3aedc644a7741917f914e5a5e350f4fb (diff)
parentd2dfa69419845daebcfd20fed3253ae06faa2876 (diff)
downloadzsh-6bd95ddbdcb0ee51ec41e28bc07c6d64e96670ba.tar.gz
zsh-6bd95ddbdcb0ee51ec41e28bc07c6d64e96670ba.tar.bz2
zsh-6bd95ddbdcb0ee51ec41e28bc07c6d64e96670ba.zip
add plugin: git-auto-fetch (#5477)
Diffstat (limited to 'plugins/git-auto-fetch')
-rw-r--r--plugins/git-auto-fetch/README.md29
-rw-r--r--plugins/git-auto-fetch/git-auto-fetch.plugin.zsh27
2 files changed, 56 insertions, 0 deletions
diff --git a/plugins/git-auto-fetch/README.md b/plugins/git-auto-fetch/README.md
new file mode 100644
index 000000000..04f1c9445
--- /dev/null
+++ b/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
+```
diff --git a/plugins/git-auto-fetch/git-auto-fetch.plugin.zsh b/plugins/git-auto-fetch/git-auto-fetch.plugin.zsh
new file mode 100644
index 000000000..1d20bc04b
--- /dev/null
+++ b/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