From 080690ed71a3c17b844bce0033d8f871e7e1aa19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Laurent?= <francois.laurent@posteo.net>
Date: Mon, 13 Feb 2023 19:25:50 +0100
Subject: [PATCH] pushdependency! checks for duplicates
 (https://gitlab.pasteur.fr/nyx/larvatagger.jl/-/issues/97)

---
 src/Datasets.jl | 7 ++++++-
 src/Formats.jl  | 8 ++++----
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/Datasets.jl b/src/Datasets.jl
index 723741b..5f655c0 100644
--- a/src/Datasets.jl
+++ b/src/Datasets.jl
@@ -1221,7 +1221,12 @@ end
 function pushdependency!(run::Run, datafile::String)
     if haskey(run.attributes, :dependencies)
         deps = object_or_array_of_objects(run.attributes[:dependencies])
-        push!(deps, as_dependency(datafile))
+        dep = as_dependency(datafile)
+        if (deps isa Vector && dep in deps) || dep == deps
+            @debug "Dependency already registered" dependency=dep
+        else
+            push!(deps, dep)
+        end
         run.attributes[:dependencies] = deps
     else
         run.attributes[:dependencies] = as_dependency(datafile)
diff --git a/src/Formats.jl b/src/Formats.jl
index eea33f6..1273d6b 100644
--- a/src/Formats.jl
+++ b/src/Formats.jl
@@ -520,13 +520,13 @@ function load!(file::FIMTrack)
                                  framerate=file.framerate,
                                  pixelsize=file.pixelsize,
                                  kwargs...))
-    metadata = get!(file.run.attributes, :metadata, OrderedDict{Symbol, Any}())
-    camera = get!(metadata, :camera, OrderedDict{Symbol, Any}())
+    metadata = get!(OrderedDict{Symbol, Any}, file.run.attributes, :metadata)
+    camera = get!(OrderedDict{Symbol, Any}, metadata, :camera)
     camera[:framerate] = file.framerate
     if !isnothing(file.pixelsize)
         camera[:pixelsize] = file.pixelsize
     end
-    units = get!(file.run.attributes, :units, OrderedDict{Symbol, String}())
+    units = get!(OrderedDict{Symbol, String}, file.run.attributes, :units)
     units[:t] = "s"
     units[:framerate] = "fps"
     if !isnothing(file.pixelsize)
@@ -594,7 +594,7 @@ function labelledfiles(repository::String=".", chunks::Bool=false;
                 push!(files′, file′)
                 if file′ isa JSONLabels
                     for dep in getdependencies(file′)
-                        push!(get!(deps, dep, JSONLabels[]), file′)
+                        push!(get!(()->JSONLabels[], deps, dep), file′)
                     end
                 end
             end
-- 
GitLab