diff --git a/gitlab_docker_autodep/main.py b/gitlab_docker_autodep/main.py index 58f804f7c7180fc9bc95a44c106ddf0b3242f9d1..9a14950473c516205d22a042177e2b5eb48c2c5a 100644 --- a/gitlab_docker_autodep/main.py +++ b/gitlab_docker_autodep/main.py @@ -12,6 +12,10 @@ from .rebuild import rebuild_deps from .server import run_app +def _fmtdesc(s): + return s.strip() + + def main(): parser = argparse.ArgumentParser( description='Rebuild Docker images on a Gitlab instance.') @@ -47,8 +51,22 @@ def main(): 'list-projects', parents=[common_parser], help='list projects', - description='List all projects and their branches on the Gitlab ' - 'instance.') + formatter_class=argparse.RawDescriptionHelpFormatter, + description=_fmtdesc(''' +List all projects and their branches on the Gitlab instance. + +The output is a list of project paths with all their branches, separated +by a colon, one per line. Since the Gitlab 'search' API is quite +coarse, you can then filter the output for specific projects or branches +using 'grep', e.g.: + + gitlab-deps list-projects | grep ^path/to/my/group/ + +or + + gitlab-deps list-projects | grep ':master$' + +''')) list_projects_parser.add_argument( '--search', help='Search query used to filter project list on the server side') @@ -58,11 +76,25 @@ def main(): 'deps', parents=[common_parser], help='build dependency map', - description='Generate a map of dependencies between projects on a ' - 'Gitlab instance.') - deps_parser.add_argument( - '--docker', action='store_true', - help='Output dependencies between Docker images, not Gitlab projects') + formatter_class=argparse.RawDescriptionHelpFormatter, + description=_fmtdesc(''' +Generate a map of dependencies between projects on a +Gitlab instance. + +The input (on standard input) must consist of a list of projects along +with their branches, separated by a colon, one per line. If the branch +is unspecified, 'master' is assumed. + +The output consists of pairs of project / dependency (so, these are +'forward' dependencies), for all projects/branches specified in the +input. + +To obtain a list of reverse dependencies, one can simply swap the +columns in the output, e.g.: + + gitlab-deps deps < project.list | awk '{print $2, $1}' + +''')) # Setup pipeline hooks on the specified projects. set_hooks_parser = subparsers.add_parser(