浏览代码

Commit cb021fe3 unintentionally introduced overwrite confirmation to scripting

(cherry picked from commit b39ad55c021027cc166132bf74241f92a199d5a9)

# Conflicts:
#	source/core/Terminal.cpp

Source commit: 54c4ff8724d2a4ddcc7e5436c4442fdb0205789d
Martin Prikryl 2 年之前
父节点
当前提交
c280d67894
共有 4 个文件被更改,包括 22 次插入15 次删除
  1. 2 1
      source/core/Script.cpp
  2. 14 8
      source/core/Terminal.cpp
  3. 4 4
      source/core/Terminal.h
  4. 2 2
      source/forms/CustomScpExplorer.cpp

+ 2 - 1
source/core/Script.cpp

@@ -1393,7 +1393,8 @@ void __fastcall TScript::DoMvOrCp(TScriptProcParams * Parameters, TFSCapability
     }
     else
     {
-      FTerminal->MoveFiles(FileList, TargetDirectory, FileMask);
+      bool DontOverwrite = true; // might use FConfirm eventually, but that would be breaking change
+      FTerminal->MoveFiles(FileList, TargetDirectory, FileMask, DontOverwrite);
     }
   }
   __finally

+ 14 - 8
source/core/Terminal.cpp

@@ -76,6 +76,7 @@ struct TMoveFileParams
 {
   UnicodeString Target;
   UnicodeString FileMask;
+  bool DontOverwrite;
 };
 //---------------------------------------------------------------------------
 struct TFilesFindParams
