Skip to content

Commit

Permalink
[TASK] CSV integrity test script can fix fixtures
Browse files Browse the repository at this point in the history
CSV fixture files are a straight way to feed test database
with stuff and to assert database state after operations.
Script Build/Scripts/checkIntegrityCsvFixtures.php tests those
files for integrity, making sure all lines have the same number
of columns. Maintaining the number of commas when fiddling with
functional tests however is annoying.

The patch adds options to checkIntegrityCsvFixtures.php:
* '--fix' simply fixes files with broken integrity
* '--fixAll' goes through all files and looks for details
  like superfluous comma.

While --fixAll is used once now to establish a good baseline
on all .csv fixtutre files, --fix can be used whenever the
integrity script mumbles about broken stuff:

Build/Scripts/checkIntegrityCsvFixtures.php --fix

It is also added to runTests.sh:

Build/Scripts/runTests.sh -s fixCsvFixtures

Change-Id: Idee2a97094f56d059b02f801ffecb50a7ce21a5c
Resolves: #92207
Releases: master, 10.4, 9.5
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/65584
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: TYPO3com <noreply@typo3.com>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Benni Mack <benni@typo3.org>
  • Loading branch information
lolli42 committed Sep 5, 2020
1 parent 2e1e235 commit 712302a
Show file tree
Hide file tree
Showing 65 changed files with 1,715 additions and 1,587 deletions.
128 changes: 117 additions & 11 deletions Build/Scripts/checkIntegrityCsvFixtures.php
Expand Up @@ -14,6 +14,8 @@
* The TYPO3 project - inspiring people to share!
*/

use TYPO3\CMS\Core\Utility\MathUtility;

require __DIR__ . '/../../vendor/autoload.php';

