From 3bb171165548fc185c6960b3f230060f071fe8b2 Mon Sep 17 00:00:00 2001
From: Seblu <sebastien.luttringer@smartjog.com>
Date: Wed, 24 Aug 2011 12:03:06 +0200
Subject: [PATCH] fix copy implementation.

---
 bin/is                       | 25 +++++++++++--------------
 installsystems/repository.py | 15 +++++++++++++--
 2 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/bin/is b/bin/is
index 6540ad3..b52e8de 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 2e4a94b..54375bf 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):
         '''
-- 
GitLab