@@ -4038,6 +4039,7 @@ bool __fastcall TTerminal::RecycleFile(const UnicodeString & AFileName, const TR
     TMoveFileParams Params;
     Params.Target = SessionData->RecycleBinPath;
     Params.FileMask = FORMAT(L"*-%s.*", (FormatDateTime(L"yyyymmdd-hhnnss", Now())));
+    Params.DontOverwrite = false;
 
     Result = DoMoveFile(FileName, File, &Params);
 
@@ -4627,15 +4629,15 @@ void __fastcall TTerminal::RenameFile(const TRemoteFile * File, const UnicodeStr
   {
     FileModified(File, File->FileName);
     LogEvent(FORMAT(L"Renaming file \"%s\" to \"%s\".", (File->FileName, NewName)));
-    if (DoRenameFile(File->FileName, File, NewName, false))
+    if (DoRenameFile(File->FileName, File, NewName, false, false))
     {
       ReactOnCommand(fsRenameFile);
     }
   }
 }
 //---------------------------------------------------------------------------
-bool __fastcall TTerminal::DoRenameFile(const UnicodeString FileName, const TRemoteFile * File,
-  const UnicodeString NewName, bool Move)
+bool __fastcall TTerminal::DoRenameFile(
+  const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Move, bool DontOverwrite)
 {
   // Can be foDelete when recycling (and overwrite should not happen in this case)
   bool IsBatchMove = (OperationProgress != NULL) && (OperationProgress->Operation == foRemoteMove);
@@ -4647,6 +4649,7 @@ bool __fastcall TTerminal::DoRenameFile(const UnicodeString FileName, const TRem
   std::unique_ptr<TRemoteFile> DuplicateFileOwner(DuplicateFile);
   if (BatchOverwrite == boNone)
   {
+    DebugAssert(!DontOverwrite); // unsupported combination
     Result = !FileExists(AbsoluteNewName);
     ExistenceKnown = true;
   }
@@ -4655,7 +4658,8 @@ bool __fastcall TTerminal::DoRenameFile(const UnicodeString FileName, const TRem
     // noop
   }
   else if (DebugAlwaysTrue(BatchOverwrite == boNo) &&
-           Configuration->ConfirmOverwriting)
+           Configuration->ConfirmOverwriting &&
+           !DontOverwrite)
   {
     FileExists(AbsoluteNewName, &DuplicateFile);
     DuplicateFileOwner.reset(DuplicateFile);
@@ -4722,7 +4726,7 @@ bool __fastcall TTerminal::DoRenameFile(const UnicodeString FileName, const TRem
 
   if (Result)
   {
-    if (!IsCapable[fcMoveOverExistingFile])
+    if (!IsCapable[fcMoveOverExistingFile] && !DontOverwrite)
     {
       if (!ExistenceKnown)
       {
@@ -4766,7 +4770,7 @@ bool __fastcall TTerminal::DoMoveFile(const UnicodeString & FileName, const TRem
     MaskFileName(UnixExtractFileName(FileName), Params.FileMask);
   LogEvent(FORMAT(L"Moving file \"%s\" to \"%s\".", (FileName, NewName)));
   FileModified(File, FileName);
-  bool Result = DoRenameFile(FileName, File, NewName, true);
+  bool Result = DoRenameFile(FileName, File, NewName, true, Params.DontOverwrite);
   if (Result)
   {
     ReactOnCommand(fsMoveFile);
@@ -4779,12 +4783,13 @@ void __fastcall TTerminal::MoveFile(const UnicodeString FileName, const TRemoteF
   DoMoveFile(FileName, File, Param);
 }
 //---------------------------------------------------------------------------
-bool __fastcall TTerminal::MoveFiles(TStrings * FileList, const UnicodeString Target,
-  const UnicodeString FileMask)
+bool __fastcall TTerminal::MoveFiles(
+  TStrings * FileList, const UnicodeString & Target, const UnicodeString & FileMask, bool DontOverwrite)
 {
   TMoveFileParams Params;
   Params.Target = Target;
   Params.FileMask = FileMask;
+  Params.DontOverwrite = DontOverwrite;
   bool Result;
   BeginTransaction();
   try
@@ -4877,6 +4882,7 @@ bool __fastcall TTerminal::CopyFiles(TStrings * FileList, const UnicodeString Ta
   TMoveFileParams Params;
   Params.Target = Target;
   Params.FileMask = FileMask;
+  Params.DontOverwrite = false; // not used
   DirectoryModified(Target, true);
   return ProcessFiles(FileList, foRemoteCopy, CopyFile, &Params);
 }

+ 4 - 4
source/core/Terminal.h

@@ -276,8 +276,8 @@ protected:
     int Params);
   void __fastcall DoCustomCommandOnFile(UnicodeString FileName,
     const TRemoteFile * File, UnicodeString Command, int Params, TCaptureOutputEvent OutputEvent);
-  bool __fastcall DoRenameFile(const UnicodeString FileName, const TRemoteFile * File,
-    const UnicodeString NewName, bool Move);
+  bool __fastcall DoRenameFile(
+    const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Move, bool DontOverwrite);
   bool __fastcall DoMoveFile(const UnicodeString & FileName, const TRemoteFile * File, /*const TMoveFileParams*/ void * Param);
   void __fastcall DoCopyFile(const UnicodeString FileName, const TRemoteFile * File, const UnicodeString NewName);
   void __fastcall DoChangeFileProperties(const UnicodeString FileName,
@@ -565,8 +565,8 @@ public:
   void __fastcall RenameFile(const TRemoteFile * File, const UnicodeString & NewName);
   void __fastcall MoveFile(const UnicodeString FileName, const TRemoteFile * File,
     /*const TMoveFileParams*/ void * Param);
-  bool __fastcall MoveFiles(TStrings * FileList, const UnicodeString Target,
-    const UnicodeString FileMask);
+  bool __fastcall MoveFiles(
+    TStrings * FileList, const UnicodeString & Target, const UnicodeString & FileMask, bool DontOverwrite);
   void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File,
     /*const TMoveFileParams*/ void * Param);
   bool __fastcall CopyFiles(TStrings * FileList, const UnicodeString Target,

+ 2 - 2
source/forms/CustomScpExplorer.cpp

@@ -4468,7 +4468,7 @@ bool __fastcall TCustomScpExplorerForm::RemoteTransferFiles(
         {
           Configuration->Usage->Inc("RemoteMove");
 
-          Terminal->MoveFiles(FileList, Target, FileMask);
+          Terminal->MoveFiles(FileList, Target, FileMask, false);
         }
         else
         {
@@ -6198,7 +6198,7 @@ void __fastcall TCustomScpExplorerForm::DoSynchronizeMove(
     RemoteDirView->SaveSelectedNames();
     try
     {
-      Terminal->MoveFiles(FileList.get(), Target, FileMask);
+      Terminal->MoveFiles(FileList.get(), Target, FileMask, false);
     }
     catch(...)
     {