]> Sergey Matveev's repositories - btrtrc.git/blob - storage/shortener.go
cmd/btrtrc client
[btrtrc.git] / storage / shortener.go
1 package storage
2
3 import (
4         "crypto/sha1"
5         "encoding/hex"
6         "path"
7         "strings"
8         "unicode/utf8"
9 )
10
11 const MaxFilenameLen = 200
12
13 func PathShortener(pth string) string {
14         parts := strings.Split(pth, "/")
15         for i, part := range parts {
16                 if len(part) <= MaxFilenameLen {
17                         continue
18                 }
19                 n := 0
20                 var short []rune
21                 for (n < len(part)) && (len(string(short)) <= MaxFilenameLen) {
22                         r, w := utf8.DecodeRuneInString(part[n:])
23                         n += w
24                         short = append(short, r)
25                 }
26                 h := sha1.Sum([]byte(part))
27                 parts[i] = string(short[:len(short)-1]) + "-" + hex.EncodeToString(h[:])
28         }
29         return path.Join(parts...)
30 }