summaryrefslogtreecommitdiffstats
path: root/src/GitHubPagesDeploy/GitHubPagesDeploy.php
blob: bcf2fdeec28ea6d1acc5f6ae32e15014ec2b9b16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php

namespace GitHubPagesDeploy;

use GitWrapper\GitWrapper;
use GitWrapper\GitWorkingCopy;

class GitHubPagesDeploy
{
    protected $repositories;

    public function __construct($repositories = array())
    {
        $this->repositories = $repositories;
    }

    public static function fromFile($file = 'gh-pages-deploy.json')
    {
        $results = array();

        if (is_file($file)) {
            $contents = file_get_contents($file);
            $results = json_decode($contents);
        }

        return new GitHubPagesDeploy($results);
    }

    public function update()
    {
        // Create the wrapper.
        $wrapper = new GitWrapper();
        $wrapper->streamOutput();

        foreach ($this->repositories as $dir => $repo) {
            // Build our git interface.
            $git = null;
            if (!is_dir($dir)) {
                $git = $wrapper->cloneRepository($repo, $dir);
            }
            else {
                $git = new GitWorkingCopy($wrapper, $dir);
            }

            // Fetch all the latest.
            $git->fetch('--all');

            // Remove any local changes.
            $git->reset(array('hard' => true));

            // Clean up the repository.
            $git->run(array('clean', array('d' => TRUE, 'f' => TRUE)));

            // Ensure we are on the correct branch.
            $git->checkout('gh-pages', array('force' => TRUE));

            // Finally, pull in the changes.
            $git->pull();
        }
    }

    public function getRepositories()
    {
        return $this->repositories;
    }
}