git: 6304f3ae204c - main - Add sysutils/bupstash: Easy and efficient encrypted backups

From: Li-Wen Hsu <lwhsu_at_FreeBSD.org>
Date: Sat, 05 Feb 2022 11:19:58 UTC
The branch main has been updated by lwhsu:

URL: https://cgit.FreeBSD.org/ports/commit/?id=6304f3ae204cf0ec73df4fbce36c7c9625cf67e6

commit 6304f3ae204cf0ec73df4fbce36c7c9625cf67e6
Author:     Felix Hanley <felix@userspace.com.au>
AuthorDate: 2022-02-05 11:18:58 +0000
Commit:     Li-Wen Hsu <lwhsu@FreeBSD.org>
CommitDate: 2022-02-05 11:18:58 +0000

    Add sysutils/bupstash: Easy and efficient encrypted backups
    
    PR:             261644
---
 sysutils/Makefile                           |   1 +
 sysutils/bupstash/Makefile                  | 119 +++++++++++++++++
 sysutils/bupstash/distinfo                  | 195 ++++++++++++++++++++++++++++
 sysutils/bupstash/files/patch-src_fsutil.rs |  52 ++++++++
 sysutils/bupstash/pkg-descr                 |   6 +
 5 files changed, 373 insertions(+)

diff --git a/sysutils/Makefile b/sysutils/Makefile
index 5447c4659170..8be794659ef7 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -140,6 +140,7 @@
     SUBDIR += bstack
     SUBDIR += btsixad
     SUBDIR += bulk_extractor
+    SUBDIR += bupstash
     SUBDIR += burp
     SUBDIR += burp-devel
     SUBDIR += busybox
