private void InlineClearcaseFileVersion(string elementPath, string elementOid, string version, IEnumerable <string> names, bool writeNames) { string fullName = elementPath + "@@" + version; string fileName = _cleartool.Get(fullName); var fileInfo = new FileInfo(fileName); if (!fileInfo.Exists) { // in incremental import, elements may have been moved, without a new version, we try to use the oid // (we don't always do that to avoid unecessary calls to cleartool) string newElementName = _cleartool.GetElement(elementOid); if (!string.IsNullOrEmpty(newElementName)) { // GetElement returns a "real" element name, ie ending with "@@" fullName = newElementName + version; fileName = _cleartool.Get(fullName); fileInfo = new FileInfo(fileName); } else { Logger.TraceData(TraceEventType.Warning, (int)TraceId.ApplyChangeSet, "Element with oid " + elementOid + " could not be found in clearcase"); } } if (!fileInfo.Exists) { Logger.TraceData(TraceEventType.Warning, (int)TraceId.ApplyChangeSet, "Version " + fullName + " could not be read from clearcase"); // still create a file for later delete or rename foreach (string name in names) { if (writeNames) { _writer.Write("M 644 inline " + name + "\n"); } InlineString("// clearcase error while retrieving " + fullName); } return; } // clearcase always create as ReadOnly fileInfo.IsReadOnly = false; foreach (string name in names) { foreach (var hook in PreWritingHooks) { if (hook.Target.IsMatch(name)) { hook.Hook(fileName); } } if (writeNames) { _writer.Write("M 644 inline " + name + "\n"); } _writer.Write("data " + fileInfo.Length + "\n"); // Flush() before using BaseStream directly _writer.Flush(); using (var s = new FileStream(fileName, FileMode.Open, FileAccess.Read)) s.CopyTo(_writer.BaseStream); _writer.Write("\n"); foreach (var hook in PostWritingHooks) { if (hook.Target.IsMatch(name)) { hook.Hook(fileName, _writer); } } } fileInfo.Delete(); }