Ampere.OutputNode.Evaluate C# (CSharp) Method

Evaluate() public method

public Evaluate ( BuildInstance instance, IEnumerable inputs ) : IEnumerable
instance BuildInstance
inputs IEnumerable
return IEnumerable
        public override IEnumerable<object> Evaluate(BuildInstance instance, IEnumerable<object> inputs)
        {
            // figure out the final names of each output
            var outputs = new List<string>();
            outputs.Add(instance.OutputPath);
            outputs.AddRange(instance.Byproducts);

            // make sure we have enough inputs to satisfy each output
            var inputArray = inputs.ToArray();
            if (inputArray.Length != outputs.Count)
            {
                instance.Log.Error("Number of inputs does not match number of outputs for '{0}' (line {1}).", instance.OutputName, LineNumber);
                return null;
            }

            instance.Results = inputs;
            if (instance.IsTempBuild && !instance.Env.WriteTempBuilds)
                return null;

            // match each input to an output name
            for (int i = 0; i < inputArray.Length; i++)
            {
                // if we have a filestream, we can do a straight file copy because we know it hasn't been changed
                var outputPath = outputs[i];
                var stream = inputArray[i] as Stream;
                if (stream == null)
                    return null;

                var file = stream as FileStream;
                if (file != null)
                    File.Copy(file.Name, outputPath, true);
                else if (stream == null)
                {
                    instance.Log.Error("Inputs to Build() node must all be of type stream ('{0}' on line {1}).", instance.OutputName, LineNumber);
                    return null;
                }
                else
                {
                    // otherwise, write to file
                    stream.Seek(0, SeekOrigin.Begin);
                    using (var outputStream = File.Create(outputPath))
                        stream.CopyTo(outputStream);
                }

                stream.Close();
            }

            return Enumerable.Empty<Stream>();
        }