diff --git a/sysutils/bupstash/Makefile b/sysutils/bupstash/Makefile
new file mode 100644
index 000000000000..0a6316622321
--- /dev/null
+++ b/sysutils/bupstash/Makefile
@@ -0,0 +1,119 @@
+PORTNAME=	bupstash
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.10.3
+CATEGORIES=	sysutils
+
+MAINTAINER=	felix@userspace.com.au
+COMMENT=	Easy and efficient encrypted backups
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+LIB_DEPENDS=	libsodium.so:security/libsodium
+
+USES=		cargo
+USE_GITHUB=	yes
+GH_ACCOUNT=	andrewchambers
+
+CARGO_CRATES=	ahash-0.7.4 \
+		aho-corasick-0.7.18 \
+		anyhow-1.0.41 \
+		arrayref-0.3.6 \
+		arrayvec-0.7.1 \
+		atty-0.2.14 \
+		autocfg-1.0.1 \
+		bitflags-1.2.1 \
+		blake3-1.0.0 \
+		cc-1.0.68 \
+		cfg-if-0.1.10 \
+		cfg-if-1.0.0 \
+		chrono-0.4.19 \
+		codemap-0.1.3 \
+		codemap-diagnostic-0.1.1 \
+		console-0.14.1 \
+		constant_time_eq-0.1.5 \
+		crossbeam-channel-0.5.1 \
+		crossbeam-utils-0.8.5 \
+		digest-0.9.0 \
+		encode_unicode-0.3.6 \
+		fallible-iterator-0.2.0 \
+		fallible-streaming-iterator-0.1.9 \
+		filetime-0.2.14 \
+		generic-array-0.14.4 \
+		getopts-0.2.21 \
+		getrandom-0.2.3 \
+		glob-0.3.0 \
+		hashbrown-0.11.2 \
+		hashlink-0.7.0 \
+		hermit-abi-0.1.19 \
+		humantime-2.1.0 \
+		indicatif-0.16.2 \
+		instant-0.1.9 \
+		itoa-0.4.7 \
+		lazy_static-1.4.0 \
+		libc-0.2.97 \
+		libsqlite3-sys-0.22.2 \
+		lock_api-0.4.4 \
+		lz4-1.23.2 \
+		lz4-sys-1.9.2 \
+		memchr-2.4.0 \
+		nix-0.20.0 \
+		num-integer-0.1.44 \
+		num-traits-0.2.14 \
+		number_prefix-0.4.0 \
+		once_cell-1.8.0 \
+		openat-0.1.21 \
+		parking_lot-0.11.1 \
+		parking_lot_core-0.8.3 \
+		path-clean-0.1.0 \
+		pkg-config-0.3.19 \
+		ppv-lite86-0.2.10 \
+		proc-macro2-1.0.27 \
+		quote-1.0.9 \
+		rand-0.8.4 \
+		rand_chacha-0.3.1 \
+		rand_core-0.6.3 \
+		rand_hc-0.3.1 \
+		rangemap-0.1.11 \
+		redox_syscall-0.2.9 \
+		regex-1.5.4 \
+		regex-syntax-0.6.25 \
+		remove_dir_all-0.5.3 \
+		rusqlite-0.25.3 \
+		ryu-1.0.5 \
+		same-file-1.0.6 \
+		scopeguard-1.1.0 \
+		serde-1.0.126 \
+		serde_bare-0.4.0 \
+		serde_derive-1.0.126 \
+		serde_json-1.0.64 \
+		serial_test-0.5.1 \
+		serial_test_derive-0.5.1 \
+		shlex-0.1.1 \
+		smallvec-1.6.1 \
+		syn-1.0.73 \
+		tar-0.4.35 \
+		tempfile-3.2.0 \
+		termcolor-1.1.2 \
+		terminal_size-0.1.17 \
+		thiserror-1.0.26 \
+		thiserror-impl-1.0.26 \
+		time-0.1.43 \
+		typenum-1.13.0 \
+		unicode-width-0.1.8 \
+		unicode-xid-0.2.2 \
+		vcpkg-0.2.15 \
+		version_check-0.9.3 \
+		walkdir-2.3.2 \
+		wasi-0.10.2+wasi-snapshot-preview1 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-util-0.1.5 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		xattr-0.2.2
+
+CARGO_FEATURES=	--no-default-features
+
+PLIST_FILES=	bin/bupstash
+
+.include <bsd.port.mk>
diff --git a/sysutils/bupstash/distinfo b/sysutils/bupstash/distinfo
new file mode 100644
index 000000000000..a578f736ddb1
--- /dev/null
+++ b/sysutils/bupstash/distinfo
@@ -0,0 +1,195 @@
+TIMESTAMP = 1643682344
+SHA256 (rust/crates/ahash-0.7.4.crate) = 43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98
+SIZE (rust/crates/ahash-0.7.4.crate) = 37072
+SHA256 (rust/crates/aho-corasick-0.7.18.crate) = 1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f
+SIZE (rust/crates/aho-corasick-0.7.18.crate) = 112923
+SHA256 (rust/crates/anyhow-1.0.41.crate) = 15af2628f6890fe2609a3b91bef4c83450512802e59489f9c1cb1fa5df064a61
+SIZE (rust/crates/anyhow-1.0.41.crate) = 34561
+SHA256 (rust/crates/arrayref-0.3.6.crate) = a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544
+SIZE (rust/crates/arrayref-0.3.6.crate) = 10035
+SHA256 (rust/crates/arrayvec-0.7.1.crate) = be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd
+SIZE (rust/crates/arrayvec-0.7.1.crate) = 28812
+SHA256 (rust/crates/atty-0.2.14.crate) = d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8
+SIZE (rust/crates/atty-0.2.14.crate) = 5470
+SHA256 (rust/crates/autocfg-1.0.1.crate) = cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a
+SIZE (rust/crates/autocfg-1.0.1.crate) = 12908
+SHA256 (rust/crates/bitflags-1.2.1.crate) = cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693
+SIZE (rust/crates/bitflags-1.2.1.crate) = 16745
+SHA256 (rust/crates/blake3-1.0.0.crate) = dcd555c66291d5f836dbb6883b48660ece810fe25a31f3bdfb911945dff2691f
+SIZE (rust/crates/blake3-1.0.0.crate) = 155117
+SHA256 (rust/crates/cc-1.0.68.crate) = 4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787
+SIZE (rust/crates/cc-1.0.68.crate) = 55936
+SHA256 (rust/crates/cfg-if-0.1.10.crate) = 4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822
+SIZE (rust/crates/cfg-if-0.1.10.crate) = 7933
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/chrono-0.4.19.crate) = 670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73
+SIZE (rust/crates/chrono-0.4.19.crate) = 155663
+SHA256 (rust/crates/codemap-0.1.3.crate) = b9e769b5c8c8283982a987c6e948e540254f1058d5a74b8794914d4ef5fc2a24
+SIZE (rust/crates/codemap-0.1.3.crate) = 9483
+SHA256 (rust/crates/codemap-diagnostic-0.1.1.crate) = 4ba0e6be8e2774e750f9e90625b490249715bece38a12f9d09e82477caba5028
+SIZE (rust/crates/codemap-diagnostic-0.1.1.crate) = 20772
+SHA256 (rust/crates/console-0.14.1.crate) = 3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45
+SIZE (rust/crates/console-0.14.1.crate) = 22844
+SHA256 (rust/crates/constant_time_eq-0.1.5.crate) = 245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc
+SIZE (rust/crates/constant_time_eq-0.1.5.crate) = 4936
+SHA256 (rust/crates/crossbeam-channel-0.5.1.crate) = 06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4
+SIZE (rust/crates/crossbeam-channel-0.5.1.crate) = 86919
+SHA256 (rust/crates/crossbeam-utils-0.8.5.crate) = d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db
+SIZE (rust/crates/crossbeam-utils-0.8.5.crate) = 38414
+SHA256 (rust/crates/digest-0.9.0.crate) = d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066
+SIZE (rust/crates/digest-0.9.0.crate) = 13247
+SHA256 (rust/crates/encode_unicode-0.3.6.crate) = a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f
+SIZE (rust/crates/encode_unicode-0.3.6.crate) = 45741
+SHA256 (rust/crates/fallible-iterator-0.2.0.crate) = 4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7
+SIZE (rust/crates/fallible-iterator-0.2.0.crate) = 18509
+SHA256 (rust/crates/fallible-streaming-iterator-0.1.9.crate) = 7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a
+SIZE (rust/crates/fallible-streaming-iterator-0.1.9.crate) = 9249
+SHA256 (rust/crates/filetime-0.2.14.crate) = 1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8
+SIZE (rust/crates/filetime-0.2.14.crate) = 14358
+SHA256 (rust/crates/generic-array-0.14.4.crate) = 501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817
+SIZE (rust/crates/generic-array-0.14.4.crate) = 28916
+SHA256 (rust/crates/getopts-0.2.21.crate) = 14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5
+SIZE (rust/crates/getopts-0.2.21.crate) = 18457
+SHA256 (rust/crates/getrandom-0.2.3.crate) = 7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753
+SIZE (rust/crates/getrandom-0.2.3.crate) = 26261
+SHA256 (rust/crates/glob-0.3.0.crate) = 9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574
+SIZE (rust/crates/glob-0.3.0.crate) = 18724
+SHA256 (rust/crates/hashbrown-0.11.2.crate) = ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e
+SIZE (rust/crates/hashbrown-0.11.2.crate) = 85713
+SHA256 (rust/crates/hashlink-0.7.0.crate) = 7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf
+SIZE (rust/crates/hashlink-0.7.0.crate) = 25309
+SHA256 (rust/crates/hermit-abi-0.1.19.crate) = 62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33
+SIZE (rust/crates/hermit-abi-0.1.19.crate) = 9979
+SHA256 (rust/crates/humantime-2.1.0.crate) = 9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4
+SIZE (rust/crates/humantime-2.1.0.crate) = 16749
+SHA256 (rust/crates/indicatif-0.16.2.crate) = 2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b
+SIZE (rust/crates/indicatif-0.16.2.crate) = 35057
+SHA256 (rust/crates/instant-0.1.9.crate) = 61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec
+SIZE (rust/crates/instant-0.1.9.crate) = 5213
+SHA256 (rust/crates/itoa-0.4.7.crate) = dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736
+SIZE (rust/crates/itoa-0.4.7.crate) = 12099
+SHA256 (rust/crates/lazy_static-1.4.0.crate) = e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646
+SIZE (rust/crates/lazy_static-1.4.0.crate) = 10443
+SHA256 (rust/crates/libc-0.2.97.crate) = 12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6
+SIZE (rust/crates/libc-0.2.97.crate) = 517712
+SHA256 (rust/crates/libsqlite3-sys-0.22.2.crate) = 290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d
+SIZE (rust/crates/libsqlite3-sys-0.22.2.crate) = 2345859
+SHA256 (rust/crates/lock_api-0.4.4.crate) = 0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb
+SIZE (rust/crates/lock_api-0.4.4.crate) = 20356
+SHA256 (rust/crates/lz4-1.23.2.crate) = aac20ed6991e01bf6a2e68cc73df2b389707403662a8ba89f68511fb340f724c
+SIZE (rust/crates/lz4-1.23.2.crate) = 13190
+SHA256 (rust/crates/lz4-sys-1.9.2.crate) = dca79aa95d8b3226213ad454d328369853be3a1382d89532a854f4d69640acae
+SIZE (rust/crates/lz4-sys-1.9.2.crate) = 308384
+SHA256 (rust/crates/memchr-2.4.0.crate) = b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc
+SIZE (rust/crates/memchr-2.4.0.crate) = 63392
+SHA256 (rust/crates/nix-0.20.0.crate) = fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a
+SIZE (rust/crates/nix-0.20.0.crate) = 216983
+SHA256 (rust/crates/num-integer-0.1.44.crate) = d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db
+SIZE (rust/crates/num-integer-0.1.44.crate) = 22216
+SHA256 (rust/crates/num-traits-0.2.14.crate) = 9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290
+SIZE (rust/crates/num-traits-0.2.14.crate) = 45476
+SHA256 (rust/crates/number_prefix-0.4.0.crate) = 830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3
+SIZE (rust/crates/number_prefix-0.4.0.crate) = 6922
+SHA256 (rust/crates/once_cell-1.8.0.crate) = 692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56
+SIZE (rust/crates/once_cell-1.8.0.crate) = 28925
+SHA256 (rust/crates/openat-0.1.21.crate) = 95aa7c05907b3ebde2610d602f4ddd992145cc6a84493647c30396f30ba83abe
+SIZE (rust/crates/openat-0.1.21.crate) = 17503
+SHA256 (rust/crates/parking_lot-0.11.1.crate) = 6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb
+SIZE (rust/crates/parking_lot-0.11.1.crate) = 39854
+SHA256 (rust/crates/parking_lot_core-0.8.3.crate) = fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018
+SIZE (rust/crates/parking_lot_core-0.8.3.crate) = 32147
+SHA256 (rust/crates/path-clean-0.1.0.crate) = ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd
+SIZE (rust/crates/path-clean-0.1.0.crate) = 4909
+SHA256 (rust/crates/pkg-config-0.3.19.crate) = 3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c
+SIZE (rust/crates/pkg-config-0.3.19.crate) = 15451
+SHA256 (rust/crates/ppv-lite86-0.2.10.crate) = ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857
+SIZE (rust/crates/ppv-lite86-0.2.10.crate) = 20915
+SHA256 (rust/crates/proc-macro2-1.0.27.crate) = f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038
+SIZE (rust/crates/proc-macro2-1.0.27.crate) = 38625
+SHA256 (rust/crates/quote-1.0.9.crate) = c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7
+SIZE (rust/crates/quote-1.0.9.crate) = 25042
+SHA256 (rust/crates/rand-0.8.4.crate) = 2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8
+SIZE (rust/crates/rand-0.8.4.crate) = 87406
+SHA256 (rust/crates/rand_chacha-0.3.1.crate) = e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88
+SIZE (rust/crates/rand_chacha-0.3.1.crate) = 15251
+SHA256 (rust/crates/rand_core-0.6.3.crate) = d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7
+SIZE (rust/crates/rand_core-0.6.3.crate) = 21938
+SHA256 (rust/crates/rand_hc-0.3.1.crate) = d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7
+SIZE (rust/crates/rand_hc-0.3.1.crate) = 11891
+SHA256 (rust/crates/rangemap-0.1.11.crate) = ec4b7ff3f3fe9f3f83b2b80bd73a54bdb1accdfc9ffdf23c5b22f70367269940
+SIZE (rust/crates/rangemap-0.1.11.crate) = 30635
+SHA256 (rust/crates/redox_syscall-0.2.9.crate) = 5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee
+SIZE (rust/crates/redox_syscall-0.2.9.crate) = 23533
+SHA256 (rust/crates/regex-1.5.4.crate) = d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461
+SIZE (rust/crates/regex-1.5.4.crate) = 236581
+SHA256 (rust/crates/regex-syntax-0.6.25.crate) = f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b
+SIZE (rust/crates/regex-syntax-0.6.25.crate) = 293293
+SHA256 (rust/crates/remove_dir_all-0.5.3.crate) = 3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7
+SIZE (rust/crates/remove_dir_all-0.5.3.crate) = 9184
+SHA256 (rust/crates/rusqlite-0.25.3.crate) = 57adcf67c8faaf96f3248c2a7b419a0dbc52ebe36ba83dd57fe83827c1ea4eb3
+SIZE (rust/crates/rusqlite-0.25.3.crate) = 129773
+SHA256 (rust/crates/ryu-1.0.5.crate) = 71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e
+SIZE (rust/crates/ryu-1.0.5.crate) = 49570
+SHA256 (rust/crates/same-file-1.0.6.crate) = 93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502
+SIZE (rust/crates/same-file-1.0.6.crate) = 10183
+SHA256 (rust/crates/scopeguard-1.1.0.crate) = d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd
+SIZE (rust/crates/scopeguard-1.1.0.crate) = 11470
+SHA256 (rust/crates/serde-1.0.126.crate) = ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03
+SIZE (rust/crates/serde-1.0.126.crate) = 75138
+SHA256 (rust/crates/serde_bare-0.4.0.crate) = adbd09b1e0b45fadbc163e4ea1f4224b451146ba4f01963c69975780c33215fa
+SIZE (rust/crates/serde_bare-0.4.0.crate) = 12446
+SHA256 (rust/crates/serde_derive-1.0.126.crate) = 963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43
+SIZE (rust/crates/serde_derive-1.0.126.crate) = 54189
+SHA256 (rust/crates/serde_json-1.0.64.crate) = 799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79
+SIZE (rust/crates/serde_json-1.0.64.crate) = 115138
+SHA256 (rust/crates/serial_test-0.5.1.crate) = e0bccbcf40c8938196944a3da0e133e031a33f4d6b72db3bda3cc556e361905d
+SIZE (rust/crates/serial_test-0.5.1.crate) = 2993
+SHA256 (rust/crates/serial_test_derive-0.5.1.crate) = b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5
+SIZE (rust/crates/serial_test_derive-0.5.1.crate) = 3609
+SHA256 (rust/crates/shlex-0.1.1.crate) = 7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2
+SIZE (rust/crates/shlex-0.1.1.crate) = 5687
+SHA256 (rust/crates/smallvec-1.6.1.crate) = fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e
+SIZE (rust/crates/smallvec-1.6.1.crate) = 26444
+SHA256 (rust/crates/syn-1.0.73.crate) = f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7
+SIZE (rust/crates/syn-1.0.73.crate) = 232706
+SHA256 (rust/crates/tar-0.4.35.crate) = 7d779dc6aeff029314570f666ec83f19df7280bb36ef338442cfa8c604021b80
+SIZE (rust/crates/tar-0.4.35.crate) = 46219
+SHA256 (rust/crates/tempfile-3.2.0.crate) = dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22
+SIZE (rust/crates/tempfile-3.2.0.crate) = 25892
+SHA256 (rust/crates/termcolor-1.1.2.crate) = 2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4
+SIZE (rust/crates/termcolor-1.1.2.crate) = 17287
+SHA256 (rust/crates/terminal_size-0.1.17.crate) = 633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df
+SIZE (rust/crates/terminal_size-0.1.17.crate) = 9141
+SHA256 (rust/crates/thiserror-1.0.26.crate) = 93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2
+SIZE (rust/crates/thiserror-1.0.26.crate) = 16711
+SHA256 (rust/crates/thiserror-impl-1.0.26.crate) = 060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745
+SIZE (rust/crates/thiserror-impl-1.0.26.crate) = 13431
+SHA256 (rust/crates/time-0.1.43.crate) = ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438
+SIZE (rust/crates/time-0.1.43.crate) = 28653
+SHA256 (rust/crates/typenum-1.13.0.crate) = 879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06
+SIZE (rust/crates/typenum-1.13.0.crate) = 40238
+SHA256 (rust/crates/unicode-width-0.1.8.crate) = 9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3
+SIZE (rust/crates/unicode-width-0.1.8.crate) = 16732
+SHA256 (rust/crates/unicode-xid-0.2.2.crate) = 8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3
+SIZE (rust/crates/unicode-xid-0.2.2.crate) = 14955
+SHA256 (rust/crates/vcpkg-0.2.15.crate) = accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426
+SIZE (rust/crates/vcpkg-0.2.15.crate) = 228735
+SHA256 (rust/crates/version_check-0.9.3.crate) = 5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe
+SIZE (rust/crates/version_check-0.9.3.crate) = 12547
+SHA256 (rust/crates/walkdir-2.3.2.crate) = 808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56
+SIZE (rust/crates/walkdir-2.3.2.crate) = 23516
+SHA256 (rust/crates/wasi-0.10.2+wasi-snapshot-preview1.crate) = fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6
+SIZE (rust/crates/wasi-0.10.2+wasi-snapshot-preview1.crate) = 27505
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-util-0.1.5.crate) = 70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178
+SIZE (rust/crates/winapi-util-0.1.5.crate) = 10164
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/xattr-0.2.2.crate) = 244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c
+SIZE (rust/crates/xattr-0.2.2.crate) = 11750
+SHA256 (andrewchambers-bupstash-v0.10.3_GH0.tar.gz) = f4d1f327f66d5201a4034d1b39debc478c00114cdb22aeaf0071afc370b7c326
+SIZE (andrewchambers-bupstash-v0.10.3_GH0.tar.gz) = 318461
diff --git a/sysutils/bupstash/files/patch-src_fsutil.rs b/sysutils/bupstash/files/patch-src_fsutil.rs
new file mode 100644
index 000000000000..f4d5142a249d
--- /dev/null
+++ b/sysutils/bupstash/files/patch-src_fsutil.rs
@@ -0,0 +1,52 @@
+--- src/fsutil.rs.orig	2022-02-01 02:38:43 UTC
++++ src/fsutil.rs
+@@ -75,6 +75,8 @@ impl FileLock {
+             l_start: 0,
+             l_len: 0,
+             l_pid: 0,
++            #[cfg(target_os = "freebsd")]
++            l_sysid: 0,
+         };
+ 
+         let ctx = FileLockCtx::new(ctx_tag);
+@@ -98,6 +100,8 @@ impl FileLock {
+             l_start: 0,
+             l_len: 0,
+             l_pid: 0,
++            #[cfg(target_os = "freebsd")]
++            l_sysid: 0,
+         };
+ 
+         let ctx = FileLockCtx::new(ctx_tag);
+@@ -123,6 +127,8 @@ impl FileLock {
+             l_start: 0,
+             l_len: 0,
+             l_pid: 0,
++            #[cfg(target_os = "freebsd")]
++            l_sysid: 0,
+         };
+ 
+         let ctx = FileLockCtx::new(ctx_tag);
+@@ -365,6 +371,22 @@ cfg_if::cfg_if! {
+ 
+         pub fn dev_minor(dev :u64) -> u64 {
+             (dev & 0xff) | ((dev & 0xffff0000) >> 8)
++        }
++
++     } else if #[cfg(target_os = "freebsd")] {
++
++        // See https://github.com/freebsd/freebsd-src/sys/sys/types.h
++        pub fn makedev(major: u64, minor: u64) -> libc::dev_t {
++            (((major & 0xffffff00) << 32) | ((major & 0xff) << 8) |
++             ((minor & 0xff00) << 24) | (minor & 0xffff00ff)) as libc::dev_t
++        }
++
++        pub fn dev_major(dev: u64) -> u64 {
++            ((dev >> 32) & 0xffffff00) | ((dev >> 8) & 0xff)
++        }
++
++        pub fn dev_minor(dev :u64) -> u64 {
++            ((dev >> 24) & 0xff00) | (dev & 0xffff00ff)
+         }
+ 
+     } else {
diff --git a/sysutils/bupstash/pkg-descr b/sysutils/bupstash/pkg-descr
new file mode 100644
index 000000000000..6cecc47f8f0b
--- /dev/null
+++ b/sysutils/bupstash/pkg-descr
@@ -0,0 +1,6 @@
+Easy and efficient encrypted backups
+
+Backups with strict access controls, strong encryption, data deduplication,
+incremental uploads and offline decryption keys.
+
+WWW: https://bupstash.io