Commit Graph

906 Commits

Author SHA1 Message Date
Dietmar Maurer 45cdce069e src/client/http_client.rs: request password at creation time 2019-04-30 11:44:35 +02:00
Dietmar Maurer e45afdff9c src/server/state.rs: use new BroadcastData helper 2019-04-30 10:21:48 +02:00
Dietmar Maurer 824b5ee4ee src/tools/broadcast_future.rs: cleanup, decompose into two classes
In order to make it more usable.
2019-04-30 08:57:20 +02:00
Wolfgang Bumiller d82ed9b0f5 tools: add AsyncMutex
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-29 14:19:03 +02:00
Dietmar Maurer 3a9bea3918 src/bin/h2test.rs: test h2 upgrade 2019-04-29 11:59:18 +02:00
Dietmar Maurer cf639a47de rc/client/http_client.rs: add experimental h2 upgrade code 2019-04-29 11:57:58 +02:00
Dietmar Maurer 5a2df00004 src/client/http_client.rs: cleanup, make login fully async 2019-04-28 10:55:03 +02:00
Dietmar Maurer 3dceb9b304 src/tools/broadcast_future.rs: add new constructor new_oneshot()
To simplify usage. Also added a test case.
2019-04-27 10:56:49 +02:00
Dietmar Maurer 152764ec15 src/api2/admin/datastore/h2upload.rs: add test code for http2 2019-04-27 08:57:35 +02:00
Dietmar Maurer 490be29ed6 src/tools/broadcast_future.rs: new helper class 2019-04-26 17:57:57 +02:00
Wolfgang Bumiller e888155712 proxy: allow .key/.pem files instead of a pkcs12/.pfx file
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-26 10:47:33 +02:00
Christian Ebner 8b7c0def84 src/tools/procfs.rs: clean up tab indentation and use whitespaces instead
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-25 13:14:52 +02:00
Wolfgang Bumiller 5e5eed5c3b use double-fork for reload
To ensure the new process' parent is pid 1, so systemd won't
complain about supervising a process it does not own.

