Example #1
0
        public override string ToString()
        {
            if (SourceFiles?.Any() == true)
            {
                return($"{Alias} ({string.Join(", ", SourceFiles)})");
            }

            return(Alias);
        }
Example #2
0
        protected string CreateNewFileName(string fileExtension)
        {
            int    count = 1;
            string fileName;

            fileName = NEW_FILE_ROOT + count;
            while (SourceFiles.Any(x => x.Name == fileName))
            {
                count++;
                fileName = NEW_FILE_ROOT + count;
            }

            return(fileName + fileExtension);
        }
Example #3
0
        public void Merge(SourceFileCollection other)
        {
            foreach (var sourceFile in other.SourceFiles)
            {
                var inContent = SourceFiles.Any(e => string.Equals(e, sourceFile, StringComparison.InvariantCultureIgnoreCase));
                if (!inContent)
                {
                    SourceFiles.Add(sourceFile);
                }
            }

            foreach (var destFile in other.DestFiles)
            {
                var inContent = DestFiles.Any(e => string.Equals(e, destFile, StringComparison.InvariantCultureIgnoreCase));
                if (!inContent)
                {
                    DestFiles.Add(destFile);
                }
            }
        }
        public override bool ExecuteTask()
        {
            var    packagingDir      = CreateEmptyOutputDirectory(IntermediateOutputFolderName);
            string outputZipFileName = Path.Combine(packagingDir, "resources.zip");

            // we want to put module content, and resx files, in the resources zip that will get deployed to module install (desktop modules) folder dir.

            ITaskItem[] resourcesZipContentItems = ResourceFiles != null
                ? ResourcesZipContent.Concat(ResourceFiles).ToArray()
                : ResourcesZipContent.ToArray();

            // create a resources zip containing install files, without source.
            CreateResourcesZip(outputZipFileName, resourcesZipContentItems);

            // copy the manifests to packaging dir root
            foreach (var item in ManifestFileItems)
            {
                var manifestFilePath = item.GetFullPath(this.ProjectDirectory);
                CopyFile(manifestFilePath, packagingDir);
            }

            // Ensure packagingdir\bin dir
            string binFolder = Path.Combine(packagingDir, "bin");

            EnsureEmptyDirectory(binFolder);

            // copy assemblies to packagingdir\bin
            CopyFileTaskItems(ProjectDirectory, Assemblies, binFolder);

            // copy symbols to packagingdir\bin
            if (DebugSymbols)
            {
                CopyFileTaskItems(ProjectDirectory, Symbols, binFolder, true);
            }

            // copy AdditionalFiles directly into packagingdir (keeping same relative path from new parent dir)
            if (AdditionalFiles.Length > 0)
            {
                // This item array is initialised with a dummy item, so that its easy for
                // for consumers to override and add in their own items.
                // This means we have to take care of removing the dummy entry though.
                var dummyItem = AdditionalFiles.FirstOrDefault(a => a.ItemSpec == "_DummyEntry_.txt");
                if (dummyItem != null)
                {
                    var filesList = AdditionalFiles.ToList();
                    filesList.Remove(dummyItem);
                    AdditionalFiles = filesList.ToArray();
                }
            }

            CopyFileTaskItems(ProjectDirectory, AdditionalFiles, packagingDir, false, true);

            // find any
            // .sqldataprovider files
            // .lic files
            // "ReleaseNotes.txt" file
            // and copy them to the same relative directory in the packaging dir.
            ITaskItem[] specialPackageContentFiles =
                FindContentFiles(t =>
                                 Path.GetExtension(t.ItemSpec).ToLowerInvariant() == ".sqldataprovider" ||
                                 Path.GetExtension(t.ItemSpec).ToLowerInvariant() == ".lic" ||
                                 Path.GetFileName(t.ItemSpec).ToLowerInvariant() == ReleaseNotesFileName.ToLowerInvariant()
                                 );
            CopyFileTaskItems(ProjectDirectory, specialPackageContentFiles, packagingDir, false, true);


            // otpional: check that if a lic file is referenced in manifest that it exists in packagingdir
            // otpional: check that if a releasenotes file is referenced in manifest that it exists in packagingdir
            // otpional: run variable substitution against manifest?
            // otpional: ensure manifest has a ResourceFile component that references Resources.zip?

            // zip up packagingdir to  OutputDirectory\OutputZipFileName
            string installZipFileName = Path.Combine(OutputDirectory, OutputZipFileName);

            CompressFolder(packagingDir, installZipFileName);
            InstallPackage = new TaskItem(installZipFileName);

            var buildServerArtifacts = new List <ITaskItem>();

            buildServerArtifacts.Add(InstallPackage);

            // now, if sources are also provided, create another package, but this time, include sources in the resources zip file as well.
            if (SourceFiles != null && SourceFiles.Any())
            {
                resourcesZipContentItems = resourcesZipContentItems.Concat(SourceFiles).ToArray();
                // create a resources zip that also contains source files.
                CreateResourcesZip(outputZipFileName, resourcesZipContentItems);
                // create sources zip.
                string sourcesZipFileName = Path.Combine(OutputDirectory, OutputSourcesZipFileName);
                CompressFolder(packagingDir, sourcesZipFileName);
                SourcesPackage = new TaskItem(sourcesZipFileName);
                buildServerArtifacts.Add(SourcesPackage);
            }

            // publish assets to build server.
            PublishToBuildServer(buildServerArtifacts);
            return(true);
        }
