private bool TryValidateGVFSVersion(GVFSEnlistment enlistment, ITracer tracer, ServerGVFSConfig config, out string errorMessage, out bool errorIsFatal) { errorMessage = null; errorIsFatal = false; using (ITracer activity = tracer.StartActivity("ValidateGVFSVersion", EventLevel.Informational)) { Version currentVersion = new Version(ProcessHelper.GetCurrentProcessVersion()); IEnumerable <ServerGVFSConfig.VersionRange> allowedGvfsClientVersions = config != null ? config.AllowedGVFSClientVersions : null; if (allowedGvfsClientVersions == null || !allowedGvfsClientVersions.Any()) { errorMessage = "WARNING: Unable to validate your GVFS version" + Environment.NewLine; if (config == null) { errorMessage += "Could not query valid GVFS versions from: " + Uri.EscapeUriString(enlistment.RepoUrl); } else { errorMessage += "Server not configured to provide supported GVFS versions"; } EventMetadata metadata = new EventMetadata(); tracer.RelatedError(metadata, errorMessage, Keywords.Network); return(false); } foreach (ServerGVFSConfig.VersionRange versionRange in config.AllowedGVFSClientVersions) { if (currentVersion >= versionRange.Min && (versionRange.Max == null || currentVersion <= versionRange.Max)) { activity.RelatedEvent( EventLevel.Informational, "GVFSVersionValidated", new EventMetadata { { "SupportedVersionRange", versionRange }, }); enlistment.SetGVFSVersion(currentVersion.ToString()); return(true); } } activity.RelatedError("GVFS version {0} is not supported", currentVersion); } errorMessage = "ERROR: Your GVFS version is no longer supported. Install the latest and try again."; errorIsFatal = true; return(false); }