def get(self,path,rev=None): path=format_path(path) if not rev: try: f=open("%s%s" % (self.dataread,path)) ret=f.read() f.close() return ret except: return None else: fsreptmp = tempfile.mkdtemp() system_no_ret("""svn export -r %s "%s%s" "%s/file" """ % (rev,self.dataread,path,fsreptmp)) f=open("%s/file" % (fsreptmp)) ret=f.read() f.close() return ret
def add_folder(self,path,msg=None): self.log.debug("ADDFOLDER") path=format_path(path) if path=='': #on ne peux creer la racine (elle existe deja) return pere=path_pere(path) name=name_from_path(path) fsreptmp=self.prepare_fstmp(pere) system_no_ret("""mkdir "%s/%s" """ % (fsreptmp,name)) actions=[("""svn add "%s/%s" """ % (fsreptmp,name)),] message=msg if not message: message = "Ajouter Repertoire %s " % path tmpcommit=fsreptmp+'/'+name new_rev=self.commit(actions,message,tmpcommit,fsreptmp) return new_rev
def add_link(self,pathlinkinit,pathlinkfinal,msg=None): self.log.debug("ADDLINK") pathlinkinit=format_path(pathlinkinit) pathlinkfinal=format_path(pathlinkfinal) perefinal=path_pere(pathlinkfinal) namefinal=name_from_path(pathlinkfinal) fsreptmp = self.prepare_fstmp(perefinal) #TODO BEST : lien en relatif et pas en absolu # pour permettre le deplacement dans un autre repertoire du contenu. system_no_ret("""ln -s "%s/%s" "%s/%s" """ % (self.dataread,pathlinkinit,fsreptmp,namefinal)) actions=[("""svn add "%s/%s" """ % (fsreptmp,namefinal)),] message=msg if not message: message="Ajout lien symbolique %s => %s " % (pathlinkinit,pathlinkfinal) tmpcommit=fsreptmp+'/'+namefinal new_rev=self.commit(actions,message,tmpcommit,fsreptmp) return new_rev
def delete(self,path,msg=None): self.log.debug("DELETE") ### Ne pas appeler directemer dans les modules, ### prefere appeler trash pour garder le contenu. path=format_path(path) if path=='': #on ne peux detruire la racine return pere=path_pere(path) name=name_from_path(path) fsreptmp=self.prepare_fstmp(pere) system_no_ret("""cp -r "%s%s" "%s" """ % (self.dataread,path,fsreptmp)) actions=[("""svn del "%s/%s" """ % (fsreptmp,name)),] message=msg if not message: message="Detruit fichier %s " % path tmpcommit=fsreptmp+'/'+name new_rev=self.commit(actions,message,tmpcommit,fsreptmp) return new_rev
def commit(self,actions,message,tmpcommit,tmpbase): self.semaphore_svn.acquire() new_rev=None #test #try: if 1: for action in actions: self.log.debug(action) system_no_ret(action) if not message: message="commit %s " % str((actions,message,tmpcommit)).replace('"',"%") if type(tmpcommit)==type(u''): tmpcommit=utos(tmpcommit) if type(tmpcommit)==type(''): cmd=""" svn commit -m "%s" "%s" """ % (message,tmpcommit) self.log.debug(cmd) system_no_ret(cmd) elif type(tmpcommit)==type([]): for tc in tmpcommit: cmd="""svn commit -m "%s" "%s" """ % (message,tc) self.log.debug(cmd) system_no_ret(cmd) cmd="""svn update "%s" """ % self.dataread self.log.debug(cmd) system_no_ret(cmd) new_rev=self.get_rev("") #except: # message="" # try: # message="ERROR commit %s " % str((actions,message,tmpcommit)).replace('"',"%") # except: # message='ERROR COMMIT' # new_rev=None # self.semaphore_svn.release() # raise(message) self.semaphore_svn.release() #system_no_ret('rm -Rf %s' % tmpbase, check=False) return new_rev
def creation(self,initdata,create_server=True,delete_trash=True): if create_server: system_no_ret("""rm -Rf "%s" """ % self.reposvn ) system_no_ret("""mkdir -p "%s" """ % self.reposvn ) system_no_ret("""svnadmin create "%s" """ % self.reposvn) if initdata: msg='import initial' if delete_trash: system_no_ret("""rm -Rf "%s/trash" """ % initdata ) system_no_ret("""mkdir -p "%s/trash" """ % initdata ) system_no_ret("""cd "%s" && recursif "rm -Rf .svn" """ % initdata) system_no_ret("""svn import "%s" "file://%s" -m "%s" """ % (initdata,self.reposvn,msg)) system_no_ret("""rm -Rf "%s" """ % self.dataread) system_no_ret("""mkdir -p "%s" """ % self.dataread) system_no_ret("""svn checkout "file://%s" "%s" """ % (self.reposvn,self.dataread))
def prepare_fstmp(self,repref=None): fsreptmp = tempfile.mkdtemp() if repref!=None: system_no_ret("""cp -r "%s%s/.svn" "%s" """ % (self.dataread,repref,fsreptmp)) return fsreptmp
def move(self,pathinit,pathfinal,msg=None): self.log.debug("MOVE") pathinit=format_path(pathinit) pathfinal=format_path(pathfinal) if (pathinit==pathfinal): # destination = arrive !! pas de deplacement return if not self.exist(pathinit): # l'objet a deplacer n existe pas dans le fs. return if (pathinit==''): # on ne peux deplacer la racine return li=path_to_liste(pathinit) #liste path init lf=path_to_liste(pathfinal) #liste path final lc=[] # liste path commun acontinuer=True while acontinuer: if len(li)>0 and len(lf)>0 and li[0]==lf[0]: lc.append(li.pop(0)) lf.pop(0) else: acontinuer=False ri=format_path('/'.join(li)) # path repertoire initial sans le commun. rf=format_path('/'.join(lf)) # path repertoire final sans le commun. rc=format_path('/'.join(lc)) # path repertoire commun if ri=='': #ne peux pas deplacer un repertoire dans lui meme.... return fscommun='%s%s' % (self.dataread,rc) # cree la structure temporaire svn dans fsreptmp=self.prepare_fstmp(rc) # cree la structure temportaire des repertoire initaux for i in range(len(li)-1): rep=format_path('/'.join(li[:i+1])) if rep!='': self.log.debug("prepare inital %s " % rep) system_no_ret("""mkdir "%s%s" """ % (fsreptmp,rep)) system_no_ret("""cp -r "%s%s/.svn" "%s%s" """ % (fscommun,rep,fsreptmp,rep)) # copie le repertoire ou le fichier a deplacer if self.isdir(pathinit): self.log.debug("copie dir %s " % ri) system_no_ret("""cp -r "%s%s" "%s%s" """ % (fscommun,ri,fsreptmp,ri)) else: self.log.debug("copie file %s " % ri) system_no_ret("""cp "%s%s" "%s%s" """ % (fscommun,ri,fsreptmp,ri)) # cree la structure temportaire des repertoire finaux for i in range(len(lf)-1): rep=format_path('/'.join(lf[:i+1])) if rep!='': self.log.debug("prepare final %s " % rep) if not self.exist(rep): self.add_folder(rep) system_no_ret("""mkdir "%s%s" """ % (fsreptmp,rep)) system_no_ret("""cp -r "%s%s/.svn" "%s%s" """ % (fscommun,rep,fsreptmp,rep)) else: system_no_ret("""cp -r "%s/.svn" "%s" """ % (fscommun,fsreptmp)) # si la destination est un repertoire, preparation structure. if self.exist(pathfinal): if self.isdir(pathfinal): self.log.debug("prepare final folder %s " % rf) system_no_ret("""mkdir "%s%s" """ % (fsreptmp,rf)) system_no_ret("""cp -r "%s%s/.svn" "%s%s" """ % (fscommun,rf,fsreptmp,rf)) #definition svn move et commit actions=[("""svn move "%s%s" "%s%s" """ % (fsreptmp,ri,fsreptmp,rf)),] self.log.debug(str(actions)) message=msg if not message: message="move %s => %s" % (pathinit,pathfinal) tmpcommit=[fsreptmp+ri,fsreptmp+rf] self.log.debug('commits') self.log.debug(str(tmpcommit)) new_rev=self.commit(actions,message,tmpcommit,fsreptmp) # returne la revision actuelle. return new_rev