Add utility to summarise the hg status output across multiple packages
authorWilliam Roberts <williamr@symbian.org>
Fri, 17 Jul 2009 15:16:08 +0100
changeset 18 4ed8ba809509
parent 17 35c6c3f66bc4
child 19 a101a0b5d6d7
Add utility to summarise the hg status output across multiple packages
williamr/summarise_hg_status.pl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/williamr/summarise_hg_status.pl	Fri Jul 17 15:16:08 2009 +0100
@@ -0,0 +1,124 @@
+#! perl
+
+# Copyright (c) 2009 Symbian Foundation Ltd
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Symbian Foundation Ltd - initial contribution.
+# 
+# Contributors:
+#
+# Description:
+# Summarise the "clone_all_packages.pl -exec -- hg status --rev a --rev b" output
+
+use strict;
+
+my %listings;
+my $current_repo = "";
+my @filelist = ();
+
+sub record_file($$)
+  {
+  my ($file, $change) = @_;
+  
+  next if ($file eq ".hgtags");
+  push @filelist, "$file$change";
+  return;
+  }
+
+sub finished_repo()
+  {
+  if ($current_repo ne "" && scalar @filelist > 0)
+    {
+    $current_repo =~ s/^.*CL\/sf/sf/; # remove leading MCL or FCL stuff
+    @{$listings{$current_repo}} = sort @filelist;
+    # printf STDERR "* %s %d\n", $current_repo, scalar @filelist;
+    }
+  @filelist = ();
+  $current_repo = "";
+  }
+  
+my $line;
+while ($line = <>)
+  {
+  # Processing sfl/MCL/sf/app/imgvieweruis...
+  if ($line =~ /^Processing (.*)\.\.\./)
+    {
+    finished_repo();
+    $current_repo = $1;
+    next;
+    }
+  # abort: unknown revision 'PDK_2.0.c'!
+  if ($line =~ /^abort/)
+    {
+    # ignore the current repo, as it probably didn't have the right tag
+    $current_repo = "";
+    next;
+    }
+  if ($line =~ /^([MARC]) (\S.*\S)\s*$/)
+    {
+    my $change = $1;
+    my $file = $2;
+    record_file($file, $change);
+    next;
+    }
+  }
+
+finished_repo();
+
+print "Package\tChange\tComponent\tFilename\tCount\n";
+foreach my $repo (sort keys %listings)
+  {
+  my @filelist = @{$listings{$repo}};
+  
+  my $last_component = "";
+  my @component_files = ();
+  my @clean_files = ();
+  my $clean_count = 0;
+  my $component = "";
+  
+  foreach my $item (@filelist, ":boo:/:hoo:/:for:/:you:M")
+    {
+    my $change = substr($item,-1);
+    my $file = substr($item,0,-1);
+    my @names = split /\\/, $file;
+    $component = "";
+    if (scalar @names > 2)
+      {
+      my $collection = shift @names;
+      $component = shift @names;
+      $component = $collection . "/" . $component;
+      }
+    $file = join("/", @names);
+    
+    if ($component ne $last_component)
+      {
+      if (scalar @component_files > 0)
+        {
+        # previous component contained some A, M or R files
+        print @component_files;
+        } 
+      if ($clean_count > 0)
+        {
+        print "$repo\tsame\t$last_component\t...\t$clean_count\n";
+        }
+      # reset, ready for next component;
+      $last_component = $component;
+      $clean_count = 0;
+      @component_files = ();
+      @clean_files = ();
+      }
+    if ($change eq "C")
+      {
+      $clean_count += 1;
+      push @clean_files, "$repo\tsame\t$component\t$file\t1\n";
+      }
+    else
+      {
+      push @component_files, "$repo\t$change\t$component\t$file\t1\n";
+      }
+    } 
+  }
\ No newline at end of file