added borg extract functionality
This commit is contained in:
parent
c659fe3212
commit
00c2696f82
3 changed files with 29 additions and 5 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
|||
bin
|
||||
*.toml
|
||||
test
|
||||
|
|
|
@ -47,8 +47,8 @@ proc backupSources(nc: NorgConfig, repo: Repository): int =
|
|||
let archivename = repo.path & "::" & genArchiveName()
|
||||
let res = run genCommand(cmd = "create", repo = archivename, others = others)
|
||||
let end_time = now()
|
||||
let elapsed = (end_time - start_time)
|
||||
let total = elapsed.inMilliSeconds()
|
||||
let total = (end_time - start_time).inMilliSeconds()
|
||||
case res
|
||||
of 0:
|
||||
notify(nc.notifiers, state=Success, runtime=total)
|
||||
of 1:
|
||||
|
@ -62,7 +62,6 @@ proc listArchives(nc: NorgConfig, repo: Repository): int =
|
|||
|
||||
proc mountArchive(nc: NorgConfig, repo: Repository): int =
|
||||
let archive = repo.path & "::" & nc.args.others[0]
|
||||
echo archive
|
||||
let others = nc.args.others[1..^1]
|
||||
let ok = runDiscard genCommand(cmd = "mount", repo = archive, others = others)
|
||||
if ok == 0:
|
||||
|
@ -70,7 +69,6 @@ proc mountArchive(nc: NorgConfig, repo: Repository): int =
|
|||
else:
|
||||
echo "Failed to mount ", archive
|
||||
|
||||
|
||||
proc unmountArchive(nc: NorgConfig): int =
|
||||
let ok = runDiscard genCommand(cmd = "umount", repo = "", others = nc.args.others)
|
||||
if ok == 0:
|
||||
|
@ -78,6 +76,26 @@ proc unmountArchive(nc: NorgConfig): int =
|
|||
else:
|
||||
echo "Failed to unmount ", nc.args.others[0]
|
||||
|
||||
proc isEmpty(dir: string): bool =
|
||||
var count = 0
|
||||
for idx, f in walkDir(dir): return false
|
||||
#count += 1
|
||||
return count == 0
|
||||
|
||||
proc extractArchive(nc: NorgConfig, repo: Repository): int =
|
||||
let archive = repo.path & "::" & nc.args.others[0]
|
||||
var others = nc.args.others[1..^1]
|
||||
if nc.args.extract_destination != "":
|
||||
discard existsOrCreateDir(nc.args.extract_destination)
|
||||
setCurrentDir(nc.args.extract_destination)
|
||||
let dir = getCurrentDir()
|
||||
if dir.isEmpty():
|
||||
echo "Restoring..."
|
||||
let ok = run(genCommand(cmd = "extract", repo = archive, others = others))
|
||||
return ok
|
||||
else:
|
||||
echo "Not restoring to non-empty destination\r\nPlease use the --destination flag"
|
||||
|
||||
proc execute*(nc: NorgConfig) =
|
||||
putEnv("BORG_PASSPHRASE", nc.getEncryptionPassword())
|
||||
for repo in nc.repositories:
|
||||
|
@ -94,4 +112,6 @@ proc execute*(nc: NorgConfig) =
|
|||
discard mountArchive(nc, repo)
|
||||
of "umount":
|
||||
discard unmountArchive(nc)
|
||||
of "extract":
|
||||
discard extractArchive(nc, repo)
|
||||
delEnv("BORG_PASSPHRASE")
|
||||
|
|
|
@ -3,6 +3,7 @@ import argparse
|
|||
type
|
||||
NorgArgs* = object
|
||||
config_file*: string
|
||||
extract_destination*: string
|
||||
borg_cmd*: string
|
||||
others*: seq[string]
|
||||
|
||||
|
@ -11,11 +12,13 @@ var norg_args*: NorgArgs = NorgArgs()
|
|||
proc parseArgs*() =
|
||||
var p = newParser:
|
||||
option("-c", "--config", help="Config file to use", required = true)
|
||||
arg("borg_cmd", default=some("backup"))
|
||||
option("-d", "--destination", help="Destination when extracting backup", required = false)
|
||||
arg("borg_cmd", default=some("list"))
|
||||
arg("others", nargs = -1)
|
||||
try:
|
||||
var opts = p.parse(commandLineParams())
|
||||
norg_args.config_file = opts.config
|
||||
norg_args.extract_destination = opts.destination
|
||||
norg_args.borg_cmd = opts.borg_cmd
|
||||
norg_args.others = opts.others
|
||||
|
||||
|
|
Loading…
Reference in a new issue