if (isBare() || getDirectory() == null)
throw new NoWorkTreeException();
- File mergeHeadFile = new File(getDirectory(), Constants.MERGE_HEAD);
- byte[] raw;
- try {
- raw = IO.readFully(mergeHeadFile);
- } catch (FileNotFoundException notFound) {
- return null;
- }
-
- if (raw.length == 0)
+ byte[] raw = readGitDirectoryFile(Constants.MERGE_HEAD);
+ if (raw == null)
return null;
LinkedList<ObjectId> heads = new LinkedList<ObjectId>();
* @throws IOException
*/
public void writeMergeHeads(List<ObjectId> heads) throws IOException {
- File mergeHeadFile = new File(gitDir, Constants.MERGE_HEAD);
- if (heads != null) {
- BufferedOutputStream bos = new BufferedOutputStream(
- new FileOutputStream(mergeHeadFile));
- try {
- for (ObjectId id : heads) {
- id.copyTo(bos);
- bos.write('\n');
- }
- } finally {
- bos.close();
- }
- } else {
- FileUtils.delete(mergeHeadFile);
- }
+ writeHeadsFile(heads, Constants.MERGE_HEAD);
}
/**
if (isBare() || getDirectory() == null)
throw new NoWorkTreeException();
- File mergeHeadFile = new File(getDirectory(),
- Constants.CHERRY_PICK_HEAD);
- byte[] raw;
- try {
- raw = IO.readFully(mergeHeadFile);
- } catch (FileNotFoundException notFound) {
- return null;
- }
-
- if (raw.length == 0)
+ byte[] raw = readGitDirectoryFile(Constants.CHERRY_PICK_HEAD);
+ if (raw == null)
return null;
return ObjectId.fromString(raw, 0);
* @throws IOException
*/
public void writeCherryPickHead(ObjectId head) throws IOException {
- File cherryPickHeadFile = new File(gitDir, Constants.CHERRY_PICK_HEAD);
- if (head != null) {
+ List<ObjectId> heads = (head != null) ? Collections.singletonList(head)
+ : null;
+ writeHeadsFile(heads, Constants.CHERRY_PICK_HEAD);
+ }
+
+ /**
+ * Read a file from the git directory.
+ *
+ * @param filename
+ * @return the raw contents or null if the file doesn't exist or is empty
+ * @throws IOException
+ */
+ private byte[] readGitDirectoryFile(String filename) throws IOException {
+ File file = new File(getDirectory(), filename);
+ try {
+ byte[] raw = IO.readFully(file);
+ return raw.length > 0 ? raw : null;
+ } catch (FileNotFoundException notFound) {
+ return null;
+ }
+ }
+
+ /**
+ * Write the given heads to a file in the git directory.
+ *
+ * @param heads
+ * a list of object ids to write or null if the file should be
+ * deleted.
+ * @param filename
+ * @throws FileNotFoundException
+ * @throws IOException
+ */
+ private void writeHeadsFile(List<ObjectId> heads, String filename)
+ throws FileNotFoundException, IOException {
+ File headsFile = new File(getDirectory(), filename);
+ if (heads != null) {
BufferedOutputStream bos = new BufferedOutputStream(
- new FileOutputStream(cherryPickHeadFile));
+ new FileOutputStream(headsFile));
try {
- head.copyTo(bos);
- bos.write('\n');
+ for (ObjectId id : heads) {
+ id.copyTo(bos);
+ bos.write('\n');
+ }
} finally {
bos.close();
}
} else {
- FileUtils.delete(cherryPickHeadFile, FileUtils.SKIP_MISSING);
+ FileUtils.delete(headsFile, FileUtils.SKIP_MISSING);
}
}
}