import os.path
import logging

logger = logging.getLogger("thefactz.sysadmin.backup")

from BackupItemBase import *

class BackupItemSvn(BackupItemBase):
	"""
	Wrapper around svnadmin hotcopy
	
	[[TODO: what about compression? Should we use svnadmin dump instead]]
	"""
	
	def __init__(self, backupBaseDirPath, archiveName):
		"""
		Because svnadmin hotcopy recreates directories archiveName is used as subdirectory name (backup to backupBaseDirpath/archiveName)
		"""
		self._backupBaseDirPath = backupBaseDirPath
		self._archiveName = archiveName
	
	def setRepoList(self, repoList):
		self._repoList = repoList
	
	def setRepoListFromParentPath(self, parentPath):
		"""
		@param parentPath: parentPath to repos (i.e. all repos are subdirectories of parent path)
		"""
		self._repoList = []
		repos = os.listdir(parentPath)
		for repo in repos:
			self._repoList.append(os.path.join(parentPath, repo))
	
	def doBackup(self):
		baseBackupPath = os.path.join(self._backupBaseDirPath, self._archiveName)
		for repoPath in self._repoList:
			repoName = os.path.basename(os.path.normpath(repoPath))
			destPath = os.path.join(baseBackupPath, repoName)
			if not(os.path.exists(destPath)):
				os.makedirs(destPath)
			logger.info("Backing up repository " + repoPath + " to " +  destPath + " .... ")
			cmd = "svnadmin hotcopy " +  repoPath + " " +  destPath + " --clean-logs"
			# run command using base class wrapper
			self.runCommand(cmd)

