Skip to content
Snippets Groups Projects
Commit 0df679ae authored by Robin Rosenberg's avatar Robin Rosenberg Committed by Code Review
Browse files

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

parents 0f2d50b6 a496410d
No related branches found
No related tags found
No related merge requests found
...@@ -244,7 +244,11 @@ public void read() throws IOException { ...@@ -244,7 +244,11 @@ public void read() throws IOException {
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 Entry { ...@@ -374,6 +378,8 @@ public class Entry {
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 Entry { ...@@ -391,6 +397,7 @@ public class Entry {
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 Entry { ...@@ -410,6 +417,7 @@ public class Entry {
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 Entry { ...@@ -429,6 +437,7 @@ public class Entry {
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 Entry { ...@@ -445,6 +454,7 @@ public class Entry {
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 boolean isModified(File wd, boolean forceContentCheck) { ...@@ -643,6 +653,19 @@ public boolean isModified(File wd, boolean forceContentCheck) {
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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment