org.eclipse.jgit.merge
Class ResolveMerger

java.lang.Object
  extended by org.eclipse.jgit.merge.Merger
      extended by org.eclipse.jgit.merge.ThreeWayMerger
          extended by org.eclipse.jgit.merge.ResolveMerger

public class ResolveMerger
extends ThreeWayMerger

A three-way merger performing a content-merge if necessary


Nested Class Summary
static class ResolveMerger.MergeFailureReason
          If the merge fails (means: not stopped because of unresolved conflicts) this enum is used to explain why it failed
 
Field Summary
 
Fields inherited from class org.eclipse.jgit.merge.Merger
db, reader, sourceCommits, sourceObjects, sourceTrees, walk
 
Constructor Summary
protected ResolveMerger(Repository local)
           
protected ResolveMerger(Repository local, boolean inCore)
           
 
Method Summary
 boolean failed()
          Returns whether this merge failed (i.e.
 String[] getCommitNames()
           
 Map<String,ResolveMerger.MergeFailureReason> getFailingPaths()
           
 Map<String,MergeResult<? extends Sequence>> getMergeResults()
           
 List<String> getModifiedFiles()
           
 ObjectId getResultTreeId()
           
 Map<String,DirCacheEntry> getToBeCheckedOut()
           
 List<String> getUnmergedPaths()
           
protected  boolean mergeImpl()
          Execute the merge.
 void setCommitNames(String[] commitNames)
           
 void setDirCache(DirCache dc)
          Sets the DirCache which shall be used by this merger.
 void setWorkingTreeIterator(WorkingTreeIterator workingTreeIterator)
          Sets the WorkingTreeIterator to be used by this merger.
 
Methods inherited from class org.eclipse.jgit.merge.ThreeWayMerger
merge, mergeBase, setBase
 
Methods inherited from class org.eclipse.jgit.merge.Merger
getBaseCommit, getObjectInserter, getRepository, mergeBase, openTree
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ResolveMerger

protected ResolveMerger(Repository local,
                        boolean inCore)
Parameters:
local -
inCore -

ResolveMerger

protected ResolveMerger(Repository local)
Parameters:
local -
Method Detail

mergeImpl

protected boolean mergeImpl()
                     throws IOException
Description copied from class: Merger
Execute the merge.

This method is called from Merger.merge(AnyObjectId[]) after the Merger.sourceObjects, Merger.sourceCommits and Merger.sourceTrees have been populated.

Specified by:
mergeImpl in class Merger
Returns:
true if the merge was completed without conflicts; false if the merge strategy cannot handle this merge or there were conflicts preventing it from automatically resolving all paths.
Throws:
IncorrectObjectTypeException - one of the input objects is not a commit, but the strategy requires it to be a commit.
IOException - one or more sources could not be read, or outputs could not be written to the Repository.

getResultTreeId

public ObjectId getResultTreeId()
Specified by:
getResultTreeId in class Merger
Returns:
resulting tree, if Merger.merge(AnyObjectId[]) returned true.

setCommitNames

public void setCommitNames(String[] commitNames)
Parameters:
commitNames - the names of the commits as they would appear in conflict markers

getCommitNames

public String[] getCommitNames()
Returns:
the names of the commits as they would appear in conflict markers.

getUnmergedPaths

public List<String> getUnmergedPaths()
Returns:
the paths with conflicts. This is a subset of the files listed by getModifiedFiles()

getModifiedFiles

public List<String> getModifiedFiles()
Returns:
the paths of files which have been modified by this merge. A file will be modified if a content-merge works on this path or if the merge algorithm decides to take the theirs-version. This is a superset of the files listed by getUnmergedPaths().

getToBeCheckedOut

public Map<String,DirCacheEntry> getToBeCheckedOut()
Returns:
a map which maps the paths of files which have to be checked out because the merge created new fully-merged content for this file into the index. This means: the merge wrote a new stage 0 entry for this path.

getMergeResults

public Map<String,MergeResult<? extends Sequence>> getMergeResults()
Returns:
the mergeResults

getFailingPaths

public Map<String,ResolveMerger.MergeFailureReason> getFailingPaths()
Returns:
lists paths causing this merge to fail (not stopped because of a conflict). null is returned if this merge didn't fail.

failed

public boolean failed()
Returns whether this merge failed (i.e. not stopped because of a conflict)

Returns:
true if a failure occurred, false otherwise

setDirCache

public void setDirCache(DirCache dc)
Sets the DirCache which shall be used by this merger. If the DirCache is not set explicitly this merger will implicitly get and lock a default DirCache. If the DirCache is explicitly set the caller is responsible to lock it in advance. Finally the merger will call DirCache.commit() which requires that the DirCache is locked. If the mergeImpl() returns without throwing an exception the lock will be released. In case of exceptions the caller is responsible to release the lock.

Parameters:
dc - the DirCache to set

setWorkingTreeIterator

public void setWorkingTreeIterator(WorkingTreeIterator workingTreeIterator)
Sets the WorkingTreeIterator to be used by this merger. If no WorkingTreeIterator is set this merger will ignore the working tree and fail if a content merge is necessary.

TODO: enhance WorkingTreeIterator to support write operations. Then this merger will be able to merge with a different working tree abstraction.

Parameters:
workingTreeIterator - the workingTreeIt to set


Copyright © 2012. All Rights Reserved.