Fix rename prompting for new location before verifying old one exists

This commit is contained in:
2024-07-19 13:48:14 -04:00
parent 3b6db54dd7
commit 83aa4ee497
4 changed files with 10 additions and 7 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ func main() {
// stdin[0] is evaluated after fallthrough
// stdin[1] is expected to be the OLD incomplete target location with FSPath representing path separators - always pass in UNIX format
// stdin[2] is expected to be the NEW incomplete target location with FSPath representing path separators - always pass in UNIX format
sync.RenameLocal(strings.ReplaceAll(stdin[1], sync.FSPath, "/"), strings.ReplaceAll(stdin[2], sync.FSPath, "/"))
sync.RenameLocal(strings.ReplaceAll(stdin[1], sync.FSPath, "/"), strings.ReplaceAll(stdin[2], sync.FSPath, "/"), true)
fallthrough // fallthrough to add the old entry to the deletions directory
case "shear":
// shear an entry from the server and add it to the deletions directory
+2 -1
View File
@@ -98,7 +98,8 @@ func main() {
case "note", "-n":
field = 4
case "rename", "-r":
cli.RenameCli(args[1]) // pass the incomplete path as the server and all clients (reading from the deletions directory) will have a different home directory
backend.TargetIsFile(targetLocation, true, 0) // ensure location exists before prompting for new location
cli.RenameCli(args[1]) // pass the incomplete path as the server and all clients (reading from the deletions directory) will have a different home directory
default:
cli.HelpEdit()
}
+1 -1
View File
@@ -414,7 +414,7 @@ func ShearRemoteFromClient(targetLocationIncomplete string) {
// RenameRemoteFromClient renames oldLocationIncomplete to newLocationIncomplete on the local system and calls the server to perform the rename remotely and add the old target to the deletions list
// can safely be called in offline mode, as well, so this is the intended interface for renaming (RenameLocal should only be used directly by the server binary)
func RenameRemoteFromClient(oldLocationIncomplete, newLocationIncomplete string) {
RenameLocal(oldLocationIncomplete, newLocationIncomplete) // move the target on the local system
RenameLocal(oldLocationIncomplete, newLocationIncomplete, false) // move the target on the local system
deviceIDList := genDeviceIDList()
if len(*deviceIDList) > 0 { // ensure a device ID exists (online mode)
+6 -4
View File
@@ -2,10 +2,11 @@ package sync
import (
"fmt"
"github.com/rwinkhart/MUTN/src/backend"
"io/fs"
"os"
"strings"
"github.com/rwinkhart/MUTN/src/backend"
)
// getModTimes returns a list of all entry modification times
@@ -78,13 +79,14 @@ func ShearLocal(targetLocationIncomplete, clientDeviceID string) string {
// RenameLocal renames oldLocationIncomplete to newLocationIncomplete on the local system
// this function should only be used directly by the server binary
func RenameLocal(oldLocationIncomplete, newLocationIncomplete string) {
func RenameLocal(oldLocationIncomplete, newLocationIncomplete string, verifyOldLocationExists bool) {
// get full paths for both locations
oldLocation := backend.TargetLocationFormat(oldLocationIncomplete)
newLocation := backend.TargetLocationFormat(newLocationIncomplete)
// ensure oldLocation exists
backend.TargetIsFile(oldLocation, true, 0)
if verifyOldLocationExists {
backend.TargetIsFile(oldLocation, true, 0)
}
// ensure newLocation does not exist
_, isAccessible := backend.TargetIsFile(newLocation, false, 0)