jaromail

a commandline tool to easily and privately handle your e-mail
git clone git://parazyd.org/jaromail.git
Log | Files | Refs | Submodules | README

commit 6ff616c882c6762bb32b366495ed698406e0c3a3
parent e3c34f9020ba5ba2da783ce56849a1ccd0a11e8d
Author: Jaromil <jaromil@dyne.org>
Date:   Thu, 22 Oct 2015 09:54:42 +0200

locking code cleanup and fix installation perms

Diffstat:
Mbuild/install-gnu.sh | 2++
Msrc/zlibs/locking | 123+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
Msrc/zlibs/parse | 13+++----------
3 files changed, 81 insertions(+), 57 deletions(-)

diff --git a/build/install-gnu.sh b/build/install-gnu.sh @@ -43,6 +43,8 @@ for l in `ls $JARO_LIBEXEC/zlibs/ | grep -v '.zwc$'`; do zcompile $JARO_LIBEXEC/zlibs/$l done +chmod -R a+rX "$JARO_SHARE" + mkdir -p $PREFIX/bin cat <<EOF > $PREFIX/bin/jaro #!/usr/bin/env zsh diff --git a/src/zlibs/locking b/src/zlibs/locking @@ -4,7 +4,7 @@ # # a tool to easily and privately handle your e-mail communication # -# Copyleft (C) 2010-2014 Denis Roio <jaromil@dyne.org> +# Copyleft (C) 2010-2015 Denis Roio <jaromil@dyne.org> # # This source code is free software; you can redistribute it and/or # modify it under the terms of the GNU Public License as published by @@ -22,21 +22,32 @@ lock() { - func "$dotlock: $1" - ${WORKDIR}/bin/dotlock "$1" + fn "lock $@" + _file=$1 + req=(_file) + freq=($_file) + ckreq || return 1 + + if helper.isfound dotlock; then + dotlock=`command -v dotlock` + else + dotlock="${WORKDIR}/bin/dotlock" + fi + + ${dotlock} "$_file" res=$? case $res in - 1) error "Cannot lock non existing file: $1" + 1) error "Cannot lock non existing file: $_file" return 1 ;; - 3) error "Locked file in use: $1" + 3) error "Locked file in use: $_file" pidcheck "$1" return 3 ;; - 5) error "Lock is impossible on: $1" + 5) error "Lock is impossible on: $_file" return 5 ;; # success - 0) print "$$" > "$1.pid" + 0) print "$$" > "$_file.pid" return 0 ;; *) error "Unknown error locking: $res" @@ -45,67 +56,85 @@ lock() { } newlock() { # lock file, create if not existing - func "creating locked file: $1" - touch "$1" - chmod 600 "$1" - lock "$1" + fn "newlock $@" + _file="$1" + req=(_file) + ckreq || return 1 + + touch "$_file" + chmod 600 "$_file" + lock "$_file" } pidcheck() { # check if lock belongs to us - if [ -r "${1}.pid" ]; then + fn "pidcheck $@" + _pid="$1" + req=(_pid) + ckreq || return 1 + + if [ -r "${_pid}.pid" ]; then - lockpid="`cat ${1}.pid`" - func "pidcheck: $lockpid" - if [[ "$$" = "$lockpid" ]]; then - func "${1} lock belongs to us" - else + lockpid="`cat ${_pid}.pid`" + func "pidcheck: $lockpid" + if [[ "$$" = "$lockpid" ]]; then + func "${_pid} lock belongs to us" + else - error "Unlock attempt by multiple processes on `basename $1`" - [[ "$FORCE" = "1" ]] || { _prun=1 - while [ "$_prun" = "1" ]; do + error "Unlock attempt by multiple processes on `basename $_pid`" + [[ "$FORCE" = "1" ]] || { + _prun=1 + while [ "$_prun" = "1" ]; do [[ $global_quit = 1 ]] && { break } - for p in `ps ax | awk '{ print $1 }'`; do - { test "$p" = "$lockpid" } && { break } - done - if [ "$p" = "$lockpid" ]; then - act "Owner (${lockpid}) still running, waiting release..." - sleep 1; + for p in `ps ax | awk '{ print $_pid }'`; do + { test "$p" = "$lockpid" } && { break } + done + if [ "$p" = "$lockpid" ]; then + act "Owner (${lockpid}) still running, waiting release..." + sleep 1; continue - else - act "Owner (${lockpid}) not running, taking over the lock" - rm -f "${1}.pid"; print "$$" > "${1}.pid" - _prun=0 - fi - done - } - act "left behind by $lockpid - we ($$) will take over" + else + act "Owner (${lockpid}) not running, taking over the lock" + rm -f "${_pid}.pid"; print "$$" > "${_pid}.pid" + _prun=0 + fi + done + } + act "left behind by $lockpid - we ($$) will take over" - fi + fi else # pid file doesn't exists - func "no pid file found for: $1" - func "we will take it over" - print "$$" > "${1}.pid" + func "no pid file found for: $_pid" + func "we will take it over" + print "$$" > "${_pid}.pid" fi return 0 } unlock() { - func "unlock: $1" + fn "unlock $@" + _file="$1" + req=(_file) + ckreq || return 1 - pidcheck "$1" + pidcheck "$_file" [[ $? = 0 ]] || { return 1 } - ${WORKDIR}/bin/dotlock -u "$1" + ${WORKDIR}/bin/dotlock -u "$_file" [[ $? = 0 ]] || { - rm -f "$1.lock" - [[ $? = 0 ]] || { error "Unable to unlock: $1"; return 1 } + rm -f "${_file}.lock" + [[ $? = 0 ]] || { error "Unable to unlock: $_file"; return 1 } } - [[ -r "${1}.pid" ]] && { rm -f "${1}.pid" } + [[ -r "${_file}.pid" ]] && { rm -f "${_file}.pid" } return 0 } + unlink() { # delete a file that we are locking - unlock "$1" - ${=rm} "$1" - func "$1 removed" + fn "unlink $@" + _file="$1" + ckreq || return 1 + + unlock "$_file" + ${=rm} "$_file" + func "$_file removed" } diff --git a/src/zlibs/parse b/src/zlibs/parse @@ -38,17 +38,13 @@ extract_mails() { # learn from senders, recipients or all _action="$1" - - # # -U eliminates duplicates - # typeset -aU _res - _found=0 for m in ${(f)_mails}; do # e_parse fills in e_addr(map) and e_parsed(newline term str) hdr $m | e_parse $_action for _e in ${(k)e_addr}; do - # _res+=("${(v)e_addr[$_e]} <$_e>") + print - "${(v)e_addr[$_e]} <$_e>" _found=$(( $_found + 1 )) done @@ -62,11 +58,8 @@ extract_mails() { } } done - # print out results - # for r in $_res; do - # print - $r - # done - notice "${_found} unique addresses extracted" + + notice "${_found} addresses extracted (including duplicates)" } # extract all addresses found into a maildir