Commit 998ea972 authored by Seblu's avatar Seblu
Browse files

Introducing a new way of selecting image

new syntax is available [repo/]image[:version]
first command updated is delete
parent 09edf41d
Loading
Loading
Loading
Loading
+36 −4
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ import time
import fnmatch
import datetime
import argparse
import re
import installsystems
import installsystems.tools as istools
from installsystems.printer import *
@@ -52,6 +53,24 @@ def select_one_repository(repoman):
        raise Exception("Please select only one repository")
    return repoman[0]

def select_image(name, repoman):
    '''
    Select and load a package image from a standard naming type

    Allowed type are a direct filename on filesystem
    or [repo/]image[:version]

    Return the repository as second argument
    '''
    if istools.isfile(name) and os.path.isfile(name):
        return PackageImage(name), None
    else:
        (repo, image, version) = re.match("((\w+)/)?(\w+)(:(\d+))?", name).group(2,3,5)
        if repo is None:
            return repoman.get(image, version)
        else:
            return repoman[repo].get(image, version), repoman[repo]

def c_new(parser, args):
    '''
    Create a new source image
@@ -96,8 +115,19 @@ def c_del(parser, args):
    Remove an image package from a repository
    '''
    repoman = load_repositories(args)
    repo = select_one_repository(repoman)
    repo.delete(args.image_name, args.image_version)
    for image in args.image:
        img, repo = select_image(image, repoman)
        if repo is None:
            raise Exception("You cannot delete an image outside a repository")
        if args.force:
            repo.delete(img.name, img.version)
        else:
            warn("The following opereation cannot be reversed!")
            out("You will delete %s v%s in repository %s" % (img.name,
                                                             img.version,
                                                             repo.config.name))
            if raw_input("Are you sure (yes)" ) == "yes":
                repo.delete(img.name, img.version)

def c_install(parser, args):
    '''
@@ -321,8 +351,10 @@ p_add.set_defaults(func=c_add)

# del command parser
p_del =  subparsers.add_parser("del", help=c_del.__doc__.lower())
p_del.add_argument("image_name")
p_del.add_argument("image_version")
p_del.add_argument("image", nargs="+",
                   help="image to delete")
p_del.add_argument("-f", "--force", action="store_true", default=False,
                   help="delete image without confirmation")
p_del.set_defaults(func=c_del)

# install command parser
+1 −1
Original line number Diff line number Diff line
@@ -574,7 +574,7 @@ class RepositoryManager(object):
        # search image in repos
        for repo in self.repos:
            if repo.has(name, version):
                return repo.get(name, version)
                return repo.get(name, version), repo
        raise Exception("Unable to find %s v%s" % (name, version))

    def show(self, verbose=False):