Fixes the following log spam on reloads:
Apr 25 10:50:54 deb-dev systemd[1]: proxmox-backup.service: Supervising process 1625 which is not our child. We'll most likely not notice when it exits.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-25 11:02:12 +00:00
Wolfgang Bumiller efd1536eb7 add a wrapper around nix::unistd::pipe2
Using O_CLOEXEC by default, and returning Fd handles to
ensure they get dropped on bail!() or panic!() if the RawFds
aren't used yet.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-25 11:02:12 +00:00
Wolfgang Bumiller 897982e237 tools: add read/write convenience helpers
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-25 11:02:12 +00:00
Wolfgang Bumiller d98c9a7a38 use service Type=notify
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-25 11:01:33 +00:00
Wolfgang Bumiller 9c351a36c4 tools/daemon: add sd_notify wrapper
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-25 11:01:28 +00:00
Dietmar Maurer d8871f2f18 src/tools/procfs.rs: avoid useless allocations 2019-04-24 09:35:15 +02:00
Christian Ebner ae694f44ef src/tools/procfs.rs: add tests for read_proc_net_route() and read_proc_net_ipv6_route()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-24 06:43:52 +02:00
Christian Ebner ec8db837fb src/tools/procfs.rs: refactor read_proc_net_route() and read_proc_net_ipv6_route()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-24 06:43:32 +02:00
Christian Ebner eb46c3d1ec src/tools/procfs.rs: implement read_proc_net_ipv6_route()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-23 14:31:23 +02:00
Dietmar Maurer 6358b68236 cleanup: avoid compiler warnings 2019-04-23 12:17:24 +02:00
Dietmar Maurer e06ffb10d1 src/api_schema/router.rs: fix typo (subdira -> subdir) 2019-04-16 12:20:17 +02:00
Dietmar Maurer 13f1cc17ea src/api_schema/router.rs: implement list_subdirs() helper 2019-04-16 12:07:02 +02:00
Wolfgang Bumiller 062d4916ff api_schema: allow generic api handler functions
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-16 11:22:23 +02:00
Christian Ebner 286f0d4099 src/tools/procfs.rs: implement read_proc_net_route()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-15 11:13:16 +02:00
Dietmar Maurer 1a6c9415ae src/api2/node/services.rs: add proxmox-backup-proxy service 2019-04-15 09:48:02 +02:00
Dietmar Maurer 75bc49bed7 src/server/worker_task.rs: implement abort channel 2019-04-15 09:38:05 +02:00
Dietmar Maurer 912524752e src/api2/admin/datastore/pxar.rs: create worker task for file upload 2019-04-15 08:38:14 +02:00
Dietmar Maurer 1be71fb02b src/server/worker_task.rs_ do not write ERROR: prefix into task index 2019-04-15 08:37:13 +02:00
Dietmar Maurer 418def7a78 src/server/worker_task.rs: move common code into log_result
Make new() pub
2019-04-15 07:49:03 +02:00
Dietmar Maurer 37b87869b5 src/server/upid.rs: check for illegal characters 2019-04-15 07:47:51 +02:00
Christian Ebner d2981e2738 src/tools/procfs.rs: implement read_proc_net_dev()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-13 11:52:59 +02:00
Christian Ebner 13abfdc57a src/tools/procfs.rs: implement read_memory_usage()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-13 11:52:01 +02:00
Christian Ebner 3005ef48b6 src/tools/procfs.rs: Rename variable and struct to be more consistent
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-12 12:13:34 +02:00
Christian Ebner cc93bacb72 src/tools/procfs.rs: simplify read_cpuinfo()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-12 12:13:14 +02:00
Dietmar Maurer f2b99c34f7 src/api2/admin/datastore.rs: implement API to return last GC status 2019-04-11 12:04:25 +02:00
Dietmar Maurer 59961b8954 src/server/command_socket.rs: check control socket permissions 2019-04-11 10:51:59 +02:00
Dietmar Maurer ba70040dbf src/server/worker_task.rs: change task list sort order - latest on top 2019-04-11 09:43:33 +02:00
Dietmar Maurer d3f4c08f33 src/server/worker_task.rs: catch panics in worker threads 2019-04-11 07:56:06 +02:00
Wolfgang Bumiller 620dccf1a1 tools/daemon: dup the TcpListener file descriptor
Now that we let hyper shutdown gracefully we need an owned
version of the listening socket to prevent it from closing
before running the reload preparations.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-10 15:20:10 +02:00
Wolfgang Bumiller d96bb7f163 tools: add Fd helper
stores a raw file descriptor with a drop handler for
safekeeping in closures

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-04-10 15:20:10 +02:00
Christian Ebner 1cd33633aa /src/tools: Cleanup tempfiles in folder
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-10 13:56:22 +02:00
Dietmar Maurer a665dea128 src/api2/node/tasks.rs: implement stop_task api 2019-04-10 13:55:05 +02:00
Dietmar Maurer 98a181f055 src/server/worker_task.rs: log message when we call request_abort() 2019-04-10 13:54:28 +02:00
Christian Ebner 2b6a3e1396 src/tools/procfs.rs: implement read_cpuinfo()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-10 13:11:11 +02:00
Dietmar Maurer 321070b4fa src/server/worker_task.rs: implement abort_worker (via command_socket) 2019-04-10 12:42:24 +02:00
Dietmar Maurer cfb2d3c17c src/server/command_socket.rs: correctly handle/spawn handle parallel connections 2019-04-10 11:05:00 +02:00
Dietmar Maurer 9b002cbc5f src/server/worker_task.rs: use abstract socket 2019-04-10 09:03:17 +02:00
Dietmar Maurer 5f550fd99f start hyper server using with_graceful_shutdown()
Without, hyper keeps some futures running, and the server does not
correctly shutdown.
2019-04-10 08:24:32 +02:00
Dietmar Maurer 7f2078de59 src/tools/procfs.rs: avoid compiler warning 2019-04-10 06:40:29 +02:00
Christian Ebner 1f6fbf1c57 src/tools/procfs.rs: implement read_meminfo()
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-09 15:21:49 +02:00
Dietmar Maurer c360bd73d3 src/api2/node/tasks.rs: fix task status api 2019-04-09 15:12:20 +02:00
Dietmar Maurer 0bfd87bc5e src/server/worker_task.rs: speedup upid_read_status() 2019-04-09 15:11:48 +02:00
Dietmar Maurer d8d40dd0c2 src/api2/node.rs: add node parameter 2019-04-09 14:43:30 +02:00
Dietmar Maurer 7ae0bf52dd src/server/command_socket.rs: code cleanup - fix error message 2019-04-09 12:47:42 +02:00
Dietmar Maurer d607b8861b src/server/worker_task.rs: implement task control socket 2019-04-09 12:15:06 +02:00
Dietmar Maurer e201753629 src/server/command_socket.rs: implement auto_remove flag
Remove the socket file on close.
2019-04-09 11:47:23 +02:00
Dietmar Maurer 634132fe10 src/server/upid.rs: moved code into separate file 2019-04-08 18:43:26 +02:00
Dietmar Maurer 78a39e0517 src/server/command_socket.rs: simple command socket 2019-04-08 17:59:39 +02:00
Dietmar Maurer e3f41f2165 src/tools/daemon.rs: use new ServerState handler 2019-04-08 14:00:23 +02:00
Dietmar Maurer 7a630df709 implement server state/signal handling, depend on tokio-signal 2019-04-08 13:59:07 +02:00
Dietmar Maurer 5a12c0e2fb src/api2/node/tasks.rs: start upid API 2019-04-07 14:36:57 +02:00
Dietmar Maurer b75b968147 src/server/worker_task.rs: implement is_active() 2019-04-07 14:36:25 +02:00
Dietmar Maurer 4494d07819 src/server/worker_task.rs: make log_path a method on UPID 2019-04-07 13:51:46 +02:00
Dietmar Maurer d2a2e02bb7 src/api2/node/tasks.rs: implement userfilter 2019-04-07 13:17:19 +02:00
Dietmar Maurer 3c3bee2e32 src/api2/node/tasks.rs: correctly handle start parameter 2019-04-07 12:41:24 +02:00
Dietmar Maurer 063ca5be77 src/api2/node/tasks.rs: implement list_tasks 2019-04-07 12:18:58 +02:00
Dietmar Maurer d4b59ae0b8 src/backup/datastore.rs: pass WorkerTask to GC
So that we can log to the task log file.
2019-04-06 17:57:38 +02:00
Dietmar Maurer 35950380a9 src/server/worker_task.rs: carefully handle file permissions 2019-04-06 17:53:12 +02:00
Dietmar Maurer 1619a72063 src/tools.rs: implement create_dir_chown
Combinded mkdir with chown.
2019-04-06 16:50:23 +02:00
Dietmar Maurer eea8131952 src/tools.rs: implement file_set_contents_full() 2019-04-06 13:53:43 +02:00
Dietmar Maurer 0f778e0652 src/api2/admin/datastore.rs: use new WorkerTask::new_thread() 2019-04-06 11:27:23 +02:00
Dietmar Maurer 244abab769 src/tools/file_logger.rs: fix test 2019-04-06 11:24:37 +02:00
Dietmar Maurer 660c684640 src/server/worker_task.rs: return upid_str 2019-04-06 11:23:53 +02:00
Dietmar Maurer 93aebb38bc src/server/worker_task.rs: implement read_task_list() 2019-04-06 10:17:11 +02:00
Dietmar Maurer 4a36a2c999 src/server/worker_task.rs: improve UPID format description 2019-04-06 09:36:50 +02:00
Dietmar Maurer 882594c5e9 src/server.rs: improve crate layout 2019-04-06 09:17:25 +02:00
Dietmar Maurer 4b01c983f0 src/server/worker_task.rs: implement persistent task list 2019-04-05 12:37:35 +02:00
Christian Ebner a2474d328f src/tools/procfs.rs: implement read_proc_uptime and read_proc_uptime_ticks
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-05 06:22:21 +02:00
Christian Ebner 08daa81af6 procfs: implement check_process_running and check_process_running_pstart
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-04-04 13:54:17 +02:00
Dietmar Maurer 9a0d0ff774 server/worker_task.rs: implement UPID parser 2019-04-04 13:49:35 +02:00
Dietmar Maurer 49cf9f3d0b src/tools.rs: file_get_json() - add new default parameter 2019-04-04 12:24:18 +02:00
Dietmar Maurer 79ad7b7ec2 src/tools/procfs.rs: split regex into several lines 2019-04-04 09:25:19 +02:00
Dietmar Maurer 479f6e40ec src/server/worker_task.rs: implement task registry 2019-04-04 08:58:39 +02:00
Dietmar Maurer 52ddc2522d src/tools/procfs.rs: use libc::pid_t 2019-04-04 08:05:43 +02:00
Dietmar Maurer d3d7ab1273 src/tools/file_logger.rs: new - accept AsRef<Path> 2019-04-03 14:13:33 +02:00
Dietmar Maurer 3c2012f97a src/tools/procfs.rs: start helper tools to read procfs 2019-04-03 13:39:20 +02:00
Dietmar Maurer 3489936ebb src/tools/file_logger.rs: change timestamp format to rfc3339 2019-04-03 08:58:43 +02:00
Dietmar Maurer 92da93b245 abort GC on server shutdown 2019-04-01 12:13:02 +02:00
Dietmar Maurer 9136f857cc add global var to indicate server shutdown requests 2019-04-01 12:05:11 +02:00
Dietmar Maurer 3e6a7deeaa src/api2/admin/datastore.rs: start GC in a separate thread 2019-04-01 12:02:46 +02:00
Dietmar Maurer ad281d1bd9 www/DataStoreConfig.js: add button to start GC 2019-04-01 08:08:34 +02:00
Dietmar Maurer 49d123ee3a src/server/rest.rs: use formatter to encode errors 2019-04-01 08:04:12 +02:00
Dietmar Maurer 7d4ef127cb src/server/rest.rs: generate csrf token if we have a valid ticket
This is important if the user reloads the browser page.
2019-04-01 07:52:30 +02:00
Dietmar Maurer 11861a482d src/backup/chunk_store.rs: fix GC
Added option to get oldest_writer timestamp from ProcessLocker.
2019-03-31 17:21:36 +02:00
Dietmar Maurer d85987aeeb fix last commit: the filename var was not ment to be removed, sorry 2019-03-31 16:16:14 +02:00
Dietmar Maurer 15a77c4c2e src/backup/chunk_store.rs: avoid create/unlink race 2019-03-31 10:03:01 +02:00
Dietmar Maurer c374f05499 src/backup.rs: improve GC problem description 2019-03-31 09:44:35 +02:00
Dietmar Maurer c8ec450e37 src/backup.rs: start explaining different GC algorithm 2019-03-30 17:21:40 +01:00
Dietmar Maurer 8a4757342c src/backup.rs: describe the garbage collection problem 2019-03-30 16:26:52 +01:00
Dietmar Maurer 10eea49d81 src/backup/fixed_index.rs: store reference to file
Keep it open and locked while index is in use.
2019-03-27 10:17:03 +01:00
Dietmar Maurer c597a92c81 index file readers: aquire shared lock 2019-03-27 10:11:14 +01:00
Dietmar Maurer 0465218953 src/backup.rs: add documentation about ChunkStore locking 2019-03-22 10:14:50 +01:00
Dietmar Maurer 43b1303398 datastore: use new ProcessLocker
To make sure only one process runs garbage collection while having active writers.
2019-03-22 09:42:15 +01:00
Dietmar Maurer abfc001f25 src/tools/process_locker.rs: new() - use generic path parameter 2019-03-22 09:41:32 +01:00
Dietmar Maurer a650f50301 src/tools/process_locker.rs: implement inter-process reader-writer locks 2019-03-22 08:05:51 +01:00
Wolfgang Bumiller eb90c9e372 tools: style fixup
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-20 09:57:13 +01:00
Christian Ebner e04d1bfadc Cleanup of if statement with unwraps by a more compact match statement
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-03-20 09:49:18 +01:00
Dietmar Maurer 8346f0d59b src/server/rest.rs: correctly extract content type 2019-03-19 12:50:15 +01:00
Wolfgang Bumiller a690ecacf0 daemon: simplify daemon creation
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-19 12:12:54 +01:00
Wolfgang Bumiller e4311382d9 tools: daemon: rename some structs
Reloadable resources are now 'Reloadable' instead of
'ReexecContinue'.

