Browse Source

A stages field and getter for GitIndex entry introduced

Currently, if the Index contains a file in more than one stage, only
the last entry (containing the highest stage) will be registered in
GitIndex. For applications it can be useful to not only know about the
highest stage, but also which other stages are present, e.g. to detect
the type of conflict the file is in.

Change-Id: I2d4ff9f6023335d9ba6ea25d8e77c8e283ae53cb
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
tags/v0.8.1
Robin Rosenberg 14 years ago
parent
commit
a496410df9
1 changed files with 23 additions and 0 deletions
  1. 23
    0
      org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java

+ 23
- 0
org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java View File

@@ -244,7 +244,11 @@ public class GitIndex {
entries.clear();
for (int i = 0; i < header.entries; ++i) {
Entry entry = new Entry(buffer);
final GitIndex.Entry existing = entries.get(entry.name);
entries.put(entry.name, entry);
if (existing != null) {
entry.stages |= existing.stages;
}
}
lastCacheTime = cacheFile.lastModified();
} finally {
@@ -374,6 +378,8 @@ public class GitIndex {

private byte[] name;

private int stages;

Entry(byte[] key, File f, int stage)
throws IOException {
ctime = f.lastModified() * 1000000L;
@@ -391,6 +397,7 @@ public class GitIndex {
sha1 = writer.writeBlob(f);
name = key;
flags = (short) ((stage << 12) | name.length); // TODO: fix flags
stages = (1 >> getStage());
}

Entry(byte[] key, File f, int stage, byte[] newContent)
@@ -410,6 +417,7 @@ public class GitIndex {
sha1 = writer.writeBlob(newContent);
name = key;
flags = (short) ((stage << 12) | name.length); // TODO: fix flags
stages = (1 >> getStage());
}

Entry(TreeEntry f, int stage) {
@@ -429,6 +437,7 @@ public class GitIndex {
sha1 = f.getId();
name = Constants.encode(f.getFullName());
flags = (short) ((stage << 12) | name.length); // TODO: fix flags
stages = (1 >> getStage());
}

Entry(ByteBuffer b) {
@@ -445,6 +454,7 @@ public class GitIndex {
b.get(sha1bytes);
sha1 = ObjectId.fromRaw(sha1bytes);
flags = b.getShort();
stages = (1 << getStage());
name = new byte[flags & 0xFFF];
b.get(name);
b
@@ -643,6 +653,19 @@ public class GitIndex {
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
void forceRecheck() {
mtime = -1;

Loading…
Cancel
Save