From ee622d044eb6a2964dc2410e7b001234014b8039 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Mon, 17 Jan 2022 17:55:44 +1100 Subject: [PATCH] add integration test for staging view --- .../staging/expected/.git_keep/COMMIT_EDITMSG | 1 + .../staging/expected/.git_keep/FETCH_HEAD | 0 .../staging/expected/.git_keep/HEAD | 1 + .../staging/expected/.git_keep/config | 10 + .../staging/expected/.git_keep/description | 1 + .../staging/expected/.git_keep/index | Bin 0 -> 281 bytes .../staging/expected/.git_keep/info/exclude | 7 + .../staging/expected/.git_keep/logs/HEAD | 2 + .../expected/.git_keep/logs/refs/heads/master | 2 + .../05/9586b468b89bf98e3b62126f455ab15bea4a5f | Bin 0 -> 108 bytes .../12/c4186053ecd4056526743060a8fe87429b7306 | Bin 0 -> 2331 bytes .../3e/95c983db9349a26b20fccbdaa933e805ff817e | Bin 0 -> 367 bytes .../40/ce5b93f72e04cb876afaaf91398c2821260b95 | Bin 0 -> 394 bytes .../42/53d2597aec2a480a8e9054250e6b4aa5b76d9e | 2 + .../63/5b45efaba0c2415658bc121de201ec43a47920 | 4 + .../68/06c569c7c063ec7ed3d16da3faa32a1622bb4b | 2 + .../79/8369253f104fe8cdc91db6f7d3525be532218e | Bin 0 -> 369 bytes .../a0/425534134de68284a0a7250b83b0e6303f0ed7 | Bin 0 -> 2327 bytes .../a4/7182dc057408b3c6b1749cb46db0e0c5fd626b | Bin 0 -> 2328 bytes .../a4/8a7caa799e7859b8f21d373e3f01b06002d42f | Bin 0 -> 476 bytes .../b6/77e3e5777e122a22ebb001532c5017b199b0c0 | 2 + .../dc/02541428fdc15b30bd2174fcbcd43d388eab82 | Bin 0 -> 2331 bytes .../e8/aaa2f356eb341c693e239467fd200d0117b487 | 1 + .../fb/e09a11933b44ea60b46bd0f3d44142cb6189a4 | Bin 0 -> 108 bytes .../expected/.git_keep/refs/heads/master | 1 + test/integration/staging/expected/one.txt | 15 + test/integration/staging/expected/three.txt | 301 ++++++++++++++++++ test/integration/staging/expected/two.txt | 33 ++ test/integration/staging/files/one.txt | 15 + test/integration/staging/files/one_new.txt | 15 + test/integration/staging/files/three.txt | 300 +++++++++++++++++ test/integration/staging/files/three_new.txt | 298 +++++++++++++++++ test/integration/staging/files/two.txt | 33 ++ test/integration/staging/files/two_new.txt | 33 ++ test/integration/staging/recording.json | 1 + test/integration/staging/setup.sh | 18 ++ test/integration/staging/test.json | 4 + 37 files changed, 1102 insertions(+) create mode 100644 test/integration/staging/expected/.git_keep/COMMIT_EDITMSG create mode 100644 test/integration/staging/expected/.git_keep/FETCH_HEAD create mode 100644 test/integration/staging/expected/.git_keep/HEAD create mode 100644 test/integration/staging/expected/.git_keep/config create mode 100644 test/integration/staging/expected/.git_keep/description create mode 100644 test/integration/staging/expected/.git_keep/index create mode 100644 test/integration/staging/expected/.git_keep/info/exclude create mode 100644 test/integration/staging/expected/.git_keep/logs/HEAD create mode 100644 test/integration/staging/expected/.git_keep/logs/refs/heads/master create mode 100644 test/integration/staging/expected/.git_keep/objects/05/9586b468b89bf98e3b62126f455ab15bea4a5f create mode 100644 test/integration/staging/expected/.git_keep/objects/12/c4186053ecd4056526743060a8fe87429b7306 create mode 100644 test/integration/staging/expected/.git_keep/objects/3e/95c983db9349a26b20fccbdaa933e805ff817e create mode 100644 test/integration/staging/expected/.git_keep/objects/40/ce5b93f72e04cb876afaaf91398c2821260b95 create mode 100644 test/integration/staging/expected/.git_keep/objects/42/53d2597aec2a480a8e9054250e6b4aa5b76d9e create mode 100644 test/integration/staging/expected/.git_keep/objects/63/5b45efaba0c2415658bc121de201ec43a47920 create mode 100644 test/integration/staging/expected/.git_keep/objects/68/06c569c7c063ec7ed3d16da3faa32a1622bb4b create mode 100644 test/integration/staging/expected/.git_keep/objects/79/8369253f104fe8cdc91db6f7d3525be532218e create mode 100644 test/integration/staging/expected/.git_keep/objects/a0/425534134de68284a0a7250b83b0e6303f0ed7 create mode 100644 test/integration/staging/expected/.git_keep/objects/a4/7182dc057408b3c6b1749cb46db0e0c5fd626b create mode 100644 test/integration/staging/expected/.git_keep/objects/a4/8a7caa799e7859b8f21d373e3f01b06002d42f create mode 100644 test/integration/staging/expected/.git_keep/objects/b6/77e3e5777e122a22ebb001532c5017b199b0c0 create mode 100644 test/integration/staging/expected/.git_keep/objects/dc/02541428fdc15b30bd2174fcbcd43d388eab82 create mode 100644 test/integration/staging/expected/.git_keep/objects/e8/aaa2f356eb341c693e239467fd200d0117b487 create mode 100644 test/integration/staging/expected/.git_keep/objects/fb/e09a11933b44ea60b46bd0f3d44142cb6189a4 create mode 100644 test/integration/staging/expected/.git_keep/refs/heads/master create mode 100644 test/integration/staging/expected/one.txt create mode 100644 test/integration/staging/expected/three.txt create mode 100644 test/integration/staging/expected/two.txt create mode 100644 test/integration/staging/files/one.txt create mode 100644 test/integration/staging/files/one_new.txt create mode 100644 test/integration/staging/files/three.txt create mode 100644 test/integration/staging/files/three_new.txt create mode 100644 test/integration/staging/files/two.txt create mode 100644 test/integration/staging/files/two_new.txt create mode 100644 test/integration/staging/recording.json create mode 100644 test/integration/staging/setup.sh create mode 100644 test/integration/staging/test.json diff --git a/test/integration/staging/expected/.git_keep/COMMIT_EDITMSG b/test/integration/staging/expected/.git_keep/COMMIT_EDITMSG new file mode 100644 index 000000000..9daeafb98 --- /dev/null +++ b/test/integration/staging/expected/.git_keep/COMMIT_EDITMSG @@ -0,0 +1 @@ +test diff --git a/test/integration/staging/expected/.git_keep/FETCH_HEAD b/test/integration/staging/expected/.git_keep/FETCH_HEAD new file mode 100644 index 000000000..e69de29bb diff --git a/test/integration/staging/expected/.git_keep/HEAD b/test/integration/staging/expected/.git_keep/HEAD new file mode 100644 index 000000000..cb089cd89 --- /dev/null +++ b/test/integration/staging/expected/.git_keep/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/test/integration/staging/expected/.git_keep/config b/test/integration/staging/expected/.git_keep/config new file mode 100644 index 000000000..8ae104545 --- /dev/null +++ b/test/integration/staging/expected/.git_keep/config @@ -0,0 +1,10 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true + ignorecase = true + precomposeunicode = true +[user] + email = CI@example.com + name = CI diff --git a/test/integration/staging/expected/.git_keep/description b/test/integration/staging/expected/.git_keep/description new file mode 100644 index 000000000..498b267a8 --- /dev/null +++ b/test/integration/staging/expected/.git_keep/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/test/integration/staging/expected/.git_keep/index b/test/integration/staging/expected/.git_keep/index new file mode 100644 index 0000000000000000000000000000000000000000..cdf1e9ab68fff6ffda5312ec9ee6cf35b56bd649 GIT binary patch literal 281 zcmZ?q402{*U|<4bW+27^8kZnTIGl@~{9TXbbbHpX^%E_7G!)gir!uhT=cVeERFohq z#9*VEv!t-;4r>X==3^U6=4{E`@Zjj*q-+Mxl8mBMh)Ic0g_ao4+iU=#`J)&a7+9J3 zivBV%fXre13N&5>= 1642402468 +1100 commit (initial): file1 +6806c569c7c063ec7ed3d16da3faa32a1622bb4b 4253d2597aec2a480a8e9054250e6b4aa5b76d9e CI 1642402495 +1100 commit: test diff --git a/test/integration/staging/expected/.git_keep/logs/refs/heads/master b/test/integration/staging/expected/.git_keep/logs/refs/heads/master new file mode 100644 index 000000000..8ad145985 --- /dev/null +++ b/test/integration/staging/expected/.git_keep/logs/refs/heads/master @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 6806c569c7c063ec7ed3d16da3faa32a1622bb4b CI 1642402468 +1100 commit (initial): file1 +6806c569c7c063ec7ed3d16da3faa32a1622bb4b 4253d2597aec2a480a8e9054250e6b4aa5b76d9e CI 1642402495 +1100 commit: test diff --git a/test/integration/staging/expected/.git_keep/objects/05/9586b468b89bf98e3b62126f455ab15bea4a5f b/test/integration/staging/expected/.git_keep/objects/05/9586b468b89bf98e3b62126f455ab15bea4a5f new file mode 100644 index 0000000000000000000000000000000000000000..08eb1a0d1f8118264aaebb8e2c5c8afbb6438d77 GIT binary patch literal 108 zcmV-y0F(cC0V^p=O;s>7FlR6{FfcPQQOM6r)hnqeVQ@GXJ^8yH%jx#4U+X7Y_Gl=o zaZiORDaiop0V`Tk*mQ@rgk$rujU{uo*p4kvl%gn%mhk OZb)Fdq7MM6aV*|{r!SWP literal 0 HcmV?d00001 diff --git a/test/integration/staging/expected/.git_keep/objects/12/c4186053ecd4056526743060a8fe87429b7306 b/test/integration/staging/expected/.git_keep/objects/12/c4186053ecd4056526743060a8fe87429b7306 new file mode 100644 index 0000000000000000000000000000000000000000..65f9a5559d70daf1378f8d53f379bd8a9c81aab9 GIT binary patch literal 2331 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 literal 0 HcmV?d00001 diff --git a/test/integration/staging/expected/.git_keep/objects/42/53d2597aec2a480a8e9054250e6b4aa5b76d9e b/test/integration/staging/expected/.git_keep/objects/42/53d2597aec2a480a8e9054250e6b4aa5b76d9e new file mode 100644 index 000000000..ed016e977 --- /dev/null +++ b/test/integration/staging/expected/.git_keep/objects/42/53d2597aec2a480a8e9054250e6b4aa5b76d9e @@ -0,0 +1,2 @@ +xA +0@Q9Ed4"BW=L:AR#x|{em-d8]:̘H"%IYjN/Oj{v+=H"<#Ntavg='n+ \ No newline at end of file diff --git a/test/integration/staging/expected/.git_keep/objects/79/8369253f104fe8cdc91db6f7d3525be532218e b/test/integration/staging/expected/.git_keep/objects/79/8369253f104fe8cdc91db6f7d3525be532218e new file mode 100644 index 0000000000000000000000000000000000000000..f38ecd0b6f8cbcf50907b2081f028204fc6a3e54 GIT binary patch literal 369 zcmV-%0gnE70Zmc6Zrm^sbgi$LRBm*tk`zuAz{OQ|02iq#aU~MB;wpR`ah*THUzjiP zl7@o-Y`8O+nVp?kW_Qwpd)J2=0OSVXu3Gb`Nrzf80eRM+{0ba-YTHtdwrDf^J%1EfSa&^ zB5XBW*{9)2ko4y%>Jo?Xwl#b4%LQgL+C|1$J36FNOw)h*BmTa=;S!{_>atV2nR3=h zduv}xbC8|J;iukYi|r~=gU9sn(FU2t;fPW!R=>H1&e3d1`|dPI_`L8c5$vy&ejrG0 P1|!;R<;H&p7)8djv(~*( literal 0 HcmV?d00001 diff --git a/test/integration/staging/expected/.git_keep/objects/a0/425534134de68284a0a7250b83b0e6303f0ed7 b/test/integration/staging/expected/.git_keep/objects/a0/425534134de68284a0a7250b83b0e6303f0ed7 new file mode 100644 index 0000000000000000000000000000000000000000..258d99746b7a79a86fd3cb3542495b89a05cc4a4 GIT binary patch literal 2327 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 literal 0 HcmV?d00001 diff --git a/test/integration/staging/expected/.git_keep/objects/a4/8a7caa799e7859b8f21d373e3f01b06002d42f b/test/integration/staging/expected/.git_keep/objects/a4/8a7caa799e7859b8f21d373e3f01b06002d42f new file mode 100644 index 0000000000000000000000000000000000000000..428e84de6df777c260fbf90acbe9d561b84768d5 GIT binary patch literal 476 zcmV<20VDo+0cDa;YvV8w#e20s#k7aiDaP$#FB|Zo+e0aAw+q=@$U(6uiKr|Y{b?{E z-@P+dow#c-21{>d-tUb!%5320kB2MYwFs3(;qeu9cx$~h+JW;nR346L;`Zk7By@!e zHpZy*l&0IDE68?1!rgO_^HF)`rB}$+Qtxt*9vcU%^<6`)U+5zrX@^mh;d4N1jpgBT zJ1r0~1Yy0hqm)u5$fWv@TY z(}bc-xYv?gW5MxrMh?mt9Nor&kJgIL!J>plykoXn4^DDWsH6Eg^fC z1#~9d(kdK!xJ>MK@ii{OIWW3!!`VYCG^zrAiTcv^x`4;lD6^C3atIFX4Z-&5otge4 zC`Sa&cM5CTB4^SE@J-B+(`0&fihn3AFAPgQ%+6PAg}l&fysVX6(;A089nWeOo&c4@ S81J-Z>d#>7Y|\OEotD=FƓ&mHDVR+q%)\KǛ#;dHaOB6 +Q» 8h*%KM}Q2"HGkϟ[`:DBUuJO=+4<3Zpo~lFU<WJy߯FMdqn&E۞8|m/)x_ 87עJU (?"#o -΢@ \ No newline at end of file diff --git a/test/integration/staging/expected/.git_keep/objects/dc/02541428fdc15b30bd2174fcbcd43d388eab82 b/test/integration/staging/expected/.git_keep/objects/dc/02541428fdc15b30bd2174fcbcd43d388eab82 new file mode 100644 index 0000000000000000000000000000000000000000..2327699862d5eee85223b4d2b72b73b4a9e8787a GIT binary patch literal 2331 zcmV+$3FP*80o7S;Z`;Tb?pNtoZ1f?K4laE~3lw$X0}R*p31`bjEMKk&0%J`sDV`~k zsg&WpOq59KbT~|x zWl>TL=E3 z_&gkFCwQLbN*o-LPlIbCjS8-48_mKx@cKw>8hsiL(pao5JvKXWuXmh~CiN&Ay_e~?}v*mjnJ z&9Jh^Xm2w~vEpY;xsql9Q*5~ZW+O(3jTUfh1aPvO^jQ+8nbL0+5Ul3Kg-mnUqN=K> zc9?RCH8TzjxCqYN0tk7nQgNm9f)xLlss}x8J-955CZ`XUczYmTe}uqI86kd}Hv^NJ zOdW{PXpaO3M(XX2tPB=81~PNIl_YPxSL?Vv%w72J~LM zvR-`sn$N(`g72lC<{4u3LRE=6F7h}_L!;ZSwkIRZn%AdQvE(f|^v7^P zEH%NqqPj<2nGmT%bybEF0O|A_hKe8v(@RT&FKVMcDIL7ENFf1u4L=Ufi}0Qjh6Ekps7QPeFNhP6Q-*^` z#j4`|cG942z1fY>G{d^?eXPoe)7}& z_J@;y+bjlQi3+%1m_@3E1bZ>)1R|`pDVAa^wJ1s)Kt;k7qShoyPTn}vMBJ%R*2s?s zCD0inD6vezDpw+=MgY=@DvxIK2>Gmdz&Sc-b#P&qpjVJW+lzYq(-0bVu}@g&20UbK zSXY(Gje}!6p_)i|Z2{(&Uzn){NpNfz5~fy|v{{6y)ly&Rz~5Q3=7Ni(>FoC6{9kqTF<;=gGxAqej~5|N>3<5*Z^O5Y;4l27B@c1GPj%> zysk4t;!D6bURSp#zQyrkP`+Ex4$@B?fJhX7v&;t(ORtC>VYd~{u-WSL9|~EP;F4f@ zw4c>R&{3Ca*t~t&M@CJB>CjQPKj74RB2)R8j-@9rM__J^{Hh0MZ~KrVui^Bl8J2~6 zmr#zkdXN?4w!soxCz1wuQqbj~>`YcgN`jeOs@_&_OXmr?LS;8z+1E-76f^h!GUqg7 zCV!053b#@Yl76Q1qV>?_*a4a-`fsF)xyYXgfxLER!WVkthA^4H&}Aoxnm>(7uhLEE5}8&)ij$ZQL15b@O!G zU2O|<=P9XVA2#dkUYn~|MT(BY;5KWz(#Q+P%~?0n|0Tnben?HYz(7eOl*NU>_bS$E z_QqrtqJqAd{3pdScE$X_XL#2 z>evH=*urbAhiShn6st8h`*ovis?U{-k?hph2pw`_J8s&jZ3W)996IX;@(fN}O=qyO zb&Qr~MRLT~LVlLE-z;D}q*5s-RVYn9fL~HiHi&Q2B-!G+iZPM0zdeVfZqc4=xQB1G z&z*?;^#TiT@}8OpAKPw)K;s_N!*_&3pVhg zE3QGtxa(ay%dN8v$=mHVRHNWtTHxs8|3jEt58JEBZUlW@l7fC=@4M)_W)vi;N%=N; z#F5|PT^qe(bS(3{Fv7}<)>4EE!Cu?eM)oo#-ng;yQ4WFNw5U#GxFBJBwZ+HugE4(+ zCDE$g^-ruFk8cJnM-=ZxKX@==lEB|~kObd65l&R@naS8T=-=>Px7^<&{s+|co)(Jo Bi+TV6 literal 0 HcmV?d00001 diff --git a/test/integration/staging/expected/.git_keep/objects/e8/aaa2f356eb341c693e239467fd200d0117b487 b/test/integration/staging/expected/.git_keep/objects/e8/aaa2f356eb341c693e239467fd200d0117b487 new file mode 100644 index 000000000..f444e5a1e --- /dev/null +++ b/test/integration/staging/expected/.git_keep/objects/e8/aaa2f356eb341c693e239467fd200d0117b487 @@ -0,0 +1 @@ +x==0 S/4ީ-*@vllі0gr0'ɓY )/.8I2Mpp_D;⇘F<= oaq6bV =1IV#:w+6#&8{/ _kv(WmJ]z)} ]dαk™Yx*81<ȩp ~TC;k>^%G g ffPˆKΰ%x1\hhgD Ljۈdϟ[`:H YkKWEKtQqmaCRn~?QnR kmtqνs+|"x_!fvؓVůe'ڟwA/Z4!oZZ- b \ No newline at end of file diff --git a/test/integration/staging/expected/.git_keep/objects/fb/e09a11933b44ea60b46bd0f3d44142cb6189a4 b/test/integration/staging/expected/.git_keep/objects/fb/e09a11933b44ea60b46bd0f3d44142cb6189a4 new file mode 100644 index 0000000000000000000000000000000000000000..3d85419a662afad522df41870cbf387b089d0008 GIT binary patch literal 108 zcmV-y0F(cC0V^p=O;s>7FlR6{FfcPQQOM6r)hnqeVR*4>(dV$&CNi0J%2U$+D)2Ij zZ)t}rDaiop0V`VI6lx;u`>d&D!E#mZ<_*sb?D?+46qV>>>>> lines actually staged + if node.GetHasInlineMergeConflicts() { + return gui.createErrorPanel(gui.Tr.ErrStageDirWithInlineMergeConflicts) + } + + if node.GetHasUnstagedChanges() { + gui.logAction(gui.Tr.Actions.StageFile) + if err := gui.Git.WorkingTree.StageFile(node.Path); err != nil { + return gui.surfaceError(err) + } + } else { + // pretty sure it doesn't matter that we're always passing true here + gui.logAction(gui.Tr.Actions.UnstageFile) + if err := gui.Git.WorkingTree.UnStageFile([]string{node.Path}, true); err != nil { + return gui.surfaceError(err) + } + } + } + + if err := gui.refreshSidePanels(refreshOptions{scope: []RefreshableView{FILES}}); err != nil { + return err + } + + return gui.State.Contexts.Files.HandleFocus() +} + +func (gui *Gui) allFilesStaged() bool { + for _, file := range gui.State.FileManager.GetAllFiles() { + if file.HasUnstagedChanges { + return false + } + } + return true +} + +func (gui *Gui) onFocusFile() error { + gui.takeOverMergeConflictScrolling() + return nil +} + +func (gui *Gui) handleStageAll() error { + var err error + if gui.allFilesStaged() { + gui.logAction(gui.Tr.Actions.UnstageAllFiles) + err = gui.Git.WorkingTree.UnstageAll() + } else { + gui.logAction(gui.Tr.Actions.StageAllFiles) + err = gui.Git.WorkingTree.StageAll() + } + if err != nil { + _ = gui.surfaceError(err) + } + + if err := gui.refreshSidePanels(refreshOptions{scope: []RefreshableView{FILES}}); err != nil { + return err + } + + return gui.State.Contexts.Files.HandleFocus() +} + +func (gui *Gui) handleIgnoreFile() error { + node := gui.getSelectedFileNode() + if node == nil { + return nil + } + + if node.GetPath() == ".gitignore" { + return gui.createErrorPanel("Cannot ignore .gitignore") + } + + unstageFiles := func() error { + return node.ForEachFile(func(file *models.File) error { + if file.HasStagedChanges { + if err := gui.Git.WorkingTree.UnStageFile(file.Names(), file.Tracked); err != nil { + return err + } + } + + return nil + }) + } diff --git a/test/integration/staging/files/three_new.txt b/test/integration/staging/files/three_new.txt new file mode 100644 index 000000000..500ce9c2b --- /dev/null +++ b/test/integration/staging/files/three_new.txt @@ -0,0 +1,298 @@ +package gui + +import ( + "fmt" + "regexp" + "strings" + + "github.com/jesseduffield/lazygit/pkg/commands/git_commands" + "github.com/jesseduffield/lazygit/pkg/commands/loaders" + "github.com/jesseduffield/lazygit/pkg/commands/models" + "github.com/jesseduffield/lazygit/pkg/config" + "github.com/jesseduffield/lazygit/pkg/gui/nodetree" + "github.com/jesseduffield/lazygit/pkg/utils" +) + +// list panel functions + +func (gui *Gui) getSelectednodeNode() *nodetree.nodeNode { + selectedLine := gui.State.Panels.nodes.SelectedLineIdx + if selectedLine == -1 { + return nil + } + + return gui.State.nodeManager.GetItemAtIndex(selectedLine) +} + +func (gui *Gui) getSelectednode() *models.node { + node := gui.getSelectednodeNode() + if node == nil { + return nil + } + return node.node +} + +func (gui *Gui) getSelectedPath() string { + node := gui.getSelectednodeNode() + if node == nil { + return "" + } + + return node.GetPath() +} + +func (gui *Gui) nodesRenderToMain() error { + node := gui.getSelectednodeNode() + + if node == nil { + return gui.refreshMainViews(refreshMainOpts{ + main: &viewUpdateOpts{ + title: "", + task: NewRenderStringTask(gui.Tr.NoChangednodes), + }, + }) + } + + if node.node != nil && node.File.HasInlineMergeConflicts { + return gui.renderConflictsFromFilesPanel() + } + + cmdObj := gui.Git.WorkingTree.WorktreeFileDiffCmdObj(node, false, !node.GetHasUnstagedChanges() && node.GetHasStagedChanges(), gui.State.IgnoreWhitespaceInDiffView) + + refreshOpts := refreshMainOpts{main: &viewUpdateOpts{ + title: gui.Tr.UnstagedChanges, + task: NewRunPtyTask(cmdObj.GetCmd()), + }} + + if node.GetHasUnstagedChanges() { + if node.GetHasStagedChanges() { + cmdObj := gui.Git.WorkingTree.WorktreeFileDiffCmdObj(node, false, true, gui.State.IgnoreWhitespaceInDiffView) + + refreshOpts.secondary = &viewUpdateOpts{ + title: gui.Tr.StagedChanges, + task: NewRunPtyTask(cmdObj.GetCmd()), + } + } + } else { + refreshOpts.main.title = gui.Tr.StagedChanges + } + + return gui.refreshMainViews(refreshOpts) +} + +func (gui *Gui) refreshFilesAndSubmodules() error { + gui.Mutexes.RefreshingFilesMutex.Lock() + gui.State.IsRefreshingFiles = true + defer func() { + gui.State.IsRefreshingFiles = false + gui.Mutexes.RefreshingFilesMutex.Unlock() + }() + + selectedPath := gui.getSelectedPath() + + if err := gui.refreshStateSubmoduleConfigs(); err != nil { + return err + } + if err := gui.refreshStateFiles(); err != nil { + return err + } + + gui.OnUIThread(func() error { + if err := gui.postRefreshUpdate(gui.State.Contexts.Submodules); err != nil { + gui.Log.Error(err) + } + + if ContextKey(gui.Views.Files.Context) == FILES_CONTEXT_KEY { + // doing this a little custom (as opposed to using gui.postRefreshUpdate) because we handle selecting the file explicitly below + if err := gui.State.Contexts.Files.HandleRender(); err != nil { + return err + } + } + + if gui.currentContext().GetKey() == FILES_CONTEXT_KEY || (gui.g.CurrentView() == gui.Views.Main && ContextKey(gui.g.CurrentView().Context) == MAIN_MERGING_CONTEXT_KEY) { + newSelectedPath := gui.getSelectedPath() + alreadySelected := selectedPath != "" && newSelectedPath == selectedPath + if !alreadySelected { + gui.takeOverMergeConflictScrolling() + } + + gui.Views.Files.FocusPoint(0, gui.State.Panels.Files.SelectedLineIdx) + return gui.filesRenderToMain() + } + + return nil + }) + + return nil +} + +// specific functions + +func (gui *Gui) stagedFiles() []*models.File { + files := gui.State.FileManager.GetAllFiles() + result := make([]*models.File, 0) + for _, file := range files { + if file.HasStagedChanges { + result = append(result, file) + } + } + return result +} + +func (gui *Gui) trackedFiles() []*models.File { + files := gui.State.FileManager.GetAllFiles() + result := make([]*models.File, 0, len(files)) + for _, file := range files { + if file.Tracked { + result = append(result, file) + } + } + return result +} + +func (gui *Gui) stageSelectedFile() error { + file := gui.getSelectedFile() + if file == nil { + return nil + } + + return gui.Git.WorkingTree.StageFile(file.Name) +} + +func (gui *Gui) handleEnterFile() error { + return gui.enterFile(OnFocusOpts{ClickedViewName: "", ClickedViewLineIdx: -1}) +} + +func (gui *Gui) enterFile(opts OnFocusOpts) error { + node := gui.getSelectedFileNode() + if node == nil { + return nil + } + + if node.File == nil { + return gui.handleToggleDirCollapsed() + } + + file := node.File + + submoduleConfigs := gui.State.Submodules + if file.IsSubmodule(submoduleConfigs) { + submoduleConfig := file.SubmoduleConfig(submoduleConfigs) + return gui.enterSubmodule(submoduleConfig) + } + + if file.HasInlineMergeConflicts { + return gui.switchToMerge() + } + if file.HasMergeConflicts { + return gui.createErrorPanel(gui.Tr.FileStagingRequirements) + } + + return gui.pushContext(gui.State.Contexts.Staging, opts) +} + +func (gui *Gui) handleFilePress() error { + node := gui.getSelectedFileNode() + if node == nil { + return nil + } + + if node.IsLeaf() { + file := node.File + + if file.HasInlineMergeConflicts { + return gui.switchToMerge() + } + + if node.HasUnstagedChanges { + gui.logAction(gui.Tr.Actions.Stagenode) + if err := gui.Git.WorkingTree.Stagenode(node.Name); err != nil { + return gui.surfaceError(err) + } + } else { + gui.logAction(gui.Tr.Actions.Unstagenode) + if err := gui.Git.WorkingTree.UnStagenode(node.Names(), node.Tracked); err != nil { + return gui.surfaceError(err) + } + } + } else { + if node.GetHasInlineMergeConflicts() { + return gui.createErrorPanel(gui.Tr.ErrStageDirWithInlineMergeConflicts) + } + + if node.GetHasUnstagedChanges() { + gui.logAction(gui.Tr.Actions.Stagenode) + if err := gui.Git.WorkingTree.Stagenode(node.Path); err != nil { + return gui.surfaceError(err) + } + } else { + // pretty sure it doesn't matter that we're always passing true here + gui.logAction(gui.Tr.Actions.Unstagenode) + if err := gui.Git.WorkingTree.UnStagenode([]string{node.Path}, true); err != nil { + return gui.surfaceError(err) + } + } + } + + if err := gui.blah(refreshOptions{scope: []RefreshableView{nodeS}}); err != nil { + return err + } + + return gui.State.Contexts.nodes.HandleFocus() +} + +func (gui *Gui) allnodesStaged() bool { + for _, node := range gui.State.nodeManager.GetAllnodes() { + if node.HasUnstagedChanges { + return false + } + } + return true +} + +func (gui *Gui) onFocusnode() error { + gui.takeOverMergeConflictScrolling() + return nil +} + +func (gui *Gui) handleStageAll() error { + var err error + if gui.allnodesStaged() { + gui.logAction(gui.Tr.Actions.UnstageAllnodes) + err = gui.Git.WorkingTree.UnstageAll() + } else { + gui.logAction(gui.Tr.Actions.StageAllnodes) + err = gui.Git.WorkingTree.StageAll() + } + if err != nil { + _ = gui.surfaceError(err) + } + + if err := gui.blah(refreshOptions{scope: []RefreshableView{nodeS}}); err != nil { + return err + } + + return gui.State.Contexts.nodes.HandleFocus() +} + +func (gui *Gui) handleIgnorenode() error { + node := gui.getSelectednodeNode() + if node == nil { + return nil + } + + if node.GetPath() == ".gitignore" { + return gui.createErrorPanel("Cannot ignore .gitignore") + } + + unstagenodes := func() error { + return node.ForEachnode(func(node *models.node) error { + if node.HasStagedChanges { + if err := gui.Git.WorkingTree.UnStagenode(node.Names(), node.Tracked); err != nil { + return err + } + } + + return nil + }) + } diff --git a/test/integration/staging/files/two.txt b/test/integration/staging/files/two.txt new file mode 100644 index 000000000..a48a7caa7 --- /dev/null +++ b/test/integration/staging/files/two.txt @@ -0,0 +1,33 @@ +type createMenuOptions struct { + showCancel bool +} + +func (gui *Gui) createMenu(title string, items []*menuItem, createMenuOptions createMenuOptions) error { + if createMenuOptions.showCancel { + // this is mutative but I'm okay with that for now + items = append(items, &menuItem{ + displayStrings: []string{gui.Tr.LcCancel}, + onPress: func() error { + return nil + }, + }) + } + + gui.State.MenuItems = items + + stringArrays := make([][]string, len(items)) + for i, item := range items { + if item.opensMenu && item.displayStrings != nil { + return errors.New("Message for the developer of this app: you've set opensMenu with displaystrings on the menu panel. Bad developer!. Apologies, user") + } + + if item.displayStrings == nil { + styledStr := item.displayString + if item.opensMenu { + styledStr = opensMenuStyle(styledStr) + } + stringArrays[i] = []string{styledStr} + } else { + stringArrays[i] = item.displayStrings + } + } diff --git a/test/integration/staging/files/two_new.txt b/test/integration/staging/files/two_new.txt new file mode 100644 index 000000000..bbe2a2f2c --- /dev/null +++ b/test/integration/staging/files/two_new.txt @@ -0,0 +1,33 @@ +type createMenuOptions struct { + showCancel bool +} + +func (gui *Gui) createMenu(title string, items []*menuItem, createMenuOptions createMenuOptions) error { + if createMenuOptions.showCancel { + // this is mutative but I'm okay with that for now + items = app(items, &menuItem{ + d: []string{gui.Tr.LcCancel}, + onPress: func() error { + return nil + }, + }) + } + + gui.State.MenuItems = items + + stringArrays := make([][]string, len(items)) + for i, items := range items { + if items.opensMenu && item.displayStrings != nil { + return errors.New("Message for the developer of this app: you've set opensMenu with displaystrings on the menu panel. Bad developer!. Apologies, user") + } + + if item.displayStrings == nil { + styledStr := item.displayString + if item.opensMenu { + styledStr = opensMenuStyle(styledStr) + } + stringArrays[0] = []str0ng{styledStr} + } else { + str0ngArrays[0] = item.displayStrings + } + } diff --git a/test/integration/staging/recording.json b/test/integration/staging/recording.json new file mode 100644 index 000000000..912fe35b0 --- /dev/null +++ b/test/integration/staging/recording.json @@ -0,0 +1 @@ +{"KeyEvents":[{"Timestamp":671,"Mod":0,"Key":13,"Ch":13},{"Timestamp":1095,"Mod":0,"Key":256,"Ch":32},{"Timestamp":1447,"Mod":0,"Key":256,"Ch":32},{"Timestamp":2608,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2743,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2973,"Mod":0,"Key":256,"Ch":118},{"Timestamp":3078,"Mod":0,"Key":258,"Ch":0},{"Timestamp":3215,"Mod":0,"Key":258,"Ch":0},{"Timestamp":3415,"Mod":0,"Key":256,"Ch":32},{"Timestamp":3920,"Mod":0,"Key":9,"Ch":9},{"Timestamp":4287,"Mod":0,"Key":257,"Ch":0},{"Timestamp":4431,"Mod":0,"Key":257,"Ch":0},{"Timestamp":4559,"Mod":0,"Key":257,"Ch":0},{"Timestamp":4848,"Mod":0,"Key":256,"Ch":32},{"Timestamp":5774,"Mod":0,"Key":9,"Ch":9},{"Timestamp":6031,"Mod":0,"Key":258,"Ch":0},{"Timestamp":6294,"Mod":0,"Key":257,"Ch":0},{"Timestamp":6374,"Mod":0,"Key":256,"Ch":118},{"Timestamp":6463,"Mod":0,"Key":258,"Ch":0},{"Timestamp":6591,"Mod":0,"Key":258,"Ch":0},{"Timestamp":6711,"Mod":0,"Key":256,"Ch":32},{"Timestamp":7274,"Mod":0,"Key":27,"Ch":0},{"Timestamp":7591,"Mod":0,"Key":258,"Ch":0},{"Timestamp":7968,"Mod":0,"Key":13,"Ch":13},{"Timestamp":8735,"Mod":0,"Key":256,"Ch":97},{"Timestamp":9039,"Mod":0,"Key":256,"Ch":32},{"Timestamp":9327,"Mod":0,"Key":258,"Ch":0},{"Timestamp":9478,"Mod":0,"Key":258,"Ch":0},{"Timestamp":9815,"Mod":0,"Key":256,"Ch":32},{"Timestamp":10439,"Mod":0,"Key":9,"Ch":9},{"Timestamp":11383,"Mod":0,"Key":256,"Ch":97},{"Timestamp":12095,"Mod":0,"Key":256,"Ch":97},{"Timestamp":12319,"Mod":0,"Key":257,"Ch":0},{"Timestamp":13039,"Mod":0,"Key":256,"Ch":32},{"Timestamp":14109,"Mod":0,"Key":27,"Ch":0},{"Timestamp":15119,"Mod":0,"Key":13,"Ch":13},{"Timestamp":15543,"Mod":0,"Key":256,"Ch":100},{"Timestamp":15855,"Mod":0,"Key":13,"Ch":13},{"Timestamp":16183,"Mod":0,"Key":256,"Ch":100},{"Timestamp":16415,"Mod":0,"Key":13,"Ch":13},{"Timestamp":16832,"Mod":0,"Key":258,"Ch":0},{"Timestamp":17150,"Mod":0,"Key":258,"Ch":0},{"Timestamp":17519,"Mod":0,"Key":256,"Ch":118},{"Timestamp":17654,"Mod":0,"Key":258,"Ch":0},{"Timestamp":17784,"Mod":0,"Key":258,"Ch":0},{"Timestamp":17903,"Mod":0,"Key":258,"Ch":0},{"Timestamp":18015,"Mod":0,"Key":258,"Ch":0},{"Timestamp":18150,"Mod":0,"Key":258,"Ch":0},{"Timestamp":18272,"Mod":0,"Key":258,"Ch":0},{"Timestamp":18567,"Mod":0,"Key":256,"Ch":100},{"Timestamp":18759,"Mod":0,"Key":13,"Ch":13},{"Timestamp":19254,"Mod":0,"Key":258,"Ch":0},{"Timestamp":19736,"Mod":0,"Key":259,"Ch":0},{"Timestamp":20358,"Mod":0,"Key":256,"Ch":100},{"Timestamp":20552,"Mod":0,"Key":13,"Ch":13},{"Timestamp":20871,"Mod":0,"Key":256,"Ch":100},{"Timestamp":20991,"Mod":0,"Key":13,"Ch":13},{"Timestamp":21433,"Mod":0,"Key":27,"Ch":0},{"Timestamp":21647,"Mod":0,"Key":258,"Ch":0},{"Timestamp":21943,"Mod":0,"Key":13,"Ch":13},{"Timestamp":22663,"Mod":0,"Key":256,"Ch":97},{"Timestamp":23207,"Mod":0,"Key":258,"Ch":0},{"Timestamp":23383,"Mod":0,"Key":258,"Ch":0},{"Timestamp":24039,"Mod":0,"Key":256,"Ch":100},{"Timestamp":24391,"Mod":0,"Key":13,"Ch":13},{"Timestamp":25141,"Mod":0,"Key":27,"Ch":0},{"Timestamp":25695,"Mod":0,"Key":256,"Ch":99},{"Timestamp":25959,"Mod":0,"Key":256,"Ch":116},{"Timestamp":26007,"Mod":0,"Key":256,"Ch":101},{"Timestamp":26191,"Mod":0,"Key":256,"Ch":115},{"Timestamp":26214,"Mod":0,"Key":256,"Ch":116},{"Timestamp":26464,"Mod":0,"Key":13,"Ch":13},{"Timestamp":27367,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]} \ No newline at end of file diff --git a/test/integration/staging/setup.sh b/test/integration/staging/setup.sh new file mode 100644 index 000000000..5ede99e27 --- /dev/null +++ b/test/integration/staging/setup.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +cd $1 + +git init + +git config user.email "CI@example.com" +git config user.name "CI" + +cp ../files/one.txt one.txt +cp ../files/two.txt two.txt +cp ../files/three.txt three.txt +git add . +git commit -am file1 + +cp ../files/one_new.txt one.txt +cp ../files/two_new.txt two.txt +cp ../files/three_new.txt three.txt diff --git a/test/integration/staging/test.json b/test/integration/staging/test.json new file mode 100644 index 000000000..9cadc6b85 --- /dev/null +++ b/test/integration/staging/test.json @@ -0,0 +1,4 @@ +{ + "description": "Staging a file line-by-line", + "speed": 20 +}