Skip to content

Commit f774817

Browse files
committed
WIP
1 parent 79996a6 commit f774817

File tree

3 files changed

+20
-26
lines changed

3 files changed

+20
-26
lines changed

Src/DirActions.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,11 @@ UPDATEITEM_TYPE UpdateDiffAfterOperation(const FileActionItem & act, CDiffContex
252252
// UI dependent.
253253
switch (act.UIResult)
254254
{
255-
case FileActionItem::UI_SYNC:
255+
case FileActionItem::UI_COPY:
256+
case FileActionItem::UI_COPY_DIFFITEMS:
256257
bUpdateSrc = true;
257258
bUpdateDest = true;
258-
CopyDiffSideAndProperties(ctxt, di, act.UIOrigin, act.UIDestination);
259+
CopyDiffSideAndProperties(ctxt, di, act.UIOrigin, act.UIDestination, act.UIResult);
259260
if (ctxt.GetCompareDirs() > 2)
260261
SetDiffCompare(di, DIFFCODE::NOCMP);
261262
else
@@ -266,7 +267,7 @@ UPDATEITEM_TYPE UpdateDiffAfterOperation(const FileActionItem & act, CDiffContex
266267
case FileActionItem::UI_MOVE:
267268
bUpdateSrc = true;
268269
bUpdateDest = true;
269-
CopyDiffSideAndProperties(ctxt, di, act.UIOrigin, act.UIDestination);
270+
CopyDiffSideAndProperties(ctxt, di, act.UIOrigin, act.UIDestination, act.UIResult);
270271
UnsetDiffSide(ctxt, di, act.UIOrigin);
271272
SetDiffCompare(di, DIFFCODE::NOCMP);
272273
break;
@@ -1083,9 +1084,10 @@ int GetColImage(const DIFFITEM &di)
10831084
* @note This does not update UI - ReloadItemStatus() does
10841085
* @sa CDirDoc::ReloadItemStatus()
10851086
*/
1086-
void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int dst)
1087+
void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int dst, int action)
10871088
{
1088-
if (di.diffcode.exists(src))
1089+
if (di.diffcode.exists(src) &&
1090+
action != FileActionItem::UI_COPY_DIFFITEMS || di.diffcode.isResultDiff())
10891091
{
10901092
di.diffcode.diffcode |= (DIFFCODE::FIRST << dst);
10911093
// copy file properties other than ctime
@@ -1099,10 +1101,7 @@ void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int ds
10991101
if (di.HasChildren())
11001102
{
11011103
for (DIFFITEM* pdic = di.GetFirstChild(); pdic; pdic = pdic->GetFwdSiblingLink())
1102-
{
1103-
CopyDiffSideAndProperties(ctxt, *pdic, src, dst);
1104-
UpdateStatusFromDisk(ctxt, di, dst);
1105-
}
1104+
CopyDiffSideAndProperties(ctxt, *pdic, src, dst, action);
11061105
}
11071106
}
11081107

Src/DirActions.h

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ int GetColImage(const DIFFITEM &di);
167167

168168
void SetDiffStatus(DIFFITEM& di, unsigned diffcode, unsigned mask);
169169
void SetDiffCompare(DIFFITEM& di, unsigned diffcode);
170-
void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int dst);
170+
void CopyDiffSideAndProperties(CDiffContext& ctxt, DIFFITEM& di, int src, int dst, int action);
171171
void UnsetDiffSide(const CDiffContext& ctxt, DIFFITEM& di, int index);
172172
void UpdateStatusFromDisk(CDiffContext& ctxt, DIFFITEM& di, int index);
173173
int UpdateCompareFlagsAfterSync(DIFFITEM& di, bool bRecursive);
@@ -366,12 +366,10 @@ struct DirActions
366366
{
367367
if (!di.HasChildren())
368368
return (di.diffcode.diffcode != 0 && (di.diffcode.isResultSame() || di.diffcode.isResultFiltered() || di.diffcode.isResultError()));
369-
DIFFITEM* pdi = di.GetFirstChild();
370-
while (pdi)
369+
for (DIFFITEM* pdic = di.GetFirstChild(); pdic; pdic = pdic->GetFwdSiblingLink())
371370
{
372-
if (IsItemIdenticalOrSkipped(*pdi))
371+
if (IsItemIdenticalOrSkipped(*pdic))
373372
return true;
374-
pdi = pdi->GetFwdSiblingLink();
375373
}
376374
return false;
377375
}
@@ -385,12 +383,8 @@ struct DirActions
385383
{
386384
if (!includeIdenticalOrSkipped && it.second->HasChildren())
387385
{
388-
const DIFFITEM* pdi = it.second->GetFirstChild();
389-
while (pdi)
390-
{
391-
CopyItem(pscript, { it.first, pdi }, includeIdenticalOrSkipped, src, dst);
392-
pdi = pdi->GetFwdSiblingLink();
393-
}
386+
for (DIFFITEM* pdic = di.GetFirstChild(); pdic; pdic = pdic->GetFwdSiblingLink())
387+
CopyItem(pscript, { it.first, pdic }, includeIdenticalOrSkipped, src, dst);
394388
return pscript;
395389
}
396390
FileActionItem act;
@@ -404,7 +398,7 @@ struct DirActions
404398
act.context = it.first;
405399
act.dirflag = di.diffcode.isDirectory();
406400
act.atype = FileAction::ACT_COPY;
407-
act.UIResult = FileActionItem::UI_SYNC;
401+
act.UIResult = includeIdenticalOrSkipped ? FileActionItem::UI_COPY : FileActionItem::UI_COPY_DIFFITEMS;
408402
act.UIOrigin = srcidx;
409403
act.UIDestination = dstidx;
410404
pscript->AddActionItem(act);

Src/FileActionScript.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,12 @@ struct FileActionItem : public FileAction
6464
*/
6565
enum UI_RESULT
6666
{
67-
UI_SYNC = 1, /**< Make items identical (synchronized). */
68-
UI_MOVE, /**< Move items. */
69-
UI_DEL, /**< Remove left item. */
70-
UI_DONT_CARE, /**< Ignore the GUI change. */
71-
UI_RENAME /**< Rename item. */
67+
UI_COPY = 1, /**< Copy items. */
68+
UI_COPY_DIFFITEMS, /**< Copy diff items. */
69+
UI_MOVE, /**< Move items. */
70+
UI_DEL, /**< Remove left item. */
71+
UI_DONT_CARE, /**< Ignore the GUI change. */
72+
UI_RENAME /**< Rename item. */
7273
};
7374

7475
/**

0 commit comments

Comments
 (0)