#!/bin/sh
#modules="ActionTrackerPlugin"
modules="AbusePlugin ActionTrackerPlugin AgentPlugin AliasPlugin AutolinkDDTSPlugin BeautifierPlugin BugzillaLinkPlugin BugzillaQueryPlugin CalendarPlugin ChartPlugin CommentPlugin ConditionalPlugin CounterPlugin DatabasePlugin DoxygenPlugin EditInTablePlugin EditTablePlugin EmbedBibPlugin EmbedFlashPlugin EmbedPDFPlugin EmbedQTPlugin ExifMetaDataPlugin ExplicitNumberingPlugin FeedbackPlugin FindElsewherePlugin FormFieldsPlugin FormPivotPlugin FormQueryPlugin GaugePlugin GlobalReplacePlugin GnuSkinInstall GpgkeyPlugin GuidPlugin HeadlinesPlugin HiddenTextPlugin ImageGalleryPlugin ImmediateNotifyPlugin IncludeIndexPlugin IncludeRevisionPlugin InterwikiPlugin IrcLogPlugin JavaDocPlugin LaTeXToMathMLPlugin LdapPlugin ListOfSkinsPlugin LocalCityTimePlugin LocalTimePlugin MathModePlugin MovableTypePlugin NavPlugin NavbarPlugin NewsPlugin NotificationPlugin NotifyOnChildModificationPlugin PageStatsPlugin PdfPlugin PeerPlugin PerlDocPlugin PerlSamplePlugin PhantomPlugin PollPlugin ProgramsPlugin PrologPlugin PrologSamplePlugin ProtocolTlaPlugin PseudoXmlPlugin QuickCalendarPlugin QuickSearchPlugin RandomQuotePlugin RandomTopicPlugin RecursiveRenderPlugin RedirectPlugin RenderListPlugin RevRecoverPlugin RevisionLinkPlugin RicherSyntaxPlugin RollupPlugin SablotronPlugin SearchToTablePlugin SectionalEditPlugin SessionPlugin SingletonWikiWordPlugin SiteMinderPlugin SlashFilenamePlugin SlideShowPlugin SmartSessionPlugin SmiliesPlugin SourceHighlightPlugin SpacedWikiWordPlugin SpellCheckerPlugin SpreadSheetPlugin StylePlugin SuggestLinksPlugin SyntaxHighlightingPlugin TWikiDrawPlugin TablePlugin TocPlugin TodaysVisitorsPlugin ToolTipPlugin TopicReadersPlugin TopicVarsPlugin TranslateTagPlugin TreePlugin TypographyPlugin UpdateInfoPlugin UserCookiePlugin VersionLinkPlugin XmlXslPlugin XpTrackerPlugin AmbarSkin BlueSkin CaboteriaSkin CopyCatSkin DallasSkin DandruffSkin FlexibleSkin FloatingMenuSkin FreeSkin KoalaSkin LkfSkin MikebSkin PhantomSkin PhotonSkin RoundEdgeSkin SeeSkin SlimKoalaSkin TigerSkinPlugin VoidSkin"


goods="getSessionValue setSessionValue getSkin getUrlHost getScriptUrl getScriptUrlPath getViewUrl getOopsUrl getPubUrlPath getCgiQuery writeHeader redirectCgiQuery extractNameValuePair getPreferencesValue getPreferencesFlag getWikiToolName getMainWebname getTwikiWebname getDefaultUserName getWikiName getWikiUserName wikiToUserName userToWikiName isGuest permissionsSet checkAccessPermission webExists topicExists getRevisionInfo checkTopicEditLock setTopicEditLock readTopicText saveTopicText getPublicWebList getTopicList expandCommonVariables renderText internalLink formatGmTime getDataDir getPubDir readTopic readTemplate readFile saveFile writeWarning writeDebug"

shopt -s nullglob

load () {
    exists=`echo $1/*.zip $1/*.tgz $1/*.tar.gz $1/*.pm`
    if [ x$exists != x ]; then
	echo "$1 already loaded !$exists!"
	if [ x$update = "-u" ]; then
	    read -p "Update? " yorn
	    if [ x$yorn != "y" -a x$yorn != "Y" ]; then
		return 0;
	    fi
	else
	    return 0
	fi
    fi
    mkdir -p $1
    cd $1
    mod=$1
    while [ $mod ]; do
	echo "Trying $mod.zip"
	if wget -q http://TWiki.org/p/pub/Plugins/$1/$mod.zip; then
	    unzip -q -o $mod.zip
	    cd ..
	    echo "Loaded $mod.zip"
	    return 0
	fi
	echo "$mod.zip not accessible; trying $mod.pm"
	if wget -q http://TWiki.org/p/pub/Plugins/$1/$mod.pm; then
	    cd ..
	    echo "Loaded $mod.pm"
	    return 0
	fi
	echo "$mod.pm not accessible; trying $mod.tgz"
	if wget -q http://TWiki.org/p/pub/Plugins/$1/$mod.tgz; then
	    tar -zxf $mod.tgz
	    cd ..
	    echo "Loaded $mod.tgz"
	    return 0
	fi
	echo "$mod.tgz not accessible; trying $mod.tar.gz"
	if wget -q http://TWiki.org/p/pub/Plugins/$1/$mod.tar.gz; then
	    tar -zxf $mod.tar.gz
	    cd ..
	    echo "Loaded $mod.tar.gz"
	    return 0
	fi
	echo "$mod.tar.gz not accessible"
	read -p "Try another name:" mod
    done
    cd ..
    return 1
}

update=$1
here=`pwd`
record=$here/data.dat
echo "" > $record
mkdir -p analyse
cd analyse
for module in $modules; do
    if load $module; then
	echo "Analysing $module"
	cd $module
	if [ -d bin ]; then
	    for file in ./bin/*; do
		echo "SCRIPT $module $file" >> $record
	    done
        fi
	if [ -d lib ]; then
	    files=`find ./lib -name '*.pm' -print | grep -v '/test/'`
	    files="$files `find ./lib -name '*.pl' -print | grep -v '/test/'`"
	    if [ ${#files} -gt 0 ]; then
		for good in $goods; do
		    finds=`grep TWiki::Func::$good $files | wc -l`
		    if [ $finds -gt 0 ]; then
			echo "GOOD $module $good $finds" >> $record
		    fi
		done
		finds=`grep TWiki:: $files | awk -f $here/filter.awk`
		for find in $finds; do
		    echo "BAD $module $find" >> $record
		done
	    fi
	fi
	cd ..
    else
	echo "VERYBAD $module" >> $record
    fi
    #rm -rf $module
done
cd ..
#rm -rf analyse
