@ -244,7 +244,11 @@ public class GitIndex {
entries . clear ( ) ;
entries . clear ( ) ;
for ( int i = 0 ; i < header . entries ; + + i ) {
for ( int i = 0 ; i < header . entries ; + + i ) {
Entry entry = new Entry ( buffer ) ;
Entry entry = new Entry ( buffer ) ;
final GitIndex . Entry existing = entries . get ( entry . name ) ;
entries . put ( entry . name , entry ) ;
entries . put ( entry . name , entry ) ;
if ( existing ! = null ) {
entry . stages | = existing . stages ;
}
}
}
lastCacheTime = cacheFile . lastModified ( ) ;
lastCacheTime = cacheFile . lastModified ( ) ;
} finally {
} finally {
@ -374,6 +378,8 @@ public class GitIndex {
private byte [ ] name ;
private byte [ ] name ;
private int stages ;
Entry ( byte [ ] key , File f , int stage )
Entry ( byte [ ] key , File f , int stage )
throws IOException {
throws IOException {
ctime = f . lastModified ( ) * 1000000L ;
ctime = f . lastModified ( ) * 1000000L ;
@ -391,6 +397,7 @@ public class GitIndex {
sha1 = writer . writeBlob ( f ) ;
sha1 = writer . writeBlob ( f ) ;
name = key ;
name = key ;
flags = ( short ) ( ( stage < < 12 ) | name . length ) ; // TODO: fix flags
flags = ( short ) ( ( stage < < 12 ) | name . length ) ; // TODO: fix flags
stages = ( 1 > > getStage ( ) ) ;
}
}
Entry ( byte [ ] key , File f , int stage , byte [ ] newContent )
Entry ( byte [ ] key , File f , int stage , byte [ ] newContent )
@ -410,6 +417,7 @@ public class GitIndex {
sha1 = writer . writeBlob ( newContent ) ;
sha1 = writer . writeBlob ( newContent ) ;
name = key ;
name = key ;
flags = ( short ) ( ( stage < < 12 ) | name . length ) ; // TODO: fix flags
flags = ( short ) ( ( stage < < 12 ) | name . length ) ; // TODO: fix flags
stages = ( 1 > > getStage ( ) ) ;
}
}
Entry ( TreeEntry f , int stage ) {
Entry ( TreeEntry f , int stage ) {
@ -429,6 +437,7 @@ public class GitIndex {
sha1 = f . getId ( ) ;
sha1 = f . getId ( ) ;
name = Constants . encode ( f . getFullName ( ) ) ;
name = Constants . encode ( f . getFullName ( ) ) ;
flags = ( short ) ( ( stage < < 12 ) | name . length ) ; // TODO: fix flags
flags = ( short ) ( ( stage < < 12 ) | name . length ) ; // TODO: fix flags
stages = ( 1 > > getStage ( ) ) ;
}
}
Entry ( ByteBuffer b ) {
Entry ( ByteBuffer b ) {
@ -445,6 +454,7 @@ public class GitIndex {
b . get ( sha1bytes ) ;
b . get ( sha1bytes ) ;
sha1 = ObjectId . fromRaw ( sha1bytes ) ;
sha1 = ObjectId . fromRaw ( sha1bytes ) ;
flags = b . getShort ( ) ;
flags = b . getShort ( ) ;
stages = ( 1 < < getStage ( ) ) ;
name = new byte [ flags & 0xFFF ] ;
name = new byte [ flags & 0xFFF ] ;
b . get ( name ) ;
b . get ( name ) ;
b
b
@ -643,6 +653,19 @@ public class GitIndex {
return false ;
return false ;
}
}
/ * *
* Returns the stages in which the entry ' s file is recorded in the index .
* The stages are bit - encoded : bit N is set if the file is present
* in stage N . In particular , the N - th bit will be set if this entry
* itself is in stage N ( see getStage ( ) ) .
*
* @return flags denoting stages
* @see # getStage ( )
* /
public int getStages ( ) {
return stages ;
}
// for testing
// for testing
void forceRecheck ( ) {
void forceRecheck ( ) {
mtime = - 1 ;
mtime = - 1 ;