コード例 #1
0
ファイル: test_merge_dirs.py プロジェクト: vanship82/boxwrap
  def _merge_for_test(self, verbose=False):
    self.dir_changes1 = change_entry.get_dir_changes(
        file_info.load_rel_dir_info(_TEST_DIR1),
        self.dir_info1, root_dir=_TEST_DIR1, tmp_dir=_TEST_TMP,
        verbose=verbose)
    self.dir_changes2 = change_entry.get_dir_changes(
        file_info.load_rel_dir_info(_TEST_DIR2),
        self.dir_info2, root_dir=_TEST_DIR2, tmp_dir=_TEST_TMP,
        verbose=verbose)

    result = merge.merge(self.dir_changes1, self.dir_changes2)
    self.dc_new1 = result[0]
    self.changes_new1 = [x for x in self.dc_new1.flat_changes()]
    self.di_new1 = change_entry.apply_dir_changes_to_dir_info('.',
                                                              self.dc_new1)
    self.dc_old1 = result[1]
    self.changes_old1 = [x for x in self.dc_old1.flat_changes()]
    self.di_old1 = change_entry.apply_dir_changes_to_dir_info('.',
                                                              self.dc_old1)
    self.dc_new2 = result[2]
    self.changes_new2 = [x for x in self.dc_new2.flat_changes()]
    self.di_new2 = change_entry.apply_dir_changes_to_dir_info('.',
                                                              self.dc_new2)
    self.dc_old2 = result[3]
    self.changes_old2 = [x for x in self.dc_old2.flat_changes()]
    self.di_old2 = change_entry.apply_dir_changes_to_dir_info('.',
                                                              self.dc_old2)
    self.dc_conflict = result[4]
    self.changes_conflict = [x for x in self.dc_conflict.flat_changes()]
コード例 #2
0
ファイル: test_merge_dirs.py プロジェクト: vanship82/boxwrap
  def setUp(self):
    try:
      shutil.rmtree(_TEST_DIR1)
    except:
      pass
    try:
      shutil.rmtree(_TEST_DIR2)
    except:
      pass
    try:
      shutil.rmtree(_TEST_TMP)
    except:
      pass
    os.makedirs(_TEST_DIR1)
    os.makedirs(_TEST_DIR2)
    os.makedirs(_TEST_TMP)

    self.dir_info1 = file_info.load_rel_dir_info(_TEST_DIR1)
    self.test_dir1_level1 = os.path.join(_TEST_DIR1, _TEST_CASE_DIR)
    os.makedirs(self.test_dir1_level1)
    f = open(os.path.join(self.test_dir1_level1, _TEST_CASE_FILE1), 'w')
    f.write(_TEST_INITIAL_CONTENT)
    f.close()
    f = open(os.path.join(self.test_dir1_level1, _TEST_CASE_FILE2), 'w')
    f.write(_TEST_INITIAL_CONTENT)
    f.close()
    self.test_dir1_level_empty = os.path.join(_TEST_DIR1, _TEST_CASE_DIR_EMPTY)
    os.makedirs(self.test_dir1_level_empty)
    self.dir_info1 = change_entry.apply_dir_changes_to_dir_info(
        '.',  # use current dir as base dir
        change_entry.get_dir_changes(
            file_info.load_rel_dir_info(_TEST_DIR1),
            self.dir_info1, root_dir=_TEST_DIR1, tmp_dir=_TEST_TMP))

    self.dir_info2 = file_info.load_rel_dir_info(_TEST_DIR2)
    self.test_dir2_level1 = os.path.join(_TEST_DIR2, _TEST_CASE_DIR)
    os.makedirs(self.test_dir2_level1)
    f = open(os.path.join(self.test_dir2_level1, _TEST_CASE_FILE1), 'w')
    f.write(_TEST_INITIAL_CONTENT)
    f.close()
    f = open(os.path.join(self.test_dir2_level1, _TEST_CASE_FILE2), 'w')
    f.write(_TEST_INITIAL_CONTENT)
    f.close()
    self.test_dir2_level_empty = os.path.join(_TEST_DIR2, _TEST_CASE_DIR_EMPTY)
    os.makedirs(self.test_dir2_level_empty)
    self.dir_info2 = change_entry.apply_dir_changes_to_dir_info(
        '.',  # use current dir as base dir
        change_entry.get_dir_changes(
            file_info.load_rel_dir_info(_TEST_DIR2),
            self.dir_info2, root_dir=_TEST_DIR2, tmp_dir=_TEST_TMP))
    try:
      shutil.rmtree(_TEST_TMP)
    except:
      pass
    os.mkdir(_TEST_TMP)
