#!/usr/bin/env python ################################################################################ # # 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 # # = Usage # # integ-history.py [-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 # ################################################################################ import getopt import re from subprocess import Popen, PIPE import sys FOUND = set() def cmdUsage(): print >> sys.stderr, "Usage: integ-history.py [-C0|-C1] filename_in_depot_syntax" exit(0) def caseHandling(): caseType = "sensitive" p = Popen('p4 info', shell=True, stdout=PIPE).stdout for line in p.read().splitlines(): match = re.search('(Server version: .*)', line) if match: print match.group(1) else: match = re.search('Case Handling: (.*)', line) if match: print "Case Handling detected:",match.group(1) caseType = match.group(1) return caseType def filelog(file,caseType): if caseType == "insensitive": file = file.lower() if not file in FOUND: FOUND.add(file) cmd = [ 'p4', 'filelog', '-1', '-t', file ] p = Popen(cmd, stdout=PIPE).stdout s = p.read() for line in s.splitlines(): print line for line in s.splitlines(): match = re.search('... ... .* (\/\/.*?)#', line) if match: filelog(match.group(1),caseType) if __name__ == '__main__': caseType = caseHandling() options, remainder = getopt.getopt(sys.argv[1:], 'C:') for opt, arg in options: if (opt == '-C'): if (arg == '1'): caseType = "sensitive" else: caseType = "insensitive" if not remainder: cmdUsage() file = remainder[0] match = re.search('\/\/.*', file) if not file or not match: cmdUsage() print "Case Handling selected:",caseType filelog(file, caseType)