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)
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 22579 | Sven Erik Knop | Updated copyright notice | ||
#1 | 22578 | Sven Erik Knop |
Little example tool to identify which changes have been completely integrated via copy. The tool will collect the respective change descriptions and append them to the existing change description. Note that this script only prints out the resulting change description. A trigger might run 'p4 change -f' to update the integration description. |