Repository Analysis

duplicati/duplicati

Store securely encrypted backups in the cloud!

10.4 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of duplicati/duplicati, a C# project with 14,748 GitHub stars. SynthScan v2.0 examined 335,872 lines of code across 1861 source files, recording 2932 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 10.4 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

10.4
Adjusted Score
10.4
Raw Score
100%
Time Factor
2026-07-13
Last Push
14.7K
Stars
C#
Language
335.9K
Lines of Code
1.9K
Files
2.9K
Pattern Hits
2026-07-14
Scan Date
0.02
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 41HIGH 1MEDIUM 54LOW 2836

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 2932 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Over-Commented Block2656 hits · 2640 pts
SeverityFileLineSnippetContext
LOWDuplicati/ShellExtension/FolderBackupStatus.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/ShellExtension/FolderBackupStatus.cs21COMMENT
LOWDuplicati/ShellExtension/FolderBackupStatus.cs41 /// </summary>COMMENT
LOWDuplicati/ShellExtension/DuplicatiClient.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/ShellExtension/IconOverlayHandler.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/ShellExtension/IconOverlayHandler.cs141 private static readonly Lazy<DuplicatiClient> Client = new(() => new DuplicatiClient());COMMENT
LOWDuplicati/UnitTest/Issue5987.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/SourceMaskingTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/HttpsConfigurationTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue6200.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue6296.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/UriUtilityTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/TestUtils.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/DataFolderSecurityTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue2287.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/BasicSetupHelper.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/BasicSetupHelper.cs41 : Environment.GetEnvironmentVariable("UNITTEST_BASEFOLDER")COMMENT
LOWDuplicati/UnitTest/BasicSetupHelper.cs61 protected readonly string LOGFILE = Path.Combine(BASEFOLDER, "logs/logfile.log");COMMENT
LOWDuplicati/UnitTest/HasherTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue6127.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/PreventEmptySourceTest.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/BackupExclusionAttributeTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue5845.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/LockingDeleteAndCompactTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue1410.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue1723.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/MetadataContentInDatabaseTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/TarZstdCompressionTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue6254.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue6205.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/SVNCheckoutsTest.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/RestoreAllFilesTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/RestoreAllFilesTests.cs221 // contains both files. Each subsequent (newer) version restores only files whoseCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/ArchiveAttributeTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/CompactDisruptionTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/SyntheticFilelistMetadataTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/SyntheticFilelistMetadataTests.cs41 ///COMMENT
LOWDuplicati/UnitTest/SyntheticFilelistMetadataTests.cs61 /// <param name="path">Path to the SQLite database file.</param>COMMENT
LOWDuplicati/UnitTest/SyntheticFilelistMetadataTests.cs401COMMENT
LOWDuplicati/UnitTest/SyntheticFilelistMetadataTests.cs421 /// row into an orphan).COMMENT
LOWDuplicati/UnitTest/SyntheticFilelistMetadataTests.cs481 // a) Detach the FileLookup row of testfile.txt from theCOMMENT
LOWDuplicati/UnitTest/TestMSSQLParser.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue1570.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/Issue6235.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/CompressionTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/SyncCheckoutTest.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/SyncCheckoutTest.cs41/// files removed from a folder that still exists locally are deleted from theCOMMENT
LOWDuplicati/UnitTest/SyncCheckoutTest.cs221 /// </summary>COMMENT
LOWDuplicati/UnitTest/SslCertificateValidatorTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/RestoreHandlerTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/SecretProviderSetSecretTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/MaskingUnmaskingTest.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/ProblematicPathTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/DatabaseUpgraderTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOWDuplicati/UnitTest/DatabaseUpgraderTests.cs41 [Category("Database")]COMMENT
LOWDuplicati/UnitTest/DatabaseUpgraderTests.cs81 Assert.IsTrue(await TableExistsAsync(db, "Configuration"),COMMENT
LOW…cati/UnitTest/LocalDatabaseRemoveRemoteVolumesTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
LOW…cati/UnitTest/LocalDatabaseRemoveRemoteVolumesTests.cs41 {COMMENT
LOWDuplicati/UnitTest/ControllerTests.cs1// Copyright (C) 2026, The Duplicati TeamCOMMENT
2596 more matches not shown…
Hallucination Indicators41 hits · 410 pts
SeverityFileLineSnippetContext
CRITICALDuplicati/UnitTest/SecretProviderSetSecretTests.cs331 await cleanupClient.V1.Secrets.KeyValue.V2.DeleteSecretAsync(createdSecretId, mountPoint: mount)CODE
CRITICALDuplicati/UnitTest/SecretProviderSetSecretTests.cs455 await cleanupClient.V1.Secrets.KeyValue.V2.WriteSecretAsync(CODE
CRITICALDuplicati/UnitTest/SecretProviderSetSecretTests.cs508 await cleanupClient.V1.Secrets.KeyValue.V2.DeleteSecretAsync(createdSecretId, mountPoint: mount)CODE
CRITICALDuplicati/UnitTest/BorderTests.cs160 using var _ = Duplicati.Library.Snapshots.Windows.WindowsShimLoader.NewSeBackupPrivilegeScope();CODE
CRITICALDuplicati/UnitTest/ServerApiIntegrationTests.cs92 Assert.That(importedBackupId, Is.Not.Empty.And.Not.EqualTo(backupId), "Import should register a distinctCODE
CRITICALDuplicati/UnitTest/RecoveryToolTests.cs348 using (var db = await Library.Main.Database.Local.LocalDatabase.CreateLocalDatabaseAsync(options["dbpath"], CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1284 using (var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath))CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1296 using (var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath))CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1314 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1349 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1369 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1403 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1444 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1468 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1533 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1562 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/SyncHandlerTests.cs1595 using var db = new Duplicati.Library.Main.Database.Sync.LocalSyncDatabase(m_dbPath);CODE
CRITICALDuplicati/UnitTest/IssueTests.cs1007 var originalFlags = Duplicati.Library.Common.IO.PosixFile.GetFileFlags(sourceFile, false, true);CODE
CRITICALDuplicati/UnitTest/IssueTests.cs1011 var originalAcl = Duplicati.Library.Common.IO.PosixFile.GetAcl(sourceFile, false, true);CODE
CRITICALDuplicati/UnitTest/IssueTests.cs1033 var restoredFlags = Duplicati.Library.Common.IO.PosixFile.GetFileFlags(restoredFile, false, true);CODE
CRITICALDuplicati/UnitTest/IssueTests.cs1038 var restoredAcl = Duplicati.Library.Common.IO.PosixFile.GetAcl(restoredFile, false, true);CODE
CRITICALDuplicati/Server/WebServerLoader.cs287 if (!string.IsNullOrWhiteSpace(userroot) && userroot.StartsWith(Duplicati.Library.Common.IO.Util.AppendDirSeCODE
CRITICALDuplicati/Server/Program.cs1028 commandlineOptions[LOG_LEVEL_OPTION] = Duplicati.Library.Logging.LogMessageType.Profiling.ToString();CODE
CRITICALDuplicati/Server/webroot/signin/jquery-2.0.3.min.js5};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.CODE
CRITICAL…cati/Server/webroot/ngax/scripts/libs/jquery-ui.min.js6(function(e,t){function i(t,i){var s,n,r,o=t.nodeName.toLowerCase();return"area"===o?(s=t.parentNode,n=s.name,t.href&&n&CODE
CRITICAL…plicati/Server/webroot/ngax/scripts/libs/jquery.min.js4void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(CODE
CRITICALDuplicati/Server/webroot/login/jquery-2.0.3.min.js5};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.CODE
CRITICAL…licati/Library/SecretProvider/HCVaultSecretProvider.cs211 await client.V1.Secrets.KeyValue.V2.ReadSecretAsync(path: secrets.First(), mountPoint: cfg.MountPoint).ConfigureCODE
CRITICAL…licati/Library/SecretProvider/HCVaultSecretProvider.cs233 var data = await _client.V1.Secrets.KeyValue.V2.ReadSecretAsync(secret, mountPoint: _mountPoint).ConfiguCODE
CRITICAL…licati/Library/SecretProvider/HCVaultSecretProvider.cs263 var response = await _client.V1.Secrets.KeyValue.V2.ReadSecretAsync(key, mountPoint: _mountPoint).ConfigCODE
CRITICAL…licati/Library/SecretProvider/HCVaultSecretProvider.cs300 await _client.V1.Secrets.KeyValue.V2.ReadSecretMetadataAsync(key, _mountPoint).ConfigureAwait(false);CODE
CRITICAL…licati/Library/SecretProvider/HCVaultSecretProvider.cs315 await _client.V1.Secrets.KeyValue.V2.WriteSecretAsync(key, payload, null, _mountPoint).ConfigureAwait(false);CODE
CRITICAL…plicati/Library/RestAPI/Serializable/ServerSettings.cs47 this.IsDeprecated = Duplicati.Library.Backends.BackendModules.DeprecatedBackendModules.Contains(backend.CODE
CRITICAL…plicati/Library/RestAPI/Serializable/ServerSettings.cs48 this.IsUntested = Duplicati.Library.Backends.BackendModules.UntestedBackendModules.Contains(backend.ProtCODE
CRITICALDuplicati/Library/Main/ResultClasses.cs381 m_taskController = new Duplicati.Library.Main.Operation.Common.TaskControl();CODE
CRITICAL…Library/Main/Operation/RemoteSynchronizationHandler.cs395 var lastSyncTime = Duplicati.Library.Utility.Utility.EPOCH.AddSeconds((long)lastSync);CODE
CRITICAL…Library/Main/Operation/Common/SourceProviderFactory.cs153 var normalizedMountpoint = Duplicati.Library.Common.IO.Util.AppendDirSeparator(mountpoinCODE
CRITICALDuplicati/CommandLine/CLI/Commands.cs784 if ((new Duplicati.Library.Main.Options(options)).DisableOnBattery && (Duplicati.Library.Utility.PowCODE
CRITICALDuplicati/CommandLine/RecoveryTool/Download.cs76 var p = Duplicati.Library.Main.Volumes.VolumeBase.ParseFilename(file);CODE
CRITICALDuplicati/CommandLine/RecoveryTool/FileIndex.cs81 var p = Duplicati.Library.Main.Volumes.VolumeBase.ParseFilename(Path.GetFileName(file));CODE
CRITICAL…ogleWorkspace/RestoreProvider/RestoreProvider.Drive.cs194 var uploadRequest = driveService.Files.Update(new Google.Apis.Drive.v3.Data.File(), fileId, contentStream, mCODE
Decorative Section Separators45 hits · 124 pts
SeverityFileLineSnippetContext
MEDIUMDuplicati/CommandLine/CLI/help.txt30# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt39# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt49# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt263# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt273# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt282# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt337# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt345# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt352# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt359# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt453# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt463# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt473# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt483# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt493# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt503# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt513# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt522# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt9# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt72# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt100# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt119# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt130# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt146# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt161# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt184# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt208# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt230# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt247# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt301# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt319# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt379# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt394# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt412# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt429# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt438# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt536# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt548# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt557# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt577# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt585# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt637# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt646# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt661# =============================================================================COMMENT
MEDIUMDuplicati/CommandLine/CLI/help.txt693# =============================================================================COMMENT
Verbosity Indicators64 hits · 121 pts
SeverityFileLineSnippetContext
LOWDuplicati/UnitTest/Issue4988.cs54 // Step 1: Create an empty folderCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs58 // Step 2: Backup empty folderCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs62 // Step 3: Find the dblock createdCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs68 // Step 4: Modify the dblock zip archive to simulate corruptionCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs122 // Step 9: List broken filesCOMMENT
LOWDuplicati/UnitTest/Issue4951.cs44 // Step 1: Create a directory and a fileCOMMENT
LOWDuplicati/UnitTest/Issue4951.cs56 // Step 2: Initial backupCOMMENT
LOWDuplicati/UnitTest/Issue4951.cs65 // Step 3: Rename file by changing caseCOMMENT
LOWDuplicati/UnitTest/Issue4951.cs69 // Step 4: Backup againCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs26 // Step 1: Create file A.txt and backupCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs45 // Step 2: Delete A.txt, create B.txt and backupCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs55 // Step 3: Delete the dblock file that the saved dindex referencesCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs76 // Step 4: Recreate the databaseCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs91 // Step 5: Check for invalid DeletedBlock referencesCOMMENT
LOW…licati/UnitTest/CompactBlockVolumeIdConstraintTests.cs124 // Step 1: Backup with both filesCOMMENT
LOW…licati/UnitTest/CompactBlockVolumeIdConstraintTests.cs128 // Step 2: Remove large file and backup (deletes old version, moves large blocks to DeletedBlock)COMMENT
LOW…licati/UnitTest/CompactBlockVolumeIdConstraintTests.cs136 // Step 3: Add large file back and backup (moves large blocks back to Block)COMMENT
LOW…licati/UnitTest/CompactBlockVolumeIdConstraintTests.cs161 // Step 4: Compact - this triggers the bug in the unfixed codebase.COMMENT
LOWDuplicati/UnitTest/Issue6553.cs27 // Step 1: Create file A and backup (Backup 1)COMMENT
LOWDuplicati/UnitTest/Issue6553.cs42 // Step 2: Delete DB and Backup A again (Backup 2)COMMENT
LOWDuplicati/UnitTest/Issue6553.cs55 // Step 3: Prepare for RecreateCOMMENT
LOWDuplicati/UnitTest/Issue6553.cs62 // Step 4: Recreate the databaseCOMMENT
LOWDuplicati/UnitTest/Issue6553.cs75 // Step 5: Verify that we have at least one version (Backup 2)COMMENT
LOWDuplicati/UnitTest/Issue6553.cs84 // Step 6: Check for DeletedBlock entries pointing to Temporary volumesCOMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs95 // Step 1: Run a successful backup — this creates Fileset 0COMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs102 // Step 2: Add a new file with IDENTICAL metadata (same size, same timestamps)COMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs180 // Step 3: Run a new backup. The PreBackupVerify step will:COMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs195 // Step 4: Verify the database is consistentCOMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs199 // Step 5: Verify we have the expected number of filesetsCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs76 // Step 2: Delete the local database to force recreateCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs79 // Step 3: Delete the dblock file (simulate corruption/missing file)COMMENT
LOWDuplicati/UnitTest/Issue6688.cs86 // Step 4: Recreate the databaseCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs148 // Step 2: Modify file and backup again (Version 2)COMMENT
LOWDuplicati/UnitTest/Issue6688.cs157 // Step 3: Delete the database and prepare for recreateCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs57 // Step 1: Create a file with enough content to create blocks and perform initial backupCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs103 // Step 5: Verify the database does not contain invalid referencesCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs127 // Step 1: Create file A and backup (Version 1)COMMENT
LOWDuplicati/UnitTest/Issue6688.cs171 // Step 4: Recreate the databaseCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs185 // Step 5: Verify the database does not contain invalid referencesCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs52 // Step 1: Do initial backup without --changed-filesCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs60 // Step 2: Modify one fileCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs63 // Step 3: Do backup with --changed-files pointing only to the modified fileCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs108 // Step 1: Do initial backupCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs115 // Step 2: Delete one fileCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs118 // Step 3: Do backup with --changed-files and --deleted-filesCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs76 // Step 4: Do another backup (this should NOT fail with fileset mismatch)COMMENT
LOWDuplicati/UnitTest/Issue6529.cs87 // Step 5: Verify data integrity by doing a testCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs131 // Step 4: Do another backup (this should NOT fail)COMMENT
LOWDuplicati/UnitTest/Issue6529.cs151 // Step 1: Initial backupCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs176 // Step 5: Final backup without --changed-filesCOMMENT
LOWDuplicati/UnitTest/DuplicatePathTests.cs207 // Step 1: Do initial backupCOMMENT
LOWDuplicati/UnitTest/DuplicatePathTests.cs214 // Step 2: Modify one fileCOMMENT
LOWDuplicati/UnitTest/DuplicatePathTests.cs217 // Step 3: Do backup with --changed-filesCOMMENT
LOWDuplicati/UnitTest/DuplicatePathTests.cs229 // Step 4: Verify no duplicates in databaseCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs768 // Step 1: Create multipart uploadCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs797 // Step 2: Calculate parts and sign URLsCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs821 // Step 3: Upload each partCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs867 // Step 4: Complete multipart uploadCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs886 // Step 5: Register the file entryCOMMENT
LOW…ati/Library/Main/Database/Local/LocalRepairDatabase.cs1999 // Step 1: Create temp table with Metadataset IDs referencing empty blocksets (excluding the one to keep)COMMENT
4 more matches not shown…
Structural Annotation Overuse64 hits · 121 pts
SeverityFileLineSnippetContext
LOWDuplicati/UnitTest/Issue4988.cs54 // Step 1: Create an empty folderCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs58 // Step 2: Backup empty folderCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs62 // Step 3: Find the dblock createdCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs68 // Step 4: Modify the dblock zip archive to simulate corruptionCOMMENT
LOWDuplicati/UnitTest/Issue4988.cs122 // Step 9: List broken filesCOMMENT
LOWDuplicati/UnitTest/Issue4951.cs44 // Step 1: Create a directory and a fileCOMMENT
LOWDuplicati/UnitTest/Issue4951.cs56 // Step 2: Initial backupCOMMENT
LOWDuplicati/UnitTest/Issue4951.cs65 // Step 3: Rename file by changing caseCOMMENT
LOWDuplicati/UnitTest/Issue4951.cs69 // Step 4: Backup againCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs26 // Step 1: Create file A.txt and backupCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs45 // Step 2: Delete A.txt, create B.txt and backupCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs55 // Step 3: Delete the dblock file that the saved dindex referencesCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs76 // Step 4: Recreate the databaseCOMMENT
LOWDuplicati/UnitTest/Issue6552.cs91 // Step 5: Check for invalid DeletedBlock referencesCOMMENT
LOW…licati/UnitTest/CompactBlockVolumeIdConstraintTests.cs124 // Step 1: Backup with both filesCOMMENT
LOW…licati/UnitTest/CompactBlockVolumeIdConstraintTests.cs128 // Step 2: Remove large file and backup (deletes old version, moves large blocks to DeletedBlock)COMMENT
LOW…licati/UnitTest/CompactBlockVolumeIdConstraintTests.cs136 // Step 3: Add large file back and backup (moves large blocks back to Block)COMMENT
LOW…licati/UnitTest/CompactBlockVolumeIdConstraintTests.cs161 // Step 4: Compact - this triggers the bug in the unfixed codebase.COMMENT
LOWDuplicati/UnitTest/Issue6553.cs27 // Step 1: Create file A and backup (Backup 1)COMMENT
LOWDuplicati/UnitTest/Issue6553.cs42 // Step 2: Delete DB and Backup A again (Backup 2)COMMENT
LOWDuplicati/UnitTest/Issue6553.cs55 // Step 3: Prepare for RecreateCOMMENT
LOWDuplicati/UnitTest/Issue6553.cs62 // Step 4: Recreate the databaseCOMMENT
LOWDuplicati/UnitTest/Issue6553.cs75 // Step 5: Verify that we have at least one version (Backup 2)COMMENT
LOWDuplicati/UnitTest/Issue6553.cs84 // Step 6: Check for DeletedBlock entries pointing to Temporary volumesCOMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs95 // Step 1: Run a successful backup — this creates Fileset 0COMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs102 // Step 2: Add a new file with IDENTICAL metadata (same size, same timestamps)COMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs180 // Step 3: Run a new backup. The PreBackupVerify step will:COMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs195 // Step 4: Verify the database is consistentCOMMENT
LOW…ati/UnitTest/SharedMetadataRemoveRemoteVolumesTests.cs199 // Step 5: Verify we have the expected number of filesetsCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs76 // Step 2: Delete the local database to force recreateCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs79 // Step 3: Delete the dblock file (simulate corruption/missing file)COMMENT
LOWDuplicati/UnitTest/Issue6688.cs86 // Step 4: Recreate the databaseCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs148 // Step 2: Modify file and backup again (Version 2)COMMENT
LOWDuplicati/UnitTest/Issue6688.cs157 // Step 3: Delete the database and prepare for recreateCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs57 // Step 1: Create a file with enough content to create blocks and perform initial backupCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs103 // Step 5: Verify the database does not contain invalid referencesCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs127 // Step 1: Create file A and backup (Version 1)COMMENT
LOWDuplicati/UnitTest/Issue6688.cs171 // Step 4: Recreate the databaseCOMMENT
LOWDuplicati/UnitTest/Issue6688.cs185 // Step 5: Verify the database does not contain invalid referencesCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs52 // Step 1: Do initial backup without --changed-filesCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs60 // Step 2: Modify one fileCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs63 // Step 3: Do backup with --changed-files pointing only to the modified fileCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs108 // Step 1: Do initial backupCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs115 // Step 2: Delete one fileCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs118 // Step 3: Do backup with --changed-files and --deleted-filesCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs76 // Step 4: Do another backup (this should NOT fail with fileset mismatch)COMMENT
LOWDuplicati/UnitTest/Issue6529.cs87 // Step 5: Verify data integrity by doing a testCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs131 // Step 4: Do another backup (this should NOT fail)COMMENT
LOWDuplicati/UnitTest/Issue6529.cs151 // Step 1: Initial backupCOMMENT
LOWDuplicati/UnitTest/Issue6529.cs176 // Step 5: Final backup without --changed-filesCOMMENT
LOWDuplicati/UnitTest/DuplicatePathTests.cs207 // Step 1: Do initial backupCOMMENT
LOWDuplicati/UnitTest/DuplicatePathTests.cs214 // Step 2: Modify one fileCOMMENT
LOWDuplicati/UnitTest/DuplicatePathTests.cs217 // Step 3: Do backup with --changed-filesCOMMENT
LOWDuplicati/UnitTest/DuplicatePathTests.cs229 // Step 4: Verify no duplicates in databaseCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs768 // Step 1: Create multipart uploadCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs797 // Step 2: Calculate parts and sign URLsCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs821 // Step 3: Upload each partCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs867 // Step 4: Complete multipart uploadCOMMENT
LOWDuplicati/Library/Backend/DrimeCloud/DrimeBackend.cs886 // Step 5: Register the file entryCOMMENT
LOW…ati/Library/Main/Database/Local/LocalRepairDatabase.cs1999 // Step 1: Create temp table with Metadataset IDs referencing empty blocksets (excluding the one to keep)COMMENT
4 more matches not shown…
Deep Nesting19 hits · 19 pts
SeverityFileLineSnippetContext
LOWTools/Commandline/generate-dlist-files.py319CODE
LOWTools/Commandline/generate-dlist-files.py260CODE
LOWTools/Commandline/RestoreFromPython/ijson.py63CODE
LOWTools/Commandline/RestoreFromPython/ijson.py86CODE
LOWTools/Commandline/RestoreFromPython/ijson.py120CODE
LOWTools/Commandline/RestoreFromPython/ijson.py168CODE
LOWTools/Commandline/RestoreFromPython/ijson.py199CODE
LOWTools/Commandline/RestoreFromPython/ijson.py225CODE
LOWTools/Commandline/RestoreFromPython/ijson.py243CODE
LOWTools/Commandline/RestoreFromPython/ijson.py45CODE
LOW…s/Commandline/RestoreFromPython/restore_from_python.py30CODE
LOW…s/Commandline/RestoreFromPython/restore_from_python.py108CODE
LOW…s/Commandline/RestoreFromPython/restore_from_python.py205CODE
LOW…s/Commandline/RestoreFromPython/restore_from_python.py213CODE
LOW…s/Commandline/RestoreFromPython/restore_from_python.py271CODE
LOW…s/Commandline/RestoreFromPython/restore_from_python.py366CODE
LOWTools/Commandline/RestoreFromPython/pyaescrypt.py19CODE
LOWTools/Commandline/ReEncrypt/ReEncrypt.py53CODE
LOWTools/Commandline/ReEncrypt/ReEncrypt.py138CODE
Redundant / Tautological Comments7 hits · 10 pts
SeverityFileLineSnippetContext
LOW…Library/Snapshots/apfs-scripts/remove-apfs-snapshot.sh27 # Check if NAME looks like an APFS snapshot (com.apple.TimeMachine...)COMMENT
LOWDuplicati/Library/Snapshots/apfs-scripts/find-volume.sh20# Check if it is an APFS volumeCOMMENT
LOWReleaseBuilder/Resources/MacOS/Agent/uninstall.sh12 # Check if the LaunchAgent is loaded for the userCOMMENT
LOWReleaseBuilder/Resources/MacOS/CLI/uninstall.sh12 # Check if the LaunchAgent is loaded for the userCOMMENT
LOWReleaseBuilder/Resources/MacOS/AppBundle/uninstall.sh12 # Check if the LaunchAgent is loaded for the userCOMMENT
LOWReleaseBuilder/Resources/debian/init-script-example.sh28 # Check if a given process pid's cmdline matches a given nameCOMMENT
LOWReleaseBuilder/Resources/debian/init-script-example.sh41# Check if the process is running looking at /procCOMMENT
Self-Referential Comments4 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUM…i/Library/Snapshots/lvm-scripts/create-lvm-snapshot.sh75# Create the logical volume snapsnotCOMMENT
MEDIUM…i/Library/Snapshots/lvm-scripts/create-lvm-snapshot.sh106# Create a mount pointCOMMENT
MEDIUMTools/Commandline/generate-dlist-files.py424 # Create the zip fileSTRING
MEDIUM…uilder/Resources/fedora/duplicati-install-recursive.sh3# This file is a workaround to install a directory recursively,COMMENT
Hyper-Verbose Identifiers9 hits · 9 pts
SeverityFileLineSnippetContext
LOW…ot/ngax/scripts/controllers/RestoreDirectController.js83 function checkForValidBackupDestination(continuation) {CODE
LOW…broot/ngax/scripts/controllers/EditBackupController.js27 function computePassPhraseStrength() {CODE
LOW…broot/ngax/scripts/controllers/EditBackupController.js273 function resetAllRetentionOptionsExcept(optionToKeep) {CODE
LOW…broot/ngax/scripts/controllers/EditBackupController.js363 function checkForGeneratedPassphrase(continuation) {CODE
LOW…broot/ngax/scripts/controllers/EditBackupController.js379 function checkForChangedPassphrase(continuation) {CODE
LOW…broot/ngax/scripts/controllers/EditBackupController.js420 function checkForValidBackupDestination(continuation) {CODE
LOW…broot/ngax/scripts/controllers/EditBackupController.js433 function checkForDisabledEncryption(continuation) {CODE
LOWDuplicati/Library/Modules/Builtin/RunScript.cs533 private class ConsoleDataHandlerCODE
LOWTools/Verification/DuplicatiVerify.py159 def convert_bytes_to_readable(size):CODE
Unused Imports9 hits · 9 pts
SeverityFileLineSnippetContext
LOWTools/Commandline/generate-dlist-files.py22CODE
LOWTools/Commandline/RestoreFromPython/ijson.py27CODE
LOWTools/Commandline/ReEncrypt/ReEncrypt.py22CODE
LOWTools/Commandline/ReEncrypt/ReEncrypt.py29CODE
LOWTools/Commandline/ReEncrypt/ReEncrypt.py29CODE
LOWTools/Commandline/ReEncrypt/ReEncrypt.py29CODE
LOWTools/Verification/DuplicatiVerify.py12CODE
LOWTools/Verification/DuplicatiVerify.py13CODE
LOWTools/Verification/DuplicatiVerify.py15CODE
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGH…Duplicati.Browser.Test/Features/LocalBackup.feature.cs3// This code was generated by SpecFlow (https://www.specflow.org/).COMMENT
Fake / Example Data6 hits · 6 pts
SeverityFileLineSnippetContext
LOW…/Server/webroot/ngax/scripts/services/DialogService.js88 'placeholder': placeholder,CODE
LOWDuplicati/Library/Modules/Builtin/Strings.cs179 public static string InvalidRecipient(string recipient) => LC.L(@"The recipient ""{0}"" is not a valid email addCODE
LOWDuplicati/Library/Modules/Builtin/run-script-example.sh199 EMAIL="admin@example.com"CODE
LOW…ti/Duplicati.Browser.Test/PageObjects/AddBackupPage.cs47 if (NameTextboxElement.WaitForElementBeing(e => e.GetAttribute("placeholder") is "Moje Zdjęcia" or "My Photos"))CODE
LOW…ti/Duplicati.Browser.Test/PageObjects/AddBackupPage.cs88 if (FilePathTextbox.WaitForElementBeing(e => e.GetAttribute("placeholder") is "Wprowadź ścieżkę docelową"))CODE
LOW…ti/Duplicati.Browser.Test/PageObjects/AddBackupPage.cs114 if (FilePathTextbox.WaitForElementBeing(e => e.GetAttribute("placeholder") is "Dodaj ścieżkę bezpośrednio"))CODE
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM…n/RemoteSynchronization/RemoteSynchronizationRunner.cs375 // TODO low memory mode, where things aren't kept in memory. Maybe utilize SQLite?COMMENT
MEDIUM…ti/WebserverCore/Middlewares/SynologyAuthMiddleware.cs350 // 1) Prefer group-name membership (more robust).COMMENT
Excessive Try-Catch Wrapping4 hits · 5 pts
SeverityFileLineSnippetContext
MEDIUMTools/Commandline/pause-resume.py63 print("Something went wrong -- %d %s" % (r.status_code, r.reason))CODE
MEDIUMTools/Commandline/generate-dlist-files.py491 print(f"Error: Database file not found: {args.database}", file=sys.stderr)STRING
MEDIUMTools/Commandline/generate-dlist-files.py527 print(f"Error: Fileset ID {args.fileset_id} not found", file=sys.stderr)STRING
LOW…s/Commandline/RestoreFromPython/restore_from_python.py94 except Exception as e:CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
LOWDuplicati/Library/Backend/OneDrive/SharePointV2.cs102 // Make sure to replace any "//" in the original path with "/", so the substrings line up.COMMENT