commit 7ed23b5dc3fa102cdf984ffa9344e9f4c4f99a6f
parent 6f8a6c4460ae91a2c48a4296cc20b3a4fcc944ca
Author: Sean Enck <sean@ttypty.com>
Date: Sat, 24 Dec 2022 11:55:55 -0500
hash/modtime handling updates
Diffstat:
4 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/cmd/main.go b/cmd/main.go
@@ -252,7 +252,7 @@ func run() error {
return wrapped("unable to get stats", err)
}
if v != nil {
- fmt.Printf("modtime: %s\n", v.Value)
+ fmt.Println(v.Value)
}
return nil
}
@@ -308,7 +308,7 @@ func hashText(args []string) error {
return err
}
for _, item := range e {
- fmt.Printf("%s:\nhash:%s\n", item.Path, item.Value)
+ fmt.Printf("%s:\n%s\n", item.Path, item.Value)
}
return nil
}
diff --git a/internal/backend/query.go b/internal/backend/query.go
@@ -131,14 +131,11 @@ func (t *Transaction) QueryCallback(args QueryOptions) ([]QueryEntity, error) {
entity.Value = val
case HashedValue, StatsValue:
t := getValue(e.backing, modTimeKey)
- if args.Values == StatsValue {
- entity.Value = t
- } else {
- if t != "" {
- t = fmt.Sprintf(" (%s)", t)
- }
- entity.Value = fmt.Sprintf("%x%s", sha512.Sum512([]byte(val)), t)
+ res := fmt.Sprintf("modtime: %s", t)
+ if args.Values == HashedValue {
+ res = fmt.Sprintf("%s\nhash: %x", res, sha512.Sum512([]byte(val)))
}
+ entity.Value = res
}
}
results = append(results, entity)
diff --git a/internal/backend/query_test.go b/internal/backend/query_test.go
@@ -84,16 +84,16 @@ func TestValueModes(t *testing.T) {
if err != nil {
t.Errorf("no error: %v", err)
}
- hash := q.Value
- parts := strings.Split(hash, " ")
+ hash := strings.TrimSpace(q.Value)
+ parts := strings.Split(hash, "\n")
if len(parts) != 2 {
t.Errorf("invalid hash output: %v", parts)
}
- if parts[0] != "44276ba24db13df5568aa6db81e0190ab9d35d2168dce43dca61e628f5c666b1d8b091f1dda59c2359c86e7d393d59723a421d58496d279031e7f858c11d893e" {
+ if parts[1] != "hash: 44276ba24db13df5568aa6db81e0190ab9d35d2168dce43dca61e628f5c666b1d8b091f1dda59c2359c86e7d393d59723a421d58496d279031e7f858c11d893e" {
t.Errorf("invalid result value: %s", q.Value)
}
- dt := parts[1]
- if !strings.HasPrefix(dt, "(") || !strings.HasSuffix(dt, ")") || len(dt) <= 20 {
+ dt := parts[0]
+ if !strings.HasPrefix(dt, "modtime: ") || len(dt) <= 20 {
t.Errorf("invalid date/time: %s", dt)
}
q, err = fullSetup(t, true).Get("test/test/ab11c", backend.SecretValue)
@@ -103,6 +103,10 @@ func TestValueModes(t *testing.T) {
if q.Value != "tdest\ntest" {
t.Errorf("invalid result value: %s", q.Value)
}
+ q, err = fullSetup(t, true).Get("test/test/abc", backend.StatsValue)
+ if err != nil || !strings.HasPrefix(q.Value, "modtime: ") || len(strings.Split(q.Value, "\n")) != 1 {
+ t.Errorf("invalid stats: %s", q.Value)
+ }
}
func TestQueryCallback(t *testing.T) {
diff --git a/scripts/tests.expected.log b/scripts/tests.expected.log
@@ -31,13 +31,17 @@ test/k
test/k
XXXXXX
key/a/one:
-hash:ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff
+modtime: XXXX-XX-XX
+hash: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff
keys/k/one2:
-hash:6d201beeefb589b08ef0672dac82353d0cbd9ad99e1642c83a1601f3d647bcca003257b5e8f31bdc1d73fbec84fb085c79d6e2677b7ff927e823a54e789140d9
+modtime: XXXX-XX-XX
+hash: 6d201beeefb589b08ef0672dac82353d0cbd9ad99e1642c83a1601f3d647bcca003257b5e8f31bdc1d73fbec84fb085c79d6e2677b7ff927e823a54e789140d9
keys2/k/three:
-hash:132ab0244293c495a027cec12d0050598616daca888449920fc652719be0987830827d069ef78cc613e348de37c9b592d3406e2fb8d99a6961bf0c58da8a334f
+modtime: XXXX-XX-XX
+hash: 132ab0244293c495a027cec12d0050598616daca888449920fc652719be0987830827d069ef78cc613e348de37c9b592d3406e2fb8d99a6961bf0c58da8a334f
test/k/totp:
-hash:b6c44d5d8a75071d8e8a39df231b0b98584d1d42982b5cf230e44f94d9c48e2983e78955a54b70c0acb0428d6db7205101e332f950ffb6b6d643aa37287c6aa5
+modtime: XXXX-XX-XX
+hash: b6c44d5d8a75071d8e8a39df231b0b98584d1d42982b5cf230e44f94d9c48e2983e78955a54b70c0acb0428d6db7205101e332f950ffb6b6d643aa37287c6aa5
delete entry? (y/N)
delete entry? (y/N)
delete entry? (y/N) unable to remove entry (no entities given)