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{ 17cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FOR_VECTOR (i, updatePairs) 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CUpdatePair &pair = updatePairs[i]; 20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CUpdatePair2 up2; 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.DirIndex = pair.DirIndex; 23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.ArcIndex = pair.ArcIndex; 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.NewData = up2.NewProps = true; 25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky up2.UseArcProps = false; 26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 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; 42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (pair.State == NPairState::kOnlyInArchive) 43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (pair.HostIndex >= 0) 45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky /* 47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky ignore alt stream if 48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 1) no such alt stream in Disk 49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 2) there is Host file in disk 50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky */ 51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (updatePairs[pair.HostIndex].DirIndex >= 0) 52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky continue; 53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.NewData = up2.NewProps = false; 56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky up2.UseArcProps = true; 57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync break; 58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync case NPairAction::kCompress: 60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (pair.State == NPairState::kOnlyInArchive || 61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync pair.State == NPairState::kNotMasked) 62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync throw kUpdateActionSetCollision; 63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync break; 64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync case NPairAction::kCompressAsAnti: 66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync up2.IsAnti = true; 67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky up2.UseArcProps = (pair.ArcIndex >= 0); 68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync break; 69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 70baa3858d3f5d128a5c8466b700098109edcad5f2repo sync operationChain.Add(up2); 71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 72baa3858d3f5d128a5c8466b700098109edcad5f2repo sync operationChain.ReserveDown(); 73baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 74