diff --git a/codepot/src/codepot/controllers/code.php b/codepot/src/codepot/controllers/code.php index 42899959..5415b2e2 100644 --- a/codepot/src/codepot/controllers/code.php +++ b/codepot/src/codepot/controllers/code.php @@ -336,7 +336,7 @@ class Code extends Controller } } - function diff ($projectid = '', $path = '', $rev1 = SVN_REVISION_HEAD, $rev2 = SVN_REVISION_HEAD) + function _do_diff ($projectid = '', $path = '', $rev1 = SVN_REVISION_HEAD, $rev2 = SVN_REVISION_HEAD, $full = FALSE) { $this->load->model ('ProjectModel', 'projects'); $this->load->model ('SubversionModel', 'subversion'); @@ -371,7 +371,7 @@ class Code extends Controller redirect ("main/signin/" . $this->converter->AsciiTohex(current_url())); } - $file = $this->subversion->getDiff ($projectid, $path, $rev1, $rev2); + $file = $this->subversion->getDiff ($projectid, $path, $rev1, $rev2, $full); if ($file === FALSE) { $data['project'] = $project; @@ -400,6 +400,16 @@ class Code extends Controller } } + function diff ($projectid = '', $path = '', $rev1 = SVN_REVISION_HEAD, $rev2 = SVN_REVISION_HEAD) + { + return $this->_do_diff ($projectid, $path, $rev1, $rev2, FALSE); + } + + function fulldiff ($projectid = '', $path = '', $rev1 = SVN_REVISION_HEAD, $rev2 = SVN_REVISION_HEAD) + { + return $this->_do_diff ($projectid, $path, $rev1, $rev2, TRUE); + } + function fetch ($projectid = '', $path = '', $rev = SVN_REVISION_HEAD) { $this->load->model ('ProjectModel', 'projects'); diff --git a/codepot/src/codepot/language/english/common_lang.php b/codepot/src/codepot/language/english/common_lang.php index d7798924..028f1464 100644 --- a/codepot/src/codepot/language/english/common_lang.php +++ b/codepot/src/codepot/language/english/common_lang.php @@ -30,6 +30,7 @@ $lang['File'] = 'File'; $lang['Files'] = 'Files'; $lang['First'] = 'First'; $lang['Folder'] = 'Folder'; +$lang['Full Difference'] = 'FullDiff'; $lang['Head revision'] = 'Head revision'; $lang['Hide details'] = 'Hide details'; $lang['History'] = 'History'; diff --git a/codepot/src/codepot/language/indonesian/common_lang.php b/codepot/src/codepot/language/indonesian/common_lang.php index 75f8b1bf..36201ae2 100644 --- a/codepot/src/codepot/language/indonesian/common_lang.php +++ b/codepot/src/codepot/language/indonesian/common_lang.php @@ -28,6 +28,7 @@ $lang['File'] = 'File'; $lang['Files'] = 'File'; $lang['First'] = 'Pertama'; $lang['Folder'] = 'Folder'; +$lang['Full Difference'] = 'FullDiff'; $lang['Head revision'] = 'Kepala revisi'; $lang['History'] = 'Sejarah'; $lang['Home'] = 'Beranda'; diff --git a/codepot/src/codepot/language/korean/common_lang.php b/codepot/src/codepot/language/korean/common_lang.php index 07bbdfc6..e9d4b3dc 100644 --- a/codepot/src/codepot/language/korean/common_lang.php +++ b/codepot/src/codepot/language/korean/common_lang.php @@ -20,7 +20,7 @@ $lang['Delete'] = '삭제'; $lang['Description'] = '설명'; $lang['Destyle'] = '모양새제거'; $lang['Details'] = '상세내역'; -$lang['Difference'] = '차이점'; +$lang['Difference'] = '차이'; $lang['Directory'] = '디렉토리'; $lang['Download'] = '내려받음'; $lang['Edit'] = '수정'; @@ -30,6 +30,7 @@ $lang['File'] = '파일'; $lang['Files'] = '파일'; $lang['First'] = '처음'; $lang['Folder'] = '폴더'; +$lang['Full Difference'] = '전체차이'; $lang['Head revision'] = '최신리비전'; $lang['Hide details'] = '상세내역숨김'; $lang['History'] = '변경기록'; diff --git a/codepot/src/codepot/models/subversionmodel.php b/codepot/src/codepot/models/subversionmodel.php index d55cb2db..b366ba31 100644 --- a/codepot/src/codepot/models/subversionmodel.php +++ b/codepot/src/codepot/models/subversionmodel.php @@ -278,14 +278,20 @@ class SubversionModel extends Model return $fileinfo; } - function _get_diff ($diff, $all, $ent) + function _get_diff ($diff, $src1, $src2, $all, $ent) { /* copied from websvn */ if ($all) { - $ofile = fopen ($oldtname, "r"); - $nfile = fopen ($newtname, "r"); + //$ofile = fopen ($oldtname, "r"); + //$nfile = fopen ($newtname, "r"); + $ofile = fopen("php://memory", 'r+'); + $nfile = fopen("php://memory", 'r+'); + fputs($ofile, $src1); + fputs($nfile, $src2); + rewind($ofile); + rewind($nfile); } // Ignore the 4 header lines @@ -398,15 +404,15 @@ class SubversionModel extends Model $listing[$index]["rev1diffclass"] = "diffdeleted"; $listing[$index]["rev2diffclass"] = "diff"; - $listing[$index]["rev1line"] = $text; - //$listing[$index]["rev2line"] = " "; - $listing[$index]["rev2line"] = ''; - if ($all) { fgets($ofile); $curoline++; } + $listing[$index]["rev1line"] = $text; + //$listing[$index]["rev2line"] = " "; + $listing[$index]["rev2line"] = ''; + break; case "+": @@ -429,23 +435,29 @@ class SubversionModel extends Model $listing[$i]["rev2diffclass"] = "diffchanged"; $listing[$i]["rev2line"] = $text; - if ($all) { + if ($all) + { fgets($nfile); $curnline++; } + // Don't increment the current index count $index--; - } else { + } + else + { $listing[$index]["rev1diffclass"] = "diff"; $listing[$index]["rev2diffclass"] = "diffadded"; + //$listing[$index]["rev1line"] = " "; $listing[$index]["rev1line"] = ''; $listing[$index]["rev2line"] = $text; - if ($all) { + if ($all) + { fgets($nfile); $curnline++; } @@ -459,7 +471,8 @@ class SubversionModel extends Model $listing[$index]["rev1line"] = $text; $listing[$index]["rev2line"] = $text; - if ($all) { + if ($all) + { fgets($ofile); fgets($nfile); $curoline++; @@ -479,13 +492,18 @@ class SubversionModel extends Model // Output the rest of the files if ($all) { - while (!feof($ofile) || !feof($nfile)) + while (1) { + if (feof($ofile) && feof($nfile)) break; + $listing[$index]["rev1diffclass"] = "diff"; $listing[$index]["rev2diffclass"] = "diff"; - $line = rtrim(fgets($ofile)); - if ($ent) $line = replaceEntities($line, $rep); + if (!feof($ofile)) + { + $line = rtrim(fgets($ofile)); + if ($ent) $line = replaceEntities($line, $rep); + } if (!feof($ofile)) { //$listing[$index]["rev1line"] = hardspace($line); @@ -495,9 +513,13 @@ class SubversionModel extends Model //$listing[$index]["rev1line"] = " "; $listing[$index]["rev1line"] = ''; } + - $line = rtrim(fgets($nfile)); - if ($ent) $line = replaceEntities(rtrim(fgets($nfile)), $rep); + if (!feof($nfile)) + { + $line = rtrim(fgets($nfile)); + if ($ent) $line = replaceEntities(rtrim(fgets($nfile)), $rep); + } if (!feof($nfile)) { //$listing[$index]["rev2line"] = hardspace($line); @@ -528,7 +550,7 @@ class SubversionModel extends Model // $rev1 - new revision number // $rev2 - old revision number // - function getDiff ($projectid, $path, $rev1, $rev2) + function getDiff ($projectid, $path, $rev1, $rev2, $full = FALSE) { //$url = 'file:///'.CODEPOT_SVNREPO_DIR."/{$projectid}/{$path}"; $orgurl = 'file://'.$this->_canonical_path(CODEPOT_SVNREPO_DIR."/{$projectid}/{$path}"); @@ -621,7 +643,16 @@ class SubversionModel extends Model fclose($errors); - $fileinfo['content'] = $this->_get_diff ($diff, FALSE, FALSE); + if ($full) + { + $src1 = @svn_cat ($info2[0]['url'], $info2[0]['revision']); + $src2 = @svn_cat ($info1[0]['url'], $info1[0]['revision']); + $fileinfo['content'] = $this->_get_diff ($diff, $src1, $src2, TRUE, FALSE); + } + else + { + $fileinfo['content'] = $this->_get_diff ($diff, '', '', FALSE, FALSE); + } fclose ($diff); return $fileinfo; diff --git a/codepot/src/codepot/views/code_revision.php b/codepot/src/codepot/views/code_revision.php index e719f423..f83cbfca 100644 --- a/codepot/src/codepot/views/code_revision.php +++ b/codepot/src/codepot/views/code_revision.php @@ -219,6 +219,10 @@ $history = $file['history']; print anchor ("code/diff/{$project->id}/{$xpar}/{$history['rev']}", $this->lang->line('Difference')); print ''; + print ''; + print anchor ("code/fulldiff/{$project->id}/{$xpar}/{$history['rev']}", $this->lang->line('Full Difference')); + print ''; + print ''; } ?>