]>
git.madduck.net Git - etc/offlineimap.git/commitdiff
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (parent:
d6533cd )
-[ "${1:-}" = -q ] && exec >/dev/null
-
VAR=$HOME/.var/offlineimap
VAR=$HOME/.var/offlineimap
-LOCKFILE="$VAR/.cron.lock"
-trapfn() { rm -f "$LOCKFILE"; trap - 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15; }
-trap trapfn 1 2 3 4 5 6 7 8 10 11 12 13 14 15
-if [ -d "$VAR" ] && ! lockfile -0 -r0 -l 3600 "$LOCKFILE" 2>/dev/null; then
- echo "E: offlineimap is already running." >&2
+
+opts=
+accounts=
+quiet=
+for opt in "$@"; do
+ case "$opt" in
+ --quiet)
+ opts="${opts:+$opts }-uQuiet -l/dev/null"
+ quiet=1
+ ;;
+ -a) continue;;
+ -*) opts="${opts:+$opts }$opt";;
+ *) accounts="${accounts:+$accounts }$opt";;
+ esac
+done
+
+info() { [ -n "$quiet" ] || echo >&2 "$@"; }
+err() { echo >&2 "$@"; }
+
+if [ -z "$accounts" ]; then
+ err "E: no account(s) specified…"
+else
+ accounts=$(echo "$accounts" | sed -e 's/,/ /g')
- echo Renicing because we are not run interactively…
+ say "I: Renicing because we are not run interactively…"
renice 20 -p $$ >/dev/null
ionice -c3 -p $$
fi
renice 20 -p $$ >/dev/null
ionice -c3 -p $$
fi
-ret=0
-strace -tfo /tmp/offlineimap.strace /usr/bin/offlineimap "$@" || ret=$?
+getlock()
+{
+ lockfile="$VAR/.$1.lock"
+ trapfn() { rm -f "$lockfile"; trap - 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15; }
+ trap trapfn 1 2 3 4 5 6 7 8 10 11 12 13 14 15
+ if [ -d "$VAR" ] && ! lockfile -0 -r0 -l 3600 "$lockfile" 2>/dev/null; then
+ return 1
+ fi
+ trap trapfn 0
+}
+failures=0
+for account in $accounts; do
+ getlock "$account" || {
+ err "E: unable to acquire lock for account $account, already running?"
+ failures=$(($failures + 1))
+ continue
+ }
+
+ eval /usr/bin/offlineimap -a $account -k metadata=$VAR/$account $opts || \
+ failures=$(($failures + 1))
+
+ trapfn
+done
+
+if [ $failures -gt 0 ]; then
+ exit 1
+else
+ exit 0
+fi
-*/30 * * * * sleep $((900 * $RANDOM / 32768)) && ip r | grep -q via && $HOME/.bin/offlineimap -q -ou qui et
-55 */8 * * * sleep $((300 * $RANDOM / 32768)) && ip r | grep -q via && $HOME/.bin/offlineimap -q -ou quiet -a madduck.net- bulk
+*/30 * * * * sleep $((900 * $RANDOM / 32768)) && ip r | grep -q via && $HOME/.bin/offlineimap --quiet -o -a madduck.n et
+55 */8 * * * sleep $((300 * $RANDOM / 32768)) && ip r | grep -q via && $HOME/.bin/offlineimap --quiet -o -a madduck.net_ bulk
return -1
return cmp(x, y)
return -1
return cmp(x, y)
-def py_nametrans_main (x):
return re.sub('^INBOX', 'inbox', x)
def py_folderfilter_main(x):
return re.sub('^INBOX', 'inbox', x)
def py_folderfilter_main(x):
def py_folderfilter_mbnames(acct, x):
full_excludes_re_mbnames = ['retrain/(sp|h)am'] + full_excludes_re
def py_folderfilter_mbnames(acct, x):
full_excludes_re_mbnames = ['retrain/(sp|h)am'] + full_excludes_re
- return acct in ['madduck.net', 'madduck.net- bulk'] \
+ return acct in ['madduck.net', 'madduck.net_ bulk'] \
and not re.search('^(' + '|'.join(full_excludes_re_mbnames) + ')', x)
and not re.search('^(' + '|'.join(full_excludes_re_mbnames) + ')', x)
-metadata = ~/.var/offlineimap
-accounts = madduck.net
-ui = b asic
+# metadata = ~/.var/offlineimap
+accounts =
+ui = B asic
ignore-readonly = no
socktimeout = 30
pythonfile = ~/.offlineimap/helper.py
ignore-readonly = no
socktimeout = 30
pythonfile = ~/.offlineimap/helper.py
quick = 16
postsynchook = ionice -c3 nice -20 notmuch new
quick = 16
postsynchook = ionice -c3 nice -20 notmuch new
-[Account madduck.net- bulk]
+[Account madduck.net_ bulk]
localrepository = local-main
localrepository = local-main
-remoterepository = madduck.net- bulk
+remoterepository = madduck.net_ bulk
autorefresh = 15
quick = 16
postsynchook = ionice -c3 nice -20 notmuch new
autorefresh = 15
quick = 16
postsynchook = ionice -c3 nice -20 notmuch new
preauthtunnel = SSH_AUTH_SOCK= ssh -TCaxS ~/.var/offlineimap/ssh_ctl_sock -o "ControlMaster auto" -o "ProtocolKeepAlives 10" -o "ConnectTimeout 60" -o "IPQoS af12" -i ~/.offlineimap/id_rsa.imap@seamus imap.madduck.net
expunge = yes
foldersort = py_foldersort_main
preauthtunnel = SSH_AUTH_SOCK= ssh -TCaxS ~/.var/offlineimap/ssh_ctl_sock -o "ControlMaster auto" -o "ProtocolKeepAlives 10" -o "ConnectTimeout 60" -o "IPQoS af12" -i ~/.offlineimap/id_rsa.imap@seamus imap.madduck.net
expunge = yes
foldersort = py_foldersort_main
-nametrans = py_nametrans_main
+nametrans = py_nametrans
folderfilter = py_folderfilter_main
idlefolders = ['inbox', 'mass', 'debian', 'ul', 'phd', 'admin']
folderfilter = py_folderfilter_main
idlefolders = ['inbox', 'mass', 'debian', 'ul', 'phd', 'admin']
-[Repository madduck.net- bulk]
+[Repository madduck.net_ bulk]
type = IMAP
maxconnections = 1
holdconnectionopen = yes
type = IMAP
maxconnections = 1
holdconnectionopen = yes