From 90d541639dd402dc6a5d41d600f6b95ceee6133a Mon Sep 17 00:00:00 2001 From: Basile Burg <basile.b@gmx.com> Date: Wed, 6 Jul 2016 01:24:15 +0200 Subject: [PATCH] libman, DUB fetch, support for dl the latest tag, close #57 + fix wrong usage of upgrade --- icons/other/tag_purple.png | Bin 0 -> 595 bytes lazproj/coedit.lpi | 3 +- src/ce_libmaneditor.pas | 95 +++++++++++++++++++++++++++---------- 3 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 icons/other/tag_purple.png diff --git a/icons/other/tag_purple.png b/icons/other/tag_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb022f2f797ca7973883aa24755a47bbfd109a5 GIT binary patch literal 595 zcmV-Z0<8UsP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz^+`lQRCwBqlTU9FK^Vs0-4yy2)I+N` zV@#A(G5rkQh#dU_2z&t&Z~Mm}uC?c;+Vr9%BwoCk^roccVw>HlwDga#S!q*Xmqmfy z$C*u*RD|L)c{7=r{XO%}J39jXhf1XqJkKKl!B`LkN+y#+IKEV>s={_$bZjSxR>wx0 zMX^`}H<+6Rr&3Qy*LBkOcB#>*)0L~&D3M5vvJt1k&s3x{8T!6orTO_NnP!7tt*$Qf z{$k>D)8RDLPL3!Njj}U~w6J)cvf0e1#f2LL-=A*4;Z!zF=9xtwA64k#hh_49`*c4Z zr+EAUFJVwbQ4}ZdY`YGQn#Wj)ZNhlJ7xXpj5Y@v2?AK~I{!xc4%ls5ef8BzrDsXyT zm@N}8V;j)l>DYR@1^ul7?e+%hRvni06TGk-=1gFqY1)#);4XukP7@k~jm@w4EN!DK zRRXiq?kUdOE$|FOcx3QApNHeRIJ3`DxV4UNYX|sJFtE!)i@ia6*n#uQ{RbWy<e5Rg zKS0N^VY815ch*r|Il+s&uhD~xzSjrOa2y^P@C8LtF!VjR1D8QP<ZrHFz#11{n*?7p z2uyfoxrY7#9&22(B2R_K4FVHMk`OAqs>^=$@wZUP<#P8Tk;o1ol*{GEd~Vib6DG`s hyBaLqSsDBhU;uYbb8>UOKluOv002ovPDHLkV1n?y6OaG^ literal 0 HcmV?d00001 diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi index 93bd9548..f6c2f0ca 100644 --- a/lazproj/coedit.lpi +++ b/lazproj/coedit.lpi @@ -13,7 +13,7 @@ <DpiAware Value="True"/> </XPManifest> <Icon Value="0"/> - <Resources Count="84"> + <Resources Count="85"> <Resource_0 FileName="../icons/window/layout_add.png" Type="RCDATA" ResourceName="LAYOUT_ADD"/> <Resource_1 FileName="../icons/window/layout.png" Type="RCDATA" ResourceName="LAYOUT"/> <Resource_2 FileName="../icons/window/application_go.png" Type="RCDATA" ResourceName="APPLICATION_GO"/> @@ -98,6 +98,7 @@ <Resource_81 FileName="../icons/arrow/arrow_pen.png" Type="RCDATA" ResourceName="ARROW_PEN"/> <Resource_82 FileName="../icons/arrow/arrow_down.png" Type="RCDATA" ResourceName="ARROW_DOWN"/> <Resource_83 FileName="../icons/other/case.png" Type="RCDATA" ResourceName="CASE"/> + <Resource_84 FileName="../icons/other/tag_purple.png" Type="RCDATA" ResourceName="TAG_PURPLE"/> </Resources> </General> <i18n> diff --git a/src/ce_libmaneditor.pas b/src/ce_libmaneditor.pas index c0a62047..ebae5297 100644 --- a/src/ce_libmaneditor.pas +++ b/src/ce_libmaneditor.pas @@ -17,14 +17,18 @@ type private class var fList: TStringList; cbb: TComboBox; - function getText: string; + fGetLatestTag: boolean; + function getPackageName: string; + function getPackageVersion: string; procedure getList(sender: TObject); + procedure btnTagCLick(sender: TObject); public - class function showAndWait(out value: string): TModalResult; static; + class function showAndWait(out pName, pVersion: string): TModalResult; static; class constructor classCtor; class destructor classDtor; constructor Create(TheOwner: TComponent); override; - property text: string read getText; + property packageName: string read getPackageName; + property packageVersion: string read getPackageVersion; end; { TCELibManEditorWidget } @@ -195,6 +199,7 @@ var bok: TBitBtn; bno: TBitBtn; bww: TBitBtn; + bsv: TSpeedButton; begin inherited; @@ -212,6 +217,20 @@ begin cbb.Items.AddStrings(fList); cbb.Sorted:= true; + bsv := TSpeedButton.Create(self); + bsv.Parent := self; + bsv.Align := alRight; + bsv.Width:= 28; + bsv.BorderSpacing.Around := 4; + bsv.ShowHint := true; + bsv.Hint := 'get latest tag, by default get master'; + bsv.OnClick:= @btnTagCLick; + bsv.AllowAllUp := true; + bsv.GroupIndex := 1; + bsv.Layout:= blGlyphTop; + bsv.Spacing:= 2; + AssignPng(bsv, 'TAG_PURPLE'); + bww := TBitBtn.Create(self); bww.Parent := self; bww.Align := alRight; @@ -249,6 +268,11 @@ begin AssignPng(bno, 'CANCEL'); end; +procedure TDubPackageQueryForm.btnTagCLick(sender: TObject); +begin + fGetLatestTag:= TSpeedButton(sender).down; +end; + procedure TDubPackageQueryForm.getList(sender: TObject); var pge: string; @@ -276,21 +300,49 @@ begin cbb.Items.AddStrings(fList); end; -function TDubPackageQueryForm.getText: string; +function TDubPackageQueryForm.getPackageName: string; begin result := cbb.Text; end; -class function TDubPackageQueryForm.showAndWait(out value: string): TModalResult; +function TDubPackageQueryForm.getPackageVersion: string; +begin + if fGetLatestTag then + begin + with TFPHTTPClient.Create(nil) do + try + try + result := Get('https://code.dlang.org/api/packages/' + packageName + '/latest'); + except + result := 'master'; + end; + finally + Free; + end; + if (result.length >= 7) and (result[2] in ['0'..'9']) then + result := result[2..result.length-1] + else + result := 'master'; + end + else result := 'master'; +end; + +class function TDubPackageQueryForm.showAndWait(out pName, pVersion: string): TModalResult; var frm: TDubPackageQueryForm; begin frm := TDubPackageQueryForm.Create(nil); result := frm.ShowModal; if result = mrOk then - value := frm.text + begin + pName := frm.packageName; + pVersion := frm.packageVersion; + end else - value := ''; + begin + pName := ''; + pVersion := '' + end; frm.Free; end; @@ -298,6 +350,7 @@ procedure TCELibManEditorWidget.btnDubFetchClick(Sender: TObject); var dub: TProcess; nme: string = ''; + ver: string; msg: string; pth: string; dfn: string; @@ -305,11 +358,10 @@ var itf: ICEMessagesDisplay; err: integer; prj: TCEDubProject; - upd: boolean = false; ovw: boolean = false; row: TListItem = nil; begin - if TDubPackageQueryForm.showAndWait(nme) <> mrOk then + if TDubPackageQueryForm.showAndWait(nme, ver) <> mrOk then exit; if List.Items.FindCaption(0, nme, false, false, false).isNotNil then begin @@ -318,35 +370,28 @@ begin else ovw := true; end; {$IFDEF WINDOWS} - pth := GetEnvironmentVariable('APPDATA') + '\dub\packages\' + nme + '-master'; + pth := GetEnvironmentVariable('APPDATA') + '\dub\packages\' + nme + '-' + ver; {$ELSE} - pth := GetEnvironmentVariable('HOME') + '/.dub/packages/' + nme + '-master'; + pth := GetEnvironmentVariable('HOME') + '/.dub/packages/' + nme + '-' + ver; {$ENDIF} itf := getMessageDisplay; if pth.dirExists and not DeleteDirectory(pth, false) then begin - upd := true; - itf.message('information, the dub package is already fetched and will be upgraded', nil, amcMisc, amkInf); + itf.message('the existing package cant be deleted. To be updated the package must be deleted manually', + nil, amcMisc, amkWarn); + exit; end; - // fetch / updgrade + // fetch dub := TProcess.Create(nil); try dub.Executable:= 'dub'; dub.Options:= [poUsePipes, poStderrToOutPut]; dub.ShowWindow:= swoHIDE; - if not upd then - begin - dub.Parameters.Add('fetch'); - dub.Parameters.Add(nme); - // fetch project, version handling, pth is hard to set because of semVer suffix. - // needed: a folder monitor to detect the one created by dub. + dub.Parameters.Add('fetch'); + dub.Parameters.Add(nme); + if ver = 'master' then dub.Parameters.Add('--version=~master'); - end else - begin - dub.CurrentDirectory := pth; - dub.Parameters.Add('upgrade'); - end; dub.Execute; while dub.Running do sleep(10); err := dub.ExitStatus;