예제 #1
0
파일: mod.py 프로젝트: epowers/arc
  def verify(self, old_revision, force_new_mod_path=None,
             android_source_list=None):
    if self._status is not None:
      return

    if not self._android_module_path:
      self._status = constants.RESULT_MOD_ANDROID_SUBMODULE_NOT_IDENTIFIED
      return

    # Verify the mod on disk validates against the copy of the old source file.
    with internal.old_file_content(
        old_revision, self._android_path,
        self._android_module_path) as tmp_android_path:
      if not internal.validate_android_mod(self._mod_path, tmp_android_path):
        logging.info('Detected error comparing %s to %s (%s at %s)',
                     self._mod_path, tmp_android_path, self._android_path,
                     old_revision)
        self._status = constants.RESULT_MOD_INCORRECT_FOR_OLD_VERSION
        return

    if self._status is not None:
      return

    self._find_new_mod_path(force_new_mod_path, android_source_list)

    # If the mod is moving, make sure there is not already a file in the new
    # location.
    if (self._new_mod_path != self._mod_path and
        os.path.exists(self._new_mod_path)):
      self._status = constants.RESULT_MOD_EXISTS_AT_NEW_LOCATION
      return

    self._verified = True
예제 #2
0
파일: mod.py 프로젝트: epowers/arc
  def rebase(self, old_revision, force_new_mod_path=None):
    if not self._verified:
      self.verify(old_revision, force_new_mod_path)

    if self._status is not None:
      return

    # Move the mod to the new location if different from the old location
    internal.move_mod_file(self._mod_path, self._new_mod_path)

    with internal.old_file_content(
        old_revision, self._android_path,
        self._android_module_path) as tmp_android_path:
      # Attempt an automatic three-way merge using the mod, the old source code
      # and the new source code.
      if not internal.merge3(
          self._new_mod_path, tmp_android_path, self._new_android_path):
        self._status = constants.RESULT_NO_CLEAN_MERGE
        return

    if not internal.validate_android_mod(
        self._new_mod_path, self._new_android_path):
      self._status = constants.RESULT_NO_CLEAN_MERGE
      return

    git.add_to_staging(self._new_mod_path, cwd=self._arc_git_root)
    self._status = constants.RESULT_OK
예제 #3
0
    def rebase(self, old_revision, force_new_mod_path=None):
        if not self._verified:
            self.verify(old_revision, force_new_mod_path)

        if self._status is not None:
            return

        # Move the mod to the new location if different from the old location
        internal.move_mod_file(self._mod_path, self._new_mod_path)

        with internal.old_file_content(
                old_revision, self._android_path,
                self._android_module_path) as tmp_android_path:
            # Attempt an automatic three-way merge using the mod, the old source code
            # and the new source code.
            if not internal.merge3(self._new_mod_path, tmp_android_path,
                                   self._new_android_path):
                self._status = constants.RESULT_NO_CLEAN_MERGE
                return

        if not internal.validate_android_mod(self._new_mod_path,
                                             self._new_android_path):
            self._status = constants.RESULT_NO_CLEAN_MERGE
            return

        git.add_to_staging(self._new_mod_path, cwd=self._arc_git_root)
        self._status = constants.RESULT_OK
예제 #4
0
    def verify(self,
               old_revision,
               force_new_mod_path=None,
               android_source_list=None):
        if self._status is not None:
            return

        if not self._android_module_path:
            self._status = constants.RESULT_MOD_ANDROID_SUBMODULE_NOT_IDENTIFIED
            return

        # Verify the mod on disk validates against the copy of the old source file.
        with internal.old_file_content(
                old_revision, self._android_path,
                self._android_module_path) as tmp_android_path:
            if not internal.validate_android_mod(self._mod_path,
                                                 tmp_android_path):
                logging.info('Detected error comparing %s to %s (%s at %s)',
                             self._mod_path, tmp_android_path,
                             self._android_path, old_revision)
                self._status = constants.RESULT_MOD_INCORRECT_FOR_OLD_VERSION
                return

        if self._status is not None:
            return

        self._find_new_mod_path(force_new_mod_path, android_source_list)

        # If the mod is moving, make sure there is not already a file in the new
        # location.
        if (self._new_mod_path != self._mod_path
                and os.path.exists(self._new_mod_path)):
            self._status = constants.RESULT_MOD_EXISTS_AT_NEW_LOCATION
            return

        self._verified = True