From 9977c3f14d1fb1935db73bb235d4bc26b4de58a6 Mon Sep 17 00:00:00 2001 From: Ivan Olexyn Date: Thu, 23 Jan 2020 23:00:27 +0100 Subject: [PATCH] Changes... --- README.md | 4 +- src/com/olexyn/ensync/Flow.java | 10 +- .../ensync/artifacts/SyncDirectory.java | 187 +++-- src/com/olexyn/ensync/artifacts/SyncFile.java | 15 +- .../ensync/file-ops-covered-vs-missing.png | Bin 25133 -> 56038 bytes .../ensync/file-ops-covered-vs-missing.uxf | 660 ++++++++++++++---- 6 files changed, 666 insertions(+), 210 deletions(-) diff --git a/README.md b/README.md index f5c2d03..4161433 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,8 @@ Sync files across directories. - To do so .listDeleted would need to be a field of Dir - And the .lists of every dir would need to be calculated before any deletion took place. - Check if the reduced reobustness is worth the prettier solution. - - File is created in DirA - - Sync creates the file in DirB + - File is created in DirB + - Sync creates the file in DirA - Sync creates the file in DirB - this means the file in DirB is overwritten with `cp` for no reason. - implement a check to prevent this. \ No newline at end of file diff --git a/src/com/olexyn/ensync/Flow.java b/src/com/olexyn/ensync/Flow.java index 847e3c4..d95a968 100644 --- a/src/com/olexyn/ensync/Flow.java +++ b/src/com/olexyn/ensync/Flow.java @@ -38,7 +38,7 @@ public class Flow { String stateFilePath = syncDirectory.stateFilePath(path); if (new File(stateFilePath).exists()) { - syncDirectory.readStateFile(syncDirectory.path); + syncDirectory.readStateFile(); } else { syncDirectory.writeStateFile(path); } @@ -53,11 +53,11 @@ public class Flow { String path = syncDirectory.path; - syncDirectory.readState(path); + syncDirectory.readState(); - syncDirectory.makeListCreated(path); - syncDirectory.makeListDeleted(path); - syncDirectory.makeListModified(path); + syncDirectory.makeListCreated(); + syncDirectory.makeListDeleted(); + syncDirectory.makeListModified(); syncDirectory.doCreate(); syncDirectory.doDelete(); diff --git a/src/com/olexyn/ensync/artifacts/SyncDirectory.java b/src/com/olexyn/ensync/artifacts/SyncDirectory.java index 30abcd7..831a488 100644 --- a/src/com/olexyn/ensync/artifacts/SyncDirectory.java +++ b/src/com/olexyn/ensync/artifacts/SyncDirectory.java @@ -40,7 +40,7 @@ public class SyncDirectory { /** * NOTE that the SFile().lastModifiedOld is not set here, so it is 0 by default. */ - public Map readState(String path) { + public Map readState() { Map filemap = new HashMap<>(); Execute.TwoBr find = x.execute(new String[]{"find", @@ -64,7 +64,7 @@ public class SyncDirectory { /** * READ the contents of StateFile to Map. */ - public Map readStateFile(String path) { + public Map readStateFile() { Map filemap = new HashMap<>(); List lines = tools.fileToLines(new File(stateFilePath(path))); @@ -76,7 +76,7 @@ public class SyncDirectory { String sFilePath = line.replace(modTimeString + " ", ""); SyncFile sfile = new SyncFile(sFilePath); - sfile.setLastModifiedOld(modTime); + sfile.setStateFileTime(modTime); filemap.put(sFilePath, sfile); } @@ -92,10 +92,10 @@ public class SyncDirectory { * * @return */ - public void makeListCreated(String path) { + public void makeListCreated() { listCreated = new ArrayList<>(); - Map fromA = readState(path); - Map substractB = readStateFile(path); + Map fromA = readState(); + Map substractB = readStateFile(); listCreated = tools.mapMinus(fromA, substractB); } @@ -112,10 +112,10 @@ public class SyncDirectory { * * @return */ - public void makeListDeleted(String path) { + public void makeListDeleted() { listDeleted = new ArrayList<>(); - Map fromA = readStateFile(path); - Map substractB = readState(path); + Map fromA = readStateFile(); + Map substractB = readState(); listDeleted = tools.mapMinus(fromA, substractB); @@ -128,12 +128,12 @@ public class SyncDirectory { * * @return */ - public void makeListModified(String path) { + public void makeListModified() { listModified = new ArrayList<>(); - Map oldMap = readStateFile(path); + Map oldMap = readStateFile(); - for (Map.Entry newFileEntry : readState(path).entrySet()) { + for (Map.Entry newFileEntry : readState().entrySet()) { // If KEY exists in OLD , thus FILE was NOT created. String newFileKey = newFileEntry.getKey(); @@ -144,7 +144,7 @@ public class SyncDirectory { long lastModifiedNew = newFile.lastModified(); - long lastModifiedOld = oldMap.get(newFileKey).lastModifiedOld(); + long lastModifiedOld = oldMap.get(newFileKey).stateFileTime(); if (lastModifiedNew > lastModifiedOld) { listModified.add(newFile); @@ -178,61 +178,114 @@ public class SyncDirectory { } - public void doCreate() { + private class Info { + + private String relativePath = null; + private String thisFilePath = null; + private String otherFilePath = null; + private File otherFile = null; + private String otherParentPath = null; + private File otherParentFile = null; + private long thisStateFileTime = 0; + private long thisTimeModified = 0; + private long otherTimeModified = 0; + + + private Info(SyncDirectory thisSD, + SyncFile sFile, + SyncDirectory otherSD) { + // Example: + // syncDirectory /foo + // otherSyncDirectory /bar + // createdFile /foo/hello/created-file.gif + // relativePath /hello/created-file.gif + this.relativePath = sFile.getPath().replace(thisSD.path, ""); + this.thisFilePath = sFile.getPath(); + this.otherFilePath = otherSD.path + relativePath; + this.otherFile = new File(otherFilePath); + + this.otherParentPath = otherFile.getParent(); + this.otherParentFile = new File(otherParentPath); + + if (thisSD.readStateFile().get(thisFilePath) != null) { + this.thisStateFileTime = thisSD.readStateFile().get(thisFilePath).stateFileTime(); + } else { + // thisFile does not exist in StateFile, a value of 0 can be seen as equal to "never existed". + this.thisStateFileTime = 0; + } + this.thisTimeModified = sFile.lastModified(); - for (File createdFile : listCreated) { - for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { - SyncDirectory otherSyncDirectory = otherEntry.getValue(); + if (otherFile.exists()) { - if (!this.equals(otherSyncDirectory)) { - // Example: - // syncDirectory /foo - // otherSyncDirectory /bar - // createdFile /foo/hello/created-file.gif - // relativePath /hello/created-file.gif - String relativePath = createdFile.getPath().replace(this.path, ""); - String targetPath = otherSyncDirectory.path + relativePath; - String targetParentPath = new File(targetPath).getParent(); - if (!new File(targetParentPath).exists()) { - String[] cmd = new String[]{"mkdir", - "-p", - targetParentPath}; - x.execute(cmd); - } + this.otherTimeModified = otherFile.lastModified(); - String[] cmd = new String[]{"cp", - createdFile.getPath(), - otherSyncDirectory.path + relativePath}; - x.execute(cmd); + } else { + if (otherSD.readStateFile().get(otherFilePath) != null) { + this.otherTimeModified = otherSD.readStateFile().get(otherFilePath).stateFileTime(); + } else { + this.otherTimeModified = 0; } } } + + } + public void doCreate() { + + for (SyncFile createdFile : listCreated) { + + if (createdFile.isFile()) { + + for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { + SyncDirectory otherSyncDirectory = otherEntry.getValue(); + + if (!this.equals(otherSyncDirectory)) { + + Info info = new Info(this, createdFile, otherSyncDirectory); + + createFile(info); + } + } + } + } + } + + + /** + * + */ public void doDelete() { - for (File deletedFile : listDeleted) { + for (SyncFile deletedFile : listDeleted) { + for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { SyncDirectory otherSyncDirectory = otherEntry.getValue(); if (!this.equals(otherSyncDirectory)) { - String relativePath = deletedFile.getPath().replace(this.path, ""); - String[] cmd = new String[]{"rm", - "-r", - otherSyncDirectory.path + relativePath}; - x.execute(cmd); - } - } - } + Info info = new Info(this, deletedFile, otherSyncDirectory); + if (info.otherFile.isFile()) { + // if the otherFile was created with ensync it will have the == TimeModified. + if (info.thisStateFileTime >= info.otherTimeModified) { + String[] cmd = new String[]{"rm", + "-r", + info.otherFilePath}; + x.execute(cmd); + } + } + } + } + } } + public void doModify() { for (SyncFile modifiedFile : this.listModified) { @@ -244,32 +297,10 @@ public class SyncDirectory { if (!this.equals(otherSyncDirectory)) { - String relativePath = modifiedFile.getPath().replace(this.path, ""); - - - String otherFilePath = otherSyncDirectory.path + relativePath; - SyncFile otherFile = new SyncFile(otherFilePath); - - if (otherFile.exists()) { - if (modifiedFile.lastModified() > otherFile.lastModified()) { - // IF both Files exist, and this File NEWER -> UPDATE the other File - String[] cmd = new String[]{"cp", - modifiedFile.getPath(), - otherFilePath}; - x.execute(cmd); - } - } else { - // IF other file does NOT exist -> UPDATE (i.e. create) the other File - String[] cmd = new String[]{"mkdir", - "-p", - otherFilePath}; - x.execute(cmd); + Info info = new Info(this, modifiedFile, otherSyncDirectory); - cmd = new String[]{"cp", - modifiedFile.getPath(), - otherFilePath}; - x.execute(cmd); - } + + createFile(info); } @@ -282,4 +313,20 @@ public class SyncDirectory { } + private void createFile(Info info) { + if (!info.otherFile.exists() || info.thisTimeModified > info.otherTimeModified) { + if (!info.otherParentFile.exists()) { + String[] cmd = new String[]{"mkdir", + "-p", + info.otherParentPath}; + x.execute(cmd); + } + String[] cmd = new String[]{"cp", + "-p", + info.thisFilePath, + info.otherFilePath}; + x.execute(cmd); + } + } + } diff --git a/src/com/olexyn/ensync/artifacts/SyncFile.java b/src/com/olexyn/ensync/artifacts/SyncFile.java index e729530..6c3968e 100644 --- a/src/com/olexyn/ensync/artifacts/SyncFile.java +++ b/src/com/olexyn/ensync/artifacts/SyncFile.java @@ -6,7 +6,8 @@ public class SyncFile extends File { // Very IMPORTANT field. Allows to store lastModified as it is stored in the StateFile. - private long lastModifiedOld = 0; + private long stateFileTime = 0; + public SyncFile(String pathname) { @@ -15,12 +16,16 @@ public class SyncFile extends File { - public long lastModifiedOld(){ - return lastModifiedOld; + public long stateFileTime(){ + return stateFileTime; } - public void setLastModifiedOld(long value){ - lastModifiedOld = value; + public void setStateFileTime(long value){ + stateFileTime = value; } + + + + } diff --git a/src/com/olexyn/ensync/file-ops-covered-vs-missing.png b/src/com/olexyn/ensync/file-ops-covered-vs-missing.png index 237c45487707aa6b650f01c2c416ce956830130b..1080cb8f30079bdffe43beadd0f866e74da8447e 100644 GIT binary patch literal 56038 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
  • uk2R_l4k`(cGq8eq4VaH+6h@r`+JEulJ4LmgmhICd0#ShE z=@Mea&G0!RIJBVMzUQT`rmATEm6BU@Te%2vjFQq;+CVG!u2lC8LZ{&}PQzCqNxkwQ zaAOpQBnsMv0AC1d=|M|vB$t#7_((@OvZfAm=0~t|QK0JI{c%Tw$=0lnm+VQ_ z)(z&B*Cej4);i;wzfn$pe%naxX7AtHb5Ez0qK$i!Npyqb*ej0Q_R&3~<96%Fui3Vx z9UL4K0;WcLk16&fsd}c7vWyJKhZ_KYMA*1F5l)SEo~k{Nk9WV^jJYBs#-Wq{18!by z=>S+7GXeTf%9rpeia^J|2iQhP2H^E;k^VDYWbBSZuk8G_pFDZ8yu7UV<|?1VY&3QN zVB(E~G%Kx_+0&q@95t`S#r~7&%<7 zVkK(8Eq_4HXXIJ&uhvdaR*Z&%*Wyy4>+!0pre{NLi|HKH{P}|VSBl^1ON86&)dSwW zW`5+Ko06_KzPv~RZ!x4UWlb+fV>W%rtr;*#r_ANln^VUN(w9YFIeNF|kWG!2ifZTe_*n%hm-O^%n|iHnoE5xwfW3VL}m_S70uecYvLPrlfl8#`Xf1=0#yHs7JVun*Es7b{d51w9t88aufN1i5IxIo7RcBiG`p z{k0>;jw%l{e5viff++t@uhE zFC;MR{o1IN!!3L3glr=uFulQL8Jr$!_w6=BR{8n)aIVT@x*2v8^_Iu*%o_4gAnrXo zC-cy+fP+=_&Ch`2OGTBs^X)Vwd`S|x`S+)B-7ITtZm#^t(@d-5TR9+2p^{5|};KK<>}quk7=pWnMHE64Ng#B8Og1A}n3&kV34XO`C-&`I(AUo$cxv!|#b!*wHe;0yZEgF2v^XLnE+VnuDiZfLH+4|| z9`uGy7T|D)W=>BJ*NTf~iVcVznDvnq=#p_1I?T)kacY<#fzWcanSB3>X(&{|Ay0knP|}UJNP}7}(hCwi~EaBqhz1 z6BZoVSXFf1`iez&<+8bKsqe1pt5pNBof|!?$w!hBd6j4GPJCUG!N$;XUl@`B5e}NGT~OlAAut$`ht89h zK?E8Z%!{JE;Ifio-|Y-E&{>~bhehY^W|@QdDD(=kx-(`RWATkZh?1rfqr$O};(v(j z;x#|UwiRjP}IP)i1NjZk|Z z*iNYsh=9i&;42x{8a9a#?*c_M&}WE1e4srhKfo1(u7v;P2Za=HwmqA(K}N)Bei#wE zz&QOXbno{|0uG>4J4qBV_7qk0f$*aQ1LDu6*I8p8>?7p7N+oHdcd#2u@Kr&athMz( z-Q23hGx|P{&8v_To7b%)o~Q%j4v3_H+#J9aH&Wcz$3X03sQLxHZIW(bL0p_6)B_;k zqvSC=w$&0lW2k+If$B$C?c@CrbF1m~UA%$}8TfVdY5Dl;-}x{q9eQmapfAyK9fRfU zUElMhNc_c#wD6su>e0=Qi;vG4OU^6t0t%XWYpMuzcrEwi+RR#!{d9k7*~A`jCifVb z@T1TAJ;W-BGBBL{Vy)DF5=}|OS8>#X$@6)vQ%1ZbbgwG$0(sKSZ~KJ_IdvRIVn6`` zDfkgcnfnC>HouXfoB{YjPP_GlH8H+(twAv;)}Yw9Ea_~t3!HNxO|Ew^IloCr0wzaC zL*s3M3>wyKD83wG!vH04`Go3esLn9=7A-lS7XXM$5i!Yrg%)sGc|f*hA!(7%5eUxk z0ni8d8oLx3v)mHmv#kK&5uhE>=svO2l%=DGhGD-zgGA?rQDxH`eSFTjL)#t`grR|z;Khf*1rOlAd|3RWM~_C9lCf*d z*Ibw~tj(;w!8^?Z%MF>4)RL0>$COo6V8i;}k)E%u2g!wGoevtAtEXL(A_0FJDCDvd z9UHrUV>2c)r;o13;StK6JAFP8JS(Eu5WF`l8%dLC30t>pE@5(Dg(*{Di_ zer+1mr_N<68-pah!E_5k-QNzA^^kSrt4!RB+D{_Re{BZ3>Q}Y$cFmaELWlRy4E&nS zd#CM$BuKOpz$t=$s$HNSoSr=iJ-9fhY}r2cLVoDi+7S-c3>iK!R+g9NviNp!pm5#v z=t2Db-F->DC(TIYd$*4D#{KOrg1Ry3?8B6;0!8XDZhf5A3E`a|6~UmT;;-*2IZU#D z>v^5VO^{*)7YX!z{QMwMfQ7J-WdMlw5$~)NX7;f&sFn1}tE$>feOS7!ufNaz*ezAnlW# z{R7Uq;-OMy8dGF>p#vLeug0uFx`d|_!#*!8tyCFviB|g0(PaYa8xqLCtMc5}2||_d zN1K64QkxVt8<|)9%GUOwrGivHJYDV2o=+dBCZK)`cM|ZNI{@@r4!+G5(4IJD zg_l_u?F_yoTv=eYOpT1%vn`_}B@r-+QO*@Gt32l2opp7o5a0P7_PnYi=oOBWRKTdA zW_fRj_q(l!setUV&xL+YbDLOu0%Ach$kJ#^mA`wxdLK>2H>>lzy?7r`tE8HvF4{ieG zAW)*hr{blXeF{+)z=URv$1D!6PaB$;RM*yqgS-+vUyOSiT7O}rH*Ln6Z6?|mgb|`0 zQi27^XM9CJAo>>o^aPZ(Z7*Lg26y)Ow#j*zs6ccQR2kx9!x}bcJwLsQ$3}t?TTv>R z9TFJSqGUty+}xQcrzFunfIB^V^{NZ7(qNbG6t2>sNktUIsAvF~k8T@=Z434>_ip?% zJ`jhT0il~oKvQ-GzTQS6l0VT9Qw6($l9CcJFu(gHjQN`t=}9Vi4t}~gSrorOd91Ng@LC0i-D#AJzQ6aYdM|y6Nnw3 zR0#S5YNA*vC5E!!_b*@J=bF~tUmL~(H%Th!E(7r5mcD-c=Et<<9_@pEIF!XvCVa$T z)(0CmIl2iJc?K7YV6YDM*|r%Hlzu``&E0Gx@syO@PW7L7x01(t3DS4E_PzT|rOL~6 zuW%hVO+^tx@>dBAA%CKBiQB68{bDx`WxgZ(HwG>2ON=uVom3#YI8ZYbSFBNLY$=X; zu-AfDpzmD!cSfCf$?|WtVGlJ53eLf!Aj4l6M4svh3(Hf%VK?j#jH!MdR?D9(Z$dx6WUD4x*GGH;y^j`2}l zhCz@NZ)nhgrkj@TY?|+{b`rr2-(H*H``ab7^_n*^Yn<;CS{NvP6Zmm8_K=hOiqDUux_6^vG=BtO0%7 z4ai)9!ZwRr#Kl%Xa=xn?Hb3@IQtT-qzK6%z_K=Veu?J~3V=5E7AX`3|CyL<)4tC}m zcpX~rOGk*u-)Ks|OnO{cv|c(5p!7ji7zHC};k9tUl&hP*9fbgvOlq zic)l9;#C()(rw3O>v9-PRcX*A04oIv53P16z0k#=F%vy32lzJJ_h3AFi+YfW?5V7C zJv`Q#V=b;**D%@OCNgGMxcX}LyvE-K=G}6Vy3`Yb|DStcX9qR*xr^vCGOT+Rlb6gy>EZ8> zFES{;oCDX<=9S-^jIH@-cdYK4mB%l>U-;8ulOXZfj^1QUCrt=FGI7!y5!fn;E%TAy z>u2=UWNU0xGE~(U!o-)PI@{>*jbmzQUxtK0R~~CCD{gLXVA}!Ahv-7yB|jky-k(q3 zKj#x$??P;M9t-O+=h2j)3Vt(azD+^s0y=oZpu!L34K}++Xcwg;RFC(#{S3l8Z&gRPX)!JZt%GDvM_?pIP#c{!!f^9&cE{MWbtK05U`Xy}CtDY$bzF?6IN#{YUCqd#-8^}lxb zGu!{p;2j}v%5*gtWV^*OZ^7LUui1}JMOaY=PR!xMhnsq2c-lyD^Wg827$k1o@=69mc#oZp^Sh2Zg|P7qkT0RrPZ#yA>Ez+uR^p1;_Zzl8XFX2Y9EGKE;C_H zz2!G)NWE@04N6G<-|rt?^zdM2Nl=4i!1(^EuA>+A?fS6g8~J;VM{X@TGT8IQ>hfu5 zwPT@n7GbV3-!@EpKR((gwr_M(3~$v0pCAR!4mOYSUSN`EG4_kY{z=iT4T^lq_``I| zui|M62=bs1f4WjdMYkC;ClEpRw_dNTnVu$8AQGH3LlKX87C(ID@cA_&qcQWDHb`3Y zGt}qKaC0N)=i-us*9FQFB+Aj}1)~pozBKE{6#;hek=feXdil145}StyQXkLG+cm7d zUFu&26%gZ@JF81mL6zSFa4g}Rfc)z9xiG1gY19Mg@sSsP; zrjWIINe7U6;NMO<1I0|N1=yXVRUY z6CZyETvX^8`$EVi*ZCSN;41%oZp}1Tacr|}lkkrZ*#XUgJ``ufeF)3`Ich2R9>Cwq z%E|&I6-z`9EPnJMkg<=cZqXQ}y#~ESqu7xY3;d_4nc%7cO{5{+fGFc=X{|wBHh$m} zD1ttQ&}@r=EEQ2W^LipskB)TCarh#S1_|$fMf=gc6lI2 zLVg4=wpsitaa0{jBUK zNVJxJPUDT25`u=S9Q*#+*XyQiDDO!fXwU3Y{P^hT4TyXjH-;Sb_VoY+AJR<;j8H_y z?g`}3ep_&qA{N~s@#t!bjyw2rnt*d5>jMEV!blu?e3#ff&f z6b${`zdpPdHyf8Gq1c__+^og^0-J)MYuM~~5U_`W($WoU>vXkS=3TkU>?07X=tjg)_OW9x(I~jwHKc6+Dj2tac`gOMPy#ka5(+3Z2m%!D)>;Ob2 z+HmUf1dkthfU)aL&_?O`kFyIc7$qV_q8a`j=QAjBT7j|yu-K&kly?XiX{%=g7voHQ#t7(o#0BSKQ7i|3|LOg*(n8X z?HfRFw69wHbrl_++>S!u7KXD!3LU8gHcSbS$Dk3GI=rddb#>zLV>~~3@N$NsCzpI} zL&~=%rGCg6f!P#+PmYxdc_T=7Oa`N8wE*3UKmZVw!a$2mLFvbKwU6lL**k$)Rn;!r z4pSZg`2tp&bt;v)eR59l?`tE?)R%y*R>wmw1q9_Y;liTQ`uEE&(`mc-77lvOMNc+g zn3pJt#=U(z+L99fBMx{h5Z{RB6||&$3s4d@>?v3WRU6f0t@t%LEga~fu{tS_uIOya zA9|k9($pjq%A2MbEBo=f1>gwU@3QK7GkpQrIdr*V1;<~sh8_k=sK2xv_UkUV->jba z7bYk;zH{m?P|&3+gD)}O99vbffl0ibdQ&n$c@>ei6_Lzai{AIr02 zmn6j){`EGvk@l<-wj5vzw+$wPe%K?s3c;7{zi!EcscKR;gp8AwLT(@w%A@) zS)H1`GhPb>uAFA9wTabLRnO@ka#i*AvhR$JjAZ{)ezx!^sb0hd<_?v=DK3-n>W$m9 zlciJc;s{hu%eU|EfA<3L{!%N7=LuYEO`)ns6TEisfW$xiw2PyuknVo8eda+g^FhwX zNBfVD(r$LQzr|M>7#ze|^dGoUZDntN7*Lek4#KWz{Hh^Cg)Ntfqy|jKA>1K=;m)(7 zQcT81TOg$Jy!a27c#kBJZCI4&5b`m%dEsXSy&Q!crlr>Tiv~Jyb-1_g%6c*AOHZR7 zkcJc&vr3Ag`(QKb8~33U?tg*oeGcNF(bfPh@I^?-1+#{1-R2FeEVy#PANBS=l5>_Z<~lO8 zyD+rWV_M$NaB&K$$iVskKJe7NoZ@4nqmxj40A=gzr`5Jttokwez~afsI13FN>FIBl zV2PkVBhe$sa*VcTj=`0XXEU}4eG0qaf=5)`=fBDYC_=1y8dAAHqtgtX{Q%iDkP%f% z0sic>lb0Vu%*uS>g63Y98imTz{dgLZ!lXHnE>c&2!J7zoXx~lH5q{$@kr>d2AagUs zfcOY8uCcLklQz*ha8(cnDAWrEsHFnF!8~sz83W2o4MD+9MC87jUpQd53kqBjwUEVe zdE2CafmsCfADY_(sRfMdLr(|5{ceI_D6l3?{I0XaVna`|vxCf!&MMG&0@*d20g(j0 zi#}xWM7017Az(A=uMiot`JlP%31#Vs2LUbFIcLZtf^K`jEH+cY)>BDT=?-9L`yzoe zMfM_~TytaDlOL*RF>%hfZx4ba0c>HhR{^s@I*w8mJ{h77Hs9Nl7@rm)pK}P-MGbvC zO79>?;5dk7C*{*0!(cFP5d@-_jhmz63WN)y7|6I&8!h`?g3MB>7u3w5F{?D+)o3(G zN-OJl9eE8LHfX7Vn^lQM!%Qf;^`q-!(SR7DI(_}#dr_h^l}b%NocB)}XT3K7Bd>M8 zB#f_t45yR)1XO#3pvDMUhNr%giK2^eBCbut7ADRi2fP_lU>Rr#oD%U=-aue~&wzUl z=@Fcg=(1T8@WI`t-Dw|cxIR8@(t3J;+z%Hge3ED~f360~lMu3CxSfAk*aV4&?Shdh`!Kge!1=6vKeh@j;hVrFD%!mF0j-`T|Dnkx&8(5Hw zAHlXr_v>Y(rEx*}veN$)vs~D*swJom$ggKEfFLzABtSrIi9br8eMn8cww!4*rz8sh zq`N+Al1r>aM?fN(9zR^GO@r|@sL=ywvu|nCR(R#Eop4MgFFP}dCx0g=qWh5t? zLHP&T%K-`+sz1uAi+z8lF4wvr>0{6h?v~%nJQaa+xEU+Fe#-gi_bqVR<{Fuj7b4&4 z56v$T_T?>VbT|?1kL96o*3WQg(d_`LBJPB*+^V?b=aG}fmjgMlUqQ4u4=mw5JH!&g zUo(f98PHPnrJ&^+T&5@@-VVXfMG_U9fK@e0;Jd62l zM!`M-GvSIuiN+}!=jo3Uns(qfqI2;ac zD*qO}uJG+bl^+gZrXCuu(RGkjn2Ch?8MF^jfFkV{^ri)UdAKuY4*Cy9=99)tf_i)- zZH^=qnINmS{|I>myF3^(Vx6~7-VRHjF2iWm1QdEKp^%Zw_HIK1Ckau79^$nZh|PaitEZQ)Ojew zp{UZraezxs(#|^%?3)b+xa#}^0+6dOa-;l`TsZCkFp>#X)uD6=5P7JjUEY3ZKje>9 zby(xe0dU($|K#l1vuhxGOU-?&95UVl;86i~Wo{okDir}ZeUpS}URJgSypw)v9#_&) zD3^^M&!|=;8ab>{xY{-4p9KYSj3v9}0*E<0K4KJ;|KvO=pX=HW@W9|>SQ@hR123(W6ypFD} zu-k^SpAFVo-1!?I8j`7K(^PPVibSY;Bv36x9Vgnke^B>mk+snRau`Yh!Lt>KfgPc< z`OVT@JQl4>=s{xjefLG&4Vt|u(fj-E=GQ$#6$uz)H4if|uU-OMHF z-KaS_6x|`V2nf#iq6S4kL09eK=fms=QPu9Kdn~EMa`MPfI3aE z8x>i!n_tIJ3U&Q|^$Skl-9~EdUO|vrM2Vs%QYgt&$WY6{fdulnY`9Podn0E=;o58! zv|F)ERl>Jk3EX>6sTjWhG&p!WsI$YvKT&578C|4zUwn(q6?v{j@1@h^0+6QHK(j~a zx-2w-G7s!Lqr*3l*+xFSS^%sr3DebUJx0gtpmq-?aTRiDO~kDduq9w5s55|un*_2M z*lPc*_I>j}I)f@R3z)XS&E}ey~fUNBGDnKzn z8x+2@dqVcp*Fj+jx__|J-Zw;c3G(znFh+RpB5C(HI5=Dvnp6k6u*5r$9(RQP#wEKQ z!S>JMiz2ms4NICMMc@A|ur)RAJ=MW+zmCS${sT8-IuBo#IC^wYck{*LD$grEROcFA zEnTu#q2NDTI1qc8gBinTbSqR-p#U#md{X|Vw=IMCF?Vi_`-b8Ion>QPOAxC71w;1b z+4%SG7XfrLYxawu3?Z^zFGoaFFSWdkQ=mbIW3&hoq*UGAEupY+1DTU04m9;g( z4`wHNaNyxozIbVrdo#A!qU2je&6maD+RGUo0HMA*`N6_PrJ`nWxRB5|%U!PQH6t~? zbk<2yztio0_GIo22djt(5L`KEeIR@zjs+$JQqJ*+%NJjR9>18#eW<3wuCms^-0VBE zuUsGUw46Cv?HGh$JeBcp9`=Od%o}hl{{Aouq1!(i+v8`8+d?$&nBF0tdc;-i(IWfm zZGt~@R=Ywh`-p{F?or6<)ccgAll#l6`PlypO7SUghr4wrEXifF^3A+z*#c>6y0=PW zB~B+(G_%fl9UsFCR7_M`{oBV03a&$;>?cF{*W)xC+h-H120YRM$e$wg3LYoOJ~28w zkbA|!DsLs@Yv5g8wywvJ-ZYfxQ$KQrnN33AC#M*p8+*{CF&uFAQC*Spx;f!#bp?G6OE_+XjK~^pF4xd1mX)-f< z16LlZj~pBwR$GO9@gk7LLAobY#hidNdu@67Q|a&QT&kA7_BOf?G8HoE7hO-2E79EK zEL?k+!K$NiimGr{-J0(Ra~*$t`TWG!j@ualht9aasQh5DS+z7K=UMe@rYu|E%Y}#4 zzfV#kuRfC1U$xYeBFxAUQXF^}W`!k*eJho|Gmst zn9RNjp1{f`Ve_(bwV1b{r{1s-4{%`-k-4&aMo<$S)p_1MRUfrK9xDw61eiI8>IzwL(v6`X;iqaMVzRO`g9}xW(}sU)Xc^ zW?9W(6>L_+Qd!)My`ow^ns3lGr&_x59jp}@_a)A0!qG+B&J; zKPGA6WLN#%d^>};;~Z<}Gx_xkmIGaOOW;Ts%kYp64Hhg7N3EornBi+Sz^p~xeYlmh z=LRE})GEd0eGe;4K^QLy&|tB!x@}}|+JoZ>))Tu{IBVg)PJ=W9By!A5Om@;_nNADQ zO8wyG1G+Ei?b`;LsKP68j1+{-fGkvuCNX-g)(EW=C%W>o01ewHnkdnvCD|Ao5pf+_ zMMA11F(pM8q6Glp1NHdkag`LES0N#J<~;>~;;sqiic(F{iFB+?21f2L)wj6Ika&Y! zUdH}bqHS8_`72__h@5m^%ZXjZyO^Pe&wOs%0ATH4m&&_{NdK(_g+94lnx;D}myynA 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 W$60=X{;@t}#i}Zrr?XDty#EU>zqz^q literal 25133 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≤AoQBm&;UAJaaQ=~+#?{9dK+DS*#b;hzAcfF1w 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≪4DbLj$=|E9ivHKZq^n>bvCcdgy;Q&rF`Sg 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 UMLObject - 700 - 720 - 110 + 890 + 380 + 150 40 - Directory B + otherDirectory UMLObject - 700 - 680 - 110 + 890 + 340 + 150 40 - Directory A + this.Directory UMLObject - 700 - 530 - 110 + 980 + 280 + 90 40 Delete @@ -39,9 +39,9 @@ group=1 UMLObject - 700 - 570 - 110 + 1070 + 280 + 90 40 Create @@ -52,9 +52,9 @@ group=1 UMLObject - 700 - 610 - 110 + 1160 + 280 + 90 40 Modify @@ -65,305 +65,379 @@ group=1 UMLState - 850 - 830 + 1050 + 340 70 40 - YES -bg=green + File +bg=red +group=2 + + + + UMLObject + + 890 + 280 + 90 + 40 + + Unchanged +bg=white +group=1 UMLState - 850 - 720 + 1120 + 380 70 40 - File + File +group=2 UMLState - 940 - 720 + 1050 + 380 70 40 File -bg=red +bg=red +group=2 UMLState - 1300 - 830 + 1120 + 340 70 40 - NO -bg=red + File +bg=red +group=2 - UMLObject + UMLState - 700 - 490 - 110 + 1410 + 340 + 70 40 - Unchanged -bg=white -group=1 + File +bg=green +group=3 UMLState - 850 - 680 + 1410 + 380 70 40 - File + File +group=3 UMLState - 940 - 680 + 1340 + 380 70 40 - File + File +bg=green +group=3 UMLState - 1030 - 720 + 1340 + 340 70 40 File -bg=red +bg=green +group=3 UMLState - 1030 - 680 + 1700 + 340 70 40 File -bg=red +bg=yellow +group=4 UMLState - 1120 - 720 + 1700 + 380 + 70 + 40 + + File +group=4 + + + + UMLState + + 1630 + 380 70 40 File -bg=green +bg=yellow +group=4 UMLState - 1120 - 680 + 1630 + 340 70 40 - File + File +bg=yellow +group=4 UMLState - 1210 - 720 + 1190 + 340 70 40 File -bg=green +bg=red +group=2 UMLState - 1210 - 680 + 1190 + 380 70 40 File -bg=green +bg=green +group=2 UMLState - 1300 - 720 + 1260 + 340 70 40 File -bg=yellow +bg=red +group=2 UMLState - 1300 - 680 + 1260 + 380 70 40 - File + File +bg=yellow +group=2 UMLState - 1390 - 720 + 1550 + 340 70 40 File -bg=yellow +bg=green +group=3 UMLState - 1390 - 680 + 1550 + 380 70 40 File -bg=yellow +bg=yellow +group=3 + + + + UMLState + + 1050 + 440 + 70 + 40 + + do +nothing + + + + UMLState + + 1120 + 440 + 790 + 40 + + cp if newer + try: time deletet = last time present in StateFile, else time deleted = 0 (~never existed) +halign=left UMLState 1480 - 680 + 380 70 40 File -bg=red +bg=red +group=3 UMLState 1480 - 720 + 340 70 40 File -bg=green +bg=green +group=3 UMLState - 1570 - 680 + 1770 + 340 70 40 File -bg=red +bg=yellow +group=4 UMLState - 1570 - 720 + 1840 + 380 70 40 File -bg=yellow +bg=green +group=4 UMLState - 1660 - 680 + 1840 + 340 70 40 File -bg=green +bg=yellow +group=4 UMLState - 1660 - 720 + 1770 + 380 70 40 File -bg=yellow +bg=red +group=4 - UMLNote + UMLObject - 830 - 490 - 150 - 80 + 1050 + 510 + 70 + 40 - 2^4 = 16 -however only 10 -because 6 are symmetrical. -bg=white + YES +bg=green UMLObject - 700 - 830 - 110 + 1340 + 510 + 70 40 - Covered? + YES +bg=green - UMLState + UMLObject - 940 - 830 + 1410 + 510 70 40 @@ -372,10 +446,10 @@ bg=green - UMLState + UMLObject 1120 - 830 + 510 70 40 @@ -383,76 +457,406 @@ bg=green bg=green + + UMLObject + + 880 + 760 + 150 + 40 + + otherDirectory + + + + UMLObject + + 880 + 670 + 150 + 40 + + this.Directory + + UMLState - 1390 - 830 + 1340 + 670 70 40 - NO + File bg=red UMLState - 1570 - 830 + 1250 + 770 70 40 - NO -bg=red + File +bg=green UMLState - 1660 - 830 + 1090 + 670 70 40 - NO -bg=red + File + + + + UMLObject + + 1490 + 670 + 80 + 140 + + result + + + + UMLObject + + 1170 + 670 + 70 + 140 + + time +of +last +lool + + + + UMLState + + 1580 + 770 + 70 + 40 + + File +bg=green + + + + UMLState + + 1580 + 670 + 70 + 40 + + File +bg=green + + + + UMLObject + + 890 + 1040 + 150 + 40 + + otherDirectory + + + + UMLObject + + 890 + 950 + 150 + 40 + + this.Directory UMLState - 1210 - 830 + 1470 + 950 70 40 - NO + File bg=red UMLState - 1480 - 830 + 1180 + 1050 + 70 + 40 + + File +bg=green + + + + UMLState + + 1100 + 950 70 40 - NO + File + + + + UMLObject + + 1630 + 950 + 80 + 140 + + result + + + + UMLObject + + 1270 + 950 + 70 + 140 + + time +of +last +lool + + + + UMLState + + 1720 + 950 + 70 + 40 + + File bg=red UMLState - 1030 - 830 + 1720 + 1050 70 40 - NO + File bg=red + + UMLObject + + 880 + 600 + 720 + 30 + + Deleted Files are tracked by their last existance in a StateFile. + + + + UMLObject + + 1190 + 510 + 70 + 40 + + YES +bg=green + + + + UMLObject + + 1260 + 510 + 70 + 40 + + YES +bg=green + + + + UMLState + + 1360 + 950 + 70 + 40 + + File +bg=green + + + + UMLState + + 1360 + 1050 + 70 + 40 + + File +bg=green + + + + UMLObject + + 1560 + 950 + 70 + 140 + + current +loop + + + + UMLObject + + 1420 + 670 + 70 + 140 + + current +loop + + + + Relation + + 1110 + 640 + 280 + 50 + + lt=- + 10.0;30.0;10.0;10.0;260.0;10.0;260.0;30.0 + + + Relation + + 1380 + 900 + 140 + 70 + + lt=<- +comprison >= + 10.0;50.0;10.0;20.0;120.0;20.0;120.0;50.0 + + + UMLObject + + 1480 + 510 + 70 + 40 + + RED +bg=gray + + + + UMLObject + + 1550 + 510 + 70 + 40 + + YES +bg=green + + + + UMLObject + + 1630 + 510 + 70 + 40 + + YES +bg=green + + + + UMLObject + + 1700 + 510 + 70 + 40 + + YES +bg=green + + + + UMLObject + + 1770 + 510 + 70 + 40 + + RED +bg=gray + + + + UMLObject + + 1840 + 510 + 70 + 40 + + RED +bg=gray + + + + Relation + + 1110 + 700 + 200 + 160 + + lt=<- +comprison >= + 10.0;10.0;10.0;140.0;180.0;140.0;180.0;110.0 +