Explorar o código

Simplifying CalculateFilesChecksum API

There's a small side-effect: The scripting "checksum" command now prints file name only while before it printed the path as it was original specified in the command.

Source commit: 7594ed8befc67e4da3153cc8b1b711ab104db867
Martin Prikryl %!s(int64=3) %!d(string=hai) anos
pai
achega
8994d1f98e

+ 1 - 2
source/core/FileSystems.h

@@ -49,8 +49,7 @@ public:
   virtual bool __fastcall LoadFilesProperties(TStrings * FileList) = 0;
   virtual UnicodeString CalculateFilesChecksumInitialize(const UnicodeString & Alg);
   virtual void __fastcall CalculateFilesChecksum(
-    const UnicodeString & Alg, TStrings * FileList, TStrings * Checksums,
-    TCalculatedChecksumEvent OnCalculatedChecksum,
+    const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
     TFileOperationProgressType * OperationProgress, bool FirstLevel) = 0;
   virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
     const UnicodeString TargetDir, const TCopyParamType * CopyParam,

+ 1 - 6
source/core/FtpFileSystem.cpp

@@ -1216,8 +1216,7 @@ UnicodeString __fastcall TFTPFileSystem::DoCalculateFileChecksum(const UnicodeSt
 }
 //---------------------------------------------------------------------------
 void __fastcall TFTPFileSystem::CalculateFilesChecksum(
-  const UnicodeString & Alg, TStrings * FileList, TStrings * Checksums,
-  TCalculatedChecksumEvent OnCalculatedChecksum,
+  const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
   TFileOperationProgressType * OperationProgress, bool FirstLevel)
 {
   FTerminal->CalculateSubFoldersChecksum(Alg, FileList, OnCalculatedChecksum, OperationProgress, FirstLevel);
@@ -1246,10 +1245,6 @@ void __fastcall TFTPFileSystem::CalculateFilesChecksum(
             OnCalculatedChecksum(File->FileName, Alg, Checksum);
           }
           Action.Checksum(Alg, Checksum);
-          if (Checksums != NULL)
-          {
-            Checksums->Add(Checksum);
-          }
           Success = true;
         }
         __finally

+ 1 - 2
source/core/FtpFileSystem.h

@@ -42,8 +42,7 @@ public:
   virtual bool __fastcall LoadFilesProperties(TStrings * FileList);
   virtual UnicodeString CalculateFilesChecksumInitialize(const UnicodeString & Alg);
   void __fastcall CalculateFilesChecksum(
-    const UnicodeString & Alg, TStrings * FileList, TStrings * Checksums,
-    TCalculatedChecksumEvent OnCalculatedChecksum,
+    const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
     TFileOperationProgressType * OperationProgress, bool FirstLevel);
   virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
     const UnicodeString TargetDir, const TCopyParamType * CopyParam,

+ 1 - 2
source/core/S3FileSystem.cpp

@@ -1648,8 +1648,7 @@ bool __fastcall TS3FileSystem::LoadFilesProperties(TStrings * FileList)
 }
 //---------------------------------------------------------------------------
 void __fastcall TS3FileSystem::CalculateFilesChecksum(
-  const UnicodeString & DebugUsedArg(Alg), TStrings * DebugUsedArg(FileList), TStrings * DebugUsedArg(Checksums),
-  TCalculatedChecksumEvent,
+  const UnicodeString & DebugUsedArg(Alg), TStrings * DebugUsedArg(FileList), TCalculatedChecksumEvent,
   TFileOperationProgressType *, bool DebugUsedArg(FirstLevel))
 {
   DebugFail();

+ 1 - 2
source/core/S3FileSystem.h

@@ -55,8 +55,7 @@ public:
     TChmodSessionAction & Action);
   virtual bool __fastcall LoadFilesProperties(TStrings * FileList);
   virtual void __fastcall CalculateFilesChecksum(
-    const UnicodeString & Alg, TStrings * FileList, TStrings * Checksums,
-    TCalculatedChecksumEvent OnCalculatedChecksum,
+    const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
     TFileOperationProgressType * OperationProgress, bool FirstLevel);
   virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
     const UnicodeString TargetDir, const TCopyParamType * CopyParam,

