>  기사  >  백엔드 개발  >  PHP에서 svn의 두 가지 다른 분기 디렉터리에 있는 파일을 비교하는 분석 예

PHP에서 svn의 두 가지 다른 분기 디렉터리에 있는 파일을 비교하는 분석 예

黄舟
黄舟원래의
2017-09-07 09:20:222144검색

php中对比svn两个不同分支目录的文件的实例分析

<?php
/**
 * 对比svn两个不同分支目录的文件
 */

class DiffDir
{/*{{{*/

    public function run($dir1,$dir2,$dirResult = &#39;/tmp/&#39;)
    {/*{{{*/
        $hash1 = $this->getFileInfo($dir1);        
        $hash2 = $this->getFileInfo($dir2);        
        $this->diff($dir1,$hash1,$dir2,$hash2,$dirResult);
    }/*}}}*/

    //查找文件信息
    public function getFileInfo($dir)
    {/*{{{*/
        if(false == is_dir($dir))    
        {
            return array();    
        }
        $cmd = "find {$dir} -type f -name &#39;*.php&#39; | sort | xargs md5sum | awk &#39;{print $2,$1}&#39;";
        $ret = exec($cmd, $out, $status);
        if(is_array($out) && count($out) > 0)
        {
            return $this->formart($dir,$out);    
        }
        return array();
    }/*}}}*/

    //格式化文件
    public function formart($dir,array $data)
    {/*{{{*/
        $hash = array();
        foreach($data as $line)
        {
            $line = str_replace($dir,&#39;&#39;,$line);
            $arr = explode(" ",$line); 
            $hash[$arr[0]] = $arr[1];
        }
        return $hash;
    }/*}}}*/

    //对比文件
    public function diff($dir1,array $hash1,$dir2,array $hash2,$dirResult)
    {/*{{{*/
        foreach($hash1 as $key1 => $va11)
        {
            $fileName1 = $this->getRetFileName($dir1,$key1);
            if(false == isset($hash2[$key1])) 
            {
                $cmd =  "cp -f {$dir1}{$key1} {$dirResult}/{$fileName1}\n";
                exec($cmd, $out, $status);
                continue;
            }

            $fileName2 = $this->getRetFileName($dir2,$key1);
            if($va11 != $hash2[$key1]) 
            {
                $cmd =  "cp -f {$dir1}{$key1} {$dirResult}/{$fileName1}\n";
                exec($cmd, $out, $status);
                $cmd =  "cp -f {$dir2}{$key1} {$dirResult}/{$fileName2}\n";
                exec($cmd, $out, $status);
                continue;
            }
            
        }

        foreach($hash2 as $key2 => $va12)
        {
            $fileName2 = $this->getRetFileName($dir2,$key2);
            if(false == isset($hash1[$key2])) 
            {
                $cmd =  "cp -f {$dir2}{$key2} {$dirResult}/{$fileName2}\n";
                exec($cmd, $out, $status);
                continue;
            }
        }
    }/*}}}*/

    public function getRetFileName($dir,$file)
    {
        return basename($file).str_replace("/",&#39;_&#39;,dirname($dir.$file)); 
    }
}/*}}}*/

$diffDir = new DiffDir();
$diffDir->run(&#39;/tmp/diffDir/v6.1.0&#39;,&#39;/tmp/diffDir/v6.2.0&#39;,&#39;/tmp/diffDir/result&#39;);
?>

위 내용은 PHP에서 svn의 두 가지 다른 분기 디렉터리에 있는 파일을 비교하는 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.