diff --git a/osclib/origin.py b/osclib/origin.py index 4b8f5ea0..bb4f05e5 100644 --- a/osclib/origin.py +++ b/osclib/origin.py @@ -480,3 +480,31 @@ def policy_input_evaluate_reviews_not_allowed(policy, inputs): reviews_not_allowed.append(review_remaining) return reviews_not_allowed + +def origin_revision_state(apiurl, target_project, package, origin_info=None, limit=10): + if not origin_info: + origin_info = origin_find(apiurl, target_project, package) + + revisions = [] + + # Allow for origin project to contain revisions not present in target by + # considering double the limit of revisions. The goal is to know how many + # revisions behind the package in target project is and if it deviated from + # origin, not that it ended up with every revision found in origin project. + origin_project = origin_info.project.rstrip('~') + origin_hashes = list(package_source_hash_history(apiurl, origin_project, package, limit * 2, True)) + target_hashes = list(package_source_hash_history(apiurl, target_project, package, limit)) + for source_hash in origin_hashes: + if source_hash not in target_hashes: + revisions.append(-1) + else: + break + + for source_hash in target_hashes: + if len(revisions) == limit: + break + + revisions.append(int(source_hash in origin_hashes)) + + # To simplify usage which is left-right (oldest-newest) place oldest first. + return list(reversed(revisions))