/**
 * file-copy
 * =========
 *
 * Копирует один таргет в другой.
 * Может, например, использоваться для построения `_?.css` из `?.css` для development-режима.
 *
 * **Опции**
 *
 * * *String* **source** — Исходный таргет. Обязательная опция.
 * * *String* **node** — Путь ноды с исходным таргетом.
 * * *String* **target** — Результирующий таргет. Обязательная опция.
 *
 * **Пример**
 *
 * ```javascript
 * nodeConfig.addTech([ require('enb/techs/file-copy'), {
 *   source: '?.css',
 *   target: '_?.css'
 * } ]);
 * ```
 */
var vowFs = require('../lib/fs/async-fs');
var inherit = require('inherit');

module.exports = inherit(require('../lib/tech/base-tech'), {
    getName: function () {
        return 'file-copy';
    },

    configure: function () {
        this._source = this.getOption('sourceTarget');
        if (!this._source) {
            this._source = this.getRequiredOption('source');
        }

        this._fromNode = this.getOption('node');

        this._target = this.getOption('destTarget');
        if (!this._target) {
            this._target = this.getRequiredOption('target');
        }
    },

    getTargets: function () {
        return [this.node.unmaskTargetName(this._target)];
    },

    build: function () {
        var node = this.node;
        var fromNode = this._fromNode;
        var target = node.unmaskTargetName(this._target);
        var targetPath = node.resolvePath(target);
        var source = fromNode ?
                node.unmaskNodeTargetName(fromNode, this._source) :
                node.unmaskTargetName(this._source);
        var sourcePath = fromNode ?
                node.resolveNodePath(fromNode, source) :
                node.resolvePath(source);

        var _this = this;
        var cache = this.node.getNodeCache(target);
        var requirements = {};
        requirements[fromNode] = [source];

        var requireSources = fromNode ?
                node.requireNodeSources(requirements) :
                node.requireSources([source]);

        return requireSources.then(function () {
            if (cache.needRebuildFile('source-file', sourcePath) ||
                cache.needRebuildFile('target-file', targetPath)
            ) {
                return vowFs.read(sourcePath, 'utf8').then(function (data) {
                    return vowFs.write(targetPath, data, 'utf8').then(function () {
                        cache.cacheFileInfo('source-file', sourcePath);
                        cache.cacheFileInfo('target-file', targetPath);
                        _this.node.resolveTarget(target);
                    });
                });
            } else {
                _this.node.isValidTarget(target);
                _this.node.resolveTarget(target);
                return null;
            }
        });
    }
});

@@ -253,17 +253,23 @@
 ring* **
-n
+sourceN
 ode** %E2%80%94 
@@ -925,28 +925,30 @@
       this._
-from
+source
 Node = this.
@@ -1242,32 +1242,58 @@
 : function () %7B%0A
+        var _this = this;%0A
         var node
@@ -1322,33 +1322,41 @@
 var 
-fromNode = this._fromNode
+cache = node.getNodeCache(target)
 ;%0A  
@@ -1484,89 +1484,59 @@
 urce
- = fromNode ?%0A                node.unmaskNodeTargetName(fromNode, this._source) :
+Node = this._sourceNode;%0A%0A        if (sourceNode) %7B
 %0A   
@@ -1540,27 +1540,36 @@
             
-   
+var source =
  node.unmask
@@ -1560,32 +1560,36 @@
 ce = node.unmask
+Node
 TargetName(this.
@@ -1579,24 +1579,36 @@
 eTargetName(
+sourceNode, 
 this._source
@@ -1610,16 +1610,20 @@
 ource);%0A
+    
         
@@ -1643,109 +1643,41 @@
 h = 
-fromNode ?%0A                node.resolveNodePath(fromNode, source) :%0A                node.resolvePath(
+node.resolveNodePath(sourceNode, 
 sour
@@ -1685,87 +1685,12 @@
 e);%0A
-%0A
     
-    var _this = this;%0A        var cache = this.node.getNodeCache(target);%0A
     
@@ -1724,16 +1724,20 @@
         
+    
 requirem
@@ -1741,20 +1741,22 @@
 rements%5B
-from
+source
 Node%5D = 
@@ -1765,17 +1765,20 @@
 ource%5D;%0A
-%0A
+    
         
@@ -1802,90 +1802,213 @@
 s = 
-fromNode ?%0A                node.requireNodeSources(requirements) :%0A               
+node.requireNodeSources(requirements);%0A        %7D else %7B%0A            var source = node.unmaskTargetName(this._source);%0A            var sourcePath = node.resolvePath(source);%0A            var requireSources =
  nod
@@ -2034,16 +2034,26 @@
 ource%5D);
+%0A        %7D
 %0A%0A      

Change variables names and conditional statement