aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/includes/GitInfoTest.php
diff options
context:
space:
mode:
authorSeb35 <seb35@seb35.fr>2017-09-15 10:29:13 +0200
committerBryanDavis <bdavis@wikimedia.org>2017-10-02 03:47:33 +0000
commit125f83234eb17f0c270ca9b3e50b41ec64045c7e (patch)
treea0f270291cfbd6fb810cc30ef8fb1d9a60558ee7 /tests/phpunit/includes/GitInfoTest.php
parent44c06df91810074414899ae65fb3bbe3cca43fea (diff)
downloadmediawikicore-125f83234eb17f0c270ca9b3e50b41ec64045c7e.tar.gz
mediawikicore-125f83234eb17f0c270ca9b3e50b41ec64045c7e.zip
Improve GitInfo for reading packed refs
GitInfo only reads branches in files /refs/heads/*; it should also read those in /.git/packed-refs. There are 4 tests in this commit to test this new "feature" and add some code coverage to other methods. Given this class tests Git behaviour and MediaWiki itself is versioned with Git, the test data are created during the tests and removed at the end to avoid interference with Git as CVS. Bug: T155747 Change-Id: Icccdf3ec797788582f836e2d8e267a1d714d50dc
Diffstat (limited to 'tests/phpunit/includes/GitInfoTest.php')
-rw-r--r--tests/phpunit/includes/GitInfoTest.php56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/phpunit/includes/GitInfoTest.php b/tests/phpunit/includes/GitInfoTest.php
index ae858f5d5e47..1037b3705e31 100644
--- a/tests/phpunit/includes/GitInfoTest.php
+++ b/tests/phpunit/includes/GitInfoTest.php
@@ -4,6 +4,30 @@
*/
class GitInfoTest extends MediaWikiTestCase {
+ public static function setUpBeforeClass() {
+ mkdir( __DIR__ . '/../data/gitrepo' );
+ mkdir( __DIR__ . '/../data/gitrepo/1' );
+ mkdir( __DIR__ . '/../data/gitrepo/2' );
+ mkdir( __DIR__ . '/../data/gitrepo/3' );
+ mkdir( __DIR__ . '/../data/gitrepo/1/.git' );
+ mkdir( __DIR__ . '/../data/gitrepo/1/.git/refs' );
+ mkdir( __DIR__ . '/../data/gitrepo/1/.git/refs/heads' );
+ file_put_contents( __DIR__ . '/../data/gitrepo/1/.git/HEAD',
+ "ref: refs/heads/master\n" );
+ file_put_contents( __DIR__ . '/../data/gitrepo/1/.git/refs/heads/master',
+ "0123456789012345678901234567890123abcdef\n" );
+ file_put_contents( __DIR__ . '/../data/gitrepo/1/.git/packed-refs',
+ "abcdef6789012345678901234567890123456789 refs/heads/master\n" );
+ file_put_contents( __DIR__ . '/../data/gitrepo/2/.git',
+ "gitdir: ../1/.git\n" );
+ file_put_contents( __DIR__ . '/../data/gitrepo/3/.git',
+ 'gitdir: ' . __DIR__ . "/../data/gitrepo/1/.git\n" );
+ }
+
+ public static function tearDownAfterClass() {
+ wfRecursiveRemoveDir( __DIR__ . '/../data/gitrepo' );
+ }
+
protected function setUp() {
parent::setUp();
$this->setMwGlobals( 'wgGitInfoCacheDirectory', __DIR__ . '/../data/gitinfo' );
@@ -43,4 +67,36 @@ class GitInfoTest extends MediaWikiTestCase {
$this->assertTrue( $fixture->cacheIsComplete() );
}
+ public function testReadingHead() {
+ $dir = __DIR__ . '/../data/gitrepo/1';
+ $fixture = new GitInfo( $dir );
+
+ $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+ $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+ }
+
+ public function testIndirection() {
+ $dir = __DIR__ . '/../data/gitrepo/2';
+ $fixture = new GitInfo( $dir );
+
+ $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+ $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+ }
+
+ public function testIndirection2() {
+ $dir = __DIR__ . '/../data/gitrepo/3';
+ $fixture = new GitInfo( $dir );
+
+ $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+ $this->assertEquals( '0123456789012345678901234567890123abcdef', $fixture->getHeadSHA1() );
+ }
+
+ public function testReadingPackedRefs() {
+ $dir = __DIR__ . '/../data/gitrepo/1';
+ unlink( __DIR__ . '/../data/gitrepo/1/.git/refs/heads/master' );
+ $fixture = new GitInfo( $dir );
+
+ $this->assertEquals( 'refs/heads/master', $fixture->getHead() );
+ $this->assertEquals( 'abcdef6789012345678901234567890123456789', $fixture->getHeadSHA1() );
+ }
}