From d66e2a88a6f61d50cae8dd90452cbc62a10e7359 Mon Sep 17 00:00:00 2001 From: Thyphoon Date: Fri, 29 Aug 2025 17:08:18 +0200 Subject: [PATCH] Add Local and Remote Branch --- main2.pb | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 3 deletions(-) diff --git a/main2.pb b/main2.pb index 4c49aeb..4a05368 100644 --- a/main2.pb +++ b/main2.pb @@ -593,7 +593,7 @@ EndProcedure ; ----------------------------------------------------------------------------- ; Tooltips & i18n -; FR: Appeler après la création des gadgets, puis après tout changement de langue. +; FR: Appeler après la création des gadgets, puis après tout changement de langue ; EN: Call after creating gadgets, then after any language change. ; ----------------------------------------------------------------------------- @@ -1033,6 +1033,102 @@ Procedure GetGitRemoteUrl(name.s="origin") EndIf EndProcedure +Procedure GetGitLocalBranch() + If Git("branch")=0 + ProcedureReturn #True + Else + ProcedureReturn #False + EndIf +EndProcedure + +Procedure.s RefreshLocalBranchesList(Gdt.i) + ClearGadgetItems(Gdt) + + ; Parser ligne par ligne + Protected n.l = CountString(main\Gitcall\output, #LF$) + 1 + Protected i.l, line.s + + For i = 1 To n + line = StringField(main\Gitcall\output, i, #LF$) + line = Trim(line) + + If Len(line) = 0 + Continue ; Ignorer les lignes vides + EndIf + Protected selectbranch.b=#False + If Left(line,1)="*" + selectbranch=#True + line=Trim(StringField(line,2," ")) + EndIf + AddGadgetItem(Gdt,i-1,line) + If selectbranch=#True + SetGadgetState(Gdt,i-1) + EndIf + Next + +EndProcedure + +Procedure GetGitRemoteBranch() + If Git("branch -r")=0 + ProcedureReturn #True + Else + ProcedureReturn #False + EndIf +EndProcedure + +Procedure.s RefreshRemoteBranchesList(Gdt.i) + ClearGadgetItems(Gdt) + + ; Parser ligne par ligne + Protected n.l = CountString(main\Gitcall\output, #LF$) + 1 + Protected i.l, line.s, cleanBranchName.s, defaultBranch.s + Protected itemIndex.l + + ; Trouver d'abord la branche par défaut + For i = 1 To n + line = StringField(main\Gitcall\output, i, #LF$) + line = Trim(line) + + If FindString(line, "->", 1) + ; Extraire la branche par défaut depuis "origin/HEAD -> origin/main" + defaultBranch = Trim(StringField(line, 2, "->")) + If Left(defaultBranch, 8) = "remotes/" + defaultBranch = Right(defaultBranch, Len(defaultBranch) - 8) + EndIf + Break + EndIf + Next + + ; Ajouter les branches + For i = 1 To n + line = StringField(main\Gitcall\output, i, #LF$) + line = Trim(line) + + If Len(line) = 0 + Continue ; Ignorer les lignes vides + EndIf + + ; Ignorer la ligne origin/HEAD -> origin/main + If FindString(line, "->", 1) + Continue + EndIf + + ; Nettoyer le nom de la branche (enlever "remotes/" si présent) + cleanBranchName = line + If Left(cleanBranchName, 8) = "remotes/" + cleanBranchName = Right(cleanBranchName, Len(cleanBranchName) - 8) + EndIf + + itemIndex = CountGadgetItems(Gdt) + AddGadgetItem(Gdt, itemIndex, cleanBranchName) + + ; Sélectionner la branche par défaut + If cleanBranchName = defaultBranch + SetGadgetState(Gdt, itemIndex) + EndIf + Next +EndProcedure + ; --- Helper interne : scanne un dossier et alimente la liste Procedure _ScanFiles(path$, root$="") If root$="":root$=path$:EndIf @@ -1085,14 +1181,19 @@ Procedure RefreshFiles() ClearList(main\Files()) readDirectory() If main\IsRepository And GetGitVersion() + GetGitLocalBranch() + RefreshLocalBranchesList(#GID_CbLocalBranch) GetGitStatusPocelaine() ParseStatusPorcelaine(main\gitCall\output) If GetGitRemoteUrl() SetGadgetText(#GID_EdRemote,SupTrim(main\gitCall\output)) main\hasRemoteUrl=#True + GetGitRemoteBranch() + RefreshRemoteBranchesList(#GID_CbRemoteBranch) Else SetGadgetText(#GID_EdRemote,"") main\hasRemoteUrl=#False + ClearGadgetItems(#GID_CbRemoteBranch) EndIf EndIf Protected n.l=n-1 @@ -1243,8 +1344,8 @@ EndProcedure Main() ; IDE Options = PureBasic 6.21 (Windows - x64) -; CursorPosition = 591 -; FirstLine = 521 +; CursorPosition = 1191 +; FirstLine = 1159 ; Folding = ------ ; EnableXP ; DPIAware \ No newline at end of file