From ea0aae4abd434f00223d09c6866f7fdc87bafa82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20M=C3=B8ller?= Date: Tue, 14 Apr 2026 11:14:23 +0200 Subject: [PATCH] Task 3 --- CoDepend/.codepend/snapshot | Bin 2541 -> 2622 bytes CoDepend/Application/UpdateGraphUseCase.cs | 4 +++- CoDepend/Domain/Interfaces/IRepository.cs | 9 +++++++++ CoDepend/Infra/Repository.cs | 18 ++++++++++++++++++ CoDepend/Program.cs | 2 +- 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 CoDepend/Domain/Interfaces/IRepository.cs create mode 100644 CoDepend/Infra/Repository.cs diff --git a/CoDepend/.codepend/snapshot b/CoDepend/.codepend/snapshot index aa638e386a9c420fe83fb2ee05c97d4985dbf67a..a9fcc889aabc9f231a2b0525176ddcf866707460 100644 GIT binary patch literal 2622 zcmZuyeNa@_760A)zV_`yE{cnYz$1K!AIL*nP5h`JA0i@xAhy<4eJ(33AG_=BN@9(P zn%35-jkvqo)={I5Rf$o-sFlV9bsB7{MyHdC+ZvO!GwD}q)oI3=R;BkXRqIUud2i;P zbIvbUA}wf4(!&Jq*jaSNmzq#9R`I z<`&|PTso;m_b)1dg}wO z5;Nf9K~E)t-m~=&^oXBabKjDtkVt2~QR;0o-5%qh%}Ur%bimhuGDM;|>ChtBQ0MZy z%~tn!x}l#pv%9~bh-k@n{oI@|G>!dT|Bh7ghv=N0VJuS z1+!{Qf8bTZ^#Iov~N zDoHYq;4X}cI*;iKG_qxuGWB6$pU^p_k(QA zK;(2bR+V{Hw*`!!DOQD5MVWi6P|fi@Hx7bt9)I`MX5%9=;z(S~JoWXW=}0F1gl@o4 zV<|F>+79}Tf40}(W(GOJ;|Xx`C^MCg63BaqT7q~7Nk5SoJ1zc6O$AcNUPOD1-`mW4 z`4>VyqSgGG)glY+oO_=xK%@8Ia87Wk_2q6c3M!7p!;aTbB zci+@v9`k>jF&%0>)utn(+BaKF2uz2pVIhxN`}eOAJ@Wvh;u_Q0a+W0VD;CN{o!8ni z#2{ifgfv38i&%#=PA%)sl8wU!J@>niF4VeOIW^l|HD<6$rfLG}xOv&T6;$snh4k7Y zx9dfY;*c$N-k`rgOQpdZExD87IPS)(`k}jnqaR$^<1;vtOWF*CquN_v;XBCoJm#iR(gZ2ZcjBgSsb$B9bC5n z(u-95J((P<-D36I#p^REEt2UyD(P5g%nf)w@xZ?YEg?ppqhdlKbW#X9XTI0tDg-~b zVs)F-MEP|hPQ-zLQPXOAg7sDNhQ;7p17^9Ly2zxYQ@@0ASs8gW-s(@_@Rz(lQZtG4 z6hJ#lX9SF{*uH9*8!0$rvxY1G1<2Dmg{Og(QC=>w$~_zR3aRD~T~G^o={&E~Y+X25 zFi+D^r7l*io)gV&hjI#Rp&e0~G6aWBn?a`V&c+d;7~*1^ z9{LtUJ-pGLpd2H@BCuvVRpt;i7xA*7hYmp=vBOD(GKd!-pI2En6#3NPFRaFYgNUsV zmJ|8=s&buZKZdqgP3=8G#5xFNYHCPQ^=<#OF-Pc{pzr9j$grlP!PgeO_x+|u- z{P@f`cn8;aImey`p&E26>I2+#yc`qx{`(%Lg`&ABxs)=}F=#9yN9V`MnS zE`iWSgdmka0ePR`pulc%fIBIb??T{Yzd^b7GzvolcfoEG*>)dV5zhawf|P-UDC9gU zHjBfGH&K>D^xW1EhR~9#(Kc(LSSeB!;f35ZNVBVqxyFURKnd5DN(VmBNSex+u#XRJ%gq zgfvDGonVg?%D#I_zxGA8(;tc literal 2541 zcmZuzZBSI#8Gg>WckkZ2s~$iX2`(%O3?R4{wKh>YB8UnCvVz2BYSqhn#jUW5yQ{%( zrLD#oE7@J0)S48(ieFVU#`qP9PDk6Q8Pw{!sfp?IhiNBc)g;x9*zH*mTc`bV@11!+ z&ig*+dEe&-FG_V+*zzmpH5UMB-J_%sxs4H_opyDHJsho{TMXB^vSA1vva3Z+O${!m z=68AA>Vf|FEF6_Sj7)HKUV8(f&MZ6?CN9w2^?Hf!*PVWk*Y5NkNxHqF!g zdO134efmVrr}MNQB!WJa!_m>-fggXpmW1}%)e=vm=5njQkx>_p{x;fu{{b>1nW->` zu(n3`y0iw@vLmpaNr7@B9NpaA^)U~9kA#j@;X;|)uY2cfPTi;O?+0f%y7F;R+6vgR zM}Q=jEkuz+^ZHi9cFY2@GaS9^JPRH?YZ;-RBT;R@1E^&+Zmr3;z~isf+*xJiWp9tjN%ahixZdJ)VI@liZ6Ned-=#toBW7o7Ut&jSL+Q zp{ar+x>&34B!dt1gCiWhGiUWxWY?2-2wjVKbvDw}>gn{fce2OZsQEcIhvQ;yxtALs zlk7$^hbR*mhZpQ9o~ zLMI#uR_jiWcb-peS7NyAE!pt#Bw`z8hvE1Xm%q$C-^1hfo6*TJ|GTw~CtpkoAg5I| z8O1nX0VFdHhokz+*EnF2$^t0G4$Zmn3`yiM+;G4%*ui7gsDubNF;Gn*v_!;8q;Tf& zN@li&I`PuF8&o()#4?<()*Cqemgo-6zd)i&9PWgpHx7K&%2RA4q0aHd@Y7da`s=); zb~zS*X~j3^k+ivu&^dIJ?k#Q<1rIg!AavsApNFKs6Qq)pboG}O8{+4h-ZCtj?6(sc@{dBY(+rLdSg3oG5u?Is zD`cMKo^8`IBz*9lXj+cEDV_>~ZzRU2kDE?UyIqEaQ{x0v8LFmgOSE#p_F)o4J|I`u z6|CWfo$V56Go@Ft*{7C!{0%O57590@vgUb_=@@+ebt?XejOl@*CL9$i#@?iuAkk$o z*f2w#>hrh<08a#ST#RCqf)BcQ-rti#(9&rhw_XTt;Kk%Ef2$oymw!RTk=X519Sxe> zUt3v`(9=t761k7jv+FJ`=^~+%zk_)t{ee&INQli_+=N4OuL)|z{tBc5PU>+W7Rs9> zJZ9{zzbujFggLs#!tu!UFnWluqKpO^cc}teQrR1Se$uO}e z3hnPuq;8{FLd98_ybTN#>OvX2fk`7u<42dRV22rxWo&c;Jl5K0V z63;SVlr*L1Rj3U3ArbAQ|4_wvlL)sV=E7`Htew+{m<{29Yz-WdZEv^9%n~>#WNbOH zN$%&BS*?sg9eEIoBtr)1NrL_cmSr$n0(Q_(jA)l_!GJu3EtChc3ON~L1iD>njcr-o z>r+EqiiDbnmPl^jko8&qA6;j0x<)cb;KCHof0QK))~u{vUgm&Ub8_J6WneCl5jdKQ zxM~mLy!$ae7#V6oNsMTG;@=13&mL-}!*CO#bia2@%GY{4ix$yLE=2D1a z3IxuLR**bc4wqsiUuWwP7g!JZEX=Dgy+>iKWK1Y{Y&=@}#O_tFFF@E)C~O@_a{9VH ztp!>1OlwatBYhHVP_$+5k&c3 zAd*)dTfM`@$+6YDh|okzlM%o4DP^k#1J5)J7pZBkga8I*SU{V>zr parsers, RendererBase renderer, ISnapshotManager snapshotManager, + IRepository? repository = null, bool diff = false ) { public async Task RunAsync(CancellationToken ct = default) { - var snapshotGraph = await snapshotManager.GetLastSavedDependencyGraphAsync(snapshotOptions, ct); + var snapshotGraph = repository?.GetSnapshot(); + snapshotGraph ??= await snapshotManager.GetLastSavedDependencyGraphAsync(snapshotOptions, ct); var projectChanges = await ChangeDetector.GetProjectChangesAsync(parserOptions, snapshotGraph, ct); var graph = await new DependencyGraphBuilder(parsers, baseOptions).GetGraphAsync(projectChanges, snapshotGraph, ct); diff --git a/CoDepend/Domain/Interfaces/IRepository.cs b/CoDepend/Domain/Interfaces/IRepository.cs new file mode 100644 index 0000000..68385a2 --- /dev/null +++ b/CoDepend/Domain/Interfaces/IRepository.cs @@ -0,0 +1,9 @@ +using CoDepend.Domain.Models; + +namespace CoDepend.Domain.Interfaces; + +public interface IRepository +{ + ProjectDependencyGraph? GetSnapshot(); + void SetSnapshot(ProjectDependencyGraph snapshot); +} \ No newline at end of file diff --git a/CoDepend/Infra/Repository.cs b/CoDepend/Infra/Repository.cs new file mode 100644 index 0000000..665da0b --- /dev/null +++ b/CoDepend/Infra/Repository.cs @@ -0,0 +1,18 @@ +using CoDepend.Domain.Interfaces; +using CoDepend.Domain.Models; + +namespace CoDepend.Infra +{ + public class Repository : IRepository + { + public ProjectDependencyGraph? GetSnapshot() + { + return null; + } + + public void SetSnapshot(ProjectDependencyGraph snapshot) + { + // FIXME: does nothing for now + } + } +} \ No newline at end of file diff --git a/CoDepend/Program.cs b/CoDepend/Program.cs index 1942eb0..147a1dd 100644 --- a/CoDepend/Program.cs +++ b/CoDepend/Program.cs @@ -41,7 +41,7 @@ public static async Task CLI(string configPath, string format = "puml", var parsers = DependencyParserFactory.SelectDependencyParser(parserOptions); var renderer = RendererFactory.SelectRenderer(renderOptions); - var useCase = new UpdateGraphUseCase(baseOptions, parserOptions, renderOptions, snapshotOptions, parsers, renderer, snapshotManager, diff); + var useCase = new UpdateGraphUseCase(baseOptions, parserOptions, renderOptions, snapshotOptions, parsers, renderer, snapshotManager, diff: diff); await useCase.RunAsync(); Console.WriteLine($"Success! Diagrams available in: {renderOptions.SaveLocation}");