From b699e664364356b1719bb1ed4d6da94b16f92a91 Mon Sep 17 00:00:00 2001 From: Keith James Date: Thu, 17 Aug 2023 11:44:41 +0100 Subject: [PATCH] De-duplicate and sort metadata and ACLs before updating This improves efficiency and sorting makes operations consistent. --- src/npg_irods/common.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/npg_irods/common.py b/src/npg_irods/common.py index f7b9e2fd..36182e36 100644 --- a/src/npg_irods/common.py +++ b/src/npg_irods/common.py @@ -213,6 +213,8 @@ def update_metadata(item: Collection | DataObject, avus: list[AVU]) -> bool: True if any changes were made, False if the desired metadata were already present. """ + avus = sorted(set(avus)) # Ensure no duplicates, sort for reproducibility + log.info("Updating metadata", path=item, meta=avus) num_removed, num_added = item.supersede_metadata(*avus, history=True) log.info( @@ -248,6 +250,8 @@ def update_permissions( f"Cannot recursively update permissions on a data object: {item}" ) + acl = sorted(set(acl)) # Ensure no duplicates, sort for reproducibility + if has_mixed_ownership(acl): log.warn("Mixed-study data", path=item, acl=acl) for ac in acl: