Class ExternalProgramMerger

    • Constructor Detail

      • ExternalProgramMerger

        public ExternalProgramMerger​(ProgramMultiUserMergeManager mergeManager,
                                     Program resultPgm,
                                     Program originalPgm,
                                     Program latestPgm,
                                     Program myPgm,
                                     ProgramChangeSet latestChanges,
                                     ProgramChangeSet myChanges)
        Manages code unit changes and conflicts between the latest versioned program and the modified program being checked into version control.
        Parameters:
        mergeManager - the top level merge manager for merging a program version.
        resultPgm - the program to be updated with the result of the merge. This is the program that will actually get checked in.
        originalPgm - the program that was checked out.
        latestPgm - the latest checked-in version of the program.
        myPgm - the program requesting to be checked in.
        latestChanges - the address set of changes between original and latest versioned program.
        myChanges - the address set of changes between original and my modified program.
    • Method Detail

      • init

        public void init()
      • mergeConflicts

        public void mergeConflicts​(int chosenConflictOption,
                                   TaskMonitor monitor)
                            throws CancelledException
        Performs a manual merge of external program conflicts.
        Parameters:
        chosenConflictOption - ASK_USER means interactively resolve conflicts. JUnit testing also allows setting this to LATEST, MY, or ORIGINAL to force selection of a particular version change.
        monitor - task monitor for informing the user of progress.
        Throws:
        CancelledException - if the user cancels the merge.
      • getConflictInfo

        public java.lang.String getConflictInfo​(ghidra.app.merge.listing.ExternalProgramMerger.IDGroup idGroup,
                                                int conflictIndex,
                                                int totalConflicts)
        Gets the information to display at the top of the conflict window indicating which conflict this is of the total external program name conflicts.
        Parameters:
        idGroup - the symbol ID group for the external program (Library) in conflict.
        conflictIndex - the index of the current conflict.
        totalConflicts - the total number of conflicts.
      • hasConflict

        public boolean hasConflict()
      • getConflictCount

        public int getConflictCount()
      • getConflicts

        public ghidra.app.merge.listing.ExternalProgramMerger.IDGroup[] getConflicts()
        Returns an array of symbol ID groups for all the external programs that are in conflict.
      • getName

        public java.lang.String getName()
        Description copied from interface: MergeResolver
        Get the name of this MergeResolver.
        Specified by:
        getName in interface MergeResolver
      • getDescription

        public java.lang.String getDescription()
        Description copied from interface: MergeResolver
        Get the description of what this MergeResolver does.
        Specified by:
        getDescription in interface MergeResolver
      • apply

        public void apply()
        Description copied from interface: MergeResolver
        Notification that the apply button was hit.
        Specified by:
        apply in interface MergeResolver
      • cancel

        public void cancel()
        Description copied from interface: MergeResolver
        Notification that the merge process was canceled.
        Specified by:
        cancel in interface MergeResolver
      • merge

        public void merge​(TaskMonitor monitor)
        Description copied from interface: MergeResolver
        Perform the merge process.
        Specified by:
        merge in interface MergeResolver
        Parameters:
        monitor - monitor that allows the user to cancel the merge operation
      • mergeExternalProgramName

        public void mergeExternalProgramName​(Program program1,
                                             Program program2,
                                             ghidra.app.merge.listing.ExternalProgramMerger.IDGroup idGroup,
                                             TaskMonitor monitor)
        Actually merges (sets or removes) the indicated external program name in program1 based on the same external program name in program2
        Parameters:
        program1 - the program to merge into.
        program2 - the program to get the merge information from.
        idGroup - the symbol ID group for the external program (Library) to merge.
        monitor - task monitor for feedback or canceling the merge.s
      • getPhases

        public java.lang.String[][] getPhases()
        Description copied from interface: MergeResolver
        Gets identifiers for the merge phases handled by this MergeResolver. If the merge has no sub-phases then return an array with a single string array. Each inner String array indicates a path for a single merge phase. Each outer array element represents a phase whose progress we wish to indicate.
        Examples:
        So for a simple phase which has no sub-phases return new String[][] {new String[] {"Phase A"}}
        So for a phase with 2 sub-phases return new String[][] { new String[] {"Phase A"}, new String[] {"Phase A", "Sub-Phase 1}, new String[] {"Phase A", "Sub-Phase 2} } .
        Specified by:
        getPhases in interface MergeResolver
        Returns:
        an array of phases.