diff --git a/bin/is b/bin/is index 6540ad3ec8a5830e451ab7ad2b16eb41a99aeebe..b52e8deee6f68ae89b74519d501a9c16deb62389 100755 --- a/bin/is +++ b/bin/is @@ -237,23 +237,20 @@ def c_copy(parser, args): ''' Copy an image from a repository to another one ''' - args.repo_filter = args.repo_src + # load repositories repoman = load_repositories(args) - repo_src = select_one_repository(repoman) - args.repo_filter = args.repo_dst - repoman = load_repositories(args) - repo_dst = select_one_repository(repoman) - if args.image_version is None: - args.image_version = repo_src.last(args.image) - if args.image_version == -1: - raise Exception("Unable to find last version of %s" % args.image) - arrow("Copying %s v%s from %s to %s" % (args.image, args.image_version, - repo_src.config.name, repo_dst.config.name)) + srcrepo = repoman[args.repo_src] + dstrepo = repoman[args.repo_dst] + # load source image + srcimg = srcrepo.get(args.image, args.image_version) + # Advertise + arrow("Copying %s v%s from %s to %s" % (srcimg.name, + srcimg.version, + srcrepo.config.name, + dstrepo.config.name)) arrowlevel(1) - pkg = repo_src.get(args.image, args.image_version) - repo_dst.add(pkg) + dstrepo.add(srcimg) arrowlevel(-1) - arrow("Done") def c_help(parser, args): ''' diff --git a/installsystems/repository.py b/installsystems/repository.py index 2e4a94bacd0f50302d3209c28d1ebb79054cc043..54375bfa6c2e40f936652e66dc6aa68d56fe9ad5 100644 --- a/installsystems/repository.py +++ b/installsystems/repository.py @@ -240,10 +240,13 @@ class Repository(object): ''' return self.db.ask("SELECT name,version FROM image WHERE name = ? AND version = ? LIMIT 1", (name,version)).fetchone() is not None - def get(self, name, version): + def get(self, name, version=None): ''' Return an image from a name and version ''' + # is no version take the last + if version is None: + version = self.last(name) # get file md5 from db r = self.db.ask("select md5 from image where name = ? and version = ? limit 1", (name,version)).fetchone() @@ -483,7 +486,15 @@ class RepositoryManager(object): ''' Return a repostiory by its position in list ''' - return self.repos[key] + if type(key) == int: + return self.repos[key] + elif type(key) == str: + for repo in self.repos: + if repo.config.name == key: + return repo + raise Exception("No repository named: %s" % key) + else: + raise TypeError def register(self, config): '''