2

GitHub の API が返す git パッチを解析するためのライブラリまたはある種の PHP 関数の調査に 2 日間を費やしましたが、使用できるものが見つかりません。

Phabricator からかなりの量のコードを取り出すことができましたが、依存関係が多すぎます。

次のようなものを解析するphpコードを知っている人はいますか:

        commit d87635a1001a23d3a20422fcc8f2484b6bf3ab1b
        Author: Stav <st@gmail.com>
        Date:   Thu Dec 6 23:59:16 2012 +0200

            #666390 test chargify create and cancel subscription.

        diff --git a/.gitignore b/.gitignore
        index 796276b..b7fc8a1 100644
        --- a/.gitignore
        +++ b/.gitignore
        @@ -1,2 +1,3 @@
         application/config/config.php
        -application/config/database.php
        \ No newline at end of file
        +application/config/database.php
        +/local_file.php
        diff --git a/testing/Unit/libs/ChargifyTest.php b/testing/Unit/libs/ChargifyTest.php
        new file mode 100644
        index 0000000..f6ea674
        --- /dev/null
        +++ b/testing/Unit/libs/ChargifyTest.php
        @@ -0,0 +1,38 @@
        +<?php
        +
        +require_once dirname(__FILE__).'/../../../local_file.php';
        +

次のような html テーブルに:

phabricator 解析ツール

前もって感謝します :)

4

2 に答える 2

4

これが私が思いついたものです。

        <? foreach( $commit['files'] as $file ) { ?>
        <div><h3><?=$file['filename']?></h3>
           <?
            $firstLine = true;
            $patch = explode("@@",$file['patch']);
            $lines_info = explode(",",$patch[1]);
            $st_ln_num = substr($lines_info[0], 2);
            $start_line['original'] = $st_ln_num;
            $start_line['left'] = $st_ln_num;
            $start_line['right'] = $st_ln_num;
            $lines = explode("\n",$file['patch']);
            ?>
            <div style="overflow: auto">
            <table class="parseDiff" cellpadding="0" cellspacing="0">
                <? foreach ($lines as $line) {
                    if (! $firstLine) {
                            $line_left = "";
                            $line_right = "";
                            $char = strlen($line) ? $line[0] : '~';
                            $type = "neutral";
                            switch ($char) {
                                case '-':
                                    $line_left = $start_line['left']++;
                                    $type = "removed";
                                    $line = $line;
                                    break;
                                case '+':
                                    $line_right = $start_line['right']++;
                                    $type = "added";
                                    $line = $line;
                                    break;
                                default:
                                    $line_left = $start_line['left']++;
                                    $line_right = $start_line['right']++;
                                    $type = "neutral";
                                    break;
                            }
                    ?>
                    <tr class="line-type-<?=$type?>">
                        <td class="line-number line-number-left"><?=$line_left?></td>
                        <td class="line-number line-number-right"><?=$line_right?></td>
                        <td class="line-code"><pre><?=htmlspecialchars($line)?></pre></td>
                    </tr>
                <?
                    } else {
                ?>
                    <tr class="line-type-first">
                        <td class="line-number  line-number-left">&middot;&middot;&middot;</td>
                        <td class="line-number  line-number-right">&middot;&middot;&middot;</td>
                        <td class="line-code"><pre><?=htmlspecialchars($line)?></pre></td>
                    </tr>
                <?
                        $firstLine = false;
                    } // end if firstLine
                } // end foreach
                ?>
            </table>
            </div>
        </div>
    <? } ?>
于 2012-12-10T22:51:14.483 に答える
0

Joomla コンテキストで使用される単純な PHP スクリプトも作成しました。最小限の変更で、すべての PHP アプリで実行できます。ソースは私の Joomla Attachment 拡張機能にあります。コミットへのリンクは次のとおりです。

https://github.com/Digital-Peak/DPAttachments/commit/1cf5ee5bda858fe036032ecc20b5f437d761b013#diff-8

于 2013-10-07T15:28:49.107 に答える