コード例 #3
0
ファイル: test_dir_changes.py プロジェクト: vanship82/boxwrap
 def _test_get_file_info_list_after_sync(self):
   self.dir_info = change_entry.apply_dir_changes_to_dir_info(
       '.',
       change_entry.get_dir_changes(
           file_info.load_rel_dir_info(_TEST_SRC),
           self.dir_info, root_dir=_TEST_SRC, tmp_dir=_TEST_TMP))
   self.file_info_list = [x for x in self.dir_info.flat_file_info_list()]
コード例 #4
0
ファイル: test_dir_changes.py プロジェクト: vanship82/boxwrap
  def setUp(self):
    try:
      shutil.rmtree(_TEST_SRC)
    except:
      pass
    try:
      shutil.rmtree(_TEST_TMP)
    except:
      pass
    os.makedirs(_TEST_SRC)
    os.makedirs(_TEST_TMP)

    self.dir_info = file_info.load_rel_dir_info(_TEST_SRC)
    f = open(os.path.join(_TEST_SRC, _TEST_CASE_FILE), 'w')
    f.write(_TEST_INITIAL_CONTENT)
    f.close()
    self.dir_info = change_entry.apply_dir_changes_to_dir_info(
        '.',  # use current dir as base dir
        change_entry.get_dir_changes(
            file_info.load_rel_dir_info(_TEST_SRC),
            self.dir_info, root_dir=_TEST_SRC, tmp_dir=_TEST_TMP))
    self.file_info_list = [x for x in self.dir_info.flat_file_info_list()]
    try:
      shutil.rmtree(_TEST_TMP)
    except:
      pass
    os.mkdir(_TEST_TMP)
コード例 #5
0
 def test_change_entry_applied_to_dir_info(self):
   os.chdir(_TEST_DEST)
   di_new = file_info.load_dir_info('.', calculate_hash=True)
   os.chdir(_TEST_SRC)
   di_old = file_info.load_dir_info('.', calculate_hash=True)
   dc = change_entry.get_dir_changes(di_new, di_old)
   di_final = change_entry.apply_dir_changes_to_dir_info('.', dc)
   dc_final = change_entry.get_dir_changes(di_new, di_final)
   self._assertDirChanges(dc_final)
