|
|
@@ -1158,15 +1158,8 @@ public abstract class Repository { |
|
|
|
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 abstract class Repository { |
|
|
|
* @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 abstract class Repository { |
|
|
|
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 abstract class Repository { |
|
|
|
* @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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |