tt.sh
author llbatlle@comanegra
Fri, 01 Apr 2011 10:06:32 +0200
changeset 21 5dababf1cb7d
parent 17 f0fcc2a59caf
permissions -rwxr-xr-x
Milloro l'escript que compta hores.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
     1
#!/bin/sh -e
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
     2
# (encoding: UTF-8)
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
     3
#
5
c95eed29f31b Increasing version
viric@mandarina
parents: 4
diff changeset
     4
# tt 0.6 - Time Tracker
6
0e75c4869729 Fixing instruction message.
viric@mandarina
parents: 5
diff changeset
     5
#   (Instructions using -h)
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
     6
# LICENSE
1
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
     7
# Copyright (C) 2009 LluĂ­s Batlle i Rossell
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
     8
# 
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
     9
# This program is free software; you can redistribute it and/or
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    10
# modify it under the terms of the GNU General Public License
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    11
# as published by the Free Software Foundation; either version 2
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    12
# of the License, or (at your option) any later version.
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    13
# 
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    14
# This program is distributed in the hope that it will be useful,
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    17
# GNU General Public License for more details.
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    18
# 
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    19
# You should have received a copy of the GNU General Public License
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    20
# along with this program; if not, write to the Free Software
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    21
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    22
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    23
PNAME=`basename "$0"`
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    24
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    25
if [ -z "$EDITOR" ]; then
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    26
	EDITOR=vim
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    27
fi
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    28
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    29
if [ -z "$TT_PROJECT" ]; then
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    30
	TT_PROJECT=$HOME/.tt
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    31
fi
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    32
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    33
function usage
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    34
{
17
f0fcc2a59caf Making the tt help show the proper parameters available.
viric <viriketo@gmail.com>
parents: 9
diff changeset
    35
	echo "Usage: $PNAME <-s|-l|-t|-h>"
1
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
    36
    echo "       $PNAME <task>"
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
    37
    echo "Manual:"
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
    38
    echo "  Switch to a task         :  tt mytask"
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
    39
    echo "  List task switches       :  tt -l"
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
    40
    echo "  List time spent per task :  tt -t"
4
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
    41
    echo "  Sum times given with -t  :  tt -t | grep ... | tt -s"
1
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
    42
    echo "  List what is tracked     :  tt"
4
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
    43
    echo "  \$TT_PROJECT or ~/.tt stores the tracking."
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    44
}
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    45
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    46
function date2iso
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    47
{
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    48
	date -d "$1" '+%Y-%m-%d %T'
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    49
}
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    50
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    51
function date2timestamp
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    52
{
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    53
	date -d "$1" '+%s'
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    54
}
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    55
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    56
function add
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    57
{
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    58
	echo "`date2iso now`"$'\t'"$1" >> "$TT_PROJECT"
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    59
}
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    60
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    61
function list
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    62
{
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    63
	if [ -f "$TT_PROJECT" ]; then
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    64
		cat "$TT_PROJECT"
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    65
	fi
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    66
}
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    67
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    68
function listtime
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    69
{
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    70
	if [ -f "$TT_PROJECT" ]; then
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    71
		cat < "$TT_PROJECT" |
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    72
        (
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    73
            read A
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    74
            STARTTIME=`echo "$A" | cut -f 1`
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    75
            NAME=`echo "$A" | cut -f 2`
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    76
            while read A; do
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    77
                ENDTIME=`echo "$A" | cut -f 1`
2
cb0ef162a7fa Fixing a bug on -t
viric@mandarina
parents: 1
diff changeset
    78
                echo `timebetween "$STARTTIME" "$ENDTIME"` \
1
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
    79
                    "$NAME" "($STARTTIME)"
2
cb0ef162a7fa Fixing a bug on -t
viric@mandarina
parents: 1
diff changeset
    80
                NAME=`echo "$A" | cut -f 2`
cb0ef162a7fa Fixing a bug on -t
viric@mandarina
parents: 1
diff changeset
    81
                STARTTIME="$ENDTIME"
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    82
            done
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    83
            echo `timebetween "$STARTTIME" now` \
1
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
    84
                "$NAME" "($STARTTIME)"
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    85
        )
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    86
	fi
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    87
}
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    88
4
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
    89
