info-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: getting all tags for a module


From: Colm Murphy
Subject: Re: getting all tags for a module
Date: Mon, 11 Feb 2002 11:31:37 +0000
User-agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-GB; rv:0.9.4) Gecko/20011019 Netscape6/6.2

Here is a script we use to list all tags in a module.
It can also be used to return a list of files for a given tag.

Colm A


#!/usr/local/bin/perl -w
################################################################################## Description : Prints either a list of tags for a module or a list of files for a tag.
#                  taginfo operates on files in the repository.!!
#                  Use rtaginfo to view tags for files in your sandbox.
#
#################################################################################

#------------------------------------------------------------------------------
# Parameters
#------------------------------------------------------------------------------
$usageinfo = "Usage: rtaginfo -t <module>|<dir>\n";
$usageinfo = $usageinfo."or:    rtaginfo -f <Tag>\n";
$usageinfo = $usageinfo." -t <module>|<dir> Print a list of tags used in module or dir\n"; $usageinfo = $usageinfo." -f <tag> Print a list of all files containing tag\n"; $usageinfo = $usageinfo." This option requires the Everything module to be defined.\n";
$usageinfo = $usageinfo."\nUse taginfo to view tags in your sandbox.\n";

$modulelist = "";
if (@ARGV >= 2)
{
   if ($ARGV[0] eq "-t")
   {
      $mode = "show_tags";
      for $i (1..$#ARGV)
      {
         $modulelist = $modulelist."$ARGV[$i] ";
      }
   }
   elsif ($ARGV[0] eq "-f")
   {
      $mode = "show_files";
      $chosentag = $ARGV[1];
      $modulelist = "Everything";
      if (@ARGV > 2)
      {
         print $usageinfo;
         exit;
      }
   }
   else
   {
         print $usageinfo;
      exit;
   }
}
else
{
         print $usageinfo;
   exit;
}
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# Parse the logfile
#------------------------------------------------------------------------------
parselog();

if ($mode eq "show_tags")
{
   print "----------------------------------------\n";
   print "$modulelist contain the following tags\n";
   print "----------------------------------------\n";
   map{ print "$_\n"; } (sort keys %tagdetails);
   print "----------------------------------------\n";
}
elsif ($mode eq "show_files")
{
   if ($tagdetails{$chosentag})
   {
      print "----------------------------------------\n";
      print "The following files contain the tag $chosentag \n";
      print "----------------------------------------\n";
      @filelist = split (/,/,$tagdetails{$chosentag});
      foreach $file (@filelist)
      {
         print "$file\n";
      }
      print "----------------------------------------\n";
   }
   else
   {
      print "Found no files containing the tag $chosentag \n";
   }
}
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# Subroutine: parselog
#
#------------------------------------------------------------------------------
sub parselog
{

   my $Flag = 0;
   print "Running cvs rlog. This may take some time ... \n";

   open(CVS_LOG," cvs -q rlog $modulelist|")
                   || die "Problems running cvs -q rlog $modulelist !\n";

# $x is a control variable for the rotating bar indicating that program is still alive.
   $x =0;
   # Flushing the output making bar really rotating.
   $| = 1;

   while ( defined ($line = <CVS_LOG> ) )
   {
      if($line =~ /^RCS file:\s(\S+),v/)
      {
         $rcsfile = $1;
      }

      if($line =~ /symbolic names:/)
      {
         $Flag = 1;
         next;
      }

      if( $Flag )
      {
         if($line !~ /^\s+(\S+):\s(\S+)$/ )
         {
            $Flag = 0;
            next;
         }

        $tagdetails{$1} = "$tagdetails{$1},$rcsfile:$2";
      }
      # This breathtaking rotating star ...
      # Octal \010 is backspace character code.
      if ( ($x % 40) == 1)
      {
         print "\010\/";
      }
      elsif ( ($x % 40) == 11)
      {
         print "\010|";
      }
     elsif ( ($x % 40) == 21)
      {
         print "\010\\";
      }
      elsif ( ($x % 40) == 31)
      {
         print "\010-";
      }
         elsif ($x == 41)
      {
         $x=0;
      }
      $x++;
   }
   # Closing the pipe from 'cvs log'.
   close (CVS_LOG);
   return;
}
#------------------------------------------------------------------------------


E B wrote:

To get all tags for a module, the archives suggest
using cvs log filename (for some filename).
But this file might not have been there all throughout the module's history. So is there any another way of getting all the tags for a module?

__________________________________________________
Do You Yahoo!?
Everything you'll ever need on one web page
from News and Sport to Email and Music Charts
http://uk.my.yahoo.com







reply via email to

[Prev in Thread] Current Thread [Next in Thread]