Changement de version directe ok

parent 3e6c9936
__pycache__/ __pycache__/
venv/ venv/
.idea/ .idea/
dossierContenu*/
Bonjour, je suis un contenu 1 dans sa version 52 Bonjour, je suis un contenu 1 dans sa version 1
\ No newline at end of file
Bonjour, je suis un contenu 2 dans sa version 12 Bonjour, je suis un contenu 2 dans sa version 1
\ No newline at end of file
...@@ -52,3 +52,7 @@ Menu() ...@@ -52,3 +52,7 @@ Menu()
#print(Utils.getMaxIdEvaluations()) #print(Utils.getMaxIdEvaluations())
#print(Utils.getMaxIdContenusEnCours()) #print(Utils.getMaxIdContenusEnCours())
#print (Utils.getIdContenuAssocieAUnEnCours(1)) #print (Utils.getIdContenuAssocieAUnEnCours(1))
#from UtilsGit import UtilsGit
#UtilsGit.changerVersionCommit("/home/passerat/Stage/Squelette/dossierContenu1", "master")
...@@ -5,6 +5,7 @@ import os ...@@ -5,6 +5,7 @@ import os
## Classe Menu ## Classe Menu
# Affichage principal de l'application du squelette # Affichage principal de l'application du squelette
# Toutes les interactions utilisateur sont effectuées ici # Toutes les interactions utilisateur sont effectuées ici
from UtilsGit import UtilsGit
class Menu: class Menu:
...@@ -32,13 +33,14 @@ class Menu: ...@@ -32,13 +33,14 @@ class Menu:
if choix == 'p': if choix == 'p':
Utils.toutPeter() Utils.toutPeter()
self.menuDeBase() self.menuDeBase()
choix = Utils.switchAuteur(int(choix)) if choix.isdigit():
choix = Utils.switchAuteur(int(choix))
if choix != "Auteur inconnu": if choix != "Auteur inconnu":
if Utils.presenceUtilisateur(choix): if Utils.presenceUtilisateur(choix):
self.auteurEnCours = choix self.auteurEnCours = choix
self.menuDesActions() self.menuDesActions()
## Menu affiché une fois un compte valide sélectionné ## Menu affiché une fois un compte valide sélectionné
...@@ -132,8 +134,6 @@ class Menu: ...@@ -132,8 +134,6 @@ class Menu:
self.afficherContenus(questions) self.afficherContenus(questions)
# 1. On charge les contenus "mis en favori" de la banque # 1. On charge les contenus "mis en favori" de la banque
# print("Contenus mis en favori par l'auteur ", self.auteurEnCours, " : ",
# len(Utils.getFavoris(self.auteurEnCours)))
print(f"Contenus mis en favori par l'auteur {self.auteurEnCours} : {len(Utils.getFavoris(self.auteurEnCours))}") print(f"Contenus mis en favori par l'auteur {self.auteurEnCours} : {len(Utils.getFavoris(self.auteurEnCours))}")
if len(Utils.getFavoris(self.auteurEnCours)): if len(Utils.getFavoris(self.auteurEnCours)):
...@@ -183,11 +183,6 @@ class Menu: ...@@ -183,11 +183,6 @@ class Menu:
print("nom :", elt["fichier"], " - v", elt["versionEnCours"]["numero"], " - du", print("nom :", elt["fichier"], " - v", elt["versionEnCours"]["numero"], " - du",
elt["versionEnCours"]["date"]) elt["versionEnCours"]["date"])
"""
La deuxième est pour les contenus de la banque. Certains champs supplémentaires apparaissent
(On verra + tard si une mutualisation de code est jouable)
"""
## Fonction d'affichage des contenus 'banque' ## Fonction d'affichage des contenus 'banque'
def afficherContenusBanque(self, contenu): def afficherContenusBanque(self, contenu):
...@@ -419,34 +414,54 @@ class Menu: ...@@ -419,34 +414,54 @@ class Menu:
action = choix[len(choix) - 1:] action = choix[len(choix) - 1:]
print("id :", id) print("id :", id)
print("id type :", type(id))
print("action :", action) print("action :", action)
print("action c :", action == 'c')
idContenu = Utils.getIdContenuAssocieAUnEnCours(int(id))
print ("id contenu associé : ", idContenu)
# affiche le contenu courant du fichier # affiche le contenu courant du fichier
if action == 'c': if action == 'c':
Utils.changerVersion(int(id), self.auteurEnCours, "version") print("je suis dans action c")
print(Utils.getIdContenuAssocieAUnEnCours(int(id)))
Utils.affichage(Utils.getFichierContenu(Utils.getIdContenuAssocieAUnEnCours(int(id)))) Utils.changerVersion(idContenu, 0, Utils.getBrancheContenuEnCours(idContenu))
#exit(0)
Utils.affichage(Utils.getCheminDuContenu(idContenu))
#print("Uoi")
elif action == 'm': elif action == 'm':
Utils.changerVersion(int(id), self.auteurEnCours, "version") Utils.changerVersion(idContenu, 0, Utils.getBrancheContenuEnCours(idContenu))
Utils.modifierContenu(Utils.getIdContenuAssocieAUnEnCours(int(id)), self.auteurEnCours, True) Utils.modifierContenu(idContenu, self.auteurEnCours, True)
Utils.affichage(Utils.getFichierContenu(Utils.getIdContenuAssocieAUnEnCours(int(id)))) Utils.affichage(Utils.getCheminDuContenu(idContenu))
elif action == 's': elif action == 's':
Utils.supprimerContenuEnCours(int(id)) Utils.supprimerContenuEnCours(int(id))
elif action == 'v': elif action == 'v':
self.validerModification(int(id)) self.validerModification(int(id))
elif action == 'n': elif action == 'n':
Utils.ajouterContenu(Utils.getFichierContenu(Utils.getIdContenuAssocieAUnEnCours(int(id))), chemin = Utils.getCheminDuContenu(Utils.getIdContenuAssocieAUnEnCours(int(id)))
self.auteurEnCours)
Utils.creerNouveauContenu(chemin,
self.auteurEnCours, id)
self.consulterPanier()
elif action == 'q': elif action == 'q':
self.menuDesActions() self.menuDesActions()
## changement de version d'un contenu OU demande de publication à l'auteur d'origine ## changement de version d'un contenu OU demande de publication à l'auteur d'origine
def validerModification(self, idContenuEnCours): def validerModification(self, idContenuEnCours):
# on récupère l'auteur et l'id du contenu "de base" associé à la modif
auteur = Utils.getAuteurContenuEnCours(idContenuEnCours) auteur = Utils.getAuteurContenuEnCours(idContenuEnCours)
idContenu = Utils.getIdContenuAssocieAUnEnCours(idContenuEnCours)
branche = Utils.getBrancheContenuEnCours(idContenuEnCours)
if auteur == self.auteurEnCours: if auteur == self.auteurEnCours:
print("Modification directe d'un auteur") print("Modification directe d'un auteur")
chemin = Utils.getCheminDuContenu(idContenu)
Utils.majContenu(chemin, idContenu, branche)
else: else:
print("Modification indirecte -> demande de publication") print("Modification indirecte -> demande de publication")
print("Je demande à l'auteur ", auteur, "de valider ma demande de proposition")
#self.consulterEnCours() #self.consulterEnCours()
...@@ -6,6 +6,7 @@ import os ...@@ -6,6 +6,7 @@ import os
from UtilsGit import UtilsGit from UtilsGit import UtilsGit
from pathlib import Path from pathlib import Path
## Classe utils. ## Classe utils.
# Permet de stocker les fonctions utilitaires "transversales" # Permet de stocker les fonctions utilitaires "transversales"
# #
...@@ -71,19 +72,26 @@ class Utils: ...@@ -71,19 +72,26 @@ class Utils:
print("nomFichier : ", Utils.chemin + "dossier" + nomFichier + "/") print("nomFichier : ", Utils.chemin + "dossier" + nomFichier + "/")
cheminFichier = Utils.chemin + "dossier" + nomFichier + "/"
# Un contenu doit être dans un répertoire isolé pour pouvoir le manipuler en versionnage # Un contenu doit être dans un répertoire isolé pour pouvoir le manipuler en versionnage
Path(Utils.chemin + "dossier" + nomFichier + "/").mkdir(parents=True, exist_ok=True) Path(cheminFichier).mkdir(parents=True, exist_ok=True)
os.replace(Utils.chemin + nomFichier, Utils.chemin + nomFichier + "/" + nomFichier) os.system("cp " + Utils.chemin + nomFichier + " " + cheminFichier + nomFichier)
commit = UtilsGit.commit(cheminFichier, nomFichier, "Version 1")
print ("commit : ", commit)
Utils.statdb.contenu.insert_one( Utils.statdb.contenu.insert_one(
{"id": max_id + 1, "auteur": auteur, "note": randrange(0, 10, 1), "fichier": "dossier" + nomFichier + "/" + nomFichier, {"id": max_id + 1, "auteur": auteur, "note": randrange(0, 10, 1),
"fichier": "dossier" + nomFichier + "/" + nomFichier,
"versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"), "versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"),
"popularite": 0, "branche": "master"}, "popularite": 0, "commit": commit},
"tags_fixes": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "tags_fixes": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1",
"5": "tag1"}, "5": "tag1"},
"tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}}) "tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}})
print("Le contenu a bien été ajouté pour l'utilisateur ", auteur) print("Le contenu a bien été ajouté pour l'utilisateur ", auteur)
## Consultation de tous les contenus publics : ## Consultation de tous les contenus publics :
# Si panier est égal à True, on sort les contenus de l'auteur # Si panier est égal à True, on sort les contenus de l'auteur
# Si panier est égal à False, on sort toutes les questions sauf celles de l'auteur # Si panier est égal à False, on sort toutes les questions sauf celles de l'auteur
...@@ -246,12 +254,12 @@ class Utils: ...@@ -246,12 +254,12 @@ class Utils:
# @param auteur l'utilisateur désirant modifier la question # @param auteur l'utilisateur désirant modifier la question
# @param isEnCours Vrai si modification d'un contenu en cours # @param isEnCours Vrai si modification d'un contenu en cours
@staticmethod @staticmethod
def modifierContenu(idContenu, auteur, isEnCours=False): def modifierContenu(idContenu, auteur, enCours = False):
# le chemin du fichier restera tjrs le même # le chemin du fichier restera tjrs le même
contenu = Utils.statdb.contenu.find_one({"id": int(idContenu)}) contenu = Utils.statdb.contenu.find_one({"id": int(idContenu)})
Utils.modification(Utils.chemin + contenu["fichier"], idContenu, auteur) Utils.modification(Utils.chemin + contenu["fichier"], idContenu, auteur, not enCours)
@staticmethod @staticmethod
## affichage d'un contenu de fichier ## affichage d'un contenu de fichier
...@@ -272,26 +280,45 @@ class Utils: ...@@ -272,26 +280,45 @@ class Utils:
@staticmethod @staticmethod
def modification(chemin, idContenu, auteur, modifPremiere=True): def modification(chemin, idContenu, auteur, modifPremiere=True):
print("Le chemin du fichier est : ", chemin)
# on récupère la fin du fichier (la version) # on récupère la fin du fichier (la version)
fin = Utils.affichage(chemin) fin = Utils.affichage(chemin)
version = int(fin[-1]) version = int(fin[-1])
if version == 1:
ecart = 2
else:
ecart = 1
repertoire = chemin[:chemin.rfind("/")+1]
nomFichier = chemin[chemin.rfind("/")+1:]
print ("nomFichier :", nomFichier)
print ("chemin :", chemin)
#exit(0)
if modifPremiere: if modifPremiere:
# on créée une nouvelle branche et on va dedans # on créée une nouvelle branche et on va dedans
nomBranche = "version" + str(version + 1) nomBranche = "version" + str(version + 1)
print("Je veux la branche", nomBranche) print("Je veux la branche", nomBranche)
UtilsGit.embranchement(repertoire, nomBranche)
UtilsGit.changerVersionBranche(repertoire, nomBranche)
# si on est pas en "modifPremiere" on est déja dans la bonne branche. # si on est pas en "modifPremiere" on est déja dans la bonne branche.
# 2. on remplace le dernier caractère du fichier en l'incrémentant de 1 # 2. on remplace le dernier caractère du fichier en l'incrémentant de 1
with open(chemin, "a") as fichier: with open(chemin, "r+") as fichier:
pos = fichier.tell() #pos = fichier.tell()
pos = pos - 1 #pos = pos - 1
fichier.seek(pos) fichier.seek(0, 2)
# seek to end of file; f.seek(0, os.SEEK_END) is legal
fichier.seek(fichier.tell() - ecart, 0)
fichier.truncate() fichier.truncate()
fichier.write(str(version + 1)) fichier.write(str(version + 1))
#fichier.seek(0, 2)
#print("pront:", fichier.read())
fichier.close() fichier.close()
Utils.affichage(chemin) Utils.affichage(chemin)
UtilsGit.commit(repertoire, nomFichier, "modification")
# si on est dans le cas d'une modification 1ere d'un contenu, on l'entre en bd (sinon il y est déja) # si on est dans le cas d'une modification 1ere d'un contenu, on l'entre en bd (sinon il y est déja)
if modifPremiere: if modifPremiere:
...@@ -300,25 +327,27 @@ class Utils: ...@@ -300,25 +327,27 @@ class Utils:
max_id_encours = 0 max_id_encours = 0
Utils.statdb.encours.insert_one( Utils.statdb.encours.insert_one(
{"idContenuEC": max_id_encours + 1, "date": datetime.now().strftime("%d/%m/%y"), "auteur": auteur, {"idContenuEC": max_id_encours + 1, "date": datetime.now().strftime("%d/%m/%y"), "auteur": auteur,
"reference": int(idContenu), "version": version, "branche": "sansObjet"}) "reference": int(idContenu), "version": version, "branche": nomBranche})
# et on créée une nouvelle branche pour accueillir ce contenu en cours
## Mettre à jour un contenu (branche principale) ## Mettre à jour un contenu (branche principale)
@staticmethod @staticmethod
def majContenu(chemin, idContenu, nomBranche): def majContenu(chemin, idContenu,nomBranche):
repertoire = chemin[:chemin.rfind("/") + 1]
fin = Utils.affichage(chemin) fin = Utils.affichage(chemin)
version = int(fin[-1]) version = int(fin[-1])
# Mise à jour des métadonnées
version_en_cours = Utils.statdb.contenu.find_one({"id": int(idContenu)})["versionEnCours"] # Mise à jour du répertoire git
idCommit = UtilsGit.mergeVersion(repertoire, nomBranche)
# Mise à jour des métadonnées - ok
version_en_cours = Utils.statdb.contenu.find_one({"id": idContenu})["versionEnCours"]
Utils.statdb.contenu.update_one({"id": int(idContenu)}, {"$push": {"historique": version_en_cours}}) Utils.statdb.contenu.update_one({"id": int(idContenu)}, {"$push": {"historique": version_en_cours}})
Utils.statdb.contenu.update_one({"id": int(idContenu)}, { Utils.statdb.contenu.update_one({"id": int(idContenu)}, {
"$set": {"versionEnCours": {"numero": version + 1, "date": datetime.now().strftime("%d/%m/%y"), "$set": {"versionEnCours": {"numero": version, "date": datetime.now().strftime("%d/%m/%y"),
"popularite": 0, "branche": "master"}}}) "popularite": 0, "commit": idCommit}}})
# Mise à jour du répertoire git
UtilsGit.mergeVersion(chemin, nomBranche)
## Supprimer une évaluation (définitif) ## Supprimer une évaluation (définitif)
# @param idEval l'id de l'évaluation à supprimer # @param idEval l'id de l'évaluation à supprimer
...@@ -357,7 +386,7 @@ class Utils: ...@@ -357,7 +386,7 @@ class Utils:
# @param idContenu l'id du contenu # @param idContenu l'id du contenu
@staticmethod @staticmethod
def getFichierContenu(idContenu): def getCheminDuContenu(idContenu):
return Utils.chemin + Utils.statdb.contenu.find_one({"id": idContenu})["fichier"] return Utils.chemin + Utils.statdb.contenu.find_one({"id": idContenu})["fichier"]
## permet de changer de version pour un contenu (modification de la branche / du commit en fonction de la situation) ## permet de changer de version pour un contenu (modification de la branche / du commit en fonction de la situation)
...@@ -367,13 +396,14 @@ class Utils: ...@@ -367,13 +396,14 @@ class Utils:
@staticmethod @staticmethod
def changerVersion(idContenu, version, nomBranche): def changerVersion(idContenu, version, nomBranche):
# on recupere le chemin du fichier associé au contenu (dans les 2 cas) # on recupere le chemin du fichier associé au contenu (dans les 2 cas)
chemin = Utils.getFichierContenu(idContenu) chemin = Utils.getCheminDuContenu(idContenu)
repertoire = chemin[:chemin.rfind("/") + 1]
if version != 0: if version != 0:
# on change le repertoire récupéré ci dessus dans la bonne version (si on travaille avec une version) # on change le repertoire récupéré ci dessus dans la bonne version (si on travaille avec une version)
idCommit = Utils.getCommitPourUneVersion(idContenu, version) idCommit = Utils.getCommitPourUneVersion(idContenu, version)
UtilsGit.changerVersionCommit(chemin, idCommit) UtilsGit.changerVersionCommit(repertoire, idCommit)
else: else:
UtilsGit.changerVersionBranche(chemin, nomBranche) UtilsGit.changerVersionBranche(repertoire, nomBranche)
## permet de recuperer un commit particulier lié avec une version donnee ## permet de recuperer un commit particulier lié avec une version donnee
# @param idContenu l'id du contenu manipulé # @param idContenu l'id du contenu manipulé
...@@ -395,6 +425,14 @@ class Utils: ...@@ -395,6 +425,14 @@ class Utils:
id_contenu = Utils.getIdContenuAssocieAUnEnCours(idContenuEnCours) id_contenu = Utils.getIdContenuAssocieAUnEnCours(idContenuEnCours)
return Utils.statdb.contenu.find_one({"id": id_contenu})["auteur"] return Utils.statdb.contenu.find_one({"id": id_contenu})["auteur"]
## récupérer la branche d'un contenu en cours
# @param idContenuEnCours l'id du contenu en cours de modification
@staticmethod
def getBrancheContenuEnCours(idContenuEnCours):
# id_contenu = Utils.getIdContenuAssocieAUnEnCours(idContenuEnCours)
return Utils.statdb.encours.find_one({"idContenuEC": idContenuEnCours})["branche"]
## A NE JAMAIS UTILISER SANS REFLECHIR ## A NE JAMAIS UTILISER SANS REFLECHIR
# Suppression integrale de la base de données & recreation des 3 auteurs # Suppression integrale de la base de données & recreation des 3 auteurs
@staticmethod @staticmethod
...@@ -403,7 +441,40 @@ class Utils: ...@@ -403,7 +441,40 @@ class Utils:
Utils.statdb.utilisateur.delete_many({}) Utils.statdb.utilisateur.delete_many({})
Utils.statdb.evaluation.delete_many({}) Utils.statdb.evaluation.delete_many({})
Utils.statdb.encours.delete_many({}) Utils.statdb.encours.delete_many({})
os.system("rm -rf dossierContenu*/")
Utils.ajouterUtilisateur("Auteur 1") Utils.ajouterUtilisateur("Auteur 1")
Utils.ajouterUtilisateur("Auteur 2") Utils.ajouterUtilisateur("Auteur 2")
Utils.ajouterUtilisateur("Auteur 3") Utils.ajouterUtilisateur("Auteur 3")
## creer un contenu à partir d'un contenu en cours
@staticmethod
def creerNouveauContenu(chemin, auteurEnCours, idContenuEnCours):
print ("chemin : ", chemin)
# hard codé pour l'exemple, sera adaptatif dans le futur
max_id = 3
dossierFichier = "dossierContenu" + str(max_id) + "/"
cheminFichier = Utils.chemin + dossierFichier
nomFichier = chemin[chemin.rfind("/") + 1:]
print("Chemin fichier : ", cheminFichier)
print ("Dossier Fichier : ", dossierFichier)
print ("NomFichier :", nomFichier)
Path(cheminFichier).mkdir(parents=True, exist_ok=True)
os.system("cp " + chemin + " " + cheminFichier)
os.system("mv " + cheminFichier + nomFichier + " " + cheminFichier + "Contenu" + str(max_id))
#exit(0)
commit = UtilsGit.commit(cheminFichier, "Contenu" + str(max_id), "Version 1")
Utils.statdb.contenu.insert_one(
{"id": max_id + 1, "auteur": auteurEnCours, "note": randrange(0, 10, 1),
"fichier": "dossierContenu" + str(max_id) + "/Contenu" + str(max_id),
"versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"),
"popularite": 0, "commit": commit},
"tags_fixes": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1",
"5": "tag1"},
"tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}})
print("Le contenu a bien été ajouté pour l'utilisateur ", auteurEnCours)
Utils.supprimerContenuEnCours(idContenuEnCours)
...@@ -12,29 +12,28 @@ class UtilsGit: ...@@ -12,29 +12,28 @@ class UtilsGit:
texte = texte.strip() texte = texte.strip()
return int(texte[-1]) + 1 return int(texte[-1]) + 1
## commit d'un fichier (branche principale) ## commit d'un fichier (branche principale)
# @param cheminFichier le chemin du fichier # @param cheminFichier le chemin du fichier
# @param texteCommit le texte associé au commit # @param texteCommit le texte associé au commit
# @return le hash du commit # @return le hash du commit
@staticmethod @staticmethod
def commit(cheminFichier, texteCommit): def commit(cheminFichier, nomFichier, texteCommit):
repo = Repo.init(cheminFichier) repo = Repo.init(cheminFichier)
print("le richier à add est : ", cheminFichier)
# Il faudra faire une extraction du nom du fichier a partir du chemin # Il faudra faire une extraction du nom du fichier a partir du chemin
repo.index.add([cheminFichier]) repo.index.add([nomFichier])
repo.index.commit(texteCommit) repo.index.commit(texteCommit)
return repo.head.object.hexsha return repo.head.object.hexsha
## commit d'un fichier (branche principale) ## commit d'un fichier (branche principale)
# @param cheminFichier le chemin du fichier # @param cheminFichier le chemin du fichier
# @param texteCommit le texte associé au commit # @param texteCommit le texte associé au commit
# @return le hash du commit # @return le hash du commit
@staticmethod @staticmethod
def embranchement(cheminFichier, nomBranche): def embranchement(cheminFichier, nomBranche):
# a voir pour améliorer le Repo.init à chaque fois # a voir pour améliorer le Repo.init à chaque fois
repo = Repo.init(cheminFichier) repo = Repo.init(cheminFichier)
repo.create_head(nomBranche, 'HEAD') repo.create_head(nomBranche, 'HEAD')
...@@ -45,21 +44,35 @@ class UtilsGit: ...@@ -45,21 +44,35 @@ class UtilsGit:
@staticmethod @staticmethod
def changerVersionCommit(chemin, commit): def changerVersionCommit(chemin, commit):
repo = Repo.init(chemin) repo = Repo.init(chemin)
repo.head.reference = repo.commit(commit) # repo.head.reference = repo.commit(commit)
repo.head.reset(index=True, working_tree=True) # repo.head.reset(index=True, working_tree=True)
repo.git.checkout("c785462dfd454045798baedb11d1674837733962")
## changer la version actuelle (avec une base branche): ## changer la version actuelle (avec une base branche):
# @param chemin chemin du repertoire git # @param chemin chemin du repertoire git
# @param nombranche branche contenant la branche avec le contenu désiré # @param nombranche branche contenant la branche avec le contenu désiré
@staticmethod @staticmethod
def changerVersionBranche(chemin, branche): def changerVersionBranche(chemin, branche):
# print("On a parcouru le chemin : ", chemin, " sur la branche :", branche)
repo = Repo.init(chemin) repo = Repo.init(chemin)
repo.head.reference = branche repo.git.checkout(branche)
repo.head.reset(index=True, working_tree=True) # repo.head.reset(index=True, working_tree=True)
## valider une nouvelle version courante d'un contenu - Un peu plus compliqué à faire. ## valider une nouvelle version courante d'un contenu - Un peu plus compliqué à faire.
# @param chemin chemin du repertoire git # @param chemin chemin du repertoire git
# @param nombranche branche contenant le contenu temporaire à repasser en principal # @param nombranche branche contenant le contenu temporaire à repasser en principal
@staticmethod @staticmethod
def mergeVersion(chemin, nombranche): def mergeVersion(chemin, nombranche):
pass # "objectif : fusionner main et en_cours"
repo = Repo.init(chemin)
master = repo.branches['master']
enCours = repo.branches[nombranche]
# merge des deux branches
base = repo.merge_base(enCours, master)
repo.index.merge_tree(master, base=base)
# on commit le merge
repo.index.commit('Mise à jour de la branche principale',
parent_commits=(enCours.commit, master.commit))
return repo.head.object.hexsha
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment