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)
|
if (isBare() || getDirectory() == null)
|
||||||
throw new NoWorkTreeException();
|
throw new NoWorkTreeException();
|
||||||
|
|
||||||
File mergeHeadFile = new File(getDirectory(), Constants.MERGE_HEAD);
|
byte[] raw = readGitDirectoryFile(Constants.MERGE_HEAD);
|
||||||
byte[] raw;
|
if (raw == null)
|
||||||
try {
|
|
||||||
raw = IO.readFully(mergeHeadFile);
|
|
||||||
} catch (FileNotFoundException notFound) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (raw.length == 0)
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
LinkedList<ObjectId> heads = new LinkedList<ObjectId>();
|
LinkedList<ObjectId> heads = new LinkedList<ObjectId>();
|
||||||
|
@ -1190,21 +1183,7 @@ public List<ObjectId> readMergeHeads() throws IOException, NoWorkTreeException {
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public void writeMergeHeads(List<ObjectId> heads) throws IOException {
|
public void writeMergeHeads(List<ObjectId> heads) throws IOException {
|
||||||
File mergeHeadFile = new File(gitDir, Constants.MERGE_HEAD);
|
writeHeadsFile(heads, 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1223,16 +1202,8 @@ public ObjectId readCherryPickHead() throws IOException,
|
||||||
if (isBare() || getDirectory() == null)
|
if (isBare() || getDirectory() == null)
|
||||||
throw new NoWorkTreeException();
|
throw new NoWorkTreeException();
|
||||||
|
|
||||||
File mergeHeadFile = new File(getDirectory(),
|
byte[] raw = readGitDirectoryFile(Constants.CHERRY_PICK_HEAD);
|
||||||
Constants.CHERRY_PICK_HEAD);
|
if (raw == null)
|
||||||
byte[] raw;
|
|
||||||
try {
|
|
||||||
raw = IO.readFully(mergeHeadFile);
|
|
||||||
} catch (FileNotFoundException notFound) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (raw.length == 0)
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return ObjectId.fromString(raw, 0);
|
return ObjectId.fromString(raw, 0);
|
||||||
|
@ -1248,18 +1219,54 @@ public ObjectId readCherryPickHead() throws IOException,
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public void writeCherryPickHead(ObjectId head) throws IOException {
|
public void writeCherryPickHead(ObjectId head) throws IOException {
|
||||||
File cherryPickHeadFile = new File(gitDir, Constants.CHERRY_PICK_HEAD);
|
List<ObjectId> heads = (head != null) ? Collections.singletonList(head)
|
||||||
if (head != null) {
|
: 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(
|
BufferedOutputStream bos = new BufferedOutputStream(
|
||||||
new FileOutputStream(cherryPickHeadFile));
|
new FileOutputStream(headsFile));
|
||||||
try {
|
try {
|
||||||
head.copyTo(bos);
|
for (ObjectId id : heads) {
|
||||||
bos.write('\n');
|
id.copyTo(bos);
|
||||||
|
bos.write('\n');
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
bos.close();
|
bos.close();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
FileUtils.delete(cherryPickHeadFile, FileUtils.SKIP_MISSING);
|
FileUtils.delete(headsFile, FileUtils.SKIP_MISSING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue