Skip to content

Commit b0d18ec

Browse files
authored
Use findCopySuffix (#84)
1 parent ba7d01a commit b0d18ec

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

server/filesystem/compress.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,38 @@ func (fs *Filesystem) CompressFiles(dir string, name string, paths []string) (uf
4141
return nil, fmt.Errorf("no valid files to compress")
4242
}
4343

44+
dirfd, _, closeFd, err := fs.unixFS.SafePath(dir)
45+
defer closeFd()
46+
if err != nil {
47+
return nil, err
48+
}
49+
4450
a := &Archive{Filesystem: fs, BaseDirectory: dir, Files: validPaths}
45-
d := path.Join(
46-
dir,
47-
fmt.Sprintf("%s.%s",
48-
func() string {
49-
if name != "" {
50-
return name
51-
}
52-
return fmt.Sprintf("archive-%s", strings.ReplaceAll(time.Now().Format(time.RFC3339), ":", ""))
53-
}(),
54-
".tar.gz",
55-
))
56-
f, err := fs.unixFS.OpenFile(d, ufs.O_WRONLY|ufs.O_CREATE, 0o644)
51+
if name == "" {
52+
name = fmt.Sprintf("archive-%s.tar.gz", strings.ReplaceAll(time.Now().Format(time.RFC3339), ":", ""))
53+
} else {
54+
name, err = fs.findCopySuffix(dirfd, name, ".tar.gz")
55+
if err != nil {
56+
return nil, err
57+
}
58+
}
59+
60+
f, err := fs.unixFS.OpenFileat(dirfd, name, ufs.O_WRONLY|ufs.O_CREATE, 0o644)
5761
if err != nil {
5862
return nil, err
5963
}
6064
defer f.Close()
65+
6166
cw := ufs.NewCountedWriter(f)
6267
if err := a.Stream(context.Background(), cw); err != nil {
6368
return nil, err
6469
}
70+
6571
if !fs.unixFS.CanFit(cw.BytesWritten()) {
66-
_ = fs.unixFS.Remove(d)
72+
_ = fs.unixFS.Remove(path.Join(dir, name))
6773
return nil, newFilesystemError(ErrCodeDiskSpace, nil)
6874
}
75+
6976
fs.unixFS.Add(cw.BytesWritten())
7077
return f.Stat()
7178
}

server/filesystem/filesystem.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,11 +275,15 @@ func (fs *Filesystem) Chmod(path string, mode ufs.FileMode) error {
275275
// looping endlessly.
276276
func (fs *Filesystem) findCopySuffix(dirfd int, name, extension string) (string, error) {
277277
var i int
278-
suffix := " copy"
278+
suffix := ""
279279

280280
for i = 0; i < 51; i++ {
281-
if i > 0 {
282-
suffix = " copy " + strconv.Itoa(i)
281+
if i == 1 {
282+
suffix = " copy"
283+
} else if i == 50 {
284+
suffix = " copy." + time.Now().Format(time.RFC3339)
285+
} else if i > 1 {
286+
suffix = " copy " + strconv.Itoa(i-1)
283287
}
284288

285289
n := name + suffix + extension
@@ -291,10 +295,6 @@ func (fs *Filesystem) findCopySuffix(dirfd int, name, extension string) (string,
291295
}
292296
break
293297
}
294-
295-
if i == 50 {
296-
suffix = "copy." + time.Now().Format(time.RFC3339)
297-
}
298298
}
299299

300300
return name + suffix + extension, nil

0 commit comments

Comments
 (0)