Add SmartPull

This commit is contained in:
2025-08-26 20:34:11 +02:00
parent d6b64885eb
commit 656b0e1c07

117
main.pb
View File

@@ -1343,6 +1343,119 @@ Procedure GetRemoteUrl(name.s="origin")
EndIf EndIf
EndProcedure EndProcedure
; =============================================================================
; Gestionnaire intelligent de pull avec résolution d'erreurs automatisée
; =============================================================================
Procedure.i SmartPull(remoteName.s = "origin", branchName.s = "")
; Pull avec 3 choix simples en cas de problème
; Retourne : 1=succès, 0=échec/annulé
; Branche par défaut = branche courante
If branchName = ""
main\GitCall\args = "branch --show-current"
If RunExe(@main\GitCall) = 0
branchName = _SupTrim(main\GitCall\output)
Else
branchName = "main"
EndIf
EndIf
; Tentative de pull standard
main\GitCall\args = "pull " + remoteName + " " + branchName
If RunExe(@main\GitCall) = 0
MessageRequester("Git Pull", "Pull réussi :" + #LF$ + main\GitCall\output, #PB_MessageRequester_Info)
ProcedureReturn 1
EndIf
; En cas d'échec, proposer les 3 options
Protected choice.i = MessageRequester("Problème lors du pull",
"Le pull a échoué :" + #LF$ +
main\GitCall\errors + #LF$ + #LF$ +
"Que voulez-vous faire ?" + #LF$ + #LF$ +
"OUI = ÉCRASER tout en local (ATTENTION: perte définitive)" + #LF$ +
"NON = SAUVEGARDER vos modifications puis pull" + #LF$ +
"ANNULER = Annuler l'opération",
#PB_MessageRequester_YesNoCancel | #PB_MessageRequester_Warning)
Select choice
Case #PB_MessageRequester_Yes ; Option 1: ÉCRASER
; Reset hard = synchronisation forcée avec le remote
main\GitCall\args = "reset --hard " + remoteName + "/" + branchName
If RunExe(@main\GitCall) = 0
MessageRequester("Écrasement terminé",
"Dépôt synchronisé avec le remote." + #LF$ +
"Toutes vos modifications locales ont été supprimées.",
#PB_MessageRequester_Info)
ProcedureReturn 1
Else
MessageRequester("Erreur", "Impossible d'écraser :" + #LF$ + main\GitCall\errors, #PB_MessageRequester_Error)
EndIf
Case #PB_MessageRequester_No ; Option 2: STASH + PULL + POP
; Sauvegarder
main\GitCall\args = "stash push -m " + Chr(34) + "Sauvegarde avant pull " + FormatDate("%yyyy-%mm-%dd %hh:%ii", Date()) + Chr(34)
If RunExe(@main\GitCall) <> 0
MessageRequester("Erreur", "Impossible de sauvegarder :" + #LF$ + main\GitCall\errors, #PB_MessageRequester_Error)
ProcedureReturn 0
EndIf
; Pull
main\GitCall\args = "pull " + remoteName + " " + branchName
If RunExe(@main\GitCall) <> 0
MessageRequester("Erreur", "Pull échoué :" + #LF$ + main\GitCall\errors, #PB_MessageRequester_Error)
; Restaurer le stash en cas d'échec
main\GitCall\args = "stash pop"
RunExe(@main\GitCall)
ProcedureReturn 0
EndIf
; Restaurer
main\GitCall\args = "stash pop"
If RunExe(@main\GitCall) = 0
MessageRequester("Pull terminé", "Pull réussi, vos modifications ont été restaurées.", #PB_MessageRequester_Info)
Else
If FindString(main\GitCall\errors, "CONFLICT") > 0
MessageRequester("Conflits à résoudre",
"Pull réussi mais conflits détectés." + #LF$ +
"Résolvez les conflits puis commitez.",
#PB_MessageRequester_Warning)
Else
MessageRequester("Attention",
"Pull réussi mais problème de restauration." + #LF$ +
"Vos modifications sont sauvegardées dans le stash.",
#PB_MessageRequester_Warning)
EndIf
EndIf
ProcedureReturn 1
Case #PB_MessageRequester_Cancel ; Option 3: ANNULER
MessageRequester("Pull annulé", "Aucune modification effectuée.", #PB_MessageRequester_Info)
EndSelect
ProcedureReturn 0
EndProcedure
; Fonction pour remplacer votre DoPull() actuelle
Procedure DoSmartPull()
If Trim(GetGadgetText(#GdtFieldRemote)) = ""
MessageRequester("Git Pull", "Vous devez configurer un remote.", #PB_MessageRequester_Error)
ProcedureReturn #False
EndIf
AddRemoteRepo(Trim(GetGadgetText(#GdtFieldRemote)))
Protected result.i = SmartPull("origin", GetGadgetText(#GdtSlctBranch))
If result > 0
CreateThread(@RefreshFileList(), 0) ; Refresh interface
EndIf
ProcedureReturn Bool(result > 0)
EndProcedure
Procedure DoPush() Procedure DoPush()
If Trim(GetGadgetText(#GdtFieldRemote))="" If Trim(GetGadgetText(#GdtFieldRemote))=""
MessageRequester("Git Push", "Échec: " + #LF$ + "You Must tu have a remote", #PB_MessageRequester_Error) MessageRequester("Git Push", "Échec: " + #LF$ + "You Must tu have a remote", #PB_MessageRequester_Error)
@@ -2286,8 +2399,8 @@ OpenGUI()
; IDE Options = PureBasic 6.21 (Windows - x64) ; IDE Options = PureBasic 6.21 (Windows - x64)
; CursorPosition = 2086 ; CursorPosition = 1438
; FirstLine = 2054 ; FirstLine = 1415
; Folding = ---------- ; Folding = ----------
; Optimizer ; Optimizer
; EnableThread ; EnableThread