Skip to content

Commit 0b9fc6f

Browse files
authored
Merge pull request #253 from JuliaRobotics/feat/1Q20/tarsavedfg
save and load to gzip as default
2 parents 53da464 + 740c675 commit 0b9fc6f

File tree

2 files changed

+46
-6
lines changed

2 files changed

+46
-6
lines changed

src/FileDFG/services/FileDFG.jl

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ v1 = addVariable!(dfg, :a, ContinuousScalar, labels = [:POSE], solvable=0)
1414
saveDFG(dfg, "/tmp/saveDFG")
1515
```
1616
"""
17-
function saveDFG(dfg::G, folder::String) where G <: AbstractDFG
17+
function saveDFG(dfg::AbstractDFG, folder::String; compress::Symbol=:gzip)
1818
variables = getVariables(dfg)
1919
factors = getFactors(dfg)
2020
varFolder = "$folder/variables"
@@ -43,6 +43,19 @@ function saveDFG(dfg::G, folder::String) where G <: AbstractDFG
4343
JSON2.write(io, fPacked)
4444
close(io)
4545
end
46+
47+
# compress newly saved folder, skip if not supported format
48+
!(compress in [:gzip]) && return
49+
savepath = folder[end] == '/' ? folder[1:end-1] : folder
50+
savedir = dirname(savepath)
51+
savename = splitpath(string(savepath))[end]
52+
@assert savename != ""
53+
# temporarily change working directory to get correct zipped path
54+
here = Base.pwd()
55+
Base.cd(savedir)
56+
run(`tar -zcf $savepath.tar.gz $savename`)
57+
Base.rm(savename, recursive=true)
58+
Base.cd(here)
4659
end
4760

4861
"""
@@ -56,20 +69,46 @@ using DistributedFactorGraphs, IncrementalInference
5669
# Create a DFG - can make one directly, e.g. GraphsDFG{NoSolverParams}() or use IIF:
5770
dfg = initfg()
5871
# Load the graph
59-
loadDFG("/tmp/savedgraph", IncrementalInference, dfg)
72+
loadDFG("/tmp/savedgraph.tar.gz", IncrementalInference, dfg)
73+
loadDFG("/tmp/savedgraph", IncrementalInference, dfg) # alternative
6074
# Use the DFG as you do normally.
6175
ls(dfg)
6276
```
6377
"""
64-
function loadDFG(folder::String, iifModule, dfgLoadInto::G) where G <: AbstractDFG
78+
function loadDFG(dst::String, iifModule, dfgLoadInto::G; loaddir=joinpath("/","tmp","caesar","random")) where G <: AbstractDFG
79+
# Check if zipped destination (dst) by first doing fuzzy search from user supplied dst
80+
folder = dst # working directory for fileDFG variable and factor operations
81+
dstname = dst # path name could either be legacy FileDFG dir or .tar.gz file of FileDFG files.
82+
unzip = false
83+
# add if doesn't have .tar.gz extension
84+
lastdirname = splitpath(dstname)[end]
85+
if !isdir(dst)
86+
unzip = true
87+
sdst = split(lastdirname, '.')
88+
if sdst[end] != "gz" # length(sdst) == 1 &&
89+
dstname *= ".tar.gz"
90+
lastdirname *= ".tar.gz"
91+
end
92+
end
93+
# do actual unzipping
94+
if unzip
95+
@show sfolder = split(dstname, '.')
96+
Base.mkpath(loaddir)
97+
folder = joinpath(loaddir, lastdirname[1:(end-length(".tar.gz"))]) #splitpath(string(sfolder[end-2]))[end]
98+
@info "loadDFG detected a gzip $dstname -- unpacking via $loaddir now..."
99+
Base.rm(folder, recursive=true, force=true)
100+
# unzip the tar file
101+
run(`tar -zxf $dstname -C $loaddir`)
102+
end
103+
# extract the factor graph from fileDFG folder
65104
variables = DFGVariable[]
66105
factors = DFGFactor[]
67106
varFolder = "$folder/variables"
68107
factorFolder = "$folder/factors"
69108
# Folder preparations
70109
!isdir(folder) && error("Can't load DFG graph - folder '$folder' doesn't exist")
71-
!isdir(varFolder) && error("Can't load DFG graph - folder '$folder' doesn't exist")
72-
!isdir(factorFolder) && error("Can't load DFG graph - folder '$folder' doesn't exist")
110+
!isdir(varFolder) && error("Can't load DFG graph - folder '$varFolder' doesn't exist")
111+
!isdir(factorFolder) && error("Can't load DFG graph - folder '$factorFolder' doesn't exist")
73112

74113
varFiles = readdir(varFolder)
75114
factorFiles = readdir(factorFolder)

test/fileDFGTests.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
saveDFG(dfg, saveFolder)
3333

3434
copyDfg = DistributedFactorGraphs._getDuplicatedEmptyDFG(dfg)
35-
retDFG = loadDFG(saveFolder, Main, copyDfg)
35+
@info "Going to load $saveFolder"
36+
retDFG = loadDFG(saveFolder*".tar.gz", Main, copyDfg, loaddir="/tmp")
3637

3738
@test symdiff(ls(dfg), ls(retDFG)) == []
3839
@test symdiff(lsf(dfg), lsf(retDFG)) == []

0 commit comments

Comments
 (0)