diff --git a/bin/is b/bin/is index 3ad594a60a913f8214f48e2c6222e62510ebbcd7..c6a12d79968a207e6fd48f78a0df468911a3157e 100755 --- a/bin/is +++ b/bin/is @@ -216,11 +216,20 @@ def c_copy(args): ''' repoman = load_repositories(args) dstrepo = repoman[args.repository] - for srcimg, srcrepo in get_images(args.pattern, repoman, local=False, min=1): - arrow("Copying %s v%s from repository %s to %s" % (srcimg.name, - srcimg.version, - srcrepo.config.name, - dstrepo.config.name)) + todo = list(get_images(args.pattern, repoman, local=False, min=1)) + # check user really want to this + if not args.force: + out("You will copy the following images:") + for img, repo in todo: + out(" %s/%s:%s" % (repo.config.name, img.name, img.version)) + out("Inside repository: #l##b#%s#R#" % dstrepo.config.name) + if not confirm(): + raise Exception("Aborted!") + # copy it for real + for srcimg, srcrepo in todo: + arrow("Copying %s v%s from repository %s to %s" % + (srcimg.name, srcimg.version, + srcrepo.config.name, dstrepo.config.name)) arrowlevel(1) dstrepo.add(srcimg) arrowlevel(-1) @@ -509,6 +518,8 @@ def arg_parser_init(): p.set_defaults(func=c_clean) # copy command parser p = subparser.add_parser("copy", help=c_copy.__doc__.lower()) + p.add_argument("-f", "--force", action="store_true", + help="copy image without confirmation") p.add_argument("pattern", nargs="+", help="[repository/]image[:version]") p.add_argument("repository", help="destination repository") diff --git a/completion/bash/is b/completion/bash/is index 303c2b8ba24facfea3cfd2be44bf19b10792269b..aedcf63d7c612a3214a79b6607d6ffac9e0d8ff5 100644 --- a/completion/bash/is +++ b/completion/bash/is @@ -94,7 +94,7 @@ _is() { _local_repo ;; copy) - [[ "$cur" == -* ]] && _opt '-h --help' && return 0 + [[ "$cur" == -* ]] && _opt '-h --help -f --force' && return 0 _count_args (( args == 2 )) && _remote_image (( args > 2 )) && _remote_image && _local_repo