iAdd support for attaching descriptive messages to snapshots - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 5cc2cb4d8ed4f3866cc99a3c2e50e4f244f6f836 /scm/dedup/commit/5cc2cb4d8ed4f3866cc99a3c2e50e4f244f6f836.gph bitreich.org 70 1parent 3cb8c88abd3f830a2637a8b666402d063df0e7e4 /scm/dedup/commit/3cb8c88abd3f830a2637a8b666402d063df0e7e4.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sun, 17 Feb 2019 11:23:29 +0000 Err bitreich.org 70 i Err bitreich.org 70 iAdd support for attaching descriptive messages to snapshots Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dedup.1 | 9 ++++++--- Err bitreich.org 70 i M dedup.c | 29 ++++++++++++++++++++++++----- Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 30 insertions(+), 8 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/dedup.1 b/dedup.1 /scm/dedup/file/dedup.1.gph bitreich.org 70 i@@ -1,4 +1,4 @@ Err bitreich.org 70 i-.Dd March 21, 2018 Err bitreich.org 70 i+.Dd Feb 17, 2019 Err bitreich.org 70 i .Dt DEDUP 1 Err bitreich.org 70 i .Os Err bitreich.org 70 i .Sh NAME Err bitreich.org 70 i@@ -9,6 +9,7 @@ Err bitreich.org 70 i .Op Fl clv Err bitreich.org 70 i .Op Fl e Ar id Err bitreich.org 70 i .Op Fl r Ar root Err bitreich.org 70 i+.Op Fl m Ar message Err bitreich.org 70 i .Op file Err bitreich.org 70 i .Sh DESCRIPTION Err bitreich.org 70 i .Nm Err bitreich.org 70 i@@ -20,14 +21,16 @@ only handles a single file at a time, so using tar is advised. Err bitreich.org 70 i .It Fl c Err bitreich.org 70 i Perform a consistency check on the deduplication storage. Err bitreich.org 70 i .It Fl l Err bitreich.org 70 i-List revisions by hash. Err bitreich.org 70 i+List snapshots by hash. Err bitreich.org 70 i .It Fl v Err bitreich.org 70 i Enable verbose mode. Err bitreich.org 70 i .It Fl e Ar id Err bitreich.org 70 i-Extract revision with the specified id. Err bitreich.org 70 i+Extract snapshot with the specified id. Err bitreich.org 70 i .It Fl r Ar root Err bitreich.org 70 i Set the root directory where the .cache, .index and .store Err bitreich.org 70 i files will be created. Err bitreich.org 70 i+.It Fl m Ar message Err bitreich.org 70 i+Attach a descriptive message to the snapshot. Err bitreich.org 70 i .El Err bitreich.org 70 i .Sh AUTHORS Err bitreich.org 70 i .An Dimitris Papastamos Aq Mt sin@2f30.org , Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -19,6 +19,7 @@ Err bitreich.org 70 i #define BLKSIZ (1024 * 512) Err bitreich.org 70 i #define WINSIZ 1024 Err bitreich.org 70 i #define HASHMSK ((1ul << 21) - 1) Err bitreich.org 70 i+#define MSGSIZ 256 Err bitreich.org 70 i #define MDSIZ SHA256_DIGEST_LENGTH Err bitreich.org 70 i Err bitreich.org 70 i #define ROTL(x, y) (((x) << (y)) | ((x) >> (32 - (y)))) Err bitreich.org 70 i@@ -44,6 +45,7 @@ struct bdescr { Err bitreich.org 70 i /* index file entry */ Err bitreich.org 70 i struct ent { Err bitreich.org 70 i uint64_t size; Err bitreich.org 70 i+ uint8_t msg[MSGSIZ]; Err bitreich.org 70 i uint8_t md[MDSIZ]; /* hash of file */ Err bitreich.org 70 i uint64_t nblks; Err bitreich.org 70 i struct bdescr bdescr[]; Err bitreich.org 70 i@@ -363,7 +365,7 @@ lookup_blk(uint8_t *md) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-dedup(int fd) Err bitreich.org 70 i+dedup(int fd, char *msg) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t *buf; Err bitreich.org 70 i struct ent *ent; Err bitreich.org 70 i@@ -421,8 +423,19 @@ dedup(int fd) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i if (ent->nblks > 0) { Err bitreich.org 70 i+ size_t size; Err bitreich.org 70 i+ Err bitreich.org 70 i /* Calculate hash and add this entry to the index */ Err bitreich.org 70 i SHA256_Final(ent->md, &ctx); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (msg != NULL && msg[0] != '\0') { Err bitreich.org 70 i+ size = strlen(msg) + 1; Err bitreich.org 70 i+ if (size > sizeof(ent->msg)) Err bitreich.org 70 i+ size = sizeof(ent->msg); Err bitreich.org 70 i+ memcpy(ent->msg, msg, size); Err bitreich.org 70 i+ ent->msg[size - 1] = '\0'; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i append_ent(ent); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -493,7 +506,10 @@ int Err bitreich.org 70 i list(struct ent *ent, void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i print_md(ent->md, sizeof(ent->md)); Err bitreich.org 70 i- putchar('\n'); Err bitreich.org 70 i+ if (ent->msg) Err bitreich.org 70 i+ printf("\t%s\n", ent->msg); Err bitreich.org 70 i+ else Err bitreich.org 70 i+ putchar('\n'); Err bitreich.org 70 i return WALK_CONTINUE; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -630,7 +646,7 @@ term(void) Err bitreich.org 70 i void Err bitreich.org 70 i usage(void) Err bitreich.org 70 i { Err bitreich.org 70 i- fprintf(stderr, "usage: %s [-clv] [-e id] [-r root] [file]\n", argv0); Err bitreich.org 70 i+ fprintf(stderr, "usage: %s [-clv] [-e id] [-r root] [-m message] [file]\n", argv0); Err bitreich.org 70 i exit(1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -638,7 +654,7 @@ int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t md[MDSIZ]; Err bitreich.org 70 i- char *id = NULL, *root = NULL; Err bitreich.org 70 i+ char *id = NULL, *root = NULL, *msg = NULL; Err bitreich.org 70 i int fd = -1, lflag = 0, cflag = 0; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN { Err bitreich.org 70 i@@ -654,6 +670,9 @@ main(int argc, char *argv[]) Err bitreich.org 70 i case 'r': Err bitreich.org 70 i root = EARGF(usage()); Err bitreich.org 70 i break; Err bitreich.org 70 i+ case 'm': Err bitreich.org 70 i+ msg = EARGF(usage()); Err bitreich.org 70 i+ break; Err bitreich.org 70 i case 'v': Err bitreich.org 70 i verbose = 1; Err bitreich.org 70 i break; Err bitreich.org 70 i@@ -704,7 +723,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i str2bin(id, md); Err bitreich.org 70 i walk(extract, &(struct extract_args){ .md = md, .fd = fd }); Err bitreich.org 70 i } else { Err bitreich.org 70 i- dedup(fd); Err bitreich.org 70 i+ dedup(fd, msg); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i term(); Err bitreich.org 70 .