from __future__ import print_function import P4 import sys class IntegratedChanges: def __init__(self, p4, submitted_change): self.p4 = p4 self.change = submitted_change self.integrated_changes = set() self.integrated_files = set() self.integrated_description = p4.run_describe('-s', submitted_change)[0]['desc'] filelog = self.p4.run_filelog("@{0},{0}".format(submitted_change)) for depotFile in filelog: for revision in depotFile.revisions: for integration in revision.integrations: if integration.how == "copy from": startrev = int(integration.srev) + 1 endrev = int(integration.erev) + 1 for i in range(startrev, endrev): self.integrated_files.add("{}#{}".format(integration.file, i)) integrated_change = self.p4.run_changes("{0}#{1},{1}".format(integration.file, i))[0] self.integrated_changes.add(integrated_change['change']) for change in self.integrated_changes: desc = p4.run_describe('-s', change)[0] use_change = True for file, rev in zip(desc['depotFile'], desc['rev']): file_rev = "{}#{}".format(file, rev) if file_rev not in self.integrated_files: use_change = False if use_change: self.integrated_description += "\n-------------\nIntegrated change {}: {}".format(change, desc['desc']) if __name__ == '__main__': if len(sys.argv) < 2: print("Usage : {} #change".format(sys.argv[0])) sys.exit(1) change = sys.argv[1] p4 = P4.P4() with p4.connect(): integrated_changes = IntegratedChanges(p4, change) print(integrated_changes.integrated_description)