The struct handling the reload is a 'Reloader', not a
'ReexecStore'.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-19 11:09:46 +01:00
Wolfgang Bumiller 5e7bc50af1 add reload support to api daemon
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-18 12:29:18 +01:00
Wolfgang Bumiller a2ca713701 add reload support to proxy
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-18 12:29:18 +01:00
Wolfgang Bumiller af70c1811b tools: implement ReexecContinue for tokio's TcpListener
This is the only thing we currently need to keep alive for
reloads.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-18 12:29:18 +01:00
Wolfgang Bumiller 4422ba2c7f tools: daemon: add a default signalfd helper
Proxy and daemon for now just want to handle reload via
`SIGHUP`, so provide a helper creating the signalfd stream
doing that - this is simply a filtered stream which passes
the remaining signals through, so it can be used exactly
like the signalfd stream could before to add more signals.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-18 12:29:18 +01:00
Wolfgang Bumiller dce94d0e09 tools: add daemon helpers
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-18 12:29:18 +01:00
Wolfgang Bumiller ff7049d481 tools: add fd_change_cloexec helper
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-18 12:29:18 +01:00
Wolfgang Bumiller 1c042cdc6c proxy: listener error handling fixup
If the listening socket goes into some error state we'll get
std::io::Errors rather than higher level errors from the
native_tls::TlsAcceptor, those are usually fatal. (Ran into
this after performing a shutdown() on the file descriptor,
after which the future just endlessly loops in accept().)

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-18 12:29:18 +01:00
Dietmar Maurer 60864b1b56 src/pxar.rs: improve docu 2019-03-18 12:27:30 +01:00
Dietmar Maurer 515688d1f1 avoid compiler warnings 2019-03-18 10:00:58 +01:00
Dietmar Maurer ba10f2b0d4 src/bin/dynamic-files.rs: test case for file shrink during backup 2019-03-16 14:22:14 +01:00
Dietmar Maurer af572aaa4c pxar: implement hardlinks
So we are no longer compatible with catar ...
2019-03-16 11:02:12 +01:00
Dietmar Maurer 812dd935ce src/pxar/encoder.rs: detect hardlinks 2019-03-15 12:19:51 +01:00
Dietmar Maurer 896e803feb src/pxar/sequential_decoder.rs: dump_entry - fix FIFO/SOCKET handling 2019-03-15 12:15:38 +01:00
Dietmar Maurer 7dfa17c7cc src/pxar/binary_search_tree.rs: fix test 2019-03-15 11:34:31 +01:00
Dietmar Maurer 9307279faf cleanup: remove dead code 2019-03-15 10:18:28 +01:00
Dietmar Maurer 46cfe7ab7e src/pxar/decoder.rs: implement seekable decoder 2019-03-15 09:36:05 +01:00
Dietmar Maurer 0e21b87be3 renamed: src/pxar/decoder.rs -> src/pxar/sequential_decoder.rs 2019-03-15 08:36:02 +01:00
Dietmar Maurer 3dbfe5b142 simplify pxar module structure 2019-03-15 08:24:32 +01:00
Dietmar Maurer 1ef46b81d3 src/bin/pxar.rs: implement extract 2019-03-15 08:03:44 +01:00
Dietmar Maurer 02c93163cf src/pxar/decoder.rs: correctly call callback() 2019-03-15 08:02:04 +01:00
Dietmar Maurer 5defa71bf9 rename PxarBackupWriter into PxarDecodeWriter 2019-03-15 07:20:22 +01:00
Dietmar Maurer b005ed12d5 src/client/http_client.rs: avoid compiler warning 2019-03-15 07:16:26 +01:00
Dietmar Maurer 9e26abf16b src/cli/command.rs: fix iterator usage 2019-03-15 07:12:40 +01:00
Dietmar Maurer f98746ba6c src/pxar/decoder.rs: improve docu 2019-03-15 07:12:11 +01:00
Dietmar Maurer 0b2d7fdc81 src/pxar/decoder.rs: avoid compiler warnings 2019-03-14 17:45:47 +01:00
Dietmar Maurer 37940aa1f9 src/bin/pxar.rs: implement dump/list 2019-03-14 17:43:11 +01:00
Dietmar Maurer 40360fde6e src/pxar/decoder.rs: implement dump_archive
use this to debug archive problems ...
2019-03-14 13:10:27 +01:00
Dietmar Maurer 8968258b66 rename catar into pxar
To avoid confusion with the casync implementation.
2019-03-14 10:54:09 +01:00
Dietmar Maurer 7c4dd94670 rename catar into pxar
Seems impossible to stay compatible with the original catar specification,
so we change the name to avoid confusions.
2019-03-14 10:14:32 +01:00
Dietmar Maurer 806500cd09 src/tools.rs: improve file name completion
Use current working directory by default.
2019-03-14 08:17:35 +01:00
Dietmar Maurer 08dc340a12 src/bin/proxmox-backup-client.rs: complete archive names 2019-03-14 08:09:35 +01:00
Wolfgang Bumiller 6f90a6a764 protocol: cleanup finish_backup
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-03-13 14:16:17 +01:00
Dietmar Maurer b238851832 src/bin/proxmox-backup-client.rs: implement completion for snapshots 2019-03-13 13:31:29 +01:00
Dietmar Maurer 4981134708 src/bin/proxmox-backup-client.rs: implement chunk-size completion 2019-03-13 12:26:01 +01:00
Dietmar Maurer 98f0b97293 src/bin/proxmox-backup-client.rs: cleanup 2019-03-13 12:17:39 +01:00
Dietmar Maurer 024f11bb55 src/bin/proxmox-backup-client.rs: implement completion for backup groups 2019-03-13 11:56:37 +01:00
Dietmar Maurer edd3c8c605 src/client/backup_repo.rs: implement FromStr trait 2019-03-13 10:09:39 +01:00
Dietmar Maurer 874acb7039 src/client/backup_repo.rs: implement Display trait 2019-03-13 09:57:36 +01:00