示例#1
0
  def __init__(self, path, backup=False, gitHandler=None):
    self.backup = backup
    self.path = path
    if gitHandler == None:
      gitHandler=GitCallback()
    self.handler = gitHandler
    
    if backup:
      bare = True
      workTree = ''
      self.gitDir = path
    else:
      bare = False
      workTree = path
      self.syncDir=path+"/.home-sync"

    self.git = GitInterface(self.syncDir+"/git", workTree, bare)
    self.jobs = JobQueue()
    self.log = logging.getLogger('SyncArchive')
    self.jobs.log = logging.getLogger('SyncArchive.Jobs')
    self.jobs.start()
    
    self.commits = 0
示例#2
0
class SyncArchive:
  def __init__(self, path, backup=False, gitHandler=None):
    self.backup = backup
    self.path = path
    if gitHandler == None:
      gitHandler=GitCallback()
    self.handler = gitHandler
    
    if backup:
      bare = True
      workTree = ''
      self.gitDir = path
    else:
      bare = False
      workTree = path
      self.syncDir=path+"/.home-sync"

    self.git = GitInterface(self.syncDir+"/git", workTree, bare)
    self.jobs = JobQueue()
    self.log = logging.getLogger('SyncArchive')
    self.jobs.log = logging.getLogger('SyncArchive.Jobs')
    self.jobs.start()
    
    self.commits = 0
  
  def ignoreList(self):
    return DEFAULT_IGNORES
    
  def isIgnored(self, file):
    file = file.lstrip(self.path)
    for pattern in self.ignoreList():
      if fnmatch(file, "*/"+pattern):
        return True
    return False
  
  def create(self):
    if self.backup:
      if os.path.exists(self.syncDir+"index"):
        self.log.debug("%s already exists, skipping creation.",self.syncDir)
        return False
      else:
        self.log.info("Creating new SyncArchive backup in %s"%(self.syncDir))
        initJob = JobGroup()
        initJob.enqueue( Job(self.git.init) )
        initJob.enqueue( Job(self.git.setConfig, args=("core.compression", -1)) )
    else:
      if os.path.exists(self.syncDir):
        self.log.debug("%s already exists, skipping creation.",self.syncDir)
        return False
      else:
        os.mkdir(self.syncDir)
        self.log.info("Creating new SyncArchive in %s"%(self.syncDir))
        initJob = JobGroup()
        initJob.enqueue( Job(self.git.init) )
        initJob.enqueue( Job(self.git.setConfig, args=("core.excludesfile", self.syncDir+"/ignore")) )
        initJob.enqueue( Job(self.git.setConfig, args=("core.compression", -1)) )
        initJob.setPriority(10)
        ignoreFile = open(self.syncDir+"/ignore","w")
        ignoreFile.writelines(map(lambda x:x+"\n",DEFAULT_IGNORES))
        ignoreFile.close()
    self.jobs.enqueue(initJob)
  
  def addFiles(self, *files):
    self.commits+=1
    j = JobGroup()
    j.enqueue( Job(self.git.addToIndex, args=files) )
    j.enqueue( Job(self.git.commitIndex, args=("%i files added"%(len(files)),)) )
    if self.commits>100:
      #j.enqueue( Job(self.git.compact) ) #Make sure we compact after we commit and add
      self.commits=0
    self.jobs.enqueue(j)
    return j
  
  #def updateFile(self, path):
    #j = Job(self.git.commit,args=(path))
    #self.jobs.enqueue(j)
    #return j
  
  def listFiles(self, type):
    return self.git.files(type)
  
  def pauseJobs(self):
    self.jobs.Pause()
  
  def resumeJobs(self):
    self.jobs.Resume()
示例#3
0
 def CreateBackup(self, path):
   self.log.info("Creating backup on %s",path)
   backup = GitInterface(path,bare=True)
   backup.init()