示例#1
0
文件: gbpxutil.py 项目: johwerm/gbpx
def restore_temp_commit(flags, restore_data):
    """
    Restores the initial state before a temp commit was created.
    - restore_data  -- The restore data returned from the
                        'create_temp_commit' function.
    """
    try:
        # Restore branch.
        if restore_data[0] != get_branch():
            log(flags, "Switching active branch to \'" + restore_data[0] +
                "\'")
            switch_branch(restore_data[0])

        # Check if changes have been stashed (and temporary commit created).
        if restore_data[2] is not None:
            log(flags, "Resetting branch \'" +
                restore_data[0] + "\'to commit \'" +
                restore_data[1] + "\'")
            reset_branch(flags, restore_data[0], restore_data[1])

            log(flags, "Restoring uncommitted changes from stash to " +
                "branch \'" + restore_data[0] + "\'")
            apply_stash(flags, restore_data[0], drop=True)
    except Error as err:
        raise OpError(err)
示例#2
0
    def __process_merge_guser_and_gcc(self):
        logger = logging.getLogger(__name__)
        logger.info("process_merge_guser_and_gcc starts...")
            
        try:
            gitutil.push_branch(self.gcc, 'master', 'guser', 'cc')
        except:
            # should fail, since guser 'cc' branch only accept data from gcc, and no other push.
            raise
        
        gmerge = self.gmerge
    
        # reset gmerge cc branch as guser cc
        gitutil.reset_branch(gmerge, 'cc', 'guser', 'cc')
        
        # reset gmerge master branch as guser master
        gitutil.reset_branch(gmerge, 'master', 'guser', 'master')
        
        # save the current commit in mater when rebasing.
        gitutil.create_branch(self.guser, 'rebase_spot', 'master')
        
        # checkout master branch.
        gitutil.checkout_branch(gmerge, 'master')
       
        # merge cc to master.
        try:
            gmerge.git.rebase('cc')
        except git.GitCommandError:
            # get current status
            gmerge_status = str(gmerge.git.status())
            
            # abort rebase for next round.
            gmerge.git.rebase('--abort')

            if self.mirror_mode:
                try:
                    gitutil.push_branch(self.guser, 'cc', 'gpublic', 'cc', force=True)
                except:
                    # should fail, since guser 'cc' branch only accept data from gcc, and no other push.
                    raise
            # manual merge needs.
            users = gitutil.get_users(self.guser, self.guser.heads.rebase_spot.commit, self.guser.heads.base.commit)
            raise ConflictException(users, gmerge_status)
        except:
            raise
        
        # rebase is successful.
        self.__continue_after_merge_in_gmerge()