Esempio n. 1
0
        /// <summary>
        /// Parses a VFS cas relative path to extract file placement data
        /// </summary>
        public static bool TryParseCasRelativePath(string casRelativePath, out VfsFilePlacementData data)
        {
            data = default;
            var parts = casRelativePath.Split(PathSplitChars);

            if (parts.Length != 3)
            {
                return(false);
            }

            if (Enum.TryParse <HashType>(parts[0], ignoreCase: true, out var hashType))
            {
                try
                {
                    var fileName      = Path.GetFileNameWithoutExtension(parts[2]);
                    var fileNameParts = fileName.Split(FilePlacementInfoFileNameSplitChars);

                    if (fileNameParts.Length != 4)
                    {
                        return(false);
                    }

                    var hash = new ContentHash(hashType, HexUtilities.HexToBytes(fileNameParts[0]));
                    if (Enum.TryParse <FileRealizationMode>(fileNameParts[1], out var realizationMode) &&
                        Enum.TryParse <FileAccessMode>(fileNameParts[2], out var accessMode))
                    {
                        data = new VfsFilePlacementData(hash, realizationMode, accessMode);
                        return(true);
                    }
                }
                catch (Exception ex)
                {
                    new ErrorResult(ex).IgnoreFailure();
                    return(false);
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Creates a CAS relative path for the given placement data
        /// </summary>
        public static string CreateCasRelativePath(VfsFilePlacementData data, int nodeIndex)
        {
            var hashHex = data.Hash.ToHex();

            return($@"{data.Hash.HashType}\{hashHex.Substring(0, 3)}\{hashHex}-{data.RealizationMode}-{data.AccessMode}-{nodeIndex}.blob");
        }