aboutsummaryrefslogtreecommitdiffstats
path: root/library/kzykhys/git/src/PHPGit/Git.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/kzykhys/git/src/PHPGit/Git.php')
-rw-r--r--library/kzykhys/git/src/PHPGit/Git.php308
1 files changed, 308 insertions, 0 deletions
diff --git a/library/kzykhys/git/src/PHPGit/Git.php b/library/kzykhys/git/src/PHPGit/Git.php
new file mode 100644
index 000000000..f952d6f1f
--- /dev/null
+++ b/library/kzykhys/git/src/PHPGit/Git.php
@@ -0,0 +1,308 @@
+<?php
+
+namespace PHPGit;
+
+use PHPGit\Command;
+use PHPGit\Exception\GitException;
+use Symfony\Component\Process\Process;
+use Symfony\Component\Process\ProcessBuilder;
+
+/**
+ * PHPGit - A Git wrapper for PHP5.3+
+ * ==================================
+ *
+ * [![Latest Unstable Version](https://poser.pugx.org/kzykhys/git/v/unstable.png)](https://packagist.org/packages/kzykhys/git)
+ * [![Build Status](https://travis-ci.org/kzykhys/PHPGit.png?branch=master)](https://travis-ci.org/kzykhys/PHPGit)
+ * [![Coverage Status](https://coveralls.io/repos/kzykhys/PHPGit/badge.png)](https://coveralls.io/r/kzykhys/PHPGit)
+ * [![SensioLabsInsight](https://insight.sensiolabs.com/projects/04f10b57-a113-47ad-8dda-9a6dacbb079f/mini.png)](https://insight.sensiolabs.com/projects/04f10b57-a113-47ad-8dda-9a6dacbb079f)
+ *
+ * Requirements
+ * ------------
+ *
+ * * PHP5.3
+ * * Git
+ *
+ * Installation
+ * ------------
+ *
+ * Update your composer.json and run `composer update`
+ *
+ * ``` json
+ * {
+ * "require": {
+ * "kzykhys/git": "dev-master"
+ * }
+ * }
+ * ```
+ *
+ * Basic Usage
+ * -----------
+ *
+ * ``` php
+ * <?php
+ *
+ * require __DIR__ . '/vendor/autoload.php';
+ *
+ * $git = new PHPGit\Git();
+ * $git->clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo');
+ * $git->setRepository('/path/to/repo');
+ * $git->remote->add('production', 'git://example.com/your/repo.git');
+ * $git->add('README.md');
+ * $git->commit('Adds README.md');
+ * $git->checkout('release');
+ * $git->merge('master');
+ * $git->push();
+ * $git->push('production', 'release');
+ * $git->tag->create('v1.0.1', 'release');
+ *
+ * foreach ($git->tree('release') as $object) {
+ * if ($object['type'] == 'blob') {
+ * echo $git->show($object['file']);
+ * }
+ * }
+ * ```
+ *
+ * @author Kazuyuki Hayashi <hayashi@valnur.net>
+ * @license MIT
+ *
+ * @method add($file, $options = array()) Add file contents to the index
+ * @method archive($file, $tree = null, $path = null, $options = array()) Create an archive of files from a named tree
+ * @method branch($options = array()) List both remote-tracking branches and local branches
+ * @method checkout($branch, $options = array()) Checkout a branch or paths to the working tree
+ * @method clone($repository, $path = null, $options = array()) Clone a repository into a new directory
+ * @method commit($message = '', $options = array()) Record changes to the repository
+ * @method config($options = array()) List all variables set in config file
+ * @method describe($committish = null, $options = array()) Returns the most recent tag that is reachable from a commit
+ * @method fetch($repository, $refspec = null, $options = array()) Fetches named heads or tags from one or more other repositories
+ * @method init($path, $options = array()) Create an empty git repository or reinitialize an existing one
+ * @method log($path = null, $options = array()) Returns the commit logs
+ * @method merge($commit, $message = null, $options = array()) Incorporates changes from the named commits into the current branch
+ * @method mv($source, $destination, $options = array()) Move or rename a file, a directory, or a symlink
+ * @method pull($repository = null, $refspec = null, $options = array()) Fetch from and merge with another repository or a local branch
+ * @method push($repository = null, $refspec = null, $options = array()) Update remote refs along with associated objects
+ * @method rebase($upstream = null, $branch = null, $options = array()) Forward-port local commits to the updated upstream head
+ * @method remote() Returns an array of existing remotes
+ * @method reset($commit = null, $paths = array()) Resets the index entries for all <paths> to their state at <commit>
+ * @method rm($file, $options = array()) Remove files from the working tree and from the index
+ * @method shortlog($commits = array()) Summarize 'git log' output
+ * @method show($object, $options = array()) Shows one or more objects (blobs, trees, tags and commits)
+ * @method stash() Save your local modifications to a new stash, and run git reset --hard to revert them
+ * @method status($options = array()) Show the working tree status
+ * @method tag() Returns an array of tags
+ * @method tree($branch = 'master', $path = '') List the contents of a tree object
+ */
+class Git
+{
+
+ /** @var Command\AddCommand */
+ public $add;
+
+ /** @var Command\ArchiveCommand */
+ public $archive;
+
+ /** @var Command\BranchCommand */
+ public $branch;
+
+ /** @var Command\CatCommand */
+ public $cat;
+
+ /** @var Command\CheckoutCommand */
+ public $checkout;
+
+ /** @var Command\CloneCommand */
+ public $clone;
+
+ /** @var Command\CommitCommand */
+ public $commit;
+
+ /** @var Command\ConfigCommand */
+ public $config;
+
+ /** @var Command\DescribeCommand */
+ public $describe;
+
+ // Not implemented yet
+ public $diff;
+
+ /** @var Command\FetchCommand */
+ public $fetch;
+
+ /** @var Command\InitCommand */
+ public $init;
+
+ /** @var Command\LogCommand */
+ public $log;
+
+ /** @var Command\MergeCommand */
+ public $merge;
+
+ /** @var Command\MvCommand */
+ public $mv;
+
+ /** @var Command\PullCommand */
+ public $pull;
+
+ /** @var Command\PushCommand */
+ public $push;
+
+ /** @var Command\RebaseCommand */
+ public $rebase;
+
+ /** @var Command\RemoteCommand */
+ public $remote;
+
+ /** @var Command\ResetCommand */
+ public $reset;
+
+ /** @var Command\RmCommand */
+ public $rm;
+
+ /** @var Command\ShortlogCommand */
+ public $shortlog;
+
+ /** @var Command\ShowCommand */
+ public $show;
+
+ /** @var Command\StashCommand */
+ public $stash;
+
+ /** @var Command\StatusCommand */
+ public $status;
+
+ /** @var Command\TagCommand */
+ public $tag;
+
+ /** @var Command\TreeCommand */
+ public $tree;
+
+ /** @var string */
+ private $bin = 'git';
+
+ /** @var string */
+ private $directory = '.';
+
+ /**
+ * Initializes sub-commands
+ */
+ public function __construct()
+ {
+ $this->add = new Command\AddCommand($this);
+ $this->archive = new Command\ArchiveCommand($this);
+ $this->branch = new Command\BranchCommand($this);
+ $this->cat = new Command\CatCommand($this);
+ $this->checkout = new Command\CheckoutCommand($this);
+ $this->clone = new Command\CloneCommand($this);
+ $this->commit = new Command\CommitCommand($this);
+ $this->config = new Command\ConfigCommand($this);
+ $this->describe = new Command\DescribeCommand($this);
+ $this->fetch = new Command\FetchCommand($this);
+ $this->init = new Command\InitCommand($this);
+ $this->log = new Command\LogCommand($this);
+ $this->merge = new Command\MergeCommand($this);
+ $this->mv = new Command\MvCommand($this);
+ $this->pull = new Command\PullCommand($this);
+ $this->push = new Command\PushCommand($this);
+ $this->rebase = new Command\RebaseCommand($this);
+ $this->remote = new Command\RemoteCommand($this);
+ $this->reset = new Command\ResetCommand($this);
+ $this->rm = new Command\RmCommand($this);
+ $this->shortlog = new Command\ShortlogCommand($this);
+ $this->show = new Command\ShowCommand($this);
+ $this->stash = new Command\StashCommand($this);
+ $this->status = new Command\StatusCommand($this);
+ $this->tag = new Command\TagCommand($this);
+ $this->tree = new Command\TreeCommand($this);
+ }
+
+ /**
+ * Calls sub-commands
+ *
+ * @param string $name The name of a property
+ * @param array $arguments An array of arguments
+ *
+ * @throws \BadMethodCallException
+ * @return mixed
+ */
+ public function __call($name, $arguments)
+ {
+ if (isset($this->{$name}) && is_callable($this->{$name})) {
+ return call_user_func_array($this->{$name}, $arguments);
+ }
+
+ throw new \BadMethodCallException(sprintf('Call to undefined method PHPGit\Git::%s()', $name));
+ }
+
+ /**
+ * Sets the Git binary path
+ *
+ * @param string $bin
+ *
+ * @return Git
+ */
+ public function setBin($bin)
+ {
+ $this->bin = $bin;
+
+ return $this;
+ }
+
+ /**
+ * Sets the Git repository path
+ *
+ * @var string $directory
+ *
+ * @return Git
+ */
+ public function setRepository($directory)
+ {
+ $this->directory = $directory;
+
+ return $this;
+ }
+
+ /**
+ * Returns version number
+ *
+ * @return mixed
+ */
+ public function getVersion()
+ {
+ $process = $this->getProcessBuilder()
+ ->add('--version')
+ ->getProcess();
+
+ return $this->run($process);
+ }
+
+ /**
+ * Returns an instance of ProcessBuilder
+ *
+ * @return ProcessBuilder
+ */
+ public function getProcessBuilder()
+ {
+ return ProcessBuilder::create()
+ ->setPrefix($this->bin)
+ ->setWorkingDirectory($this->directory);
+ }
+
+ /**
+ * Executes a process
+ *
+ * @param Process $process The process to run
+ *
+ * @throws Exception\GitException
+ * @return mixed
+ */
+ public function run(Process $process)
+ {
+ $process->run();
+
+ if (!$process->isSuccessful()) {
+ throw new GitException($process->getErrorOutput(), $process->getExitCode(), $process->getCommandLine());
+ }
+
+ return $process->getOutput();
+ }
+
+} \ No newline at end of file