5 #include "UpdateProduce.h"
7 using namespace NUpdateArchive;
9 static const char *kUpdateActionSetCollision =
10 "Internal collision in update action set";
13 const CObjectVector<CUpdatePair> &updatePairs,
14 const NUpdateArchive::CActionSet &actionSet,
15 CObjectVector<CUpdatePair2> &operationChain)
17 for(int i = 0; i < updatePairs.Size(); i++)
19 // CUpdateArchiveRange aRange;
20 const CUpdatePair &pair = updatePairs[i];
24 pair2.ArchiveItemIndex = pair.ArchiveItemIndex;
25 pair2.DirItemIndex = pair.DirItemIndex;
26 pair2.ExistInArchive = (pair.State != NPairState::kOnlyOnDisk);
27 pair2.ExistOnDisk = (pair.State != NPairState::kOnlyInArchive && pair.State != NPairState::kNotMasked);
28 switch(actionSet.StateActions[pair.State])
30 case NPairAction::kIgnore:
32 if (pair.State != NPairState::kOnlyOnDisk)
33 IgnoreArchiveItem(m_ArchiveItems[pair.ArchiveItemIndex]);
34 // cout << "deleting";
37 case NPairAction::kCopy:
39 if (pair.State == NPairState::kOnlyOnDisk)
40 throw kUpdateActionSetCollision;
41 pair2.NewData = pair2.NewProperties = false;
42 operationChain.Add(pair2);
45 case NPairAction::kCompress:
47 if (pair.State == NPairState::kOnlyInArchive ||
48 pair.State == NPairState::kNotMasked)
49 throw kUpdateActionSetCollision;
50 pair2.NewData = pair2.NewProperties = true;
51 operationChain.Add(pair2);
54 case NPairAction::kCompressAsAnti:
57 pair2.NewData = pair2.NewProperties = true;
58 operationChain.Add(pair2);