File: OutputIgnore.php

package info (click to toggle)
php-doc 20250827~git.abe740d%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 71,968 kB
  • sloc: xml: 985,760; php: 25,504; javascript: 671; sh: 177; makefile: 37
file content (111 lines) | stat: -rw-r--r-- 3,788 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php /*
+----------------------------------------------------------------------+
| Copyright (c) 1997-2025 The PHP Group                                |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license,      |
| that is bundled with this package in the file LICENSE, and is        |
| available through the world-wide-web at the following url:           |
| https://www.php.net/license/3_01.txt.                                |
| If you did not receive a copy of the PHP license and are unable to   |
| obtain it through the world-wide-web, please send a note to          |
| license@php.net, so we can mail you a copy immediately.              |
+----------------------------------------------------------------------+
| Authors:     André L F S Bacci <ae php.net>                          |
+----------------------------------------------------------------------+

# Description

This class process commands for ignoring outputs, and complement non
ignored outputs with these commands.                                  */

class OutputIgnore
{
    private string $filename = ".qaxml.ignores";

    public ArgvParser $argv;
    public string $argvZero = "";
    public array  $argvRest = [];
    public bool $appendIgnoreCommands = true;

    public function __construct( ArgvParser $argv )
    {
        $this->argv = $argv;
        $this->argvZero = escapeshellarg( $argv->consume( position: 0 ) );
        $this->argvRest = $this->argv->residual();

        $item = $argv->consume( prefix: "--add-ignore=" );

        if ( $item != null )
        {
            $list = $this->loadIgnores();
            if ( ! in_array( $item , $list ) )
            {
                $list[] = $item;
                $this->saveIgnores( $list );
            }
            exit;
        }

        $item = $argv->consume( prefix: "--del-ignore=" );
        if ( $item != null )
        {
            $list = $this->loadIgnores();
            $dels = 0;
            while ( in_array( $item , $list ) )
            {
                $key = array_search( $item , $list );
                unset( $list[$key] );
                $dels++;
            }
            if ( $dels == 0 )
                print "Ignore mark not found.\n";
            else
                $this->saveIgnores( $list );
            exit;
        }

        if ( $argv->consume( "--disable-ignore" ) != null )
            $this->appendIgnoreCommands = false;
    }

    private function loadIgnores()
    {
        if ( ! file_exists( $this->filename ) )
            return [];
        $data = file_get_contents( $this->filename );
        return unserialize( gzdecode( $data ) );
    }

    public function saveIgnores( $data )
    {
        $contents = gzencode( serialize( $data ) );
        file_put_contents( $this->filename , $contents );
    }

    public function shouldIgnore( OutputBuffer $output , string $hashFile , string $hashHeader , string $hashMatter )
    {
        $ret = false;

        $prefix = "{$hashFile}-{$hashHeader}-";
        $active = "{$hashFile}-{$hashHeader}-{$hashMatter}";
        $marks = $this->loadIgnores();

        // --add-ignore command

        if ( in_array( $active , $marks ) )
            $ret = true;
        else
            if ( $this->appendIgnoreCommands )
                $output->addFooter( "  php {$this->argvZero} --add-ignore=$active\n" );

        // --del-ignore command

        if ( $this->appendIgnoreCommands )
            foreach ( $marks as $mark )
                if ( str_starts_with( $mark , $prefix ) )
                    if ( $mark != $active )
                        $output->addFooter( "  php {$this->argvZero} --del-ignore=$mark\n" );

        return $ret;
    }
}