Beispiel #1
0
        public WxsGenerator(SwixModel model, GuidProvider guidProvider)
        {
            _model        = model;
            _guidProvider = guidProvider;

            DetectIfModule();
            VerifyDirectories();
            AssignCabFileIds();
            FindNonUniqueDirectoryReadableIds();
            AssignDirectoryIds();
            VerifyDirectoryRefs();
            VerifyCabFileRefs();
            HandleInlineTargetDirSpecifications();
        }
Beispiel #2
0
        public static GuidProvider CreateFromStream(StreamReader source, bool treatAbsentGuidAsError)
        {
            var    result = new GuidProvider(treatAbsentGuidAsError);
            string line;

            while ((line = source.ReadLine()) != null)
            {
                var match = LineRegex.Match(line);
                var path  = match.Groups["path"].Value;
                var guid  = Guid.Parse(match.Groups["guid"].Value);
                result._loadedFromFileGuids.Add(path, guid);
            }
            return(result);
        }
Beispiel #3
0
        public static SwixModel Transform(string swixFilename,
                                          SwixGuidMode guidMode,
                                          string targetFolderPath,
                                          IDictionary <string, string> variableDefinitions = null)
        {
            var folderPath           = Path.GetDirectoryName(swixFilename) ?? Path.GetPathRoot(swixFilename);
            var baseName             = Path.GetFileNameWithoutExtension(swixFilename);
            var guidProviderFileName = Path.Combine(folderPath, $"{baseName}.guid.info");

            if (File.Exists(guidProviderFileName))
            {
                StripReadonlyIfSet(guidProviderFileName);
            }

            var outputFile = Path.Combine(targetFolderPath, $"{baseName}.generated.wxs");

            if (File.Exists(outputFile))
            {
                StripReadonlyIfSet(outputFile);
            }

            TempDir = Path.Combine(targetFolderPath, "swixtemp");
            try
            {
                if (Directory.Exists(TempDir))
                {
                    Directory.Delete(TempDir, recursive: true);
                    Directory.CreateDirectory(TempDir);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"Warning: Cannot clean temp directory {TempDir}: {e}");
            }

            GuidProvider guidProvider;

            if (guidMode != SwixGuidMode.AlwaysGenerateNew && File.Exists(guidProviderFileName))
            {
                using (var guidReader = new StreamReader(guidProviderFileName))
                    guidProvider = GuidProvider.CreateFromStream(guidReader, treatAbsentGuidAsError: guidMode == SwixGuidMode.TreatAbsentGuidAsError);
            }
            else
            {
                if (guidMode == SwixGuidMode.TreatAbsentGuidAsError)
                {
                    throw new SwixSemanticException(0, $"TreatAbsentGuidAsError mode is active, but no {guidProviderFileName} file is found");
                }
                guidProvider = new GuidProvider(treatAbsentGuidAsError: false);
            }

            SwixModel model;

            using (var sourceReader = new StreamReader(swixFilename))
            {
                model = SwixParser.Parse(sourceReader, guidProvider, variableDefinitions);
            }

            var wxsGenerator = new WxsGenerator(model, guidProvider);

            using (var outputStream = new StreamWriter(outputFile))
                wxsGenerator.WriteToStream(outputStream);

            if (guidMode == SwixGuidMode.UseExistingAndExtendStorage)
            {
                using (var guidOutputStream = new StreamWriter(guidProviderFileName))
                    guidProvider.SaveToStream(guidOutputStream, pruneUnused: false);
            }
            else if (guidMode == SwixGuidMode.UseExistingAndUpdateStorage)
            {
                using (var guidOutputStream = new StreamWriter(guidProviderFileName))
                    guidProvider.SaveToStream(guidOutputStream, pruneUnused: true);
            }

            return(model);
        }
Beispiel #4
0
 public FileSemanticContext(SwixModel result, GuidProvider guidProvider)
     : base(0, new AttributeContext(new Dictionary <string, string>(), guidProvider))
 {
     _result = result;
 }
Beispiel #5
0
 public static SwixModel Parse(TextReader sourceStream, GuidProvider guidProvider, IDictionary <string, string> variableDefinitions = null)
 {
     return(new SwixParser(sourceStream, guidProvider).Run(variableDefinitions));
 }
Beispiel #6
0
 private SwixParser(TextReader sourceStream, GuidProvider guidProvider)
 {
     _sourceStream = sourceStream;
     _guidProvider = guidProvider;
 }