-
Notifications
You must be signed in to change notification settings - Fork 25
ADD
Nilay Nath Sharan edited this page Sep 19, 2025
·
1 revision
flowchart TD
Start(["`**sietch add** <source> <destination>`"]) --> ParseArgs[Parse Arguments & Tags]
ParseArgs --> FindVault{Find Vault Root}
FindVault -->|Not Found| VaultError[❌ Error: Not in vault]
FindVault -->|Found| CheckInit{Vault Initialized?}
CheckInit -->|No| InitError[❌ Error: Run 'sietch init' first]
CheckInit -->|Yes| VerifyFile{Source File Valid?}
VerifyFile -->|No| FileError[❌ Error: File not found/invalid]
VerifyFile -->|Yes| LoadConfig[Load Vault Configuration]
LoadConfig --> ParseChunkSize[Parse Chunk Size from Config]
ParseChunkSize --> ShowMetadata[Display File Metadata]
ShowMetadata --> GetPassphrase[Get Passphrase if Needed]
GetPassphrase --> StartChunking[📦 Start Chunking Process]
%% Chunking Subprocess
StartChunking --> OpenFile[Open Source File]
OpenFile --> CreateChunkDir[Create Chunks Directory]
CreateChunkDir --> InitDedup[Initialize Deduplication Manager]
InitDedup --> ChunkLoop{More Data to Read?}
ChunkLoop -->|No| SaveIndex[Save Deduplication Index]
ChunkLoop -->|Yes| ReadChunk[Read Chunk from File]
ReadChunk --> CalcHash[Calculate Content Hash SHA256]
CalcHash --> Compress{Compression Enabled?}
Compress -->|Yes| ApplyCompression[Apply Compression<br/>gzip/zstd]
Compress -->|No| CheckEncryption{Encryption Enabled?}
ApplyCompression --> CheckEncryption
CheckEncryption -->|No| ProcessDedup[Process with Deduplication Manager]
CheckEncryption -->|Yes| EncryptChunk[Encrypt Chunk Data<br/>AES/GPG]
EncryptChunk --> CalcEncHash[Calculate Encrypted Hash]
CalcEncHash --> ProcessDedup
ProcessDedup --> CheckDedup{Chunk Already Exists?}
CheckDedup -->|Yes| IncrementRef[🔄 Increment Reference Count<br/>Mark as Deduplicated]
CheckDedup -->|No| StoreChunk[💾 Store New Chunk to Disk]
IncrementRef --> CreateRef[Create Chunk Reference]
StoreChunk --> CreateRef
CreateRef --> ChunkLoop
SaveIndex --> CreateManifest[Create File Manifest<br/>- File metadata<br/>- Chunk references<br/>- Tags]
CreateManifest --> StoreManifest[Store Manifest to<br/>.sietch/manifests/]
StoreManifest --> Success[✅ ADD Complete<br/>Show success message]
%% Styling
classDef startEnd fill:#e1f5fe,stroke:#01579b,stroke-width:3px
classDef process fill:#f3e5f5,stroke:#4a148c
classDef decision fill:#fff3e0,stroke:#e65100
classDef error fill:#ffebee,stroke:#c62828
classDef success fill:#e8f5e8,stroke:#2e7d32
classDef subprocess fill:#f1f8e9,stroke:#558b2f
class Start,Success startEnd
class VaultError,InitError,FileError error
class FindVault,CheckInit,VerifyFile,ChunkLoop,Compress,CheckEncryption,CheckDedup decision
class StartChunking,ProcessDedup subprocess
- 🔄 Deduplication: Checks if chunks already exist to save space
- 📦 Chunking: Splits files into configurable-sized chunks
- 🔐 Encryption: Encrypts each chunk individually
- 📝 Manifest Creation: Creates metadata file with chunk references
- ⚡ Compression: Optional compression before encryption
ADD Command:
- Has deduplication logic that saves storage space
- Creates new manifests and chunks
- One-way process (file → vault)
- Chunk processing happens sequentially