| <?php |
| $bundlesToUnzipList = array (); |
| function cleanup($string) { |
| $result = str_replace ( "\n", "", $string ); |
| $result = str_replace ( "\r", "", $result ); |
| $result = trim ( $result ); |
| return $result; |
| } |
| class BundleToUnzip { |
| public $id = ""; |
| public $version = ""; |
| function __construct($id, $version) { |
| $this->id = trim ( $id ); |
| $this->version = trim ( $version ); |
| } |
| } |
| class Bundle { |
| public $symbolicId = ""; |
| public $version = ""; |
| public $qualifier = ""; |
| public $fullfilename = ""; |
| public $pack = ""; |
| public $cq = ""; |
| public $name = ""; |
| public $email = ""; |
| public $note = ""; |
| public $sourceBundle; |
| function __construct($aFullFileNameEntry, $logmissingipdata) { |
| $START_GROUP = "("; |
| $END_GROUP = ")"; |
| $UNDERSCORE = "_"; |
| $BACKSLASH = "\\"; |
| $LITERAL_PERIOD = "\\."; |
| $ANYDIGITS = "\d*"; |
| $ANY = ".*"; |
| $ZERO_OR_ONE = "?"; |
| $PERL_DELIM = "/"; |
| |
| $this->fullfilename = $aFullFileNameEntry; |
| |
| $pattern = $PERL_DELIM . $START_GROUP . $ANY . $END_GROUP . $UNDERSCORE . $START_GROUP . $ANYDIGITS . $LITERAL_PERIOD . $ANYDIGITS . $LITERAL_PERIOD . $ANYDIGITS . $END_GROUP . $LITERAL_PERIOD . $ZERO_OR_ONE . $START_GROUP . $ANY . $END_GROUP . $ZERO_OR_ONE . $LITERAL_PERIOD . $START_GROUP . "zip" . "|" . "jar" . $END_GROUP . $PERL_DELIM; |
| |
| // echo ""; |
| // echo "pattern: " . $pattern . "<br />"; |
| // echo "input: " . $this->fullfilename . "<br />"; |
| // echo ""; |
| $validMatch = preg_match ( $pattern, $aFullFileNameEntry, $matches ); |
| if ($validMatch) { |
| // $item = 0; |
| // foreach ($matches as $match) { |
| // echo "match " . $item . ": " . $match . "<br />"; |
| // $item = $item + 1; |
| // } |
| $this->symbolicId = trim ( $matches [1] ); |
| $this->version = trim ( $matches [2] ); |
| if (array_key_exists ( 3, $matches )) { |
| $this->qualifier = $matches [3]; |
| } |
| $this->pack = checkPacked ( $this->symbolicId, $this->version ); |
| } else { |
| $this->symbolicId = "Error: apparently not a valid bundle name/version: " . $this->fullfilename; |
| } |
| |
| $xmldatafile = "ip_logs/" . $this->symbolicId . ".xml"; |
| // echo "filename: " . $xmldatafile . "<br />"; |
| if (file_exists ( $xmldatafile )) { |
| // Load the XML source |
| $xml = new DOMDocument (); |
| $xml->load ( $xmldatafile ); |
| // find the version element |
| |
| $xpath = new DOMXPath ( $xml ); |
| $projectNodes = $xpath->query ( "//project[@version='$this->version']" ); |
| $nNodes = $projectNodes->length; |
| if ($nNodes > 0) { |
| $projectNode = $projectNodes->item ( 0 ); |
| $zElements = $projectNode->getElementsByTagName ( "ipzilla" ); |
| foreach ( $zElements as $zElement ) { |
| $this->cq = $zElement->getAttribute ( "bug_id" ); |
| } |
| |
| $cElements = $projectNode->getElementsByTagName ( "contact" ); |
| foreach ( $cElements as $cElement ) { |
| $nElement = $cElement->getElementsByTagName ( "name" ); |
| $this->name = $nElement->item ( 0 )->nodeValue; |
| $this->name = cleanup ( $this->name ); |
| $mElement = $cElement->getElementsByTagName ( "email" ); |
| $this->email = $mElement->item ( 0 )->nodeValue; |
| $this->email = cleanup ( $this->email ); |
| $this->email = str_replace ( "@", "*at*", $this->email ); |
| } |
| |
| // TODO: avoid the html markup <p> by using an array, or similar |
| $notesElements = $projectNode->getElementsByTagName ( "notes" ); |
| foreach ( $notesElements as $notesElement ) { |
| $noteElement = $notesElement->getElementsByTagName ( "note" ); |
| foreach ( $noteElement as $niElement ) { |
| $notevalue = $niElement->nodeValue; |
| $notevalue = cleanup ( $notevalue ); |
| if ($notevalue != "") { |
| $this->note = $this->note . "<p>" . $notevalue . "</p>"; |
| } |
| } |
| } |
| } else { |
| $this->cq = "No project info for this version?"; |
| if ($logmissingipdata) { |
| // source handled differently, elsewhere |
| if (! endsWith ( $xmldatafile, "source.xml" )) { |
| writeIPLogError ( $xmldatafile, $this->cq, $this->version ); |
| } |
| } |
| } |
| } else { |
| $this->cq = "No data file found"; |
| if ($logmissingipdata) { |
| // source handled differently, elsewhere |
| if (! endsWith ( $xmldatafile, "source.xml" )) { |
| writeIPLogError ( $xmldatafile, $this->cq, null ); |
| } |
| } |
| } |
| } |
| function __toString() { |
| return $this->symbolicId . " " . $this->version; |
| } |
| } |
| function writeIPLogError($ipfilename, $errmessage, $expectedIPLogVersion) { |
| // $ipoutfilename=$_SERVER['DOCUMENT_ROOT']."//iplogFileErrors.txt"; |
| // echo "docroot: " . $_SERVER['DOCUMENT_ROOT'] . "\n"; |
| // echo "dir: " . __DIR__ . "\n"; |
| // echo "file: " . __FILE__ . "\n"; |
| global $ipouterrors; |
| // $ipoutfilename=__DIR__."/iplogFileErrors.txt"; |
| // $iphandle = fopen($ipoutfilename, "a+b"); |
| $writestring = "\nError in IP_log file:\n\t$ipfilename\n\t$errmessage\n"; |
| if ($expectedIPLogVersion != null) { |
| $writestring = $writestring . "\tVersion expected in IP log xml file: $expectedIPLogVersion\n"; |
| } |
| $ipouterrors [] = $writestring; |
| // if (fwrite($iphandle, $writestring) === false) { |
| // echo "Cannot write to $ipoutfilename. <br />"; |
| // } |
| // fclose($iphandle); |
| } |
| function endsWith($str, $sub) { |
| return (substr ( $str, strlen ( $str ) - strlen ( $sub ) ) === $sub); |
| } |
| function stripSuffix($str, $suffix) { |
| $result = $str; |
| if (endsWith ( $str, $suffix )) { |
| $pos = strrpos ( $str, $suffix ); |
| $result = substr ( $str, 0, $pos ); |
| } |
| return $result; |
| } |
| function getBundle($list, $id, $version) { |
| foreach ( $list as $bundle ) { |
| if ($bundle->symbolicId == $id && $bundle->version == $version) { |
| return $bundle; |
| } |
| } |
| } |
| function countDistinct($list) { |
| $idList = array (); |
| foreach ( $list as $bundle ) { |
| $idList [$bundle->symbolicId] = $bundle->symbolicId; |
| } |
| return count ( array_unique ( $idList ) ); |
| } |
| function countDistinctCQs($list) { |
| $idList = array (); |
| foreach ( $list as $bundle ) { |
| $idList [$bundle->cq] = $bundle->cq; |
| } |
| return count ( array_unique ( $idList ) ); |
| } |
| function getListOfCQs($list) { |
| $COMMA = "%2C"; |
| $idList = ""; |
| $moreThanOne = false; |
| foreach ( $list as $bundle ) { |
| if ($moreThanOne) { |
| $idList = $idList . $COMMA . $bundle->cq; |
| } else { |
| $idList = $bundle->cq; |
| $moreThanOne = true; |
| } |
| } |
| return $idList; |
| } |
| function countTotal($list) { |
| $result = 0; |
| foreach ( $list as $bundle ) { |
| // always one for bundle |
| $result = $result + 1; |
| if (isset ( $bundle->sourceBundle )) { |
| // one for source, if provided |
| $result = $result + 1; |
| } |
| } |
| return $result; |
| } |
| function getBundleList($dir) { |
| |
| // init required data |
| getBundlesToUnzip (); |
| |
| // prepare arrary of bundles to display |
| $bundleList = array (); |
| |
| // pass 1 |
| $aDirectory = dir ( $dir ); |
| while ( $anEntry = $aDirectory->read () ) { |
| |
| // we are just looking for jar and zip files, no directories, and |
| // just displaying the name |
| if ($anEntry != "." && $anEntry != ".." && ((endsWith ( $anEntry, ".zip" ) || endsWith ( $anEntry, ".jar" )))) { |
| |
| // echo "anEntryName: " . $anEntry . "<br />"; |
| $aBundle = new Bundle ( $anEntry, true ); |
| // echo ""; |
| // echo "bundle: " . $aBundle . "<br />"; |
| // echo "id: " . $aBundle->symbolicId . "<br />"; |
| // echo ""; |
| |
| if (endsWith ( $aBundle->symbolicId, ".source" )) { |
| // add to matching bundle object |
| // skip source this pass |
| } else { |
| $bundleList [$aBundle->fullfilename] = $aBundle; |
| } |
| } |
| } |
| $aDirectory->close (); |
| |
| // pass 2 |
| $aDirectory = dir ( $dir ); |
| // loop again to pick up source bundles |
| while ( $anEntry = $aDirectory->read () ) { |
| |
| // we are just looking for jar and zip files, no directories, and |
| // just displaying the name |
| if ($anEntry != "." && $anEntry != ".." && ((endsWith ( $anEntry, ".zip" ) || endsWith ( $anEntry, ".jar" )))) { |
| |
| // echo "anEntryName: " . $anEntry . "<br />"; |
| $aBundle = new Bundle ( $anEntry, false ); |
| // echo ""; |
| // echo "bundle: " . $aBundle . "<br />"; |
| // echo "id: " . $aBundle->symbolicId . "<br />"; |
| // echo ""; |
| |
| if (endsWith ( $aBundle->symbolicId, ".source" )) { |
| // add to matching bundle object |
| // this logic assumes source bundle is always found following |
| // regular bundle |
| // may need to make two passes? |
| // also assumes there's just one id-version (i.e. not multiple |
| // qualifiers). |
| $correspondingID = stripSuffix ( $aBundle->symbolicId, ".source" ); |
| $correspondingBundle = getBundle ( $bundleList, $correspondingID, $aBundle->version ); |
| if (isset ( $correspondingBundle )) { |
| $correspondingBundle->sourceBundle = $aBundle; |
| } else { |
| echo "Logic Error: PHP script found a source bundle, " . $aBundle->symbolicId . ", before the corresponding code bundle"; |
| } |
| } else { |
| // skip bundles this time, just getting source bundles |
| } |
| } |
| } |
| $aDirectory->close (); |
| |
| return $bundleList; |
| } |
| function getBuildBaseName($dropDirectory) { |
| // for now, a simply heuristic to get build name ... same as |
| // base directory name. It's done as a seperate function, though, |
| // since |
| // in future, may have to read a property file, or something. |
| return basename ( $dropDirectory ); |
| } |
| function fileSizeForDisplay($filename) { |
| $onekilo = 1024; |
| $onemeg = $onekilo * $onekilo; |
| $criteria = 10 * $onemeg; |
| $scaleChar = "M"; |
| if (file_exists ( $filename )) { |
| $zipfilesize = filesize ( $filename ); |
| if ($zipfilesize > $criteria) { |
| $zipfilesize = round ( $zipfilesize / $onemeg, 0 ); |
| $scaleChar = "M"; |
| } else { |
| $zipfilesize = round ( $zipfilesize / $onekilo, 0 ); |
| $scaleChar = "K"; |
| } |
| } else { |
| $zipfilesize = 0; |
| } |
| $result = "(" . $zipfilesize . $scaleChar . ")"; |
| return $result; |
| } |
| function getBundlesToUnzip() { |
| global $bundlesToUnzipList; |
| $file_handle = fopen ( "bundlesToUnzip.properties", "r" ); |
| if ($file_handle !== false) { |
| while ( ! feof ( $file_handle ) ) { |
| $line = fgets ( $file_handle ); |
| if (! (strpos ( $line, "#" ) === 0)) { |
| $dataline = explode ( ",", $line ); |
| $id = $dataline [0]; |
| // guard against blank or empty lines? |
| // TODO: not sure how they get in there to begin with? |
| if (! empty ( $id )) { |
| $version = $dataline [1]; |
| $bundleToUnzip = new BundleToUnzip ( $id, $version ); |
| $bundlesToUnzipList [] = $bundleToUnzip; |
| } |
| } |
| } |
| fclose ( $file_handle ); |
| } |
| return $bundlesToUnzipList; |
| } |
| function checkPacked($id, $version) { |
| // echo "id: $id version: $version \n <br />"; |
| global $bundlesToUnzipList; |
| $result = ""; |
| $arrayLength = sizeof ( $bundlesToUnzipList ); |
| for($i = 0; $i < $arrayLength; $i ++) { |
| $bundleToUnzip = $bundlesToUnzipList [$i]; |
| // echo " compareBundleToUnzip: id: $bundleToUnzip->id version: |
| // $bundleToUnzip->version \n <br />"; |
| |
| if ($id == $bundleToUnzip->id && $version == $bundleToUnzip->version) { |
| $result = " (unzip)"; |
| break; |
| } |
| } |
| return $result; |
| } |
| |
| ?> |