コード例 #6
0
ファイル: main.py プロジェクト: vanship82/boxwrap
  def sync(self, old_dir_info, debug=False, verbose=False):
    tstart = time.time()
    cwd = os.getcwd()
    working_old_di = old_dir_info
    cloud_old_di = self._extract_compressed_dir_info(old_dir_info)
    if debug:
      print '============== Latency till extract input dir info : %s s' % (
          time.time() - tstart)

    if verbose:
      phase = 1
      print 'Phase %s: Examine changes on working_dir at %s' % (
          phase, self.working_dir)
    os.chdir(self.working_dir)
    working_cur_di = file_info.load_dir_info('.', calculate_hash=True)
    working_dc = change_entry.get_dir_changes(working_cur_di, working_old_di,
                                              root_dir=self.working_dir,
                                              tmp_dir=self.tmp_dir,
                                              verbose=verbose)
    is_working_no_change = self._is_no_change(working_dc)
    working_dc = self._generate_compressed_dir_changes(working_dc)
    if debug:
      print '============== Latency after examing working_dir: %s s' % (
         time.time() - tstart)
      self._print_changes('********** working_dc', working_dc)

    if verbose:
      phase += 1
      print 'Phase %s: Examine changes on wrap_dir at %s' % (
          phase, self.cloud_dir)
    os.chdir(self.cloud_dir)
    cloud_cur_di = file_info.load_dir_info(
        '.', calculate_hash=True, key=self.compression_key)
    cloud_dc = change_entry.get_dir_changes(cloud_cur_di, cloud_old_di,
                                            root_dir=self.cloud_dir,
                                            tmp_dir=self.tmp_dir,
                                            verbose=verbose)
    is_cloud_no_change = self._is_no_change(cloud_dc)
    cloud_dc_result = self._generate_original_dir_changes(cloud_dc)
    cloud_dc = cloud_dc_result[0]
    invalid_archives_dc_working = cloud_dc_result[1]
    invalid_archives_dc_cloud = cloud_dc_result[2]
    if invalid_archives_dc_working:
      if debug:
        self._print_changes('************ invalid_archives_dc',
                            invalid_archives_dc_working)
      # Apply invalid_archives_dc to working dir because they are not
      # compressed. These files will be compressed and sync after next sync.
      change_entry.apply_dir_changes_to_dir(self.working_dir,
                                            invalid_archives_dc_working,
                                            verbose=verbose)
      change_entry.apply_dir_changes_to_dir(self.cloud_dir,
                                            invalid_archives_dc_cloud,
                                            verbose=verbose)
    if debug:
      print '============== Latency after examing wrap_dir: %s s' % (
          time.time() - tstart)
    has_changes = not is_working_no_change or not is_cloud_no_change

    if has_changes and verbose:
      phase += 1
      print 'Phase %s: Merge changes on both dirs' % phase
    result = merge.merge(working_dc, cloud_dc)

    working_dc_new = result[0]
    working_dc_old = result[1]
    cloud_dc_new = self._extract_compressed_dir_changes(result[2])
    cloud_dc_old = result[3]
    working_dc_conflict = result[4]
    cloud_dc_conflict = self._extract_compressed_dir_changes(
        working_dc_conflict)
    if debug:
      print '============== Latency after merge: %s s' % (time.time() - tstart)
      self._print_changes('********** working_dc_conflict', working_dc_conflict)
      self._print_changes('********** cloud_dc_conflict', cloud_dc_conflict)

    if has_changes and verbose:
      phase += 1
      print 'Phase %s: Apply merged changes on working_dir at %s' % (
          phase, self.working_dir)
    change_entry.apply_dir_changes_to_dir(self.working_dir, working_dc_new,
                                          verbose=verbose)
    change_entry.apply_dir_changes_to_dir(
        self.working_dir, working_dc_conflict,
        force_conflict=change_entry.CONFLICT_NEW,
        verbose=verbose)
    working_di = change_entry.apply_dir_changes_to_dir_info('.', working_dc_old)
    if debug:
      print '============== Latency after applying merged changes on working_dir: %s' % (time.time() - tstart)

    if has_changes and verbose:
      phase += 1
      print 'Phase %s: Apply merged changes on wrap_dir at %s' % (
          phase, self.cloud_dir)
    change_entry.apply_dir_changes_to_dir(self.cloud_dir, cloud_dc_new,
                                          verbose=verbose)
    change_entry.apply_dir_changes_to_dir(
        self.cloud_dir, cloud_dc_conflict,
        force_conflict=change_entry.CONFLICT_NEW,
        verbose=verbose)
    cloud_di = change_entry.apply_dir_changes_to_dir_info('.', cloud_dc_old)
    if debug:
      print '============== Latency after applying merged changes on wrap_dir: %s' % (time.time() - tstart)

    os.chdir(cwd)
    return [has_changes, working_di, cloud_di]