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