Beispiel #1
0
        public static string CreateDepsCacheString(
            BuildTranslation translation,
            IFileDecider fileDecider)
        {
            //  SortedDictionary is used to canonicalize the output.

            SortedDictionary<string, string> eiVersions = new SortedDictionary<string, string>();
            SortedDictionary<string, string> eoVersions = new SortedDictionary<string, string>();
            SortedDictionary<string, string> iiVersions = new SortedDictionary<string, string>();

            foreach (var filePath in translation.ExplicitInputs) {
                string versionStamp = fileDecider.GetVersionStamp(filePath);
                eiVersions[filePath] = versionStamp;
            }
            foreach (var filePath in translation.ExplicitOutputs) {
                string versionStamp = fileDecider.GetVersionStamp(filePath);
                eoVersions[filePath] = versionStamp;
            }
            foreach (var filePath in translation.ImplicitInputs) {
                string versionStamp = fileDecider.GetVersionStamp(filePath);
                iiVersions[filePath] = versionStamp;
            }

            string translationParameters = translation.GetCacheableTranslationParameters();
            if (translationParameters == null) {
                return null;
            }

            StringBuilder sb = new StringBuilder();
            sb.Append("__ExplicitInputs:\n");
            foreach (var kvp in eiVersions) {
                sb.AppendFormat("\t{0} >> {1}\n", kvp.Key, kvp.Value);
            }
            sb.Append("__ExplicitsOutputs:\n");
            foreach (var kvp in eoVersions) {
                sb.AppendFormat("\t{0} >> {1}\n", kvp.Key, kvp.Value);
            }
            sb.Append("__ImplicitInputs:\n");
            foreach (var kvp in iiVersions) {
                sb.AppendFormat("\t{0} >> {1}\n", kvp.Key, kvp.Value);
            }
            sb.Append("__Params:\n");
            sb.Append(translationParameters);

            string result = sb.ToString();
            return result;
        }