if (PHP_SAPI !== 'cli') {
Expand All @@ -24,10 +26,30 @@
* Core integrity test script:
*
* Find all CSV files in fixtures and make sure they have the correct column
* count across all lines in them
* count across all lines in them and fix them if --fix argument is given.
*/
class checkIntegrityCsvFixtures
{
/**
* @var bool True to fix broken files
*/
private $fix = false;

/**
* @var bool True to drop superfluous comma on all CSV fixture files
*/
private $fixAll = false;

public function setFix(bool $fix)
{
$this->fix = $fix;
}

public function setFixAll(bool $fixAll)
{
$this->fixAll = $fixAll;
}

/**
* Executes the CGL check.
* The return value is used directly in the ext() call outside this class.
Expand All @@ -37,27 +59,38 @@ class checkIntegrityCsvFixtures
public function execute(): int
{
$filesToProcess = $this->findCsvFixtures();
$scanResult = [];
$failureCount = 0;
$outputLines = [];
$output = new \Symfony\Component\Console\Output\ConsoleOutput();

$resultAcrossAllFiles = 0;
$exitStatus = 0;
/** @var \SplFileInfo $csvFixture */
foreach ($filesToProcess as $csvFixture) {
$fullFilePath = $csvFixture->getRealPath();
if ($this->fixAll) {
$changed = $this->fixCsvFile($fullFilePath);
if ($changed) {
$outputLines[] = 'Changed file "' . $this->formatOutputString($this->getRelativePath($fullFilePath)) . '"';
}
continue;
}
$singleFileScanResult = $this->validateCsvFile($fullFilePath);
if ($singleFileScanResult !== '') {
$resultAcrossAllFiles = 1;
$failureCount++;
$scanResult[$this->getRelativePath($fullFilePath)] = $singleFileScanResult;
if ($this->fix) {
$this->fixCsvFile($fullFilePath);
$outputLines[] = 'Fixed file "' . $this->formatOutputString($this->getRelativePath($fullFilePath)) . '"';
} else {
$exitStatus = 1;
$outputLines[] = 'File "' . $this->formatOutputString($this->getRelativePath($fullFilePath)) . '"'
. ' is not in valid CSV format: ' . $singleFileScanResult;
}
}
}
if (!empty($scanResult)) {
foreach ($scanResult as $key => $reason) {
$output->writeln('The file "' . $this->formatOutputString($key) . '" is not in valid CSV format: ' . $reason);
if (!empty($outputLines)) {
foreach ($outputLines as $line) {
$output->writeln($line);
}
}
return $resultAcrossAllFiles;
return $exitStatus;
}

/**
Expand Down Expand Up @@ -105,6 +138,72 @@ private function validateCsvFile(string $csvFixture): string
return '';
}

/**
* Fix a single CSV file.
*
* @param string $csvFixture
* @return bool True if the file has been changed
*/
private function fixCsvFile(string $csvFixture): bool
{
$changeNeeded = false;
// Load file content into array split by line
$lines = file($csvFixture);
$neededColumns = 0;
$csvLines = [];
foreach ($lines as $line) {
// Find out how many columns are needed in this file
$csvLine = str_getcsv($line);
$csvLines[] = $csvLine;
foreach ($csvLine as $columnNumber => $columnContent) {
if (!empty($columnContent) && $columnNumber + 1 > $neededColumns) {
$neededColumns = $columnNumber + 1;
}
}
}
foreach ($csvLines as $csvLine) {
// Set $changeNeeded to true if this file needs an update and line is not a comment
if (count($csvLine) !== $neededColumns && substr($csvLine[0], 0, 2) !== '# ') {
$changeNeeded = true;
break;
}
}
if ($changeNeeded) {
// Update file
$fileHandle = fopen($csvFixture, 'w');
if (!$fileHandle) {
throw new \Exception('Opening file "' . $csvFixture . '" for writing failed.');
}
foreach ($csvLines as $csvLine) {
// Extend / reduce to needed size
$csvLine = array_slice(array_pad($csvLine, $neededColumns, ''), 0, $neededColumns);
$isComment = false;
$line = array_reduce($csvLine, function ($carry, $column) use (&$isComment) {
if ($carry === null && substr($column, 0, 2) === '# ') {
$isComment = true;
$carry .= $column;
} elseif ($isComment) {
// comment lines are not filled up with comma
return $carry;
} elseif (empty($column) && $column !== '0') {
// No leading comma if first column
$carry .= $carry === null ? '' : ',';
} elseif (MathUtility::canBeInterpretedAsInteger($column)) {
// No leading comma if first column and integer payload
$carry .= ($carry === null ? '' : ',') . $column;
} else {
// No leading comma if first column and string payload
$carry .= ($carry === null ? '' : ',') . '"' . $column . '"';
}
return $carry;
});
fwrite($fileHandle, $line . chr(10));
}
fclose($fileHandle);
}
return $changeNeeded;
}

private function getRelativePath(string $fullPath): string
{
$pathSegment = str_replace('Build/Scripts', '', __DIR__);
Expand All @@ -129,4 +228,11 @@ private function formatOutputString(string $filename): string
}

$cglFixer = new checkIntegrityCsvFixtures();
$args = getopt('', ['fix', 'fixAll']);
if (array_key_exists('fix', $args)) {
$cglFixer->setFix(true);
}
if (array_key_exists('fixAll', $args)) {
$cglFixer->setFixAll(true);
}
exit($cglFixer->execute());
7 changes: 7 additions & 0 deletions Build/Scripts/runTests.sh
Expand Up @@ -83,6 +83,7 @@ Options:
- checkXlf: test .xlf files for integrity
- composerInstall: "composer install", handy if host has no PHP, uses composer cache of users home
- composerValidate: "composer validate"
- fixCsvFixtures: fix broken functional test csv fixtures
- functional: functional tests
- install: installation acceptance tests, only with -d mariadb|postgres|sqlite
- lint: PHP linting
Expand Down Expand Up @@ -408,6 +409,12 @@ case ${TEST_SUITE} in
SUITE_EXIT_CODE=$?
docker-compose down
;;
fixCsvFixtures)
setUpDockerComposeDotEnv
docker-compose run fix_csv_fixtures
SUITE_EXIT_CODE=$?
docker-compose down
;;
functional)
setUpDockerComposeDotEnv
case ${DBMS} in
Expand Down
17 changes: 17 additions & 0 deletions Build/testing-docker/local/docker-compose.yml
Expand Up @@ -415,6 +415,23 @@ services:
Build/Scripts/checkIntegrityCsvFixtures.php;
"
fix_csv_fixtures:
image: typo3gmbh/${DOCKER_PHP_IMAGE}:latest
user: ${HOST_UID}
volumes:
- ${CORE_ROOT}:${CORE_ROOT}
- ${HOST_HOME}:${HOST_HOME}
- /etc/passwd:/etc/passwd:ro
- /etc/group:/etc/group:ro
working_dir: ${CORE_ROOT}
command: >
/bin/sh -c "
if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
set -x
fi
Build/Scripts/checkIntegrityCsvFixtures.php --fix;
"
check_exception_codes:
image: typo3gmbh/${DOCKER_PHP_IMAGE}:latest
user: ${HOST_UID}
Expand Down
@@ -1,10 +1,10 @@
"sys_language",,,,,,,,,,,,,,,,,,
,"uid","pid","hidden","title","flag",,,,,,,,,,,,,
,1,0,0,"Dansk","dk",,,,,,,,,,,,,
,2,0,0,"Deutsch","de",,,,,,,,,,,,,
"pages",,,,,,,,,,,,,,,,,,
,"uid","pid","title","sys_language_uid","l10n_parent",,,,,,,,,,,,,
,1,0,"Startpage",0,0,,,,,,,,,,,,,
,2,0,"Startpage - Dansk",1,1,,,,,,,,,,,,,
,3,1,"Subpage",0,0,,,,,,,,,,,,,
,4,1,"Subpage - Dansk",1,3,,,,,,,,,,,,,
"sys_language",,,,,
,"uid","pid","hidden","title","flag"
,1,0,0,"Dansk","dk"
,2,0,0,"Deutsch","de"
"pages",,,,,
,"uid","pid","title","sys_language_uid","l10n_parent"
,1,0,"Startpage",0,0
,2,0,"Startpage - Dansk",1,1
,3,1,"Subpage",0,0
,4,1,"Subpage - Dansk",1,3
@@ -1,28 +1,28 @@
"sys_language",,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","hidden","title","flag",,,,,,,,,,,,,,,,,
,1,0,0,"Dansk","dk",,,,,,,,,,,,,,,,,
,2,0,0,"Deutsch","de",,,,,,,,,,,,,,,,,
"sys_category",,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","sorting","deleted","sys_language_uid","l10n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","parent","items","l10n_diffsource","description",,,,,
,28,0,256,0,0,0,0,0,0,0,0,0,"Category A",0,0,,,,,,,
,29,0,512,0,0,0,0,0,0,0,0,0,"Category B",0,0,,,,,,,
,30,0,768,0,0,0,0,0,0,0,0,0,"Category C",0,0,,,,,,,
,31,0,1024,0,0,0,0,0,0,0,0,0,"Category A.A",28,0,,,,,,,
"sys_file",,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","type","storage","identifier","extension","mime_type","name","sha1","size","creation_date","modification_date","missing","metadata","identifier_hash","folder_hash","last_indexed",,,,,
,1,0,2,1,"/_migrated/pics/kasper-skarhoj1_01.jpeg","jpeg","image/jpeg","kasper-skarhoj1_01.jpeg","b841902021bbe23bd71e4a5b5b97626da7734b90",39056,1375080761,1374139442,0,0,"2a4941658e4bd943048a234a5e1f305a1f736b10","f6e391567e01bdb14eac504413794a3bc1300abd",0,,,,,
,21,0,2,1,"/_migrated/pics/typo3_image5_01.jpg","jpg","image/jpeg","typo3_image5_01.jpg","ce136877a22606a6e44ce9b1f8ed3be70c74e6ee",126872,1375080761,1374139442,0,0,"9df04e41b37d2c29777ee64ced3f612b2422a02e","f6e391567e01bdb14eac504413794a3bc1300abd",0,,,,,
"sys_file_metadata",,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","sys_language_uid","l10n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","file","title","width","height","description","alternative","categories","l10n_diffsource",,,,
,1,0,0,0,0,0,0,0,0,0,1,"Image Kasper",401,600,,,0,,,,,
,21,0,0,0,0,0,0,0,0,0,21,"Image T3BOARD",1024,683,,,0,,,,,
"sys_file_reference",,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","deleted","sys_language_uid","l10n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","uid_local","uid_foreign","tablenames","fieldname","sorting_foreign","table_local","title","description","alternative","link","l10n_diffsource",
,126,89,0,0,0,0,0,0,0,0,1,330,"tt_content","image",2,"sys_file","T3BOARD",,,,,
,127,89,0,0,0,0,0,0,0,0,21,330,"tt_content","image",1,"sys_file","Kasper",,,,,
,128,89,0,0,0,0,0,0,0,0,21,331,"tt_content","image",1,"sys_file","Taken at T3BOARD",,,,,
,129,89,0,0,0,0,0,0,0,0,1,331,"tt_content","image",2,"sys_file","This is Kasper",,,,,
"tt_content",,,,,,,,,,,,,,,,,,,,,,
,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image",,,,,,,,
,330,89,256,0,0,0,0,0,0,0,0,0,"Regular Element #1",2,,,,,,,,
,331,89,512,0,0,0,0,0,0,0,0,0,"Regular Element #2",2,,,,,,,,
"sys_language",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","hidden","title","flag",,,,,,,,,,,,,,,,
,1,0,0,"Dansk","dk",,,,,,,,,,,,,,,,
,2,0,0,"Deutsch","de",,,,,,,,,,,,,,,,
"sys_category",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","sorting","deleted","sys_language_uid","l10n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","title","parent","items","l10n_diffsource","description",,,,
,28,0,256,0,0,0,0,0,0,0,0,0,"Category A",0,0,,,,,,
,29,0,512,0,0,0,0,0,0,0,0,0,"Category B",0,0,,,,,,
,30,0,768,0,0,0,0,0,0,0,0,0,"Category C",0,0,,,,,,
,31,0,1024,0,0,0,0,0,0,0,0,0,"Category A.A",28,0,,,,,,
"sys_file",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","type","storage","identifier","extension","mime_type","name","sha1","size","creation_date","modification_date","missing","metadata","identifier_hash","folder_hash","last_indexed",,,,
,1,0,2,1,"/_migrated/pics/kasper-skarhoj1_01.jpeg","jpeg","image/jpeg","kasper-skarhoj1_01.jpeg","b841902021bbe23bd71e4a5b5b97626da7734b90",39056,1375080761,1374139442,0,0,"2a4941658e4bd943048a234a5e1f305a1f736b10","f6e391567e01bdb14eac504413794a3bc1300abd",0,,,,
,21,0,2,1,"/_migrated/pics/typo3_image5_01.jpg","jpg","image/jpeg","typo3_image5_01.jpg","ce136877a22606a6e44ce9b1f8ed3be70c74e6ee",126872,1375080761,1374139442,0,0,"9df04e41b37d2c29777ee64ced3f612b2422a02e","f6e391567e01bdb14eac504413794a3bc1300abd",0,,,,
"sys_file_metadata",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","sys_language_uid","l10n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","file","title","width","height","description","alternative","categories","l10n_diffsource",,,
,1,0,0,0,0,0,0,0,0,0,1,"Image Kasper",401,600,,,0,,,,
,21,0,0,0,0,0,0,0,0,0,21,"Image T3BOARD",1024,683,,,0,,,,
"sys_file_reference",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","deleted","sys_language_uid","l10n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","uid_local","uid_foreign","tablenames","fieldname","sorting_foreign","table_local","title","description","alternative","link","l10n_diffsource"
,126,89,0,0,0,0,0,0,0,0,1,330,"tt_content","image",2,"sys_file","T3BOARD",,,,
,127,89,0,0,0,0,0,0,0,0,21,330,"tt_content","image",1,"sys_file","Kasper",,,,
,128,89,0,0,0,0,0,0,0,0,21,331,"tt_content","image",1,"sys_file","Taken at T3BOARD",,,,
,129,89,0,0,0,0,0,0,0,0,1,331,"tt_content","image",2,"sys_file","This is Kasper",,,,
"tt_content",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image",,,,,,,
,330,89,256,0,0,0,0,0,0,0,0,0,"Regular Element #1",2,,,,,,,
,331,89,512,0,0,0,0,0,0,0,0,0,"Regular Element #2",2,,,,,,,
@@ -1,12 +1,12 @@
"sys_file_reference",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","deleted","sys_language_uid","l10n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","uid_local","uid_foreign","tablenames","fieldname","sorting_foreign","table_local","title","description","alternative","link",
,126,89,0,0,0,0,0,0,0,0,1,330,"tt_content","image",2,"sys_file","T3BOARD",,,,
,127,89,0,0,0,0,0,0,0,0,21,330,"tt_content","image",1,"sys_file","Kasper",,,,
,128,89,0,0,0,0,0,0,0,0,21,331,"tt_content","image",1,"sys_file","Taken at T3BOARD",,,,
,129,89,0,0,0,0,0,0,0,0,1,331,"tt_content","image",2,"sys_file","This is Kasper",,,,
"tt_content",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image",,,,,,,
,330,89,768,0,0,0,0,0,0,0,0,0,"Regular Element #1",2,,,,,,,
,331,89,512,0,0,0,0,0,0,0,0,0,"Regular Element #2",2,,,,,,,
"sys_refindex",,,,,,,,,,,,,,,,,,,,,
,"hash","tablename","recuid","field","sorting","deleted","workspace","ref_table","ref_uid",,,,,,,,,,,,
"sys_file_reference",,,,,,,,,,,,,,,,,,,,
,"uid","pid","deleted","sys_language_uid","l10n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","uid_local","uid_foreign","tablenames","fieldname","sorting_foreign","table_local","title","description","alternative","link"
,126,89,0,0,0,0,0,0,0,0,1,330,"tt_content","image",2,"sys_file","T3BOARD",,,
,127,89,0,0,0,0,0,0,0,0,21,330,"tt_content","image",1,"sys_file","Kasper",,,
,128,89,0,0,0,0,0,0,0,0,21,331,"tt_content","image",1,"sys_file","Taken at T3BOARD",,,
,129,89,0,0,0,0,0,0,0,0,1,331,"tt_content","image",2,"sys_file","This is Kasper",,,
"tt_content",,,,,,,,,,,,,,,,,,,,
,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image",,,,,,
,330,89,768,0,0,0,0,0,0,0,0,0,"Regular Element #1",2,,,,,,
,331,89,512,0,0,0,0,0,0,0,0,0,"Regular Element #2",2,,,,,,
"sys_refindex",,,,,,,,,,,,,,,,,,,,
,"hash","tablename","recuid","field","sorting","deleted","workspace","ref_table","ref_uid",,,,,,,,,,,
@@ -1,19 +1,19 @@
"sys_file_reference",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","deleted","sys_language_uid","l10n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","uid_local","uid_foreign","tablenames","fieldname","sorting_foreign","table_local","title","description","alternative","link",
,126,89,0,0,0,0,0,0,0,0,1,330,"tt_content","image",2,"sys_file","T3BOARD",,,,
,127,89,0,0,0,0,0,0,0,0,21,330,"tt_content","image",1,"sys_file","Kasper",,,,
,128,89,0,0,0,0,0,0,0,0,21,331,"tt_content","image",1,"sys_file","Taken at T3BOARD",,,,
,129,89,0,0,0,0,0,0,0,0,1,331,"tt_content","image",2,"sys_file","This is Kasper",,,,
,130,89,0,0,0,0,0,0,0,0,21,332,"tt_content","image",1,"sys_file","Taken at T3BOARD",,,,
,131,89,0,0,0,0,0,0,0,0,1,332,"tt_content","image",2,"sys_file","This is Kasper",,,,
"tt_content",,,,,,,,,,,,,,,,,,,,,
,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image",,,,,,,
,330,89,256,0,0,0,0,0,0,0,0,0,"Regular Element #1",2,,,,,,,
,331,89,512,0,0,0,0,0,0,0,0,0,"Regular Element #2",2,,,,,,,
,332,89,128,0,0,0,331,0,0,0,0,0,"Regular Element #2 (copy 1)",2,,,,,,,
"sys_refindex",,,,,,,,,,,,,,,,,,,,,
,"hash","tablename","recuid","field","sorting","deleted","workspace","ref_table","ref_uid",,,,,,,,,,,,
,"737779e2835b33067cc6141faf19343e","sys_file_reference",130,"uid_local",0,0,0,"sys_file",21,,,,,,,,,,,,
,"0e374e0da126c39774d168d96b06c743","sys_file_reference",131,"uid_local",0,0,0,"sys_file",1,,,,,,,,,,,,
,"7f0edf5e6a8704b7825f934cf264f3d6","tt_content",332,"image",0,0,0,"sys_file_reference",130,,,,,,,,,,,,
,"31407683c75d7b3e898921c4c0299c94","tt_content",332,"image",1,0,0,"sys_file_reference",131,,,,,,,,,,,,
"sys_file_reference",,,,,,,,,,,,,,,,,,,,
,"uid","pid","deleted","sys_language_uid","l10n_parent","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","uid_local","uid_foreign","tablenames","fieldname","sorting_foreign","table_local","title","description","alternative","link"
,126,89,0,0,0,0,0,0,0,0,1,330,"tt_content","image",2,"sys_file","T3BOARD",,,
,127,89,0,0,0,0,0,0,0,0,21,330,"tt_content","image",1,"sys_file","Kasper",,,
,128,89,0,0,0,0,0,0,0,0,21,331,"tt_content","image",1,"sys_file","Taken at T3BOARD",,,
,129,89,0,0,0,0,0,0,0,0,1,331,"tt_content","image",2,"sys_file","This is Kasper",,,
,130,89,0,0,0,0,0,0,0,0,21,332,"tt_content","image",1,"sys_file","Taken at T3BOARD",,,
,131,89,0,0,0,0,0,0,0,0,1,332,"tt_content","image",2,"sys_file","This is Kasper",,,
"tt_content",,,,,,,,,,,,,,,,,,,,
,"uid","pid","sorting","deleted","sys_language_uid","l18n_parent","t3_origuid","t3ver_wsid","t3ver_state","t3ver_stage","t3ver_oid","t3ver_move_id","header","image",,,,,,
,330,89,256,0,0,0,0,0,0,0,0,0,"Regular Element #1",2,,,,,,
,331,89,512,0,0,0,0,0,0,0,0,0,"Regular Element #2",2,,,,,,
,332,89,128,0,0,0,331,0,0,0,0,0,"Regular Element #2 (copy 1)",2,,,,,,
"sys_refindex",,,,,,,,,,,,,,,,,,,,
,"hash","tablename","recuid","field","sorting","deleted","workspace","ref_table","ref_uid",,,,,,,,,,,
,"737779e2835b33067cc6141faf19343e","sys_file_reference",130,"uid_local",0,0,0,"sys_file",21,,,,,,,,,,,
,"0e374e0da126c39774d168d96b06c743","sys_file_reference",131,"uid_local",0,0,0,"sys_file",1,,,,,,,,,,,
,"7f0edf5e6a8704b7825f934cf264f3d6","tt_content",332,"image",0,0,0,"sys_file_reference",130,,,,,,,,,,,
,"31407683c75d7b3e898921c4c0299c94","tt_content",332,"image",1,0,0,"sys_file_reference",131,,,,,,,,,,,

0 comments on commit 712302a

Please sign in to comment.