Skip to content

Commit

Permalink
Commit cb021fe unintentionally introduced overwrite confirmation to s…
Browse files Browse the repository at this point in the history
…cripting

(cherry picked from commit b39ad55c021027cc166132bf74241f92a199d5a9)

# Conflicts:
#	source/core/Terminal.cpp

Source commit: 54c4ff8724d2a4ddcc7e5436c4442fdb0205789d
  • Loading branch information
martinprikryl committed Jan 12, 2023
1 parent 679c1ca commit c280d67
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 15 deletions.
3 changes: 2 additions & 1 deletion source/core/Script.cpp
Expand Up @@ -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
Expand Down
22 changes: 14 additions & 8 deletions source/core/Terminal.cpp
Expand Up @@ -76,6 +76,7 @@ struct TMoveFileParams
{
UnicodeString Target;
UnicodeString FileMask;
bool DontOverwrite;
};
//---------------------------------------------------------------------------
struct TFilesFindParams
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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);
Expand All @@ -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;
}
Expand All @@ -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);
Expand Down Expand Up @@ -4722,7 +4726,7 @@ bool __fastcall TTerminal::DoRenameFile(const UnicodeString FileName, const TRem

if (Result)
{
if (!IsCapable[fcMoveOverExistingFile])
if (!IsCapable[fcMoveOverExistingFile] && !DontOverwrite)
{
if (!ExistenceKnown)
{
Expand Down Expand Up @@ -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);
Expand All @@ -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
Expand Down Expand Up @@ -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);
}
Expand Down
8 changes: 4 additions & 4 deletions source/core/Terminal.h
Expand Up @@ -276,8 +276,8 @@ friend class TRetryOperationLoop;
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,
Expand Down Expand Up @@ -565,8 +565,8 @@ friend class TRetryOperationLoop;
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,
Expand Down
4 changes: 2 additions & 2 deletions source/forms/CustomScpExplorer.cpp
Expand Up @@ -4468,7 +4468,7 @@ bool __fastcall TCustomScpExplorerForm::RemoteTransferFiles(
{
Configuration->Usage->Inc("RemoteMove");

Terminal->MoveFiles(FileList, Target, FileMask);
Terminal->MoveFiles(FileList, Target, FileMask, false);
}
else
{
Expand Down Expand Up @@ -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(...)
{
Expand Down

0 comments on commit c280d67

Please sign in to comment.