diff options
author | Seb35 <seb35@seb35.fr> | 2017-09-15 10:29:13 +0200 |
---|---|---|
committer | BryanDavis <bdavis@wikimedia.org> | 2017-10-02 03:47:33 +0000 |
commit | 125f83234eb17f0c270ca9b3e50b41ec64045c7e (patch) | |
tree | a0f270291cfbd6fb810cc30ef8fb1d9a60558ee7 /tests/phpunit/includes/GitInfoTest.php | |
parent | 44c06df91810074414899ae65fb3bbe3cca43fea (diff) | |
download | mediawikicore-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.php | 56 |
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() ); + } } |