Joomla Platform  13.1
Documentation des API du framework Joomla Platform
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Pages
Référence de la classe JFilesystemPatcher

Liste de tous les membres

Fonctions membres publiques

 reset ()
 apply ()
 addFile ($filename, $root=JPATH_BASE, $strip=0)
 add ($udiff, $root=JPATH_BASE, $strip=0)

Fonctions membres publiques statiques

static getInstance ()

Attributs publics

const SRC_FILE = '/^---\\s+(\\S+)\s+\\d{1,4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2}(\\.\\d+)?\\s+(\+|-)\\d{4}/A'
const DST_FILE = '/^\\+\\+\\+\\s+(\\S+)\s+\\d{1,4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2}(\\.\\d+)?\\s+(\+|-)\\d{4}/A'
const HUNK = '/@@ -(\\d+)(,(\\d+))?\\s+\\+(\\d+)(,(\\d+))?\\s+@@($)/A'
const SPLIT = '/(\r\n)|(\r)|(\n)/'

Fonctions membres protégées

 __construct ()
 applyHunk (&$lines, $src, $dst, $src_line, $src_size, $dst_line, $dst_size)
getSource ($src)
getDestination ($dst, $src)

Fonctions membres protégées statiques

static splitLines ($data)
static findHeader (&$lines, &$src, &$dst)
static findHunk (&$lines, &$src_line, &$src_size, &$dst_line, &$dst_size)

Attributs protégés

 $sources = array()
 $destinations = array()
 $removals = array()
 $patches = array()

Attributs protégés statiques

static $instance

Description détaillée

Définition à la ligne 24 du fichier patcher.php.


Documentation des constructeurs et destructeur

JFilesystemPatcher::__construct ( )
protected

Constructor

The constructor is protected to force the use of JFilesystemPatcher::getInstance()

Depuis:
12.1

Définition à la ligne 83 du fichier patcher.php.

{
}

Documentation des fonctions membres

JFilesystemPatcher::add (   $udiff,
  $root = JPATH_BASE,
  $strip = 0 
)

Add a unified diff string to the patcher

Paramètres:
string$udiffUnified diff input string
string$rootThe files root path
string$stripThe number of '/' to strip
Renvoie:
JFilesystemPatch $this for chaining
Depuis:
12.1

Définition à la ligne 239 du fichier patcher.php.

