App::Multigit
This module allows you to run commands against a set of git modules in the same directory. It works like git submodules, except you don't actually have to deal with git submodules.
It ships with a single command, mg, which dispatches to all the configured
modules in the directory.
A file .mgconfig uses standard INI format to list the relevant modules:
[https://github.com/Author/Some-Module.git]
confkey=val
[https://github.com/Author/Some-Other-Module.git]
[ssh://my-git-server/Local-Module.git]
The repository's URL is the key to the section in the INI format. The dir key
can be used to specify its location:
[https://github.com/Author/Some-Module]
dir=alternative-location
By default, the final path part of the URL is used, minus the .git extension.
The module App::Multigit itself provides an interface into this config. See
the POD for details.
Commands
Commands are created like with git itself; the file mg-$cmd should exist and
be executable.
The command is run:
mg-command --workdir /absolute/directory/name/
This is the only interface between you and App::Multigit. For any other behaviour, simply use App::Multigit inside your script.
mg itself is only a thin wrapper. It checks the environment and then execs the
above. The command itself is required to do whatever it needs to do.
Commonly, the command will almost certainly want to run a git command for each
repository and deal with the results. The examples do this by means of
App::Multigit::each and an IO::Async::Process object.
The mg-branch example simply blurts back the output from a git command run on
each repository; the mg-closes example is more involved, only reporting those
repositories for which the output is relevant.
Help
The usage string of mg is accessed by running mg on its own, or mg help.
Running mg help command simply execs mg-command --help, so each command
should understand the help option and implement it.
The POD for App::Multigit will give you more information about how to actually
use the interface to write a command.