function sec2hms
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    90
{
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    91
    MINUTES=0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    92
    HOURS=0
4
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
    93
    SECONDS=$1
9
d571ba4d952c Fixing a bug in the 'sh' version, regarding to 00:60:00 time reports, for example.
Lluís Batlle <viriketo@gmail.com>
parents: 7
diff changeset
    94
    if [ $SECONDS -ge 60 ]; then
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    95
        MINUTES=$((SECONDS / 60))
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    96
        SECONDS=$((SECONDS - MINUTES * 60))
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    97
    fi
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
    98
9
d571ba4d952c Fixing a bug in the 'sh' version, regarding to 00:60:00 time reports, for example.
Lluís Batlle <viriketo@gmail.com>
parents: 7
diff changeset
    99
    if [ $MINUTES -ge 60 ]; then
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   100
        HOURS=$((MINUTES / 60))
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   101
        MINUTES=$((MINUTES - HOURS * 60))
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   102
    fi
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   103
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   104
    printf "%02d:%02d:%02d\n" $HOURS $MINUTES $SECONDS
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   105
}
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   106
4
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   107
function timebetween
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   108
{
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   109
	STARTSEC=`date2timestamp "$1"`
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   110
	ENDSEC=`date2timestamp "$2"`
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   111
    
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   112
    SECONDS=$((ENDSEC - STARTSEC))
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   113
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   114
    echo `sec2hms $SECONDS`
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   115
}
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   116
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   117
function status
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   118
{
3
75385193714b Marc Weber found a bug in 'tt' without parameter.
viric@mandarina
parents: 2
diff changeset
   119
	if [ -f "$TT_PROJECT" ]; then
75385193714b Marc Weber found a bug in 'tt' without parameter.
viric@mandarina
parents: 2
diff changeset
   120
        NAME=`tail -n 1 "$TT_PROJECT" | cut -f 2`
75385193714b Marc Weber found a bug in 'tt' without parameter.
viric@mandarina
parents: 2
diff changeset
   121
        STARTDATE=`tail -n 1 "$TT_PROJECT" | cut -f 1`
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   122
3
75385193714b Marc Weber found a bug in 'tt' without parameter.
viric@mandarina
parents: 2
diff changeset
   123
        echo `timebetween "$STARTDATE" "now"` "$NAME"
75385193714b Marc Weber found a bug in 'tt' without parameter.
viric@mandarina
parents: 2
diff changeset
   124
    fi
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   125
}
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   126
4
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   127
function sum
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   128
{
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   129
    VAL=`awk -F : -- '
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   130
    BEGIN { val=0; }
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   131
    { val += $1 * 60 * 60 + $2 * 60 + $3 }
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   132
    END { print val }' `
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   133
    
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   134
    echo `sec2hms $VAL`
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   135
}
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   136
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   137
if [ $# -eq 0 ]; then
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   138
	status || exit 1
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   139
elif [ "$1" == "-l" ]; then
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   140
	list
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   141
elif [ "$1" == "-t" ]; then
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   142
	listtime
4
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   143
elif [ "$1" == "-s" ]; then
b46b71721cb4 Adding a way to sum times.
viric@mandarina
parents: 3
diff changeset
   144
	sum
1
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
   145
elif [ "$1" == "-h" ]; then
248540522080 Updating help.
viric@mandarina
parents: 0
diff changeset
   146
	usage
0
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   147
else
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   148
	add $@
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   149
fi
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   150
00043643385b Base tt.
viric@mandarina
parents:
diff changeset
   151
exit 0