diff options
| -rw-r--r-- | examples/librpm.php | 78 | ||||
| -rw-r--r-- | package.xml | 1 | 
2 files changed, 79 insertions, 0 deletions
| diff --git a/examples/librpm.php b/examples/librpm.php new file mode 100644 index 0000000..90082e0 --- /dev/null +++ b/examples/librpm.php @@ -0,0 +1,78 @@ +<?php +/** + * Minimal userland OO library + **/ +namespace Remi\RPM; + +abstract class Common { +	protected $info = NULL; + +	public function __get($name) { +		switch ($name) { +			case 'EVR': +			case 'NEVR': +			case 'NEVRA': +				$ret = ''; +				if (substr($name, 0, 1) === 'N') { +					$ret = $this->info['Name'] . '-'; +				} +				if (isset($this->info['Epoch'])) { +					$ret .= $this->info['Epoch'] . ':'; +				} +				$ret .= $this->info['Version'] . '-' . $this->info['Release']; + +				if (substr($name, -1) === 'A') { +					$ret .= '.' . $this->info['Arch']; +				} +				return $ret; +			default: +				if (isset($this->info[$name])) { +					return $this->info[$name]; +				} +				return NULL; +		} +	} +} + +/** + * From a RPM file + * + * $a = new \Remi\RPM\File(dirname(__DIR__) . '/tests/bidon.rpm'); + * var_dump($a->Vendor); + * var_dump($a->NEVRA); + **/ +class File extends Common { + +	public function __construct($path) { +		$info = rpminfo($path, true, $error); + +		if ($error) { +			throw new \RuntimeException($error); +		} else { +			$this->info = $info; +		} +	} +} + +/** + * From an installed RPM + * + * $a = new \Remi\RPM\Package('php'); + * var_dump($a->License); + * var_dump($a->NEVRA); + **/ +class Package extends Common { + +	public function __construct($name, $index=0) { +		$info = rpmdbinfo($name, true); + +		if (!$info) { +			throw new \RuntimeException("$name not found"); +		} else if ($index < 0 || $index >= count($info)) { +			throw new \OutOfBoundsException("$index not in range"); +		} else { +			$this->info = $info[$index]; +		} +	} +} + diff --git a/package.xml b/package.xml index c0e1799..7250f64 100644 --- a/package.xml +++ b/package.xml @@ -42,6 +42,7 @@ Available functions:        <dir name ="examples">          <file name="repomanage.php" role="doc"/>          <file name="rpmvercmp.php" role="doc"/> +        <file name="librpm.php" role="doc"/>        </dir>        <dir name ="tests">          <file name="001-presence.phpt" role="test"/> | 
