}
String name = parseString(line);
name = name != null ? name : getThisDirName();
Map entryAttrs = new SVNHashMap();
entryAttrs.put(SVNProperty.NAME, name);
SVNEntry entry = new SVNEntry(entryAttrs, this, name);
entry.setDepth(SVNDepth.INFINITY);
line = reader.readLine();
String kind = parseValue(line);
if (kind != null) {
SVNNodeKind parsedKind = SVNNodeKind.parseKind(kind);
if (parsedKind != SVNNodeKind.UNKNOWN && parsedKind != SVNNodeKind.NONE) {
entryAttrs.put(SVNProperty.KIND, kind);
} else {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.NODE_UNKNOWN_KIND, "Entry ''{0}'' has invalid node kind", name);
SVNErrorManager.error(err, SVNLogType.WC);
}
} else {
entryAttrs.put(SVNProperty.KIND, SVNNodeKind.NONE.toString());
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String revision = parseValue(line);
if (revision != null) {
entryAttrs.put(SVNProperty.REVISION, revision);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String url = parseString(line);
if (url != null) {
entryAttrs.put(SVNProperty.URL, url);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String reposRoot = parseString(line);
if (reposRoot != null && url != null && !SVNPathUtil.isAncestor(reposRoot, url)) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_CORRUPT, "Entry for ''{0}'' has invalid repository root", name);
SVNErrorManager.error(err, SVNLogType.WC);
} else if (reposRoot != null) {
entryAttrs.put(SVNProperty.REPOS, reposRoot);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String schedule = parseValue(line);
if (schedule != null) {
if (SVNProperty.SCHEDULE_ADD.equals(schedule) || SVNProperty.SCHEDULE_DELETE.equals(schedule) || SVNProperty.SCHEDULE_REPLACE.equals(schedule)) {
entryAttrs.put(SVNProperty.SCHEDULE, schedule);
} else {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ENTRY_ATTRIBUTE_INVALID, "Entry ''{0}'' has invalid ''{1}'' value", new Object[]{name, SVNProperty.SCHEDULE});
SVNErrorManager.error(err, SVNLogType.WC);
}
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String timestamp = parseValue(line);
if (timestamp != null) {
entryAttrs.put(SVNProperty.TEXT_TIME, timestamp);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String checksum = parseString(line);
if (checksum != null) {
entryAttrs.put(SVNProperty.CHECKSUM, checksum);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String committedDate = parseValue(line);
if (committedDate != null) {
entryAttrs.put(SVNProperty.COMMITTED_DATE, committedDate);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String committedRevision = parseValue(line);
if (committedRevision != null) {
entryAttrs.put(SVNProperty.COMMITTED_REVISION, committedRevision);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String committedAuthor = parseString(line);
if (committedAuthor != null) {
entryAttrs.put(SVNProperty.LAST_AUTHOR, committedAuthor);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
boolean hasProps = parseBoolean(line, ATTRIBUTE_HAS_PROPS);
if (hasProps) {
entryAttrs.put(SVNProperty.HAS_PROPS, SVNProperty.toString(hasProps));
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
boolean hasPropMods = parseBoolean(line, ATTRIBUTE_HAS_PROP_MODS);
if (hasPropMods) {
entryAttrs.put(SVNProperty.HAS_PROP_MODS, SVNProperty.toString(hasPropMods));
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String cachablePropsStr = parseValue(line);
if (cachablePropsStr != null) {
String[] cachableProps = fromString(cachablePropsStr, " ");
entryAttrs.put(SVNProperty.CACHABLE_PROPS, cachableProps);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String presentPropsStr = parseValue(line);
if (presentPropsStr != null) {
String[] presentProps = fromString(presentPropsStr, " ");
entryAttrs.put(SVNProperty.PRESENT_PROPS, presentProps);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String prejFile = parseString(line);
if (prejFile != null) {
entryAttrs.put(SVNProperty.PROP_REJECT_FILE, prejFile);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String conflictOldFile = parseString(line);
if (conflictOldFile != null) {
entryAttrs.put(SVNProperty.CONFLICT_OLD, conflictOldFile);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String conflictNewFile = parseString(line);
if (conflictNewFile != null) {
entryAttrs.put(SVNProperty.CONFLICT_NEW, conflictNewFile);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String conflictWorkFile = parseString(line);
if (conflictWorkFile != null) {
entryAttrs.put(SVNProperty.CONFLICT_WRK, conflictWorkFile);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
boolean isCopied = parseBoolean(line, ATTRIBUTE_COPIED);
if (isCopied) {
entryAttrs.put(SVNProperty.COPIED, SVNProperty.toString(isCopied));
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String copyfromURL = parseString(line);
if (copyfromURL != null) {
entryAttrs.put(SVNProperty.COPYFROM_URL, copyfromURL);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String copyfromRevision = parseValue(line);
if (copyfromRevision != null) {
entryAttrs.put(SVNProperty.COPYFROM_REVISION, copyfromRevision);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
boolean isDeleted = parseBoolean(line, ATTRIBUTE_DELETED);
if (isDeleted) {
entryAttrs.put(SVNProperty.DELETED, SVNProperty.toString(isDeleted));
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
boolean isAbsent = parseBoolean(line, ATTRIBUTE_ABSENT);
if (isAbsent) {
entryAttrs.put(SVNProperty.ABSENT, SVNProperty.toString(isAbsent));
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
boolean isIncomplete = parseBoolean(line, ATTRIBUTE_INCOMPLETE);
if (isIncomplete) {
entryAttrs.put(SVNProperty.INCOMPLETE, SVNProperty.toString(isIncomplete));
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String uuid = parseString(line);
if (uuid != null) {
entryAttrs.put(SVNProperty.UUID, uuid);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String lockToken = parseString(line);
if (lockToken != null) {
entryAttrs.put(SVNProperty.LOCK_TOKEN, lockToken);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String lockOwner = parseString(line);
if (lockOwner != null) {
entryAttrs.put(SVNProperty.LOCK_OWNER, lockOwner);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String lockComment = parseString(line);
if (lockComment != null) {
entryAttrs.put(SVNProperty.LOCK_COMMENT, lockComment);
}
line = reader.readLine();
if (isEntryFinished(line)) {
return entry;
}
String lockCreationDate = parseValue(line);
if (lockCreationDate != null) {
entryAttrs.put(SVNProperty.LOCK_CREATION_DATE, lockCreationDate);
}
if (readExtraOptions(reader, entryAttrs)) {
return entry;
}