Add SmartPull
This commit is contained in:
117
main.pb
117
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
|
||||
|
Reference in New Issue
Block a user