Example #5
0
        public bool Execute()
        {
            if (SourceFiles == null || !SourceFiles.Any())
            {
                Console.WriteLine("warning: 没有传入需要复制的文件,请给 SourceFiles 赋值需要赋值的文件列表");
                return(true);
            }

            var str = new System.Text.StringBuilder();

            str.Append("当前传入需要复制的文件\r\n");
            foreach (var sourceFile in SourceFiles)
            {
                str.Append(sourceFile);
                str.Append("\r\n"); // AppendLine 干什么去了
            }

            str.Append("将要复制到的文件夹为");
            str.Append(DestinationFolder);
            str.Append("\r\n");

            Console.WriteLine(str.ToString());

            foreach (var sourceFile in SourceFiles.Select(sourceFile => new FileInfo(sourceFile)))
            {
                var destinationFile = Path.Combine(DestinationFolder, sourceFile.Name);

                if (File.Exists(destinationFile))
                {
                    Console.WriteLine("发现需要复制的文件已经存在");

                    var sourceFileName = Path.GetFileNameWithoutExtension(sourceFile.FullName);

                    Console.WriteLine("开始移动文件");

                    for (int i = 0; i < 65535; i++)
                    {
                        var newFileName = Path.Combine(DestinationFolder,
                                                       $"{sourceFileName}{i + 1}{sourceFile.Extension}.bak");
                        if (!File.Exists(newFileName))
                        {
                            File.Move(destinationFile, newFileName);
                            Console.WriteLine($"移动文件完成,将{destinationFile}移动到{newFileName}");
                            AddToClean(newFileName);
                            break;
                        }
                    }
                }

                Console.WriteLine("开始复制文件 " + destinationFile);

                File.Copy(sourceFile.FullName, destinationFile);

                Console.WriteLine("完成复制文件 " + destinationFile);
            }

            Console.WriteLine("全部复制完成");

            //Tracer = str.ToString();
            return(true);
        }
Example #6
0
        public void Build()
        {
            string projectLocation = Path.GetDirectoryName(_loc);
            string objFolder       = Path.Combine(projectLocation, "obj");
            string binFolder       = Path.Combine(projectLocation, "bin");
            string includes        = BuildIncludeString().Trim('\n');
            string propStr         = BuildPropertiesString().Trim('\n');

            if (!Directory.Exists(objFolder))
            {
                Directory.CreateDirectory(objFolder);
            }

            if (File.Exists($"{projectLocation}/scripts/prebuildScript.sh"))
            {
                Console.Write(ExternalPrograms.RunScript($"{projectLocation}/scripts/prebuildScript.sh"));
            }

            IEnumerable <SourceFile> viewCode = null;

            if (SourceFiles.Any(f => f.FileType == SourceCodeType.View))
            {
                IEnumerable <string> viewFiles = SourceFiles
                                                 .Where(f => f.FileType == SourceCodeType.View)
                                                 .Select(f => f.Path);

                GMLInterface.ProcessFiles(viewFiles, IncludeFolders.First());

                viewCode = viewFiles.Select(f => new SourceFile($"{Path.GetDirectoryName(f)}/{Path.GetFileNameWithoutExtension(f)}.g.c")).ToArray();
                SourceFiles.AddRange(viewCode);
            }

            System.Console.WriteLine("Builing...");

            foreach (SourceFile file in SourceFiles.Where(f => f.FileType == SourceCodeType.Code))
            {
                string fileName = System.IO.Path.GetFileName(file.Path).Split('.', StringSplitOptions.RemoveEmptyEntries)[0];

                ExternalPrograms.RunCompiler($"-c {file.Path} -o {objFolder}/{fileName}.o {includes} {propStr}");
            }

            if (viewCode != null)
            {
                foreach (SourceFile viewFile in viewCode)
                {
                    SourceFiles.Remove(viewFile);
                }
                viewCode = null;
            }

            var objFiles = Directory.GetFiles(objFolder)
                           .Where(f => string.Compare(Path.GetExtension(f), ".o") == 0);

            if (objFiles.Any())
            {
                System.Console.WriteLine("Linking...");
                string        link = BuildLinkString().Trim('\n');
                StringBuilder sb   = new StringBuilder(link);

                foreach (string o in objFiles)
                {
                    sb.Append($"{o} ");
                }

                string outName = Path.GetFileNameWithoutExtension(_loc);

                if (!Directory.Exists(binFolder))
                {
                    Directory.CreateDirectory(binFolder);
                }

                sb.Append($"-o {binFolder}/{outName}.lef");

                ExternalPrograms.RunCompiler(sb.ToString());

                if (File.Exists($"{projectLocation}/scripts/postbuildScript.sh"))
                {
                    Console.Write(ExternalPrograms.RunScript($"{projectLocation}/scripts/postbuildScript.sh"));
                }
            }
        }