Skip to content
Nilay Nath Sharan edited this page Sep 19, 2025 · 1 revision

ADD Command Flow

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
Loading

ADD (Storage) - Key Features:

  • 🔄 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

Unique Aspects:

ADD Command:

  • Has deduplication logic that saves storage space
  • Creates new manifests and chunks
  • One-way process (file → vault)
  • Chunk processing happens sequentially

Clone this wiki locally