#!/usr/bin/perl ################################################################################ # # Copyright (c) 2011, Perforce Software, Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL PERFORCE SOFTWARE, INC. BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # = Description # # Collect the full integration history of a file which can be replayed # with //depot/main/p4-tools/server/filelog-rebuild.rb # # = Usage # # integ-history.pl [-C0|-C1] a_filename_in_depot_syntax > history.log # # = Important note: # # Automatic case sensitivity detection for 2010.1 server or greater, # for previous server releases, you must specify the -C flag: # 0 for case sensitive server # 1 for case insensitive server # ################################################################################ my %found; sub cmdUsage { printf("Usage: integ-history.pl [-C0|-C1] filename_in_depot_syntax\n"); exit(0); } sub caseHandling { my $caseType = "sensitive"; my @result = `p4 info`; foreach my $line (@result) { if ($line =~ /(Server version: .*)/) { printf("%s\n",$1); } else { if ($line =~ /Case Handling: (.*)/) { printf("Case Handling detected: %s\n",$1); $caseType = $1; } } } return $caseType; } sub filelog { my $file = shift; my $caseType = shift; if ($caseType eq "insensitive") { $file = lc($file); } if (!defined $found{$file}) { $found{$file} = 1; my @result = `p4 filelog -1 -t "$file"`; print @result; foreach my $line (@result) { if ($line =~ /... ... .* (\/\/.*?)#/ ) { filelog($1, $caseType); } } } } my $file = NULL; my $caseType = caseHandling(); while (my $arg = shift @ARGV) { if ($arg eq "-C0") { $caseType = "sensitive"; } else { if ($arg eq "-C1") { $caseType = "insensitive"; } else { $file = $arg; } } } if ( ($file eq NULL) || ($file !~ /\/\/.*/) ) { cmdUsage(); } printf("Case Handling selected: %s\n",$caseType); filelog($file,$caseType);