diff --git a/main.pb b/main.pb index 6d68534..fb16c87 100644 --- a/main.pb +++ b/main.pb @@ -1343,6 +1343,119 @@ Procedure GetRemoteUrl(name.s="origin") EndIf 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() If Trim(GetGadgetText(#GdtFieldRemote))="" 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) -; CursorPosition = 2086 -; FirstLine = 2054 +; CursorPosition = 1438 +; FirstLine = 1415 ; Folding = ---------- ; Optimizer ; EnableThread