@ -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 ( heads File ) ) ;
try {
head . copyTo ( bos ) ;
for ( ObjectId id : heads ) {
id . copyTo ( bos ) ;
bos . write ( '\n' ) ;
}
} finally {
bos . close ( ) ;
}
} else {
FileUtils . delete ( cherryPickHeadFile , FileUtils . SKIP_MISSING ) ;
FileUtils . delete ( heads File , FileUtils . SKIP_MISSING ) ;
}
}
}