{
$this->patches[] = array(
'udiff' => $udiff,
'root' => isset($root) ? rtrim($root, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR : '',
'strip' => $strip
);
return $this;
}
JFilesystemPatcher::addFile (   $filename,
  $root = JPATH_BASE,
  $strip = 0 
)

Add a unified diff file to the patcher

Paramètres:
string$filenamePath to the unified diff file
string$rootThe files root path
string$stripThe number of '/' to strip
Renvoie:
JFilesystemPatch $this for chaining
Depuis:
12.1

Définition à la ligne 223 du fichier patcher.php.

{
return $this->add(file_get_contents($filename), $root, $strip);
}
JFilesystemPatcher::apply ( )

Apply the patches

Renvoie:
integer The number of files patched
Depuis:
12.1
Exceptions:
RuntimeException

Définition à la ligne 129 du fichier patcher.php.

Références JFile\delete(), et JFile\write().

{
foreach ($this->patches as $patch)
{
// Separate the input into lines
$lines = self::splitLines($patch['udiff']);
// Loop for each header
while (self::findHeader($lines, $src, $dst))
{
$done = false;
if ($patch['strip'] === null)
{
$src = $patch['root'] . preg_replace('#^([^/]*/)*#', '', $src);
$dst = $patch['root'] . preg_replace('#^([^/]*/)*#', '', $dst);
}
else
{
$src = $patch['root'] . preg_replace('#^([^/]*/){' . (int) $patch['strip'] . '}#', '', $src);
$dst = $patch['root'] . preg_replace('#^([^/]*/){' . (int) $patch['strip'] . '}#', '', $dst);
}
// Loop for each hunk of differences
while (self::findHunk($lines, $src_line, $src_size, $dst_line, $dst_size))
{
$done = true;
// Apply the hunk of differences
$this->applyHunk($lines, $src, $dst, $src_line, $src_size, $dst_line, $dst_size);
}
// If no modifications were found, throw an exception
if (!$done)
{
throw new RuntimeException('Invalid Diff');
}
}
}
// Initialize the counter
$done = 0;
// Patch each destination file
foreach ($this->destinations as $file => $content)
{
if (JFile::write($file, implode("\n", $content)))
{
if (isset($this->sources[$file]))
{
$this->sources[$file] = $content;
}
$done++;
}
}
// Remove each removed file
foreach ($this->removals as $file)
{
if (JFile::delete($file))
{
if (isset($this->sources[$file]))
{
unset($this->sources[$file]);
}
$done++;
}
}
// Clear the destinations cache
$this->destinations = array();
// Clear the removals
$this->removals = array();
// Clear the patches
$this->patches = array();
return $done;
}

+ Voici le graphe d'appel pour cette fonction :

JFilesystemPatcher::applyHunk ( $lines,
  $src,
  $dst,
  $src_line,
  $src_size,
  $dst_line,
  $dst_size 
)
protected

Apply the patch

Paramètres:
array&$linesThe udiff array of lines
string$srcThe source file
string$dstThe destination file
string$src_lineThe beginning of the patch for the source file
string$src_sizeThe size of the patch for the source file
string$dst_lineThe beginning of the patch for the destination file
string$dst_sizeThe size of the patch for the destination file
Renvoie:
void
Depuis:
12.1
Exceptions:
RuntimeException

Définition à la ligne 397 du fichier patcher.php.

Références JText\sprintf().

{
$src_line--;
$dst_line--;
$line = current($lines);
// Source lines (old file)
$source = array();
// New lines (new file)
$destin = array();
$src_left = $src_size;
$dst_left = $dst_size;
do
{
if (!isset($line[0]))
{
$source[] = '';
$destin[] = '';
$src_left--;
$dst_left--;
}
elseif ($line[0] == '-')
{
if ($src_left == 0)
{
throw new RuntimeException(JText::sprintf('JLIB_FILESYSTEM_PATCHER_REMOVE_LINE', key($lines)));
}
$source[] = substr($line, 1);
$src_left--;
}
elseif ($line[0] == '+')
{
if ($dst_left == 0)
{
throw new RuntimeException(JText::sprintf('JLIB_FILESYSTEM_PATCHER_ADD_LINE', key($lines)));
}
$destin[] = substr($line, 1);
$dst_left--;
}
elseif ($line != '\\ No newline at end of file')
{
$line = substr($line, 1);
$source[] = $line;
$destin[] = $line;
$src_left--;
$dst_left--;
}
if ($src_left == 0 && $dst_left == 0)
{
// Now apply the patch, finally!
if ($src_size > 0)
{
$src_lines = & $this->getSource($src);
if (!isset($src_lines))
{
throw new RuntimeException(JText::sprintf('JLIB_FILESYSTEM_PATCHER_UNEXISING_SOURCE', $src));
}
}
if ($dst_size > 0)
{
if ($src_size > 0)
{
$dst_lines = & $this->getDestination($dst, $src);
$src_bottom = $src_line + count($source);
for ($l = $src_line;$l < $src_bottom;$l++)
{
if ($src_lines[$l] != $source[$l - $src_line])
{
throw new RuntimeException(JText::sprintf('JLIB_FILESYSTEM_PATCHER_FAILED_VERIFY', $src, $l));
}
}
array_splice($dst_lines, $dst_line, count($source), $destin);
}
else
{
$this->destinations[$dst] = $destin;
}
}
else
{
$this->removals[] = $src;
}
next($lines);
return;
}
$line = next($lines);
}
while ($line !== false);
throw new RuntimeException('Unexpected EOF');
}

+ Voici le graphe d'appel pour cette fonction :

static JFilesystemPatcher::findHeader ( $lines,
$src,
$dst 
)
staticprotected

Find the diff header

The internal array pointer of $lines is on the next line after the finding

Paramètres:
array&$linesThe udiff array of lines
string&$srcThe source file
string&$dstThe destination file
Renvoie:
boolean TRUE in case of success, FALSE in case of failure
Depuis:
12.1
Exceptions:
RuntimeException

Définition à la ligne 278 du fichier patcher.php.

{
// Get the current line
$line = current($lines);
// Search for the header
while ($line !== false && !preg_match(self::SRC_FILE, $line, $m))
{
$line = next($lines);
}
if ($line === false)
{
// No header found, return false
return false;
}
else
{
// Set the source file
$src = $m[1];
// Advance to the next line
$line = next($lines);
if ($line === false)
{
throw new RuntimeException('Unexpected EOF');
}
// Search the destination file
if (!preg_match(self::DST_FILE, $line, $m))
{
throw new RuntimeException('Invalid Diff file');
}
// Set the destination file
$dst = $m[1];
// Advance to the next line
if (next($lines) === false)
{
throw new RuntimeException('Unexpected EOF');
}
return true;
}
}
static JFilesystemPatcher::findHunk ( $lines,
$src_line,
$src_size,
$dst_line,
$dst_size 
)
staticprotected

Find the next hunk of difference

The internal array pointer of $lines is on the next line after the finding

Paramètres:
array&$linesThe udiff array of lines
string&$src_lineThe beginning of the patch for the source file
string&$src_sizeThe size of the patch for the source file
string&$dst_lineThe beginning of the patch for the destination file
string&$dst_sizeThe size of the patch for the destination file
Renvoie:
boolean TRUE in case of success, false in case of failure
Depuis:
12.1
Exceptions:
RuntimeException

Définition à la ligne 340 du fichier patcher.php.

{
$line = current($lines);
if (preg_match(self::HUNK, $line, $m))
{
$src_line = (int) $m[1];
if ($m[3] === '')
{
$src_size = 1;
}
else
{
$src_size = (int) $m[3];
}
$dst_line = (int) $m[4];
if ($m[6] === '')
{
$dst_size = 1;
}
else
{
$dst_size = (int) $m[6];
}
if (next($lines) === false)
{
throw new RuntimeException('Unexpected EOF');
}
return true;
}
else
{
return false;
}
}
& JFilesystemPatcher::getDestination (   $dst,
  $src 
)
protected

Get the lines of a destination file

Paramètres:
string$dstThe path of a destination file
string$srcThe path of a source file
Renvoie:
array The lines of the destination file
Depuis:
12.1

Définition à la ligne 537 du fichier patcher.php.

{
if (!isset($this->destinations[$dst]))
{
$this->destinations[$dst] = $this->getSource($src);
}
return $this->destinations[$dst];
}
static JFilesystemPatcher::getInstance ( )
static

Method to get a patcher

Renvoie:
JFilesystemPatcher an instance of the patcher
Depuis:
12.1

Définition à la ligne 94 du fichier patcher.php.

{
if (!isset(static::$instance))
{
static::$instance = new static;
}
}
& JFilesystemPatcher::getSource (   $src)
protected

Get the lines of a source file

Paramètres:
string$srcThe path of a file
Renvoie:
array The lines of the source file
Depuis:
12.1

Définition à la ligne 510 du fichier patcher.php.

{
if (!isset($this->sources[$src]))
{
if (is_readable($src))
{
$this->sources[$src] = self::splitLines(file_get_contents($src));
}
else
{
$this->sources[$src] = null;
}
}
return $this->sources[$src];
}
JFilesystemPatcher::reset ( )

Reset the pacher

Renvoie:
JFilesystemPatcher This object for chaining
Depuis:
12.1

Définition à la ligne 111 du fichier patcher.php.

{
$this->sources = array();
$this->destinations = array();
$this->removals = array();
$this->patches = array();
return $this;
}
static JFilesystemPatcher::splitLines (   $data)
staticprotected

Separate CR or CRLF lines

Paramètres:
string$dataInput string
Renvoie:
array The lines of the inputdestination file
Depuis:
12.1

Définition à la ligne 259 du fichier patcher.php.

{
return preg_split(self::SPLIT, $data);
}

Documentation des données membres

JFilesystemPatcher::$destinations = array()
protected

Définition à la ligne 56 du fichier patcher.php.

JFilesystemPatcher::$instance
staticprotected

Définition à la ligne 74 du fichier patcher.php.

JFilesystemPatcher::$patches = array()
protected

Définition à la ligne 68 du fichier patcher.php.

JFilesystemPatcher::$removals = array()
protected

Définition à la ligne 62 du fichier patcher.php.

JFilesystemPatcher::$sources = array()
protected

Définition à la ligne 50 du fichier patcher.php.

const JFilesystemPatcher::DST_FILE = '/^\\+\\+\\+\\s+(\\S+)\s+\\d{1,4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2}(\\.\\d+)?\\s+(\+|-)\\d{4}/A'

Regular expression for searching destination files

Définition à la ligne 34 du fichier patcher.php.

const JFilesystemPatcher::HUNK = '/@@ -(\\d+)(,(\\d+))?\\s+\\+(\\d+)(,(\\d+))?\\s+@@($)/A'

Regular expression for searching hunks of differences

Définition à la ligne 39 du fichier patcher.php.

const JFilesystemPatcher::SPLIT = '/(\r\n)|(\r)|(\n)/'

Regular expression for splitting lines

Définition à la ligne 44 du fichier patcher.php.

const JFilesystemPatcher::SRC_FILE = '/^---\\s+(\\S+)\s+\\d{1,4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2}(\\.\\d+)?\\s+(\+|-)\\d{4}/A'

Regular expression for searching source files

Définition à la ligne 29 du fichier patcher.php.


La documentation de cette classe a été générée à partir du fichier suivant :