in src/org/jetbrains/tfsIntegration/core/tfs/StatusProvider.java [144:238]
private static ServerStatus determineServerStatus(final @Nullable PendingChange pendingChange, final @Nullable ExtendedItem item) {
if (item == null) {
return ServerStatus.Unversioned.INSTANCE;
}
ChangeTypeMask change = new ChangeTypeMask(item.getChg());
change.remove(ChangeType_type0.None, ChangeType_type0.Lock);
if (item.getLocal() == null && change.isEmpty()) {
// TODO report not downloaded items as unversioned ?
return ServerStatus.Unversioned.INSTANCE;
}
if (change.isEmpty()) {
TFSVcs.assertTrue(item.getLver() != Integer.MIN_VALUE);
if (item.getLver() < item.getLatest()) {
return new ServerStatus.OutOfDate(item);
}
else {
return new ServerStatus.UpToDate(item);
}
}
if (change.containsAny(ChangeType_type0.Add) ||
(change.containsAny(ChangeType_type0.Merge, ChangeType_type0.Branch) && item.getLatest() == Integer.MIN_VALUE)) {
//TFSVcs.assertTrue(change.contains(ChangeType.Edit) || item.getType() == ItemType.Folder);
TFSVcs.assertTrue(change.containsAny(ChangeType_type0.Encoding));
TFSVcs.assertTrue(item.getLatest() == Integer.MIN_VALUE);
TFSVcs.assertTrue(item.getLver() == Integer.MIN_VALUE);
if (pendingChange != null) {
return new ServerStatus.ScheduledForAddition(pendingChange);
}
else {
return new ServerStatus.ScheduledForAddition(item);
}
}
else if (change.contains(ChangeType_type0.Delete)) {
// TFSVcs.assertTrue(change.containsOnly(ChangeType.Value.Delete)); // NOTE: may come with "Lock" change
//TFSVcs.assertTrue(item.getLatest() != Integer.MIN_VALUE);
//TFSVcs.assertTrue(item.getLver() == Integer.MIN_VALUE);
//TFSVcs.assertTrue(item.getLocal() == null);
if (pendingChange != null) {
return new ServerStatus.ScheduledForDeletion(pendingChange);
}
else {
return new ServerStatus.ScheduledForDeletion(item);
}
}
else if (change.containsAny(ChangeType_type0.Edit, ChangeType_type0.Merge) && !change.contains(ChangeType_type0.Rename)) {
TFSVcs.assertTrue(item.getLatest() != Integer.MIN_VALUE);
if (item.getLver() != Integer.MIN_VALUE) {
TFSVcs.assertTrue(item.getLocal() != null);
if (pendingChange != null) {
return new ServerStatus.CheckedOutForEdit(pendingChange);
}
else {
return new ServerStatus.CheckedOutForEdit(item);
}
}
else {
return new ServerStatus.ScheduledForAddition(item);
}
}
else if (change.containsAny(ChangeType_type0.Merge, ChangeType_type0.Rename) && !change.contains(ChangeType_type0.Edit)) {
if (pendingChange != null) {
return new ServerStatus.Renamed(pendingChange);
}
else {
return new ServerStatus.Renamed(item);
}
}
else if (change.containsAll(ChangeType_type0.Rename, ChangeType_type0.Edit)) {
TFSVcs.assertTrue(item.getLatest() != Integer.MIN_VALUE);
TFSVcs.assertTrue(item.getLver() != Integer.MIN_VALUE);
TFSVcs.assertTrue(item.getLocal() != null);
if (pendingChange != null) {
return new ServerStatus.RenamedCheckedOut(pendingChange);
}
else {
return new ServerStatus.RenamedCheckedOut(item);
}
}
else if (change.contains(ChangeType_type0.Undelete)) {
if (pendingChange != null) {
return new ServerStatus.Undeleted(pendingChange);
}
else {
return new ServerStatus.Undeleted(item);
}
}
TFSVcs.LOG.error("Uncovered case for item " +
(item.getLocal() != null ? VersionControlPath.localPathFromTfsRepresentation(item.getLocal()) : item.getTitem()));
return null;
}