Browse Source

Merge "A stages field and getter for GitIndex entry introduced"

stable-0.8
Robin Rosenberg 15 years ago committed by Code Review
parent
commit
0df679aea1
  1. 23
      org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java

23
org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java

@ -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;

Loading…
Cancel
Save