Mac workflow: worklog generator

Preface: a mai workflow mese nem annyira strict OS X dolog, pusztán egy mezei Bash shell scriptet írunk meg benne. Hónap eleje van – ilyenkor számlázok és írom a worklogot – ez utóbbiról lesz most szó. eFi munkája software support munka: többek között fejlesztek új toolokat és karbantartom a régieket, zömmel VBA-ban. A Microsoft Office VBA nem haszontalan stuff, ám több szempontból is szörnyűséges egy szerzet – elég csak arra gondolni, hogy az Office dokumentumba írt kódot (WTF?) csak egyesével, ún. modulonként tudod kézzel plain text file-ba menteni, az IDE semmi ettől extrább támogatást nem ad. Anno, amikor elkezdtem VBA-val foglalkozni, írtam magamnak olyan környezetet, ami egy klikkre release ID-t generál az adott verziónak, új sort nyit a kódhoz tartozó changelogban és képes az így megjelölt kódfát tokkal-vonóval plain text file-okba egy verzióként kipakolni. Ehhez aztán készlült egy VBA updater motor is, ami ezt a mentést képes volt visszatölteni, de az egy másik történet – maradjunk most a lementett kódfánál, ami changelogostól pihen a HDD-n egy hierarchikus folder struktúrában. A velem support szerződést kötő cégnek havonta számlázok, a számla mellé pedig logot kell mellékelnem, ami elmagyarázza, hogy a kiszámlázott hónapban milyen munkákat végeztem el. Ennek a lognak az előállítását automatizálja némiképp a worklog script. Nézzük meg, azt a végén elmagyarázom röviden, hogy hogy is megy ez az egész:

#!/bin/sh
SCRIPT=`basename $0`
if [ "$#" != "1" ]; then
	echo "$SCRIPT - list changes made within a month"
	echo "Usage: $SCRIPT yyyymm"
	exit 1
fi
MYPATH=/Users/fns/Documents/xp/support/_code
PATHLEN=$((${#MYPATH}+1)) #+1 to cut first slash character as well
echo "$SCRIPT - list of changes made on $1\n"
for f in $(find $MYPATH -iname "changelog*")
do
if [ -a $f ]; then
	LOG=`cat $f | grep "'$1"`
	if [ "$LOG" != "" ]; then
		SRC=${f:PATHLEN}
		echo "Log from $SRC:"
		echo "$LOG\n"
	fi
fi
done
A script a kódfákat tartalmazó top level folderen elindulva végigszalad és előszedi a subfolderekben lakó changelog file-okat. Ilyen changelog minden kódfában csak egy van és historikusan tartalmazza a forrásban elkövetett változtatások rövid szöveges leírását. Egy sor a changelogban 3 elemből áll:
  • az eleje mindíg a release ID, ami yyyymmdd hh:mm formátumú,
  • a közepe egy byte-nyi flag, ami azt jelöli, hogy az adott módosítás új feature (+), törölt feature (-), bugfix (*), vagy éppen csak hangosan gondolkodok (?),
  • a vége pedig maga a változás szöveges leírása.
Namármost, ha a changelog sorok elején található ‘yyyymm kezdetű stringre szűrünk és csak azokat a changelog-okat jelenítjük meg a szűrt tartalommal együtt, amelyek az adott yyyymm patternre illeszkednek, akkor már le is generáltuk a munka leigazolását. Ezek után nincs más hátra, mint a különböző projectek szűrt changelogját a megfelelő kuncsaftnak megküldeni. Végül itt egy minta a script által gyártott eredményből:
worklog - list of changes made on 201010
Log from cpt/modules/ChangeLog.bas:
'20101011 20:00 *   Default report fix (default report created instead of last used one when no SF ARCHIVE present and the last used report wants it).
'20101011 20:46 *   Asset efficiency % report regional fix.
'20101012 12:16 *   Demand cmp Reports disabled when no SF ARCHIVE present.
'20101013 18:57 +   Forced forecast archive generation if user omits it to prevent freezing of forecast archive related reports.
'20101013 20:04 +   Asset group selection support for Demand share per family report.
'20101015 08:20 *   Demand share per family report MSO/FCODE array empty fix.
'20101016 10:41 +   Forecast archive generator hack improved.
]]>

Leave a Reply

Your email address will not be published. Required fields are marked *