+ 1 - 2
source/core/ScpFileSystem.cpp

@@ -1300,8 +1300,7 @@ bool __fastcall TSCPFileSystem::LoadFilesProperties(TStrings * /*FileList*/ )
 }
 //---------------------------------------------------------------------------
 void __fastcall TSCPFileSystem::CalculateFilesChecksum(
-  const UnicodeString & DebugUsedArg(Alg), TStrings * DebugUsedArg(FileList), TStrings * DebugUsedArg(Checksums),
-  TCalculatedChecksumEvent,
+  const UnicodeString & DebugUsedArg(Alg), TStrings * DebugUsedArg(FileList), TCalculatedChecksumEvent,
   TFileOperationProgressType *, bool DebugUsedArg(FirstLevel))
 {
   DebugFail();

+ 1 - 2
source/core/ScpFileSystem.h

@@ -31,8 +31,7 @@ public:
     TChmodSessionAction & Action);
   virtual bool __fastcall LoadFilesProperties(TStrings * FileList);
   virtual void __fastcall CalculateFilesChecksum(
-    const UnicodeString & Alg, TStrings * FileList, TStrings * Checksums,
-    TCalculatedChecksumEvent OnCalculatedChecksum,
+    const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
     TFileOperationProgressType * OperationProgress, bool FirstLevel);
   virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
     const UnicodeString TargetDir, const TCopyParamType * CopyParam,

+ 7 - 7
source/core/Script.cpp

@@ -1205,6 +1205,12 @@ void __fastcall TScript::StatProc(TScriptProcParams * Parameters)
   }
 }
 //---------------------------------------------------------------------------
+void __fastcall TScript::DoCalculatedChecksum(
+  const UnicodeString & FileName, const UnicodeString & DebugUsedArg(Alg), const UnicodeString & Hash)
+{
+  PrintLine(FORMAT(L"%s %s", (Hash, FileName)));
+}
+//---------------------------------------------------------------------------
 void __fastcall TScript::ChecksumProc(TScriptProcParams * Parameters)
 {
   CheckSession();
@@ -1214,7 +1220,6 @@ void __fastcall TScript::ChecksumProc(TScriptProcParams * Parameters)
   }
 
   UnicodeString Alg = Parameters->Param[1];
-  std::unique_ptr<TStrings> Checksums(new TStringList());
   TStrings * FileList = CreateFileList(Parameters, 2, 2, fltQueryServer);
   FTerminal->ExceptionOnFail = true;
   try
@@ -1225,12 +1230,7 @@ void __fastcall TScript::ChecksumProc(TScriptProcParams * Parameters)
       throw Exception(FMTLOAD(NOT_FILE_ERROR, (FileList->Strings[0])));
     }
 
-    FTerminal->CalculateFilesChecksum(Alg, FileList, Checksums.get(), NULL);
-
-    if (DebugAlwaysTrue(Checksums->Count == 1))
-    {
-      PrintLine(FORMAT(L"%s %s", (Checksums->Strings[0], FileList->Strings[0])));
-    }
+    FTerminal->CalculateFilesChecksum(Alg, FileList, DoCalculatedChecksum);
   }
   __finally
   {

+ 2 - 0
source/core/Script.h

@@ -192,6 +192,8 @@ private:
   void __fastcall CheckMultiFilesToOne(TStrings * FileList, const UnicodeString & Target, bool Unix);
   void __fastcall LogOption(const UnicodeString & LogStr);
   void __fastcall DoMvOrCp(TScriptProcParams * Parameters, TFSCapability Capability, bool Cp);
+  void __fastcall DoCalculatedChecksum(
+    const UnicodeString & FileName, const UnicodeString & Alg, const UnicodeString & Hash);
 };
 //---------------------------------------------------------------------------
 typedef void __fastcall (__closure *TScriptInputEvent)(TScript * Script, const UnicodeString Prompt, UnicodeString & Str);

