Added new success message when CLI Installer completes its work succesfuly.
[lhc/web/wiklou.git] / includes / GitInfo.php
index 4351acc..f170a02 100644 (file)
@@ -23,6 +23,8 @@
  * @file
  */
 
+use MediaWiki\Shell\Shell;
+
 class GitInfo {
 
        /**
@@ -191,8 +193,14 @@ class GitInfo {
                        } else {
                                // If not a SHA1 it may be a ref:
                                $refFile = "{$this->basedir}/{$head}";
+                               $packedRefs = "{$this->basedir}/packed-refs";
+                               $headRegex = preg_quote( $head, '/' );
                                if ( is_readable( $refFile ) ) {
                                        $sha1 = rtrim( file_get_contents( $refFile ) );
+                               } elseif ( is_readable( $packedRefs ) &&
+                                       preg_match( "/^([0-9A-Fa-f]{40}) $headRegex$/m", file_get_contents( $packedRefs ), $matches )
+                               ) {
+                                       $sha1 = $matches[1];
                                }
                        }
                        $this->cache['headSHA1'] = $sha1;
@@ -215,13 +223,21 @@ class GitInfo {
                                is_executable( $wgGitBin ) &&
                                $this->getHead() !== false
                        ) {
-                               $environment = [ "GIT_DIR" => $this->basedir ];
-                               $cmd = wfEscapeShellArg( $wgGitBin ) .
-                                       " show -s --format=format:%ct HEAD";
-                               $retc = false;
-                               $commitDate = wfShellExec( $cmd, $retc, $environment );
-                               if ( $retc === 0 ) {
-                                       $date = (int)$commitDate;
+                               $cmd = [
+                                       $wgGitBin,
+                                       'show',
+                                       '-s',
+                                       '--format=format:%ct',
+                                       'HEAD',
+                               ];
+                               $result = Shell::command( $cmd )
+                                       ->environment( [ 'GIT_DIR' => $this->basedir ] )
+                                       ->restrict( Shell::RESTRICT_DEFAULT | Shell::NO_NETWORK )
+                                       ->whitelistPaths( [ $this->basedir ] )
+                                       ->execute();
+
+                               if ( $result->getExitCode() === 0 ) {
+                                       $date = (int)$result->getStdout();
                                }
                        }
                        $this->cache['headCommitDate'] = $date;