def cp(self, team, src="", dest="", msg="Copy", rev="0"): project, src = self.get_project_path(src) dest_project, dest = self.get_project_path(dest) if dest_project != project: return dict( new_revision="0", status="1", message= "Copy Failed: Source and destination projects must match") if rev == "0": rev = None projWrite = ProjectWrite(team, project, revno=rev) if src == "": return dict(new_revision="0", status="1", msg="No Source file/folder specified") if dest == "": return dict(new_revision="0", status="1", msg="No Destination file/folder specified") try: projWrite.copy(src, dest) new_revno, new_rev_id = projWrite.commit(msg) except Exception, e: return dict(new_revision="0", status="1", message="Copy Failed: " + str(e))
def newdir(self, team, path, msg): project, dirpath = self.get_project_path(path) projWrite = ProjectWrite(team, project) try: projWrite.new_directory(dirpath) except: # TODO BZRPORT: replace with bzr error return dict( success=0, newdir = path,\ feedback="Error creating directory: " + path) #TODO: try: revno, revid = projWrite.commit(msg) return dict( success=1, newdir = path,\ feedback="Directory successfully created")
def savefile(self, team, filepath, rev, message, code): """ Create/update contents of a file and attempt to commit. If file has been updated since submitted text was checked out, call update_merge to attempt to merge the changes. If file has not been updated since client checked it out, call commit_file_simple to commit the new version. inputs: path - path of file relative to project root. rev - revision of file when it was checked out by client. """ project, filepath = self.get_project_path(filepath) projWrite = ProjectWrite(team, project, revno=rev) projWrite.update_file_contents(filepath, code) reloadfiles = "True" # TODO: determine whether or not file list needs refreshing try: newrevno, newrevid = projWrite.commit(message) success = "True" except bzrlib.errors.OutOfDateTree: # a commit has occurred since code was opened. # A merge will need to take place code, newrevno, newrevid = projWrite.merge(filepath) if len(projWrite.conflicts) == 0: # TODO: when committing a merged transform preview affecting more than one file, # the text changes do not commit despite the merge succeeding and returning correct text. # solution for now is to open a new transform preview and pump the new code into it. pw2 = ProjectWrite(team, project) pw2.update_file_contents(filepath, code) newrevno, newrevid = pw2.commit(message) success = "AutoMerge" pw2.destroy() else: return dict(new_revision=newrevno, code=code, success="Merge", file=filepath, reloadfiles=reloadfiles) finally: projWrite.destroy() return dict(new_revision=str(newrevno), code=code, success=success, file=filepath, reloadfiles=reloadfiles)