コード例 #1
0
        void WriteCopyFile(CopyFile f)
        {
            var src = f.SourceName.String.IsValidPath() &&
                      File.Exists(Path.Combine(Path.GetDirectoryName(f.SourceName.Source.FullPath), f.SourceName.String))
                    ? f.SourceName.String
                    : _env.ExpandSingleLine(f.SourceName.Source, f.SourceName.String).NativeToUnix();
            var dst = _env.Combine(GetTargetName(f.SourceName, f.TargetName, f.Type));

            if (!_disk.GetFullPath(
                    f.SourceName.Source,
                    ref src,
                    PathFlags.AllowAbsolutePath | (f.Flags.HasFlag(CopyFileFlags.IsDirectory) ? PathFlags.IsDirectory : 0)) ||
                f.Flags.HasFlag(CopyFileFlags.NoOverwrite) && File.Exists(dst))
            {
                return;
            }

            if (f.Flags.HasFlag(CopyFileFlags.ProcessFile))
            {
                using (var w = _disk.CreateBufferedText(dst))
                    w.Write(_env.Expand(new Source(f.SourceName.Source.Package, src, 1, 1), f.Preprocess(File.ReadAllText(src).Replace("\r\n", "\n"))));
            }
            else if (f.Flags.HasFlag(CopyFileFlags.IsDirectory))
            {
                _disk.CopyDirectory(src, dst);
            }
            else
            {
                _disk.CopyFile(src, dst);
            }

            if (f.Flags.HasFlag(CopyFileFlags.IsExecutable))
            {
                _disk.MakeExecutable(dst);
            }
        }