Refactor reading and writing heads in Repository
Add private methods which are used for reading and writing MERGE_HEAD and CHERRY_PICK_HEAD files, as suggested in the comments on change I947967fdc2f1d55016c95106b104c2afcc9797a1. Change-Id: If4617a05ee57054b8b1fcba36a06a641340ecc0e Signed-off-by: Robin Stocker <robin@nibor.org>
This commit is contained in:
parent
6e10aa42e9
commit
3151657404
|
@ -1158,15 +1158,8 @@ public List<ObjectId> readMergeHeads() throws IOException, NoWorkTreeException {
|
|||
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>();
|
||||
|
@ -1190,21 +1183,7 @@ public List<ObjectId> readMergeHeads() throws IOException, NoWorkTreeException {
|
|||
* @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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1223,16 +1202,8 @@ public ObjectId readCherryPickHead() throws IOException,
|
|||
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);
|
||||
|
@ -1248,18 +1219,54 @@ public ObjectId readCherryPickHead() throws IOException,
|
|||
* @throws IOException
|
||||
*/
|
||||
public void writeCherryPickHead(ObjectId head) throws IOException {
|
||||
File cherryPickHeadFile = new File(gitDir, Constants.CHERRY_PICK_HEAD);
|
||||
if (head != null) {
|
||||
BufferedOutputStream bos = new BufferedOutputStream(
|
||||
new FileOutputStream(cherryPickHeadFile));
|
||||
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 {
|
||||
head.copyTo(bos);
|
||||
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(headsFile));
|
||||
try {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue