From 9dc99004d7da43ebcaac1b662a0f1e3bf76d1b29 Mon Sep 17 00:00:00 2001
From: AxelCarayon <axel.carayon@gmail.com>
Date: Tue, 18 Jan 2022 17:24:52 +0100
Subject: [PATCH] =?UTF-8?q?lors=20d'un=20enregistrement,=20v=C3=A9rifie=20?=
 =?UTF-8?q?que=20la=20branche=20de=20d=C3=A9part=20a=20un=20tag.=20Cr?=
 =?UTF-8?q?=C3=A9e=20un=20tag=20d=C3=A9riv=C3=A9=20de=20l'original=20dans?=
 =?UTF-8?q?=20la=20nouvelle=20branche=20de=20l'exp=C3=A9rimentation?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 registerExperiment.py | 42 ++++++++++++++++++++++++++++++------------
 1 file changed, 30 insertions(+), 12 deletions(-)

diff --git a/registerExperiment.py b/registerExperiment.py
index 5fbe12f..420e8c5 100644
--- a/registerExperiment.py
+++ b/registerExperiment.py
@@ -1,4 +1,7 @@
+from cmath import e
 import os
+import re
+from xmlrpc.client import Boolean
 import git
 import subprocess
 import yaml
@@ -20,6 +23,9 @@ experimentName = None
 outputFolder = None
 outputFiles = []
 
+currentTag = None
+tags = None
+
 def isGitRepo(path) -> bool:
     try:
         git.Repo(path)
@@ -28,7 +34,7 @@ def isGitRepo(path) -> bool:
         return False
 
 def init(pathInput) -> None :
-    global repository,path,experimentName
+    global repository,path,experimentName,tags, currentTag
     if isGitRepo(pathInput):
         path += pathInput
         if not (pathInput[len(pathInput)-1] == "/"):
@@ -38,6 +44,13 @@ def init(pathInput) -> None :
         os.chdir(path)
     else :
         raise Exception(f"{pathInput} is not a git repository")
+    tags = repository.tags
+    currentTag = repository.git.describe('--tags')
+    if not(currentVersionIsTagged()):
+        raise Exception("Current version is not tagged, you can only reproduce an experiment from a tagged version.")
+
+def currentVersionIsTagged() -> bool:
+    return currentTag in tags
 
 def fileExists(fileName) -> bool:
     return os.path.exists(fileName)
@@ -109,21 +122,26 @@ def writeInYaml() -> None:
     with open('experimentResume.yaml', 'w') as yamlFile:
         yaml.safe_dump(cur_yaml, yamlFile)
 
-def branchExists(branchName) -> bool:
-    return branchName in repository.references
+def successfullyCreatedNewBranch(name) -> Boolean :
+    try:
+        repository.git.checkout('-b',name)
+        return True
+    except Exception as e:
+        return False
 
 def pushBranch(version=1) -> None:
     print("Pushing branch...")
-    while (branchExists(f"{experimentName}Experiment{version}")):
+    while not(successfullyCreatedNewBranch(f"{experimentName}Experiment{version}")):
         version += 1
-    else:
-        print(f"creating {experimentName}Experiment{version} branch and pushing changes to it ...")
-        repository.git.checkout('-b', f"{experimentName}Experiment{version}")
-        repository.git.add(all=True)
-        repository.git.commit(m=f"{experimentName}Experiment{version}")
-        repository.git.push('--set-upstream', repository.remote().name, f"{experimentName}Experiment{version}")
-        repository.git.checkout(experimentName)
-        print("done")
+    newTag = f"{currentTag}-e{version}"
+    print(f"creating {experimentName}Experiment{version} branch and pushing changes to it ...")
+    repository.git.add(all=True)
+    repository.git.commit(m=f"{experimentName}Experiment{version}")
+    repository.git.push('--set-upstream',repository.remote().name,f"{experimentName}Experiment{version}")
+    repository.git.tag(newTag)
+    repository.git.push('origin',newTag)
+    repository.git.checkout(experimentName)
+    print("done")
 
 def genChecksum(file) -> str :
     hash_md5 = hashlib.md5()
-- 
GitLab