Robo task wrapper for Git commands
, (*1)
The main additional feature compare to the ::taskExec() is that this tasks parse
the stdOutput/stdError and make the result available for the next tasks by
putting it into the \Robo\State\Data
instance which belongs to the pipeline., (*2)
Install
Run composer require --dev sweetchuck/robo-git
, (*3)
Task - taskGitBranchList()
<?php
declare(strict_types = 1);
class RoboFileExample extends \Robo\Tasks
{
use \Sweetchuck\Robo\Git\GitTaskLoader;
public function gitBranches(string $dir = '.')
{
return $this
->collectionBuilder()
->addTask(
$this
->taskGitBranchList()
->setWorkingDirectory($dir)
// Available options:
// --all
// --color
// --contains
// --format
// --list
// --merged
// --points-at
// --sort
)
->addCode(function (\Robo\State\Data $data): int {
// Here you can do whatever you want with the branches.
$output = $this->output();
foreach ($data['gitBranches'] as $longName => $branch) {
$output->writeln($longName);
foreach ($branch as $key => $value) {
$output->writeln(" $key = " . var_export($value, true));
}
}
return 0;
});
}
}
Run: $ vendor/bin/robo git:branches
, (*4)
Example output:, (*5)
refs/heads/1.x
> isCurrentBranch = true
> push = 'refs/remotes/upstream/1.x'
> push.short = 'upstream/1.x'
> refName = 'refs/heads/1.x'
> refName.short = '1.x'
> track = ''
> track.ahead = NULL
> track.behind = NULL
> track.gone = false
> upstream = 'refs/remotes/upstream/1.x'
> upstream.short = 'upstream/1.x'
Task - taskGitConfigGet()
<?php
declare(strict_types = 1);
class RoboFileExample extends \Robo\Tasks
{
use \Sweetchuck\Robo\Git\GitTaskLoader;
/**
* @command git:config:get
*/
public function gitConfigGet(string $name)
{
return $this
->collectionBuilder()
->addTask(
$this
->taskGitConfigGet()
->setName($name)
)
->addCode(function (\Robo\State\Data $data) use ($name): int {
$key = "git.config.$name";
$this->output()->writeln("$key = {$data[$key]}");
return 0;
});
}
}
Run: $ vendor/bin/robo git:config:get
, (*6)
Example output:, (*7)
git.config.user.name = Andor
, (*8)
Task - taskGitCurrentBranch()
<?php
declare(strict_types = 1);
class RoboFileExample extends \Robo\Tasks
{
use \Sweetchuck\Robo\Git\GitTaskLoader;
/**
* @command git:current-branch
*/
public function gitCurrentBranch()
{
return $this
->collectionBuilder()
->addTask($this->taskGitCurrentBranch())
->addCode(function (\Robo\State\Data $data): int {
$this->output()->writeln("long = {$data['gitCurrentBranch.long']}");
$this->output()->writeln("short = {$data['gitCurrentBranch.short']}");
return 0;
});
}
}
Run: $ vendor/bin/robo git:current-branch
, (*9)
Example output:, (*10)
long = refs/heads/1.x
short = 1.x, (*11)
Task - taskGitListFiles()
<?php
declare(strict_types = 1);
class RoboFileExample extends \Robo\Tasks
{
use \Sweetchuck\Robo\Git\GitTaskLoader;
/**
* @command git:list-files
*/
public function gitListFiles()
{
return $this
->collectionBuilder()
->addTask(
$this
->taskGitListFiles()
->setPaths(['R*.md'])
// Available options:
// -t
// -v
// -z
// --cached
// --deleted
// --directory
// --empty-directory
// --eol
// --exclude
// --exclude-file
// --full-name
// --killed
// --ignored
// --modified
// --others
// --stage
// --resolve-undo
// --unmerged
)
->addCode(function (\Robo\State\Data $data): int {
$output = $this->output();
/** * @var \Sweetchuck\Robo\Git\ListFilesItem $file */
foreach ($data['files'] as $filePath => $file) {
$output->writeln($filePath);
$output->writeln(' status = ' . var_export($file->status, true));
$output->writeln(' objectName = ' . var_export($file->objectName, true));
$output->writeln(' eolInfoI = ' . var_export($file->eolInfoI, true));
$output->writeln(' eolInfoW = ' . var_export($file->eolInfoW, true));
$output->writeln(' eolAttr = ' . var_export($file->eolAttr, true));
$output->writeln(' fileName = ' . var_export($file->fileName, true));
}
return 0;
});
}
}
Run: $ vendor/bin/robo git:list-files
, (*12)
Example output:, (*13)
README.md
> status = NULL
> objectName = NULL
> eolInfoI = NULL
> eolInfoW = NULL
> eolAttr = NULL
> fileName = 'README.md'
Task - taskGitListChangedFiles()
@todo, (*14)
Task - taskGitListStagedFiles()
@todo, (*15)
Task - taskGitNumOfCommitsBetween()
@todo, (*16)
Task - taskGitReadStagedFiles()
@todo, (*17)
Task - taskGitRemoteList()
@todo, (*18)
Task - taskGitStatus()
@todo, (*19)
Task - taskGitTagList()
@todo, (*20)
Task - taskGitTopLevel()
@todo, (*21)