1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// UpdateProduce.cpp 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "StdAfx.h" 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "UpdateProduce.h" 6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 7baa3858d3f5d128a5c8466b700098109edcad5f2repo syncusing namespace NUpdateArchive; 8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 9baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstatic const char *kUpdateActionSetCollision = "Internal collision in update action set"; 10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 11baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid UpdateProduce( 12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CRecordVector<CUpdatePair> &updatePairs, 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CActionSet &actionSet, 14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CRecordVector<CUpdatePair2> &operationChain, 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync IUpdateProduceCallback *callback) 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (int i = 0; i < updatePairs.Size(); i++) 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CUpdatePair &pair = updatePairs[i]; 20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CUpdatePair2 up2; 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.IsAnti = false; 23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.DirIndex = pair.DirIndex; 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.ArcIndex = pair.ArcIndex; 25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.NewData = up2.NewProps = true; 26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync switch(actionSet.StateActions[pair.State]) 28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync case NPairAction::kIgnore: 30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync /* 31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (pair.State != NPairState::kOnlyOnDisk) 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync IgnoreArchiveItem(m_ArchiveItems[pair.ArcIndex]); 33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync // cout << "deleting"; 34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync */ 35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (callback) 36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync callback->ShowDeleteFile(pair.ArcIndex); 37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync continue; 38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync case NPairAction::kCopy: 40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (pair.State == NPairState::kOnlyOnDisk) 41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync throw kUpdateActionSetCollision; 42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.NewData = up2.NewProps = false; 43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync break; 44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync case NPairAction::kCompress: 46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (pair.State == NPairState::kOnlyInArchive || 47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync pair.State == NPairState::kNotMasked) 48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync throw kUpdateActionSetCollision; 49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync break; 50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync case NPairAction::kCompressAsAnti: 52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.IsAnti = true; 53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync break; 54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync operationChain.Add(up2); 56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync operationChain.ReserveDown(); 58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 59