+ 2 - 9
source/core/SftpFileSystem.cpp

@@ -4057,8 +4057,7 @@ bool __fastcall TSFTPFileSystem::LoadFilesProperties(TStrings * FileList)
 }
 //---------------------------------------------------------------------------
 void __fastcall TSFTPFileSystem::CalculateFilesChecksum(
-  const UnicodeString & Alg, TStrings * FileList, TStrings * Checksums,
-  TCalculatedChecksumEvent OnCalculatedChecksum,
+  const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
   TFileOperationProgressType * OperationProgress, bool FirstLevel)
 {
   FTerminal->CalculateSubFoldersChecksum(Alg, FileList, OnCalculatedChecksum, OperationProgress, FirstLevel);
@@ -4087,7 +4086,6 @@ void __fastcall TSFTPFileSystem::CalculateFilesChecksum(
       do
       {
         bool Success = false;
-        UnicodeString Checksum;
         TRemoteFile * File = NULL;
 
         try
@@ -4103,7 +4101,7 @@ void __fastcall TSFTPFileSystem::CalculateFilesChecksum(
 
             // skip alg
             Packet.GetAnsiString();
-            Checksum = BytesToHex(reinterpret_cast<const unsigned char*>(Packet.GetNextData(Packet.RemainingLength)), Packet.RemainingLength, false);
+            UnicodeString Checksum = BytesToHex(reinterpret_cast<const unsigned char*>(Packet.GetNextData(Packet.RemainingLength)), Packet.RemainingLength, false);
             if (OnCalculatedChecksum != NULL)
             {
               OnCalculatedChecksum(File->FileName, Alg, Checksum);
@@ -4124,11 +4122,6 @@ void __fastcall TSFTPFileSystem::CalculateFilesChecksum(
             // TODO: retries? resume?
             Next = false;
           }
-
-          if (Checksums != NULL)
-          {
-            Checksums->Add(Checksum);
-          }
         }
         __finally
         {

+ 1 - 2
source/core/SftpFileSystem.h

@@ -44,8 +44,7 @@ public:
   virtual bool __fastcall LoadFilesProperties(TStrings * FileList);
   virtual UnicodeString CalculateFilesChecksumInitialize(const UnicodeString & Alg);
   virtual void __fastcall CalculateFilesChecksum(
-    const UnicodeString & Alg, TStrings * FileList, TStrings * Checksums,
-    TCalculatedChecksumEvent OnCalculatedChecksum,
+    const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
     TFileOperationProgressType * OperationProgress, bool FirstLevel);
   virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
     const UnicodeString TargetDir, const TCopyParamType * CopyParam,

+ 4 - 7
source/core/Terminal.cpp

@@ -4535,9 +4535,7 @@ void __fastcall TTerminal::CalculateSubFoldersChecksum(
               SubFileList->AddObject(SubFile->FullFileName, SubFile);
             }
 
-            // do not collect checksums for files in subdirectories,
-            // only send back checksums via callback
-            FFileSystem->CalculateFilesChecksum(Alg, SubFileList.get(), NULL, OnCalculatedChecksum, OperationProgress, false);
+            FFileSystem->CalculateFilesChecksum(Alg, SubFileList.get(), OnCalculatedChecksum, OperationProgress, false);
 
             Success = true;
           }
@@ -4555,9 +4553,8 @@ void __fastcall TTerminal::CalculateSubFoldersChecksum(
   }
 }
 //---------------------------------------------------------------------------
-void __fastcall TTerminal::CalculateFilesChecksum(const UnicodeString & Alg,
-  TStrings * FileList, TStrings * Checksums,
-  TCalculatedChecksumEvent OnCalculatedChecksum)
+void __fastcall TTerminal::CalculateFilesChecksum(
+  const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum)
 {
   TFileOperationProgressType Progress(&DoProgress, &DoFinished);
   OperationStart(Progress, foCalculateChecksum, osRemote, FileList->Count);
@@ -4566,7 +4563,7 @@ void __fastcall TTerminal::CalculateFilesChecksum(const UnicodeString & Alg,
   {
     UnicodeString NormalizedAlg = FFileSystem->CalculateFilesChecksumInitialize(Alg);
 
-    FFileSystem->CalculateFilesChecksum(NormalizedAlg, FileList, Checksums, OnCalculatedChecksum, &Progress, true);
+    FFileSystem->CalculateFilesChecksum(NormalizedAlg, FileList, OnCalculatedChecksum, &Progress, true);
   }
   __finally
   {

+ 2 - 2
source/core/Terminal.h

@@ -570,8 +570,8 @@ public:
   bool CalculateFilesSize(TStrings * FileList, __int64 & Size, TCalculateSizeParams & Params);
   bool __fastcall CalculateLocalFilesSize(TStrings * FileList, __int64 & Size,
     const TCopyParamType * CopyParam, bool AllowDirs, TStrings * Files, TCalculatedSizes * CalculatedSizes);
-  void __fastcall CalculateFilesChecksum(const UnicodeString & Alg, TStrings * FileList,
-    TStrings * Checksums, TCalculatedChecksumEvent OnCalculatedChecksum);
+  void __fastcall CalculateFilesChecksum(
+    const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum);
   void __fastcall ClearCaches();
   TSynchronizeChecklist * __fastcall SynchronizeCollect(const UnicodeString LocalDirectory,
     const UnicodeString RemoteDirectory, TSynchronizeMode Mode,

+ 1 - 2
source/core/WebDAVFileSystem.cpp

@@ -1135,8 +1135,7 @@ bool __fastcall TWebDAVFileSystem::LoadFilesProperties(TStrings * /*FileList*/)
 }
 //---------------------------------------------------------------------------
 void __fastcall TWebDAVFileSystem::CalculateFilesChecksum(
-  const UnicodeString & DebugUsedArg(Alg), TStrings * DebugUsedArg(FileList), TStrings * DebugUsedArg(Checksums),
-  TCalculatedChecksumEvent,
+  const UnicodeString & DebugUsedArg(Alg), TStrings * DebugUsedArg(FileList), TCalculatedChecksumEvent,
   TFileOperationProgressType *, bool DebugUsedArg(FirstLevel))
 {
   DebugFail();

+ 1 - 2
source/core/WebDAVFileSystem.h

@@ -40,8 +40,7 @@ public:
     TChmodSessionAction & Action);
   virtual bool __fastcall LoadFilesProperties(TStrings * FileList);
   virtual void __fastcall CalculateFilesChecksum(
-    const UnicodeString & Alg, TStrings * FileList, TStrings * Checksums,
-    TCalculatedChecksumEvent OnCalculatedChecksum,
+    const UnicodeString & Alg, TStrings * FileList, TCalculatedChecksumEvent OnCalculatedChecksum,
     TFileOperationProgressType * OperationProgress, bool FirstLevel);
   virtual void __fastcall CopyToLocal(TStrings * FilesToCopy,
     const UnicodeString TargetDir, const TCopyParamType * CopyParam,

+ 1 - 1
source/forms/CustomScpExplorer.cpp

@@ -4501,7 +4501,7 @@ void __fastcall TCustomScpExplorerForm::CalculateChecksum(const UnicodeString &
 
     try
     {
-      Terminal->CalculateFilesChecksum(Alg, FileList, NULL, OnCalculatedChecksum);
+      Terminal->CalculateFilesChecksum(Alg, FileList, OnCalculatedChecksum);
     }
     catch(...)
     {