Browse Source

Reuse Merger's ObjectReader from ResolveMerger

The base Merger class already has a single ObjectReader instance that
it handles releasing as necessary, so creating new readers is not
necessary.

Change-Id: I990ec43af7df448c7825fc1b10e62eadaa3e0c2a
stable-3.5
Dave Borowitz 12 years ago committed by Shawn Pearce
parent
commit
e06082c171
  1. 45
      org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java

45
org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java

@ -81,7 +81,6 @@ import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevTree;
import org.eclipse.jgit.treewalk.AbstractTreeIterator;
@ -309,29 +308,24 @@ public class ResolveMerger extends ThreeWayMerger {
}
private void checkout() throws NoWorkTreeException, IOException {
ObjectReader r = db.getObjectDatabase().newReader();
try {
for (Map.Entry<String, DirCacheEntry> entry : toBeCheckedOut
.entrySet()) {
File f = new File(db.getWorkTree(), entry.getKey());
createDir(f.getParentFile());
DirCacheCheckout.checkoutEntry(db, f, entry.getValue(), r);
modifiedFiles.add(entry.getKey());
}
// Iterate in reverse so that "folder/file" is deleted before
// "folder". Otherwise this could result in a failing path because
// of a non-empty directory, for which delete() would fail.
for (int i = toBeDeleted.size() - 1; i >= 0; i--) {
String fileName = toBeDeleted.get(i);
File f = new File(db.getWorkTree(), fileName);
if (!f.delete())
if (!f.isDirectory())
failingPaths.put(fileName,
MergeFailureReason.COULD_NOT_DELETE);
modifiedFiles.add(fileName);
}
} finally {
r.release();
for (Map.Entry<String, DirCacheEntry> entry : toBeCheckedOut
.entrySet()) {
File f = new File(db.getWorkTree(), entry.getKey());
createDir(f.getParentFile());
DirCacheCheckout.checkoutEntry(db, f, entry.getValue(), reader);
modifiedFiles.add(entry.getKey());
}
// Iterate in reverse so that "folder/file" is deleted before
// "folder". Otherwise this could result in a failing path because
// of a non-empty directory, for which delete() would fail.
for (int i = toBeDeleted.size() - 1; i >= 0; i--) {
String fileName = toBeDeleted.get(i);
File f = new File(db.getWorkTree(), fileName);
if (!f.delete())
if (!f.isDirectory())
failingPaths.put(fileName,
MergeFailureReason.COULD_NOT_DELETE);
modifiedFiles.add(fileName);
}
}
@ -368,7 +362,6 @@ public class ResolveMerger extends ThreeWayMerger {
}
DirCache dc = db.readDirCache();
ObjectReader or = db.getObjectDatabase().newReader();
Iterator<String> mpathsIt=modifiedFiles.iterator();
while(mpathsIt.hasNext()) {
String mpath=mpathsIt.next();
@ -378,7 +371,7 @@ public class ResolveMerger extends ThreeWayMerger {
FileOutputStream fos = new FileOutputStream(new File(
db.getWorkTree(), mpath));
try {
or.open(entry.getObjectId()).copyTo(fos);
reader.open(entry.getObjectId()).copyTo(fos);
} finally {
fos.close();
}

Loading…
Cancel
Save