#!/usr/bin/ruby ################################################################################ # # 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.rb [-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 # ################################################################################ FOUND = Hash.new require "open3" def cmdUsage puts("Usage: integ-history.rb [-C0|-C1] filename_in_depot_syntax") exit(0) end def caseHandling() caseType = "sensitive" result = `p4 info` result.each_line do |line| if line =~ /(Server version: .*)/ puts($1) else if line =~ /Case Handling: (.*)/ printf("Case Handling detected: %s\n",$1) caseType = $1 end end end return caseType end def filelog(file,caseType) if caseType == "insensitive" file = file.downcase end if !FOUND.has_key?(file) FOUND[file] = true result, i = Open3.capture2( "p4", "filelog", "-1", "-t", "#{file}" ) puts(result) result.each_line do |line| if line =~ /... ... .* (\/\/.*?)#/ filelog($1,caseType) end end end end def integHistory(arguments) file = nil caseType = caseHandling() arguments.each do |arg| if (arg == "-C0") caseType = "sensitive" else if (arg == "-C1") caseType = "insensitive" else file = arg end end end if (!file || file !~ /\/\/.*/) cmdUsage() end printf("Case Handling selected: %s\n",caseType) filelog(file, caseType) end integHistory(ARGV)