From fe54e6601d662ec0510001005b48cda161298db6 Mon Sep 17 00:00:00 2001 From: pkuzyc <723204821@qq.com> Date: Sat, 25 Dec 2021 19:41:46 +0800 Subject: [PATCH] fixed some bugs Signed-off-by: jaj <747675499@qq.com> --- .idea/artifacts/jit_ex_jar.xml | 8 + .idea/compiler.xml | 8 + .idea/misc.xml | 2 +- .idea/vcs.xml | 6 + .jit/HEAD | 1 - .jit/config | 7 - .jit/description | 1 - .jit/index | 5 - .../1522310a3d07698c0bced8007b87931a4c1265d3 | Bin 94 -> 0 bytes .../2320df27604a85e1993df8b3cacd6404935677c7 | Bin 101 -> 0 bytes .../2aae6c35c94fcfb415dbe95f408b9ce91ee846ed | Bin 19 -> 0 bytes .../3242150d635bfb77a329a3bfede1365568d802fa | Bin 17 -> 0 bytes .../5929e58a5aa1fde36b80ecc26548c50423ddf943 | Bin 12 -> 0 bytes aa.txt | 1 - bb.txt | 1 - out/artifacts/jit_ex_jar/jit-ex.jar | Bin 0 -> 63951 bytes out/production/jit-ex/Client.class | Bin 5924 -> 7927 bytes out/production/jit-ex/Diff/Difference.class | Bin 0 -> 2848 bytes out/production/jit-ex/Diff/Main.class | Bin 0 -> 1439 bytes out/production/jit-ex/Diff/MyArray.class | Bin 0 -> 575 bytes out/production/jit-ex/Diff/Myers.class | Bin 0 -> 3186 bytes out/production/jit-ex/Diff/Node.class | Bin 0 -> 803 bytes .../jit-ex/Diff/util/FileUtil.class | Bin 0 -> 1070 bytes out/production/jit-ex/META-INF/MANIFEST.MF | 3 + out/production/jit-ex/SwingJit$1.class | Bin 1492 -> 1466 bytes out/production/jit-ex/SwingJit$10.class | Bin 0 -> 1399 bytes out/production/jit-ex/SwingJit$11.class | Bin 0 -> 1621 bytes out/production/jit-ex/SwingJit$12.class | Bin 0 -> 1619 bytes out/production/jit-ex/SwingJit$13.class | Bin 0 -> 1398 bytes out/production/jit-ex/SwingJit$14.class | Bin 0 -> 788 bytes out/production/jit-ex/SwingJit$15.class | Bin 0 -> 1398 bytes out/production/jit-ex/SwingJit$16.class | Bin 0 -> 1985 bytes out/production/jit-ex/SwingJit$2.class | Bin 1335 -> 1037 bytes out/production/jit-ex/SwingJit$3.class | Bin 1493 -> 1465 bytes out/production/jit-ex/SwingJit$4.class | Bin 1512 -> 1302 bytes out/production/jit-ex/SwingJit$5.class | Bin 906 -> 1466 bytes out/production/jit-ex/SwingJit$6.class | Bin 2488 -> 1855 bytes out/production/jit-ex/SwingJit$7.class | Bin 0 -> 1519 bytes out/production/jit-ex/SwingJit$8.class | Bin 0 -> 2131 bytes out/production/jit-ex/SwingJit$9.class | Bin 0 -> 1629 bytes out/production/jit-ex/SwingJit.class | Bin 3148 -> 5857 bytes out/production/jit-ex/branch/Branch.class | Bin 0 -> 2615 bytes out/production/jit-ex/core/JitAdd.class | Bin 1193 -> 1179 bytes out/production/jit-ex/core/JitBranch.class | Bin 0 -> 3143 bytes out/production/jit-ex/core/JitCheckout.class | Bin 0 -> 2933 bytes out/production/jit-ex/core/JitCommit.class | Bin 4024 -> 4215 bytes out/production/jit-ex/core/JitInit.class | Bin 825 -> 1490 bytes out/production/jit-ex/core/JitLoad.class | Bin 0 -> 420 bytes out/production/jit-ex/core/JitLog.class | Bin 0 -> 1502 bytes out/production/jit-ex/core/JitOpr.class | Bin 0 -> 1915 bytes out/production/jit-ex/core/JitReset.class | Bin 0 -> 2462 bytes out/production/jit-ex/core/JitRestore.class | Bin 0 -> 1993 bytes out/production/jit-ex/core/JitRm.class | Bin 0 -> 707 bytes out/production/jit-ex/gitobject/Blob.class | Bin 2214 -> 1903 bytes out/production/jit-ex/gitobject/Commit.class | Bin 4921 -> 4188 bytes .../jit-ex/gitobject/GitObject.class | Bin 2472 -> 1883 bytes out/production/jit-ex/gitobject/Tree.class | Bin 3465 -> 4395 bytes out/production/jit-ex/repo/Repository.class | Bin 2896 -> 2544 bytes out/production/jit-ex/tmp/Index.class | Bin 5104 -> 4910 bytes .../jit-ex/tmp/ObjectNode$VirtualNode.class | Bin 990 -> 971 bytes out/production/jit-ex/tmp/ObjectNode.class | Bin 996 -> 972 bytes out/production/jit-ex/tmp/VirtualNode.class | Bin 841 -> 841 bytes out/production/jit-ex/utils/Deserialize.class | Bin 3667 -> 3359 bytes .../jit-ex/utils/FileCreation.class | Bin 1986 -> 3076 bytes .../jit-ex/utils/FileDeletion.class | Bin 1253 -> 1264 bytes out/production/jit-ex/utils/FileReader.class | Bin 3658 -> 3367 bytes out/production/jit-ex/utils/FileStatus.class | Bin 2364 -> 1862 bytes out/production/jit-ex/utils/SHA1.class | Bin 2167 -> 1836 bytes out/production/jit-ex/utils/Utils.class | Bin 3826 -> 3464 bytes out/production/jit-ex/utils/ZLibUtils.class | Bin 3054 -> 3075 bytes src/Client.java | 158 ++++++-- src/Diff/Difference.java | 85 +++++ src/Diff/Main.java | 38 ++ src/Diff/MyArray.java | 22 ++ src/Diff/Myers.java | 149 ++++++++ src/Diff/Node.java | 32 ++ src/Diff/util/FileUtil.java | 27 ++ src/META-INF/MANIFEST.MF | 3 + src/SwingJit.java | 343 ++++++++++++++++-- src/branch/Branch.java | 102 ++++++ src/core/JitAdd.java | 4 +- src/core/JitBranch.java | 101 ++++++ src/core/JitCheckout.java | 66 ++++ src/core/JitCommit.java | 40 +- src/core/JitInit.java | 21 +- src/core/JitLoad.java | 9 + src/core/JitLog.java | 43 ++- src/core/JitOpr.java | 48 +++ src/core/JitReset.java | 71 ++++ src/core/JitRestore.java | 43 +++ src/core/{JitRemove.java => JitRm.java} | 13 +- src/gitobject/Blob.java | 3 +- src/gitobject/Commit.java | 54 +-- src/gitobject/Tree.java | 47 ++- src/repo/Repository.java | 2 +- src/tmp/Index.java | 10 +- src/utils/FileCreation.java | 11 +- src/utils/FileDeletion.java | 9 +- src/utils/FileStatus.java | 3 +- src/utils/Utils.java | 3 + 100 files changed, 1440 insertions(+), 163 deletions(-) create mode 100644 .idea/artifacts/jit_ex_jar.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/vcs.xml delete mode 100644 .jit/HEAD delete mode 100644 .jit/config delete mode 100644 .jit/description delete mode 100644 .jit/index delete mode 100644 .jit/objects/1522310a3d07698c0bced8007b87931a4c1265d3 delete mode 100644 .jit/objects/2320df27604a85e1993df8b3cacd6404935677c7 delete mode 100644 .jit/objects/2aae6c35c94fcfb415dbe95f408b9ce91ee846ed delete mode 100644 .jit/objects/3242150d635bfb77a329a3bfede1365568d802fa delete mode 100644 .jit/objects/5929e58a5aa1fde36b80ecc26548c50423ddf943 delete mode 100644 aa.txt delete mode 100644 bb.txt create mode 100644 out/artifacts/jit_ex_jar/jit-ex.jar create mode 100644 out/production/jit-ex/Diff/Difference.class create mode 100644 out/production/jit-ex/Diff/Main.class create mode 100644 out/production/jit-ex/Diff/MyArray.class create mode 100644 out/production/jit-ex/Diff/Myers.class create mode 100644 out/production/jit-ex/Diff/Node.class create mode 100644 out/production/jit-ex/Diff/util/FileUtil.class create mode 100644 out/production/jit-ex/META-INF/MANIFEST.MF create mode 100644 out/production/jit-ex/SwingJit$10.class create mode 100644 out/production/jit-ex/SwingJit$11.class create mode 100644 out/production/jit-ex/SwingJit$12.class create mode 100644 out/production/jit-ex/SwingJit$13.class create mode 100644 out/production/jit-ex/SwingJit$14.class create mode 100644 out/production/jit-ex/SwingJit$15.class create mode 100644 out/production/jit-ex/SwingJit$16.class create mode 100644 out/production/jit-ex/SwingJit$7.class create mode 100644 out/production/jit-ex/SwingJit$8.class create mode 100644 out/production/jit-ex/SwingJit$9.class create mode 100644 out/production/jit-ex/branch/Branch.class create mode 100644 out/production/jit-ex/core/JitBranch.class create mode 100644 out/production/jit-ex/core/JitCheckout.class create mode 100644 out/production/jit-ex/core/JitLoad.class create mode 100644 out/production/jit-ex/core/JitLog.class create mode 100644 out/production/jit-ex/core/JitOpr.class create mode 100644 out/production/jit-ex/core/JitReset.class create mode 100644 out/production/jit-ex/core/JitRestore.class create mode 100644 out/production/jit-ex/core/JitRm.class create mode 100644 src/Diff/Difference.java create mode 100644 src/Diff/Main.java create mode 100644 src/Diff/MyArray.java create mode 100644 src/Diff/Myers.java create mode 100644 src/Diff/Node.java create mode 100644 src/Diff/util/FileUtil.java create mode 100644 src/META-INF/MANIFEST.MF create mode 100644 src/branch/Branch.java create mode 100644 src/core/JitBranch.java create mode 100644 src/core/JitCheckout.java create mode 100644 src/core/JitLoad.java create mode 100644 src/core/JitOpr.java create mode 100644 src/core/JitReset.java create mode 100644 src/core/JitRestore.java rename src/core/{JitRemove.java => JitRm.java} (43%) diff --git a/.idea/artifacts/jit_ex_jar.xml b/.idea/artifacts/jit_ex_jar.xml new file mode 100644 index 0000000..0d43a79 --- /dev/null +++ b/.idea/artifacts/jit_ex_jar.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/out/artifacts/jit_ex_jar + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..63beb5f --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index c3dfb30..0548357 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.jit/HEAD b/.jit/HEAD deleted file mode 100644 index 72d24fb..0000000 --- a/.jit/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master \ No newline at end of file diff --git a/.jit/config b/.jit/config deleted file mode 100644 index 8851aac..0000000 --- a/.jit/config +++ /dev/null @@ -1,7 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = false - bare = false - logallrefupdates = true - symlinks = false - ignorecase = true \ No newline at end of file diff --git a/.jit/description b/.jit/description deleted file mode 100644 index 536df30..0000000 --- a/.jit/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. \ No newline at end of file diff --git a/.jit/index b/.jit/index deleted file mode 100644 index 2cf6aca..0000000 --- a/.jit/index +++ /dev/null @@ -1,5 +0,0 @@ -2aae6c35c94fcfb415dbe95f408b9ce91ee846ed aa.txt 1638161591035 -2aae6c35c94fcfb415dbe95f408b9ce91ee846ed aa.txt 1638161591035 -5929e58a5aa1fde36b80ecc26548c50423ddf943 bb.txt 1638164306675 -5929e58a5aa1fde36b80ecc26548c50423ddf943 bb.txt 1638164306675 -3242150d635bfb77a329a3bfede1365568d802fa bb.txt 1638166335325 diff --git a/.jit/objects/1522310a3d07698c0bced8007b87931a4c1265d3 b/.jit/objects/1522310a3d07698c0bced8007b87931a4c1265d3 deleted file mode 100644 index 8c4ec0e8d44cb54f4e60e8f9ca4460dd8cae99cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmV-k0HObQoK49w4uBvG0KlDB@C0a~!0an@LnzT0#gO`c6DMyy8O$0GOl=UzxEwv( zl(4qAV#%eFGcKX05K2&Y9(;*b`H`&;z08xggwawYzyzd9KhItGE7gym7cEgAZmfYS AMF0Q* diff --git a/.jit/objects/2320df27604a85e1993df8b3cacd6404935677c7 b/.jit/objects/2320df27604a85e1993df8b3cacd6404935677c7 deleted file mode 100644 index 1fb525b6c7fc3048b2df733abbb8d8418fb48255..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmV-r0Gj`JoW0Gt4Z|=D0Kh&|Xo7&hrEy4+tPG@ak@4LcNS^@?hX5ur;{3!Q_p;5p zm-Oxs)Qno%0yEaGg;i6ma=5>*@AblmWfDS#G}h=i4rf}<(Upa4sy1^1wU3A&`_K0V H!TCdf8bCBH diff --git a/.jit/objects/2aae6c35c94fcfb415dbe95f408b9ce91ee846ed b/.jit/objects/2aae6c35c94fcfb415dbe95f408b9ce91ee846ed deleted file mode 100644 index 61e6c52967c4fbd749510548ea7f01a876eb2f88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19 bcmb=JbK2wV$&=w4=k-r{GBQYUv%~@bU+@Q> diff --git a/.jit/objects/3242150d635bfb77a329a3bfede1365568d802fa b/.jit/objects/3242150d635bfb77a329a3bfede1365568d802fa deleted file mode 100644 index 2ac6924d3eecd448b154d09a8cdbfe7897cc0365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 Ycmb=JbNaN8U#(fPEej)q2^WVt06uXA3IG5A diff --git a/.jit/objects/5929e58a5aa1fde36b80ecc26548c50423ddf943 b/.jit/objects/5929e58a5aa1fde36b80ecc26548c50423ddf943 deleted file mode 100644 index 9045231eb4873b311f8fe28a1b84cf0b20f9f24a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12 Tcmb=JbNaN8A1eck65|2@At?kA diff --git a/aa.txt b/aa.txt deleted file mode 100644 index 95d09f2..0000000 --- a/aa.txt +++ /dev/null @@ -1 +0,0 @@ -hello world \ No newline at end of file diff --git a/bb.txt b/bb.txt deleted file mode 100644 index b65395a..0000000 --- a/bb.txt +++ /dev/null @@ -1 +0,0 @@ -nice是是是 \ No newline at end of file diff --git a/out/artifacts/jit_ex_jar/jit-ex.jar b/out/artifacts/jit_ex_jar/jit-ex.jar new file mode 100644 index 0000000000000000000000000000000000000000..5429e04f38d3d7218bef52beceea6dc36dee43dd GIT binary patch literal 63951 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 bzb3W6)88NH??2+toQZJsL;Mwg$ISl$r(Zy1 diff --git a/out/production/jit-ex/Diff/Difference.class b/out/production/jit-ex/Diff/Difference.class new file mode 100644 index 0000000000000000000000000000000000000000..d03371410a157a69c2fc8359e3d05ed006807272 GIT binary patch literal 2848 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 literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/Diff/util/FileUtil.class b/out/production/jit-ex/Diff/util/FileUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..40d78d28f1138a6ddac15676f937769d2fb179fd GIT binary patch literal 1070 zcmZuwYg5xu5Iwg|ni9ghh*f-{)|OZ0;frEX9-V=S@Byg9@F|qr5+)=}Ng02ZekqPP z{s4cJ;|mB<@-ZX$^p zC1#bFGca$$!V3d04ZIRaEV{lM76szjTvpRYYN6VlcR2;AD z)Lo^wjaqo*o(ZJvRkvErH$vCTmt0To@=_46>e4yf3AV$!>(>M_S^L;Ick-U&*YYi6 zA$QXxkgPI?@0>)eH$v!_ekC}Ja%u`H(A!Gm1`$1}O=Y*GUki@}`a4MMz^~EYt^6y2 zA4)$Ii0v=)$;!0upEg3)CY=+3^tG%VE=92RsUlB9H}KC4yr#Y#H0l*uipuFxhibyK zs@_6B1_booozfJMR`jBFsmk}p!U75g7A?F*(ZUkm35;~2I;d5^dkf20v9PMr_W#=; zg;?XfZjR&{cM6HngMI%?t{N*~oI74aZdI8# zyU{t^cHfh(AC?s)+P8Iqfi}_A=%O7|d&7oh_m^{o=oK$GW55XYj!9l^P#H7mP$?n_vEX>H;HJ)fB&2E{tYj}I&} z&H^nmq-Y%_Z-&g% literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/META-INF/MANIFEST.MF b/out/production/jit-ex/META-INF/MANIFEST.MF new file mode 100644 index 0000000..7709bd3 --- /dev/null +++ b/out/production/jit-ex/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: SwingJit + diff --git a/out/production/jit-ex/SwingJit$1.class b/out/production/jit-ex/SwingJit$1.class index 0d0bbd15e2b6688fa9e3816bb76f37834e7b6b6e..78f013b4d455b9bbc61ed3e57fc59af06776cc4f 100644 GIT binary patch delta 835 zcmY*XPfrs;9DTFfcFT5wDo~+-)Cvkqv6TO`SQVsN1VM`=p3GWSS*$H-H^{A@f$YsM z;8hYS2^!y7z2AFpX6IYzG*tik>+~~#DLiRGD<&mO>1e~W zh8Z0`OiP%RFehPNM;aL&3%IEvt0RP48g6U2qhV3Nzi*WWUkG%r?ppiSL9+J7DZfmv zkv1PR&HC7yV zFqQE>Dc@UZw!~~2?lOS)UQN}P4digoKo}PcTttU~PTZ&b{~4T;y|h!Q)ahQ=G52|LnvRbf9?553HWt&vraDHU#@NCpe ziXm@Ln5sbJ@L9zBBI0#{_Pwf8b_=dme6?A%iZ;gi)7roSlyF!c1Hh3d!5^#e?L-%= z5zglMt#WKPM~@-Q#4!}}1nNXFtOC z^aTF3gs*`>!u$ZyfR^oli-AM~!L*MnN)Kx-4e0Nnr~N(t28<)B#gIUf_eX{FHK7y7 z5k!icnV`ueqP&$c%#b%v<}537n5iSv440*U3VvM105Qgf7_RVwGSlC{au&x`S_RoY zh#_W!X*x`1AC%uL`8AAaFg1({jb?D^|&txZ$5@-TUu06U+adC-pavWJkFBZLp?z+uJ)(tt#_7!{?uJc3c? zu{{P2Q5N$kFe<(utWXUjpAdU|gyxlOpoR8k<8Z6kq@vUTiHw1aQOp_ ze6TfG!?gp_q?B`9I+T8HU8ID)@5%c{mo%p={w6elsy+qGI7T z?ijdh!9dx>teWqcxUc3p3spQYP_rVBWw2!P*!8xG!4LuMkG+FT}n$aN?I< z@Z4FeEB72BTlE4jsSz#|`vpuqA!HWAwj|{0ULZI2IxQLPh?dWuLOpba|3pNdTKAlp zWY>!c_M;$>(V{QnSn_hP-c)(lykz`VnbYQkn|NWcC8K9y)RAq%*in8*yi6RqFN4IH z*CETwo>O(C7o+AkQ+wQ zVGS)rB5-$Eyse%wQk?joF21(Zilk0F@B4(=p1`zpdLiE*>Wh;V-L4E+q|<#czCY3H zA8X1?!ecfHioKJ+A4@Wp$&Nf=@<;n2^PO{DmS>`+xf3ymDD(4h4*c_h@_D5&el=1& zMsc3K7xWvF(jKcc`36*ai_|L}^8 z>BdwcQ#f;oY~x=TPv62U3>?Cm;!!xupF`M<(rXYq2LFM%F@1>KD+Wq&sWbc{rJ)kv zzyRl1MT*vur8;udK#?|4rpK6}EmUY5v((gul{k5Y#~6O%(_BWcL}mSqUo`ezT*El$ txX%0Mk^0Q3(gtoA_|-rWWMCr0XG^@B!X&16&R`lhafvO95%N3(<`=o8PJjRa literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit$11.class b/out/production/jit-ex/SwingJit$11.class new file mode 100644 index 0000000000000000000000000000000000000000..e0e3cdfa981da5ae8d18b27f788c883f215f2b6c GIT binary patch literal 1621 zcmZuxT~ixX7=BI?v&(iNX`oQ)mmjDQplh^LkhWUVq=JD$lTzDi^<;Az7B{<@%|iJF z$~ZdXg?XxfE_Tn^bKdj3&-=X3*+2jJ^$!5& zQ0YQ1&dJw=hCZCv@D?UDOyTV=Oyh!vi@2oV9SthZt9VzAmsQNjF)KH(D9C9@ATPtO zs(4Sqtb#cO?=u`-=k`!dG#b1rvaaK2G7QHHt9+er7>)auQ#IyFV#Ci{!mdm+9FgHR zFAKZuG4yo?7UVhw#V=Tnt>~_KrpQ~e?Cy3cXC(^Nl5Jme8AMRRtRhT}*sbJ}#!Ue103u-sR;Gz3L z4?FNe)fv=wLXxp=bCdjDtGf=hoJ=!%z^aSfAuo5@H1F}62<#CZmL}SSiSv40$nEjNXgpI-%Q=)&_1(7E z3S|lS(qoShN$()K9R!}Dcbo#j?%*`dbvdVh-5I<{Bg0F0xdrnVfy8KSDg6+viP-$u zFL;jTk)IK7LXorIpx)X+S4wN*$QV5-onB3JH_`JGPArT!kqi$UZ5>FZXlt7isF=Vc zrHw)oN<*XEccHQ}bY`NTRWQLUOfrEfb`KX>6<65`7TIb*I!(l;NP!`|5>&d>qEBS; zDqailXEBTsQX)7oio6^tnu2UBo%fX*7U8zF5oG{*1--oy(u(+HuLMnL@! DpF*C_ literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit$12.class b/out/production/jit-ex/SwingJit$12.class new file mode 100644 index 0000000000000000000000000000000000000000..ab4389d565e2cd4f37652401f3c736f0423ee626 GIT binary patch literal 1619 zcmZuxTUQ%Z6#h;UnPECKX`oQ)%?m07=twOUq^*`TsbHYcq}0~y$>a#rPG+(u6N-0z zu{_u}{R1vtJ|bOhaH-25;J@&JE`0JIsQb(eU?>kWXV2ODeEZvbe`o&q=a=6BoI#}> zoj4<3qZ+z!R>R8}(=d)#+A)E18qVW_f>$-DIIH3{xn5K;Dc7uYUQ&?LkVIaFUsmzD zf++>l3f^Eiw9M_ks;JlbqR6_AKQh8_q;QKb^A)3h$8r{p>5^FS^OmqH6ATArxXsJL zE_)1Jt$_u(PeE!E(fGqgobTiI;8KNf%s` z+Y8*Yia+>HQx#?T3Gbg+cT(2rB3@1Zg z2EXGQVp%x8aWM$VNqa)_h=~=3!vRaf=G2AUiYaOmh5#AyITrf%M_^E*mP+EXnITBg z_lOuFbQFDV-k#yLppal31qCxSCkCzPHat`0Em?NQb}6SM3e}QxOxvv!%8c-r+=_x( z9ak`?qZ>Usj^Ifhy_i>URYwse1=n;e;JSi0b=<&B1#jti8}Bgm>}56Cu<9(ELa9n5T+y&U_jgB(rb(pxxa3VYsA$`BT z_27rUfBSlCZR4-I_qNu)B`Ix}MpI%)?ZRCt-x8+Ja6H)B+u?#$_XUlcp?6<@FvAwS zuj{Gtnq3m+ZMQ*@s<~qxj^r5#FVc+6cW|fRtZTc}fy89t8Yw2VtHr=U z0!z103+@+*sV@9HC0_L0hC|n&^MBVMJSelY@mftt_war+9;+tO4dqmQce~XJWeOXR ztdZpXK<*`vdd?8Pn!AJ->1Wmjx?+f>Qc}ABtt4Oi;l=3b#ZmGeBWs+#_h16BXqNmG0MKc82bd{>{Fa)pW!n59CPf;fOLk4jZ+8u@LW*od_HonsUA9OkT*uX9icUW(|8F_k);trC#`_`AN8J} AQvd(} literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit$13.class b/out/production/jit-ex/SwingJit$13.class new file mode 100644 index 0000000000000000000000000000000000000000..87b5f635223e9703b1e453c9a2702bc66062be9c GIT binary patch literal 1398 zcmZuxU31e$6g}5AmZB)wm;_qNN1*{6CqbccAvDGiLIMOk2{o4%k3?vN9@Wu;2s&IGXKok5R?dtCCx#ymHv>*O^^A126_xg~BW8nZMES$%W zCMHdkE&PNF1}<7KFkxa!jh9UPtj1{z6TX_z*(rN@H8P?@d7WY5)K!8Z5X*v$jpWzj*S)EB=qml<_-|@Up6i^A4)eN9Mhq_ z>eakBk=#nck)G?iKfCa@6(yKE30b0!FI+hrwmV_K?PNoY?y=jl2-uIiEjS;Ew$!ap z7nK3}-7u04duXY{bWEOb%TzxHizEND#pjM%k<@u-e4jAY^_O-|cgxp@dg5e7ry~RQ z=y(r|uTON_$Cfgaa7T=S5^wk4$Bv9;vLZKF`=MUQTyn0%?o?&Ek5(d<5EFbm9031& zpnP5#j4zE8KSMag(Zl)*N$H4H8hr&SZ6WnS@A-z`S>6MBif?&tt2rzj!BHN${W#u5 zc#kwP9J@sI*GSjL3Yo&bO=RnDVf?ZMv(UE*YmA>lKfg9%*Gn%!92j^Gb8&nVxfcwS zVycsTA*G=bpFtnzc!m`HhAjP#9Q}bJ{fPdnrUfgc6r7FSI87V^EiGRyEl?nB5eBKZAS4te5>*0KQ}w=ame$2tNA|YOui?Pw zxfehj_yPPV#H`bRkPx=K@4emeym@2)`1$QSfGup6QN(f?H?iVjwG0QhJlyth$HSUH z@kyj3^Hjj8ukQ=E&19eiYMn@{7stcCO7~4WXatUcapkW7XqO7xCOUnS{K4Fp!|og;Z719@r!b)vKhp5>61%^Oxn zL5&3#Ca75IgP=7I)yUG2P*Bg({}`yDXJq)gD@VCf&Mi>xCC6!~+L0ZnI+gg)3Zcf9 z4&x-F?5;A0$-u*1ANO$IM+vhY>OR&nD=?qS{#%fb4SQ6XGID5vi+_MG`$sA?0?Yp# zxf5kZ(LI6Elz?hRu?$r+8IBT7N9gJ1#IbRZS!;vs9jR5^$UXSI*G}b7mT-YtnLsw-Rr&?24y{rE literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit$15.class b/out/production/jit-ex/SwingJit$15.class new file mode 100644 index 0000000000000000000000000000000000000000..bd1c2ee15943affa1592f730afcc0a2a243391f4 GIT binary patch literal 1398 zcmZuxT~`xH5WSVe%rFclM$pxDS6xv<00)<-DA_0?sF)xc^c){MlNLrNGdVK@;xF=T z&*7-x$DV!L7k|{Q)t#UV=AoyntGjPi-MZ6X{{8effHIy8AP>jF5lmUQjNeU6nu znPlCI3HJRUkkPy^;#l%>sMb(%m%L>3@)Zu76K>*#!HSHYhf!O$2&cR89q}r0!PCz(KOB*xWl|MlZ|jAa^<3@${yM)<&r|-S{4G=4`W8D%Va%l8CbBfh`Tn9 zV%WwA?isjmV+jv9O^a}-(u|xcL))mK&deW7=Jtl?w`9a5R@RfYU#&F5*6XT`WjrJt zt~h#GarB;z6+AHT$i`zd2uHtTePhSQD((>m_tNGL5c1y-K5V{_ZbJA)yAHBf^WsEu zD+wq2?(6>S!|O6iF!us7MIB$baz1Q#!hqY!f*3y_w-phv9`{RdF%oU5Tc0i}0Svlf zBpudJEnH*x4mYlA4j0G%CyQ?#wIZqG&iOuJrl&8hoZgWiFZIRAicUuctkKCn7(d?V zwT~rbCgC0#1x4QezmF9e%VbqbIVHDU@e#jnE=@V^Jj=asU21;?N)BGT%p#opP z0LR!yiryki?~tSSDAF#b=rgA2Bg*s%GxV2Eti-{~JWk^b-{v%WDJttMe$&|3a1Ns! u<2>&lL+U>cl{Rp}z(oT^kb$ub-!1WO3gejIIfF@D!q043jF9IUFuwwq%2HMU literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit$16.class b/out/production/jit-ex/SwingJit$16.class new file mode 100644 index 0000000000000000000000000000000000000000..3d56c79168824e30be4da08ca8a3003ba22a1c3d GIT binary patch literal 1985 zcma)7Yf~Fl7=BJJY*>~8DHp+FQPBdaNsF}#R0^hvh9(pZP_bG)>>glYvm19$0RM!4 z!_ReEWSr5j&N%9fj<;WChQ7lXK4QdEWPZ-s}GO&$r(LxPi~RF^pSkd0WQ_ z7Ioall8$A()3wx32>NNrCU7T#Tmtz7-tESFDCk(hT^&V~bgbf@hBXcEYxqDzS;smy zG;C_Pui-<6opYAv4tpXzA#DUl*L-WQb)wOEB~mZC9+;D%-+e=i3gwNftemJDc3M)pO%z zOzznMgHdo@;b$El1cDxWi)BT5#g>!TZxWq8Zc5v8*Mz_0`4wR?T(0xV@FSTKhr*Sa zJw8vQ0@@`b11c$mg!* zRY+BVA+dCtVSeJ89C)oucO*EW1`-2!~N3QN| z?+a5hjE9V#uFRqxNI`AFFm~>JSo>6lEq9u>84_nUsj4XZrpS7gs^?O-P`{;~>hd-2 z3TGj#=H~Qhb$E12_1Ca6)4XlY1!|mKA=M)dm#OLVI^sf$U@2@cQh28$4&^V%Q|hg# zS0gozCbqrI8a1D!f)>0&Em(K7^EH{TDv;ySB$_HHqC@ROHwq>0@?90g3xSYr1wp{Z zObMq&qtTUuFxqFHhGE>0wqr|MjjEwq)#9=h&2?Xh4H^j}Z3C(q>Todig#^Q?uB8GU#Ole9Cuf>-NmSPx=^1n$l}20KBlbc*;Ox(>cv)V@PvE1K*sZ^e>& zc`KgmDQ|Tpjq-f#YxItv;KFEZeD;*=KStyf{a-+113C65R@mR68;e9Whd8caidG`s za7dk|NgI_mSxw<8#byBWH2>0MDMhw26xkTAlgt<*{}L#!VOGQI8g4KRZ-ADYU4(s; X5D~mZ(FNh>v4EH9q?6`h+JVG>H)jdS literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit$2.class b/out/production/jit-ex/SwingJit$2.class index ed548cef548fcced7c87ee0100403a86a1d37953..99b94565075b0633b4f878a028abc2e773ec7eec 100644 GIT binary patch delta 570 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 Ir;(q30iI!hivR!s diff --git a/out/production/jit-ex/SwingJit$5.class b/out/production/jit-ex/SwingJit$5.class index c999cd143f0b36cc5d16b4ad17fc7ca0ece0d39e..92a9a7df3ddde038615086a217a620fa2ac270d7 100644 GIT binary patch literal 1466 zcmZuxU31e$6g_Lpkr5(x!2|-NN!zq_92Y@L_=ssJn51=TleA8m>Ep)U#G;DikwlWe z(V4a|d<>6$W~MkZbf!O`|AN241MOMa2{^-pu6FM|d+)g)yZ^p<`450g_~{6a;VUgJ zSs2BfiOUuY%xQ5&i>q2(voMc}h3oj*#DayRxMAWO6E{uV63A>zZ+b(ZP`@X)<*pO$ zxc;WIycEhURS~cgv+Jo<8FvIu52M!9ZoK3wuTA90b=P;}1p%ix4C=cY*1bJAb63Eq z25lvftGm9sbAM}Hg==!%qvm)$Xi4v`3|+k+D2=$|Mr2m=eHB(c8AVEO>rKsk*^Q^? z$R;OSu^afSD%=RdE!7s7?9+1OPVA^{<;Tv=1hS~t6-^_hb_Gr*L>)J9YAcJoE!EX- z=+M|;5d=mL%uC!;FQ`1%SH9n~z)^j)+6jV4g#u@WE1}&CY`Ta+5|3_c0>_%MZ2i)Z z-6Zj(XH~Y?#BKIbz-k8f!?-aEDQCtYFo|4>o>8Q{aR?d8kk}*0fV=pUw1~Kt92F zl4G^9eowVxfr&(QxL$QPiWPgx8ok$^bc&tckK4~YyB~{5cRkrs)nKa|_-rbtV)oE1 zu1a5dl|vm!MqLj;x~OF#QXFbeHI+xQ?0zGePNP`U*3qaF?5uQ^f7_K_uqklrow+&) zU72D3a+@mdJ5lXE*L-oNKPntAtzpOW1XZOU_%0{Cf5{5_sHA4iIAj-z9MgFpT+o9X zBw&)T-g0;cT;4sXN$0xs5hvrc7P3URz&B$QG$57F>yZHX=Tz`rN%1S-B&}myUE@B@ zf37t90-{uYfmCS^>E{XX6y*qkz^^z>X(#I(#&MQAUJOhO+`OWj5$dk|4ddrMWE$mk z4iuU8s6YzY?SZ^+_z z=JE%*KEN3~B`2#i1`ekGiH&~))${p6GKXrlu802@o~BxVd{3b*&U$&!)Uy{ z`^*a@n)n0!QR+8aE-_Iz**P=k@|`)~IrHP^*Y5xx<3SM_WF6#OTtHr++?D&%3uL(C zy=ZrpZv^s>bg0b}fo!$5?Vunq>PNBi*0foPdOdB5aFDgjMHj9G$@{6^!KlFaIbdVp ztG>}uSVReB7niK>SU=XG*)-CBy%kGeIT#lxZXW1xhY98$I+zfcNkQa+@zlNwjrY{I zFio8p6{=Vuw-R*}v6?zmt-W4b#apr+P*Z6}z6`cytnK+knKQdO5pbL5S(X_rQ_u|+ zzl!3X>IlqMn}5yQuySPyY`=V5FRgS!G#|Gtr>E!vBHwW@9DrPJz`YzXUXgnkeuJjia3B%J|4zeNGeA30CGmgBy$> z>`6+yn`I3auY_B;&9rxDpG4*tLHK?u4(1#_0pXyOBf>peGq{f`WezpWV=2|tST9f{ IQiYP=Z@hTO(f|Me diff --git a/out/production/jit-ex/SwingJit$6.class b/out/production/jit-ex/SwingJit$6.class index eca22f1d699fe48d64b949e817c19e909e8f4f08..94faccb936e84dae5b9e72cb3f32ba40f145f791 100644 GIT binary patch literal 1855 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 AD*ylh literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit$8.class b/out/production/jit-ex/SwingJit$8.class new file mode 100644 index 0000000000000000000000000000000000000000..d75c361bf4286f25f3d0762e2726d9d54a9b139e GIT binary patch literal 2131 zcmZuyZFdtz6n-X6cG6`_+VC0#e5=|P%A%rR8jEdhr8O3$b~kP|rTB)T z9?s$LMSp-_{ftLajy=a8;9v3_@R?00P0NR!ow;-8-se91+?{_P|NReu6ZoYYhcKgu zk4+p#(Znp~B+g3An=thH6MU*?rEa9Kpl9by&dy6*Fwuk0Bo<9%aM8piT$cFUL>5=l z_#%xj_0&nDoJPe&6-xVGmAGc&1zeO^l5i!i3&<76>%XCH3G6RkcUGKLyMEL4uh}yT zYBid2l~)}RFtwBCl$CcvV0WiqQJd*w6kOkpMg{DFPKRfKI_<54gXaa36G2r8WQwk@ z<{Hao6)reskCtpPs5stvCv^3?ZA?Z>Ze75d_I(vjcuu{p^s-pexM$p`{}j<=oJ!;d z{=5pW2H~=*3cT2YWji+`TdgQRvd3bVNj)FYFcNB&ZZSyP4eTk`Q*%Ky6*TZ@6Ang%WiO5kdr^|)rb_kp*8+z&=h*gzEPSH@eQV)6 zd@sq26MHTNX*zv4j$7YE;7JkAl3qKe4QRRV)!8<7H@cK6y{4j;N_P(owp7=t(;bb- z_3HLHJ(4N9w<@g9JJAx==+tV;XUh$@TW<5|?E%}8pp3igs^)}F6p)K_6twz+4fnh- zETFG#Zwnr=EjmJ4xHiWPRBV#^e7V*{(ljJEdDq;W+Pu!{DC?iQZn_X8_-9HQpHs zKK*!&yRUQh9@kxbXNHbEgcv&d5Q(8RbUlb2-{5G_5%>=S9Ibes!61%sC2$nOtuW$u zB$1}=x1qlvnn=#BBel2=V{r}g5zXFmA{%zP@B zYN9une1yJyY8~0dTxt!w@Hd}i3Cf*`nX<~Sr zS9bzKSi(Damw1Mui18FzJcAj2lsqGpa2g}@GZ-0sl25c*;(duxiPI7vNQ{9X$BidE jCb#TJOwdd3e`qknBx594^GAH^EYr*mn8b64Zy^0Yl|}{^ literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit$9.class b/out/production/jit-ex/SwingJit$9.class new file mode 100644 index 0000000000000000000000000000000000000000..bd8b65191e570003ca0b2d16e3c2f844bf7c5d94 GIT binary patch literal 1629 zcmZuxTUQ%Z6#h;UGsAQsX`oQ)%?m07Xi5u|l(t&Zq=E^BCIwrsCzB&goy=rS2Ffo` zmP^<2p+5QGi!L8oxZ2=qUH$<7g%9b%C;x%E&rASAd6+quz0bG5z4v#{AOAf49l$s$ z9q7im{7q=+!K8-En9`8Ol@3hfs)lR0uHbDADkfFDBgY#mX5^TW#+wSV8e+&v_ggC7 zRWPeyPQiN&$JekO&Ec83F`_Wj`C&=Nx=<5UDgEN|Lkeyv&-Zi$yI+DYUc zgIi17HRZas8Sz%lI)grI+rrIQyj~Y_nJ-G>bEY?tCN?o{c&1}72=_C`t%?f6xqw!R zKlD;!UD#gghVPP<^Jz&VBsLgM_#{&nry^uG3{jIX1jvZa>A-e00)x`3sN^kc8GsZ$ zmv|9EXVK%v=LKH#^YFWoS5TlfF=$0+%{4^Mlv#J~WpZAkP%c^9u$(%f6oj|xR20nX zxQzuJz39_%5-;oM$D)EeI*KSMxT|9c%L?AtaS!(ue4yh)e8kXqnAOahX;lREG}_$! z;`yU39UtQps%3NY`{uK!&o{qqe)WTnPf^mrvCPnY0I**h9c3))FmRvYY;Z6DYyP;s z`}n87fBSlOYv->ozuDdTPUgAaB!>6_+U@cKVR#H@{H?Rz>AlJn!h4EsdTy@ zgF{EPzsqo3ks^K0xZE~Y3CeH<_e8K7xm_G?5LVJtJ$6yUa z3M0SbC7OqRL9_uy&YnTNw}Xy^*1)k5`Vu<*8t81G>t~#rA8jBW95~)OkVueen*ykq zz!ZfILlR0tqu3XqvWw8!CG@g!Ot3Vj*aXsS64%&e++tH$U{`$7Ng|e}3Jl;4Khwn) zeIkoD@s^K2i$M%gC6a{Si_pImF05c!!H9xUFa_uP=xmCtA*$^djS*bLCA>m2jS#wN H1l0ck)y<&a literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/SwingJit.class b/out/production/jit-ex/SwingJit.class index 6025f3c358ab0e93feca0882ef053a35845fba8a..c005ebefdb0d5c755db069b96602fa20b01a54ee 100644 GIT binary patch literal 5857 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 F{XasP0}=oL diff --git a/out/production/jit-ex/branch/Branch.class b/out/production/jit-ex/branch/Branch.class new file mode 100644 index 0000000000000000000000000000000000000000..267537fde6d4c11a444f70b6114c52cc148dc7fd GIT binary patch literal 2615 zcmbVOOH&+G7(G1<%+U0ZFeD^Ki3l+nh6$rdG=U&VcuB$|DvwAsk7lL=O@`^Io<`%& zRkVEUvXCmPTv(Pav`|YRB`MweJA{fW|ABhG?q;TeVdEnA-oAbBcg}at=^=mo^XqQ_ z&Y@6?W(>*jx{Bi%j^L__FosoJ!-%X#YjFT$QH)1%U7p{Nvu~;#-jZP=f=QJprev6w zTQ?$jJBk?7P!KNY&b)%yoZ<8Z?j1_BSGpPQx3a8yVARYT<4cRP zhCQjz=3E>rqvxh|+mvU2GwjTpMLF#;N_zk#pb@RV%pq3X34S=S7rT9$*LW^)t)|D! zn@+ESQx(ovu27#@vTcvXkSVq6OmS<9nO*ney{+M2HdvGTo=zFVhMsk+u<7vd;FSTs zxkr9CY|}Ap1&4O9_IAZrJ)8BK?kqfS`ey6XCz}tK z|9Z6ibY(?Dzi^KS%XvBo z`)(98Zi8LD9$;LzTJ{FCFZtIT4 zB2mZM#;-9XT?C1{pHJQ~^3ITLEqWfe`XJj;-V4CW4Z9C9VAbzSsyJtIR?%QEn)$;8 zR3Riu;VL9y;S8~wV;vN<;RMGQ`IP3YaIQ}N0_8_8LO98>#@#%EQ(SA_0VL4QCk4rh zmqWWRAFFtoNn;5??j=-6ppqS{P=4adgI3+$@orW7Mo6@-w0wjt{I&?}8WwU%rP#cX+F}hMRs0{MHgI6Z zZ-XXlCGsRJ+}Ck%jIog+tFRxWaa5jQ-5!OI0Uge80J3r5V z7ih27{Saq~iYg-4C)dza*0|o)rI$)y;{D43o7EBl)m2p4QN0V@#1L&WM3m|s`w1nV zMoFttQfT;|$Af7dq&`Cd=nfzHBxzk_$C9uv^!R`azL|;r0CzdF8*P+n9t$X)C^eeE zYi^#~d|U}pFNN`BT=sEC0=PSZeWcvw29C~jtmB!nlpme=F}^G-v4&?En&-+scv+ty zwMqImMLDMBzdr$*BRnfsxA i7~Y~)w;AF)%-CI;qX!uFlx%DAZA&9of#HB_|KNWmocg5z literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/core/JitAdd.class b/out/production/jit-ex/core/JitAdd.class index af08bb61519689fd0906d3e0ee7d51ac149d42e0..b5352f97f20215a3bc9e31126826521f86aaa9b9 100644 GIT binary patch literal 1179 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 literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/core/JitCheckout.class b/out/production/jit-ex/core/JitCheckout.class new file mode 100644 index 0000000000000000000000000000000000000000..3dd605c11347196d5b508a2054573028eacd2bc4 GIT binary patch literal 2933 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 literal 4024 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 nEU7Nja|W}dXwu$?$U}^2c<~{!8eYQ7v_cxx03+ literal 825 zcmZXS%Wl&^6o&uF&5r9fZA#kG25<|7q=lHXH{gh%-q9sqn}%=bSn7oy*LR-<|IOuH&kP7~%>NI+92+ zOxEouw&~j5mbqT5b0=a*T@#*&ZZO0P#i|08ArtVXZ$6+Y6pK(` zQ6Rjna7tuj?uh-c-`1-Q<;dSrryPw})9KQNULa*C7eE(d-am*`N(28;o{+LZvV_MW;q!zC zGK89>F^f4Gc`Ohz-w!x5fMNx!NR^ diff --git a/out/production/jit-ex/core/JitLoad.class b/out/production/jit-ex/core/JitLoad.class new file mode 100644 index 0000000000000000000000000000000000000000..7a3957877382cdb36f7915c8914c85352f2313f9 GIT binary patch literal 420 zcmZWlyH3ME5S(?KIB}c=0^w281qxh17eoW1Ko%5%P@kPsa>3Zq`OJS&fhhO@J_@lH zECs|BGdHulv#0y~dj9}$ihUn0`aZU>?P1_yhtN1vnKI{u+VF5fa4+(yB=jPc$(!;i zmikV_DLefrPeeKqT3KD0u9>TX(2bH@%kWy6C>PTar=-k;!7y5gXA!0%n}uVeRW=)~ zmMn#t+sJ=af+{BTAGo8L!&PJ;jd literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/core/JitLog.class b/out/production/jit-ex/core/JitLog.class new file mode 100644 index 0000000000000000000000000000000000000000..c4ace09b4bce080b5f90f4278ca746d5329a96f6 GIT binary patch literal 1502 zcmb7DOLNm!6#lL)`Pzz{he;X?fs)ck5=dME6zTw_39ly3gE$Qh?Mz2eG(jLst|BwA zC_DD;j$y+LEa*%&g@w~8GyMVmOPy)@T`3_pVN=cMKF;~>ch33Fy?_7v=U)KM;0FT- za7tp_KnkY}oW>agXYqx^IRhD-&*DqvDQ7XE_7`%vh)V{(!ezDnI*UmIQ@ElqS0%1V zTo=e(aD6wrB#<5&UKY@%f;C5=tK$03T%)$?giF?{M@yj+*p|0!g|6D~7`5n*yCIOT z*g@!&rroF#tWOAJ>!ItbwLtICaOJLb-zs^Qzh0_FbSOl|4r(#aGVKye?%j!R+fMi@GNG#OgHeMe=!8m~%;frwlZYsPt~!o4S%94V66 z1lKLa7K77Fg8{0MW#5~%>T%5!U*d+uH`H9fxcb0$>X94x8xqspSA#}qJJ(#LSVyAA zn2Knk7kvW#??&ILLt@561+%0!F^2(x?ssKT4D$lxqyPIev4EQb!Z5Lj0g0-KC44Kf zY~mK?O?;=~X@0}=SeA(u+&1yOvURj{l^N~jJ|Fjs(zHq421z8s(s0MHz+Nr>&*%stH#`t65GuJGJXS|&nrdlh4@x6LFcE26iJr1v)PHBXX{Ztx zsREEk7M(1y3q9y&fj#($N{v&iGW}Pm(=^db6yiq;;1TgN1$ayee!&qu!BITJhj@-- z_>CGXxo$ubdzs#&(8>OS{$sS8L=KW&Fve3H$Hx@$5Proc#HAUC`2LB}ODpNSx#d{KMxqN`OYfG5#g4Q~3Npv#U<8 literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/core/JitOpr.class b/out/production/jit-ex/core/JitOpr.class new file mode 100644 index 0000000000000000000000000000000000000000..a331c387c338c982b68736a8d7ecb829cd503ac5 GIT binary patch literal 1915 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 literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/core/JitRm.class b/out/production/jit-ex/core/JitRm.class new file mode 100644 index 0000000000000000000000000000000000000000..97187a5012873e4afd30a86b99bde7b740533e99 GIT binary patch literal 707 zcmZXROK;Oa6otW7ok=7Z!F+xMjj^7k6;i!JdPA0P z*#Rv}nH6(t{6TaY&*M-P;h{?9K?V54N}&7y4e@HS5Lk46w9E*Y#&cP%%C9riDxFqu`O1uN<$BsIh&?#`8Rlt# zQn-w3>_TS2+#Fs&d}U$5V{BE29jvqVmILTwgIx!k@Hu6~$IKRU?+2_87idKL!*kgC z=V-2+dax^xHoeyA;nT&q21_M+=(B5cp)G8a6tJ_IcSyQclRjROf-9uqH?&r?08Q%q a^xGn3oBDup=O1EF6T4T40@tawaN`g2>3ZM* literal 0 HcmV?d00001 diff --git a/out/production/jit-ex/gitobject/Blob.class b/out/production/jit-ex/gitobject/Blob.class index 02f0970b01acb0aed603c8a7525cfcb50183001a..4a354f391c060da84bdb900ec7cce69766c41b79 100644 GIT binary patch literal 1903 zcma)7+g96F5Z%WJ%Ls9E0uF@GT)_y4Atj*!LW*g)GzQXgX@NGaY!o9fmMhCC(A#(P z3-a3Z!Df}U+V_4^AKLCCIbbLcT`Z19qnW*D_L+11=ik5m4qy~NX}E*w2$C9ZVrA`B?g%ODh$@qKYLI%Nm+7EnP39^+^Mo@Ts&`G+L{2SyQpDp#z_3 z_#7K5HZ^o&OM1Rg@uh}tOsjaQp$A_{oUb*QNUO-G*cJ#++IicX5~z#!uL~$M&bB4c zlCtyGQfWVJxvOS6M^7~6WX#;U>DuzW>QuZPyC~3_%G#cj-nBAbBAIj269R4V)UNs3 zOxR9h*3MZIKK3hG0?p^Y2x!j^GFHK}ojkGHtBE-?pG~ZIuAR^N$stM9c`kJ!UnqGD zvCMrkhMkhfcY)AWQb3TXJ&5*^PAM2!w`U#7hWr9+c?6nPJTtSmXcqhieT_E#ZFot7 ztd)N*Gq1+`FU!?doRXWdWV-?lQiuDJLC0O(qp;GU!$N{cBg4awMn`qLLPAAW#|~^A zyGZDGf+-z)(#lC|Uxq7brV8k_f(pbgmY*!yxoykUk(Zec3Oc^Qm=0II-j$F=P@W*K zx-T^n%9sHaB^|HvE%)>yy!?Kk<4`tpse&hh0 zpB5&bIp%C{*&ieUwP<;(hXslmro~|tXe@blu9#SpD|aw!c{5Jlv+~}o>+A=@-@Z6_ zmu*#qfa_+iRK@mpwV7xEb@7Gi?F9T)i=P53Y!(Vup2ueBvN8P+Rdq`^a}7nSV7jK~ zxB?N+2?m>;SqFB}V=p{?n>=gUF}iZwldCs!L^EV{Lgx;*|>>*Iq>!It)x6; z^_iSgWM3@>9vz+zj`ON(X6T8qi)zzaz_T(xJ;FZepErx_xc7fGHGx~aMegus0~823 z-dub6Hir-`pv|a27|~D}bw*Svqy8LgPat?RhS8?g^JeBO=# zyUI%z3}T4<_n9f1>+x$z1ht4M`s(@R$gd^fGot!wpC@SAI6?D91uZP9wT!l35#>6- z|1z#raCLF8jP{=~V9?cYf{u;B3Svt`$GA4G7$@l5=u|4`Vpl_DTz`Yc6Lb^p#vgAG zk*V*!Wj!&TYmb%H`HIe>jTQB>vOYAjk2We7WBubuU>d{xL3w~>ypJ{h5T)^ucg`4W zJSN5yqD-KKNgnE_z8X^qGd9Mo5u&dV>j5(rVvYH_gcz+5=b^9K(Wz=jc*F>S4_HYT zlz&K2r{b}Sag_}C3u;ouq;jfiH)DCz1*(#R_cb#k)a>RlZv8?#n3k~bpQ)LUNR_j8 Kf1djBAN~t*8yGQFn*zQ zkyQS!tJTy3{v62=JX`mMB-LI{hID(@Fx-1++w?JD> zIb}cdP(KBd%TkSau9B`At$M4YPMI`kBO1rc=!0zUURKR>!oqu+Cr+MuyIhm{@RWu3 zahl}I(!D2N3LH-Thx%CyA8eUPNp0pi3+J_Rf>wn=^B>r%q;XRgdbP9;hCYjTS6qXxz-jAKHeJm_XIlLtv?f!n9|($1rDSZbG`Eh9_S^H0E7>&#S)H>Bx*L*tuV|O&?W&{q(P2!L97d}nzq?tp z#CaCPt&(l9JQ`XJC%Y8&nA=Buu|YnZ3%h1g z1TkWl%d?J>**LyoTm(O`CR|rmN6NPEOW(lv0_XNPx1Y@hUJ0D~e^F*BbP#7aaGE$Z zfEd^YXyNlIcVj#i{O?S!L!^^N9j)nPdmWu`c-RD+&m>jA!5>3{AnoYjx4;uCR74R= z+-cAeYCPpy@n4gr-UUtfZQyVn$J6OLPS$ZIy@8%OF6?lffi};`fh{3lI!XS>&rS3%aChl94D`Ll zN5DEhnd+}2`wK3l`)K1PZY}h$WBC5X4cxgFOK)Owp*yyYJpFi$woObgtmD%^UL&s6 z=H8IK3r}e244Q-Z<>&?Y)`-!AHohV{(MO34=jZ^3{S{orAco02h9S&x_XyXhf0GE; z>EjLhbvy9;CX+VI_htzWk;j;k=U5?XKT&i9nkXGZ8LL5jO55=%!6k!$M=Opa_74d- z<4gmS26gcl3=Ynj*mnG;Da#jR7(d#_=B8$xL3*@-$G>tN)`c!1;7(v$SPSupb0-tc bs08v~p{g;c;q&(r-*RVi^&Nh|kLdmvLh%13 diff --git a/out/production/jit-ex/gitobject/Commit.class b/out/production/jit-ex/gitobject/Commit.class index 2d44355406cf0e77a6751094d3dbf82d211c7881..f7240ca00adeb269f363b4194c44bcc586fdb67c 100644 GIT binary patch literal 4188 zcma)9i+>c=75-+ko0$xg5SAcBZ3Ux{ERgV0kswIIBMAvm!lMDKPBud_VY9pJ%&OE{ ztyNpArP8V`RNLB@eMpN|H>qjuyH@*tzu%8PL;IaOv)RpN^ZWTra__l!?)mOH-+9dB zwbx&I8Nep|uMRtKy9{^8aHkAsWO%2EF5G3{T_zWI%kXX;_n0tomx+7v9+B>=!y>%b z!2Pm#K*xh7*YA_z{W=~p(S#3}co>g}^g$hGO)SHQ1nN;4&YAcyJ|fa%B0VnB6C!<7 zq>qVoUZe{meO#m`O+1B9i1bMVpAs{kmc^$Hd`9Na8u*;dpEvM~%wI6@MVY^3;L9>U zE5k(@z9Pd{1>ll_=L|eA;@3>PfENwqWKj@XCuNw@@pT<9X)wGo`&K{aI2z*p^!IbA&JLjZ*4YhXOAIs!4)Fm?$6Rz(&l=TV6^XyRq=$_*rQcz1; z=VG-T(GcyXqiPhIHZg-xg03kS2tSHX=-hoYa(6Xk-!BxJOfI(9F)r$(AuqT z+V!_-sA&}sBVuuL0PSWvcDpI3H=WJS(>d4EH?yMxMzd*5 zV~wNW z*x_O@lg}lcV6h9^BVd0nfm4#l}`L##~MEZ?LZxiXaA{`XzcOngL5426Y1$l{OUa7+TU+`Z}U z?qcFLVSww)f>YRs{ao?9x{b9jou?XBq!Mc>v6jt)B^C=7dsj8Ano6uIh;`*WSmL!{ zvHMlSidJG>MXcrXUQHOOF7W~)mq=;^LVYc_ zft3ozQgSS$U6T%7MOmvcRb_ViD$3DH<+iHId^=Q8j#Vlrsw(p} zJx6&GwI%KY!q&{A+(%lO>Dq0Gl3L(mg35`wUVxEUT|nJ5%%Mpvn1WS6{qtzx7+=Vt zfX0DoEE)=*ubFvDC3!fB_`bCTEIyB0rqMLCb`ndrM4O{ixNJ+TIav`MiMt-3|o*#C+@{o{)2H7o?wYTjqP}rjY0}}8%a39qCJ6Ih?Qh3 zcn5A}+LD-=;=YL6RI;wdeXuDBfy4Ys(v}gPTmtP40!DQ>I!>zJQErd%FUnB4{5yv6 zkoTih68Hj#RIf;o+LnaycrCZv3P_Mn6{xuIPc|hW zah?*nUF42HUMKSUK;9to#z5Z0iD3(4aUCO1#p`L*4JDEfvfF`lM@f}QI^yhh%ShG= zQryZMUdsa9z|Ww~{P5Y%Z=NCg=`cM{lg_(I=!4vOh=iUafsd2A^Q25j-xM$~L+}Nh zLW(Sr75OM7QzA*XsZo;jim0Nx8Id=5eN0h3QDpn1bcrI}X{z&kE1;W(L=vGi>9!3iu!A6{=F^`hQbBy0(%JAhhsRcJ9$7q5l)~TYP3+MKc$y;pa1{> literal 4921 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 diff --git a/out/production/jit-ex/gitobject/GitObject.class b/out/production/jit-ex/gitobject/GitObject.class index 62c3e34ee32f74c001b721d861e73852d47621b9..87e3c38e4b30157968e81e770ec3f06b4e982fe7 100644 GIT binary patch literal 1883 zcmZ{lZC4vr5Xb*_vzsN$Qfhf9wN;^3O(1Qk*4h?CO)c~xEmbI$@@fey-5Rnvo0}>h z!Ed7;4IX=rAHWag@jrJ1*zNLWW_Fl+=Qj^G{PXW$e*?INtrE`QGZ8mL+!S$3#Da%0 zEPD7HOCG+!moC0?QTO19)5Gl&zQ!G~mOYfPBI2%ydoJ#~c%WeG{Z6QGrtuGBpipS{_9%Y{_Z6I%L953=yA$Z=3hr*G*UicCawYGqeLLP^_-G?)hmU%D z+hMXEY`09NxEZuIf+Ujffz#H{qpre4V>iTJJL(6y)2iHG~>Na5_Y>!lSoSs zb^;wJSX*^Qd><41?UX8tYs*n9TL#ifbUI;sN8xhb2E4HpgA&<&|No6qD0Rb5 zkOVqTm`BHlSk8~>XdTJNkvq*++zss+KCv;rKnIr0gO(*DF`82`nu9T#v!NaVw*luV zFYv2It*D*Z-=TgnVee2DjdL9D()QB;yoYIiDa_y^r5s*jGK;!6JNF0Fue2=4Y0r44 z2zAcfFquXTZjjprRT96S3u0wKF64q-$_KHsAkzeyIRQj^B_JQMn|$6LoKC&>*gV;C!J0^5gD{<@8EpG7=5fV5 hv#Wd;^NhCeG0)np=@VP=U#C39BMC2Rly literal 2472 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 P_z^!f#Bi7d9!2xt5i4bn diff --git a/out/production/jit-ex/repo/Repository.class b/out/production/jit-ex/repo/Repository.class index 7f4c9dc3b41150a2864d9ab7d32b9ec7e2e88a86..b746b4488dd1bfe1dc09204b08cf0b6fbb16461d 100644 GIT binary patch literal 2544 zcmah~TXz#x6#h<|Hj{MPLZGcE>XeIZDKv~aaUHIk70{Wo9|b7CCQueh|i0MrChj_BB{ zkb2hE@np>^=cKFS4(4^-RXUNOS3HS5@Us~~XiTGnypjd*M&BYDTInEsq}J+_Q-%-A1~ zsghLKq2%&r*^}{D#&jDvnlj5}TB=oZEVM^G->p&2yIUz+c1a1si&nv=!K~@2>q<$- z*Z77h$w@EkT0x%*j9s>Evm$d1g&H$5<6Ao4MVgl@smMfnJ=?im3B^G-$wJZZcM@sVK>J-Sv6gg zbHL*GPW>SuUNAPQE|pSFy$79~suLN{Dc5{?AsEHYE9Jjbvwf?=nTb3tqGb`SzdhtpGY*g@`04{)q}|ZbL%I!bP@>nb^Xu~_xkGiyzdROE zyhZLXe-Y}aAK!}5tmN9nlikYf;A2FWprscP8(cvA5!y%-I>`dsAEQY*(bV8XFTr*& zj-A-Wf8|7X9V~Q$usF(CMT7AehA~2kig`O%^%r5hKXDZSc55K*Lk!0@(u}Uv9Hjo+ zI8LfC4~Kc|SVBjdxQpmqz@{I0Qun-$exM;`9ig{EJ$lbW*}N9z;D#uCHJ^u)Sc`IK zLzI)xIz!w?3u6MFu0%A>@@)DZ8ka3IVZ{<#Stkm*>gAevg6_Qw=$Ux{ZGxK@n2X3S z*p_ZiyqJ1|msZ&AtJ#-Vv#*3~YyIx4sdOY^q|z;k-teHMen44dL)nf{FR?SR>j`$# zZsN5>U%2Z}3~=|5`D$a!9$`P#oBTYsFycu{FS6lNZ1ZVO%?x#}QtJx4D$SZ-#{_PY z-bM)-e#`Rs4n;h`ES6Bl@9^;_=I|HhgADH>`VhPI6g#qs2oapdXwa`u!wzVp{u!L5 bH)?#^(fl`hq8KxyI2UPXVS#spc6#qW7$G$` literal 2896 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 literal 5104 zcma)Ad3+S*8Ga^v%w{v;SO~HdG%9k0V1Q!OT|^CMFb5JK4O(@wJ4uFYcGulmAc}aQ z742cIt>95xTAO++#SI!2d)aDh@4NO=d*3%&Yx=x1vzras_SZjV_M7i`&*y#KFM08; zr=A6Hj#3>&1w1Oe8hr38n6h2pp*JM-WN$-z_jV&@De$i_lcu#&foH+OtttWvrrDcv zmYHZcKa4xTH+}NeSXF9(%EoBZzgP4ktifJ0A zqeelM$j&xwkvGNk8rBBWT5V<&Okc3j5n!9xVP(u@Z&cKtpkXG$3cP9E>QfLZx9e?~ ztzwRb6LHcwPdf&)mN7sFQ#tzUT4<&kHd4Ap9fm$Y3s1%=Do)if7pE0MFn*5$H7zF+ zNeWpo(Ey3wdQ(Bno% z#Rdi8!di()XE}&ww20tV1vAG4m+YhbAl9K>Hf-;j&UU<>O=t_CMQ^O^=l=;=;@#7Hc)OvK` zHnCdQ&@EixizQN7L!zjwU}l}NX9Szu*X)WJX-R$%arA2Fll_xz^mkZ#tbcPxkI|X! z3TD~$U)w`$)W%arHaXv_b%1udoL!=Vg%>J>S|HS!F)bq#L;`EX>a>Q-!O9QFtP}^c zHVzHV?tHWg7IG?fXxJ%uc7)o1DQsbd_UYL+W0xg+2Q^%QD@hqiP8?4yZbVdEMaRno zRK?W=_>@qQ1EV1Jz$35gG+d9pEG<2qHj)f_eYtc^$d)68l(PpnYIv885G&=7olNf2 za5HY9*o2Yn6}Dr=HVbCnqv5@HpD;5|6f%f;BoH5?Ly{50qSV^F3JYj{Fjt&XJz(itP0wc#hg z8`f|{qU_C@SFj3HJf&d-PtypVo?yF+7cuTx4M(NU{Kn-uJ&_e!`?QA7;Ip*XOuGGW z0wFPhDn75_c~Rld7z3#t)cQrdpyEXhUlI~4A>Y+T!f?p9Ixa)$5SEdoU6mbXZ&J5% z8CGna1Fi9-xuOi3S4QdQs#Kh3CJPU>JZ`p>vbmv~T4okEjPD5&p#&QetA2bu2GdSVRJ>N;NShHh_hnK$ zod{O(V!^iLre2{Lnp2*RilWj9OhTm|2AHPx>?A`KO&jA$ahiNy2&`9#mXK#X4^WM_ zn`O!d(lWkqc}U&q)G3KojRafI*&7@%M4A6w}D)n|zwxQ&QBddIy0dS-C@* zak=fq5{AxT20K!@Ow7F*1Z^Wv7p|vCO{tW{An55%qkK$D@ z*KP}TP|W0xRKL+c+j!w~ZbNJJ7`wrsg8ikW>TYy|uGf?Cgpr-wl1laG(orXTB|$Eo z8Fz3qlUlmy=#7?EPN8L%2z5oQ(i4deCLkJ6=##1_HYl0%=48^ytRkajjjXCvDmZO| zgXQd2l_~`%{_m}%497`cQ>%ET2cHVLg+sxY?XQ;*k{dF|0nYKV&-JhH>wb9o4Q#9% zhEg{IwQCraPas%#1XG^Cj6;}JcNjDBs2#z)E*T!ef~T+u7)C=LOYg)~nGBr~YCM9o zhEP>km&Zz;f1ENs_$uG0P$Mvnda7y96wKfyzZNyTSkB~aV>a4(A^#e8XpSBDI=;cL zZ}O=|#VEHZDt#h5ev4CLY@E-xalY$71HZ%pAMFS}#zBRx)o)LpTq4=$N_OJ$9j^1L zNgEl3iW?Y_N}he8yq5=Xf0>1r5j1rz8pi6@5v=PPL33CAFfJHITbmokh<9-w7e;(x z-}9Ig_Jua*u{Gikd&B-bF79;JhDKlG;IjHWVnaAj_U6$ughqEXwl=r8HY=izO$Q@^ zaDYd`>d~vwVe9LZU-+u|p|)^Gqi2juGKush-%!5-HAHH4U#0QEoHsCpU$HGvxSAc59p%3sqG;dbU zwPt2x1M_eJHlYOQ->(`G!3tu_KyG7>qG!Y?SHlBd?; zm-rQ9vWaJYO;mU(^_pUicj7nrEknzAl~BqV@V$kVcH$DOkWm7=vXC8_P_bLZ9=;WF z$}!X)!|d0Oqn_UpHV${bLg1)Wuu**mog{$+66m|yj^OTycTpbqhP`LA|(IDLf{>iZ|NEj@SK!NRNSP$1wUIoE9W>k%OAu^GMbae zlZ2RW8NGYv0DN;E+Up^9UaokE$DIZ-i)w%rTSFRi$R$gWA+My#3pv}FI;skhh5mtm z@&uI@-HN(yO(8cOqq!As+wlBb{+-mR)V{&UDR`Y3bL{Tt77&O45=a8xhrVbm1LdWY*>42OKP3NMg29dem|Mx4O-{uXX|+r)1@o@ixM2gTPRVm z7%o?$i;mz6V>zE>E4hwJuV;tcYb&1N9Cj5?r&mrsJ$REsEAVf;#b4>{qfitdsYU*E MqbLC-sAvfP2M+=2@Bjb+ diff --git a/out/production/jit-ex/tmp/ObjectNode$VirtualNode.class b/out/production/jit-ex/tmp/ObjectNode$VirtualNode.class index 3feb8fd206e59dd5057062025a072324b5b5b543..072be18b52e22b8e1afd7b14e95b5de3cc826d08 100644 GIT binary patch literal 971 zcmaiyUvCmY6vfZL%JOHGb}Lj{)K;s)qQyj?q-kPEOf;lEP%-swfDN6xUCjPz^jm3S zC9#Pgzz=0S1B60EeAwBYyZ8Lgojdo}?;k$_Ji~4l8El)ln?(ZK8KiJeFFPh4Wchxm z!(|f{f#jL=1nlOCJd-s~`u$of3Y6ck3uL;-%IkS5j06hfgg8=O?L`pC&rODPPD}ND z8O4DskZY?Tiluij=y7Mg@_jdGcrpy#P~hnzz+N*t{aAa`IdQv@R_)9X>ifi}_LQ%p zefpRGuCUS;Fd8GXd{g=EL44YAgG1TzXm2+MUFo%Dp!9wcG@@h0T1v}o1q4&lp&K>y z@dchNvi=X@lfd)xvYg7YpDf{nK(;lAgRc8h>Eq-to3yL1%7P6?U~P15^S5Hb!c_}d z6AyWrYgCoN=FKtK_Z_I5~<-n!@}?H#9+RNq9AUBJV^q|$GFl8*rXEX zs2kNs#U=~YKVVp=Sq>Y>(?}Jjotrd!Lu=(*b%tQhCA6aJ#;=&L=K9t z{v1WCVD$>uns6=bOt`yaZi8Y}l%crpRNy*Fl<_a2#sp~K9!aJqMlBOz!^uV$4`|fs K#DI%E6n_Hm4bk}k diff --git a/out/production/jit-ex/tmp/ObjectNode.class b/out/production/jit-ex/tmp/ObjectNode.class index 3c2046f73f01b64ee7a7ad60a97abb85057eb17a..b6476a793abf7ec405941edb37e4dc952056433b 100644 GIT binary patch delta 438 zcmaKoy-EW?6ot>sB$;HhiBS{(67%B^=&Gc#un=tpLA!vRyBai0Oe_|`Mmzhk_#i13 z!NLa+AH&jDP&~8Q%EDsrIdeJpewY2!AKH2Ud3^)0i**YbEa#9$-IRtYO^ueuipHuy zKD?H-(OKOR&|ZJ&9e3|X&%Vy=_XfS-VEla~_H0aJ&4z`%4cn9giUP&p=C*z6`Q3}) zWO&&XDEaQ4+wQxAtE3%vWaC_IYx~xuH49|8s*xl{twTa#V{X&3}_c_7`tyG5r7l delta 490 zcmaKnyG{Z@7=_Qw0?TFPqJSvM#ana*v9nPtV`Ib)JI$_c6vD;8YGR|$KzI@gVq)O~ z7@xt!#OE-c*`>0u*g0qZIsgCt`=Nj9=kGtSZvYOk5ru@NBVZtikU+9!Jy^B2)xD{m z*)8YF6$tG&yG{2{K-=7EL=Z+qN7O(JhCtly+)ab^-nBD4Diu^BZXltab-UfOPn<_p zOBtBO+_2jke;tdIK&hI?!3#=-_$ngUK^!$g fcA=Ik`2+r0N<)!3$z+)tAbJIBbWzWRv5xRB04_TQ diff --git a/out/production/jit-ex/tmp/VirtualNode.class b/out/production/jit-ex/tmp/VirtualNode.class index 8d809a2c3b00384ebc8b997248e7964cd1295cd1..4c365ff86bd2ea7895f52ee5c384f7f81e33e217 100644 GIT binary patch literal 841 zcmZuvO>fgc6r8n9(l{P@WWITE+D@X)3>lgiTFL^%JSH zG!m#Rt2qeu`9;00Qk}{8XwZuqhot2WRHF1Db*H3x=W1KPX|hycEmTQ#l%02?^n>ig zMEr2jm2q39%6v~jN1v#n!1{uhfFQmyjC9lNMPPrK-!j@4fxXJYkLm(Khcf}UHOSI# z^j4V`OLMz@W#;OkgqH#v;~C!`p$8AE9$XZ;+5aYGXzLy-s8aLheBO6Xqb`rcu9!jD zvd3-R8sns(QT>cvo^^p2!s1H{Mi@T`++}8A4K`Q05b>FPJ>*G9EV^~F_TU#o)#aV362^MF9MLc55rqRda HCZ7BQ7Ja5e literal 841 zcmZva-EPxB5QWbsp>7@EOC=PE3uKjxKu~+PNvw2R*Fny@g0}*R z5{XJY01t&Y>qIFuvE=c3cIKNiv-|tc&tCvu!M9OB(L%|=EvyLCPUVGc#WEST-t|tS zz7|;7SBcUG0>y^cwXiC%kq2d3#jV$AD!+tktZi5*mQjIYVa>s9R0XQ~{8Ou|Qk}{8 za5RVn%KZ}+4`Rj()Wap1z#!HgxY%I93mFTz)3{tyN2e+o1~!B0M)4Lgjm3ShYvgP@ zxQlzl$id)7+_bmAJEo+L8YWU_Ddo*j|97?@-e@B@2n0&)yrF8SlISoy??vf**^9|= z!%<(xU70HLKXaD!i5d&6FQ5bj{j1|hx6Nb(_LjA?EbX(vZewA?Tkx>LnSk9HWobWp zqm0DbKWFmN90HzlpaotC^K$gGFh>Z1`&T6O=Du z`^`(#zU3*8XkCpqyLo|1sJ}$ykKUH=K&R8@#Cu+>SbSs2UQ%=umoRI@pTPH@sNf99+s0ws<07{s(4Jp zGEuq&kE?h>!%BQZ#Wyvq61TpkVYM8t!ngg1$x7e8BP)Gdg$G64J$^*CPilAyPs^2K z)p!QS<#R%K-}Pfq44%1T1B;}jE|c3kO(WNizK5) ze3xNcvd=Sp&X|>^_DIID;^|PYNgI|Cw+@?K)DgR~4abwC3YwZD`;B{zP~1rD3k^E9 zmDtzS64_@t$@`6dEG2?+x9JoqGn1$;#v6tb3&Y) zr=RLZUE>Sq8>$sU+Y+gaLuX85TtQ$~z1S=|qKTS8$A}*2H&Sl!tTtAKTTxG_m{g$6 zy2FeV$3A46biC>R#4b`2BQN{nR@#{jRZ<(;WZT9>glvlBQ{X0X)+YHr#y~^Gapsja zlwvoLD&W`Rgh=vI)02ZDt@BlCA_TTr*fpbh~|qx!IHTEhci|@X4*Pl zkt?s_td7^PL&xi~?Zp`#KSNeQW3ifnq|=woBx1AKBVZSwK6*ZvJwN^Ug_oYWaPmbR zQ)1mSm$zP24x)OR!OrzY#W@{sASdTP*YT#<4`Z`}rB@_36*_T?Z71pYTaupof`3J2 ztz%|R=Dbq!WJ^KQ@iuG(C?BXT-^gRG9<;(Z;z!|!$c z0e{r-ClG``%l39ebo@nlcjKOdN2OJ!V9~rzSMgUJf0G;+Wn;VB&?QQS#_Z&M`B~xy z>jtpRF>S+1+6vUP=?t+nS>RV|70#wgN^mAAsP>%LDMLpp%XB<@={pQ(Ou^#jd|emM z8P9+xpz?-CRT`<3ncygFyPC~;jgT)kHd|HNOc{C4{Z7&wW^~a!#3rRvoTf5d>GAC{ zm=@*L7lxUP+FCD)k%%>#k3@@^(d2l_Hq+D)xN@ba@VZ*|gcVdY?+J?vKlSf2;u$8b zA{tMoxz?sQRyof&s)lSMN=~&TmZL$&2MaN;R*V;o6;~V6lGnD-^G#ZMhiS0CI9oX( zW8sN#X766pE-+iJowhj!=&Uu1bwdFmSEx_}OshI(qzBAH^wXDcmr^V}m?>8y&Um}N zaZ0bbwjZTMP-z~_7*aJQMV8kqkojebdZ{Wh;(}Oi#8@e{S2}rfoWH6H8u&wJ*=B6E zv6+1*ljg7bM!rh`W#Lj80;GIUWE%3@$6bi4!nI=U6qHvSu8k< zT7K8^KZ}J^STxX;Saki(MUwka&_59SaUZk@)*rf_{0A3ux6 z6R2%{57jv=quS*&ty!#?M7QX<;aaE5I(=6^3ixJ%uP~BEB>1jc>8__4)lobKSx;lq zUCZ6f+|BnD_|WoWITm0A7W2mSxPiA;qX%m!b0h9V3wB{G?m>_`LwEq~ID+-m*oueH zM!g|COWrB+PLn=I`c2Yr<0d!b9n5ME)}bE*DCZ3yw&M;`%rtfH;OggqAH)!mX{3go zv{r`Qh>MO#xn;E{13ERN8 z?nWZrL#Z%pels!YWxo5Ex2+gwPaI@F9A-xxBUUdErzs-!E>Zdi@%bkuKfo}x@5V*k zg@0kh#dj<7e2moRiDe~qopg~dqs}8PmgUqq1_Pt?=_3EPBT9^j%q;rn5rawJ_mV69 z>B;Y-tW?3x@L$4C6=N)c%Lux)V5!*uU)-YN!152Fenfp`q$vZ0Rm6QoMd4>)h567y lT3cJKiD~*}+7fH68tpf>z;?V5KmiI>_%sxuSi$P!`UyQ8*AvIW`$mr&QAa^>o0%}3b_Ins zwSy}B3a&Y3I+i;c?uc8X0jMbSW0eA5_On#OH7HY{CJkp`YSK`!wkEO&-S60D;#h0# zpdV|vKvQGmEzQjWQ?B7!nODqteW{56DzHw)dJUEMfPz&i$BZY#2jnSU7>?&-@($e@ zQ*dof?eaAQ^@AEVWW5nn6&n?3t~;g`?lR+sSZ&hqAz4Kwu2_|z3e_5Jz-9#{Nn=vC zb;q(51eY%oB$qWBYEh?P-Gn}FbXtk1?i@6oF}9M9o^a^!-W4cVjF^F1!ezy;(@p3(r?W^ z^7gZ5-#&jafF{%nAGd1wNLGv6jVTo^+*~eRPhv9VP)b9mP}|TZ{%lvUCbP{9wNzQf zZF!O9$sfQ@bg1amunW8ChbQiE#2n2C9EcfFYhuzilH5||B5KaMt+gW^0kmU}tlh1k zsAi<2c2K-p@!H)Z;0m1ik1}u}{Mt_$a;fmfK|{4cpY?<|)Q#d9|M8r%;pJ zWhV8}xDivJkjj1q>led!XVz-BZCiE#`%x$a3~D$iIaCylTS-I35D~L{_3T?K49xnPP#KMy#{Q9v3XcBRL`P`?FxC2iSZ?F%H~dK_&7enRZYjp zWMD-$(OvVNOn>Vt+>85Ed`iQoB^!b+_jx8v?lC>tXPk7z_Olx9$LGjGf*niChgVrz zWs47Jco3%*l*(qj{;mm5*!=$ca0_Ur%K7my*BEsRWjh|x@I`z{a`o<%E@dpQFlJV* z9WEi?U)JyyJjR`iN}il+z3Q-xCI?^D@Wc`)nX~~0{aFo9;v8cwwixSDrxjGMxPkoQ zP6m$PyoRrf(}j90CXnCM@GX2hA5voO|3iuuA)6$kzmttNEZkc&(rC&d9@rxl|kWf3!B@CX?->;Xw+soPdmj}PihcYbF& zea@K4N#zltG#Sn*2d#uU%1~xLdZcIT87l%iGfJ>CC$%}JaNL+;DnypBNQVS0r*yHT z<>BTG5vJ6w3BCHH>!*qvD?zhHPvo4kXyOONs>CeLScBRFH|fp+VOSlmcfM=WbRHQBn{ z>71UtiE>?8!F(jgKAWXET^Wc@Js$68p=$NxcZ>yvKWIIPgkig3Ya~_tQNaz%Hn)<` zD*mjX>VKQEj(8iyCZ=TpuOZ6n^>V7TtKzV_U0{nna83s!6 zET5WZfFI&Hew9eopcN-87YS6vzL(~p4$Yt>5();=&_co0X#_*FSewRmO79%1hC*pv ze+eJ1yMh~m8HD;8(r7q`(m6B@1#g*LhWnUe^_TY< z?or-_E*E!V9otp#VMpSJA0LRk2M))jQbIrQ%QpAD7=nId43d|4lXLXeq)UqJAvV8U6mn zRaK7sV-APO>Rl1ieuRzDG@_y4u{6w3@OT<=(Plzqq@=kj_EH6^NKp=PR$^Y{tEYT@ zu6zwy`7DZbfDte`i)4$h(wD|mOHpOfWqeX0(ZkaEjDlCt-cnpyJd4iRiCVKMJ{PcTIO~Wt#eV0nJZr~044Hw9PM7O7C z8#&!hirV>C#BJ1e2dz4Ix9#NDF6==U6Q&z?p$Adk8RLlHH2Qd&?!(g@NmJ|B(2qai z0I`RNeh_bx-@jwnRkWMTp62`?Q@vuMo_Dn^;LQ77^$LkNhM(Xu`t+u&_sdj;S}f@O zSB}rq_gB~}Iq2E{l(wS#P4K^qJt_`U^s5ND>K{>Y?|*Q!iuR4~Kz)yR1#Hs>a-+WB z%LxNNezs5pnh7qyHNoCAzIP6)ZyLVB7ZF)r4`k&c6lgnG#qe`}6yO*5CEtEx{EGj7 Qi{JArz}6o~&0kRYU)>MFHUIzs diff --git a/out/production/jit-ex/utils/FileCreation.class b/out/production/jit-ex/utils/FileCreation.class index 2fa4cae714514d75dd54133eb9e2e76ca06d3a1a..d0b4a37160a1db4d630eb69b9842f943bc7d8b39 100644 GIT binary patch literal 3076 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 X#?>l|x5Dc-9x|5T^N08tpQ7&{(Sqb% diff --git a/out/production/jit-ex/utils/FileDeletion.class b/out/production/jit-ex/utils/FileDeletion.class index 2bd591303ac96b80f4995194a27732f6dcbdbbe4..4aaf4641b9695979d3a76dad7c5ee2f85ece313b 100644 GIT binary patch literal 1264 zcmZWpNmCPH5Pe^^3Bx2Ifw)FNSp)(E5H~g#7DWd*KtZ9WAq+4$CR8#Jet>^Mk7^ZX zE@(*=Kfr(E(SytD2}_j2bkEoQzV7$BC;9&S+Yx{v%;{)EzYYxpVg|+B7Bi$Hg*zJV z%Hf`v`x+kT&@mjvi1<-4V`9cNJk-&EM;ab$c%l#)bqbC*t`O|(T2cs26xVEpgy|IQ zxyqYWyR>Mnx{RdEV%~C>tdb+=<6y|!bjk`%X2o;da&Fpj?Md6UJ*QY0QP9`q-Il0A zveVqM-dZ`Q=)*>&nR58dC`8u@F`cr<#;^W`k&z@7;{V5E3!asKJ!@_ITr{*Oq>p>J zR$(Kz;FX-hhTkW&ZF!p_!DmpLRfttdP818CT_6En+AWtH&n}6uTF%udg(>n$pQdK! zr*`x9wlA8~Wr>AirIbI>E%Hx>(kJB%G$CzZ0+R-v8Mif0C{BBNl`_7rftff-Da ze{G^lM$)_j1J4EaLJFHmD>R;9YuFi>l~n5dvJ@J8yg!=x)h#>ENkr^ju7vC5m+_KE zrz}$VQk|GWoy)w$h)H&Ko!eY2U$QOFp0jtV7sER;R)z4oTPbrN;k;Wc^PJe`raXV0 zizO>>;|9OyMt<`^2wVcvv=?~F(NiqK-Cv;g`4YfI+K3<2aEb3m6@bgQ!c(10lo7f7 ziRd8xK=%Ox9}wE7557k|U1)g^8Tzmp9Lr>nJ|dCL41PuAT|n*q`5}#hexnW+1Y-Pw z#S!I?D1jv7jcn0`HnQxd?w5gx0 zCWPCM2@kV^;Eh9QD^wgMqchPus{+laXVo*|20Czy@j7jfSHg6*jakJ8mGA3~R! z^=39@93YlGK%7rv4^fjox$k#wWwnN5?cMzI0IO=~;*hgc+e5CsWY9+?14QQ7xu2QA iQ~hb`>*7=tGa+Vr{Hi@Q`lARMD;j!b&wZ>PK<+PkQSHV6 literal 1253 zcmZWp$x;(h6g@8q>Cil85Qi|y6cQkSGo#9&Xafr^F8gYv;Do zi|ad1##4xnxjEOHPzWb_S4_lEZot&2fL72x+|8$F-K;~XbKn-eq7Qu`&?=2;!A0Go zAS6|*QRk;NoUG&dsRoTkTu~^`@@v77p*GR`(kf*iHE|W!3|!Z^fw)55p66zZe&K0h za`QO_GawDr)Fv(y1nOJFX{$ox*{<(($t$?It2KL)cCWZCnL&*qKaWcvgBFY_H2n)LHqA zon5gDuB^|J5pUaNYa6WpTQ{npTt0IOu}!+QcoO9O=LlF(HWjKacb2{KRn6PGeklW! zgznnjwkYvkmA0Ai;GCxNInT+lkSVl5KSkepAEfU=R`juMB!dMi90Pn~{5bt*pm1x;^5>hSk>DHQe#wXg_K zDU*UG)R4Lsot%#(;~i0~c4LPF#%ktm6x@=^>qJd_bZP}2+zG|nqMJt!u|ja4Z( z`4Op9u{E0^6{<{DS>z97k^hi=Qk9VJcK7rQB4sKrrtj@@&OPTl=X~e({QA$2F9Dpz z(+C
Q)mwYV8U05dA$DsDv(!fXTzZmXD!AdG48GB0*_#BL#iMJ%Ye8^ICWtH6EX z;Ijzcg)VHCR3ua^M^GmY*1@R2ida`wtf??1gf5zC)4nVr*w#KPK_1C08xoGh%(O9? zPc0c%Twh93QWeW2^yI8=nd03O%J!O>6S}-@CUZTbX41H6=*x!HPoc%#@aAxSWyP>u zsf6~n*t))<_ayc7YR`;qnd#O3c2^`^^bA>+z8N!fHXX=GVi3;vosb|=QR^zqOwZWV z)kg^n6830{sh&F6UwO|+7u{k7s~7es#gs};uN#{l6}%v%$fTYk@=9Se zl1ZgZJ8l^i94!f^b<0TGDu(t*hw}DXhCwCLRvII9bx+{Lb6wd64Z;b>t+OxFP2^Tt z%$ZEyN*IEwqjSk~Ttl>@Da40!eB9Dd?(!ww!q0TpSSYG6hglJJw zcJQV%8RBGCJU(aj9IL&w(qJK{!A4%g22QA0FWT)Tx`u}WYH%^vso@beHMHOZ4Uh2! zYv%YZ>z9Q3S4G2lGs!{K@FkwGoJ|_O0_WxEtCPIPo7=;3K&84ArB2xRnw5FzUL41Z zr4Y5A%-Exue0teuw1kRP!xnXBaJj90VVDElwlFO2q6UwPBJon3exa%^sob(U(h9*K zadSziY4c{VtO^{qpuW7!c`hfpn^S-L9R^M$GdV$vEH5VB6`aesr6(v+a@nNG@n|hS zS-ihqI|D(cB_fTLSnV>nozo5=WyRldCg)16?VoAi)LQ&jr?{15lDi!e4gZ6 z4_Aq+(y$SfaZ1E$k^N67&vGZ; zWhe0s)&@Atq$^o3;iU>4sAipN(8q7(0Hq_exkl@8Rx!px++dmFXuvF@^xcU2)F-H4 zp?;0}6!lrw-=a?Ve@xvI>Yh^fjJmH`+Ga*wWN|wf;}lwnCdT5np`E)~f4AoEo_f0w z&pqdZNlzc?V7{a?euBbSx;+%>;6(4gC z{Dqov6`zdpcf(!J?=nKD+>q5i4~g2)pA2<@?qmk<$3^Y}xWsfWvtTaKMkonTeyF4B zodQ48opSFB$E=A@@ec;Xt`fbdM4fBuR05RB7{m}Ag)w}vLuH@Cb3EGj28SaDI}Gh} zI6#MkZ*X{p4g+F5kl`BSTHo;ls$-qO0&0Fnt&{#lmz#c&Q~;?a%*NT$>!e!D3DD#o z^;)ZthN6wU%e-O){D!)^Ug}C62;-^`;~Nh~vkQacRR-gw{2jssvjtfa{cxwi1vEuK z(+nv14FVM)n|(lyKA=jcJLQ0cP5=@NJA%O9IO))8bWl*M9OX41!)ylnG3OF|TOqRBGf9Ew&Or*~78RzpB6PZOl zZj(ZDPC{oXJ;o9HltUnk$bM=AerjjD)ap4-;~cWm7%4HA|g8%>k literal 3658 zcmbtW-E$LF6#s3y$u=Rhn6{Ka`O+%=q*?)i^4V&kC2fI*Vl5wTlWn^+$;Qp5SQOD2 zW*lC8_Stc!ulUkBFoQnnjQ@%=zRQf(-@SK}Y-!O^Gn3uB=bU@a`Tfp0clVb+pF9I_ z8ehZ^LY)CUjxZt`cHA+S%)XpinD3jIy<=rO4UtoJ!S>E*sO#vQGElFfO&Zxw-{7)m zop)Vxd8AM*dy}4PnfVxE*k&Le$96Pqa7evfnAcE0Z+T*8NrT?eIWri8fgK|LD;mNb zGlL>ZlZKtuDCN01%eAssEi-Gm23j;EE4n~nrH-K)t-{$Z4ZAv0Ti6YBPQ{SGZeg@X zLsQL2d7$3FUMl3?vS;V|B*v6o@?vO1o!EUKj)QoWSO__rvI~}m=8jGkPO_)K4u}oy zalDQ<$e)?bYH0D}1vnn){6P5Zh@(@~Ae_lLB`bz*bQtKVBtp6aU=17&Dkk3hIAaw( z+bP7*i#OwVOE_vQl5m#A%q*r|Gh@}`ZDw(!)GcasG>&6tvd%E_3yDbuyZvoF-W1)K2_sTT5P8k%C2QFq0Y8XS@&5Y-`ME!M;O5ad9y=WG)Ijhv3a-79-abR=%1SA_arrC*Gms6#;dPi#eY|VDhr8CGeaA%z7kCwFalOcETp3^lqkM{rQx~{U`OL{u7#dllm%NyRIZF>%VbvsCyM% zD>x@CR?)YDWB#h9Yp?2dpA6T;v6GQxgj-^X=3^pKTbT%>^7_lzm8HKdzA7 zGT037df=}j%=Qr`Xe|nLAD5X8zlRv}DkfRXc38~q8VfchEjT(-a-EX*DH%a@ zok7C}Vg|YmBn-514LnElsDa)Q{;#O}^g1I%f`(*!8XC2c-x+F#?sNvffm>XKNJA7K z!lXnr+7Kn80k?G}`d4uz)vfnGmS&>e#5W)KdBLv>$;3`&DwzPKI%dfzPZeZe?l8Q` z;Zbfq_74uNmphDXa(I>w&;5hLIXVnU$PVvy#MRpMJ&vck>sE2*N5mxju^t7#PBvYG zG#h0}FR|59GQa_~)h}(BZ79mf9 zCbI%v6ZKG2pc0y3LYEovN+6+w)r8ur2{p*-1QQZEk&x)HMuh&re%V$F=R|7-v$U&O z{!F}KnjcYFhBsuX_m78<=`DKCvv1Jc+tZ@=Kfxd{{!rIe)_>*LR}$YTeWZE4#>A)4 z$~5|!hB(KLP`aCAdIyVyDW28XggM+5ZV&oUS~;dUR-!gG%Blh?iO@Qosj=a}ED#t^ z%;yXkgqMFAJRVqqBK%8uGX!#j@NP2NEyBC~pWqe#KRl-j?|t@|7~uw0Jww40bx|Fz z27H!@XJoQ!z#FO+i24<%98zJ9x@w^sopth<4&fsnq(D8}tHl2@KH-yiseOvi@Hvuy E0e~X`^Z)<= diff --git a/out/production/jit-ex/utils/FileStatus.class b/out/production/jit-ex/utils/FileStatus.class index 68af247e235cda4a7a3aedb175c8915025ac95d6..6e4dfcea68446f1714a97271733dc0c1822546db 100644 GIT binary patch literal 1862 zcmbVNO;a3I6g`jWnVxBy1c3pG5+OvL;cFC4M84GUkw6BbnS==OtC?xw!O%T+_gLuK zvdUE|OI^CjCY!hzEU8l0F8o1OMLn;3U`UviP}P0kefQma?m74M{Q1wXzX5m~dj@(j zqhnUbdj?{dG4MVQyd=d+4y=ZWKT|I8-SW05qKpU>>xT#!u1MOH*4~DJc zmU?`s<0AvNQP6Qm$6bNMv~*-JD-g?M*95dVw`2>P&r8Q%t?qBy-W_YROixGNEn4L@ z%adwdcWS|o^wnN9kYzu&D9d&su!5>TCD6L*Sx#|h;XwL z+f&&M0V9fXto^XYnHU0$A_UGw8KfK5VFhF1plDYD={m&Fy2aviJ4|nv1ZJ9)I}0H4 zDC{}*yJwg3#2Ug9Qa~(`j*1oR2qabV2xCe*CHp`H3UoJ5K+MGu2y?JSO&u0U1#(}p zvtLmMpCR+>$}yqCO*2m4KZ|{q1hg?-ac{+{gmQ%QLJ3m^x$RH{k410)e;%3_4K*vc zRj+6(wK*y36^TBk)H87bFA12Tl69>FdY%{dT2+=ywx{EsiI1^vVgvV0e1gm5%d@vA zXne=EO1_Ct)$Rp+X5w>vA<%a^@v0jvx>cuiG6=-eFa3VU4f?Hq#rpu~COi?UJZ}ZI z2@9JlV^K%RgpDl|+n~suO<2~kWoJ_t<7D#$cZ@RiiVtn86CW@q|VT`uI$QP6HQdn^6E>K|fb1 zrnFk!+Z$6LW}G4aOl_^TRcmkC`AUs=lc} zCnk^%3wKA!F^J3bPauw0@fyLr&XvY@8^L6dWk&=fZqlc7=V5I26dYA70>fJMvXfe` z#=<}1;t|@8ajWf)bH_2~e?LO|x(a*Y5FIsiPR3(b6Y0cA4P8GWH7#HX7 q-m#V{{tBb7($fX)DHer}cb=kC$AlRBo3Raw-(^e-a|ld@*7SeoM6>Sz literal 2364 zcmb_dT~`}L7=8wpED77Mw9tamLJNgJCAHeBgwom+EErmCS`g~jkSt`Hu$yKlNWJz) zsF&XK#v8q$p7tE|+6#Y>=Tv=WH!UEm$K#O`W@p}cKcDBFnO}Z?@*{xD*h--d?KUh2 z9Y_cqzArarwkEyx?5)-NZb=Iyrj)1jv_Si4X3<8cfDD^jz(Iko zrdG8ed)JHt$#qxHD}7xx1dfen3OnA5x}m)FToN`8J2-+gl>@gf8&dmJPVZMuGvQ+n zy3r$Wd_z{oV)9Qh{}TqgUV-kI(3wS}@sfj=(N8E< zU?2;jTuDRVl&NPxU_Qq5-(($=k&V*={ks{u>FZg)>6K@;N^V^%-%FG8ArpC6;A~9f z7_TV|;)IP+frFuI!*cez)TH0Wn1gYgV_(!{pcnkIT2pR0EOI`D5lk3-vI5rVyn$l` zuR6G3dZknQQ5&T2IxgC{%(^ACbVbo9UHGe`98c0}Lwcpk%vM z`MwTxL)I5uUGdAop#;`bs6g4cZ_Z{_U?@BX;bpA6O~2}9BjTfrZ&sFgRX!B>a(DVI z#mMOm>6L44FjVmUYO|jEJ63l`hz#!#<{0(e*giiAyPURS=Vh%{RNBpTVuP(HM8jPR zM8%cmK!{HGJhH+}9uNgFpn?I<*8_6EP(R2^WX|*4MxIwm;088$w1@Y>5LcazO@WjD ztjcbSpx|vb!%NWoweuS0)5q~0uCn|JemlkUH2_YDSb8{ZFX;Ei_#FFDFy3=5(~7IXlS)m6!Fqwa!7`TNmgd2OMLLj z-=QvF`rwPc083o`0sSdH`{Y^{zcT|($_i`NI&;p>-uwIZ-rt!#fAQxt0JGTEk;YsS zH+9S-uj2#UQo9AUTU5KHByMZCqoV_JYPqZ9LoBOZLBmHny794&K@`=pqT!y7`}jmh zA3oLaK*Op);->A`US1%Y8DA5KE!9d=pr>d%@}9r5DH{*X%_=Q@#hPVS*UW~k&d0`> zSFv3Iqv(5f)y=IgFHFzzsNPEzX+3uR9f5P1;^yCF`DDb6gFdF{UiNWz($)q%#|f;~_%TbjmsMwVg84 zif#7Ct(emS9TmE+nN>gNOi*5{uLidAQnT*6c2&-`%^BO`PXgU9TM)Pkj2#EJW^J1w z{v>3fuh#sAB~>`-sR>+Fv@HxKFux{W>Y#8_oUmN%a!v?;^BLN5u zoi1k4x2q-DFkoU+gJqxusg|u1U(Qvbw#-(6mJPg)Hw;YSs=&yJ02X&WxzK2syDi>q zmVpW$sVJL+X=+Iz)ns#jb6Z-T!1=(`e)a0yP_L?*0-?Amyton(#h38wB~xiuqoGhxS1fK-Yc4H`QlM9cWP-bpFza>cFm~!} zGA(jAo(qZeHft_8o-C^?lk{pQm8LVqZKvmfOj~pBY2A`@lHF3X<82KpTZ>)f7bVS) z6cAUc!7$fzJmvVNkPy%AL;S%_1g~*T1jY`W=iUe%FoIE@I+RZ6rGkG$j1O?FH-^8G z#lFY^qASt-Xyj)MWheF!%a8ta^v~o(baW5#r$>Kh_mG&}gZ4XPq5;kr^MT*D1p0|H zzz^UccWGuHBHA#nkii6z6_0F)g$uaIQ-bG9xJ+&a-sJNZId#)A#+WEF^yot51-dni zYsiXWrU4TOOcIhR=T4RI3!S5U-|9;iqw^!#XTRdcAv)Igp|gO_?8uDveX8e&RO$dm zcy2lEp{w{~L_9ruKG7^G%?^WfqNLJEGVk)8$9Pb}1zO{Hk6ph)x*qp4KGIB|ep1s_gM4;*HgWHx|IhXHsS zH-gmh08*T4$2;^=0L5c~fkX7Ib6oxV7&r?fj~@Q7smX*G10;K$ryiE5%4)?BELt&q F|9>9Ag$Muu literal 2167 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 literal 3826 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 Mx1!)FtzCHb50KGkp#T5? diff --git a/src/Client.java b/src/Client.java index 096c919..d558190 100644 --- a/src/Client.java +++ b/src/Client.java @@ -1,5 +1,4 @@ import core.*; -import repo.Repository; import utils.Utils; import java.io.File; @@ -9,6 +8,29 @@ import java.util.Scanner; public class Client { + public static void jitLoad(String[] args) throws IOException { + String path = ""; + if (args.length <= 2) { //get default working path + /** + * 项目所在的绝对目录 + */ + path = new File(".").getCanonicalPath(); + JitLoad.load(path); + } else if (args[2].equals("-help")) { //see help + System.out.println("usage: jit load [] [-help]\r\n" + + "\r\n" + + "jit load []: Load jit data from path, you should run this method first."); + } else { + path = args[2]; + //Utils.setWorkDir(path); + if (!new File(path).isDirectory()) { //if the working path input is illegal + System.out.println(path + "is not a legal directory."); + } else { + JitLoad.load(path); + } + } + } + /** * Command 'jit init' * @param args @@ -17,42 +39,49 @@ public class Client { public static void jitInit(String[] args) throws IOException { String path = ""; if(args.length <= 2) { //get default working path - /** - * 项目所在的绝对目录 - */ - path = new File(".").getCanonicalPath(); - Utils.setWorkDir(path); - JitInit.init(path); + if(Utils.getWorkDir()!=null){ + path = Utils.getWorkDir(); + JitInit.init(path); + }else { + /** + * 项目所在的绝对目录 + */ + path = new File(".").getCanonicalPath(); + JitLoad.load(path); + JitInit.init(path); + } }else if(args[2].equals("-help")){ //see help System.out.println("usage: jit init [] [-help]\r\n" + "\r\n" + "jit init []: Create an empty jit repository or reinitialize an existing one in the path or your default working directory."); }else { path = args[2]; - Utils.setWorkDir(path); + //Utils.setWorkDir(path); if(!new File(path).isDirectory()) { //if the working path input is illegal System.out.println(path + "is not a legal directory. Please init your reposiroty again. See 'jit init -help'."); }else { + JitLoad.load(path); JitInit.init(path); } } } public static void jitAdd(String[] args) throws IOException { - System.out.println("请输入.jit所在目录,输入default表示在默认目录"); + /*System.out.println("请输入.jit所在目录,输入default表示在默认目录"); Scanner scanner = new Scanner(System.in); String str = scanner.nextLine(); if(str.equals("default")){ Utils.setWorkDir(new File(".").getCanonicalPath()); - }else Utils.setWorkDir(str); + }else Utils.setWorkDir(str);*/ + + //new Repository(new File(".").getCanonicalPath()); - new Repository(new File(".").getCanonicalPath()); //String workDir = Repository.getWorkTree(); //System.out.println(workDir); if(args.length <= 2 || args[2].equals("-help")) { - System.out.println(""" - for example jit add abc.txt"""); + System.out.println("for example jit add abc.txt" + ); }else { for(int i = 2; i < args.length; i++) { String fileName = args[i]; @@ -90,20 +119,17 @@ public class Client { */ public static void jitRemove(String[] args) throws IOException { //String workDir = Repository.getWorkTree(); - Utils.setWorkDir(new File(".").getCanonicalPath()); + //Utils.setWorkDir(new File(".").getCanonicalPath()); String workDir = Utils.getWorkDir(); if(args.length <= 2 || args[2].equals("-help")) { - System.out.println(""" - usage: jit remove [...] [-help]\r - \r - jit remove [...]: Remove file(s) from stage."""); + System.out.println(" usage: jit remove [...] [-help]\n jit remove [...]: Remove file(s) from stage."); } else { for(int i = 2; i < args.length; i++) { String fileName = args[i]; File file = new File(workDir + File.separator + fileName); try { - JitRemove.remove(file); + JitRm.removeForce(file); } catch (Exception e) { e.printStackTrace(); } @@ -112,12 +138,55 @@ public class Client { } public static void jitLog(String[] args) throws Exception { - Utils.setWorkDir(new File(".").getCanonicalPath()); + //Utils.setWorkDir(new File(".").getCanonicalPath()); String workDir = Utils.getWorkDir(); - if(args.length <= 2 || args[2].equals("-help")) { - System.out.println("usage:jit log"); - } else { + //System.out.println(workDir); JitLog.printLog(); + } + + public static void jitReset(String[] args) throws Exception { + if(args.length==2&&args[1].equals("reset")){ + JitReset.newReset(); + }else if(args.length==3&&args[1].equals("reset")&&!args[2].equals("--hard")){ + String commitKey = args[2]; + JitReset.reset(commitKey); + } else if(args[2].equals("-help")) { + System.out.println("usage: jit reset [--hard] [--hard commit-id] [-help]\r\n" + + "\r\n" + + "jit reset --hard: Reset the index and head file to the last commit.\r\n" + + "\r\n" + + "jit reset --hard [commit]: Reset the worktree and index to a certain commit."); + }else if(args.length == 3 && args[2].equals("--hard")) { + JitReset.newHardReset(); + }else if(args.length == 4 && args[2].equals("--hard")) { + String commitKey = args[3]; + JitReset.hardReset(commitKey); + } + } + + + public static void jitBranch(String[] args) throws IOException { + if(args.length < 2 || (args.length > 2 && args[2].equals("-help"))) { //'jit branch -help' + System.out.println( + "jit branch: List all local branches.\r\n" + + "\r\n" + + "jit branch [branch-name]: Create the branch.\r\n" + + "\r\n" + + "jit branch [branch-name] [commit]: Create the branch and point it to the commit.\r\n" + + "\r\n" + + "jit branch -d [branch-name]: Delete the branch."); + }else if(args.length == 2) { + JitBranch.branch(); + }else if(args.length == 3) { + String branchName = args[2]; + JitBranch.createBranchWithMaster(branchName); + }else if(args.length == 4 && args[2].equals("-d")) { + String branchName = args[3]; + JitBranch.deleteBranch(branchName); + }else if(args.length == 4) { + String branchName = args[2]; + String commitKey = args[3]; + JitBranch.branchAdd(branchName, commitKey); } } @@ -139,7 +208,7 @@ public class Client { "\r\n" + "work on the current change\r\n" + " add Add file contents to the index\r\n" + - " reset Reset current HEAD to the specified state\r\n" + + " resetCommit Reset current HEAD to the specified state\r\n" + " rm Remove files from the working tree and from the index\r\n" + "\r\n" + "examine the history and state\r\n" + @@ -160,6 +229,9 @@ public class Client { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); + System.out.println("请输入Jit的操作路径"); + String path = scanner.nextLine(); + Utils.setWorkDir(path); while (true) { System.out.println("请输入命令:"); String str = scanner.nextLine(); @@ -175,7 +247,9 @@ public class Client { } else { if (arr[1].equals("init")) { jitInit(arr); - } else if (arr[1].equals("add")) { + } else if (arr[1].equals("load")) { + jitLoad(arr); + }else if (arr[1].equals("add")) { jitAdd(arr); } else if (arr[1].equals("commit")) { jitCommit(arr); @@ -183,7 +257,19 @@ public class Client { jitRemove(arr); } else if (arr[1].equals("log")){ jitLog(arr); - } else { + } else if (arr[1].equals("cat-file")&&arr[2].equals("-p")&&arr[3]!=null){ + jitCat(arr); + } else if (arr[1].equals("stage")){ + jitStage(); + } else if(arr[1].equals("reset")) { + jitReset(arr); + } else if(arr[1].equals("branch")) { + jitBranch(arr); + } else if(arr[1].equals("restore")) { + jitRestore(arr); + } else if(arr[1].equals("checkout")) { + jitCheckout(arr); + }else { System.out.println("jit: " + arr[1] + "is not a git command. See 'git help'."); } } @@ -202,4 +288,24 @@ public class Client { } }*/ } + + private static void jitCheckout(String[] args) throws Exception { + JitCheckout.checkout(args[2]); + } + + private static void jitRestore(String[] args) throws Exception { + JitRestore.restore(); + } + + //显示版本库对象的内容 + private static void jitCat(String[] arr) throws IOException { + JitOpr.JitCat(arr[3]); + } + + //读取index文件夹的内容 + private static void jitStage() throws IOException { + JitOpr.JitStage(); + } + + } diff --git a/src/Diff/Difference.java b/src/Diff/Difference.java new file mode 100644 index 0000000..c16ca9d --- /dev/null +++ b/src/Diff/Difference.java @@ -0,0 +1,85 @@ +package Diff; + +import java.util.List; + +public class Difference { + private String[] oldLines; + private String[] newLines; + + public Difference(String[] oldLines, String[] newLines) { + this.oldLines = oldLines; + this.newLines = newLines; + } + + public Difference(String oldString, String newString) { + this.oldLines = oldString.split("\n"); + this.newLines = newString.split("\n"); + } + + public String[] getOldLines() { + return oldLines; + } + + public String[] getNewLines() { + return newLines; + } + + /** + * Show diff in the console between oldString and new String. + */ + public String getDiffString() { + Myers myers = new Myers(oldLines, newLines); + myers.diff(); + + List path = myers.getPath(); + + return this.getDiffString(oldLines, newLines, path); + } + + private String getDiffString(String[] oldLines, String[] newLines, List path) { + Node prevNode = path.get(0); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 1; i < path.size(); i++) { + Node node = path.get(i); + int gapDis = (node.getCoordinateX() - node.getCoordinateY()) + - (prevNode.getCoordinateX() - prevNode.getCoordinateY()); + + int posX = prevNode.getCoordinateX(); + int posY = prevNode.getCoordinateY(); + + if (gapDis == 1) { + // right + stringBuilder + .append(this.getStringWithRed("-\t" + oldLines[prevNode.getCoordinateX()])) + .append("\n"); + posX++; + } else if (gapDis == -1) { + // down + stringBuilder + .append(this.getStringWithGreen("+\t" + newLines[prevNode.getCoordinateY()])) + .append("\n"); + posY++; + } + + for (; posX < node.getCoordinateX() && posY < node.getCoordinateY() + && posX < oldLines.length && posY < newLines.length; posX++, posY++) { + stringBuilder + .append("\t") + .append(oldLines[posX]) + .append("\n"); + } + + prevNode = node; + } + return stringBuilder.toString(); + } + + private String getStringWithRed(String str) { + return "\033[31m" + str + "\033[0m"; + } + + + private String getStringWithGreen(String str) { + return "\033[32m" + str + "\033[0m"; + } +} diff --git a/src/Diff/Main.java b/src/Diff/Main.java new file mode 100644 index 0000000..e752c4b --- /dev/null +++ b/src/Diff/Main.java @@ -0,0 +1,38 @@ +package Diff; + +import Diff.util.FileUtil; + +import java.io.IOException; + + +public class Main { + /** + * 项目入口. + * @param args Read args from shell. args[0] is oldString and args[1] is newString. + */ + public static void main(String[] args) { + + + String oldFilename = "C:\\Users\\ZYC\\Desktop\\111.txt"; + String newFilename = "C:\\Users\\ZYC\\Desktop\\222.txt"; + + String oldString; + try { + oldString = FileUtil.readToString(oldFilename); + } catch (IOException exception) { + System.out.println("Can't find file: " + oldFilename); + return; + } + + String newString; + try { + newString = FileUtil.readToString(newFilename); + } catch (IOException exception) { + System.out.println("Can't find file: " + oldFilename); + return; + } + + Difference difference = new Difference(oldString, newString); + System.out.println(difference.getDiffString()); + } +} diff --git a/src/Diff/MyArray.java b/src/Diff/MyArray.java new file mode 100644 index 0000000..436399e --- /dev/null +++ b/src/Diff/MyArray.java @@ -0,0 +1,22 @@ +package Diff; + +/** + * Set array in range of (-length, length). + */ +class MyArray { + private int length; + private int[] list; + + public MyArray(int length) { + this.length = length; + this.list = new int[this.length * 2]; + } + + public int get(int pos) { + return this.list[pos + this.length]; + } + + public void set(int pos, int value) { + this.list[pos + this.length] = value; + } +} diff --git a/src/Diff/Myers.java b/src/Diff/Myers.java new file mode 100644 index 0000000..988f08f --- /dev/null +++ b/src/Diff/Myers.java @@ -0,0 +1,149 @@ +package Diff; + +import java.util.*; + +public class Myers { + private String[] oldLines; + private String[] newLines; + + /** + * Map currNode to prevNode. + * int currNodeInt = currNodeInt.getX() * totalLength + currNodeInt.getY(); + * int prevNodeInt = prevNode.getX() * totalLength + prevNode.getY(); + */ + private Map prevNode; + private int gap; + private int pathLen; + + + /** + * Constructor of Myers. + * @param oldLines String[]. + * @param newLines String[]. + */ + public Myers(String[] oldLines, String[] newLines) { + this.oldLines = oldLines; + this.newLines = newLines; + this.prevNode = new HashMap<>(); + } + + public int getGap() { + return gap; + } + + public int getPathLen() { + return pathLen; + } + + /** + * Execute algorithm Myers. + * pathLen is the sum of path steps. + * gap = x - y, where x and y are refer to the end point. + * @return int: the sum of different lines between oldString and newString. + */ + public int diff() { + int totalLength = this.oldLines.length + this.newLines.length + 1; + + MyArray mapGapToX = new MyArray(totalLength); + + for (int pathLen = 0; pathLen <= totalLength; pathLen++) { + for (int gap = -pathLen; gap <= pathLen; gap += 2) { + int prevX; + int prevY; + int currX; + int currY; + if (pathLen == 0) { + prevY = prevX = 0; + currY = currX = this.walkDiagonal(prevX, prevY); + } else { + final boolean down = (gap == -pathLen) + || (gap != pathLen + && mapGapToX.get(gap - 1) < mapGapToX.get(gap + 1)); + + final int prevGap = down ? gap + 1 : gap - 1; + + prevX = mapGapToX.get(prevGap); + prevY = prevX - prevGap; + + currX = down ? prevX : prevX + 1; + currY = currX - gap; + + currX = this.walkDiagonal(currX, currY); + currY = currX - gap; + } + + mapGapToX.set(gap, currX); + + this.prevNode.put(currX * totalLength + currY, prevX * totalLength + prevY); + + if (currX >= this.oldLines.length && currY >= this.newLines.length) { + this.gap = gap; + this.pathLen = pathLen; + return this.pathLen; + } + } + } + + return -1; + } + + /** + * According to this.prevNode, get node list. + * @return return node list from (0, 0) to (oldLines.length, newLines.length). + */ + public List getPath() { + List path = new ArrayList<>(); + + int totalLength = this.oldLines.length + this.newLines.length + 1; + + Node node = new Node(this.oldLines.length, this.newLines.length); + path.add(node); + + // (node.x >= 0 && node.y > 0) || (node.x > 0 && node.y >= 0) + // node.x and node.y are both greater or equal to 0. + // But they cannot be equal to 0 in the meanwhile. + for (; node.getCoordinateX() >= 0 && node.getCoordinateY() >= 0 + && (node.getCoordinateY() + node.getCoordinateX() > 0); ) { + int prevNode = this.prevNode.get(node.getCoordinateX() * totalLength + node.getCoordinateY()); + int prevX = prevNode / totalLength; + int prevY = prevNode % totalLength; + + node = new Node(prevX, prevY); + path.add(node); + } + + Collections.reverse(path); + return path; + } + + /** + * Walk through diagonal as far as we can, because the path through diagonal is 0. + * @param currX the x coordinate. + * @param currY the y coordinate. + * @return the x coordinate after walking through diagonal. + */ + private int walkDiagonal(int currX, int currY) { + while (this.checkBoundary(currX, this.oldLines.length) + && this.checkBoundary(currY, this.newLines.length) + && this.oldLines[currX].equals(this.newLines[currY])) { + currX++; + currY++; + } + return currX; + } + + /** + * Check whether value is in range of [min, max). + * @param value int. + * @param max int: max value. + * @param min int: min value. + * @return whether value is in range of [min, max). + */ + private boolean checkBoundary(int value, int max, int min) { + return min <= value && max > value; + } + + private boolean checkBoundary(int value, int max) { + return this.checkBoundary(value, max, 0); + } +} diff --git a/src/Diff/Node.java b/src/Diff/Node.java new file mode 100644 index 0000000..624cc41 --- /dev/null +++ b/src/Diff/Node.java @@ -0,0 +1,32 @@ +package Diff; + +public class Node { + private int coordinateX; + private int coordinateY; + + public Node(int coordinateX, int coordinateY) { + this.coordinateX = coordinateX; + this.coordinateY = coordinateY; + } + + public int getCoordinateX() { + return coordinateX; + } + + public int getCoordinateY() { + return coordinateY; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (!(obj instanceof Node)) { + return false; + } + Node node = (Node) obj; + return node.getCoordinateX() == this.getCoordinateX() + && node.getCoordinateY() == this.getCoordinateY(); + } +} diff --git a/src/Diff/util/FileUtil.java b/src/Diff/util/FileUtil.java new file mode 100644 index 0000000..efa4411 --- /dev/null +++ b/src/Diff/util/FileUtil.java @@ -0,0 +1,27 @@ +package Diff.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +public final class FileUtil { + /** + * Read from filename, and return the whole char of it. + * @param filename String. The input filename. + * @return The whole char reading from filename. + * @throws IOException Exception. + */ + public static String readToString(String filename) throws IOException { + String encoding = "UTF-8"; + File file = new File(filename); + + Long fileLength = file.length(); + byte[] fileContent = new byte[fileLength.intValue()]; + + FileInputStream fileInputStream = new FileInputStream(file); + fileInputStream.read(fileContent); + fileInputStream.close(); + + return new String(fileContent, encoding); + } +} diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF new file mode 100644 index 0000000..7709bd3 --- /dev/null +++ b/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: SwingJit + diff --git a/src/SwingJit.java b/src/SwingJit.java index 9724517..2f65249 100644 --- a/src/SwingJit.java +++ b/src/SwingJit.java @@ -1,6 +1,4 @@ -import core.JitAdd; -import core.JitCommit; -import core.JitInit; +import core.*; import utils.Utils; import utils.ZLibUtils; @@ -15,10 +13,12 @@ import java.io.IOException; public class SwingJit { - public static void main(String[] args) { + + public static void main(String[] args) throws UnsupportedLookAndFeelException, ClassNotFoundException, InstantiationException, IllegalAccessException { + UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); // 创建 JFrame 实例 JFrame frame = new JFrame("JIT- 你不需要使用命令行"); - frame.setSize(600, 370); + frame.setSize(1230, 600); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); @@ -31,19 +31,66 @@ public class SwingJit { } public static void placeComponents(JPanel panel,JFrame f) { - + int dep = 70; panel.setLayout(null); +////////////////////////////////////////////////JIT----LOAD////////////////////////////////////////////////// + JTextField dirPath1 = new JTextField(20); + dirPath1.setBounds(160,40,250,40); + panel.add(dirPath1); + JButton chooseDir1 = new JButton("选择文件夹"); + chooseDir1.setFont(new Font("黑体",Font.BOLD,16)); + chooseDir1.setBounds(20, 40, 120, 40); + panel.add(chooseDir1); + //chooseDir.setActionCommand("dir"); + chooseDir1.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int option = fileChooser.showOpenDialog(f); + if(option == JFileChooser.APPROVE_OPTION){ + File file = fileChooser.getSelectedFile(); + try { + dirPath1.setText(file.getCanonicalPath()); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + } + }); - + final JLabel label1 = new JLabel(); + label1.setBounds(163,40,120,100); + label1.setForeground(Color.blue); + label1.setFont(new Font("黑体",Font.BOLD,16)); + JButton initButton1 = new JButton("load"); + initButton1.setFont(new Font("黑体",Font.BOLD,16)); + initButton1.setBounds(430, 40, 120, 40); + initButton1.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String dirpath = dirPath1.getText(); + Utils.setWorkDir(dirpath); + /*try { + JitInit.init(dirpath); + } catch (IOException ex) { + ex.printStackTrace(); + }*/ + label1.setText("目录加载完成"); + } + }); + panel.add(label1); + panel.add(initButton1); +////////////////////////////////////////////////JIT----INIT////////////////////////////////////////////////// JTextField dirPath = new JTextField(20); - dirPath.setBounds(160,40,250,40); + dirPath.setBounds(160,40+dep,250,40); panel.add(dirPath); JButton chooseDir = new JButton("选择文件夹"); chooseDir.setFont(new Font("黑体",Font.BOLD,16)); - chooseDir.setBounds(20, 40, 120, 40); + chooseDir.setBounds(20, 40+dep, 120, 40); panel.add(chooseDir); //chooseDir.setActionCommand("dir"); chooseDir.addActionListener(new ActionListener() { @@ -63,18 +110,17 @@ public class SwingJit { } }); - - ////////////////////////////////////////////////JIT----INIT////////////////////////////////////////////////// final JLabel label = new JLabel(); - label.setBounds(163,40,100,100); + label.setBounds(163,40+dep,130,100); label.setForeground(Color.blue); label.setFont(new Font("黑体",Font.BOLD,16)); - JButton initButton = new JButton("git init"); + JButton initButton = new JButton("init"); initButton.setFont(new Font("黑体",Font.BOLD,16)); - initButton.setBounds(430, 40, 120, 40); + initButton.setBounds(430, 40+dep, 120, 40); initButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { + String dirpath = dirPath.getText(); Utils.setWorkDir(dirpath); try { @@ -88,14 +134,14 @@ public class SwingJit { panel.add(label); panel.add(initButton); + ////////////////////////////////////////////////JIT----ADD////////////////////////////////////////////////// + JTextField filePath = new JTextField(20); - filePath.setBounds(160,110,250,40); + filePath.setBounds(160,110+dep,250,40); panel.add(filePath); - - JButton chooseFile = new JButton("选择文件"); chooseFile.setFont(new Font("黑体",Font.BOLD,16)); - chooseFile.setBounds(20, 110, 120, 40); + chooseFile.setBounds(20, 110+dep, 120, 40); chooseFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -114,22 +160,25 @@ public class SwingJit { }); panel.add(chooseFile); - ////////////////////////////////////////////////JIT----ADD////////////////////////////////////////////////// + final JLabel label2 = new JLabel(); - label2.setBounds(163,110,150,100); + label2.setBounds(163,110+dep,300,100); label2.setForeground(Color.blue); label2.setFont(new Font("黑体",Font.BOLD,16)); - JButton addButton = new JButton("git add"); + JButton addButton = new JButton("add"); addButton.setFont(new Font("黑体",Font.BOLD,16)); - addButton.setBounds(430, 110, 120, 40); + addButton.setBounds(430, 110+dep, 120, 40); addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String filepath = filePath.getText(); + String path = filepath.trim(); + String filename = path.substring(path.lastIndexOf("\\")+1); try { JitAdd.add(new File(filepath)); - label2.setText("文件已添加到暂存区"); + label2.setForeground(Color.BLUE); + label2.setText("文件" + filename + "已添加到暂存区"); } catch (Exception ex) { ex.printStackTrace(); label2.setForeground(Color.RED); @@ -141,43 +190,69 @@ public class SwingJit { panel.add(label2); panel.add(addButton); - JButton commitButton = new JButton("git commit"); + ////////////////////////////////////////////////JIT----COMMIT////////////////////////////////////////////////// + + final JLabel labelss = new JLabel(); + labelss.setBounds(163,110+dep*2,300,100); + labelss.setForeground(Color.blue); + labelss.setFont(new Font("黑体",Font.BOLD,16)); + + final JLabel labelMessage = new JLabel(); + labelMessage.setBounds(20,150+dep,100,100); + labelMessage.setText("MESSAGE"); + panel.add(labelMessage); + + JTextField messageCont = new JTextField(20); + messageCont.setBounds(100,180+dep,310,40); + panel.add(messageCont); + + + JButton commitButton = new JButton("commit"); commitButton.setFont(new Font("黑体",Font.BOLD,16)); - commitButton.setBounds(20, 180, 530, 40); + //commitButton.setBounds(20, 180, 530, 40); + commitButton.setBounds(430, 180+dep, 120, 40); commitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { + String message = messageCont.getText(); JitCommit jitcommit = new JitCommit(); try { - jitcommit.commit(); + //传入提交信息字符串 + jitcommit.commit(message); + labelss.setForeground(Color.BLUE); + labelss.setText("提交成功"); } catch (Exception ex) { ex.printStackTrace(); + labelss.setForeground(Color.RED); + labelss.setText("提交失败,请检查!"); } } }); + panel.add(labelss); panel.add(commitButton); final JLabel label3 = new JLabel(); - label3.setBounds(20,220,100,100); + label3.setBounds(650,10,100,100); label3.setText("KEY"); panel.add(label3); JTextField key = new JTextField(20); - key.setBounds(60,250,350,40); + key.setBounds(700,40,350,40); panel.add(key); final JLabel label4 = new JLabel(); - label4.setBounds(60,250,700,200); + label4.setBounds(700,100,700,800); label4.setFont(new Font("黑体",Font.BOLD,18)); - - JButton value = new JButton("VALUE"); + label4.setVerticalAlignment(SwingConstants.TOP); + //label4.setText(""+"qwfqwfqwfqwf\nwqf\nwfwf"+""); + JButton value = new JButton("cat file"); value.setFont(new Font("黑体",Font.BOLD,16)); - value.setBounds(430, 250, 120, 40); + value.setBounds(1070, 40, 120, 40); value.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String keyText = key.getText(); - System.out.println(Utils.getObjectsPath()); + //System.out.println(Utils.getObjectsPath()); File file = new File(Utils.getObjectsPath() + File.separator + keyText); FileInputStream is = null; try { @@ -190,13 +265,213 @@ public class SwingJit { String str = new String(output); str = str.replaceAll("\n","
"); str = ""+str+""; - System.out.println(str); + //System.out.println(str); label4.setText(str); + try { + is.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } } }); panel.add(label4); panel.add(value); + + ////////////////////////////////////////////////JIT----BRANCH////////////////////////////////////////////////// + final JLabel labelbr = new JLabel(); + labelbr.setBounds(163,110+dep*3,300,100); + labelbr.setForeground(Color.blue); + labelbr.setFont(new Font("黑体",Font.BOLD,16)); + + + final JLabel labelMessage11 = new JLabel(); + labelMessage11.setBounds(20,150+dep*2,100,100); + labelMessage11.setText("Branch"); + panel.add(labelMessage11); + + JTextField messageCont11 = new JTextField(20); + messageCont11.setBounds(100,180+dep*2,310,40); + panel.add(messageCont11); + + JButton commitButton11 = new JButton("branch"); + commitButton11.setFont(new Font("黑体",Font.BOLD,16)); + //commitButton.setBounds(20, 180, 530, 40); + commitButton11.setBounds(430, 180+dep*2, 120, 40); + commitButton11.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String message = messageCont11.getText(); + try { + JitBranch.createBranchWithMaster(message); + labelbr.setForeground(Color.BLUE); + labelbr.setText("分支"+message+"创建成功"); + } catch (Exception ex) { + ex.printStackTrace(); + labelbr.setForeground(Color.RED); + labelbr.setText("创建分支失败,请重试"); + } + } + }); + panel.add(commitButton11); + panel.add(labelbr); + //panel.add(commitButton22); + ///////////////////////////////////////////////////////// + JButton commitButton3 = new JButton("list"); + commitButton3.setFont(new Font("黑体",Font.BOLD,16)); + //commitButton.setBounds(20, 180, 530, 40); + commitButton3.setBounds(20, 180+dep*3, 160, 40); + commitButton3.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String message = null; + //JitCommit jitcommit = new JitCommit(); + try { + //传入提交信息字符串 + message = JitBranch.branch(); + message = message.replaceAll("\n","
"); + message = ""+message+""; + //System.out.println(str); + label4.setText(message); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }); + panel.add(commitButton3); + ///////////////////////////////////////////////////////// + JButton commitButtondel = new JButton("delete"); + commitButtondel.setFont(new Font("黑体",Font.BOLD,16)); + //commitButton.setBounds(20, 180, 530, 40); + commitButtondel.setBounds(200, 180+dep*3, 160, 40); + commitButtondel.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String message = messageCont11.getText(); + //JitCommit jitcommit = new JitCommit(); + try { + //传入提交信息字符串 + JitBranch.deleteBranch(message); + labelbr.setForeground(Color.BLUE); + labelbr.setText("分支"+message+"删除成功"); + } catch (Exception ex) { + ex.printStackTrace(); + labelbr.setForeground(Color.RED); + labelbr.setText("分支删除失败,请重试"); + } + } + }); + panel.add(commitButtondel); + ///////////////////////////////////////////////////////// + JButton commitButtoncheck = new JButton("checkout"); + commitButtoncheck.setFont(new Font("黑体",Font.BOLD,16)); + //commitButton.setBounds(20, 180, 530, 40); + commitButtoncheck.setBounds(380, 180+dep*3, 170, 40); + commitButtoncheck.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String message = messageCont11.getText(); + //JitCommit jitcommit = new JitCommit(); + + try { + JitCheckout.checkout(message); + labelbr.setForeground(Color.BLUE); + labelbr.setText("已切换到"+message+"分支"); + } catch (Exception ex) { + ex.printStackTrace(); + labelbr.setForeground(Color.RED); + labelbr.setText("分支切换失败,请重试"); + } + } + }); + panel.add(commitButtoncheck); + ///////////////////////////////////////////////////////// + JButton commitButtonindex = new JButton("index"); + commitButtonindex.setFont(new Font("黑体",Font.BOLD,16)); + //commitButton.setBounds(20, 180, 530, 40); + commitButtonindex.setBounds(20, 180+dep*4, 160, 40); + commitButtonindex.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String message = null; + try { + message = JitOpr.JitStage(); + message = message.replaceAll("\n","
"); + message = ""+message+""; + //System.out.println(str); + label4.setText(message); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }); + panel.add(commitButtonindex); + ///////////////////////////////////////////////////////// + JButton resbutton = new JButton("restore"); + resbutton.setFont(new Font("黑体",Font.BOLD,16)); + //commitButton.setBounds(20, 180, 530, 40); + resbutton.setBounds(200, 180+dep*4, 160, 40); + resbutton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + JitRestore.restore(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }); + panel.add(resbutton); + ///////////////////////////////////////////////////////// + JButton logbutton = new JButton("log"); + logbutton.setFont(new Font("黑体",Font.BOLD,16)); + //commitButton.setBounds(20, 180, 530, 40); + logbutton.setBounds(380, 180+dep*4, 170, 40); + logbutton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String message = null; + try { + message = JitLog.printLog(); + message = message.replaceAll("\n","
"); + message = ""+message+""; + //System.out.println(str); + label4.setText(message); + //JitLog.printLog(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }); + panel.add(logbutton); + + + + + + JButton skin = new JButton("一键换皮肤"); + skin.setFont(new Font("黑体",Font.BOLD,16)); + skin.setBounds(1070, 400+dep, 120, 40); + skin.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + String dirpath = dirPath.getText(); + int random=(int)(Math.random()*4); + String[] arr = {"javax.swing.plaf.metal.MetalLookAndFeel","com.sun.java.swing.plaf.windows.WindowsLookAndFeel","com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel", + "com.sun.java.swing.plaf.motif.MotifLookAndFeel"}; + try { + System.out.println(random); + UIManager.setLookAndFeel(arr[random]); + //System.out.println(UIManager.getLookAndFeel()); + SwingUtilities.updateComponentTreeUI(f); + } catch (UnsupportedLookAndFeelException | ClassNotFoundException | InstantiationException | IllegalAccessException ex) { + ex.printStackTrace(); + } + } + }); + panel.add(skin); } } \ No newline at end of file diff --git a/src/branch/Branch.java b/src/branch/Branch.java new file mode 100644 index 0000000..140c4cf --- /dev/null +++ b/src/branch/Branch.java @@ -0,0 +1,102 @@ +package branch; +import gitobject.Commit; +import repo.Repository; +import utils.Utils; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; + +//Git的分支,其实本质上仅仅是指向提交对象的可变指针 +public class Branch { + //分支名 + private String branchName; + //commit的40位16进制数(key) + private String commitKey; + ///////////////////////// + //保存分支指向commit key的文件 + String path = Utils.getJitDir() + File.separator + "refs" + File.separator + "heads"; + ///////////////////////// + + public String getBranchName(){ + return branchName; + } + public String getCommitKey(){ + return commitKey; + } + + public void setBranchName(String branchName) { + this.branchName = branchName; + } + + public void setCommitKey(String commitKey) { + this.commitKey = commitKey; + } + + //普通构造方法,分别传入分支名和commit key,在JitCommit中会使用到 + public Branch(String branchName, String commitKey){ + setBranchName(branchName); + setCommitKey(commitKey); + //this.branchName = branchName; + //this.commitKey = commitKey; + } + + + //重载构造方法,只传入分支名,通过分支名查找refs/heads文件中保存的commit key + public Branch(String branchName) throws IOException { + //String path = Repository.getGitDir() + File.separator + "refs" + File.separator + "heads"; + //this.branchName = branchName; + setBranchName(branchName); + File currBranchFile = new File(path + File.separator + branchName); + if(currBranchFile.exists()) { + commitKey = Utils.getContentFromFile(currBranchFile); + } else { + throw new FileNotFoundException("分支不存在,请检查拼写错误"); + } + } + + + //重新设置commitKey,并且修改refs/heads中的commit key + public void resetCommit(String commitKey) throws IOException { + setCommitKey(commitKey); + addBranch(); + } + + //确定位于refs/heads的分支文件是否存在 + public boolean branchExist(){ + //String path = Repository.getGitDir() + File.separator + "refs" + File.separator + "heads"; + File branchFile = new File(path + File.separator + branchName); + return branchFile.exists(); + } + + //重载方法,确定位于refs/heads,且名为branchNames的分支文件是否存在 + //注意:最好不要频繁使用此方法,虽然方便,但会破坏代码逻辑!我本意是要把它放入Utils里 + public boolean branchExist(String branchNames){ + File branchFile = new File(path + File.separator + branchNames); + return branchFile.exists(); + } + + + //改变HEAD文件中的分支名,HEAD文件相当于指针,指向最近操作的分支名 + public void changeHead() throws IOException { + File HEAD = new File(Utils.getJitDir() + File.separator + "HEAD"); + FileWriter fileWriter = new FileWriter(HEAD); + fileWriter.write("ref: refs/heads/" + branchName); + fileWriter.close(); + } + + + //在refs/heads文件夹内添加或替换branch文件 + public void addBranch() throws IOException { + //String path = Repository.getGitDir() + File.separator + "refs" + File.separator + "heads"; + File branchFile = new File(path + File.separator + branchName); + FileWriter fileWriter = new FileWriter(branchFile); + fileWriter.write(commitKey); + fileWriter.close(); + } + + + + +} diff --git a/src/core/JitAdd.java b/src/core/JitAdd.java index 50aa5b8..662a2c2 100644 --- a/src/core/JitAdd.java +++ b/src/core/JitAdd.java @@ -15,11 +15,11 @@ public class JitAdd { if(file.isFile()){ //表示已经在index类找到了同名的记录 if(idx.inIndex(file) != (-1)) { - System.out.println("找到了同名记录,现在我们更新吧"); + System.out.println("找到了同名记录,更新"); idx.deleteItem(file); } idx.addIndexs(file); - idx.outputIndex(); + idx.saveIndex(); } else if(file.isDirectory()){ File[] fs = file.listFiles(); diff --git a/src/core/JitBranch.java b/src/core/JitBranch.java new file mode 100644 index 0000000..b4dacb1 --- /dev/null +++ b/src/core/JitBranch.java @@ -0,0 +1,101 @@ +package core; + +import branch.Branch; +import utils.Utils; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +//这里定义对于分支的一系列操作 +public class JitBranch { + + //得到HEAD中存放的branch路径,例如:ref: refs/heads/master,substring(16)就是master + //并返回由它得到的branch对象 + public static Branch getBranch() throws IOException { + File HEAD = new File(Utils.getJitDir() + File.separator + "HEAD"); + //String branchName = GitObject.getValue(HEAD).substring(16).replace("\n",""); + String branchName = Utils.getContentFromFile(HEAD).substring(16).replace("\n",""); + Branch branch = new Branch(branchName); + return branch; + } + + //判断分支名所对应的分支文件是否存在,若存在返回true + public static boolean branchExist(String branchName)throws FileNotFoundException { + + File branch = new File(Utils.getJitDir() + File.separator + "refs" + + File.separator + "heads" + File.separator + branchName); + return branch.isFile(); + } + + //创建一个新的branch并且把这个branch文件添加到refs/heads文件夹 + public static void branchAdd(String branchname, String commitId) throws IOException { + Branch branch = new Branch(branchname, commitId); + branch.addBranch(); + } + + + //列出所有现存的分支名 + public static String branch() throws IOException { + StringBuilder str = new StringBuilder(""); + if(!branchExist("master")){ + throw new FileNotFoundException("master分支不存在,你应该至少先提交一次"); + //System.out.println("master分支不存在,你应该至少先提交一次"); + //return; + } + Branch currentBranch = getBranch(); + File[] branchList = new File(Utils.getJitDir() + File.separator + "refs" + + File.separator + "heads").listFiles(); + for(int i = 0; i < branchList.length; i++){ + //从HEAD文件中读取的branch名和refs/heads中的branch文件名相同,表示是当前分支,前面加上*号 + if(currentBranch.getBranchName().equals(branchList[i].getName())){ + System.out.print("*"); + str.append("*"); + } + else{ + System.out.print(" "); + str.append(" "); + } + System.out.println(branchList[i].getName()); + str.append(branchList[i].getName()).append("\n"); + } + return str.toString(); + } + + + //在master分支处再创建一个分支 + public static void createBranchWithMaster(String branchName) throws IOException { + if(!branchExist("master")){ + throw new FileNotFoundException("master分支不存在,你应该至少先提交一次"); + //System.out.println("master分支不存在,你应该至少先提交一次"); + //return; + } + //Branch master = new Branch("master"); + Branch cur = getBranch(); + Branch branch = new Branch(branchName, cur.getCommitKey()); + //这里可以这样理解: + //...refs/heads文件夹下,有很多branch文件,我们添加了一个 + branch.addBranch(); + } + + + //删除分支,在此之前请确保 + // 1、希望删除的分支名存在 + // 2、删除的分支不是当前分支 + public static void deleteBranch(String branchName) throws IOException { + if(!branchExist(branchName)){ + System.out.println("错误:找不到名为"+"'"+branchName+"'"+"的分支"); + } + if (branchName.equals(getBranch().getBranchName())){ + System.out.println("错误:不能删除当前所在的分支 "); + } + File branch = new File(Utils.getJitDir() + File.separator + "refs" + File.separator + + "heads" + File.separator + branchName); + if(branch.delete()){ + System.out.println("名为" + "'" + branchName + "'" +"的分支已经被删除"); + }else throw new IOException("删除失败,请检查"); + + } + + + +} diff --git a/src/core/JitCheckout.java b/src/core/JitCheckout.java new file mode 100644 index 0000000..770136a --- /dev/null +++ b/src/core/JitCheckout.java @@ -0,0 +1,66 @@ +package core; + +import branch.Branch; +import gitobject.Commit; +import gitobject.Tree; +import tmp.Index; +import utils.FileCreation; +import utils.FileDeletion; +import utils.Utils; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +public class JitCheckout { + + static String path = Utils.getJitDir() + File.separator + "refs" + File.separator + "heads"; + + //确定位于refs/heads,且名为branchNames的分支文件是否存在 + //注意:最好不要频繁使用此方法,虽然方便,但会破坏代码逻辑!我本意是要把它放入Utils里 + public static boolean branchExist(String branchNames){ + File branchFile = new File(path + File.separator + branchNames); + return branchFile.exists(); + } + + //切换到名为branchName的分支,它比changeHead方法多了一个条件判断 + public static void checkout(String branchName) throws Exception { + if(branchExist(branchName)){ + //在工作目录删除所有文件(除了.jit外) + System.out.println("HEAD当前指向"+branchName); + System.out.println("删除的文件位于"+Utils.getWorkDir()); + File[] worktree = new File(Utils.getWorkDir()).listFiles(); + for (File file : worktree) { + if (!file.getName().equals(".jit")) { + FileDeletion.deleteFile(file); + System.out.println("-"+file.getName()); + } + } + changeHead(branchName); + Branch branch = JitBranch.getBranch(); + Commit commit = new Commit(branch.getCommitKey()); + Tree tree = new Tree(commit.getTree()); + System.out.println("树对象是"+commit.getTree()); + //通过树对象恢复所有的文件 + FileCreation.recoverWorkTree(tree, Utils.getWorkDir()); + //删除所有index文件 + Index index = new Index(); + index.clear(); + //把目前的所有文件记录添加到index中 + File[] workTree = new File(Utils.getWorkDir()).listFiles(); + for(int i = 0; i < workTree.length; i++){ + if(!workTree[i].getName().equals(".jit")) + JitAdd.add(workTree[i]); + } + } else{ + System.out.println(branchName + "不存在,无法切换"); + } + } + + //改变HEAD文件中的分支名,HEAD文件相当于指针,指向最近操作的分支名 + public static void changeHead(String branchName) throws IOException { + File HEAD = new File(Utils.getJitDir() + File.separator + "HEAD"); + FileWriter fileWriter = new FileWriter(HEAD); + fileWriter.write("ref: refs/heads/" + branchName); + fileWriter.close(); + } +} diff --git a/src/core/JitCommit.java b/src/core/JitCommit.java index 1c40dce..a898640 100644 --- a/src/core/JitCommit.java +++ b/src/core/JitCommit.java @@ -1,5 +1,6 @@ package core; +import branch.Branch; import gitobject.*; import tmp.*; @@ -10,13 +11,11 @@ import java.io.IOException; import java.util.*; public class JitCommit { - /** - * Creating commit and write it to repository. - * @throws Exception - */ + + //创建commit对象并保存到repository,并且把commit的key写入branch文件 public void commit() throws Exception { Tree tree = buildTree(); - String author = System.getProperty("user.name") + " " + String.valueOf(new Date().getTime()); + String author = System.getProperty("user.name") + " " + String.valueOf(new Date().toString()); String committer = System.getProperty("user.name"); System.out.println("Please enter the commit message: "); @@ -24,13 +23,32 @@ public class JitCommit { String message = sc.nextLine(); Commit commit = new Commit(tree, author, committer, message); - Index index = new Index(); - //提交完成后,删除index文件 - index.clear(); - //updateBranch(commit); - //sc.close(); + //Index index = new Index(); + //index.clear(); + + updateBranch(commit); } - + + //SwingJIT专用的方法,传入自定义的提交信息,其余步骤和上一个方法一致 + public void commit(String message) throws Exception { + Tree tree = buildTree(); + String author = System.getProperty("user.name") + " " + String.valueOf(new Date().toString()); + String committer = System.getProperty("user.name"); + Commit commit = new Commit(tree, author, committer, message); + //Index index = new Index(); + //index.clear(); + updateBranch(commit); + } + + //更新branch,把commit key信息写入refs/heads中 + public void updateBranch(Commit commit) throws IOException { + String commitKey = commit.getKey(); + //得到当前的branch,该路径位于.jit文件夹中的HEAD文件中 + Branch branch = JitBranch.getBranch(); + //分为两步,第一步修改branch对象的commitkey,第二步把commitkey写入到branch文件中 + branch.resetCommit(commitKey); + } + //从现有的index文件中创建indexTree对象 public TreeMap buildIndexTree() throws IOException { diff --git a/src/core/JitInit.java b/src/core/JitInit.java index 91cacfa..98e8df5 100644 --- a/src/core/JitInit.java +++ b/src/core/JitInit.java @@ -1,9 +1,13 @@ package core; +import branch.Branch; import utils.FileDeletion; import repo.Repository; +import utils.Utils; +import java.io.File; import java.io.IOException; +import java.util.Objects; public class JitInit { /** @@ -14,16 +18,15 @@ public class JitInit { public static void init(String workTree) throws IOException { Repository repo = new Repository(workTree); if(!repo.exist()){ -/* if(repo.isDirectory()){ - FileDeletion.deleteFile(Repository.getGitDir()); - } - else if(repo.isFile()){ - throw new IOException(".jit is a file, please check"); - }*/ - System.out.println(".jit仓库不存在,现在建立"); + System.out.println("Jit仓库不存在,现在建立"); repo.createRepo(); } - - System.out.println("Jit repository has been initiated successfully."); + System.out.println("Jit仓库已经存在了."); + //这里建立master分支文件 + File file = new File(Utils.getJitDir() + File.separator + "refs" + File.separator + "heads"); + if(Objects.requireNonNull(file.list()).length == 0) { + Branch master = new Branch("master", "null"); + master.addBranch(); + } } } diff --git a/src/core/JitLoad.java b/src/core/JitLoad.java new file mode 100644 index 0000000..d2cd885 --- /dev/null +++ b/src/core/JitLoad.java @@ -0,0 +1,9 @@ +package core; + +import utils.Utils; + +public class JitLoad { + public static void load(String path){ + Utils.setWorkDir(path); + } +} diff --git a/src/core/JitLog.java b/src/core/JitLog.java index ef33c5c..fd3cec0 100644 --- a/src/core/JitLog.java +++ b/src/core/JitLog.java @@ -1,19 +1,46 @@ package core; +import branch.Branch; +import gitobject.Commit; import utils.Utils; import java.io.File; import java.io.IOException; +import static core.JitBranch.getBranch; + public class JitLog { - public static void printLog() throws Exception { + public static String printLog() throws Exception { + StringBuilder stringBuilder = new StringBuilder(); + Branch currentBranch = getBranch(); + String commitKey = currentBranch.getCommitKey(); + Commit curCommit = new Commit(commitKey); + stringBuilder.append("--------------------------------------------------"). + append("\n").append(curCommit.getValue()).append("\n"); + System.out.println("--------------------------------------------------"); + System.out.println(curCommit.getValue()); + String parentKey = curCommit.getParent(); - File file = new File(Utils.getWorkDir()+File.separator+".jit"+File.separator+"LOG"); - if(file.exists()){ - String res = Utils.getContentFromFile(file); - System.out.println(res); - }else { - throw new IOException(); + while (!parentKey.equals("null")) { + Commit commit = new Commit(parentKey); + stringBuilder.append("--------------------------------------------------").append("\n") + .append(commit.getValue()).append("\n").append("--------------------------------------------------"); + System.out.println("--------------------------------------------------"); + System.out.println(commit.getValue()); + System.out.println("--------------------------------------------------"); + parentKey = commit.getParent(); } - + String str = stringBuilder.toString(); + return str; } + + /*public void logCommitHistory() throws IOException { + System.out.println(getValue()); + String parentId = getParent(); + while(parentId != null){ + Commit commit = new Commit(parentId); + System.out.println(commit.getValue()); + parentId = commit.getParent(); + } + }*/ + } diff --git a/src/core/JitOpr.java b/src/core/JitOpr.java new file mode 100644 index 0000000..a71946a --- /dev/null +++ b/src/core/JitOpr.java @@ -0,0 +1,48 @@ +package core; + +import utils.Utils; +import utils.ZLibUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +public class JitOpr { + public static void JitCat(String key) throws IOException { + File file = new File(Utils.getObjectsPath() + File.separator + key); + FileInputStream is = null; + try { + is = new FileInputStream(file); + } catch (FileNotFoundException ex) { + ex.printStackTrace(); + } + byte[] output = ZLibUtils.decompress(is); + //label4.setText(new String(output)); + String str = new String(output); + //str = str.replaceAll("\n","
"); + //str = ""+str+""; + System.out.println(str); + is.close(); + } + + public static String JitRec(String key) throws IOException { + File file = new File(Utils.getObjectsPath() + File.separator + key); + FileInputStream is = null; + try { + is = new FileInputStream(file); + } catch (FileNotFoundException ex) { + ex.printStackTrace(); + } + byte[] output = ZLibUtils.decompress(is); + String str = new String(output); + is.close(); + return str; + } + + public static String JitStage() throws IOException { + File file = new File(Utils.getJitDir()+File.separator+"index"); + System.out.println(Utils.getContentFromFile(file)); + return Utils.getContentFromFile(file); + } +} diff --git a/src/core/JitReset.java b/src/core/JitReset.java new file mode 100644 index 0000000..d5f6658 --- /dev/null +++ b/src/core/JitReset.java @@ -0,0 +1,71 @@ +package core; + +import branch.Branch; +import gitobject.Blob; +import gitobject.Commit; +import gitobject.GitObject; +import gitobject.Tree; +import tmp.Index; +import utils.FileCreation; +import utils.FileDeletion; +import utils.FileReader; +import utils.Utils; + +import java.io.*; +import java.util.ArrayList; + + +public class JitReset { + + //重置到最近一次提交,只重置暂存区 + public static void newReset() throws Exception { + reset(JitBranch.getBranch().getCommitKey()); + } + + //重置到特定的提交(commitKey),只重置暂存区 + public static void reset(String commitKey) throws IOException { + Index idx = new Index(); + idx.clear(); + Branch branch = JitBranch.getBranch(); + branch.resetCommit(commitKey); + Commit commit = new Commit(commitKey); + Tree tree = new Tree(commit.getTree()); + File indexFile = new File(Utils.getJitDir() + File.separator + "index"); + FileWriter fw = new FileWriter(indexFile); + fw.write(tree.getValue()); + fw.flush(); + fw.close(); + } + + //重置到最近一次提交 + public static void newHardReset() throws Exception { + hardReset(JitBranch.getBranch().getCommitKey()); + } + + //重置到特定的提交(commitKey),工作区和暂存区的文件也同步重置 + public static void hardReset(String commitKey) throws Exception { + //在工作目录删除所有文件(除了.jit外) + File[] worktree = new File(Utils.getWorkDir()).listFiles(); + for(int i = 0; i < worktree.length;i++){ + if(!worktree[i].getName().equals(".jit")){ + FileDeletion.deleteFile(worktree[i]); + } + } + Branch branch = JitBranch.getBranch(); + branch.resetCommit(commitKey); + Commit commit = new Commit(commitKey); + Tree tree = new Tree(commit.getTree()); + + //通过树对象恢复所有的文件 + FileCreation.recoverWorkTree(tree, Utils.getWorkDir()); + //删除所有index文件 + Index index = new Index(); + index.clear(); + //把目前的所有文件记录添加到index中 + File[] workTree = new File(Utils.getWorkDir()).listFiles(); + for(int i = 0; i < workTree.length; i++){ + if(!workTree[i].getName().equals(".jit")) + JitAdd.add(workTree[i]); + } + } +} diff --git a/src/core/JitRestore.java b/src/core/JitRestore.java new file mode 100644 index 0000000..e265c44 --- /dev/null +++ b/src/core/JitRestore.java @@ -0,0 +1,43 @@ +package core; + +import branch.Branch; +import gitobject.Blob; +import gitobject.Commit; +import gitobject.GitObject; +import gitobject.Tree; +import tmp.Index; +import utils.FileCreation; +import utils.FileDeletion; +import utils.FileReader; +import utils.Utils; + +import java.io.File; +import java.util.ArrayList; + +//git restore命令,会撤销文件的修改,使暂存区的文件恢复到工作区,即最近一次执行完jit add的状态 +//注意:没有放入暂存区的文件会消失 +public class JitRestore { + public static void restore() throws Exception { + //在工作目录删除所有文件(除了.jit外) + File[] worktree = new File(Utils.getWorkDir()).listFiles(); + for(int i = 0; i < worktree.length;i++){ + if(!worktree[i].getName().equals(".jit")){ + FileDeletion.deleteFile(worktree[i]); + } + } + Index idx = new Index(); + ArrayList idxList = idx.getIndexs(); + for(int i=0;i()); + setType("tree"); + setNum("040000"); + try{ + File file = new File(Utils.getObjectsPath() + File.separator + key); + if(file.exists()){ + setKey(key); + //key = Id; + FileInputStream is = new FileInputStream(file); + byte[] output = ZLibUtils.decompress(is); + is.close(); + setValue(new String(output)); + genTreeList(); + } + else{ + throw new IOException(); + } + }catch (Exception e){ + e.printStackTrace(); + } + + } + /** + * Generate treelist from the value of an existed tree object. + * @throws IOException + */ + public void genTreeList() throws IOException { + ArrayList list = FileReader.readByBufferReader(getValue()); + for(int i = 0; i < list.size(); i++){ + if(FileReader.readObjectFmt(list.get(i)).equals("blob")){ + Blob blob = new Blob(FileReader.readObjectKey(list.get(i))); + treeList.add(blob); + } + else{ + Tree tree = new Tree(FileReader.readObjectKey(list.get(i))); + treeList.add(tree); + } + } + } /** * Generate the key of a tree object from index. * @param indexTree @@ -70,7 +115,7 @@ public class Tree extends GitObject{ tree.compressWrite(); setValue(getValue()+"040000 tree " + tree.getKey() + "\t" + pair.getKey() + "\n"); }else { - System.out.println("这里"+pair.getValue().blobKey); + //System.out.println("这里"+pair.getValue().blobKey); Blob blob = new Blob(pair.getValue().blobKey); treeList.add(blob); //不需要compresseWrite,因为在git add之后,即生成index时,已经对所有文件进行了compresseWrite压缩写入! diff --git a/src/repo/Repository.java b/src/repo/Repository.java index 4cf8627..7df2011 100644 --- a/src/repo/Repository.java +++ b/src/repo/Repository.java @@ -20,7 +20,7 @@ public class Repository { */ public Repository() throws IOException { if(gitDir == ""){ - throw new IOException("The repository does not exist!"); + throw new IOException("The repository does not branchExist!"); } } diff --git a/src/tmp/Index.java b/src/tmp/Index.java index dc14937..fba9393 100644 --- a/src/tmp/Index.java +++ b/src/tmp/Index.java @@ -17,7 +17,7 @@ public class Index { //如果index文件存在,读取index文件中的数据项,如果index文件不存在,创建index文件 public Index() throws IOException { - System.out.println(path); + //System.out.println(path); if(!new File(path + File.separator + "index").exists()) { //System.out.println("错误附近的path"+path); //在.jit文件夹内,创建名为index的文件 @@ -25,7 +25,7 @@ public class Index { }else { //即表示已经存在,加载已经存在的index文件 - index = getExistData(); + index = getObjFromIndex(); } } //get方法,返回创建完成的index对象 @@ -34,7 +34,7 @@ public class Index { } //反序列化,将index文件中的每条数据读入ArrayList中。 - public ArrayList getExistData() throws IOException { + public ArrayList getObjFromIndex() throws IOException { if(new File(path + File.separator + "index").exists()) { File indexFile = new File(path + File.separator + "index"); FileInputStream is = new FileInputStream(indexFile); @@ -68,7 +68,7 @@ public class Index { } //按照一行一行的形式保存index信息到.jit/index - public void outputIndex() throws IOException { + public void saveIndex() throws IOException { if(new File(path + File.separator + "index").exists()) { File indexFile = new File(path + File.separator + "index"); FileWriter fw = new FileWriter(indexFile); @@ -122,6 +122,8 @@ public class Index { int idx = inIndex(file); if(idx != -1) { index.remove(idx); + }else { + System.out.println("想要移除的文件不存在,请先检查"); } } diff --git a/src/utils/FileCreation.java b/src/utils/FileCreation.java index 40255fe..75de81a 100644 --- a/src/utils/FileCreation.java +++ b/src/utils/FileCreation.java @@ -19,7 +19,7 @@ public class FileCreation { */ public static void createFile(String parentPath, String filename, String text) throws IOException { if(!new File(parentPath).isDirectory()){ - throw new IOException("The path doesn't exist!"); + throw new IOException("The path doesn't branchExist!"); } File file = new File(parentPath + File.separator + filename); @@ -41,7 +41,7 @@ public class FileCreation { */ public static void createDirectory(String parentPath, String... paths) throws IOException{ if(!new File(parentPath).isDirectory()){ - throw new IOException("The path doesn't exist!"); + throw new IOException("The path doesn't branchExist!"); } String path = parentPath; FileDeletion.deleteFile(path + File.separator + paths[0]); @@ -57,16 +57,17 @@ public class FileCreation { * @param parentTree * @throws IOException */ -/* public static void recoverWorkTree(Tree t, String parentTree) throws Exception { + public static void recoverWorkTree(Tree t, String parentTree) throws Exception { ArrayList list = FileReader.readByBufferReader(t.getValue()); ArrayList treeList = t.getTreeList(); for(int i = 0; i < list.size(); i++){ if(FileReader.readObjectFmt(list.get(i)).equals("blob")){ //读取blob的key - Blob blob = new Blob(FileReader.readObjectKey(list.get(i)),1); + Blob blob = new Blob(FileReader.readObjectKey(list.get(i))); String fileName = FileReader.readObjectFileName(list.get(i)); createFile(parentTree, fileName, blob.getValue()); + System.out.println("+"+fileName); } else{ //读取tree的key @@ -76,5 +77,5 @@ public class FileCreation { recoverWorkTree(tree, parentTree + File.separator + dirName); } } - }*/ + } } diff --git a/src/utils/FileDeletion.java b/src/utils/FileDeletion.java index 84ca3aa..7689474 100644 --- a/src/utils/FileDeletion.java +++ b/src/utils/FileDeletion.java @@ -10,9 +10,12 @@ public class FileDeletion { * @param file */ public static void deleteFile(File file){ - if(!file.exists())return; - if(file.isFile())file.delete(); - else{ + if(!file.exists()){ + return; + } + if(file.isFile()) { + file.delete(); + } else { File[] fileList = file.listFiles(); for(int i = 0; i < fileList.length; i++){ deleteFile(fileList[i]); diff --git a/src/utils/FileStatus.java b/src/utils/FileStatus.java index b43cc2e..0791992 100644 --- a/src/utils/FileStatus.java +++ b/src/utils/FileStatus.java @@ -15,8 +15,7 @@ public class FileStatus { * @throws FileNotFoundException */ public static boolean branchExist(String branchname)throws FileNotFoundException { - /*File branch = new File(Repository.getGitDir() + File.separator + "refs" - + File.separator + "heads" + File.separator + branchname);*/ + File branch = new File(Utils.getJitDir() + File.separator + "refs" + File.separator + "heads" + File.separator + branchname); return branch.isFile(); diff --git a/src/utils/Utils.java b/src/utils/Utils.java index 6671439..03575b4 100644 --- a/src/utils/Utils.java +++ b/src/utils/Utils.java @@ -19,10 +19,12 @@ public class Utils { public static void setWorkDir(String workDir) { Utils.workDir = workDir; } + //获取工作路径,即包含.jit的文件夹 public static String getWorkDir() { return workDir; } + //获取.jit所在的路径 public static String getJitDir() { return workDir + File.separator + ".jit"; @@ -60,6 +62,7 @@ public class Utils { FileInputStream fileInputStream = new FileInputStream(file); bytes = new byte[fileInputStream.available()]; fileInputStream.read(bytes); + fileInputStream.close(); }catch (FileNotFoundException e){ System.out.println("文件没有找到1"); } -- Gitee