Skip to content

Commit 88e4c31

Browse files
committed
Added support for Admin::mirrorTo
1 parent 777cc9c commit 88e4c31

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

src/Gitonomy/Git/Admin.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,26 @@ public static function init($path, $bare = true, LoggerInterface $logger = null)
5454

5555
public static function cloneTo($path, $url, $bare = true, LoggerInterface $logger = null)
5656
{
57-
$builder = ProcessBuilder::create(array('git', 'clone', '-q'));
57+
$options = array();
5858

5959
if ($bare) {
60-
$builder->add('--bare');
60+
$options[] = '--bare';
61+
}
62+
63+
return static::cloneRepository($path, $url, $options, $logger);
64+
}
65+
66+
public static function mirrorTo($path, $url, LoggerInterface $logger = null)
67+
{
68+
return static::cloneRepository($path, $url, array('--mirror'), $logger);
69+
}
70+
71+
private static function cloneRepository($path, $url, array $options = array(), LoggerInterface $logger = null)
72+
{
73+
$builder = ProcessBuilder::create(array('git', 'clone', '-q'));
74+
75+
foreach ($options as $value) {
76+
$builder->add($value);
6177
}
6278

6379
$builder->add($url);

tests/Gitonomy/Git/Tests/AdminTest.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,35 @@ public function testClone($repository)
7171

7272
if ($repository->isBare()) {
7373
$this->assertEquals($newDir, $new->getGitDir());
74-
$this->assertTrue(in_array('refs/heads/new-feature', $newRefs));
74+
$this->assertTrue(in_array('refs/heads/new-feature', $newRefs));
7575
} else {
7676
$this->assertEquals($newDir.'/.git', $new->getGitDir());
7777
$this->assertEquals($newDir, $new->getWorkingDir());
7878
}
7979
}
8080

81+
/**
82+
* @dataProvider provideFoobar
83+
*/
84+
public function testMirror($repository)
85+
{
86+
$newDir = self::createTempDir();
87+
$new = Admin::mirrorTo($newDir, $repository->getGitDir());
88+
self::registerDeletion($new);
89+
90+
$newRefs = array_keys($new->getReferences()->getAll());
91+
92+
$this->assertTrue(in_array('refs/heads/master', $newRefs));
93+
$this->assertTrue(in_array('refs/tags/0.1', $newRefs));
94+
$this->assertEquals($newDir, $new->getGitDir());
95+
96+
if ($repository->isBare()) {
97+
$this->assertTrue(in_array('refs/heads/new-feature', $newRefs));
98+
} else {
99+
$this->assertTrue(in_array('refs/remotes/origin/new-feature', $newRefs));
100+
}
101+
}
102+
81103
/**
82104
* @expectedException RuntimeException
83105
*/

0 commit comments

Comments
 (0)